1
1
import { getBySet } from '../jsutils/getBySet.js' ;
2
2
import { isSameSet } from '../jsutils/isSameSet.js' ;
3
3
4
- import type { DeferUsage , FieldDetails } from './collectFields.js' ;
4
+ import type {
5
+ DeferUsage ,
6
+ FieldGroup ,
7
+ GroupedFieldSet ,
8
+ } from './collectFields.js' ;
5
9
6
10
export type DeferUsageSet = ReadonlySet < DeferUsage > ;
7
11
8
- export interface FieldGroup {
9
- fields : ReadonlyArray < FieldDetails > ;
10
- deferUsages ?: DeferUsageSet | undefined ;
11
- }
12
-
13
- export type GroupedFieldSet = Map < string , FieldGroup > ;
14
-
15
12
export interface NewGroupedFieldSetDetails {
16
13
groupedFieldSet : GroupedFieldSet ;
17
14
shouldInitiateDefer : boolean ;
18
15
}
19
16
20
- export function buildFieldPlan (
21
- fields : Map < string , ReadonlyArray < FieldDetails > > ,
22
- parentDeferUsages : DeferUsageSet = new Set < DeferUsage > ( ) ,
23
- ) : {
17
+ export interface FieldPlan {
24
18
groupedFieldSet : GroupedFieldSet ;
25
19
newGroupedFieldSetDetailsMap : Map < DeferUsageSet , NewGroupedFieldSetDetails > ;
26
- } {
27
- const groupedFieldSet = new Map <
28
- string ,
29
- {
30
- fields : Array < FieldDetails > ;
31
- deferUsages : DeferUsageSet ;
32
- }
33
- > ( ) ;
20
+ }
21
+
22
+ export function buildFieldPlan (
23
+ originalGroupedFieldSet : GroupedFieldSet ,
24
+ parentDeferUsages : DeferUsageSet = new Set < DeferUsage > ( ) ,
25
+ ) : FieldPlan {
26
+ const groupedFieldSet : GroupedFieldSet = new Map ( ) ;
34
27
35
28
const newGroupedFieldSetDetailsMap = new Map <
36
29
DeferUsageSet ,
37
- {
38
- groupedFieldSet : Map <
39
- string ,
40
- {
41
- fields : Array < FieldDetails > ;
42
- deferUsages : DeferUsageSet ;
43
- }
44
- > ;
45
- shouldInitiateDefer : boolean ;
46
- }
30
+ NewGroupedFieldSetDetails
47
31
> ( ) ;
48
32
49
33
const map = new Map <
50
34
string ,
51
35
{
52
36
deferUsageSet : DeferUsageSet ;
53
- fieldDetailsList : ReadonlyArray < FieldDetails > ;
37
+ fieldGroup : FieldGroup ;
54
38
}
55
39
> ( ) ;
56
40
57
- for ( const [ responseKey , fieldDetailsList ] of fields ) {
41
+ for ( const [ responseKey , fieldGroup ] of originalGroupedFieldSet ) {
58
42
const deferUsageSet = new Set < DeferUsage > ( ) ;
59
43
let inOriginalResult = false ;
60
- for ( const fieldDetails of fieldDetailsList ) {
44
+ for ( const fieldDetails of fieldGroup ) {
61
45
const deferUsage = fieldDetails . deferUsage ;
62
46
if ( deferUsage === undefined ) {
63
47
inOriginalResult = true ;
@@ -77,20 +61,12 @@ export function buildFieldPlan(
77
61
}
78
62
} ) ;
79
63
}
80
- map . set ( responseKey , { deferUsageSet, fieldDetailsList } ) ;
64
+ map . set ( responseKey , { deferUsageSet, fieldGroup } ) ;
81
65
}
82
66
83
- for ( const [ responseKey , { deferUsageSet, fieldDetailsList } ] of map ) {
67
+ for ( const [ responseKey , { deferUsageSet, fieldGroup } ] of map ) {
84
68
if ( isSameSet ( deferUsageSet , parentDeferUsages ) ) {
85
- let fieldGroup = groupedFieldSet . get ( responseKey ) ;
86
- if ( fieldGroup === undefined ) {
87
- fieldGroup = {
88
- fields : [ ] ,
89
- deferUsages : deferUsageSet ,
90
- } ;
91
- groupedFieldSet . set ( responseKey , fieldGroup ) ;
92
- }
93
- fieldGroup . fields . push ( ...fieldDetailsList ) ;
69
+ groupedFieldSet . set ( responseKey , fieldGroup ) ;
94
70
continue ;
95
71
}
96
72
@@ -100,15 +76,7 @@ export function buildFieldPlan(
100
76
) ;
101
77
let newGroupedFieldSet ;
102
78
if ( newGroupedFieldSetDetails === undefined ) {
103
- newGroupedFieldSet = new Map <
104
- string ,
105
- {
106
- fields : Array < FieldDetails > ;
107
- deferUsages : DeferUsageSet ;
108
- knownDeferUsages : DeferUsageSet ;
109
- }
110
- > ( ) ;
111
-
79
+ newGroupedFieldSet = new Map ( ) ;
112
80
newGroupedFieldSetDetails = {
113
81
groupedFieldSet : newGroupedFieldSet ,
114
82
shouldInitiateDefer : Array . from ( deferUsageSet ) . some (
@@ -122,15 +90,7 @@ export function buildFieldPlan(
122
90
} else {
123
91
newGroupedFieldSet = newGroupedFieldSetDetails . groupedFieldSet ;
124
92
}
125
- let fieldGroup = newGroupedFieldSet . get ( responseKey ) ;
126
- if ( fieldGroup === undefined ) {
127
- fieldGroup = {
128
- fields : [ ] ,
129
- deferUsages : deferUsageSet ,
130
- } ;
131
- newGroupedFieldSet . set ( responseKey , fieldGroup ) ;
132
- }
133
- fieldGroup . fields . push ( ...fieldDetailsList ) ;
93
+ newGroupedFieldSet . set ( responseKey , fieldGroup ) ;
134
94
}
135
95
136
96
return {
0 commit comments