diff --git a/.changeset/weak-pugs-stay.md b/.changeset/weak-pugs-stay.md new file mode 100644 index 00000000000..b8c9d204181 --- /dev/null +++ b/.changeset/weak-pugs-stay.md @@ -0,0 +1,10 @@ +--- +'@graphql-hive/cli': patch +'hive': patch +--- + +Improve federation composition rules. + +- Fix supergraph `@join__field` generation for `@override` + `@requires` migrations and add a progressive override restriction. +- When a field with `@requires` is overridden, composition now ignores `@requires` usage coming only from the overridden source field when deciding whether to keep `@join__field(..., external: true)`. This prevents stale external annotations in the supergraph. +- Progressive override (`@override(..., label: ...)`) is now rejected when the overridden source field uses `@requires` (error code: `OVERRIDE_COLLISION_WITH_ANOTHER_DIRECTIVE`). Non-progressive override behavior is unchanged. diff --git a/integration-tests/package.json b/integration-tests/package.json index abb4db0671f..283ad84350a 100644 --- a/integration-tests/package.json +++ b/integration-tests/package.json @@ -22,7 +22,7 @@ "@hive/schema": "workspace:*", "@hive/server": "workspace:*", "@hive/storage": "workspace:*", - "@theguild/federation-composition": "0.21.3", + "@theguild/federation-composition": "0.22.0", "@trpc/client": "10.45.3", "@trpc/server": "10.45.3", "@types/async-retry": "1.4.8", diff --git a/package.json b/package.json index 1a402486eaf..62b595df1eb 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@sentry/cli": "2.40.0", "@swc/core": "1.13.5", "@theguild/eslint-config": "0.12.1", - "@theguild/federation-composition": "0.21.3", + "@theguild/federation-composition": "0.22.0", "@theguild/prettier-config": "2.0.7", "@types/node": "22.10.5", "bob-the-bundler": "7.0.1", diff --git a/packages/libraries/cli/package.json b/packages/libraries/cli/package.json index c7b7475b0d6..487c3a566c4 100644 --- a/packages/libraries/cli/package.json +++ b/packages/libraries/cli/package.json @@ -60,7 +60,7 @@ "@oclif/core": "3.26.6", "@oclif/plugin-help": "6.2.36", "@oclif/plugin-update": "4.7.16", - "@theguild/federation-composition": "0.21.3", + "@theguild/federation-composition": "0.22.0", "cli-table3": "0.6.5", "colors": "1.4.0", "env-ci": "7.3.0", diff --git a/packages/services/api/package.json b/packages/services/api/package.json index a03311a91bd..75ba1cde5dd 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -40,7 +40,7 @@ "@sentry/node": "7.120.2", "@sentry/types": "7.120.2", "@slack/web-api": "7.10.0", - "@theguild/federation-composition": "0.21.3", + "@theguild/federation-composition": "0.22.0", "@trpc/client": "10.45.3", "@trpc/server": "10.45.3", "@types/bcryptjs": "2.4.6", diff --git a/packages/services/demo/federation/package.json b/packages/services/demo/federation/package.json index c4711558d7d..1b3bda2bab6 100644 --- a/packages/services/demo/federation/package.json +++ b/packages/services/demo/federation/package.json @@ -7,7 +7,7 @@ }, "dependencies": { "@apollo/subgraph": "2.9.3", - "@theguild/federation-composition": "0.21.3", + "@theguild/federation-composition": "0.22.0", "graphql": "16.9.0", "graphql-yoga": "5.13.3" }, diff --git a/packages/services/schema/package.json b/packages/services/schema/package.json index f8530066905..dd2d38827f4 100644 --- a/packages/services/schema/package.json +++ b/packages/services/schema/package.json @@ -15,7 +15,7 @@ "@graphql-tools/stitching-directives": "3.1.38", "@hive/service-common": "workspace:*", "@sentry/node": "7.120.2", - "@theguild/federation-composition": "0.21.3", + "@theguild/federation-composition": "0.22.0", "@trpc/server": "10.45.3", "@types/async-retry": "1.4.8", "@types/ioredis-mock": "8.2.5", diff --git a/packages/services/server/package.json b/packages/services/server/package.json index 915662b7ff3..1cc397878d5 100644 --- a/packages/services/server/package.json +++ b/packages/services/server/package.json @@ -38,7 +38,7 @@ "@hive/workflows": "workspace:*", "@sentry/node": "7.120.2", "@swc/core": "1.13.5", - "@theguild/federation-composition": "0.21.3", + "@theguild/federation-composition": "0.22.0", "@trpc/client": "10.45.3", "@trpc/server": "10.45.3", "@whatwg-node/server": "0.10.17", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 83920af0044..a3d574408da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -165,8 +165,8 @@ importers: specifier: 0.12.1 version: 0.12.1(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3) '@theguild/federation-composition': - specifier: 0.21.3 - version: 0.21.3(graphql@16.9.0) + specifier: 0.22.0 + version: 0.22.0(graphql@16.9.0) '@theguild/prettier-config': specifier: 2.0.7 version: 2.0.7(prettier@3.4.2) @@ -349,8 +349,8 @@ importers: specifier: workspace:* version: link:../packages/services/storage '@theguild/federation-composition': - specifier: 0.21.3 - version: 0.21.3(graphql@16.9.0) + specifier: 0.22.0 + version: 0.22.0(graphql@16.9.0) '@trpc/client': specifier: 10.45.3 version: 10.45.3(@trpc/server@10.45.3) @@ -498,8 +498,8 @@ importers: specifier: 4.7.16 version: 4.7.16 '@theguild/federation-composition': - specifier: 0.21.3 - version: 0.21.3(graphql@16.9.0) + specifier: 0.22.0 + version: 0.22.0(graphql@16.9.0) cli-table3: specifier: 0.6.5 version: 0.6.5 @@ -840,8 +840,8 @@ importers: specifier: 7.10.0 version: 7.10.0 '@theguild/federation-composition': - specifier: 0.21.3 - version: 0.21.3(graphql@16.9.0) + specifier: 0.22.0 + version: 0.22.0(graphql@16.9.0) '@trpc/client': specifier: 10.45.3 version: 10.45.3(@trpc/server@10.45.3) @@ -1086,8 +1086,8 @@ importers: specifier: 2.9.3 version: 2.9.3(graphql@16.9.0) '@theguild/federation-composition': - specifier: 0.21.3 - version: 0.21.3(graphql@16.9.0) + specifier: 0.22.0 + version: 0.22.0(graphql@16.9.0) graphql: specifier: 16.9.0 version: 16.9.0 @@ -1192,8 +1192,8 @@ importers: specifier: 7.120.2 version: 7.120.2 '@theguild/federation-composition': - specifier: 0.21.3 - version: 0.21.3(graphql@16.9.0) + specifier: 0.22.0 + version: 0.22.0(graphql@16.9.0) '@trpc/server': specifier: 10.45.3 version: 10.45.3 @@ -1321,8 +1321,8 @@ importers: specifier: 1.13.5 version: 1.13.5 '@theguild/federation-composition': - specifier: 0.21.3 - version: 0.21.3(graphql@16.9.0) + specifier: 0.22.0 + version: 0.22.0(graphql@16.9.0) '@trpc/client': specifier: 10.45.3 version: 10.45.3(@trpc/server@10.45.3) @@ -9465,8 +9465,8 @@ packages: peerDependencies: graphql: ^16.0.0 - '@theguild/federation-composition@0.21.3': - resolution: {integrity: sha512-+LlHTa4UbRpZBog3ggAxjYIFvdfH3UMvvBUptur19TMWkqU4+n3GmN+mDjejU+dyBXIG27c25RsiQP1HyvM99g==} + '@theguild/federation-composition@0.22.0': + resolution: {integrity: sha512-bGueT2FzlwRG8ZpiCmXnheqPESxg/5FlqgczBJET5w9X7kUJr6F47BaPyL+xzY+uesyawu1KE7Nd2jvJf2AKTw==} engines: {node: '>=18'} peerDependencies: graphql: ^16.0.0 @@ -31097,7 +31097,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@theguild/federation-composition@0.21.3(graphql@16.9.0)': + '@theguild/federation-composition@0.22.0(graphql@16.9.0)': dependencies: constant-case: 3.0.4 debug: 4.4.3(supports-color@8.1.1)