Skip to content

Commit 24ce84d

Browse files
committed
pass subsequentPayloads rather than entire exeContext
1 parent 99bca0d commit 24ce84d

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
@@ -354,7 +354,9 @@ function executeImpl(
354354
...initialResult,
355355
hasNext: true,
356356
},
357-
subsequentResults: yieldSubsequentPayloads(exeContext),
357+
subsequentResults: yieldSubsequentPayloads(
358+
exeContext.subsequentPayloads,
359+
),
358360
};
359361
}
360362
return initialResult;
@@ -372,7 +374,9 @@ function executeImpl(
372374
...initialResult,
373375
hasNext: true,
374376
},
375-
subsequentResults: yieldSubsequentPayloads(exeContext),
377+
subsequentResults: yieldSubsequentPayloads(
378+
exeContext.subsequentPayloads,
379+
),
376380
};
377381
}
378382
return initialResult;
@@ -774,7 +778,11 @@ function handleRawError(
774778
): null {
775779
const errors = asyncPayloadRecord?.errors ?? exeContext.errors;
776780
addError(rawError, fieldNodes, returnType, path, errors);
777-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
781+
filterSubsequentPayloads(
782+
exeContext.subsequentPayloads,
783+
path,
784+
asyncPayloadRecord,
785+
);
778786
return null;
779787
}
780788

@@ -993,7 +1001,11 @@ function completeValueCatchingErrors(
9931001
path,
9941002
errors,
9951003
);
996-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
1004+
filterSubsequentPayloads(
1005+
exeContext.subsequentPayloads,
1006+
path,
1007+
asyncPayloadRecord,
1008+
);
9971009
return handledError;
9981010
});
9991011
}
@@ -1949,7 +1961,11 @@ function executeStreamField(
19491961
(value) => [value],
19501962
(error) => {
19511963
asyncPayloadRecord.errors.push(error);
1952-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
1964+
filterSubsequentPayloads(
1965+
exeContext.subsequentPayloads,
1966+
path,
1967+
asyncPayloadRecord,
1968+
);
19531969
return null;
19541970
},
19551971
);
@@ -1967,7 +1983,11 @@ function executeStreamField(
19671983
);
19681984
} catch (error) {
19691985
asyncPayloadRecord.errors.push(error);
1970-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
1986+
filterSubsequentPayloads(
1987+
exeContext.subsequentPayloads,
1988+
path,
1989+
asyncPayloadRecord,
1990+
);
19711991
asyncPayloadRecord.addItems(null);
19721992
return asyncPayloadRecord;
19731993
}
@@ -2061,7 +2081,11 @@ async function executeStreamIterator(
20612081
);
20622082
} catch (error) {
20632083
asyncPayloadRecord.errors.push(error);
2064-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
2084+
filterSubsequentPayloads(
2085+
exeContext.subsequentPayloads,
2086+
path,
2087+
asyncPayloadRecord,
2088+
);
20652089
asyncPayloadRecord.addItems(null);
20662090
// entire stream has errored and bubbled upwards
20672091
if (iterator?.return) {
@@ -2080,7 +2104,11 @@ async function executeStreamIterator(
20802104
(value) => [value],
20812105
(error) => {
20822106
asyncPayloadRecord.errors.push(error);
2083-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
2107+
filterSubsequentPayloads(
2108+
exeContext.subsequentPayloads,
2109+
path,
2110+
asyncPayloadRecord,
2111+
);
20842112
return null;
20852113
},
20862114
);
@@ -2099,12 +2127,12 @@ async function executeStreamIterator(
20992127
}
21002128

21012129
function filterSubsequentPayloads(
2102-
exeContext: ExecutionContext,
2130+
subsequentPayloads: Set<AsyncPayloadRecord>,
21032131
nullPath: Path,
21042132
currentAsyncRecord: AsyncPayloadRecord | undefined,
21052133
): void {
21062134
const nullPathArray = pathToArray(nullPath);
2107-
exeContext.subsequentPayloads.forEach((asyncRecord) => {
2135+
subsequentPayloads.forEach((asyncRecord) => {
21082136
if (asyncRecord === currentAsyncRecord) {
21092137
// don't remove payload from where error originates
21102138
return;
@@ -2121,20 +2149,20 @@ function filterSubsequentPayloads(
21212149
// ignore error
21222150
});
21232151
}
2124-
exeContext.subsequentPayloads.delete(asyncRecord);
2152+
subsequentPayloads.delete(asyncRecord);
21252153
});
21262154
}
21272155

21282156
function getCompletedIncrementalResults(
2129-
exeContext: ExecutionContext,
2157+
subsequentPayloads: Set<AsyncPayloadRecord>,
21302158
): Array<IncrementalResult> {
21312159
const incrementalResults: Array<IncrementalResult> = [];
2132-
for (const asyncPayloadRecord of exeContext.subsequentPayloads) {
2160+
for (const asyncPayloadRecord of subsequentPayloads) {
21332161
const incrementalResult: IncrementalResult = {};
21342162
if (!asyncPayloadRecord.isCompleted) {
21352163
continue;
21362164
}
2137-
exeContext.subsequentPayloads.delete(asyncPayloadRecord);
2165+
subsequentPayloads.delete(asyncPayloadRecord);
21382166
if (isStreamPayload(asyncPayloadRecord)) {
21392167
const items = asyncPayloadRecord.items;
21402168
if (asyncPayloadRecord.isCompletedIterator) {
@@ -2160,7 +2188,7 @@ function getCompletedIncrementalResults(
21602188
}
21612189

21622190
function yieldSubsequentPayloads(
2163-
exeContext: ExecutionContext,
2191+
subsequentPayloads: Set<AsyncPayloadRecord>,
21642192
): AsyncGenerator<SubsequentIncrementalExecutionResult, void, void> {
21652193
let isDone = false;
21662194

@@ -2171,17 +2199,15 @@ function yieldSubsequentPayloads(
21712199
return { value: undefined, done: true };
21722200
}
21732201

2174-
await Promise.race(
2175-
Array.from(exeContext.subsequentPayloads).map((p) => p.promise),
2176-
);
2202+
await Promise.race(Array.from(subsequentPayloads).map((p) => p.promise));
21772203

21782204
if (isDone) {
21792205
// a different call to next has exhausted all payloads
21802206
return { value: undefined, done: true };
21812207
}
21822208

2183-
const incremental = getCompletedIncrementalResults(exeContext);
2184-
const hasNext = exeContext.subsequentPayloads.size > 0;
2209+
const incremental = getCompletedIncrementalResults(subsequentPayloads);
2210+
const hasNext = subsequentPayloads.size > 0;
21852211

21862212
if (!incremental.length && hasNext) {
21872213
return next();
@@ -2199,7 +2225,7 @@ function yieldSubsequentPayloads(
21992225

22002226
function returnStreamIterators() {
22012227
const promises: Array<Promise<IteratorResult<unknown>>> = [];
2202-
exeContext.subsequentPayloads.forEach((asyncPayloadRecord) => {
2228+
subsequentPayloads.forEach((asyncPayloadRecord) => {
22032229
if (
22042230
isStreamPayload(asyncPayloadRecord) &&
22052231
asyncPayloadRecord.iterator?.return

0 commit comments

Comments
 (0)