11import { getBySet } from '../jsutils/getBySet.js' ;
22import { isSameSet } from '../jsutils/isSameSet.js' ;
33
4- import type { DeferUsage , FieldDetails } from './collectFields.js' ;
4+ import type {
5+ DeferUsage ,
6+ FieldGroup ,
7+ GroupedFieldSet ,
8+ } from './collectFields.js' ;
59
610export type DeferUsageSet = ReadonlySet < DeferUsage > ;
711
8- export interface FieldGroup {
9- fields : ReadonlyArray < FieldDetails > ;
10- deferUsages ?: DeferUsageSet | undefined ;
11- }
12-
13- export type GroupedFieldSet = Map < string , FieldGroup > ;
14-
15- export interface NewGroupedFieldSetDetails {
12+ export interface FieldPlan {
1613 groupedFieldSet : GroupedFieldSet ;
17- shouldInitiateDefer : boolean ;
14+ newGroupedFieldSets : Map < DeferUsageSet , GroupedFieldSet > ;
1815}
1916
2017export function buildFieldPlan (
21- fields : Map < string , ReadonlyArray < FieldDetails > > ,
18+ originalGroupedFieldSet : GroupedFieldSet ,
2219 parentDeferUsages : DeferUsageSet = new Set < DeferUsage > ( ) ,
23- ) : {
24- groupedFieldSet : GroupedFieldSet ;
25- newGroupedFieldSets : Map < DeferUsageSet , GroupedFieldSet > ;
26- } {
27- const groupedFieldSet = new Map <
28- string ,
29- {
30- fields : Array < FieldDetails > ;
31- deferUsages : DeferUsageSet ;
32- }
33- > ( ) ;
20+ ) : FieldPlan {
21+ const groupedFieldSet = new Map < string , FieldGroup > ( ) ;
3422
35- const newGroupedFieldSets = new Map <
36- DeferUsageSet ,
37- Map <
38- string ,
39- {
40- fields : Array < FieldDetails > ;
41- deferUsages : DeferUsageSet ;
42- }
43- >
44- > ( ) ;
23+ const newGroupedFieldSets = new Map < DeferUsageSet , Map < string , FieldGroup > > ( ) ;
4524
4625 const map = new Map <
4726 string ,
4827 {
4928 deferUsageSet : DeferUsageSet ;
50- fieldDetailsList : ReadonlyArray < FieldDetails > ;
29+ fieldGroup : FieldGroup ;
5130 }
5231 > ( ) ;
5332
54- for ( const [ responseKey , fieldDetailsList ] of fields ) {
33+ for ( const [ responseKey , fieldGroup ] of originalGroupedFieldSet ) {
5534 const deferUsageSet = new Set < DeferUsage > ( ) ;
5635 let inOriginalResult = false ;
57- for ( const fieldDetails of fieldDetailsList ) {
36+ for ( const fieldDetails of fieldGroup ) {
5837 const deferUsage = fieldDetails . deferUsage ;
5938 if ( deferUsage === undefined ) {
6039 inOriginalResult = true ;
@@ -74,44 +53,21 @@ export function buildFieldPlan(
7453 }
7554 } ) ;
7655 }
77- map . set ( responseKey , { deferUsageSet, fieldDetailsList } ) ;
56+ map . set ( responseKey , { deferUsageSet, fieldGroup } ) ;
7857 }
7958
80- for ( const [ responseKey , { deferUsageSet, fieldDetailsList } ] of map ) {
59+ for ( const [ responseKey , { deferUsageSet, fieldGroup } ] of map ) {
8160 if ( isSameSet ( deferUsageSet , parentDeferUsages ) ) {
82- let fieldGroup = groupedFieldSet . get ( responseKey ) ;
83- if ( fieldGroup === undefined ) {
84- fieldGroup = {
85- fields : [ ] ,
86- deferUsages : deferUsageSet ,
87- } ;
88- groupedFieldSet . set ( responseKey , fieldGroup ) ;
89- }
90- fieldGroup . fields . push ( ...fieldDetailsList ) ;
61+ groupedFieldSet . set ( responseKey , fieldGroup ) ;
9162 continue ;
9263 }
9364
9465 let newGroupedFieldSet = getBySet ( newGroupedFieldSets , deferUsageSet ) ;
9566 if ( newGroupedFieldSet === undefined ) {
96- newGroupedFieldSet = new Map <
97- string ,
98- {
99- fields : Array < FieldDetails > ;
100- deferUsages : DeferUsageSet ;
101- knownDeferUsages : DeferUsageSet ;
102- }
103- > ( ) ;
67+ newGroupedFieldSet = new Map ( ) ;
10468 newGroupedFieldSets . set ( deferUsageSet , newGroupedFieldSet ) ;
10569 }
106- let fieldGroup = newGroupedFieldSet . get ( responseKey ) ;
107- if ( fieldGroup === undefined ) {
108- fieldGroup = {
109- fields : [ ] ,
110- deferUsages : deferUsageSet ,
111- } ;
112- newGroupedFieldSet . set ( responseKey , fieldGroup ) ;
113- }
114- fieldGroup . fields . push ( ...fieldDetailsList ) ;
70+ newGroupedFieldSet . set ( responseKey , fieldGroup ) ;
11571 }
11672
11773 return {
0 commit comments