dotansimha/graphql-code-generator

FieldWrapper not applied to fields in union resolver type

Open

#5,776 建立於 2021年3月31日

在 GitHub 查看
 (2 留言) (3 反應) (0 負責人)TypeScript (10,341 star) (1,295 fork)batch import
corehelp wantedstage/1-reproduction

描述

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

貢獻者指南