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 ;
12
+ export interface FieldPlan {
13
+ groupedFieldSet : GroupedFieldSet ;
14
+ newGroupedFieldSets : Map < DeferUsageSet , GroupedFieldSet > ;
11
15
}
12
16
13
- export type GroupedFieldSet = Map < string , FieldGroup > ;
14
-
15
17
export function buildFieldPlan (
16
- fields : Map < string , ReadonlyArray < FieldDetails > > ,
18
+ originalGroupedFieldSet : GroupedFieldSet ,
17
19
parentDeferUsages : DeferUsageSet = new Set < DeferUsage > ( ) ,
18
- ) : {
19
- groupedFieldSet : GroupedFieldSet ;
20
- newGroupedFieldSets : Map < DeferUsageSet , GroupedFieldSet > ;
21
- } {
22
- const groupedFieldSet = new Map <
23
- string ,
24
- {
25
- fields : Array < FieldDetails > ;
26
- deferUsages : DeferUsageSet ;
27
- }
28
- > ( ) ;
20
+ ) : FieldPlan {
21
+ const groupedFieldSet = new Map < string , FieldGroup > ( ) ;
29
22
30
- const newGroupedFieldSets = new Map <
31
- DeferUsageSet ,
32
- Map <
33
- string ,
34
- {
35
- fields : Array < FieldDetails > ;
36
- deferUsages : DeferUsageSet ;
37
- }
38
- >
39
- > ( ) ;
23
+ const newGroupedFieldSets = new Map < DeferUsageSet , Map < string , FieldGroup > > ( ) ;
40
24
41
25
const map = new Map <
42
26
string ,
43
27
{
44
28
deferUsageSet : DeferUsageSet ;
45
- fieldDetailsList : ReadonlyArray < FieldDetails > ;
29
+ fieldGroup : FieldGroup ;
46
30
}
47
31
> ( ) ;
48
32
49
- for ( const [ responseKey , fieldDetailsList ] of fields ) {
33
+ for ( const [ responseKey , fieldGroup ] of originalGroupedFieldSet ) {
50
34
const deferUsageSet = new Set < DeferUsage > ( ) ;
51
35
let inOriginalResult = false ;
52
- for ( const fieldDetails of fieldDetailsList ) {
36
+ for ( const fieldDetails of fieldGroup ) {
53
37
const deferUsage = fieldDetails . deferUsage ;
54
38
if ( deferUsage === undefined ) {
55
39
inOriginalResult = true ;
@@ -69,44 +53,21 @@ export function buildFieldPlan(
69
53
}
70
54
} ) ;
71
55
}
72
- map . set ( responseKey , { deferUsageSet, fieldDetailsList } ) ;
56
+ map . set ( responseKey , { deferUsageSet, fieldGroup } ) ;
73
57
}
74
58
75
- for ( const [ responseKey , { deferUsageSet, fieldDetailsList } ] of map ) {
59
+ for ( const [ responseKey , { deferUsageSet, fieldGroup } ] of map ) {
76
60
if ( isSameSet ( deferUsageSet , parentDeferUsages ) ) {
77
- let fieldGroup = groupedFieldSet . get ( responseKey ) ;
78
- if ( fieldGroup === undefined ) {
79
- fieldGroup = {
80
- fields : [ ] ,
81
- deferUsages : deferUsageSet ,
82
- } ;
83
- groupedFieldSet . set ( responseKey , fieldGroup ) ;
84
- }
85
- fieldGroup . fields . push ( ...fieldDetailsList ) ;
61
+ groupedFieldSet . set ( responseKey , fieldGroup ) ;
86
62
continue ;
87
63
}
88
64
89
65
let newGroupedFieldSet = getBySet ( newGroupedFieldSets , deferUsageSet ) ;
90
66
if ( newGroupedFieldSet === undefined ) {
91
- newGroupedFieldSet = new Map <
92
- string ,
93
- {
94
- fields : Array < FieldDetails > ;
95
- deferUsages : DeferUsageSet ;
96
- knownDeferUsages : DeferUsageSet ;
97
- }
98
- > ( ) ;
67
+ newGroupedFieldSet = new Map ( ) ;
99
68
newGroupedFieldSets . set ( deferUsageSet , newGroupedFieldSet ) ;
100
69
}
101
- let fieldGroup = newGroupedFieldSet . get ( responseKey ) ;
102
- if ( fieldGroup === undefined ) {
103
- fieldGroup = {
104
- fields : [ ] ,
105
- deferUsages : deferUsageSet ,
106
- } ;
107
- newGroupedFieldSet . set ( responseKey , fieldGroup ) ;
108
- }
109
- fieldGroup . fields . push ( ...fieldDetailsList ) ;
70
+ newGroupedFieldSet . set ( responseKey , fieldGroup ) ;
110
71
}
111
72
112
73
return {
0 commit comments