@@ -301,16 +301,7 @@ export class IncrementalPublisher {
301
301
initialResultRecord : InitialResultRecord ,
302
302
data : ObjMap < unknown > | null ,
303
303
) : ExecutionResult | ExperimentalIncrementalExecutionResults {
304
- const pendingSources = new Set < DeferredFragmentRecord | StreamRecord > ( ) ;
305
- for ( const child of initialResultRecord . children ) {
306
- if ( child . filtered ) {
307
- continue ;
308
- }
309
- const maybePendingSources = this . _publish ( child ) ;
310
- for ( const maybePendingSource of maybePendingSources ) {
311
- pendingSources . add ( maybePendingSource ) ;
312
- }
313
- }
304
+ const pendingSources = this . _publish ( initialResultRecord . children ) ;
314
305
315
306
const errors = initialResultRecord . errors ;
316
307
const initialResult = errors . length === 0 ? { data } : { errors, data } ;
@@ -533,15 +524,7 @@ export class IncrementalPublisher {
533
524
const incrementalResults : Array < IncrementalResult > = [ ] ;
534
525
const completedResults : Array < CompletedResult > = [ ] ;
535
526
for ( const subsequentResultRecord of completedRecords ) {
536
- for ( const child of subsequentResultRecord . children ) {
537
- if ( child . filtered ) {
538
- continue ;
539
- }
540
- const maybePendingSources = this . _publish ( child ) ;
541
- for ( const maybePendingSource of maybePendingSources ) {
542
- newPendingSources . add ( maybePendingSource ) ;
543
- }
544
- }
527
+ this . _publish ( subsequentResultRecord . children , newPendingSources ) ;
545
528
if ( isStreamItemsRecord ( subsequentResultRecord ) ) {
546
529
if ( subsequentResultRecord . isFinalRecord ) {
547
530
newPendingSources . delete ( subsequentResultRecord . streamRecord ) ;
@@ -648,42 +631,50 @@ export class IncrementalPublisher {
648
631
}
649
632
650
633
private _publish (
651
- subsequentResultRecord : SubsequentResultRecord ,
652
- ) : ReadonlyArray < DeferredFragmentRecord | StreamRecord > {
653
- if ( isStreamItemsRecord ( subsequentResultRecord ) ) {
654
- if ( subsequentResultRecord . isCompleted ) {
655
- this . _push ( subsequentResultRecord ) ;
656
- } else {
657
- this . _introduce ( subsequentResultRecord ) ;
634
+ subsequentResultRecords : ReadonlySet < SubsequentResultRecord > ,
635
+ pendingSources = new Set < DeferredFragmentRecord | StreamRecord > ( ) ,
636
+ ) : Set < DeferredFragmentRecord | StreamRecord > {
637
+ const emptyRecords : Array < SubsequentResultRecord > = [ ] ;
638
+
639
+ for ( const subsequentResultRecord of subsequentResultRecords ) {
640
+ if ( subsequentResultRecord . filtered ) {
641
+ continue ;
658
642
}
643
+ if ( isStreamItemsRecord ( subsequentResultRecord ) ) {
644
+ if ( subsequentResultRecord . isCompleted ) {
645
+ this . _push ( subsequentResultRecord ) ;
646
+ } else {
647
+ this . _introduce ( subsequentResultRecord ) ;
648
+ }
659
649
660
- const stream = subsequentResultRecord . streamRecord ;
661
- if ( ! stream . pendingSent ) {
662
- return [ stream ] ;
650
+ const stream = subsequentResultRecord . streamRecord ;
651
+ if ( ! stream . pendingSent ) {
652
+ pendingSources . add ( stream ) ;
653
+ }
654
+ continue ;
663
655
}
664
- return [ ] ;
665
- }
666
656
667
- if ( subsequentResultRecord . _pending . size > 0 ) {
668
- this . _introduce ( subsequentResultRecord ) ;
669
- } else if (
670
- subsequentResultRecord . deferredGroupedFieldSetRecords . size === 0
671
- ) {
672
- const newPendingSources = [ ] ;
673
- for ( const child of subsequentResultRecord . children ) {
674
- const maybeNewPendingSources = this . _publish ( child ) ;
675
- newPendingSources . push ( ...maybeNewPendingSources ) ;
657
+ if ( subsequentResultRecord . _pending . size > 0 ) {
658
+ this . _introduce ( subsequentResultRecord ) ;
659
+ } else if (
660
+ subsequentResultRecord . deferredGroupedFieldSetRecords . size === 0
661
+ ) {
662
+ emptyRecords . push ( subsequentResultRecord ) ;
663
+ continue ;
664
+ } else {
665
+ this . _push ( subsequentResultRecord ) ;
666
+ }
667
+
668
+ if ( ! subsequentResultRecord . pendingSent ) {
669
+ pendingSources . add ( subsequentResultRecord ) ;
676
670
}
677
- return newPendingSources ;
678
- } else {
679
- this . _push ( subsequentResultRecord ) ;
680
671
}
681
672
682
- if ( ! subsequentResultRecord . pendingSent ) {
683
- return [ subsequentResultRecord ] ;
673
+ for ( const emptyRecord of emptyRecords ) {
674
+ this . _publish ( emptyRecord . children , pendingSources ) ;
684
675
}
685
676
686
- return [ ] ;
677
+ return pendingSources ;
687
678
}
688
679
689
680
private _getChildren (
0 commit comments