avoidOptionals inputValue as false not producing optional fields
#6521 opened on Aug 20, 2021
Description
Describe the bug
In the following live demo:
- observe an optional GQL query input,
userId: ID - you can see that we are
avoidOptionals: { inputValue: false }for that value - the output does avoid optionals, despite being instructed not to. you can see the following output:

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 :)
- 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!
}
- My GraphQL operations:
query findUser($userId: ID) {
user(id: $userId) {
id
}
}
- My
codegen.ymlconfig 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