На самом деле - это правильный синтаксис. Вы можете определить директиву, которая применяется к определениям аргументов следующим образом:
directive @test on ARGUMENT_DEFINITION
type Query {
foo(input: String @test): String
}
Директивы схемы не являются промежуточным программным обеспечением. Это просто способы изменения отдельных определений внутри вашей схемы. Чаще всего они используются для изменения определений field , но вы можете изменять другие определения, такие как типы объектов, типы входных объектов, перечисления, объединения и т. Д. При использовании директивы с полем вы можете обернуть существующее разрешениефункционировать внутри другого (или полностью заменить его) - при этом мы можем создать «промежуточное программное обеспечение» для распознавателей. Однако это не является целью директив схемы.
Кроме того, вы не можете использовать директиву аргумента для изменения значения передаваемого аргумента. В лучшем случае вы можете изменить тип аргумента на что-то другое (например, пользовательский скаляр). Тем не менее, вы можете просто использовать директиву поля, чтобы сделать то, что вы пытаетесь выполнить:
class ExampleDirective extends SchemaDirectiveVisitor {
public visitFieldDefinition(field) {
const { resolve = defaultFieldResolver } = field
field.resolve = async function (
source,
args,
context,
info,
) {
args.someArg = doSomething(args.someArg)
return resolve.call(this, source, args, context, info);
}
}
}