dotansimha / graphql-code-generator

A tool for generating code based on a GraphQL schema and GraphQL operations (query/mutation/subscription), with flexible support for custom plugins.
https://the-guild.dev/graphql/codegen/
MIT License
10.88k stars 1.34k forks source link

avoidOptionals inputValue as false not producing optional fields #6521

Open cdaringe opened 3 years ago

cdaringe commented 3 years ago

Describe the bug

In the following live demo:

image

export type FindUserQueryVariables = Exact<{
  userId: Maybe<Scalars['ID']>;
}>;

Interestingly, if you flip object: false as well, suddenly the correct behavior takes for inputValue: false. Perhaps these are unintentionally coupled?

https://www.graphql-code-generator.com/docs/plugins/typescript-operations

To Reproduce

Codesandbox has been down for me. The schema, query, & config are listed below. The repro is quite simple :)

  1. My GraphQL schema:

Stripped down version of the homepage demo:

schema {
  query: Query
}

type Query {
  user(id: ID): User
}

interface Node {
  id: ID!
}

type User implements Node {
  id: ID!
}
  1. My GraphQL operations:
query findUser($userId: ID) {
  user(id: $userId) {
    id
  }
}
  1. My codegen.yml config file:
generates:
  operations-types.ts:
    plugins:
      - typescript
      - typescript-operations
    config:
      avoidOptionals: 
        defaultValue: true
        field: true
        object: true # toggle me!
        inputValue: false

Expected behavior

To produce an optional value for the userId?: Maybe<Int> field:

expected:

export type FindUserQueryVariables = Exact<{
  userId?: Maybe<Scalars['ID']>;
}>;

actual:

export type FindUserQueryVariables = Exact<{
  userId: Maybe<Scalars['ID']>;
}>;

Environment:

latest, deployed on graphql-code-generator website

Additional context

This PR https://github.com/dotansimha/graphql-code-generator/pull/5113, in the bottom comment, seems to suggest that this design is intentional. However, object seems orthogonal to inputValue for avoidOptionals configuration, and produces an unexpected result. If they are not orthogonal, then inputValue should take precedence over object

jtsmills commented 4 months ago

Hello, are there any updates here? Or other ways to solve this issue?