1+ import { invariant } from '../jsutils/invariant.js' ;
12import type { ObjMap } from '../jsutils/ObjMap.js' ;
23import type { Path } from '../jsutils/Path.js' ;
34import { pathToArray } from '../jsutils/Path.js' ;
@@ -8,7 +9,7 @@ import type {
89 GraphQLFormattedError ,
910} from '../error/GraphQLError.js' ;
1011
11- import type { GroupedFieldSet } from './collectFields.js' ;
12+ import type { DeferUsage , GroupedFieldSet } from './collectFields.js' ;
1213
1314interface IncrementalUpdate < TData = unknown , TExtensions = ObjMap < unknown > > {
1415 pending : ReadonlyArray < PendingResult > ;
@@ -609,16 +610,23 @@ export class IncrementalPublisher {
609610 deferredGroupedFieldSetRecord : DeferredGroupedFieldSetRecord ,
610611 ) : IncrementalDeferResult {
611612 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 ++ ) {
615616 const deferredFragmentRecord = deferredFragmentRecords [ i ] ;
617+ if ( deferredFragmentRecord . id == null ) {
618+ continue ;
619+ }
616620 const length = deferredFragmentRecord . path . length ;
617- if ( length > maxLength ) {
621+ if ( typeof maxLength !== 'number' || length > maxLength ) {
618622 maxLength = length ;
619623 maxIndex = i ;
620624 }
621625 }
626+ invariant (
627+ typeof maxIndex === 'number' ,
628+ 'No id for deferred incremental result' ,
629+ ) ;
622630 const recordWithLongestPath = deferredFragmentRecords [ maxIndex ] ;
623631 const longestPath = recordWithLongestPath . path ;
624632 const subPath = deferredGroupedFieldSetRecord . path . slice (
@@ -763,7 +771,6 @@ export class DeferredGroupedFieldSetRecord {
763771 path : ReadonlyArray < string | number > ;
764772 deferredFragmentRecords : ReadonlyArray < DeferredFragmentRecord > ;
765773 groupedFieldSet : GroupedFieldSet ;
766- shouldInitiateDefer : boolean ;
767774 errors : Array < GraphQLError > ;
768775 data : ObjMap < unknown > | undefined ;
769776 sent : boolean ;
@@ -772,12 +779,10 @@ export class DeferredGroupedFieldSetRecord {
772779 path : Path | undefined ;
773780 deferredFragmentRecords : ReadonlyArray < DeferredFragmentRecord > ;
774781 groupedFieldSet : GroupedFieldSet ;
775- shouldInitiateDefer : boolean ;
776782 } ) {
777783 this . path = pathToArray ( opts . path ) ;
778784 this . deferredFragmentRecords = opts . deferredFragmentRecords ;
779785 this . groupedFieldSet = opts . groupedFieldSet ;
780- this . shouldInitiateDefer = opts . shouldInitiateDefer ;
781786 this . errors = [ ] ;
782787 this . sent = false ;
783788 }
@@ -786,6 +791,7 @@ export class DeferredGroupedFieldSetRecord {
786791/** @internal */
787792export class DeferredFragmentRecord {
788793 path : ReadonlyArray < string | number > ;
794+ deferUsage : DeferUsage ;
789795 label : string | undefined ;
790796 id : string | undefined ;
791797 children : Set < SubsequentResultRecord > ;
@@ -795,9 +801,10 @@ export class DeferredFragmentRecord {
795801 pendingSent ?: boolean ;
796802 _pending : Set < DeferredGroupedFieldSetRecord > ;
797803
798- constructor ( opts : { path : Path | undefined ; label : string | undefined } ) {
804+ constructor ( opts : { path : Path | undefined ; deferUsage : DeferUsage } ) {
799805 this . path = pathToArray ( opts . path ) ;
800- this . label = opts . label ;
806+ this . label = opts . deferUsage . label ;
807+ this . deferUsage = opts . deferUsage ;
801808 this . children = new Set ( ) ;
802809 this . filtered = false ;
803810 this . deferredGroupedFieldSetRecords = new Set ( ) ;
0 commit comments