Skip to content

Commit 41f5420

Browse files
committed
pass subsequentPayloads rather than entire exeContext
1 parent a537996 commit 41f5420

File tree

1 file changed

+47
-21
lines changed

1 file changed

+47
-21
lines changed

src/execution/execute.ts

+47-21
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,9 @@ function executeImpl(
363363
...initialResult,
364364
hasNext: true,
365365
},
366-
subsequentResults: yieldSubsequentPayloads(exeContext),
366+
subsequentResults: yieldSubsequentPayloads(
367+
exeContext.subsequentPayloads,
368+
),
367369
};
368370
}
369371
return initialResult;
@@ -381,7 +383,9 @@ function executeImpl(
381383
...initialResult,
382384
hasNext: true,
383385
},
384-
subsequentResults: yieldSubsequentPayloads(exeContext),
386+
subsequentResults: yieldSubsequentPayloads(
387+
exeContext.subsequentPayloads,
388+
),
385389
};
386390
}
387391
return initialResult;
@@ -810,7 +814,11 @@ function handleRawError(
810814
): void {
811815
const errors = asyncPayloadRecord?.errors ?? exeContext.errors;
812816
addError(rawError, fieldNodes, returnType, path, errors);
813-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
817+
filterSubsequentPayloads(
818+
exeContext.subsequentPayloads,
819+
path,
820+
asyncPayloadRecord,
821+
);
814822
}
815823

816824
function addError(
@@ -1867,7 +1875,11 @@ function executeStreamField(
18671875
(value) => [value],
18681876
(error) => {
18691877
asyncPayloadRecord.errors.push(error);
1870-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
1878+
filterSubsequentPayloads(
1879+
exeContext.subsequentPayloads,
1880+
path,
1881+
asyncPayloadRecord,
1882+
);
18711883
return null;
18721884
},
18731885
);
@@ -1901,7 +1913,11 @@ function executeStreamField(
19011913
}
19021914
} catch (error) {
19031915
asyncPayloadRecord.errors.push(error);
1904-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
1916+
filterSubsequentPayloads(
1917+
exeContext.subsequentPayloads,
1918+
path,
1919+
asyncPayloadRecord,
1920+
);
19051921
asyncPayloadRecord.addItems(null);
19061922
return asyncPayloadRecord;
19071923
}
@@ -1923,7 +1939,11 @@ function executeStreamField(
19231939
(value) => [value],
19241940
(error) => {
19251941
asyncPayloadRecord.errors.push(error);
1926-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
1942+
filterSubsequentPayloads(
1943+
exeContext.subsequentPayloads,
1944+
path,
1945+
asyncPayloadRecord,
1946+
);
19271947
return null;
19281948
},
19291949
);
@@ -2044,7 +2064,11 @@ async function executeStreamIterator(
20442064
);
20452065
} catch (error) {
20462066
asyncPayloadRecord.errors.push(error);
2047-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
2067+
filterSubsequentPayloads(
2068+
exeContext.subsequentPayloads,
2069+
path,
2070+
asyncPayloadRecord,
2071+
);
20482072
asyncPayloadRecord.addItems(null);
20492073
// entire stream has errored and bubbled upwards
20502074
if (iterator?.return) {
@@ -2063,7 +2087,11 @@ async function executeStreamIterator(
20632087
(value) => [value],
20642088
(error) => {
20652089
asyncPayloadRecord.errors.push(error);
2066-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
2090+
filterSubsequentPayloads(
2091+
exeContext.subsequentPayloads,
2092+
path,
2093+
asyncPayloadRecord,
2094+
);
20672095
return null;
20682096
},
20692097
);
@@ -2082,12 +2110,12 @@ async function executeStreamIterator(
20822110
}
20832111

20842112
function filterSubsequentPayloads(
2085-
exeContext: ExecutionContext,
2113+
subsequentPayloads: Set<AsyncPayloadRecord>,
20862114
nullPath: Path,
20872115
currentAsyncRecord: AsyncPayloadRecord | undefined,
20882116
): void {
20892117
const nullPathArray = pathToArray(nullPath);
2090-
exeContext.subsequentPayloads.forEach((asyncRecord) => {
2118+
subsequentPayloads.forEach((asyncRecord) => {
20912119
if (asyncRecord === currentAsyncRecord) {
20922120
// don't remove payload from where error originates
20932121
return;
@@ -2104,20 +2132,20 @@ function filterSubsequentPayloads(
21042132
// ignore error
21052133
});
21062134
}
2107-
exeContext.subsequentPayloads.delete(asyncRecord);
2135+
subsequentPayloads.delete(asyncRecord);
21082136
});
21092137
}
21102138

21112139
function getCompletedIncrementalResults(
2112-
exeContext: ExecutionContext,
2140+
subsequentPayloads: Set<AsyncPayloadRecord>,
21132141
): Array<IncrementalResult> {
21142142
const incrementalResults: Array<IncrementalResult> = [];
2115-
for (const asyncPayloadRecord of exeContext.subsequentPayloads) {
2143+
for (const asyncPayloadRecord of subsequentPayloads) {
21162144
const incrementalResult: IncrementalResult = {};
21172145
if (!asyncPayloadRecord.isCompleted) {
21182146
continue;
21192147
}
2120-
exeContext.subsequentPayloads.delete(asyncPayloadRecord);
2148+
subsequentPayloads.delete(asyncPayloadRecord);
21212149
if (isStreamPayload(asyncPayloadRecord)) {
21222150
const items = asyncPayloadRecord.items;
21232151
if (asyncPayloadRecord.isCompletedIterator) {
@@ -2143,7 +2171,7 @@ function getCompletedIncrementalResults(
21432171
}
21442172

21452173
function yieldSubsequentPayloads(
2146-
exeContext: ExecutionContext,
2174+
subsequentPayloads: Set<AsyncPayloadRecord>,
21472175
): AsyncGenerator<SubsequentIncrementalExecutionResult, void, void> {
21482176
let isDone = false;
21492177

@@ -2154,17 +2182,15 @@ function yieldSubsequentPayloads(
21542182
return { value: undefined, done: true };
21552183
}
21562184

2157-
await Promise.race(
2158-
Array.from(exeContext.subsequentPayloads).map((p) => p.promise),
2159-
);
2185+
await Promise.race(Array.from(subsequentPayloads).map((p) => p.promise));
21602186

21612187
if (isDone) {
21622188
// a different call to next has exhausted all payloads
21632189
return { value: undefined, done: true };
21642190
}
21652191

2166-
const incremental = getCompletedIncrementalResults(exeContext);
2167-
const hasNext = exeContext.subsequentPayloads.size > 0;
2192+
const incremental = getCompletedIncrementalResults(subsequentPayloads);
2193+
const hasNext = subsequentPayloads.size > 0;
21682194

21692195
if (!incremental.length && hasNext) {
21702196
return next();
@@ -2182,7 +2208,7 @@ function yieldSubsequentPayloads(
21822208

21832209
function returnStreamIterators() {
21842210
const promises: Array<Promise<IteratorResult<unknown>>> = [];
2185-
exeContext.subsequentPayloads.forEach((asyncPayloadRecord) => {
2211+
subsequentPayloads.forEach((asyncPayloadRecord) => {
21862212
if (
21872213
isStreamPayload(asyncPayloadRecord) &&
21882214
asyncPayloadRecord.iterator?.return

0 commit comments

Comments
 (0)