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

تحويل مخطط GraphQL إلى شجرة AST — Numio

يحلّل GraphQL SDL ويبني مخططًا ثم يطبعه مجددًا كمخطط واحد مُوحَّد باستخدام @graphql-codegen/schema-ast. تُدمج امتدادات الأنواع في أنواعها الأساسية، وتُطبع الأوصاف كسلاسل كتلية (block strings).

دمج كتل extend type الموزعة على عدة ملفات في ملف schema.graphql واحد للمراجعة أو للأدوات.

GraphQL Schema

Schema AST

متى تستخدمها

  • دمج كتل extend type الموزعة على عدة ملفات في ملف schema.graphql واحد للمراجعة أو للأدوات.
  • توحيد SDL المكتوب يدويًا إلى صيغة الطباعة القياسية قبل مقارنة نسختين من المخطط.

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

  1. الصق مقطعًا أو أكثر من SDL، بما فيها أي كتل extend type، في محرر GraphQL Schema.
  2. تحقق من النتيجة المطبوعة: تُضاف حقول الامتداد إلى النوع الأصلي وتصبح الأوصاف كتل """.
  3. انسخ المخرجات واحفظها كملف .graphql.

مخطط GraphQL

extend type Query {
  me: User
}

type Query {
  ping: String
}

type User {
  id: ID!
  "Display name"
  name: String @deprecated(reason: "Use fullName")
}

المخطط المطبوع (SDL)

type Query {
  me: User
  ping: String
}

type User {
  id: ID!

  """
  Display name
  """
  name: String @deprecated(reason: "Use fullName")
}

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

قد يتغير ترتيب الحقول: في هذا المثال طُبعت الحقول القادمة من كتلة extend type قبل الحقول الأصلية للنوع الأساسي.

تبقى توجيهات الحقول مثل @deprecated(reason: ...) في SDL المطبوع.

يُبنى المخطط ويُطبع في Web Worker داخل متصفحك، ثم يُنسَّق بمحلّل GraphQL الخاص بـ Prettier.

FAQ

هل يُخرج AST بصيغة JSON؟

لا. رغم الاسم، النتيجة هي GraphQL SDL مطبوع وليست DocumentNode بصيغة JSON. استخدم صفحة JSON الاستبطان إذا كنت تحتاج JSON.

ماذا يحدث لتعليقات #؟

التعليقات ليست جزءًا من المخطط وتُحذف عند طباعته. استخدم سلاسل "description" للاحتفاظ بالتوثيق.

هل يمكنه دمج extend type في النوع الأساسي؟

نعم. تُطبَّق الامتدادات على النوع الأساسي، فتحتوي المخرجات على type Query واحد بجميع الحقول.

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