{"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"]}