Генератор сопоставителя фрагментов GraphQL — Numio
Строит карту possibleTypes из GraphQL-схемы с помощью @graphql-codegen/fragment-matcher. Каждый interface и union перечисляется вместе с объектными типами, которые его реализуют или входят в него, — готово для InMemoryCache в Apollo Client.
Настроить InMemoryCache({ possibleTypes }), чтобы фрагменты на interface или union корректно сопоставлялись в Apollo Client 3.
Когда пригодится
- Настроить InMemoryCache({ possibleTypes }), чтобы фрагменты на interface или union корректно сопоставлялись в Apollo Client 3.
- Пересоздать карту possibleTypes после добавления нового типа в union, не запуская CLI codegen.
Как пользоваться
- Вставьте схему с определениями interface или union в редактор GraphQL Schema.
- Изучите сгенерированный объект possibleTypes; типы, не входящие ни в interface, ни в union, в нём не появляются.
- Сохраните его как .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 }).