Как заставить makeExecutableSchema игнорировать директивы? - PullRequest
1 голос
/ 24 июня 2019

Есть ли способ сказать makeExecutableSchema из graphql-tools игнорировать определенные директивы?

Я хочу запросить мою базу данных neo4j с помощью graphql.Я также хочу иметь возможность указывать подтипы в graphql.Существует библиотека с именем graphql-s2s, которая добавляет подтипы в graphql.Библиотека neo4j-graphql-js использует пользовательские директивы (@cyper и @relation) для построения расширенной схемы.Он берет typeDefs или executeableSchema из graphql-tools.qraphql-s2s позволяет мне создать исполняемую схему из схемы, содержащей подтипы.Я надеялся, что мне будет легко просто передать различные выходные данные схемы друг в друга, как в шаблоне декоратора.

К сожалению, это не совсем так, поскольку я получаю много сообщений об ошибках анализатора, которыене совсем описательный.

К сожалению, я не нашел никакой документации по Grandstack, где показано, как использовать augmentSchema () для исполняемой схемы с отношениями и шифром в ней.

Есть ли способ, как это сделать?

Ниже моего наивного подхода:

const { transpileSchema } = require('graphql-s2s').graphqls2s;
const { augmentSchema } = require('neo4j-graphql-js');
const { makeExecutableSchema} = require('graphql-tools');
const { ApolloServer} = require('apollo-server');

const driver = require('./neo4j-setup');

/** The @relation and @cypher directives don't make any sense here they are 
just for illustration of having directives that make sense to
'augmentSchema' and not to 'makeExecutableSchema' **/  

const schema = `
type Node {
    id: ID!
}

type Person inherits Node {
    firstname: String
    lastname: String @relation(name: "SOUNDS_LIKE", direction: "OUT") 
}

type Student inherits Person {
    nickname: String @cypher(
      statement: """ MATCH (n:Color)...some weird cypher query"""
    )
}

type Query {
  students: [Student]
}
`

const resolver = {
        Query: {
            students(root, args, context) {
                // Some dummy code
                return [{ id: 1, firstname: "Carry", lastname: "Connor", nickname: "Cannie" }]
            }
        }
    };

const executabledSchema = makeExecutableSchema({
  typeDefs: [transpileSchema(schema)],
  resolvers: resolver
})

const schema = augmentSchema(executabledSchema)

const server = new ApolloServer({ schema, context: { driver } });

server.listen(3003, '0.0.0.0').then(({ url }) => {
  console.log(`GraphQL API ready at ${url}`);
});
...