diff --git a/packages/delegate/src/defaultMergedResolver.ts b/packages/delegate/src/defaultMergedResolver.ts index a85837d2229..a023b1d3090 100644 --- a/packages/delegate/src/defaultMergedResolver.ts +++ b/packages/delegate/src/defaultMergedResolver.ts @@ -3,7 +3,7 @@ import { defaultFieldResolver, GraphQLResolveInfo } from 'graphql'; import { getResponseKeyFromInfo, getErrors } from '@graphql-tools/utils'; import { handleResult } from './results/handleResult'; -import { getSubschema } from './subschema'; +import { getSubschema } from './Subschema'; /** * Resolver that knows how to: diff --git a/packages/delegate/src/delegateToSchema.ts b/packages/delegate/src/delegateToSchema.ts index 4d55f2f0af1..90d13414643 100644 --- a/packages/delegate/src/delegateToSchema.ts +++ b/packages/delegate/src/delegateToSchema.ts @@ -36,10 +36,10 @@ import { IDelegateToSchemaOptions, IDelegateRequestOptions, SubschemaConfig, - isSubschemaConfig, ExecutionParams, StitchingInfo, } from './types'; +import { isSubschemaConfig } from './Subschema'; export function delegateToSchema(options: IDelegateToSchemaOptions | GraphQLSchema): any { if (isSchema(options)) { diff --git a/packages/delegate/src/index.ts b/packages/delegate/src/index.ts index 8b3a5c8457b..1ef0bbed5a1 100644 --- a/packages/delegate/src/index.ts +++ b/packages/delegate/src/index.ts @@ -3,10 +3,8 @@ export { createRequestFromInfo, createRequest } from './createRequest'; export { defaultMergedResolver } from './defaultMergedResolver'; export { createMergedResolver } from './createMergedResolver'; export { handleResult } from './results/handleResult'; -export { getSubschema } from './subschema'; +export { Subschema, isSubschema, isSubschemaConfig, getSubschema } from './Subschema'; export * from './transforms'; -export { Subschema } from './GraphQLSubschema'; - export * from './types'; diff --git a/packages/delegate/src/proxiedResult.ts b/packages/delegate/src/proxiedResult.ts index 437432d18e3..f812d1e1db7 100644 --- a/packages/delegate/src/proxiedResult.ts +++ b/packages/delegate/src/proxiedResult.ts @@ -5,7 +5,7 @@ import { mergeDeep, ERROR_SYMBOL, relocatedError, setErrors, getErrors } from '@ import { handleNull } from './results/handleNull'; import { FIELD_SUBSCHEMA_MAP_SYMBOL, OBJECT_SUBSCHEMA_SYMBOL } from './symbols'; -import { getSubschema, setObjectSubschema } from './subschema'; +import { getSubschema, setObjectSubschema } from './Subschema'; import { SubschemaConfig } from './types'; export function isProxiedResult(result: any) { diff --git a/packages/delegate/src/results/handleObject.ts b/packages/delegate/src/results/handleObject.ts index 3a0b6ae1b4d..51d18e0d66a 100644 --- a/packages/delegate/src/results/handleObject.ts +++ b/packages/delegate/src/results/handleObject.ts @@ -9,9 +9,9 @@ import { } from 'graphql'; import { collectFields, GraphQLExecutionContext, setErrors, slicedError } from '@graphql-tools/utils'; -import { setObjectSubschema } from '../subschema'; +import { setObjectSubschema, isSubschemaConfig } from '../Subschema'; import { mergeFields } from '../mergeFields'; -import { MergedTypeInfo, SubschemaConfig, isSubschemaConfig } from '../types'; +import { MergedTypeInfo, SubschemaConfig } from '../types'; export function handleObject( type: GraphQLCompositeType, diff --git a/packages/delegate/src/subschema.ts b/packages/delegate/src/subschema.ts index c85aac004e9..4eac7d34158 100644 --- a/packages/delegate/src/subschema.ts +++ b/packages/delegate/src/subschema.ts @@ -1,6 +1,8 @@ import { GraphQLSchema } from 'graphql'; -import { SubschemaConfig } from './types'; +import { Transform, applySchemaTransforms } from '@graphql-tools/utils'; + +import { SubschemaConfig, MergedTypeConfig, CreateProxyingResolverFn, Subscriber, Executor } from './types'; import { FIELD_SUBSCHEMA_MAP_SYMBOL, OBJECT_SUBSCHEMA_SYMBOL } from './symbols'; @@ -12,3 +14,33 @@ export function getSubschema(result: any, responseKey: string): GraphQLSchema | export function setObjectSubschema(result: any, subschema: GraphQLSchema | SubschemaConfig) { result[OBJECT_SUBSCHEMA_SYMBOL] = subschema; } + +export function isSubschemaConfig(value: any): value is SubschemaConfig { + return Boolean((value as SubschemaConfig).schema); +} + +export function isSubschema(value: any): value is Subschema { + return Boolean((value as Subschema).transformedSchema); +} + +export class Subschema { + public schema: GraphQLSchema; + public rootValue?: Record; + public executor?: Executor; + public subscriber?: Subscriber; + public createProxyingResolver?: CreateProxyingResolverFn; + public transforms: Array; + public transformedSchema: GraphQLSchema; + public merge?: Record; + + constructor(config: SubschemaConfig) { + this.schema = config.schema; + this.executor = config.executor; + this.subscriber = config.subscriber; + this.createProxyingResolver = config.createProxyingResolver; + this.transforms = config.transforms ?? []; + this.merge = config.merge; + + this.transformedSchema = applySchemaTransforms(this.schema, this.transforms); + } +} diff --git a/packages/delegate/src/types.ts b/packages/delegate/src/types.ts index 73ec599fd12..3203cc82701 100644 --- a/packages/delegate/src/types.ts +++ b/packages/delegate/src/types.ts @@ -13,7 +13,7 @@ import { } from 'graphql'; import { Operation, Transform, Request, TypeMap, ExecutionResult } from '@graphql-tools/utils'; -import { Subschema } from './GraphQLSubschema'; +import { Subschema } from './Subschema'; export interface IDelegateToSchemaOptions, TArgs = Record> { schema: GraphQLSchema | SubschemaConfig | Subschema; @@ -125,10 +125,6 @@ export type MergedTypeResolver = ( selectionSet: SelectionSetNode ) => any; -export function isSubschemaConfig(value: any): value is SubschemaConfig { - return Boolean((value as SubschemaConfig).schema); -} - export interface StitchingInfo { transformedSchemas: Map; fragmentsByField: Record>;