انتقل إلى المحتوى

إنشاء أداة مطابقة أجزاء GraphQL — Numio

يبني خريطة possibleTypes من مخطط GraphQL باستخدام @graphql-codegen/fragment-matcher. يُدرج كل interface وunion مع أنواع الكائنات التي تنفّذه أو تنتمي إليه، جاهزةً لـ InMemoryCache في Apollo Client.

ضبط InMemoryCache({ possibleTypes }) كي تتطابق الأجزاء (fragments) على interface أو union بشكل صحيح في Apollo Client 3.

GraphQL Schema

Fragment Matcher

متى تستخدمها

  • ضبط InMemoryCache({ possibleTypes }) كي تتطابق الأجزاء (fragments) على interface أو union بشكل صحيح في Apollo Client 3.
  • إعادة إنشاء خريطة possibleTypes بعد إضافة نوع جديد إلى union دون تشغيل CLI الخاص بـ codegen.

طريقة الاستخدام

  1. الصق مخططًا يحتوي على تعريفات interface أو union في محرر GraphQL Schema.
  2. اقرأ كائن possibleTypes المُنشأ؛ الأنواع التي لا تنتمي إلى أي interface أو union لا تظهر.
  3. احفظه كملف .ts ومرّر possibleTypes من التصدير الافتراضي إلى InMemoryCache.

مخطط 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

التفاصيل والقيود

يُستخدم المخطط فقط؛ لا يوجد محرر Document في هذه الصفحة.

المخرجات بلغة TypeScript: واجهة PossibleTypesResultData، وثابت result مُنمَّط، وتصدير افتراضي.

المخطط الخالي من interface وunion ينتج كائن possibleTypes فارغًا. يجري الإنشاء في Web Worker داخل متصفحك.

FAQ

هل هذا هو تنسيق IntrospectionFragmentMatcher القديم؟

لا. تستخدم المخرجات بنية possibleTypes (اسم النوع الأعلى مرتبط بمصفوفة من أسماء الأنواع الفرعية) المعتمدة في Apollo Client 3، وليس تنسيق نتيجة الاستبطان في Apollo Client 2.

كيف أستخدم المخرجات مع Apollo Client؟

استورد التصدير الافتراضي ومرّر result.possibleTypes إلى new InMemoryCache({ possibleTypes }).

المواصفات والمراجع