@graphql-tools/executor
Advanced tools
Comparing version
@@ -893,3 +893,3 @@ "use strict"; | ||
// "ExecuteQuery" algorithm, for which `execute` is also used. | ||
return (0, flattenAsyncIterable_js_1.flattenAsyncIterable)((0, utils_1.mapAsyncIterator)(resultOrStream, async (payload) => ensureAsyncIterable(await executeImpl(buildPerEventExecutionContext(exeContext, payload))), (error) => { | ||
return (0, flattenAsyncIterable_js_1.flattenAsyncIterable)((0, utils_1.mapAsyncIterator)(resultOrStream, (payload) => (0, promise_helpers_1.handleMaybePromise)(() => executeImpl(buildPerEventExecutionContext(exeContext, payload)), ensureAsyncIterable), (error) => { | ||
if (error instanceof AggregateError) { | ||
@@ -896,0 +896,0 @@ throw new AggregateError(error.errors.map(e => wrapError(e, exeContext.operation)), error.message); |
@@ -5,2 +5,3 @@ "use strict"; | ||
const utils_1 = require("@graphql-tools/utils"); | ||
const promise_helpers_1 = require("@whatwg-node/promise-helpers"); | ||
/** | ||
@@ -13,12 +14,22 @@ * This function transforms a JS object `Record<string, Promise<T>>` into | ||
*/ | ||
async function promiseForObject(object, signal) { | ||
function promiseForObject(object, signal) { | ||
const resolvedObject = Object.create(null); | ||
const promises = Promise.all(Object.entries(object).map(async ([key, value]) => { | ||
resolvedObject[key] = await value; | ||
})); | ||
const promises = []; | ||
for (const key in object) { | ||
const valueSet$ = (0, promise_helpers_1.handleMaybePromise)(() => object[key], resolvedValue => { | ||
resolvedObject[key] = resolvedValue; | ||
}); | ||
if ((0, utils_1.isPromise)(valueSet$)) { | ||
promises.push(valueSet$); | ||
} | ||
} | ||
if (!promises.length) { | ||
return resolvedObject; | ||
} | ||
const promiseAll = promises.length === 1 ? promises[0] : Promise.all(promises); | ||
if (signal) { | ||
const abortPromise = (0, utils_1.getAbortPromise)(signal); | ||
return Promise.race([abortPromise, promises]).then(() => resolvedObject); | ||
return Promise.race([abortPromise, promiseAll]).then(() => resolvedObject); | ||
} | ||
return promises.then(() => resolvedObject); | ||
return promiseAll.then(() => resolvedObject); | ||
} |
@@ -878,3 +878,3 @@ import { assertValidSchema, getDirectiveValues, GraphQLError, isAbstractType, isLeafType, isListType, isNonNullType, isObjectType, Kind, locatedError, SchemaMetaFieldDef, TypeMetaFieldDef, TypeNameMetaFieldDef, versionInfo, } from 'graphql'; | ||
// "ExecuteQuery" algorithm, for which `execute` is also used. | ||
return flattenAsyncIterable(mapAsyncIterator(resultOrStream, async (payload) => ensureAsyncIterable(await executeImpl(buildPerEventExecutionContext(exeContext, payload))), (error) => { | ||
return flattenAsyncIterable(mapAsyncIterator(resultOrStream, (payload) => handleMaybePromise(() => executeImpl(buildPerEventExecutionContext(exeContext, payload)), ensureAsyncIterable), (error) => { | ||
if (error instanceof AggregateError) { | ||
@@ -881,0 +881,0 @@ throw new AggregateError(error.errors.map(e => wrapError(e, exeContext.operation)), error.message); |
@@ -1,2 +0,3 @@ | ||
import { getAbortPromise } from '@graphql-tools/utils'; | ||
import { getAbortPromise, isPromise } from '@graphql-tools/utils'; | ||
import { handleMaybePromise } from '@whatwg-node/promise-helpers'; | ||
/** | ||
@@ -9,12 +10,22 @@ * This function transforms a JS object `Record<string, Promise<T>>` into | ||
*/ | ||
export async function promiseForObject(object, signal) { | ||
export function promiseForObject(object, signal) { | ||
const resolvedObject = Object.create(null); | ||
const promises = Promise.all(Object.entries(object).map(async ([key, value]) => { | ||
resolvedObject[key] = await value; | ||
})); | ||
const promises = []; | ||
for (const key in object) { | ||
const valueSet$ = handleMaybePromise(() => object[key], resolvedValue => { | ||
resolvedObject[key] = resolvedValue; | ||
}); | ||
if (isPromise(valueSet$)) { | ||
promises.push(valueSet$); | ||
} | ||
} | ||
if (!promises.length) { | ||
return resolvedObject; | ||
} | ||
const promiseAll = promises.length === 1 ? promises[0] : Promise.all(promises); | ||
if (signal) { | ||
const abortPromise = getAbortPromise(signal); | ||
return Promise.race([abortPromise, promises]).then(() => resolvedObject); | ||
return Promise.race([abortPromise, promiseAll]).then(() => resolvedObject); | ||
} | ||
return promises.then(() => resolvedObject); | ||
return promiseAll.then(() => resolvedObject); | ||
} |
{ | ||
"name": "@graphql-tools/executor", | ||
"version": "1.4.3", | ||
"version": "1.4.4-alpha-20250305140525-be6757720f8c1bdc8c5108faa54cdde7d6592986", | ||
"sideEffects": false, | ||
@@ -5,0 +5,0 @@ "peerDependencies": { |
@@ -0,1 +1,2 @@ | ||
import { MaybePromise } from '@graphql-tools/utils'; | ||
type ResolvedObject<TData> = { | ||
@@ -11,3 +12,3 @@ [TKey in keyof TData]: TData[TKey] extends Promise<infer TValue> ? TValue : TData[TKey]; | ||
*/ | ||
export declare function promiseForObject<TData>(object: TData, signal?: AbortSignal): Promise<ResolvedObject<TData>>; | ||
export declare function promiseForObject<TData>(object: TData, signal?: AbortSignal): MaybePromise<ResolvedObject<TData>>; | ||
export {}; |
Sorry, the diff of this file is not supported yet
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
174031
0.58%3610
0.64%2
100%