Skip to content

Commit 86a84ac

Browse files
committed
pass subsequentPayloads rather than entire exeContext
1 parent 2ba85cb commit 86a84ac

File tree

1 file changed

+87
-29
lines changed

1 file changed

+87
-29
lines changed

src/execution/execute.ts

Lines changed: 87 additions & 29 deletions
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;
@@ -750,15 +754,23 @@ function executeField(
750754
return completed.then(undefined, (rawError) => {
751755
const errors = asyncPayloadRecord?.errors ?? exeContext.errors;
752756
addError(rawError, fieldNodes, returnType, path, errors);
753-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
757+
filterSubsequentPayloads(
758+
exeContext.subsequentPayloads,
759+
path,
760+
asyncPayloadRecord,
761+
);
754762
return null;
755763
});
756764
}
757765
return completed;
758766
} catch (rawError) {
759767
const errors = asyncPayloadRecord?.errors ?? exeContext.errors;
760768
addError(rawError, fieldNodes, returnType, path, errors);
761-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
769+
filterSubsequentPayloads(
770+
exeContext.subsequentPayloads,
771+
path,
772+
asyncPayloadRecord,
773+
);
762774
return null;
763775
}
764776
}
@@ -950,7 +962,11 @@ async function completePromisedValue(
950962
} catch (rawError) {
951963
const errors = asyncPayloadRecord?.errors ?? exeContext.errors;
952964
addError(rawError, fieldNodes, returnType, path, errors);
953-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
965+
filterSubsequentPayloads(
966+
exeContext.subsequentPayloads,
967+
path,
968+
asyncPayloadRecord,
969+
);
954970
return null;
955971
}
956972
}
@@ -1230,7 +1246,11 @@ function completeListItemValue(
12301246
/* c8 ignore start */ asyncPayloadRecord?.errors ??
12311247
/* c8 ignore stop */ exeContext.errors;
12321248
addError(rawError, fieldNodes, itemType, itemPath, errors);
1233-
filterSubsequentPayloads(exeContext, itemPath, asyncPayloadRecord);
1249+
filterSubsequentPayloads(
1250+
exeContext.subsequentPayloads,
1251+
itemPath,
1252+
asyncPayloadRecord,
1253+
);
12341254
return null;
12351255
}),
12361256
);
@@ -1245,7 +1265,11 @@ function completeListItemValue(
12451265
/* c8 ignore start */ asyncPayloadRecord?.errors ??
12461266
/* c8 ignore stop */ exeContext.errors;
12471267
addError(rawError, fieldNodes, itemType, itemPath, errors);
1248-
filterSubsequentPayloads(exeContext, itemPath, asyncPayloadRecord);
1268+
filterSubsequentPayloads(
1269+
exeContext.subsequentPayloads,
1270+
itemPath,
1271+
asyncPayloadRecord,
1272+
);
12491273
completedResults.push(null);
12501274
}
12511275

