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
- export interface NewGroupedFieldSetDetails {
12
+ export interface FieldPlan {
16
13
groupedFieldSet : GroupedFieldSet ;
17
- shouldInitiateDefer : boolean ;
14
+ newGroupedFieldSets : Map < DeferUsageSet , GroupedFieldSet > ;
18
15
}
19
16
20
17
export function buildFieldPlan (
21
- fields : Map < string , ReadonlyArray < FieldDetails > > ,
18
+ originalGroupedFieldSet : GroupedFieldSet ,
22
19
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 > ( ) ;
34
22
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 > > ( ) ;
45
24
46
25
const map = new Map <
47
26
string ,
48
27
{
49
28
deferUsageSet : DeferUsageSet ;
50
- fieldDetailsList : ReadonlyArray < FieldDetails > ;
29
+ fieldGroup : FieldGroup ;
51
30
}
52
31
> ( ) ;
53
32
54
- for ( const [ responseKey , fieldDetailsList ] of fields ) {
33
+ for ( const [ responseKey , fieldGroup ] of originalGroupedFieldSet ) {
55
34
const deferUsageSet = new Set < DeferUsage > ( ) ;
56
35
let inOriginalResult = false ;
57
- for ( const fieldDetails of fieldDetailsList ) {
36
+ for ( const fieldDetails of fieldGroup ) {
58
37
const deferUsage = fieldDetails . deferUsage ;
59
38
if ( deferUsage === undefined ) {
60
39
inOriginalResult = true ;
@@ -74,44 +53,21 @@ export function buildFieldPlan(
74
53
}
75
54
} ) ;
76
55
}
77
- map . set ( responseKey , { deferUsageSet, fieldDetailsList } ) ;
56
+ map . set ( responseKey , { deferUsageSet, fieldGroup } ) ;
78
57
}
79
58
80
- for ( const [ responseKey , { deferUsageSet, fieldDetailsList } ] of map ) {
59
+ for ( const [ responseKey , { deferUsageSet, fieldGroup } ] of map ) {
81
60
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 ) ;
91
62
continue ;
92
63
}
93
64
94
65
let newGroupedFieldSet = getBySet ( newGroupedFieldSets , deferUsageSet ) ;
95
66
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 ( ) ;
104
68
newGroupedFieldSets . set ( deferUsageSet , newGroupedFieldSet ) ;
105
69
}
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 ) ;
115
71
}
116
72
117
73
return {
0 commit comments