Skip to content

Commit b2d6902

Browse files
committed
[resolvers] Report if an object can have __isTypeOf resolver to output meta (#10417)
* Report hasIsTypeOf in meta * Add changeset * Revert "Remove CI config used for dev" This reverts commit 6d2c6e4.
1 parent 2bb2a8f commit b2d6902

File tree

5 files changed

+44
-1
lines changed

5 files changed

+44
-1
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@graphql-codegen/visitor-plugin-common': minor
3+
'@graphql-codegen/typescript-resolvers': minor
4+
---
5+
6+
Report to meta user defined objects whether they have isTypeOf resolver

.github/workflows/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ on:
77
pull_request:
88
branches:
99
- master
10+
- federation-fixes # FIXME: Remove this line after the PR is merged
1011

1112
env:
1213
NODE_OPTIONS: '--max_old_space_size=4096'

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,14 @@ export interface RootResolver {
9494
content: string;
9595
generatedResolverTypes: {
9696
resolversMap: { name: string };
97-
userDefined: Record<string, { name: string; federation?: { hasResolveReference: boolean } }>;
97+
userDefined: Record<
98+
string,
99+
{
100+
name: string;
101+
hasIsTypeOf: boolean;
102+
federation?: { hasResolveReference: boolean };
103+
}
104+
>;
98105
};
99106
}
100107

@@ -1437,6 +1444,7 @@ export class BaseResolversVisitor<
14371444
if (resolverType.baseGeneratedTypename) {
14381445
userDefinedTypes[schemaTypeName] = {
14391446
name: resolverType.baseGeneratedTypename,
1447+
hasIsTypeOf: this._parsedSchemaMeta.typesWithIsTypeOf[schemaTypeName] || false,
14401448
};
14411449

14421450
const federationMeta = this._federation.getMeta()[schemaTypeName];

packages/plugins/typescript/resolvers/tests/ts-resolvers.federation.spec.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -950,42 +950,52 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
950950
},
951951
"userDefined": {
952952
"MultipleNonResolvable": {
953+
"hasIsTypeOf": false,
953954
"name": "MultipleNonResolvableResolvers",
954955
},
955956
"MultipleResolvable": {
956957
"federation": {
957958
"hasResolveReference": true,
958959
},
960+
"hasIsTypeOf": false,
959961
"name": "MultipleResolvableResolvers",
960962
},
961963
"Node": {
964+
"hasIsTypeOf": false,
962965
"name": "NodeResolvers",
963966
},
964967
"NotResolvable": {
968+
"hasIsTypeOf": false,
965969
"name": "NotResolvableResolvers",
966970
},
967971
"Query": {
972+
"hasIsTypeOf": false,
968973
"name": "QueryResolvers",
969974
},
970975
"Resolvable": {
971976
"federation": {
972977
"hasResolveReference": true,
973978
},
979+
"hasIsTypeOf": false,
974980
"name": "ResolvableResolvers",
975981
},
976982
"User": {
977983
"federation": {
978984
"hasResolveReference": true,
979985
},
986+
"hasIsTypeOf": false,
980987
"name": "UserResolvers",
981988
},
982989
"UserError": {
990+
"hasIsTypeOf": true,
983991
"name": "UserErrorResolvers",
984992
},
985993
"UserOk": {
994+
"hasIsTypeOf": true,
986995
"name": "UserOkResolvers",
987996
},
988997
"UserPayload": {
998+
"hasIsTypeOf": false,
989999
"name": "UserPayloadResolvers",
9901000
},
9911001
},

packages/plugins/typescript/resolvers/tests/ts-resolvers.meta.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ describe('TypeScript Resolvers Plugin - Meta', () => {
4141
FORBIDDEN_ERROR
4242
INTERNAL_ERROR
4343
}
44+
45+
type TypeWithoutInterfaceOrUnion {
46+
id: ID!
47+
}
4448
`),
4549
[],
4650
{
@@ -66,6 +70,7 @@ describe('TypeScript Resolvers Plugin - Meta', () => {
6670
CreateUserError?: create_user_error_resolvers<ContextType>;
6771
CreateUserPayload?: create_user_payload_resolvers<ContextType>;
6872
ErrorType?: error_type_resolvers;
73+
TypeWithoutInterfaceOrUnion?: type_without_interface_or_union_resolvers<ContextType>;
6974
};`);
7075
expect(result.content).toContain(`export type create_user_error_resolvers`);
7176
expect(result.content).toContain(`export type create_user_ok_resolvers`);
@@ -85,30 +90,43 @@ describe('TypeScript Resolvers Plugin - Meta', () => {
8590
},
8691
"userDefined": {
8792
"CreateUserError": {
93+
"hasIsTypeOf": true,
8894
"name": "create_user_error_resolvers",
8995
},
9096
"CreateUserOk": {
97+
"hasIsTypeOf": true,
9198
"name": "create_user_ok_resolvers",
9299
},
93100
"CreateUserPayload": {
101+
"hasIsTypeOf": false,
94102
"name": "create_user_payload_resolvers",
95103
},
96104
"ErrorType": {
105+
"hasIsTypeOf": false,
97106
"name": "error_type_resolvers",
98107
},
99108
"Mutation": {
109+
"hasIsTypeOf": false,
100110
"name": "mutation_resolvers",
101111
},
102112
"Node": {
113+
"hasIsTypeOf": false,
103114
"name": "node_resolvers",
104115
},
105116
"Post": {
117+
"hasIsTypeOf": true,
106118
"name": "post_resolvers",
107119
},
108120
"Query": {
121+
"hasIsTypeOf": false,
109122
"name": "query_resolvers",
110123
},
124+
"TypeWithoutInterfaceOrUnion": {
125+
"hasIsTypeOf": false,
126+
"name": "type_without_interface_or_union_resolvers",
127+
},
111128
"User": {
129+
"hasIsTypeOf": true,
112130
"name": "user_resolvers",
113131
},
114132
},

0 commit comments

Comments
 (0)