graphprotocol / graphprotocol/hypergraph

optional/required fields behaviour

Abierto
#84 6 comentarios 0 reacciones 1 asignado Ver en GitHub

@nikgraf ya está trabajando en esto.

Desde el 9/1/2025.

Schema SDK
Lenguaje dominante
TypeScript
Estrellas
22
Forks
12
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

We should decide how the schema in the framework should behave. In GRC-20 every field except for id, Created at, Updated At, Created by, Versions are optional.

Here our options. For simplicity I would focus on createEntity and useQuery. With this example schema:

{
  Todo: {
    name: type.Text,
    completed: type.Checkbox,
  },
}
createEntity({ name: "Setup call", completed: true }); // valid call with all attributes

const result = useQuery({ types: ['Todo']});
/*
[
  { id: "abc", name: "Setup call", completed: true },
  { id: "abc", name: "Draft post", completed: false }
]
*/

Everything always optional

// would be valid and `completed` would just not be set
createEntity({ name: "Setup call" });

const result = useQuery({ types: ['Todo']});
/* returns all entities with the types regardless if they comply to the schema
[
  { id: "abc", name: "Setup call" },
  { id: "abc", completed: false }
]
*/

Everything always required

// valid
createEntity({ name: "Setup call", completed: true });
// would NOT be valid and fail to create the todo
createEntity({ name: "Draft post" });

const result = useQuery({ types: ['Todo']});
/* returns only entities where the entry complies to the schema. Entires like `{ id: "abc", completed: false }` are filtered out
[
  { id: "abc", name: "Setup call", completed: true },
]
*/

Developers can decided

Schema:

{
  Todo: {
    name: type.Text,
    completed: type.Checkbox,
    dueUntil: type.Date({ required: false }),
  },
}
createEntity({ name: "Setup call", completed: false }); // valid
createEntity({ name: "Draft post", completed: false, dueUntil: "2025-02-10" }); // valid
createEntity({ name: "Do laundry" }); // would NOT be valid and fail to create the todo

const result = useQuery({ types: ['Todo']});
/* returns only entities where the entry complies to the schema. Entires like `{ id: "abc", completed: false }` are filtered out
[
  { id: "abc", name: "Setup call", completed: false },
  { id: "abc", name: "Draft post", completed: false, dueUntil: "2025-02-10" },
]
*/

Other suggestions

Feel free to add your options here …

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.