@@ -55,6 +55,7 @@ import {
5555import { TypedDocumentNode } from '@graphql-typed-document-node/core' ;
5656import { DisposableSymbols } from '@whatwg-node/disposablestack' ;
5757import { createDeferredPromise , handleMaybePromise } from '@whatwg-node/promise-helpers' ;
58+ import { AsyncWorkTracker } from './AsyncWorkTracker.js' ;
5859import { coerceError } from './coerceError.js' ;
5960import { flattenAsyncIterable } from './flattenAsyncIterable.js' ;
6061import { invariant } from './invariant.js' ;
@@ -124,6 +125,7 @@ export interface ExecutionContext<TVariables = any, TContext = any> {
124125 subscribeFieldResolver : GraphQLFieldResolver < any , TContext > ;
125126 errors : Array < GraphQLError > ;
126127 subsequentPayloads : Set < AsyncPayloadRecord > ;
128+ asyncWorkTracker : AsyncWorkTracker ;
127129 signal ?: AbortSignal ;
128130 onSignalAbort ?( handler : ( ) => void ) : void ;
129131 signalPromise ?: Promise < never > ;
@@ -530,6 +532,7 @@ export function buildExecutionContext<TData = any, TVariables = any, TContext =
530532 typeResolver : typeResolver ?? defaultTypeResolver ,
531533 subscribeFieldResolver : subscribeFieldResolver ?? defaultFieldResolver ,
532534 subsequentPayloads : new Set ( ) ,
535+ asyncWorkTracker : new AsyncWorkTracker ( ) ,
533536 errors : [ ] ,
534537 signal,
535538 onSignalAbort,
@@ -546,6 +549,7 @@ function buildPerEventExecutionContext(
546549 ...exeContext ,
547550 rootValue : payload ,
548551 subsequentPayloads : new Set ( ) ,
552+ asyncWorkTracker : new AsyncWorkTracker ( ) ,
549553 errors : [ ] ,
550554 } ;
551555}
@@ -805,10 +809,6 @@ function executeField(
805809
806810/**
807811 * TODO: consider no longer exporting this function
808- *
809- * FIXME: `any` is used as ReturnType to silence graphql@17
810- * but it's missing `getAbortSignal` and `getAsyncHelpers`
811- *
812812 * @internal
813813 */
814814export function buildResolveInfo (
@@ -817,7 +817,7 @@ export function buildResolveInfo(
817817 fieldNodes : Array < FieldNode > ,
818818 parentType : GraphQLObjectType ,
819819 path : Path ,
820- ) : any {
820+ ) : GraphQLResolveInfo {
821821 // The resolve function's optional fourth argument is a collection of
822822 // information about the current execution state.
823823 return {
@@ -832,6 +832,11 @@ export function buildResolveInfo(
832832 operation : exeContext . operation ,
833833 variableValues : exeContext . variableValues ,
834834 signal : exeContext . signal ,
835+ getAbortSignal : ( ) => exeContext . signal ,
836+ getAsyncHelpers : ( ) => ( {
837+ promiseAll : values => exeContext . asyncWorkTracker . promiseAllTrackOnReject ( values ) ,
838+ track : maybePromises => exeContext . asyncWorkTracker . addValues ( maybePromises ) ,
839+ } ) ,
835840 } ;
836841}
837842
0 commit comments