Aller au contenu

Générer un outil de correspondance des fragments GraphQL — Numio

Construit la table possibleTypes à partir d'un schéma GraphQL avec @graphql-codegen/fragment-matcher. Chaque interface et union est listée avec les types objet qui l'implémentent ou en font partie, prête pour l'InMemoryCache d'Apollo Client.

Configurer InMemoryCache({ possibleTypes }) pour que les fragments sur des interfaces ou des unions correspondent correctement dans Apollo Client 3.

GraphQL Schema

Fragment Matcher

Quand l’utiliser

  • Configurer InMemoryCache({ possibleTypes }) pour que les fragments sur des interfaces ou des unions correspondent correctement dans Apollo Client 3.
  • Régénérer la table possibleTypes après l'ajout d'un nouveau type à une union, sans lancer la CLI de codegen.

Mode d’emploi

  1. Collez dans l'éditeur GraphQL Schema un schéma contenant des définitions interface ou union.
  2. Examinez l'objet possibleTypes généré ; les types qui ne font partie d'aucune interface ou union n'y figurent pas.
  3. Enregistrez-le dans un fichier .ts et passez le possibleTypes de l'export par défaut à InMemoryCache.

Schéma 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

Détails et limites

Seul le schéma est utilisé ; cette page n'a pas d'éditeur Document.

La sortie est en TypeScript : une interface PossibleTypesResultData, une constante de résultat typée et un export par défaut.

Un schéma sans interface ni union produit un objet possibleTypes vide. La génération s'exécute dans un Web Worker de votre navigateur.

FAQ

S'agit-il de l'ancien format IntrospectionFragmentMatcher ?

Non. La sortie utilise la forme possibleTypes (nom du supertype associé à un tableau de noms de sous-types) d'Apollo Client 3, et non le format de résultat d'introspection d'Apollo Client 2.

Comment utiliser la sortie avec Apollo Client ?

Importez l'export par défaut et passez result.possibleTypes à new InMemoryCache({ possibleTypes }).

Spécifications et références