Skip to content

Next major version feature branch #10218

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 18 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
de55668
[resolvers][federation] Fix mapper being incorrectly used as the base…
eddeee888 Dec 16, 2024
40ddde8
[resolvers][federation] Add `__resolveReference` to applicable `Inter…
eddeee888 Jan 29, 2025
950c559
chore(dependencies): updated changesets for modified dependencies
github-actions[bot] Jan 29, 2025
e58880c
chore(dependencies): updated changesets for modified dependencies
github-actions[bot] Jan 29, 2025
0e1162b
[resolvers] Ensure `__isTypeof` is only generated for implementing ty…
eddeee888 Feb 19, 2025
73a37d5
[resolvers][federation] Bring Federation reference selection set to R…
eddeee888 Mar 5, 2025
7b58daa
chore(dependencies): updated changesets for modified dependencies
github-actions[bot] Mar 5, 2025
15d270a
Add missing changeset
eddeee888 Mar 5, 2025
9f1798d
chore(dependencies): updated changesets for modified dependencies
github-actions[bot] Mar 11, 2025
0b41ef2
[resolvers][federation] Fix fields or types being wrong generated whe…
eddeee888 May 22, 2025
804e741
Fix unit test
eddeee888 May 29, 2025
db162e5
[resolvers][federation] Fix federation @requires type (#10366)
eddeee888 Aug 3, 2025
2fe91bb
[resolvers] Refactor to remove NameNode override and simplify federat…
eddeee888 Aug 3, 2025
8da92a5
CODEGEN-834 - [cli] Handle partial generation success (#10376)
eddeee888 Aug 3, 2025
d5b1556
Drop Node 18 support (#10392)
eddeee888 Aug 6, 2025
30a1491
Drop graphql tools prisma loader (#10400)
eddeee888 Aug 12, 2025
d8919a6
Update yarn.lock
eddeee888 Aug 12, 2025
63ac348
Update tsconfig for Node 20 (#10403)
eddeee888 Aug 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/angry-lamps-notice.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@graphql-codegen/visitor-plugin-common': major
'@graphql-codegen/typescript-resolvers': major
'@graphql-codegen/plugin-helpers': major
---

BREAKING CHANGES: Do not generate \_\_isTypeOf for non-implementing types or non-union members
5 changes: 5 additions & 0 deletions .changeset/brave-meals-brake.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphql-codegen/cli': major
---

Drop @graphql-tools/prisma-loader
10 changes: 10 additions & 0 deletions .changeset/loud-suits-admire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@graphql-codegen/visitor-plugin-common': major
'@graphql-codegen/typescript-resolvers': major
'@graphql-codegen/plugin-helpers': major
---

Ensure Federation Interfaces have `__resolveReference` if they are resolvable entities

BREAKING CHANGES: Deprecate `onlyResolveTypeForInterfaces` because majority of use cases cannot implement resolvers in Interfaces.
BREAKING CHANGES: Deprecate `generateInternalResolversIfNeeded.__resolveReference` because types do not have `__resolveReference` if they are not Federation entities or are not resolvable. Users should not have to manually set this option. This option was put in to wait for this major version.
7 changes: 7 additions & 0 deletions .changeset/lovely-snails-travel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@graphql-codegen/visitor-plugin-common': major
'@graphql-codegen/typescript-resolvers': major
'@graphql-codegen/plugin-helpers': major
---

BREAKING CHANGE: Improve Federation Entity's resolvers' parent param type: These types were using reference types inline. This makes it hard to handle mappers. The Parent type now all comes from ParentResolverTypes to make handling mappers and parent types simpler.
6 changes: 6 additions & 0 deletions .changeset/many-pets-attend.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@graphql-codegen/plugin-helpers': minor
'@graphql-codegen/cli': major
---

Add `allowPartialOutputs` flag to partially write successful generation to files
7 changes: 7 additions & 0 deletions .changeset/small-fans-cross.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@graphql-codegen/visitor-plugin-common': patch
'@graphql-codegen/typescript-resolvers': patch
'@graphql-codegen/plugin-helpers': patch
---

Update @requires type
11 changes: 11 additions & 0 deletions .changeset/thick-pianos-smoke.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
'@graphql-codegen/visitor-plugin-common': major
'@graphql-codegen/typescript-resolvers': major
'@graphql-codegen/plugin-helpers': major
---

Fix `mappers` usage with Federation

`mappers` was previously used as `__resolveReference`'s first param (usually called "reference"). However, this is incorrect because `reference` interface comes directly from `@key` and `@requires` directives. This patch fixes the issue by creating a new `FederationTypes` type and use it as the base for federation entity types when being used to type entity references.

BREAKING CHANGES: No longer generate `UnwrappedObject` utility type, as this was used to support the wrong previously generated type.
7 changes: 7 additions & 0 deletions .changeset/twenty-planets-complain.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@graphql-codegen/visitor-plugin-common': patch
'@graphql-codegen/typescript-resolvers': patch
'@graphql-codegen/plugin-helpers': patch
---

Fix fields or object types marked with @external being wrongly generated
22 changes: 22 additions & 0 deletions .changeset/wicked-timers-eat.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
'@graphql-codegen/visitor-plugin-common': major
'@graphql-codegen/typescript-resolvers': major
'@graphql-codegen/graphql-modules-preset': major
'@graphql-codegen/plugin-helpers': major
'@graphql-codegen/cli': major
'@graphql-codegen/client-preset': major
'@graphql-codegen/core': major
'@graphql-codegen/add': major
'@graphql-codegen/fragment-matcher': major
'@graphql-codegen/introspection': major
'@graphql-codegen/schema-ast': major
'@graphql-codegen/time': major
'@graphql-codegen/typescript-document-nodes': major
'@graphql-codegen/gql-tag-operations': major
'@graphql-codegen/typescript-operations': major
'@graphql-codegen/typed-document-node': major
'@graphql-codegen/typescript': major
'@graphql-codegen/testing': major
---

Drop Node 18 support
15 changes: 3 additions & 12 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
pull_request:
branches:
- master
- federation-fixes # FIXME: Remove this line after the PR is merged

env:
NODE_OPTIONS: '--max_old_space_size=4096'
Expand All @@ -28,8 +29,6 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup env
uses: the-guild-org/shared-config/setup@main
with:
nodeVersion: 18
- name: Prettier Check
run: yarn prettier:check
dev-tests-old:
Expand All @@ -45,8 +44,6 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup env
uses: the-guild-org/shared-config/setup@main
with:
nodeVersion: 18
- name: Build
run: yarn build
env:
Expand All @@ -63,8 +60,6 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup env
uses: the-guild-org/shared-config/setup@main
with:
nodeVersion: 18
- name: Build
run: yarn build
env:
Expand All @@ -87,8 +82,6 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup env
uses: the-guild-org/shared-config/setup@main
with:
nodeVersion: 18
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1
with:
toolchain: 1.65.0
Expand Down Expand Up @@ -120,8 +113,6 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup env
uses: the-guild-org/shared-config/setup@main
with:
nodeVersion: 18
- name: Build
run: yarn build
env:
Expand All @@ -138,10 +129,10 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest] # remove windows to speed up the tests
node_version: [16, 18, 20]
node_version: [20, 22, 24]
graphql_version: [15, 16]
include:
- node-version: 14
- node-version: 20
os: windows-latest
graphql_version: 16
steps:
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ jobs:
with:
npmTag: alpha
buildScript: build
nodeVersion: 18
secrets:
githubToken: ${{ secrets.GITHUB_TOKEN }}
npmToken: ${{ secrets.NPM_TOKEN }}
Expand All @@ -29,7 +28,6 @@ jobs:
npmTag: rc
restoreDeletedChangesets: true
buildScript: build
nodeVersion: 18
secrets:
githubToken: ${{ secrets.GITHUB_TOKEN }}
npmToken: ${{ secrets.NPM_TOKEN }}
1 change: 0 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ jobs:
uses: the-guild-org/shared-config/.github/workflows/release-stable.yml@main
with:
releaseScript: release
nodeVersion: 18
secrets:
# githubToken: ${{ secrets.GUILD_BOT_TOKEN }}
githubToken: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/website-integrity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ jobs:

- name: Setup env
uses: the-guild-org/shared-config/setup@main
with:
nodeVersion: 18

- name: Build Packages
run: yarn build
Expand Down
3 changes: 0 additions & 3 deletions .github/workflows/website.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@ jobs:

- uses: the-guild-org/shared-config/setup@main
name: setup env
with:
nodeVersion: 18
packageManager: yarn

- uses: the-guild-org/shared-config/website-cf@main
name: build and deploy website
Expand Down
2 changes: 1 addition & 1 deletion babel.config.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module.exports = {
presets: [
['@babel/preset-env', { targets: { node: process.versions.node.split('.')[0] } }],
'@babel/preset-typescript',
['@babel/preset-typescript', { allowDeclareFields: true }],
],
};
3 changes: 0 additions & 3 deletions dev-test/modules/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,6 @@ export type ArticleResolvers<
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
text?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
title?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type CreditCardResolvers<
Expand All @@ -241,7 +240,6 @@ export type DonationResolvers<
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
recipient?: Resolver<ResolversTypes['User'], ParentType, ContextType>;
sender?: Resolver<ResolversTypes['User'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type MutationResolvers<
Expand Down Expand Up @@ -298,7 +296,6 @@ export type UserResolvers<
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
lastName?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
paymentOptions?: Resolver<Maybe<Array<ResolversTypes['PaymentOption']>>, ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type Resolvers<ContextType = any> = {
Expand Down
2 changes: 0 additions & 2 deletions dev-test/subpath-import/result.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,6 @@ export type UserResolvers<
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
password?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
updatedAt?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type MutationResolvers<
Expand All @@ -157,7 +156,6 @@ export type MutationResolvers<
FiedContextType,
RequireFields<MutationCreateUserArgs, 'email' | 'name' | 'password'>
>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type Resolvers<ContextType = TestContext> = {
Expand Down
42 changes: 20 additions & 22 deletions dev-test/test-schema/resolvers-federation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,20 @@ export type DirectiveResolverFn<TResult = {}, TParent = {}, TContext = {}, TArgs
info: GraphQLResolveInfo
) => TResult | Promise<TResult>;

/** Mapping of federation types */
export type FederationTypes = {
User: User;
};

/** Mapping of federation reference types */
export type FederationReferenceTypes = {
User: { __typename: 'User' } & (
| GraphQLRecursivePick<FederationTypes['User'], { id: true }>
| GraphQLRecursivePick<FederationTypes['User'], { name: true }>
) &
({} | GraphQLRecursivePick<FederationTypes['User'], { address: { city: true; lines: { line2: true } } }>);
};

/** Mapping between all available schema types and the resolvers types */
export type ResolversTypes = {
Address: ResolverTypeWrapper<Address>;
Expand All @@ -149,7 +163,7 @@ export type ResolversParentTypes = {
ID: Scalars['ID']['output'];
Lines: Lines;
Query: {};
User: User;
User: User | FederationReferenceTypes['User'];
Int: Scalars['Int']['output'];
Boolean: Scalars['Boolean']['output'];
};
Expand All @@ -161,15 +175,13 @@ export type AddressResolvers<
city?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
lines?: Resolver<ResolversTypes['Lines'], ParentType, ContextType>;
state?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type BookResolvers<
ContextType = any,
ParentType extends ResolversParentTypes['Book'] = ResolversParentTypes['Book']
> = {
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type LinesResolvers<
Expand All @@ -178,7 +190,6 @@ export type LinesResolvers<
> = {
line1?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
line2?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type QueryResolvers<
Expand All @@ -190,28 +201,15 @@ export type QueryResolvers<

export type UserResolvers<
ContextType = any,
ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']
ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User'],
FederationReferenceType extends FederationReferenceTypes['User'] = FederationReferenceTypes['User']
> = {
__resolveReference?: ReferenceResolver<
Maybe<ResolversTypes['User']>,
{ __typename: 'User' } & (
| GraphQLRecursivePick<ParentType, { id: true }>
| GraphQLRecursivePick<ParentType, { name: true }>
),
Maybe<ResolversTypes['User']> | FederationReferenceType,
FederationReferenceType,
ContextType
>;

email?: Resolver<
ResolversTypes['String'],
{ __typename: 'User' } & (
| GraphQLRecursivePick<ParentType, { id: true }>
| GraphQLRecursivePick<ParentType, { name: true }>
) &
GraphQLRecursivePick<ParentType, { address: { city: true; lines: { line2: true } } }>,
ContextType
>;

__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
email?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
};

export type Resolvers<ContextType = any> = {
Expand Down
2 changes: 0 additions & 2 deletions dev-test/test-schema/resolvers-root.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,6 @@ export type QueryResolvers<
ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']
> = {
someDummyField?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type QueryRootResolvers<
Expand Down Expand Up @@ -172,7 +171,6 @@ export type UserResolvers<
email?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
id?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type Resolvers<ContextType = any> = {
Expand Down
1 change: 0 additions & 1 deletion dev-test/test-schema/resolvers-stitching.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,6 @@ export type UserResolvers<
email?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
id?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type Resolvers<ContextType = any> = {
Expand Down
1 change: 0 additions & 1 deletion dev-test/test-schema/resolvers-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,6 @@ export type UserResolvers<
email?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
id?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type Resolvers<ContextType = any> = {
Expand Down
1 change: 0 additions & 1 deletion dev-test/test-schema/typings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@ export type UserResolvers<
email?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
id?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type Resolvers<ContextType = any> = {
Expand Down
1 change: 0 additions & 1 deletion packages/graphql-codegen-cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@
"@graphql-tools/graphql-file-loader": "^8.0.0",
"@graphql-tools/json-file-loader": "^8.0.0",
"@graphql-tools/load": "^8.1.0",
"@graphql-tools/prisma-loader": "^8.0.0",
"@graphql-tools/url-loader": "^8.0.0",
"@graphql-tools/utils": "^10.0.0",
"@whatwg-node/fetch": "^0.10.0",
Expand Down
Loading
Loading