dotansimha/graphql-code-generator

FieldWrapper not applied to fields in union resolver type

Open

#5 776 ouverte le 31 mars 2021

Voir sur GitHub
 (2 commentaires) (3 réactions) (0 assignés)TypeScript (1 295 forks)batch import
corehelp wantedstage/1-reproduction

Métriques du dépôt

Stars
 (10 341 stars)
Métriques de merge PR
 (Merge moyen 22j 9h) (53 PRs mergées en 30 j)

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

Guide contributeur