Pular para o conteúdo

Gerar correspondência de fragmentos GraphQL — Numio

Monta o mapa possibleTypes a partir de um schema GraphQL usando @graphql-codegen/fragment-matcher. Cada interface e union é listada com os tipos de objeto que a implementam ou pertencem a ela, pronta para o InMemoryCache do Apollo Client.

Configurar InMemoryCache({ possibleTypes }) para que fragments sobre interfaces ou unions correspondam corretamente no Apollo Client 3.

GraphQL Schema

Fragment Matcher

Quando usar

  • Configurar InMemoryCache({ possibleTypes }) para que fragments sobre interfaces ou unions correspondam corretamente no Apollo Client 3.
  • Regerar o mapa possibleTypes depois de adicionar um novo tipo a uma union, sem rodar a CLI do codegen.

Como usar

  1. Cole no editor GraphQL Schema um schema que contenha definições interface ou union.
  2. Confira o objeto possibleTypes gerado; tipos que não fazem parte de uma interface ou union não aparecem.
  3. Salve como arquivo .ts e passe o possibleTypes do export padrão para o InMemoryCache.

Schema 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

Detalhes e limitações

Apenas o schema é usado; esta página não tem editor Document.

A saída é TypeScript: uma interface PossibleTypesResultData, uma constante de resultado tipada e um export padrão.

Um schema sem interfaces ou unions produz um objeto possibleTypes vazio. A geração roda em um Web Worker no seu navegador.

FAQ

Este é o antigo formato IntrospectionFragmentMatcher?

Não. A saída usa o formato possibleTypes (nome do supertipo mapeado para um array de nomes de subtipos) usado pelo Apollo Client 3, não o formato de resultado de introspecção do Apollo Client 2.

Como uso a saída com o Apollo Client?

Importe o export padrão e passe result.possibleTypes para new InMemoryCache({ possibleTypes }).

Especificações e referências