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 is not being added to the generated resolver-types.ts when used with enumsAsConst #9453

Open
janodetzel opened this issue May 23, 2023 · 1 comment

Comments

@janodetzel
Copy link

janodetzel commented May 23, 2023

Which packages are impacted by your issue?

@graphql-codegen/typescript

Describe the bug

When using the enumsAsConst plugin configuration option in graphql-codegen/typescript to generate TypeScript enums for GraphQL enums, the @Deprecated directive is not being added to the generated resolver-types.ts file. This means that any deprecated values in the GraphQL schema are not marked as deprecated in the generated TypeScript types, which could lead to confusion for developers using the generated types.

Your Example Website or App

https://stackblitz.com/edit/github-jbn6g8?file=codegen.ts

Steps to Reproduce the Bug or Issue

  1. Create a GraphQL schema that includes a deprecated enum value with the @deprecated directive:
enum Color {
  RED
  GREEN @deprecated(reason: “Use BLUE instead”)
  BLUE
}
  1. Configure graphql-codegen with the typescript plugin and the enumsAsConst plugin configuration option:
plugins:
- typescript
config:
enumsAsConst: true
  1. Run graphql-codegen to generate TypeScript types for the schema.

  2. Inspect the generated resolver-types.ts file and verify that the deprecated enum value does not have the @deprecated JSDoc annotation.

The @deprecated JSDoc annotation is not included in the generated resolver-types.ts file for deprecated enum values when using the enumsAsConst plugin configuration option.

export const Color = {
  RED: 'RED',
  GREEN: 'GREEN',
  BLUE: 'BLUE'
} as const;

Expected behavior

The generated resolver-types.ts file should include the @deprecated JSDoc annotation for any deprecated enum values in the GraphQL schema, even when using the enumsAsConst plugin configuration option.

enum Color {
  RED
  GREEN @deprecated(reason: "Use BLUE instead")
  BLUE
}

export const Color = {
  RED: 'RED',
  /** @deprecated Use BLUE instead */
  GREEN: 'GREEN', 
  BLUE: 'BLUE'
} as const;

Screenshots or Videos

No response

Platform

  • OS: [e.g. macOS, Windows, Linux]
  • NodeJS: [e.g. 18.5.0]
  • graphql version: [e.g. 16.3.0]
  • @graphql-codegen/* version(s): [e.g. 2.6.2]

Codegen Config File

schema: 'schema.graphql',
  documents: 'document.graphql',
  generates: {
    'types.ts': {
      plugins: ['typescript', 'typescript-operations'],
      config: { enumsAsConst: true },
    },
  },

Additional context

No response

@nebbles
Copy link
Contributor

nebbles commented Feb 1, 2025

Ran into this issue yesterday too. It prevents us from using this config option because we rely on the deprecated directive in the jsdoc to ensure we are removing usage of deprecated values from our frontend codebases.

PR submitted to address this: #10274

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

2 participants