graphql-faker icon indicating copy to clipboard operation
graphql-faker copied to clipboard

`@deprecated` directive not supported for input field

Open steliosrammos opened this issue 3 years ago • 3 comments

GraphQL-Faker throws an error when running on a schema that contains a @deprecated directive on an input field. However that is now supported by the graphql-spec, see: https://github.com/graphql/graphql-spec/pull/805

Logs:

graphql-faker            | 
graphql-faker            | Your schema constains 2 validation errors: 
graphql-faker            | 
graphql-faker            | Directive "deprecated" may not be used on INPUT_FIELD_DEFINITION.
graphql-faker            | 
graphql-faker            | schema.sdl:261:19
graphql-faker            | 260 |   description: description_String_maxLength_2200
graphql-faker            | 261 |   active: Boolean @deprecated(reason: "this field will soon be replaced by the status field")
graphql-faker            |     |                   ^
graphql-faker            | 262 |   draft: Boolean @deprecated(reason: "this field will soon be replaced by the status field")
graphql-faker            | 
graphql-faker            | 
graphql-faker            | Directive "deprecated" may not be used on INPUT_FIELD_DEFINITION.
graphql-faker            | 
graphql-faker            | schema.sdl:262:18
graphql-faker            | 261 |   active: Boolean @deprecated(reason: "this field will soon be replaced by the status field")
graphql-faker            | 262 |   draft: Boolean @deprecated(reason: "this field will soon be replaced by the status field")
graphql-faker            |     |                  ^
graphql-faker            | 263 |   expiresAt: String
graphql-faker            | 

steliosrammos avatar Oct 20 '22 11:10 steliosrammos

The directive declared for faker are only the one related to faker i.e.

directive @fake(
    type: fake__Types!
    options: fake__options = {}
    locale: fake__Locale
) on FIELD_DEFINITION | SCALAR
directive @listLength(min: Int!, max: Int!) on FIELD_DEFINITION
scalar examples__JSON
directive @examples(values: [examples__JSON]!) on FIELD_DEFINITION | SCALAR

Therefore, to support the @deprecated directive, try adding the following definition somewhere in your schema

directive @deprecated(
  reason: String = "No longer supported"
) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION | ENUM_VALUE

Xample avatar Apr 21 '23 12:04 Xample

I run into the same problem. I've tried @Xample solution but it gives me following error: Directive "deprecated" already exists in the schema. It cannot be redefined.. Worth pointing that this directive is not declared anywhere else. I've put the declaration as the first thing is the schema file. Any workaround?

andrenascentes avatar Jul 20 '23 10:07 andrenascentes

Check carefully the included files, you might be importing both a source and a generated .GraphQL file which leads to this duplicated directive error.

Xample avatar Jul 20 '23 19:07 Xample