@@ -196,14 +196,11 @@ export class IncrementalPublisher {
196
196
this . _reset ( ) ;
197
197
}
198
198
199
- reportNewDeferFragmentRecord (
200
- deferredFragmentRecord : DeferredFragmentRecord ,
201
- parentIncrementalResultRecord :
202
- | InitialResultRecord
203
- | DeferredFragmentRecord
204
- | StreamItemsRecord ,
199
+ reportNewSubsequentResultRecord (
200
+ subsequentResultRecord : SubsequentResultRecord ,
201
+ parentIncrementalDataRecord : IncrementalDataRecord ,
205
202
) : void {
206
- parentIncrementalResultRecord . children . add ( deferredFragmentRecord ) ;
203
+ parentIncrementalDataRecord . children . add ( subsequentResultRecord ) ;
207
204
}
208
205
209
206
reportNewDeferredGroupedFieldSetRecord (
@@ -217,19 +214,6 @@ export class IncrementalPublisher {
217
214
}
218
215
}
219
216
220
- reportNewStreamItemsRecord (
221
- streamItemsRecord : StreamItemsRecord ,
222
- parentIncrementalDataRecord : IncrementalDataRecord ,
223
- ) : void {
224
- if ( isDeferredGroupedFieldSetRecord ( parentIncrementalDataRecord ) ) {
225
- for ( const parent of parentIncrementalDataRecord . deferredFragmentRecords ) {
226
- parent . children . add ( streamItemsRecord ) ;
227
- }
228
- } else {
229
- parentIncrementalDataRecord . children . add ( streamItemsRecord ) ;
230
- }
231
- }
232
-
233
217
completeDeferredGroupedFieldSet (
234
218
deferredGroupedFieldSetRecord : DeferredGroupedFieldSetRecord ,
235
219
data : ObjMap < unknown > ,
@@ -349,8 +333,9 @@ export class IncrementalPublisher {
349
333
350
334
const streams = new Set < StreamRecord > ( ) ;
351
335
352
- const children = this . _getChildren ( erroringIncrementalDataRecord ) ;
353
- const descendants = this . _getDescendants ( children ) ;
336
+ const descendants = this . _getDescendants (
337
+ erroringIncrementalDataRecord . children ,
338
+ ) ;
354
339
355
340
for ( const child of descendants ) {
356
341
if ( ! this . _nullsChildSubsequentResultRecord ( child , nullPathArray ) ) {
@@ -538,19 +523,19 @@ export class IncrementalPublisher {
538
523
const incrementalResults : Array < IncrementalResult > = [ ] ;
539
524
const completedResults : Array < CompletedResult > = [ ] ;
540
525
for ( const subsequentResultRecord of completedRecords ) {
541
- for ( const child of subsequentResultRecord . children ) {
542
- if ( child . filtered ) {
543
- continue ;
544
- }
545
- const pendingSource = isStreamItemsRecord ( child )
546
- ? child . streamRecord
547
- : child ;
548
- if ( ! pendingSource . pendingSent ) {
549
- newPendingSources . add ( pendingSource ) ;
550
- }
551
- this . _publish ( child ) ;
552
- }
553
526
if ( isStreamItemsRecord ( subsequentResultRecord ) ) {
527
+ for ( const child of subsequentResultRecord . children ) {
528
+ if ( child . filtered ) {
529
+ continue ;
530
+ }
531
+ const pendingSource = isStreamItemsRecord ( child )
532
+ ? child . streamRecord
533
+ : child ;
534
+ if ( ! pendingSource . pendingSent ) {
535
+ newPendingSources . add ( pendingSource ) ;
536
+ }
537
+ this . _publish ( child ) ;
538
+ }
554
539
if ( subsequentResultRecord . isFinalRecord ) {
555
540
newPendingSources . delete ( subsequentResultRecord . streamRecord ) ;
556
541
completedResults . push (
@@ -585,6 +570,18 @@ export class IncrementalPublisher {
585
570
continue ;
586
571
}
587
572
for ( const deferredGroupedFieldSetRecord of subsequentResultRecord . deferredGroupedFieldSetRecords ) {
573
+ for ( const child of deferredGroupedFieldSetRecord . children ) {
574
+ if ( child . filtered ) {
575
+ continue ;
576
+ }
577
+ const pendingSource = isStreamItemsRecord ( child )
578
+ ? child . streamRecord
579
+ : child ;
580
+ if ( ! pendingSource . pendingSent ) {
581
+ newPendingSources . add ( pendingSource ) ;
582
+ }
583
+ this . _publish ( child ) ;
584
+ }
588
585
if ( ! deferredGroupedFieldSetRecord . sent ) {
589
586
deferredGroupedFieldSetRecord . sent = true ;
590
587
const incrementalResult : IncrementalDeferResult =
@@ -613,6 +610,8 @@ export class IncrementalPublisher {
613
610
let idWithLongestPath : string | undefined ;
614
611
for ( const deferredFragmentRecord of deferredFragmentRecords ) {
615
612
const id = deferredFragmentRecord . id ;
613
+ // TODO add test
614
+ /* c8 ignore next 3 */
616
615
if ( id === undefined ) {
617
616
continue ;
618
617
}
@@ -668,39 +667,27 @@ export class IncrementalPublisher {
668
667
669
668
if ( subsequentResultRecord . _pending . size > 0 ) {
670
669
this . _introduce ( subsequentResultRecord ) ;
671
- } else if (
672
- subsequentResultRecord . deferredGroupedFieldSetRecords . size > 0 ||
673
- subsequentResultRecord . children . size > 0
674
- ) {
670
+ } else if ( subsequentResultRecord . deferredGroupedFieldSetRecords . size > 0 ) {
675
671
this . _push ( subsequentResultRecord ) ;
676
672
}
677
673
}
678
674
679
- private _getChildren (
680
- erroringIncrementalDataRecord : IncrementalDataRecord ,
681
- ) : ReadonlySet < SubsequentResultRecord > {
682
- const children = new Set < SubsequentResultRecord > ( ) ;
683
- if ( isDeferredGroupedFieldSetRecord ( erroringIncrementalDataRecord ) ) {
684
- for ( const erroringIncrementalResultRecord of erroringIncrementalDataRecord . deferredFragmentRecords ) {
685
- for ( const child of erroringIncrementalResultRecord . children ) {
686
- children . add ( child ) ;
687
- }
688
- }
689
- } else {
690
- for ( const child of erroringIncrementalDataRecord . children ) {
691
- children . add ( child ) ;
692
- }
693
- }
694
- return children ;
695
- }
696
-
697
675
private _getDescendants (
698
676
children : ReadonlySet < SubsequentResultRecord > ,
699
677
descendants = new Set < SubsequentResultRecord > ( ) ,
700
678
) : ReadonlySet < SubsequentResultRecord > {
701
679
for ( const child of children ) {
702
680
descendants . add ( child ) ;
703
- this . _getDescendants ( child . children , descendants ) ;
681
+ if ( isStreamItemsRecord ( child ) ) {
682
+ this . _getDescendants ( child . children , descendants ) ;
683
+ } else {
684
+ for ( const deferredGroupedFieldSetRecord of child . deferredGroupedFieldSetRecords ) {
685
+ this . _getDescendants (
686
+ deferredGroupedFieldSetRecord . children ,
687
+ descendants ,
688
+ ) ;
689
+ }
690
+ }
704
691
}
705
692
return descendants ;
706
693
}
@@ -736,12 +723,6 @@ export class IncrementalPublisher {
736
723
}
737
724
}
738
725
739
- function isDeferredGroupedFieldSetRecord (
740
- incrementalDataRecord : unknown ,
741
- ) : incrementalDataRecord is DeferredGroupedFieldSetRecord {
742
- return incrementalDataRecord instanceof DeferredGroupedFieldSetRecord ;
743
- }
744
-
745
726
function isStreamItemsRecord (
746
727
subsequentResultRecord : unknown ,
747
728
) : subsequentResultRecord is StreamItemsRecord {
@@ -764,6 +745,7 @@ export class DeferredGroupedFieldSetRecord {
764
745
deferredFragmentRecords : ReadonlyArray < DeferredFragmentRecord > ;
765
746
groupedFieldSet : GroupedFieldSet ;
766
747
shouldInitiateDefer : boolean ;
748
+ children : Set < SubsequentResultRecord > ;
767
749
errors : Array < GraphQLError > ;
768
750
data : ObjMap < unknown > | undefined ;
769
751
sent : boolean ;
@@ -778,6 +760,7 @@ export class DeferredGroupedFieldSetRecord {
778
760
this . deferredFragmentRecords = opts . deferredFragmentRecords ;
779
761
this . groupedFieldSet = opts . groupedFieldSet ;
780
762
this . shouldInitiateDefer = opts . shouldInitiateDefer ;
763
+ this . children = new Set ( ) ;
781
764
this . errors = [ ] ;
782
765
this . sent = false ;
783
766
}
@@ -788,7 +771,6 @@ export class DeferredFragmentRecord {
788
771
path : ReadonlyArray < string | number > ;
789
772
label : string | undefined ;
790
773
id : string | undefined ;
791
- children : Set < SubsequentResultRecord > ;
792
774
deferredGroupedFieldSetRecords : Set < DeferredGroupedFieldSetRecord > ;
793
775
errors : Array < GraphQLError > ;
794
776
filtered : boolean ;
@@ -798,7 +780,6 @@ export class DeferredFragmentRecord {
798
780
constructor ( opts : { path : Path | undefined ; label : string | undefined } ) {
799
781
this . path = pathToArray ( opts . path ) ;
800
782
this . label = opts . label ;
801
- this . children = new Set ( ) ;
802
783
this . filtered = false ;
803
784
this . deferredGroupedFieldSetRecords = new Set ( ) ;
804
785
this . errors = [ ] ;
0 commit comments