@@ -1838,7 +1862,11 @@ function executeStreamField(
18381862
(value) => [value],
18391863
(error) => {
18401864
asyncPayloadRecord.errors.push(error);
1841-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
1865+
filterSubsequentPayloads(
1866+
exeContext.subsequentPayloads,
1867+
path,
1868+
asyncPayloadRecord,
1869+
);
18421870
return null;
18431871
},
18441872
);
@@ -1868,11 +1896,19 @@ function executeStreamField(
18681896
asyncPayloadRecord.errors,
18691897
);
18701898
completedItem = null;
1871-
filterSubsequentPayloads(exeContext, itemPath, asyncPayloadRecord);
1899+
filterSubsequentPayloads(
1900+
exeContext.subsequentPayloads,
1901+
itemPath,
1902+
asyncPayloadRecord,
1903+
);
18721904
}
18731905
} catch (error) {
18741906
asyncPayloadRecord.errors.push(error);
1875-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
1907+
filterSubsequentPayloads(
1908+
exeContext.subsequentPayloads,
1909+
path,
1910+
asyncPayloadRecord,
1911+
);
18761912
asyncPayloadRecord.addItems(null);
18771913
return asyncPayloadRecord;
18781914
}
@@ -1887,14 +1923,22 @@ function executeStreamField(
18871923
itemPath,
18881924
asyncPayloadRecord.errors,
18891925
);
1890-
filterSubsequentPayloads(exeContext, itemPath, asyncPayloadRecord);
1926+
filterSubsequentPayloads(
1927+
exeContext.subsequentPayloads,
1928+
itemPath,
1929+
asyncPayloadRecord,
1930+
);
18911931
return null;
18921932
})
18931933
.then(
18941934
(value) => [value],
18951935
(error) => {
18961936
asyncPayloadRecord.errors.push(error);
1897-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
1937+
filterSubsequentPayloads(
1938+
exeContext.subsequentPayloads,
1939+
path,
1940+
asyncPayloadRecord,
1941+
);
18981942
return null;
18991943
},
19001944
);
@@ -1959,7 +2003,11 @@ async function executeStreamIteratorItem(
19592003
itemPath,
19602004
asyncPayloadRecord.errors,
19612005
);
1962-
filterSubsequentPayloads(exeContext, itemPath, asyncPayloadRecord);
2006+
filterSubsequentPayloads(
2007+
exeContext.subsequentPayloads,
2008+
itemPath,
2009+
asyncPayloadRecord,
2010+
);
19632011
return null;
19642012
});
19652013
}
@@ -1972,7 +2020,11 @@ async function executeStreamIteratorItem(
19722020
itemPath,
19732021
asyncPayloadRecord.errors,
19742022
);
1975-
filterSubsequentPayloads(exeContext, itemPath, asyncPayloadRecord);
2023+
filterSubsequentPayloads(
2024+
exeContext.subsequentPayloads,
2025+
itemPath,
2026+
asyncPayloadRecord,
2027+
);
19762028
return { done: false, value: null };
19772029
}
19782030
}
@@ -2015,7 +2067,11 @@ async function executeStreamIterator(
20152067
);
20162068
} catch (error) {
20172069
asyncPayloadRecord.errors.push(error);
2018-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
2070+
filterSubsequentPayloads(
2071+
exeContext.subsequentPayloads,
2072+
path,
2073+
asyncPayloadRecord,
2074+
);
20192075
asyncPayloadRecord.addItems(null);
20202076
// entire stream has errored and bubbled upwards
20212077
if (iterator?.return) {
@@ -2034,7 +2090,11 @@ async function executeStreamIterator(
20342090
(value) => [value],
20352091
(error) => {
20362092
asyncPayloadRecord.errors.push(error);
2037-
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
2093+
filterSubsequentPayloads(
2094+
exeContext.subsequentPayloads,
2095+
path,
2096+
asyncPayloadRecord,
2097+
);
20382098
return null;
20392099
},
20402100
);
@@ -2053,12 +2113,12 @@ async function executeStreamIterator(
20532113
}
20542114

20552115
function filterSubsequentPayloads(
2056-
exeContext: ExecutionContext,
2116+
subsequentPayloads: Set<AsyncPayloadRecord>,
20572117
nullPath: Path,
20582118
currentAsyncRecord: AsyncPayloadRecord | undefined,
20592119
): void {
20602120
const nullPathArray = pathToArray(nullPath);
2061-
exeContext.subsequentPayloads.forEach((asyncRecord) => {
2121+
subsequentPayloads.forEach((asyncRecord) => {
20622122
if (asyncRecord === currentAsyncRecord) {
20632123
// don't remove payload from where error originates
20642124
return;
@@ -2075,20 +2135,20 @@ function filterSubsequentPayloads(
20752135
// ignore error
20762136
});
20772137
}
2078-
exeContext.subsequentPayloads.delete(asyncRecord);
2138+
subsequentPayloads.delete(asyncRecord);
20792139
});
20802140
}
20812141

20822142
function getCompletedIncrementalResults(
2083-
exeContext: ExecutionContext,
2143+
subsequentPayloads: Set<AsyncPayloadRecord>,
20842144
): Array<IncrementalResult> {
20852145
const incrementalResults: Array<IncrementalResult> = [];
2086-
for (const asyncPayloadRecord of exeContext.subsequentPayloads) {
2146+
for (const asyncPayloadRecord of subsequentPayloads) {
20872147
const incrementalResult: IncrementalResult = {};
20882148
if (!asyncPayloadRecord.isCompleted) {
20892149
continue;
20902150
}
2091-
exeContext.subsequentPayloads.delete(asyncPayloadRecord);
2151+
subsequentPayloads.delete(asyncPayloadRecord);
20922152
if (isStreamPayload(asyncPayloadRecord)) {
20932153
const items = asyncPayloadRecord.items;
20942154
if (asyncPayloadRecord.isCompletedIterator) {
@@ -2114,7 +2174,7 @@ function getCompletedIncrementalResults(
21142174
}
21152175

21162176
function yieldSubsequentPayloads(
2117-
exeContext: ExecutionContext,
2177+
subsequentPayloads: Set<AsyncPayloadRecord>,
21182178
): AsyncGenerator<SubsequentIncrementalExecutionResult, void, void> {
21192179
let isDone = false;
21202180

@@ -2125,17 +2185,15 @@ function yieldSubsequentPayloads(
21252185
return { value: undefined, done: true };
21262186
}
21272187

2128-
await Promise.race(
2129-
Array.from(exeContext.subsequentPayloads).map((p) => p.promise),
2130-
);
2188+
await Promise.race(Array.from(subsequentPayloads).map((p) => p.promise));
21312189

21322190
if (isDone) {
21332191
// a different call to next has exhausted all payloads
21342192
return { value: undefined, done: true };
21352193
}
21362194

2137-
const incremental = getCompletedIncrementalResults(exeContext);
2138-
const hasNext = exeContext.subsequentPayloads.size > 0;
2195+
const incremental = getCompletedIncrementalResults(subsequentPayloads);
2196+
const hasNext = subsequentPayloads.size > 0;
21392197

21402198
if (!incremental.length && hasNext) {
21412199
return next();
@@ -2153,7 +2211,7 @@ function yieldSubsequentPayloads(
21532211

21542212
function returnStreamIterators() {
21552213
const promises: Array<Promise<IteratorResult<unknown>>> = [];
2156-
exeContext.subsequentPayloads.forEach((asyncPayloadRecord) => {
2214+
subsequentPayloads.forEach((asyncPayloadRecord) => {
21572215
if (
21582216
isStreamPayload(asyncPayloadRecord) &&
21592217
asyncPayloadRecord.iterator?.return

0 commit comments

Comments
 (0)