From 1fffa685435f455baf2e5f59334fcc6b9ca3cb72 Mon Sep 17 00:00:00 2001 From: Arda TANRIKULU Date: Tue, 25 Feb 2025 16:43:12 +0300 Subject: [PATCH] Cleanup --- packages/executor/package.json | 4 +- .../execution/__tests__/abort-signal.test.ts | 2 +- packages/executor/src/execution/execute.ts | 82 ++++++++++--------- .../src/execution/normalizedExecutor.ts | 21 +++-- 4 files changed, 60 insertions(+), 49 deletions(-) diff --git a/packages/executor/package.json b/packages/executor/package.json index e6c5b821dc8..3f429701c44 100644 --- a/packages/executor/package.json +++ b/packages/executor/package.json @@ -59,8 +59,8 @@ "@graphql-typed-document-node/core": "^3.2.0", "@repeaterjs/repeater": "^3.0.4", "@whatwg-node/disposablestack": "^0.0.5", - "tslib": "^2.4.0", - "value-or-promise": "^1.0.12" + "@whatwg-node/promise-helpers": "^1.0.0", + "tslib": "^2.4.0" }, "devDependencies": { "cross-inspect": "1.0.1", diff --git a/packages/executor/src/execution/__tests__/abort-signal.test.ts b/packages/executor/src/execution/__tests__/abort-signal.test.ts index 9e0b2563a65..de7dfa2db24 100644 --- a/packages/executor/src/execution/__tests__/abort-signal.test.ts +++ b/packages/executor/src/execution/__tests__/abort-signal.test.ts @@ -150,7 +150,7 @@ describe('Abort Signal', () => { didInvokeFirstFn = true; return true; }, - second() { + async second() { didInvokeSecondFn = true; controller.abort(); return true; diff --git a/packages/executor/src/execution/execute.ts b/packages/executor/src/execution/execute.ts index 455eb7f6b48..3d45a6acefe 100644 --- a/packages/executor/src/execution/execute.ts +++ b/packages/executor/src/execution/execute.ts @@ -28,7 +28,6 @@ import { TypeNameMetaFieldDef, versionInfo, } from 'graphql'; -import { ValueOrPromise } from 'value-or-promise'; import { collectSubFields as _collectSubfields, addPath, @@ -57,6 +56,7 @@ import { } from '@graphql-tools/utils'; import { TypedDocumentNode } from '@graphql-typed-document-node/core'; import { DisposableSymbols } from '@whatwg-node/disposablestack'; +import { handleMaybePromise } from '@whatwg-node/promise-helpers'; import { coerceError } from './coerceError.js'; import { flattenAsyncIterable } from './flattenAsyncIterable.js'; import { invariant } from './invariant.js'; @@ -305,36 +305,33 @@ function executeImpl( // Errors from sub-fields of a NonNull type may propagate to the top level, // at which point we still log the error and null the parent field, which // in this case is the entire response. - const result = new ValueOrPromise(() => executeOperation(exeContext)) - .then( - data => { - const initialResult = buildResponse(data, exeContext.errors); - if (exeContext.subsequentPayloads.size > 0) { - return { - initialResult: { - ...initialResult, - hasNext: true, - }, - subsequentResults: yieldSubsequentPayloads(exeContext), - }; - } - - return initialResult; - }, - (error: any) => { - exeContext.signal?.throwIfAborted(); + return handleMaybePromise( + () => executeOperation(exeContext), + data => { + const initialResult = buildResponse(data, exeContext.errors); + if (exeContext.subsequentPayloads.size > 0) { + return { + initialResult: { + ...initialResult, + hasNext: true, + }, + subsequentResults: yieldSubsequentPayloads(exeContext), + }; + } - if (error.errors) { - exeContext.errors.push(...error.errors); - } else { - exeContext.errors.push(error); - } - return buildResponse(null, exeContext.errors); - }, - ) - .resolve()!; + return initialResult; + }, + (error: any) => { + exeContext.signal?.throwIfAborted(); - return result; + if (error.errors) { + exeContext.errors.push(...error.errors); + } else { + exeContext.errors.push(error); + } + return buildResponse(null, exeContext.errors); + }, + ); } /** @@ -575,20 +572,21 @@ function executeFieldsSerially( const fieldPath = addPath(path, responseName, parentType.name); exeContext.signal?.throwIfAborted(); - return new ValueOrPromise(() => - executeField(exeContext, parentType, sourceValue, fieldNodes, fieldPath), - ).then(result => { - if (result === undefined) { - return results; - } + return handleMaybePromise( + () => executeField(exeContext, parentType, sourceValue, fieldNodes, fieldPath), + result => { + if (result === undefined) { + return results; + } - results[responseName] = result; + results[responseName] = result; - return results; - }); + return results; + }, + ); }, Object.create(null), - ).resolve(); + ); } /** @@ -1572,6 +1570,12 @@ export function subscribe( return mapSourceToResponse(exeContext, resultOrStream); } +export function isIncrementalResults( + results: any, +): results is IncrementalExecutionResults { + return results?.initialResult; +} + export function flattenIncrementalResults( incrementalResults: IncrementalExecutionResults, ): AsyncGenerator< diff --git a/packages/executor/src/execution/normalizedExecutor.ts b/packages/executor/src/execution/normalizedExecutor.ts index da96e1d080e..3658d2e5514 100644 --- a/packages/executor/src/execution/normalizedExecutor.ts +++ b/packages/executor/src/execution/normalizedExecutor.ts @@ -1,5 +1,4 @@ import { getOperationAST, GraphQLSchema } from 'graphql'; -import { ValueOrPromise } from 'value-or-promise'; import { ExecutionRequest, ExecutionResult, @@ -8,7 +7,14 @@ import { MaybePromise, memoize1, } from '@graphql-tools/utils'; -import { execute, ExecutionArgs, flattenIncrementalResults, subscribe } from './execute.js'; +import { handleMaybePromise } from '@whatwg-node/promise-helpers'; +import { + execute, + ExecutionArgs, + flattenIncrementalResults, + isIncrementalResults, + subscribe, +} from './execute.js'; export function normalizedExecutor( args: ExecutionArgs, @@ -20,14 +26,15 @@ export function normalizedExecutor execute(args)) - .then((result): MaybeAsyncIterable> => { - if ('initialResult' in result) { + return handleMaybePromise( + () => execute(args), + result => { + if (isIncrementalResults(result)) { return flattenIncrementalResults(result); } return result; - }) - .resolve()!; + }, + ); } export const executorFromSchema = memoize1(function executorFromSchema(