1

I am using graphql-codegen with typescript-mongodb plugin to generate database model files from the qraphql schema. And therefore my schema contains custom directive from the typescript-mongodb like @entity and @column. The codegen works fine but then when I load the schema using the graphql-tools loadSchemaSync function I get a schema validation error which complains about unknown directives.

Probably the most simple solution would be to add the mongo plugin directive definitions to the schema(which I could not yet get working either). But there is not actually any reason to have those directives in the schema after the graphql-codegen generated the configured files.

So I wonder is there some standard way to remove the mongo-related directives from the schema as some intermediate step before loading the schema files into the executable schema?

Or is there a way to tell the loadSchemaSync function to ignore the "unknown directives" error?

Here the my current code to load the schema files:

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

const schema = loadSchemaSync(join(__dirname, '../src/graphql/schemas/**/*.graphql'), {
  loaders: [
    new GraphQLFileLoader()
  ]
})
Dmitry Klochkov
  • 2,484
  • 24
  • 31

1 Answers1

1

It sounds like you haven't imported the mongo codegen directives in to your schema.

You should know that graphql-tools is deprecated and wont receive anymore updates. You should use the appropriate scoped packages such as: https://www.npmjs.com/package/@graphql-codegen/typescript-mongodb

Check out the usage example in the documentation.

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,
});
Phil
  • 1,996
  • 1
  • 19
  • 26