GraphQLからスキーマASTへの変換 — Numio
@graphql-codegen/schema-ast で GraphQL SDL をパースしてスキーマを構築し、正規化された 1 つのスキーマとして出力し直します。型拡張はベースの型にマージされ、description はブロック文字列として出力されます。
複数ファイルに分かれた extend type ブロックを 1 つの schema.graphql にまとめ、レビューやツールに使う。
こんなときに使えます
- 複数ファイルに分かれた extend type ブロックを 1 つの schema.graphql にまとめ、レビューやツールに使う。
- 2 つのバージョンのスキーマを diff する前に、手書きの SDL を正規の出力形式にそろえる。
使い方
- extend type ブロックを含む 1 つ以上の SDL 断片を GraphQL Schema エディターに貼り付けます。
- 出力結果を確認します。拡張のフィールドは元の型に追加され、description は """ ブロックになります。
- 出力をコピーし、.graphql ファイルとして保存します。
GraphQL スキーマ
extend type Query {
me: User
}
type Query {
ping: String
}
type User {
id: ID!
"Display name"
name: String @deprecated(reason: "Use fullName")
}出力されたスキーマ(SDL)
type Query {
me: User
ping: String
}
type User {
id: ID!
"""
Display name
"""
name: String @deprecated(reason: "Use fullName")
}仕様と制限
フィールドの順序が変わることがあります。この例では、extend type ブロックのフィールドがベースの型自身のフィールドより前に出力されました。
@deprecated(reason: ...) などのフィールドディレクティブは出力される SDL に残ります。
スキーマはブラウザの Web Worker で構築・出力され、そのあと Prettier の GraphQL パーサーで整形されます。
FAQ
JSON の AST を出力しますか?
いいえ。名前とは異なり、結果は JSON の DocumentNode ではなく、出力された GraphQL SDL です。JSON が必要なら introspection JSON のページを使ってください。
# コメントはどうなりますか?
コメントはスキーマの一部ではないため、スキーマの出力時に削除されます。ドキュメントを残すには "description" 文字列を使ってください。
extend type をベースの型にマージできますか?
できます。拡張はベースの型に適用されるので、出力にはすべてのフィールドを持つ type Query が 1 つだけ含まれます。