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

Генератор сопоставителя фрагментов GraphQL — Numio

Строит карту possibleTypes из GraphQL-схемы с помощью @graphql-codegen/fragment-matcher. Каждый interface и union перечисляется вместе с объектными типами, которые его реализуют или входят в него, — готово для InMemoryCache в Apollo Client.

Настроить InMemoryCache({ possibleTypes }), чтобы фрагменты на interface или union корректно сопоставлялись в Apollo Client 3.

GraphQL Schema

Fragment Matcher

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

  • Настроить InMemoryCache({ possibleTypes }), чтобы фрагменты на interface или union корректно сопоставлялись в Apollo Client 3.
  • Пересоздать карту possibleTypes после добавления нового типа в union, не запуская CLI codegen.

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

  1. Вставьте схему с определениями interface или union в редактор GraphQL Schema.
  2. Изучите сгенерированный объект possibleTypes; типы, не входящие ни в interface, ни в union, в нём не появляются.
  3. Сохраните его как .ts-файл и передайте possibleTypes из экспорта по умолчанию в InMemoryCache.

GraphQL-схема

interface Node {
  id: ID!
}
type User implements Node {
  id: ID!
  name: String!
}
type Post implements Node {
  id: ID!
  title: String!
}
union SearchResult = User | Post
type Query {
  search(term: String!): [SearchResult!]!
}

possibleTypes (TypeScript)

export interface PossibleTypesResultData {
  possibleTypes: {
    [key: string]: string[]
  }
}
const result: PossibleTypesResultData = {
  possibleTypes: {
    Node: ["User", "Post"],
    SearchResult: ["User", "Post"],
  },
}
export default result

Подробности и ограничения

Используется только схема; редактора Document на этой странице нет.

Вывод — TypeScript: интерфейс PossibleTypesResultData, типизированная константа result и экспорт по умолчанию.

Схема без interface и union даёт пустой объект possibleTypes. Генерация выполняется в Web Worker в браузере.

FAQ

Это старый формат IntrospectionFragmentMatcher?

Нет. Вывод использует структуру possibleTypes из Apollo Client 3 (имя супертипа сопоставлено с массивом имён подтипов), а не формат результата интроспекции Apollo Client 2.

Как использовать вывод с Apollo Client?

Импортируйте экспорт по умолчанию и передайте result.possibleTypes в new InMemoryCache({ possibleTypes }).

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