Pular para o conteúdo

Converter um esquema GraphQL em AST — Numio

Faz o parse de SDL de GraphQL, monta um schema e o imprime de volta como um único schema normalizado com @graphql-codegen/schema-ast. Extensões de tipo são mescladas aos tipos base e as descrições são impressas como block strings.

Mesclar blocos extend type espalhados por vários arquivos em um único schema.graphql para revisão ou ferramentas.

GraphQL Schema

Schema AST

Quando usar

  • Mesclar blocos extend type espalhados por vários arquivos em um único schema.graphql para revisão ou ferramentas.
  • Normalizar SDL escrito à mão no formato impresso canônico antes de comparar duas versões do schema.

Como usar

  1. Cole um ou mais fragmentos de SDL, incluindo blocos extend type, no editor GraphQL Schema.
  2. Confira o resultado impresso: os campos das extensões são adicionados ao tipo original e as descrições viram blocos """.
  3. Copie a saída e salve-a como arquivo .graphql.

Schema GraphQL

extend type Query {
  me: User
}

type Query {
  ping: String
}

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

Schema impresso (SDL)

type Query {
  me: User
  ping: String
}

type User {
  id: ID!

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

Detalhes e limitações

A ordem dos campos pode mudar: neste exemplo, os campos de um bloco extend type foram impressos antes dos campos do próprio tipo base.

Diretivas de campo como @deprecated(reason: ...) são mantidas no SDL impresso.

O schema é montado e impresso em um Web Worker no seu navegador e depois formatado com o parser GraphQL do Prettier.

FAQ

Ele gera um AST em JSON?

Não. Apesar do nome, o resultado é SDL de GraphQL impresso, não um DocumentNode em JSON. Use a página de JSON de introspecção se precisar de JSON.

O que acontece com os comentários #?

Comentários não fazem parte do schema e são descartados quando o schema é impresso. Use strings "description" para manter a documentação.

Ele consegue mesclar extend type no tipo base?

Sim. As extensões são aplicadas ao tipo base, então a saída contém um único type Query com todos os campos.

Especificações e referências