Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

@deprecated directive not supported for input field #186

Open
steliosrammos opened this issue Oct 20, 2022 · 3 comments
Open

@deprecated directive not supported for input field #186

steliosrammos opened this issue Oct 20, 2022 · 3 comments

Comments

@steliosrammos
Copy link

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: graphql/graphql-spec#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            | 
@Xample
Copy link

Xample commented Apr 21, 2023

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

@andrenascentes
Copy link

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?

@Xample
Copy link

Xample commented Jul 20, 2023

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants