Ce que fait cet outil
Un échantillon JSON devient des types GraphQL SDL, un par objet.
{ "id": 1, "name": "Ada", "tags": ["admin"], "address": { "city": "Paris" } }
type Root {
id: Int!
name: String!
tags: [String!]!
address: Address!
}
type Address {
city: String!
}
[String!]! se lit de l’extérieur vers l’intérieur : la liste n’est jamais nulle, et aucun élément ne l’est non plus. Les deux moitiés viennent de l’échantillon, qui avait une liste et des chaînes dedans.
Des types seulement — ce n’est pas encore un schéma
Pas de Query, pas de Mutation, pas de directives. Une charge JSON dit à quoi ressemblent les données, pas quels champs un serveur expose ni comment ils s’appellent. Ajoutez le point d’entrée vous-même :
type Query {
root: Root!
}
Sans lui, le fichier décrit des types qu’on ne peut demander à personne.
Ce que le SDL ne sait pas dire est nommé, pas feint
nullet les valeurs inconnues deviennent un scalaireJSONcustom, déclaré en tête et laissé à votre implémentation. Le SDL n’a pas de type « n’importe quoi ».- Un tableau hétérogène devient
[JSON]!pour la même raison : une liste de formes mêlées n’est pas un type liste GraphQL. - Un entier hors 32 bits devient
BigInt, un autre scalaire custom. L’Intde GraphQL est signé sur 32 bits : un identifiant à onze chiffres n’y est pas représentable, et un serveur qui le renvoie lève à la sérialisation. Il sortaitInt!malgré tout ; c’était un vrai défaut, trouvé en écrivant cette page et corrigé. - Un objet vide est refusé.
type A {}n’est pas du SDL valide — un type doit définir au moins un champ — donc la conversion s’arrête et nomme le type plutôt que de vous rendre un schéma qu’aucun serveur n’analysera. Trouvé et corrigé ici également.
Les noms sont réparés, les collisions séparées
Un nom GraphQL n’admet que lettres, chiffres et _, et ne commence pas par un chiffre. content-type devient content_type, 2fa devient _2fa. Quand deux noms réparés se rencontrent dans un même type, le second est suffixé : rien n’est fondu en silence.
Un scalaire à la racine — 42, "texte" — est refusé : le SDL décrit des types objets, et il n’y a rien à décrire.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.