Zum Inhalt springen

GraphQL-Schema in AST umwandeln — Numio

Parst GraphQL-SDL, baut ein Schema und gibt es mit @graphql-codegen/schema-ast als ein einziges normalisiertes Schema wieder aus. Typerweiterungen werden in ihre Basistypen zusammengeführt und Beschreibungen als Block-Strings ausgegeben.

Über mehrere Dateien verteilte extend type-Blöcke für Review oder Tools zu einer schema.graphql zusammenführen.

GraphQL Schema

Schema AST

Wann sie hilft

  • Über mehrere Dateien verteilte extend type-Blöcke für Review oder Tools zu einer schema.graphql zusammenführen.
  • Handgeschriebene SDL in das kanonische Ausgabeformat normalisieren, bevor du zwei Schemaversionen vergleichst.

Anwendung

  1. Füge ein oder mehrere SDL-Fragmente, einschließlich etwaiger extend type-Blöcke, in den Editor GraphQL Schema ein.
  2. Prüfe das ausgegebene Ergebnis: Erweiterungsfelder werden dem ursprünglichen Typ hinzugefügt, und Beschreibungen werden zu """-Blöcken.
  3. Kopiere die Ausgabe und speichere sie als .graphql-Datei.

GraphQL-Schema

extend type Query {
  me: User
}

type Query {
  ping: String
}

type User {
  id: ID!
  "Display name"
  name: String @deprecated(reason: "Use fullName")
}

Ausgegebenes Schema (SDL)

type Query {
  me: User
  ping: String
}

type User {
  id: ID!

  """
  Display name
  """
  name: String @deprecated(reason: "Use fullName")
}

Details und Einschränkungen

Die Feldreihenfolge kann sich ändern: In diesem Beispiel wurden die Felder aus einem extend type-Block vor den eigenen Feldern des Basistyps ausgegeben.

Felddirektiven wie @deprecated(reason: ...) bleiben in der ausgegebenen SDL erhalten.

Das Schema wird in einem Web Worker im Browser gebaut und ausgegeben und anschließend mit dem GraphQL-Parser von Prettier formatiert.

FAQ

Gibt es einen JSON-AST aus?

Nein. Trotz des Namens ist das Ergebnis ausgegebene GraphQL-SDL, kein JSON-DocumentNode. Nutze die Seite für Introspection-JSON, wenn du JSON brauchst.

Was passiert mit #-Kommentaren?

Kommentare gehören nicht zum Schema und gehen bei der Ausgabe verloren. Verwende "description"-Strings, um Dokumentation zu erhalten.

Kann es extend type in den Basistyp zusammenführen?

Ja. Erweiterungen werden auf den Basistyp angewendet, sodass die Ausgabe einen einzigen type Query mit allen Feldern enthält.

Spezifikationen und Referenzen