Skip to content

Commit 464af2b

Browse files
committed
create new deferred grouped field set records lazily
1 parent 2aedf25 commit 464af2b

File tree

1 file changed

+35
-45
lines changed

1 file changed

+35
-45
lines changed

src/execution/execute.ts

Lines changed: 35 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -426,13 +426,6 @@ function executeOperation(
426426

427427
const path = undefined;
428428

429-
const newDeferredGroupedFieldSetRecords = addNewDeferredGroupedFieldSets(
430-
incrementalPublisher,
431-
newGroupedFieldSetDetailsMap,
432-
newDeferMap,
433-
path,
434-
);
435-
436429
let result;
437430
switch (operation.operation) {
438431
case OperationTypeNode.QUERY:
@@ -476,7 +469,7 @@ function executeOperation(
476469
rootType,
477470
rootValue,
478471
path,
479-
newDeferredGroupedFieldSetRecords,
472+
newGroupedFieldSetDetailsMap,
480473
newDeferMap,
481474
);
482475

@@ -1501,36 +1494,28 @@ function deferredFragmentRecordFromDeferUsage(
15011494
return deferMap.get(deferUsage)!;
15021495
}
15031496

1504-
function addNewDeferredGroupedFieldSets(
1497+
function addNewDeferredGroupedFieldSet(
15051498
incrementalPublisher: IncrementalPublisher,
1506-
newGroupedFieldSetDetailsMap: Map<DeferUsageSet, NewGroupedFieldSetDetails>,
1499+
deferUsageSet: DeferUsageSet,
1500+
groupedFieldSet: GroupedFieldSet,
1501+
shouldInitiateDefer: boolean,
15071502
deferMap: ReadonlyMap<DeferUsage, DeferredFragmentRecord>,
15081503
path?: Path | undefined,
1509-
): ReadonlyArray<DeferredGroupedFieldSetRecord> {
1510-
const newDeferredGroupedFieldSetRecords: Array<DeferredGroupedFieldSetRecord> =
1511-
[];
1512-
1513-
for (const [
1504+
): DeferredGroupedFieldSetRecord {
1505+
const deferredFragmentRecords = getDeferredFragmentRecords(
15141506
deferUsageSet,
1515-
{ groupedFieldSet, shouldInitiateDefer },
1516-
] of newGroupedFieldSetDetailsMap) {
1517-
const deferredFragmentRecords = getDeferredFragmentRecords(
1518-
deferUsageSet,
1519-
deferMap,
1520-
);
1521-
const deferredGroupedFieldSetRecord = new DeferredGroupedFieldSetRecord({
1522-
path,
1523-
deferredFragmentRecords,
1524-
groupedFieldSet,
1525-
shouldInitiateDefer,
1526-
});
1527-
incrementalPublisher.reportNewDeferredGroupedFieldSetRecord(
1528-
deferredGroupedFieldSetRecord,
1529-
);
1530-
newDeferredGroupedFieldSetRecords.push(deferredGroupedFieldSetRecord);
1531-
}
1532-
1533-
return newDeferredGroupedFieldSetRecords;
1507+
deferMap,
1508+
);
1509+
const deferredGroupedFieldSetRecord = new DeferredGroupedFieldSetRecord({
1510+
path,
1511+
deferredFragmentRecords,
1512+
groupedFieldSet,
1513+
shouldInitiateDefer,
1514+
});
1515+
incrementalPublisher.reportNewDeferredGroupedFieldSetRecord(
1516+
deferredGroupedFieldSetRecord,
1517+
);
1518+
return deferredGroupedFieldSetRecord;
15341519
}
15351520

15361521
function getDeferredFragmentRecords(
@@ -1565,13 +1550,6 @@ function collectAndExecuteSubfields(
15651550
path,
15661551
);
15671552

1568-
const newDeferredGroupedFieldSetRecords = addNewDeferredGroupedFieldSets(
1569-
incrementalPublisher,
1570-
newGroupedFieldSetDetailsMap,
1571-
newDeferMap,
1572-
path,
1573-
);
1574-
15751553
const subFields = executeFields(
15761554
exeContext,
15771555
returnType,
@@ -1587,7 +1565,7 @@ function collectAndExecuteSubfields(
15871565
returnType,
15881566
result,
15891567
path,
1590-
newDeferredGroupedFieldSetRecords,
1568+
newGroupedFieldSetDetailsMap,
15911569
newDeferMap,
15921570
);
15931571

@@ -1891,11 +1869,23 @@ function executeDeferredGroupedFieldSets(
18911869
parentType: GraphQLObjectType,
18921870
sourceValue: unknown,
18931871
path: Path | undefined,
1894-
newDeferredGroupedFieldSetRecords: ReadonlyArray<DeferredGroupedFieldSetRecord>,
1872+
newGroupedFieldSetDetailsMap: Map<DeferUsageSet, NewGroupedFieldSetDetails>,
18951873
deferMap: ReadonlyMap<DeferUsage, DeferredFragmentRecord>,
18961874
): void {
1897-
for (const deferredGroupedFieldSetRecord of newDeferredGroupedFieldSetRecords) {
1898-
if (deferredGroupedFieldSetRecord.shouldInitiateDefer) {
1875+
for (const [
1876+
deferUsageSet,
1877+
{ groupedFieldSet, shouldInitiateDefer },
1878+
] of newGroupedFieldSetDetailsMap) {
1879+
const deferredGroupedFieldSetRecord = addNewDeferredGroupedFieldSet(
1880+
exeContext.incrementalPublisher,
1881+
deferUsageSet,
1882+
groupedFieldSet,
1883+
shouldInitiateDefer,
1884+
deferMap,
1885+
path,
1886+
);
1887+
1888+
if (shouldInitiateDefer) {
18991889
// eslint-disable-next-line @typescript-eslint/no-floating-promises
19001890
Promise.resolve().then(() =>
19011891
executeDeferredGroupedFieldSet(

0 commit comments

Comments
 (0)