Generar un fragment matcher de GraphQL — Numio
Construye el mapa possibleTypes a partir de un esquema GraphQL con @graphql-codegen/fragment-matcher. Cada interface y union aparece con los tipos de objeto que la implementan o pertenecen a ella, listo para el InMemoryCache de Apollo Client.
Configurar InMemoryCache({ possibleTypes }) para que los fragments sobre interfaces o unions coincidan correctamente en Apollo Client 3.
Cuándo usarla
- Configurar InMemoryCache({ possibleTypes }) para que los fragments sobre interfaces o unions coincidan correctamente en Apollo Client 3.
- Regenerar el mapa possibleTypes tras añadir un tipo nuevo a una union, sin ejecutar la CLI de codegen.
Cómo usarla
- Pega en el editor GraphQL Schema un esquema que contenga definiciones interface o union.
- Revisa el objeto possibleTypes generado; los tipos que no forman parte de ninguna interface o union no aparecen.
- Guárdalo como archivo .ts y pasa el possibleTypes del export por defecto a InMemoryCache.
Esquema 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 resultDetalles y limitaciones
Solo se usa el esquema; esta página no tiene editor Document.
La salida es TypeScript: una interfaz PossibleTypesResultData, una constante de resultado tipada y un export por defecto.
Un esquema sin interfaces ni unions produce un objeto possibleTypes vacío. La generación se ejecuta en un Web Worker de tu navegador.
FAQ
¿Es el antiguo formato IntrospectionFragmentMatcher?
No. La salida usa la forma possibleTypes (nombre del supertipo asignado a un array de nombres de subtipos) que usa Apollo Client 3, no el formato de resultado de introspección de Apollo Client 2.
¿Cómo uso la salida con Apollo Client?
Importa el export por defecto y pasa result.possibleTypes a new InMemoryCache({ possibleTypes }).