@@ -19,53 +19,22 @@ export function buildFieldPlan(
1919 parentDeferUsages : DeferUsageSet = new Set < DeferUsage > ( ) ,
2020) : FieldPlan {
2121 const groupedFieldSet = new Map < string , FieldGroup > ( ) ;
22-
2322 const newGroupedFieldSets = new Map < DeferUsageSet , Map < string , FieldGroup > > ( ) ;
24-
25- const map = new Map <
26- string ,
27- {
28- deferUsageSet : DeferUsageSet ;
29- fieldGroup : FieldGroup ;
30- }
31- > ( ) ;
32-
3323 for ( const [ responseKey , fieldGroup ] of originalGroupedFieldSet ) {
34- const deferUsageSet = new Set < DeferUsage > ( ) ;
35- let inOriginalResult = false ;
36- for ( const fieldDetails of fieldGroup ) {
37- const deferUsage = fieldDetails . deferUsage ;
38- if ( deferUsage === undefined ) {
39- inOriginalResult = true ;
40- continue ;
41- }
42- deferUsageSet . add ( deferUsage ) ;
43- }
44- if ( inOriginalResult ) {
45- deferUsageSet . clear ( ) ;
46- } else {
47- deferUsageSet . forEach ( ( deferUsage ) => {
48- const ancestors = getAncestors ( deferUsage ) ;
49- for ( const ancestor of ancestors ) {
50- if ( deferUsageSet . has ( ancestor ) ) {
51- deferUsageSet . delete ( deferUsage ) ;
52- }
53- }
54- } ) ;
55- }
56- map . set ( responseKey , { deferUsageSet, fieldGroup } ) ;
57- }
24+ const filteredDeferUsageSet = getFilteredDeferUsageSet ( fieldGroup ) ;
5825
59- for ( const [ responseKey , { deferUsageSet, fieldGroup } ] of map ) {
60- if ( isSameSet ( deferUsageSet , parentDeferUsages ) ) {
26+ if ( isSameSet ( filteredDeferUsageSet , parentDeferUsages ) ) {
6127 groupedFieldSet . set ( responseKey , fieldGroup ) ;
6228 continue ;
6329 }
6430
65- let newGroupedFieldSet = getBySet ( newGroupedFieldSets , deferUsageSet ) ;
31+ let newGroupedFieldSet = getBySet (
32+ newGroupedFieldSets ,
33+ filteredDeferUsageSet ,
34+ ) ;
6635 if ( newGroupedFieldSet === undefined ) {
6736 newGroupedFieldSet = new Map ( ) ;
68- newGroupedFieldSets . set ( deferUsageSet , newGroupedFieldSet ) ;
37+ newGroupedFieldSets . set ( filteredDeferUsageSet , newGroupedFieldSet ) ;
6938 }
7039 newGroupedFieldSet . set ( responseKey , fieldGroup ) ;
7140 }
@@ -76,12 +45,28 @@ export function buildFieldPlan(
7645 } ;
7746}
7847
79- function getAncestors ( deferUsage : DeferUsage ) : ReadonlyArray < DeferUsage > {
80- const ancestors : Array < DeferUsage > = [ ] ;
81- let parentDeferUsage : DeferUsage | undefined = deferUsage . parentDeferUsage ;
82- while ( parentDeferUsage !== undefined ) {
83- ancestors . unshift ( parentDeferUsage ) ;
84- parentDeferUsage = parentDeferUsage . parentDeferUsage ;
48+ function getFilteredDeferUsageSet (
49+ fieldGroup : FieldGroup ,
50+ ) : ReadonlySet < DeferUsage > {
51+ const filteredDeferUsageSet = new Set < DeferUsage > ( ) ;
52+ for ( const fieldDetails of fieldGroup ) {
53+ const deferUsage = fieldDetails . deferUsage ;
54+ if ( deferUsage === undefined ) {
55+ filteredDeferUsageSet . clear ( ) ;
56+ return filteredDeferUsageSet ;
57+ }
58+ filteredDeferUsageSet . add ( deferUsage ) ;
59+ }
60+
61+ for ( const deferUsage of filteredDeferUsageSet ) {
62+ let parentDeferUsage : DeferUsage | undefined = deferUsage . parentDeferUsage ;
63+ while ( parentDeferUsage !== undefined ) {
64+ if ( filteredDeferUsageSet . has ( parentDeferUsage ) ) {
65+ filteredDeferUsageSet . delete ( deferUsage ) ;
66+ break ;
67+ }
68+ parentDeferUsage = parentDeferUsage . parentDeferUsage ;
69+ }
8570 }
86- return ancestors ;
71+ return filteredDeferUsageSet ;
8772}
0 commit comments