Пользовательские директивы с помощью GraphQl-инструментов
Я ищу для создания пользовательской директивы, которая выглядит примерно так:
{ value(input: "test") @duplicate(by:3) }
Насколько я понимаю, мне нужно предоставить функцию, которая будет прикреплена в правильном месте в GraphQL AST. Я написал этот тест на основе некоторых документов из одной из проблем в graphql-tools
РЕПО, чтобы помочь процессу эксперимента:
import { makeExecutableSchema } from 'graphql-tools'
import { graphql } from 'graphql'
// Directive locations:
// QUERY SCHEMA ENUM MUTATION SCALAR ENUM_VALUE SUBSCRIPTION OBJECT INPUT_OBJECT FIELD FIELD_DEFINITION INPUT_FIELD_DEFINITION FRAGMENT_DEFINITION ARGUMENT_DEFINITION FRAGMENT_SPREAD INTERFACE INLINE_FRAGMENT UNION
describe('Directives', () => {
it('allows directives to be added to queries', async () => {
// Construct a schema, using GraphQL schema language
const typeDefs = `
directive @upper on QUERY
type Query {
hello: String
}
`
// Implement resolvers for out custom Directive
const directiveResolvers = {
upper(next, src, args, context) {
console.log('called upper')
return next().then(str => {
if (typeof str === 'string') {
return str.toUpperCase()
}
return str
})
},
}
// Provide resolver functions for your schema fields
const resolvers = {
Query: {
hello: (root, args, context) => {
return 'Hello world!'
},
},
}
const schema = makeExecutableSchema({
typeDefs,
resolvers,
directiveResolvers,
})
const query = `
query UPPER_HELLO @upper {
hello
}
`
let results = await graphql(schema, query)
console.log(results)
let { data: { hello } } = results
expect(hello).toEqual('HELLO WORLD!')
})
})
По какой-то причине этот тест не пройден, хотя кажется, что запрос принят как действительный.
Чего мне не хватает, чтобы заставить это работать?
Может ли библиотека graphql-tools сделать это?