1
+ import { invariant } from '../jsutils/invariant.js' ;
1
2
import type { ObjMap } from '../jsutils/ObjMap.js' ;
2
3
import type { Path } from '../jsutils/Path.js' ;
3
4
import { pathToArray } from '../jsutils/Path.js' ;
@@ -8,7 +9,7 @@ import type {
8
9
GraphQLFormattedError ,
9
10
} from '../error/GraphQLError.js' ;
10
11
11
- import type { GroupedFieldSet } from './collectFields.js' ;
12
+ import type { DeferUsage , GroupedFieldSet } from './collectFields.js' ;
12
13
13
14
interface IncrementalUpdate < TData = unknown , TExtensions = ObjMap < unknown > > {
14
15
pending : ReadonlyArray < PendingResult > ;
@@ -609,16 +610,23 @@ export class IncrementalPublisher {
609
610
deferredGroupedFieldSetRecord : DeferredGroupedFieldSetRecord ,
610
611
) : IncrementalDeferResult {
611
612
const { data, deferredFragmentRecords } = deferredGroupedFieldSetRecord ;
612
- let maxLength = deferredFragmentRecords [ 0 ] . path . length ;
613
- let maxIndex = 0 ;
614
- for ( let i = 1 ; i < deferredFragmentRecords . length ; i ++ ) {
613
+ let maxLength ;
614
+ let maxIndex ;
615
+ for ( let i = 0 ; i < deferredFragmentRecords . length ; i ++ ) {
615
616
const deferredFragmentRecord = deferredFragmentRecords [ i ] ;
617
+ if ( deferredFragmentRecord . id == null ) {
618
+ continue ;
619
+ }
616
620
const length = deferredFragmentRecord . path . length ;
617
- if ( length > maxLength ) {
621
+ if ( typeof maxLength !== 'number' || length > maxLength ) {
618
622
maxLength = length ;
619
623
maxIndex = i ;
620
624
}
621
625
}
626
+ invariant (
627
+ typeof maxIndex === 'number' ,
628
+ 'No id for deferred incremental result' ,
629
+ ) ;
622
630
const recordWithLongestPath = deferredFragmentRecords [ maxIndex ] ;
623
631
const longestPath = recordWithLongestPath . path ;
624
632
const subPath = deferredGroupedFieldSetRecord . path . slice (
@@ -763,7 +771,6 @@ export class DeferredGroupedFieldSetRecord {
763
771
path : ReadonlyArray < string | number > ;
764
772
deferredFragmentRecords : ReadonlyArray < DeferredFragmentRecord > ;
765
773
groupedFieldSet : GroupedFieldSet ;
766
- shouldInitiateDefer : boolean ;
767
774
errors : Array < GraphQLError > ;
768
775
data : ObjMap < unknown > | undefined ;
769
776
sent : boolean ;
@@ -772,12 +779,10 @@ export class DeferredGroupedFieldSetRecord {
772
779
path : Path | undefined ;
773
780
deferredFragmentRecords : ReadonlyArray < DeferredFragmentRecord > ;
774
781
groupedFieldSet : GroupedFieldSet ;
775
- shouldInitiateDefer : boolean ;
776
782
} ) {
777
783
this . path = pathToArray ( opts . path ) ;
778
784
this . deferredFragmentRecords = opts . deferredFragmentRecords ;
779
785
this . groupedFieldSet = opts . groupedFieldSet ;
780
- this . shouldInitiateDefer = opts . shouldInitiateDefer ;
781
786
this . errors = [ ] ;
782
787
this . sent = false ;
783
788
}
@@ -786,6 +791,7 @@ export class DeferredGroupedFieldSetRecord {
786
791
/** @internal */
787
792
export class DeferredFragmentRecord {
788
793
path : ReadonlyArray < string | number > ;
794
+ deferUsage : DeferUsage ;
789
795
label : string | undefined ;
790
796
id : string | undefined ;
791
797
children : Set < SubsequentResultRecord > ;
@@ -795,9 +801,10 @@ export class DeferredFragmentRecord {
795
801
pendingSent ?: boolean ;
796
802
_pending : Set < DeferredGroupedFieldSetRecord > ;
797
803
798
- constructor ( opts : { path : Path | undefined ; label : string | undefined } ) {
804
+ constructor ( opts : { path : Path | undefined ; deferUsage : DeferUsage } ) {
799
805
this . path = pathToArray ( opts . path ) ;
800
- this . label = opts . label ;
806
+ this . label = opts . deferUsage . label ;
807
+ this . deferUsage = opts . deferUsage ;
801
808
this . children = new Set ( ) ;
802
809
this . filtered = false ;
803
810
this . deferredGroupedFieldSetRecords = new Set ( ) ;
0 commit comments