Пользовательские директивы с помощью 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 сделать это?

0 ответов

Другие вопросы по тегам