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()
  ]
})

1 Answer 1

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,
});
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.