Перейти к содержимому

Конвертировать GraphQL в AST схемы — Numio

Разбирает GraphQL SDL, строит схему и печатает её обратно как единую нормализованную схему с помощью @graphql-codegen/schema-ast. Расширения типов сливаются с базовыми типами, а описания печатаются как блочные строки.

Собрать блоки extend type, разбросанные по нескольким файлам, в один schema.graphql для ревью или инструментов.

GraphQL Schema

Schema AST

Когда пригодится

  • Собрать блоки extend type, разбросанные по нескольким файлам, в один schema.graphql для ревью или инструментов.
  • Нормализовать написанный вручную SDL в канонический печатный формат перед сравнением двух версий схемы.

Как пользоваться

  1. Вставьте один или несколько фрагментов SDL, включая блоки extend type, в редактор GraphQL Schema.
  2. Проверьте напечатанный результат: поля расширений добавлены в исходный тип, а описания стали блоками """.
  3. Скопируйте вывод и сохраните его как .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 в браузере, затем форматируется GraphQL-парсером Prettier.

FAQ

Выводит ли он JSON AST?

Нет. Несмотря на название, результат — напечатанный GraphQL SDL, а не JSON DocumentNode. Если нужен JSON, используйте страницу JSON интроспекции.

Что происходит с комментариями #?

Комментарии не входят в схему и теряются при её печати. Чтобы сохранить документацию, используйте строки "description".

Может ли он слить extend type с базовым типом?

Да. Расширения применяются к базовому типу, поэтому вывод содержит один type Query со всеми полями.

Спецификации и справка