diff --git a/packages/services/schema/package.json b/packages/services/schema/package.json index 5888b50106..5d28289570 100644 --- a/packages/services/schema/package.json +++ b/packages/services/schema/package.json @@ -12,6 +12,7 @@ "@apollo/federation": "0.38.1", "@graphql-hive/external-composition": "workspace:*", "@graphql-hive/federation-link-utils": "workspace:*", + "@graphql-tools/merge": "9.0.22", "@graphql-tools/stitch": "9.4.13", "@graphql-tools/stitching-directives": "3.1.24", "@hive/service-common": "workspace:*", diff --git a/packages/services/schema/src/orchestrators.ts b/packages/services/schema/src/orchestrators.ts index 8d650db565..475c8c25cf 100644 --- a/packages/services/schema/src/orchestrators.ts +++ b/packages/services/schema/src/orchestrators.ts @@ -5,6 +5,7 @@ import { buildASTSchema, concatAST, GraphQLError, + isTypeSystemExtensionNode, Kind, parse, print, @@ -14,6 +15,7 @@ import { } from 'graphql'; import { validateSDL } from 'graphql/validation/validate.js'; import { extractLinkImplementations } from '@graphql-hive/federation-link-utils'; +import { mergeTypeDefs } from '@graphql-tools/merge'; import { stitchSchemas } from '@graphql-tools/stitch'; import { stitchingDirectives } from '@graphql-tools/stitching-directives'; import type { ServiceLogger } from '@hive/service-common'; @@ -496,12 +498,18 @@ function createSingle(): Orchestrator { return { async composeAndValidate(schemas) { const schema = schemas[0]; - const schemaAst = parse(schema.raw); + let schemaAst = parse(schema.raw); + + // If the schema contains type system extension nodes, merge them into the schema. + // We don't want to show many type extension of User, we want to show single User type. + if (schemaAst.definitions.some(isTypeSystemExtensionNode)) { + schemaAst = mergeTypeDefs(schemaAst); + } const errors = validateSingleSDL(schemaAst); return { errors, - sdl: print(trimDescriptions(parse(schema.raw))), + sdl: print(trimDescriptions(schemaAst)), supergraph: null, contracts: null, tags: null, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f71bedf313..564085c8dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1141,6 +1141,9 @@ importers: '@graphql-hive/federation-link-utils': specifier: workspace:* version: link:../../libraries/federation-link-utils/dist + '@graphql-tools/merge': + specifier: 9.0.22 + version: 9.0.22(graphql@16.9.0) '@graphql-tools/stitch': specifier: 9.4.13 version: 9.4.13(graphql@16.9.0) @@ -16303,8 +16306,8 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.596.0 - '@aws-sdk/client-sts': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0) + '@aws-sdk/client-sso-oidc': 3.596.0(@aws-sdk/client-sts@3.596.0) + '@aws-sdk/client-sts': 3.596.0 '@aws-sdk/core': 3.592.0 '@aws-sdk/credential-provider-node': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -16411,11 +16414,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.596.0': + '@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0) + '@aws-sdk/client-sts': 3.596.0 '@aws-sdk/core': 3.592.0 '@aws-sdk/credential-provider-node': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -16454,6 +16457,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 transitivePeerDependencies: + - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0)': @@ -16587,11 +16591,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.596.0(@aws-sdk/client-sso-oidc@3.596.0)': + '@aws-sdk/client-sts@3.596.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.596.0 + '@aws-sdk/client-sso-oidc': 3.596.0(@aws-sdk/client-sts@3.596.0) '@aws-sdk/core': 3.592.0 '@aws-sdk/credential-provider-node': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -16630,7 +16634,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/client-sts@3.723.0': @@ -16744,7 +16747,7 @@ snapshots: '@aws-sdk/credential-provider-ini@3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0)': dependencies: - '@aws-sdk/client-sts': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0) + '@aws-sdk/client-sts': 3.596.0 '@aws-sdk/credential-provider-env': 3.587.0 '@aws-sdk/credential-provider-http': 3.596.0 '@aws-sdk/credential-provider-process': 3.587.0 @@ -16863,7 +16866,7 @@ snapshots: '@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.596.0)': dependencies: - '@aws-sdk/client-sts': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0) + '@aws-sdk/client-sts': 3.596.0 '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.1.11 '@smithy/types': 3.7.2 @@ -17038,7 +17041,7 @@ snapshots: '@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.596.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.596.0 + '@aws-sdk/client-sso-oidc': 3.596.0(@aws-sdk/client-sts@3.596.0) '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.1.11 '@smithy/shared-ini-file-loader': 3.1.12