From 6ebb3629e2af0824e5296b646dfe044caf49a5f8 Mon Sep 17 00:00:00 2001 From: Kamil Kisiela Date: Mon, 26 Feb 2024 12:03:10 +0100 Subject: [PATCH] Ignore descriptions when checking native federation compatibility (#4040) --- .../modules/schema/providers/schema-helper.ts | 15 ++++++++++++- .../schema/providers/schema-manager.ts | 22 +++++++++++-------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/packages/services/api/src/modules/schema/providers/schema-helper.ts b/packages/services/api/src/modules/schema/providers/schema-helper.ts index c93b194e2..35e4349ba 100644 --- a/packages/services/api/src/modules/schema/providers/schema-helper.ts +++ b/packages/services/api/src/modules/schema/providers/schema-helper.ts @@ -1,5 +1,5 @@ import { createHash } from 'crypto'; -import { print } from 'graphql'; +import { DocumentNode, print, visit } from 'graphql'; import { Injectable, Scope } from 'graphql-modules'; import objectHash from 'object-hash'; import type { @@ -92,6 +92,19 @@ export function extendWithBase( }); } +export function removeDescriptions(documentNode: DocumentNode): DocumentNode { + return visit(documentNode, { + enter(node) { + if ('description' in node) { + return { + ...node, + description: null, + }; + } + }, + }); +} + type CreateSchemaObjectInput = Parameters[0]; @Injectable({ diff --git a/packages/services/api/src/modules/schema/providers/schema-manager.ts b/packages/services/api/src/modules/schema/providers/schema-manager.ts index 1c8ac3a79..12f47d319 100644 --- a/packages/services/api/src/modules/schema/providers/schema-manager.ts +++ b/packages/services/api/src/modules/schema/providers/schema-manager.ts @@ -43,7 +43,7 @@ import { Contracts } from './contracts'; import { FederationOrchestrator } from './orchestrators/federation'; import { SingleOrchestrator } from './orchestrators/single'; import { StitchingOrchestrator } from './orchestrators/stitching'; -import { ensureCompositeSchemas, SchemaHelper } from './schema-helper'; +import { ensureCompositeSchemas, removeDescriptions, SchemaHelper } from './schema-helper'; const ENABLE_EXTERNAL_COMPOSITION_SCHEMA = z.object({ endpoint: z.string().url().nonempty(), @@ -1138,18 +1138,22 @@ export class SchemaManager { if (compositionResult.supergraph) { const sortedExistingSupergraph = print( - sortSDL( - parseGraphQLSource( - compositionResult.supergraph, - 'parsing existing supergraph in getNativeFederationCompatibilityStatus', + removeDescriptions( + sortSDL( + parseGraphQLSource( + compositionResult.supergraph, + 'parsing existing supergraph in getNativeFederationCompatibilityStatus', + ), ), ), ); const sortedNativeSupergraph = print( - sortSDL( - parseGraphQLSource( - version.supergraphSDL!, - 'parsing native supergraph in getNativeFederationCompatibilityStatus', + removeDescriptions( + sortSDL( + parseGraphQLSource( + version.supergraphSDL!, + 'parsing native supergraph in getNativeFederationCompatibilityStatus', + ), ), ), );