From 696f9c772ea323f77b6d87c62f6fdf4627d82eb7 Mon Sep 17 00:00:00 2001 From: Arda TANRIKULU Date: Tue, 14 Feb 2023 07:26:43 +0300 Subject: [PATCH] fix(federation): do not import @link from spec --- .changeset/lemon-comics-brake.md | 5 +++++ packages/transforms/federation/src/index.ts | 11 +++++++---- .../transforms/federation/test/federation.spec.ts | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 .changeset/lemon-comics-brake.md diff --git a/.changeset/lemon-comics-brake.md b/.changeset/lemon-comics-brake.md new file mode 100644 index 000000000000..bface13f67f8 --- /dev/null +++ b/.changeset/lemon-comics-brake.md @@ -0,0 +1,5 @@ +--- +'@graphql-mesh/transform-federation': patch +--- + +Do not import @link from the spec diff --git a/packages/transforms/federation/src/index.ts b/packages/transforms/federation/src/index.ts index 17988ac3311c..34c902c48cb9 100644 --- a/packages/transforms/federation/src/index.ts +++ b/packages/transforms/federation/src/index.ts @@ -194,16 +194,19 @@ export default class FederationTransform implements MeshTransform { schemaWithUnionType.extensions = schemaWithUnionType.extensions || {}; const directivesObj: any = ((schemaWithUnionType.extensions as any).directives = schemaWithUnionType.extensions.directives || {}); - directivesObj.link = { - url: 'https://specs.apollo.dev/federation/' + (this.config.version || 'v2.0'), - import: federationDirectives.filter(name => name !== 'link').map(dirName => `@${dirName}`), - }; const existingDirectives = schemaWithUnionType.getDirectives(); const filteredDirectives = existingDirectives.filter(directive => federationDirectives.includes(directive.name), ); + directivesObj.link = { + url: 'https://specs.apollo.dev/federation/' + (this.config.version || 'v2.0'), + import: filteredDirectives + .filter(({ name }) => name !== 'link') + .map(dirName => `@${dirName.name}`), + }; + if (existingDirectives.length === filteredDirectives.length) { return schemaWithUnionType; } diff --git a/packages/transforms/federation/test/federation.spec.ts b/packages/transforms/federation/test/federation.spec.ts index 144668954194..833947b59057 100644 --- a/packages/transforms/federation/test/federation.spec.ts +++ b/packages/transforms/federation/test/federation.spec.ts @@ -38,7 +38,7 @@ describe('transform-federation', () => { schema, }); expect(printSchemaWithDirectives(transformedSchema)).toMatchInlineSnapshot(` - "schema @link(url: "https://specs.apollo.dev/federation/v2.0", import: ["@extends", "@external", "@inaccessible", "@key", "@override", "@provides", "@requires", "@shareable", "@tag"]) { + "schema @link(url: "https://specs.apollo.dev/federation/v2.0", import: []) { query: Query }