Skip to content

Commit c350599

Browse files
committed
don't ever send empty pendings, instead grab the children
1 parent 2ce309d commit c350599

File tree

2 files changed

+21
-22
lines changed

2 files changed

+21
-22
lines changed

src/execution/IncrementalPublisher.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,8 @@ export class IncrementalPublisher {
306306
if (child.filtered) {
307307
continue;
308308
}
309-
const maybePendingSource = this._publish(child);
310-
if (maybePendingSource) {
309+
const maybePendingSources = this._publish(child);
310+
for (const maybePendingSource of maybePendingSources) {
311311
pendingSources.add(maybePendingSource);
312312
}
313313
}
@@ -537,8 +537,8 @@ export class IncrementalPublisher {
537537
if (child.filtered) {
538538
continue;
539539
}
540-
const maybePendingSource = this._publish(child);
541-
if (maybePendingSource) {
540+
const maybePendingSources = this._publish(child);
541+
for (const maybePendingSource of maybePendingSources) {
542542
newPendingSources.add(maybePendingSource);
543543
}
544544
}
@@ -649,7 +649,7 @@ export class IncrementalPublisher {
649649

650650
private _publish(
651651
subsequentResultRecord: SubsequentResultRecord,
652-
): DeferredFragmentRecord | StreamRecord | undefined {
652+
): ReadonlyArray<DeferredFragmentRecord | StreamRecord> {
653653
if (isStreamItemsRecord(subsequentResultRecord)) {
654654
if (subsequentResultRecord.isCompleted) {
655655
this._push(subsequentResultRecord);
@@ -659,25 +659,31 @@ export class IncrementalPublisher {
659659

660660
const stream = subsequentResultRecord.streamRecord;
661661
if (!stream.pendingSent) {
662-
return stream;
662+
return [stream];
663663
}
664-
return;
664+
return [];
665665
}
666666

667667
if (subsequentResultRecord._pending.size > 0) {
668668
this._introduce(subsequentResultRecord);
669669
} else if (
670-
subsequentResultRecord.deferredGroupedFieldSetRecords.size > 0 ||
671-
subsequentResultRecord.children.size > 0
670+
subsequentResultRecord.deferredGroupedFieldSetRecords.size === 0
672671
) {
673-
this._push(subsequentResultRecord);
672+
const newPendingSources = [];
673+
for (const child of subsequentResultRecord.children) {
674+
const maybeNewPendingSources = this._publish(child);
675+
newPendingSources.push(...maybeNewPendingSources);
676+
}
677+
return newPendingSources;
674678
} else {
675-
return;
679+
this._push(subsequentResultRecord);
676680
}
677681

678682
if (!subsequentResultRecord.pendingSent) {
679-
return subsequentResultRecord;
683+
return [subsequentResultRecord];
680684
}
685+
686+
return [];
681687
}
682688

683689
private _getChildren(

src/execution/__tests__/defer-test.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,34 +1077,27 @@ describe('Execute: defer directive', () => {
10771077
},
10781078
},
10791079
pending: [
1080-
{ id: '0', path: ['hero'] },
1080+
{ id: '0', path: ['hero', 'nestedObject', 'deeperObject'] },
10811081
{ id: '1', path: ['hero', 'nestedObject', 'deeperObject'] },
10821082
],
10831083
hasNext: true,
10841084
},
10851085
{
1086-
pending: [{ id: '2', path: ['hero', 'nestedObject', 'deeperObject'] }],
10871086
incremental: [
10881087
{
10891088
data: {
10901089
foo: 'foo',
10911090
},
10921091
id: '1',
10931092
},
1094-
],
1095-
completed: [{ id: '0' }, { id: '1' }],
1096-
hasNext: true,
1097-
},
1098-
{
1099-
incremental: [
11001093
{
11011094
data: {
11021095
bar: 'bar',
11031096
},
1104-
id: '2',
1097+
id: '0',
11051098
},
11061099
],
1107-
completed: [{ id: '2' }],
1100+
completed: [{ id: '1' }, { id: '0' }],
11081101
hasNext: false,
11091102
},
11101103
]);

0 commit comments

Comments
 (0)