Удалите пользовательские директивы из схемы перед загрузкой

#graphql #graphql-tools #graphql-codegen

Вопрос:

Я использую graphql-codegen typescript-mongodb плагин with для создания файлов модели базы данных из схемы qraphql. И поэтому моя схема содержит пользовательскую директиву из typescript-mongodb подобного @entity и @column . Кодовый генератор работает нормально, но затем, когда я загружаю схему с помощью graphql-tools loadSchemaSync функции, я получаю ошибку проверки схемы, которая жалуется на неизвестные директивы.

Вероятно, самым простым решением было бы добавить определения директив плагинов mongo в схему(которую я тоже пока не смог заставить работать). Но на самом деле нет никаких причин включать эти директивы в схему после того, как graphql-codegen сгенерировал настроенные файлы.

Поэтому я задаюсь вопросом, существует ли какой-то стандартный способ удалить директивы, связанные с mongo, из схемы в качестве промежуточного шага перед загрузкой файлов схемы в исполняемую схему?

Или есть способ сообщить функции loadSchemaSync, чтобы она игнорировала ошибку «неизвестные директивы»?

Вот мой текущий код для загрузки файлов схемы:

 import { join } from "path";
import {loadSchemaSync, GraphQLFileLoader} from "graphql-tools"

const schema = loadSchemaSync(join(__dirname, '../src/graphql/schemas/**/*.graphql'), {
  loaders: [
    new GraphQLFileLoader()
  ]
})
 

Ответ №1:

Похоже, вы не импортировали директивы mongo codegen в свою схему.

Вы должны знать, что graphql-инструменты устарели и больше не будут получать обновления. Вы должны использовать соответствующие пакеты с областью действия, такие как: https://www.npmjs.com/package/@graphql-codegen/typescript-mongodb

Ознакомьтесь с примером использования в документации.

https://www.graphql-code-generator.com/docs/plugins/typescript-mongodb#usage-example

 import { makeExecutableSchema } from '@graphql-tools/schema';
import { DIRECTIVES } from '@graphql-codegen/typescript-mongodb';

const schema = makeExecutableSchema({
  typeDefs: [
    DIRECTIVES,
    // the rest of your GraphQL types
  ],
  resolvers,
});