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.
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
- Cole no editor GraphQL Schema um schema que contenha definições interface ou union.
- Confira o objeto possibleTypes gerado; tipos que não fazem parte de uma interface ou union não aparecem.
- 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 resultDetalhes 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 }).