Zum Inhalt springen

GraphQL-Fragment-Matcher generieren — Numio

Erstellt mit @graphql-codegen/fragment-matcher die possibleTypes-Map aus einem GraphQL-Schema. Jedes Interface und jede Union wird mit den Objekttypen aufgeführt, die es implementieren bzw. zu ihr gehören, bereit für den InMemoryCache von Apollo Client.

InMemoryCache({ possibleTypes }) so konfigurieren, dass Fragments auf Interfaces oder Unions in Apollo Client 3 korrekt matchen.

GraphQL Schema

Fragment Matcher

Wann sie hilft

  • InMemoryCache({ possibleTypes }) so konfigurieren, dass Fragments auf Interfaces oder Unions in Apollo Client 3 korrekt matchen.
  • Die possibleTypes-Map nach dem Hinzufügen eines neuen Typs zu einer Union neu erzeugen, ohne die Codegen-CLI auszuführen.

Anwendung

  1. Füge ein Schema mit interface- oder union-Definitionen in den Editor GraphQL Schema ein.
  2. Prüfe das erzeugte possibleTypes-Objekt; Typen, die zu keinem Interface und keiner Union gehören, erscheinen nicht.
  3. Speichere es als .ts-Datei und übergib possibleTypes aus dem Default-Export an InMemoryCache.

GraphQL-Schema

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

Details und Einschränkungen

Es wird nur das Schema verwendet; diese Seite hat keinen Editor Document.

Die Ausgabe ist TypeScript: ein Interface PossibleTypesResultData, eine typisierte Konstante result und ein Default-Export.

Ein Schema ohne Interfaces oder Unions ergibt ein leeres possibleTypes-Objekt. Die Erzeugung läuft in einem Web Worker im Browser.

FAQ

Ist das das alte IntrospectionFragmentMatcher-Format?

Nein. Die Ausgabe nutzt die possibleTypes-Struktur von Apollo Client 3 (Name des Supertyps auf ein Array von Subtypnamen abgebildet), nicht das Introspection-Ergebnisformat von Apollo Client 2.

Wie verwende ich die Ausgabe mit Apollo Client?

Importiere den Default-Export und übergib result.possibleTypes an new InMemoryCache({ possibleTypes }).

Spezifikationen und Referenzen