graphql
Version:
A Query Language and Runtime which can target any service.
1 lines • 47.1 kB
Source Map (JSON)
{"version":3,"file":"IncrementalExecutor.js","sourceRoot":"","sources":["../../../src/execution/incremental/IncrementalExecutor.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Incremental Execution */\n\n/* eslint-disable max-params */\nimport { invariant } from '../../jsutils/invariant.ts';\nimport { isPromise, isPromiseLike } from '../../jsutils/isPromise.ts';\nimport { memoize1 } from '../../jsutils/memoize1.ts';\nimport { memoize2 } from '../../jsutils/memoize2.ts';\nimport type { ObjMap } from '../../jsutils/ObjMap.ts';\nimport type { Path } from '../../jsutils/Path.ts';\nimport { addPath, pathToArray } from '../../jsutils/Path.ts';\nimport type { PromiseOrValue } from '../../jsutils/PromiseOrValue.ts';\n\nimport type {\n GraphQLError,\n GraphQLFormattedError,\n} from '../../error/GraphQLError.ts';\nimport { locatedError } from '../../error/locatedError.ts';\n\nimport type { FieldNode } from '../../language/ast.ts';\nimport { OperationTypeNode } from '../../language/ast.ts';\n\nimport type {\n GraphQLObjectType,\n GraphQLOutputType,\n GraphQLResolveInfo,\n} from '../../type/definition.ts';\n\nimport type {\n DeferUsage,\n FieldDetailsList,\n GroupedFieldSet,\n} from '../collectFields.ts';\nimport { collectSubfields as _collectSubfields } from '../collectFields.ts';\nimport { collectIteratorPromises } from '../collectIteratorPromises.ts';\nimport type { SharedExecutionContext } from '../createSharedExecutionContext.ts';\nimport type { ValidatedExecutionArgs } from '../ExecutionArgs.ts';\nimport type { ExecutionResult, FormattedExecutionResult } from '../Executor.ts';\nimport { Executor } from '../Executor.ts';\nimport type { StreamUsage } from '../getStreamUsage.ts';\nimport { returnIteratorCatchingErrors } from '../returnIteratorCatchingErrors.ts';\n\nimport type { DeferUsageSet, ExecutionPlan } from './buildExecutionPlan.ts';\nimport { buildExecutionPlan } from './buildExecutionPlan.ts';\nimport { Computation } from './Computation.ts';\nimport { IncrementalPublisher } from './IncrementalPublisher.ts';\nimport { Queue } from './Queue.ts';\nimport type { Group, Stream, Task, Work } from './WorkQueue.ts';\n\nconst buildExecutionPlanFromInitial = memoize1(\n (groupedFieldSet: GroupedFieldSet) => buildExecutionPlan(groupedFieldSet),\n);\n\nconst buildExecutionPlanFromDeferred = memoize2(\n (groupedFieldSet: GroupedFieldSet, deferUsageSet: DeferUsageSet) =>\n buildExecutionPlan(groupedFieldSet, deferUsageSet),\n);\n\n/**\n * Results for an operation that produced incremental payloads.\n * @typeParam TInitialData - Shape of the initial result data payload.\n * @typeParam TDeferredData - Shape of deferred fragment data payloads.\n * @typeParam TStreamItem - Shape of streamed list items.\n * @typeParam TExtensions - Shape of extensions payloads.\n */\nexport interface ExperimentalIncrementalExecutionResults<\n TInitialData = ObjMap<unknown>,\n TDeferredData = ObjMap<unknown>,\n TStreamItem = unknown,\n TExtensions = ObjMap<unknown>,\n> {\n /** Initial execution result delivered before subsequent incremental payloads. */\n initialResult: InitialIncrementalExecutionResult<TInitialData, TExtensions>;\n /** Async stream of incremental payloads delivered after the initial result. */\n subsequentResults: AsyncGenerator<\n SubsequentIncrementalExecutionResult<\n TDeferredData,\n TStreamItem,\n TExtensions\n >,\n void,\n void\n >;\n}\n\n/**\n * JSON-serializable form of incremental execution results.\n * @typeParam TInitial - Shape of the formatted initial result data payload.\n * @typeParam TDeferredData - Shape of formatted deferred fragment data payloads.\n * @typeParam TStreamItem - Shape of formatted streamed list items.\n * @typeParam TExtensions - Shape of formatted extensions payloads.\n */\nexport interface FormattedExperimentalIncrementalExecutionResults<\n TInitial = ObjMap<unknown>,\n TDeferredData = ObjMap<unknown>,\n TStreamItem = unknown,\n TExtensions = ObjMap<unknown>,\n> {\n /** Formatted initial execution result. */\n initialResult: FormattedInitialIncrementalExecutionResult<\n TInitial,\n TExtensions\n >;\n /** Async stream of formatted incremental payloads. */\n subsequentResults: AsyncGenerator<\n FormattedSubsequentIncrementalExecutionResult<\n TDeferredData,\n TStreamItem,\n TExtensions\n >,\n void,\n void\n >;\n}\n/**\n * Initial execution result for an operation that produced incremental payloads.\n * @typeParam TData - Shape of the initial data payload.\n * @typeParam TExtensions - Shape of the extensions payload.\n */\nexport interface InitialIncrementalExecutionResult<\n TData = ObjMap<unknown>,\n TExtensions = ObjMap<unknown>,\n> extends ExecutionResult<TData, TExtensions> {\n /** Data produced by the initial execution payload. */\n data: TData;\n /** Incremental payloads that are still pending after the initial result. */\n pending: ReadonlyArray<PendingResult>;\n /** Indicates that subsequent incremental payloads will follow. */\n hasNext: true;\n /** Additional non-standard metadata included in the initial result. */\n extensions?: TExtensions;\n}\n\n/**\n * JSON-serializable form of an initial incremental execution result.\n * @typeParam TInitialData - Shape of the formatted initial data payload.\n * @typeParam TExtensions - Shape of the formatted extensions payload.\n */\nexport interface FormattedInitialIncrementalExecutionResult<\n TInitialData = ObjMap<unknown>,\n TExtensions = ObjMap<unknown>,\n> extends FormattedExecutionResult<TInitialData, TExtensions> {\n /** Formatted data produced by the initial execution payload. */\n data: TInitialData;\n /** Formatted list of incremental payloads still pending after the initial result. */\n pending: ReadonlyArray<PendingResult>;\n /** Indicates whether subsequent incremental payloads will follow. */\n hasNext: boolean;\n /** Additional non-standard metadata included in the formatted initial result. */\n extensions?: TExtensions;\n}\n\n/**\n * Subsequent payload produced by incremental execution.\n * @typeParam TDeferredData - Shape of deferred fragment data payloads.\n * @typeParam TStreamItem - Shape of streamed list items.\n * @typeParam TExtensions - Shape of the extensions payload.\n */\nexport interface SubsequentIncrementalExecutionResult<\n TDeferredData = ObjMap<unknown>,\n TStreamItem = unknown,\n TExtensions = ObjMap<unknown>,\n> {\n /** Incremental payloads that became pending with this response. */\n pending?: ReadonlyArray<PendingResult>;\n /** Deferred or streamed payloads delivered by this response. */\n incremental?: ReadonlyArray<\n IncrementalResult<TDeferredData, TStreamItem, TExtensions>\n >;\n /** Incremental payloads that completed with this response. */\n completed?: ReadonlyArray<CompletedResult>;\n /** Indicates whether more incremental payloads will follow. */\n hasNext: boolean;\n /** Additional non-standard metadata included in this payload. */\n extensions?: TExtensions;\n}\n\n/**\n * JSON-serializable form of a subsequent incremental execution payload.\n * @typeParam TDeferredData - Shape of formatted deferred fragment data payloads.\n * @typeParam TStreamItem - Shape of formatted streamed list items.\n * @typeParam TExtensions - Shape of formatted extensions payloads.\n */\nexport interface FormattedSubsequentIncrementalExecutionResult<\n TDeferredData = ObjMap<unknown>,\n TStreamItem = unknown,\n TExtensions = ObjMap<unknown>,\n> {\n /** Indicates whether more incremental payloads will follow. */\n hasNext: boolean;\n /** Formatted incremental payloads that became pending with this response. */\n pending?: ReadonlyArray<PendingResult>;\n /** Formatted deferred or streamed payloads delivered by this response. */\n incremental?: ReadonlyArray<\n FormattedIncrementalResult<TDeferredData, TStreamItem, TExtensions>\n >;\n /** Formatted incremental payloads that completed with this response. */\n completed?: ReadonlyArray<FormattedCompletedResult>;\n /** Additional non-standard metadata included in this formatted payload. */\n extensions?: TExtensions;\n}\n\n/**\n * Incremental payload produced by a deferred fragment.\n * @typeParam TDeferredData - Shape of deferred fragment data.\n * @typeParam TExtensions - Shape of extensions payloads.\n */\nexport interface IncrementalDeferResult<\n TDeferredData = ObjMap<unknown>,\n TExtensions = ObjMap<unknown>,\n> {\n /** Identifier matching this payload to a pending deferred fragment. */\n id: string;\n /** Path from the deferred fragment location to this payload. */\n subPath?: ReadonlyArray<string | number>;\n /** Errors raised while executing the deferred fragment. */\n errors?: ReadonlyArray<GraphQLError>;\n /** Data produced by the deferred fragment. */\n data: TDeferredData;\n /** Additional non-standard metadata included in this payload. */\n extensions?: TExtensions;\n}\n\n/**\n * JSON-serializable form of a deferred fragment payload.\n * @typeParam TDeferredData - Shape of formatted deferred fragment data.\n * @typeParam TExtensions - Shape of formatted extensions payloads.\n */\nexport interface FormattedIncrementalDeferResult<\n TDeferredData = ObjMap<unknown>,\n TExtensions = ObjMap<unknown>,\n> {\n /** Formatted errors raised while executing the deferred fragment. */\n errors?: ReadonlyArray<GraphQLFormattedError>;\n /** Formatted data produced by the deferred fragment. */\n data: TDeferredData;\n /** Identifier matching this payload to a pending deferred fragment. */\n id: string;\n /** Path from the deferred fragment location to this payload. */\n subPath?: ReadonlyArray<string | number>;\n /** Additional non-standard metadata included in this formatted payload. */\n extensions?: TExtensions;\n}\n\n/**\n * Incremental payload produced by a streamed list field.\n * @typeParam TStreamItem - Shape of streamed list items.\n * @typeParam TExtensions - Shape of extensions payloads.\n */\nexport interface IncrementalStreamResult<\n TStreamItem = unknown,\n TExtensions = ObjMap<unknown>,\n> {\n /** Identifier matching this payload to a pending stream. */\n id: string;\n /** Path from the streamed field location to these items. */\n subPath?: ReadonlyArray<string | number>;\n /** Errors raised while producing streamed items. */\n errors?: ReadonlyArray<GraphQLError>;\n /** Streamed list items delivered by this payload. */\n items: ReadonlyArray<TStreamItem>;\n /** Additional non-standard metadata included in this payload. */\n extensions?: TExtensions;\n}\n\n/**\n * JSON-serializable form of a streamed list payload.\n * @typeParam TStreamItem - Shape of formatted streamed list items.\n * @typeParam TExtensions - Shape of formatted extensions payloads.\n */\nexport interface FormattedIncrementalStreamResult<\n TStreamItem = Array<unknown>,\n TExtensions = ObjMap<unknown>,\n> {\n /** Formatted errors raised while producing streamed items. */\n errors?: ReadonlyArray<GraphQLFormattedError>;\n /** Formatted streamed list items delivered by this payload. */\n items: ReadonlyArray<TStreamItem>;\n /** Identifier matching this payload to a pending stream. */\n id: string;\n /** Path from the streamed field location to these items. */\n subPath?: ReadonlyArray<string | number>;\n /** Additional non-standard metadata included in this formatted payload. */\n extensions?: TExtensions;\n}\n\n/**\n * Deferred fragment or streamed list payload produced by incremental execution.\n * @typeParam TDeferredData - Shape of deferred fragment data.\n * @typeParam TStreamItem - Shape of streamed list items.\n * @typeParam TExtensions - Shape of extensions payloads.\n */\nexport type IncrementalResult<\n TDeferredData = ObjMap<unknown>,\n TStreamItem = unknown,\n TExtensions = ObjMap<unknown>,\n> =\n | IncrementalDeferResult<TDeferredData, TExtensions>\n | IncrementalStreamResult<TStreamItem, TExtensions>;\n\n/**\n * JSON-serializable deferred fragment or streamed list payload.\n * @typeParam TDeferredData - Shape of formatted deferred fragment data.\n * @typeParam TStreamItem - Shape of formatted streamed list items.\n * @typeParam TExtensions - Shape of formatted extensions payloads.\n */\nexport type FormattedIncrementalResult<\n TDeferredData = ObjMap<unknown>,\n TStreamItem = unknown,\n TExtensions = ObjMap<unknown>,\n> =\n | FormattedIncrementalDeferResult<TDeferredData, TExtensions>\n | FormattedIncrementalStreamResult<TStreamItem, TExtensions>;\n\n/** @internal */\nexport interface PendingResult {\n id: string;\n path: ReadonlyArray<string | number>;\n label?: string;\n}\n\n/** @internal */\nexport interface CompletedResult {\n id: string;\n errors?: ReadonlyArray<GraphQLError>;\n}\n\n/** @internal */\nexport interface FormattedCompletedResult {\n id: string;\n errors?: ReadonlyArray<GraphQLFormattedError>;\n}\n\ninterface ExecutionGroup extends Task<\n ExecutionGroupValue,\n StreamItemValue,\n DeliveryGroup,\n ItemStream\n> {\n groups: ReadonlyArray<DeliveryGroup>;\n path: Path | undefined;\n computation: Computation<ExecutionGroupResult>;\n}\n\n/** @internal */\nexport interface DeliveryGroup extends Group<DeliveryGroup> {\n path: Path | undefined;\n label: string | undefined;\n parent: DeliveryGroup | undefined;\n}\n\n/** @internal */\nexport interface ItemStream extends Stream<\n ExecutionGroupValue,\n StreamItemValue,\n DeliveryGroup,\n ItemStream\n> {\n path: Path;\n label: string | undefined;\n initialCount: number;\n}\n\n/** @internal */\nexport interface ExecutionGroupValue {\n deliveryGroups: ReadonlyArray<DeliveryGroup>;\n path: ReadonlyArray<string | number>;\n errors?: ReadonlyArray<GraphQLError>;\n data: ObjMap<unknown>;\n}\n\n/** @internal */\nexport type IncrementalWork = Work<\n ExecutionGroupValue,\n StreamItemValue,\n DeliveryGroup,\n ItemStream\n>;\n\n/** @internal */\nexport interface ExecutionGroupResult {\n value: ExecutionGroupValue;\n work?: IncrementalWork | undefined;\n}\n\n/** @internal */\nexport interface StreamItemValue {\n errors?: ReadonlyArray<GraphQLError>;\n item: unknown;\n}\n\n/** @internal */\nexport interface StreamItemResult {\n value: StreamItemValue;\n work?: IncrementalWork | undefined;\n}\n\n/** @internal */\nexport class IncrementalExecutor<\n TExperimental = ExperimentalIncrementalExecutionResults,\n> extends Executor<ReadonlyMap<DeferUsage, DeliveryGroup>, TExperimental> {\n deferUsageSet?: DeferUsageSet | undefined;\n groups: Array<DeliveryGroup>;\n tasks: Array<ExecutionGroup>;\n streams: Array<ItemStream>;\n\n constructor(\n validatedExecutionArgs: ValidatedExecutionArgs,\n sharedExecutionContext?: SharedExecutionContext,\n deferUsageSet?: DeferUsageSet,\n ) {\n super(validatedExecutionArgs, sharedExecutionContext);\n this.deferUsageSet = deferUsageSet;\n this.groups = [];\n this.tasks = [];\n this.streams = [];\n }\n\n getCreateSubExecutor(): (\n deferUsageSet?: DeferUsageSet,\n ) => IncrementalExecutor<TExperimental> {\n const validatedExecutionArgs = this.validatedExecutionArgs;\n const sharedExecutionContext = this.sharedExecutionContext;\n\n return (deferUsageSet?: DeferUsageSet) =>\n new IncrementalExecutor<TExperimental>(\n validatedExecutionArgs,\n sharedExecutionContext,\n deferUsageSet,\n );\n }\n\n override abort(reason?: unknown): void {\n super.abort(reason);\n for (const task of this.tasks) {\n const aborted = task.computation.abort(reason);\n invariant(!isPromise(aborted));\n }\n for (const stream of this.streams) {\n const aborted = stream.queue.abort(reason);\n invariant(!isPromise(aborted));\n }\n }\n\n /**\n * Given a completed execution context and data, build the `{ errors, data }`\n * response defined by the \"Response\" section of the GraphQL specification.\n *\n * @internal\n */\n override buildResponse(\n data: ObjMap<unknown> | null,\n ): ExecutionResult | TExperimental {\n const work = this.getIncrementalWork();\n const { tasks, streams } = work;\n if (tasks?.length === 0 && streams?.length === 0) {\n return super.buildResponse(data);\n }\n\n const errors = this.collectedErrors.errors;\n invariant(data !== null);\n const incrementalPublisher = new IncrementalPublisher();\n return incrementalPublisher.buildResponse(\n data,\n errors,\n work,\n this.validatedExecutionArgs.externalAbortSignal,\n this.getFinishSharedExecution(),\n ) as TExperimental;\n }\n\n override executeCollectedRootFields(\n rootType: GraphQLObjectType,\n rootValue: unknown,\n originalGroupedFieldSet: GroupedFieldSet,\n serially: boolean,\n newDeferUsages: ReadonlyArray<DeferUsage>,\n ): PromiseOrValue<ObjMap<unknown>> {\n if (newDeferUsages.length === 0) {\n return this.executeRootGroupedFieldSet(\n rootType,\n rootValue,\n originalGroupedFieldSet,\n serially,\n undefined,\n );\n }\n\n invariant(\n this.validatedExecutionArgs.operation.operation !==\n OperationTypeNode.SUBSCRIPTION,\n '`@defer` directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`.',\n );\n\n const { newDeliveryGroups, newDeliveryGroupMap } =\n this.getNewDeliveryGroupMap(newDeferUsages, undefined, undefined);\n\n const { groupedFieldSet, newGroupedFieldSets } =\n this.buildRootExecutionPlan(originalGroupedFieldSet);\n\n const data = this.executeRootGroupedFieldSet(\n rootType,\n rootValue,\n groupedFieldSet,\n serially,\n newDeliveryGroupMap,\n );\n\n this.groups.push(...newDeliveryGroups);\n\n if (newGroupedFieldSets.size > 0) {\n this.collectExecutionGroups(\n rootType,\n rootValue,\n undefined,\n newGroupedFieldSets,\n newDeliveryGroupMap,\n );\n }\n\n return data;\n }\n\n buildRootExecutionPlan(\n originalGroupedFieldSet: GroupedFieldSet,\n ): ExecutionPlan {\n return buildExecutionPlanFromInitial(originalGroupedFieldSet);\n }\n\n override executeCollectedSubfields(\n parentType: GraphQLObjectType,\n sourceValue: unknown,\n path: Path | undefined,\n originalGroupedFieldSet: GroupedFieldSet,\n newDeferUsages: ReadonlyArray<DeferUsage>,\n deliveryGroupMap: ReadonlyMap<DeferUsage, DeliveryGroup> | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n if (newDeferUsages.length > 0) {\n invariant(\n this.validatedExecutionArgs.operation.operation !==\n OperationTypeNode.SUBSCRIPTION,\n '`@defer` directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`.',\n );\n }\n\n if (deliveryGroupMap === undefined && newDeferUsages.length === 0) {\n return this.executeFields(\n parentType,\n sourceValue,\n path,\n originalGroupedFieldSet,\n deliveryGroupMap,\n );\n }\n\n const { newDeliveryGroups, newDeliveryGroupMap } =\n this.getNewDeliveryGroupMap(newDeferUsages, deliveryGroupMap, path);\n\n const { groupedFieldSet, newGroupedFieldSets } = this.buildSubExecutionPlan(\n originalGroupedFieldSet,\n );\n\n const data = this.executeFields(\n parentType,\n sourceValue,\n path,\n groupedFieldSet,\n newDeliveryGroupMap,\n );\n\n this.groups.push(...newDeliveryGroups);\n\n if (newGroupedFieldSets.size > 0) {\n this.collectExecutionGroups(\n parentType,\n sourceValue,\n path,\n newGroupedFieldSets,\n newDeliveryGroupMap,\n );\n }\n\n return data;\n }\n\n buildSubExecutionPlan(\n originalGroupedFieldSet: GroupedFieldSet,\n ): ExecutionPlan {\n return this.deferUsageSet === undefined\n ? buildExecutionPlanFromInitial(originalGroupedFieldSet)\n : buildExecutionPlanFromDeferred(\n originalGroupedFieldSet,\n this.deferUsageSet,\n );\n }\n\n collectExecutionGroups(\n parentType: GraphQLObjectType,\n sourceValue: unknown,\n path: Path | undefined,\n newGroupedFieldSets: Map<DeferUsageSet, GroupedFieldSet>,\n deliveryGroupMap: ReadonlyMap<DeferUsage, DeliveryGroup>,\n ): void {\n const createSubExecutor = this.getCreateSubExecutor();\n for (const [deferUsageSet, groupedFieldSet] of newGroupedFieldSets) {\n const deliveryGroups = getDeliveryGroups(deferUsageSet, deliveryGroupMap);\n\n const executor = createSubExecutor(deferUsageSet);\n\n const executionGroup: ExecutionGroup = {\n groups: deliveryGroups,\n path,\n computation: new Computation(\n () =>\n executor.executeExecutionGroup(\n deliveryGroups,\n parentType,\n sourceValue,\n path,\n groupedFieldSet,\n deliveryGroupMap,\n ),\n (reason) => executor.abort(reason),\n ),\n };\n\n const parentDeferUsages = this.deferUsageSet;\n\n if (this.validatedExecutionArgs.enableEarlyExecution) {\n if (this.shouldDefer(parentDeferUsages, deferUsageSet)) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Promise.resolve().then(() => executionGroup.computation.prime());\n } else {\n executionGroup.computation.prime();\n }\n }\n\n this.tasks.push(executionGroup);\n }\n }\n\n executeExecutionGroup(\n deliveryGroups: ReadonlyArray<DeliveryGroup>,\n parentType: GraphQLObjectType,\n sourceValue: unknown,\n path: Path | undefined,\n groupedFieldSet: GroupedFieldSet,\n deliveryGroupMap: ReadonlyMap<DeferUsage, DeliveryGroup>,\n ): PromiseOrValue<ExecutionGroupResult> {\n let result;\n try {\n result = this.executeFields(\n parentType,\n sourceValue,\n path,\n groupedFieldSet,\n deliveryGroupMap,\n );\n } catch (error) {\n this.abort();\n throw error;\n }\n\n if (isPromise(result)) {\n return result.then(\n (resolved) =>\n this.buildExecutionGroupResult(deliveryGroups, path, resolved),\n (error: unknown) => {\n this.abort();\n throw error;\n },\n );\n }\n\n return this.buildExecutionGroupResult(deliveryGroups, path, result);\n }\n\n buildExecutionGroupResult(\n deliveryGroups: ReadonlyArray<DeliveryGroup>,\n path: Path | undefined,\n result: ObjMap<unknown>,\n ): ExecutionGroupResult {\n const data = result;\n const errors = this.collectedErrors.errors;\n return this.finish({\n value: errors.length\n ? { deliveryGroups, path: pathToArray(path), errors, data }\n : { deliveryGroups, path: pathToArray(path), data },\n work: this.getIncrementalWork(),\n });\n }\n\n getIncrementalWork(): IncrementalWork {\n const { groups, tasks, streams, collectedErrors } = this;\n\n if (collectedErrors.errors.length === 0) {\n return { groups, tasks, streams };\n }\n\n const cancellationReason = new Error(\n 'Cancelled secondary to null within original result',\n );\n\n const filteredTasks: Array<ExecutionGroup> = [];\n for (const task of tasks) {\n if (collectedErrors.hasNulledPosition(task.path)) {\n const aborted = task.computation.abort(cancellationReason);\n invariant(!isPromise(aborted));\n } else {\n filteredTasks.push(task);\n }\n }\n\n const filteredStreams: Array<ItemStream> = [];\n for (const stream of streams) {\n if (collectedErrors.hasNulledPosition(stream.path)) {\n const aborted = stream.queue.abort(cancellationReason);\n invariant(!isPromise(aborted));\n } else {\n filteredStreams.push(stream);\n }\n }\n\n return {\n groups,\n tasks: filteredTasks,\n streams: filteredStreams,\n };\n }\n\n /**\n * Instantiates new DeliveryGroups for the given path, returning an\n * updated map of DeferUsage objects to DeliveryGroups.\n *\n * Note: As defer directives may be used with operations returning lists,\n * a DeferUsage object may correspond to many DeliveryGroups.\n *\n * @internal\n */\n getNewDeliveryGroupMap(\n newDeferUsages: ReadonlyArray<DeferUsage>,\n deliveryGroupMap: ReadonlyMap<DeferUsage, DeliveryGroup> | undefined,\n path: Path | undefined,\n ): {\n newDeliveryGroups: ReadonlyArray<DeliveryGroup>;\n newDeliveryGroupMap: ReadonlyMap<DeferUsage, DeliveryGroup>;\n } {\n const newDeliveryGroups: Array<DeliveryGroup> = [];\n const newDeliveryGroupMap = new Map(deliveryGroupMap);\n\n // For each new deferUsage object:\n for (const newDeferUsage of newDeferUsages) {\n const parentDeferUsage = newDeferUsage.parentDeferUsage;\n\n const parent =\n parentDeferUsage === undefined\n ? undefined\n : deliveryGroupFromDeferUsage(parentDeferUsage, newDeliveryGroupMap);\n\n // Create a new DeliveryGroup object\n const deliveryGroup: DeliveryGroup = {\n path,\n label: newDeferUsage.label,\n parent,\n };\n\n // Add it to the list of new groups\n newDeliveryGroups.push(deliveryGroup);\n\n // Update the map\n newDeliveryGroupMap.set(newDeferUsage, deliveryGroup);\n }\n\n return {\n newDeliveryGroups,\n newDeliveryGroupMap,\n };\n }\n\n shouldDefer(\n parentDeferUsages: undefined | DeferUsageSet,\n deferUsages: DeferUsageSet,\n ): boolean {\n // If we have a new child defer usage, defer.\n // Otherwise, this defer usage was already deferred when it was initially\n // encountered, and is now in the midst of executing early, so the new\n // deferred grouped fields set can be executed immediately.\n return (\n parentDeferUsages === undefined ||\n !Array.from(deferUsages).every((deferUsage) =>\n parentDeferUsages.has(deferUsage),\n )\n );\n }\n\n override handleStream(\n index: number,\n path: Path,\n iterator:\n | { handle: Iterator<unknown>; isAsync?: never }\n | { handle: AsyncIterator<unknown>; isAsync: true },\n streamUsage: StreamUsage,\n info: GraphQLResolveInfo,\n itemType: GraphQLOutputType,\n ): boolean {\n const { handle, isAsync } = iterator;\n const queue = this.buildStreamItemQueue(\n index,\n path,\n handle,\n streamUsage.fieldDetailsList,\n info,\n itemType,\n isAsync,\n );\n\n const itemStream: ItemStream = {\n label: streamUsage.label,\n path,\n queue,\n initialCount: index,\n };\n\n this.streams.push(itemStream);\n return true;\n }\n\n buildStreamItemQueue(\n initialIndex: number,\n streamPath: Path,\n iterator: Iterator<unknown> | AsyncIterator<unknown>,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n itemType: GraphQLOutputType,\n isAsync: boolean | undefined,\n ): Queue<StreamItemResult> {\n const createSubExecutor = this.getCreateSubExecutor();\n const { enableEarlyExecution } = this.validatedExecutionArgs;\n const sharedExecutionContext = this.sharedExecutionContext;\n const queue = new Queue<StreamItemResult>(\n async ({ push, stop, onStop, started }) => {\n const abortStreamItems = new Set<(reason?: unknown) => void>();\n let finishedNormally = false;\n let stopRequested = false;\n\n onStop((reason) => {\n stopRequested = true;\n if (!finishedNormally) {\n for (const abortStreamItem of abortStreamItems) {\n abortStreamItem(reason);\n }\n if (isAsync) {\n sharedExecutionContext.asyncWorkTracker.add(\n returnIteratorCatchingErrors(\n iterator as AsyncIterator<unknown>,\n ),\n );\n } else {\n sharedExecutionContext.asyncWorkTracker.addValues(\n collectIteratorPromises(iterator as Iterator<unknown>),\n );\n }\n }\n });\n await (enableEarlyExecution ? Promise.resolve() : started);\n if (stopRequested) {\n return;\n }\n let index = initialIndex;\n while (true) {\n let iteration;\n try {\n if (isAsync) {\n // eslint-disable-next-line no-await-in-loop\n iteration = await iterator.next();\n if (stopRequested) {\n return;\n }\n } else {\n iteration = (iterator as Iterator<unknown>).next();\n }\n } catch (rawError) {\n throw locatedError(\n rawError,\n toNodes(fieldDetailsList),\n pathToArray(streamPath),\n );\n }\n\n if (iteration.done) {\n finishedNormally = true;\n const stopped = stop();\n /* node:coverage disable */\n if (isPromise(stopped)) {\n stopped.catch(() => undefined);\n }\n /* node:coverage enable */\n return;\n }\n\n const itemPath = addPath(streamPath, index, undefined);\n\n const executor = createSubExecutor();\n\n let streamItemResult = executor.completeStreamItem(\n itemPath,\n iteration.value,\n fieldDetailsList,\n info,\n itemType,\n );\n if (isPromise(streamItemResult)) {\n if (enableEarlyExecution) {\n const abortStreamItem = (reason?: unknown) =>\n executor.abort(reason);\n abortStreamItems.add(abortStreamItem);\n streamItemResult = streamItemResult.finally(() => {\n abortStreamItems.delete(abortStreamItem);\n });\n } else {\n // eslint-disable-next-line no-await-in-loop\n streamItemResult = await streamItemResult;\n if (stopRequested) {\n return;\n }\n }\n }\n const pushResult = push(streamItemResult);\n if (isPromise(pushResult)) {\n // eslint-disable-next-line no-await-in-loop\n await pushResult;\n if (stopRequested) {\n return;\n }\n }\n index += 1;\n }\n },\n // set initialCapacity to 100 by default\n 100,\n );\n return queue;\n }\n\n completeStreamItem(\n itemPath: Path,\n item: unknown,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n itemType: GraphQLOutputType,\n ): PromiseOrValue<StreamItemResult> {\n if (isPromiseLike(item)) {\n return this.completePromisedValue(\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n item,\n undefined,\n )\n .then(\n (resolvedItem) => this.buildStreamItemResult(resolvedItem),\n (rawError: unknown) => {\n this.handleFieldError(\n rawError,\n itemType,\n fieldDetailsList,\n itemPath,\n );\n return this.buildStreamItemResult(null);\n },\n )\n .then(undefined, (error: unknown) => {\n this.abort();\n throw error;\n });\n }\n\n let result: PromiseOrValue<unknown>;\n try {\n try {\n result = this.completeValue(\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n item,\n undefined,\n );\n } catch (rawError) {\n this.handleFieldError(rawError, itemType, fieldDetailsList, itemPath);\n return this.buildStreamItemResult(null);\n }\n } catch (error) {\n this.abort();\n throw error;\n }\n\n if (isPromise(result)) {\n return result\n .then(\n (resolved) => this.buildStreamItemResult(resolved),\n (rawError: unknown) => {\n this.handleFieldError(\n rawError,\n itemType,\n fieldDetailsList,\n itemPath,\n );\n return this.buildStreamItemResult(null);\n },\n )\n .then(undefined, (error: unknown) => {\n this.abort();\n throw error;\n });\n }\n\n return this.buildStreamItemResult(result);\n }\n\n buildStreamItemResult(result: unknown): StreamItemResult {\n const item = result;\n const errors = this.collectedErrors.errors;\n const work = this.getIncrementalWork();\n return this.finish(\n errors.length > 0\n ? { value: { item, errors }, work }\n : { value: { item }, work },\n );\n }\n}\n\nfunction toNodes(fieldDetailsList: FieldDetailsList): ReadonlyArray<FieldNode> {\n return fieldDetailsList.map((fieldDetails) => fieldDetails.node);\n}\n\nfunction getDeliveryGroups(\n deferUsageSet: DeferUsageSet,\n deliveryGroupMap: ReadonlyMap<DeferUsage, DeliveryGroup>,\n): ReadonlyArray<DeliveryGroup> {\n return Array.from(deferUsageSet).map((deferUsage) =>\n deliveryGroupFromDeferUsage(deferUsage, deliveryGroupMap),\n );\n}\n\nfunction deliveryGroupFromDeferUsage(\n deferUsage: DeferUsage,\n deliveryGroupMap: ReadonlyMap<DeferUsage, DeliveryGroup>,\n): DeliveryGroup {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return deliveryGroupMap.get(deferUsage)!;\n}\n"]}