diff --git a/packages/delegate/src/Subschema.ts b/packages/delegate/src/Subschema.ts index 1211a67f90a..4d080aa0b57 100644 --- a/packages/delegate/src/Subschema.ts +++ b/packages/delegate/src/Subschema.ts @@ -7,8 +7,7 @@ import { CreateProxyingResolverFn, Subscriber, Executor, - Endpoint, - EndpointBatchingOptions, + BatchingOptions, } from './types'; import { applySchemaTransforms } from './applySchemaTransforms'; @@ -28,8 +27,7 @@ export class Subschema implements ISubschema { public executor?: Executor; public subscriber?: Subscriber; public batch?: boolean; - public batchingOptions?: EndpointBatchingOptions; - public endpoint?: Endpoint; + public batchingOptions?: BatchingOptions; public createProxyingResolver?: CreateProxyingResolverFn; public transforms: Array; @@ -45,7 +43,6 @@ export class Subschema implements ISubschema { this.subscriber = config.subscriber; this.batch = config.batch; this.batchingOptions = config.batchingOptions; - this.endpoint = config.endpoint; this.createProxyingResolver = config.createProxyingResolver; this.transforms = config.transforms ?? []; diff --git a/packages/delegate/src/delegateToSchema.ts b/packages/delegate/src/delegateToSchema.ts index 031260d1a77..91a32a65871 100644 --- a/packages/delegate/src/delegateToSchema.ts +++ b/packages/delegate/src/delegateToSchema.ts @@ -117,7 +117,7 @@ export function delegateRequest({ targetFieldName = fieldName; } - const { targetSchema, targetRootValue, subschemaConfig, endpoint, allTransforms } = collectTargetParameters( + const { targetSchema, targetRootValue, subschemaConfig, allTransforms } = collectTargetParameters( subschemaOrSubschemaConfig, rootValue, info, @@ -149,14 +149,15 @@ export function delegateRequest({ if (targetOperation === 'query' || targetOperation === 'mutation') { let executor: Executor = - endpoint?.executor || createDefaultExecutor(targetSchema, subschemaConfig?.rootValue || targetRootValue); + subschemaConfig?.executor || createDefaultExecutor(targetSchema, subschemaConfig?.rootValue || targetRootValue); - if (endpoint?.batch) { + if (subschemaConfig?.batch) { + const batchingOptions = subschemaConfig?.batchingOptions; executor = getBatchingExecutor( context, executor, - endpoint?.batchingOptions?.dataLoaderOptions, - endpoint?.batchingOptions?.extensionsReducer + batchingOptions?.dataLoaderOptions, + batchingOptions?.extensionsReducer ); } @@ -175,7 +176,7 @@ export function delegateRequest({ } const subscriber = - endpoint?.subscriber || createDefaultSubscriber(targetSchema, subschemaConfig?.rootValue || targetRootValue); + subschemaConfig?.subscriber || createDefaultSubscriber(targetSchema, subschemaConfig?.rootValue || targetRootValue); return subscriber({ ...processedRequest, @@ -218,7 +219,6 @@ function collectTargetParameters( targetSchema: subschemaOrSubschemaConfig.schema, targetRootValue: rootValue ?? subschemaOrSubschemaConfig?.rootValue ?? info?.rootValue ?? emptyObject, subschemaConfig: subschemaOrSubschemaConfig, - endpoint: subschemaOrSubschemaConfig.endpoint ?? subschemaOrSubschemaConfig, allTransforms: subschemaOrSubschemaConfig.transforms != null ? subschemaOrSubschemaConfig.transforms.concat(transforms) diff --git a/packages/delegate/src/types.ts b/packages/delegate/src/types.ts index 544323c6e7a..f0d000f989b 100644 --- a/packages/delegate/src/types.ts +++ b/packages/delegate/src/types.ts @@ -150,28 +150,21 @@ export interface ICreateProxyingResolverOptions { export type CreateProxyingResolverFn = (options: ICreateProxyingResolverOptions) => GraphQLFieldResolver; -export interface Endpoint { - rootValue?: Record; - executor?: Executor; - subscriber?: Subscriber; - batch?: boolean; - batchingOptions?: EndpointBatchingOptions; -} - -export interface EndpointBatchingOptions { +export interface BatchingOptions { extensionsReducer?: (mergedExtensions: Record, executionParams: ExecutionParams) => Record; dataLoaderOptions?: DataLoader.Options; } -export interface SubschemaPermutation { +export interface SubschemaConfig { + schema: GraphQLSchema; createProxyingResolver?: CreateProxyingResolverFn; transforms?: Array; merge?: Record; -} - -export interface SubschemaConfig extends SubschemaPermutation, Endpoint { - schema: GraphQLSchema; - endpoint?: Endpoint; + rootValue?: Record; + executor?: Executor; + subscriber?: Subscriber; + batch?: boolean; + batchingOptions?: BatchingOptions; } export interface MergedTypeConfig { diff --git a/packages/delegate/tests/batchExecution.test.ts b/packages/delegate/tests/batchExecution.test.ts index 93bb9692297..59119b8ff88 100644 --- a/packages/delegate/tests/batchExecution.test.ts +++ b/packages/delegate/tests/batchExecution.test.ts @@ -1,7 +1,7 @@ import { graphql, execute, ExecutionResult } from 'graphql'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import { delegateToSchema, SubschemaConfig, ExecutionParams, SyncExecutor, Endpoint } from '../src'; +import { delegateToSchema, SubschemaConfig, ExecutionParams, SyncExecutor, Executor } from '../src'; import { stitchSchemas } from '@graphql-tools/stitch'; import { FilterObjectFields } from '@graphql-tools/wrap'; @@ -61,7 +61,7 @@ describe('batch execution', () => { expect(executions).toEqual(1); }); - it('should share batching dataloader between subschemas when using a common endpoint', async () => { + it('should share batching dataloader between subschemas when using a common executor', async () => { const innerSchemaA = makeExecutableSchema({ typeDefs: ` type Object { @@ -104,13 +104,10 @@ describe('batch execution', () => { let executions = 0; - const endpoint: Endpoint = { - batch: true, - executor: ((params: ExecutionParams): ExecutionResult => { - executions++; - return execute(innerSchemaA, params.document, undefined, params.context, params.variables) as ExecutionResult; - }) as SyncExecutor - }; + const executor = ((params: ExecutionParams): ExecutionResult => { + executions++; + return execute(innerSchemaA, params.document, undefined, params.context, params.variables) as ExecutionResult; + }) as Executor; const innerSubschemaConfigA: Array = [{ schema: innerSchemaA, @@ -121,7 +118,8 @@ describe('batch execution', () => { args: () => ({}), }, }, - endpoint, + batch: true, + executor, }, { schema: innerSchemaA, transforms: [new FilterObjectFields((typeName, fieldName) => typeName !== 'Object' || fieldName !== 'field1')], @@ -131,7 +129,8 @@ describe('batch execution', () => { args: () => ({}), }, }, - endpoint, + batch: true, + executor, }]; const innerSubschemaConfigB: SubschemaConfig = { diff --git a/packages/stitch/src/isolateComputedFields.ts b/packages/stitch/src/isolateComputedFields.ts index f070aa2d745..67bb2b89920 100644 --- a/packages/stitch/src/isolateComputedFields.ts +++ b/packages/stitch/src/isolateComputedFields.ts @@ -46,16 +46,9 @@ export function isolateComputedFields(subschemaConfig: SubschemaConfig): Array