Skip to content

Commit 60dd72f

Browse files
authored
Fix resolveReference being generated as required when using generateInternalResolversIfNeeded.__resolveReference (#10230)
* Fix generate generateInternalResolversIfNeeded.__resolveReference making the resolver required * Add changeset
1 parent 05d9731 commit 60dd72f

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

Diff for: .changeset/orange-pillows-decide.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
'@graphql-codegen/visitor-plugin-common': patch
3+
'@graphql-codegen/typescript-resolvers': patch
4+
---
5+
6+
Fix generateInternalResolversIfNeeded.\_\_resolveReference making the resolver required
7+
8+
`__resolveReference`'s default behaviour when not declared is to pass the ref to subsequent resolvers i.e. becoming the `parent`. So, it means we don't have to make this resolver required.
9+
10+
This patch makes `__resolveReference` optional when `generateInternalResolversIfNeeded.__resolveReference` is set to true.

Diff for: packages/plugins/other/visitor-plugin-common/src/base-resolvers-visitor.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1531,7 +1531,6 @@ export class BaseResolversVisitor<
15311531
if (!federationDetails || federationDetails.resolvableKeyDirectives.length === 0) {
15321532
return '';
15331533
}
1534-
signature.modifier = ''; // if a federation type has resolvable @key, then it should be required
15351534
}
15361535

15371536
this._federation.setMeta(parentType.name, { hasResolveReference: true });

Diff for: packages/plugins/typescript/resolvers/tests/ts-resolvers.federation.spec.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
212212
// User should have __resolveReference because it has resolvable @key (by default)
213213
expect(content).toBeSimilarStringTo(`
214214
export type UserResolvers<ContextType = any, ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']> = {
215-
__resolveReference: ReferenceResolver<Maybe<ResolversTypes['User']>, { __typename: 'User' } & GraphQLRecursivePick<ParentType, {"id":true}>, ContextType>;
215+
__resolveReference?: ReferenceResolver<Maybe<ResolversTypes['User']>, { __typename: 'User' } & GraphQLRecursivePick<ParentType, {"id":true}>, ContextType>;
216216
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
217217
name?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
218218
username?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
@@ -223,7 +223,7 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
223223
// SingleResolvable has __resolveReference because it has resolvable: true
224224
expect(content).toBeSimilarStringTo(`
225225
export type SingleResolvableResolvers<ContextType = any, ParentType extends ResolversParentTypes['SingleResolvable'] = ResolversParentTypes['SingleResolvable']> = {
226-
__resolveReference: ReferenceResolver<Maybe<ResolversTypes['SingleResolvable']>, { __typename: 'SingleResolvable' } & GraphQLRecursivePick<ParentType, {"id":true}>, ContextType>;
226+
__resolveReference?: ReferenceResolver<Maybe<ResolversTypes['SingleResolvable']>, { __typename: 'SingleResolvable' } & GraphQLRecursivePick<ParentType, {"id":true}>, ContextType>;
227227
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
228228
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
229229
};
@@ -240,7 +240,7 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
240240
// AtLeastOneResolvable has __resolveReference because it at least one resolvable
241241
expect(content).toBeSimilarStringTo(`
242242
export type AtLeastOneResolvableResolvers<ContextType = any, ParentType extends ResolversParentTypes['AtLeastOneResolvable'] = ResolversParentTypes['AtLeastOneResolvable']> = {
243-
__resolveReference: ReferenceResolver<Maybe<ResolversTypes['AtLeastOneResolvable']>, { __typename: 'AtLeastOneResolvable' } & GraphQLRecursivePick<ParentType, {"id2":true}>, ContextType>;
243+
__resolveReference?: ReferenceResolver<Maybe<ResolversTypes['AtLeastOneResolvable']>, { __typename: 'AtLeastOneResolvable' } & GraphQLRecursivePick<ParentType, {"id2":true}>, ContextType>;
244244
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
245245
id2?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
246246
id3?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
@@ -251,7 +251,7 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
251251
// MixedResolvable has __resolveReference and references for resolvable keys
252252
expect(content).toBeSimilarStringTo(`
253253
export type MixedResolvableResolvers<ContextType = any, ParentType extends ResolversParentTypes['MixedResolvable'] = ResolversParentTypes['MixedResolvable']> = {
254-
__resolveReference: ReferenceResolver<Maybe<ResolversTypes['MixedResolvable']>, { __typename: 'MixedResolvable' } & (GraphQLRecursivePick<ParentType, {"id":true}> | GraphQLRecursivePick<ParentType, {"id2":true}>), ContextType>;
254+
__resolveReference?: ReferenceResolver<Maybe<ResolversTypes['MixedResolvable']>, { __typename: 'MixedResolvable' } & (GraphQLRecursivePick<ParentType, {"id":true}> | GraphQLRecursivePick<ParentType, {"id2":true}>), ContextType>;
255255
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
256256
id2?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
257257
id3?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;

0 commit comments

Comments
 (0)