dotansimha/graphql-code-generator

FieldWrapper not applied to fields in union resolver type

Open

#5776 opened on Mar 31, 2021

View on GitHub
 (2 comments) (3 reactions) (0 assignees)TypeScript (10,341 stars) (1,295 forks)batch import
corehelp wantedstage/1-reproduction

Description

Hi! First thanks to @dotansimha for his great effort on this project!

Describe the bug

I've run into a bit of an issue with a circular type definition in a union field, a custom field wrapper and the typescript-resolvers plugin. I would expect the parent field in the example below to be wrapped with FieldWrapper like it is the original type. As I'm using the same resolver(that looks like my FieldWrapper type) for two separate generated types, this currently results in a type error when using the generated ResolverTypes directly. A workaround is to override the Comment type with a mapper.

To Reproduce Repo: https://codesandbox.io/s/exciting-bhaskara-s9qze Steps to reproduce the behavior:

  1. My GraphQL schema:
type Query {
    comment(id: ID!): Comment!
}

union CommentParent = Comment

type Comment {
    id: ID!
    parent: CommentParent!
}
  1. My GraphQL operations:
# No operations
  1. My codegen.yml config file:
schema: schema.graphql
documents: {}
generates:
  types.ts:
    plugins:
      - typescript
      - typescript-resolvers
    config:
      wrapFieldDefinitions: true
      fieldWrapperValue: |
        T | Promise<T> | ((args: unknown, context: GraphQLContext, info: GraphQLResolveInfo) => Promise<T> | T)

Expected behavior A field that does get resolved to another resolver type should also be wrapped with the custom field wrapper.

I would expect this

type ResolversTypes = {
  Comment: ResolverTypeWrapper<Omit<Comment, 'parent'> & { parent: FieldWrapper<ResolversTypes['CommentParent']> }>;
  CommentParent: ResolversTypes['Comment'];
}

as opposed to the original:

type ResolversTypes = {
  Comment: ResolverTypeWrapper<Omit<Comment, 'parent'> & { parent: ResolversTypes['CommentParent'] }>;
  CommentParent: ResolversTypes['Comment'];
}

Environment:

  • @graphql-codegen/add 2.0.2
  • @graphql-codegen/cli 1.20.1
  • @graphql-codegen/typescript 1.21.0
  • @graphql-codegen/typescript-resolvers 1.19.0

Additional context

Contributor guide