@@ -12,11 +12,10 @@ const semver = require('semver')
12
12
// arborist nodes as its value, that is essential to how we handle multiple
13
13
// query selectors, e.g: `#a, #b, #c` <- 3 diff ast selector nodes
14
14
class Results {
15
- #results = null
15
+ #results = new Map ( )
16
16
#currentAstSelector = null
17
17
18
18
constructor ( rootAstNode ) {
19
- this . #results = new Map ( )
20
19
this . #currentAstSelector = rootAstNode . nodes [ 0 ]
21
20
}
22
21
@@ -37,13 +36,7 @@ class Results {
37
36
// selector nodes and collect all of their resulting arborist nodes into a
38
37
// single/flat Set of items, this ensures we also deduplicate items
39
38
collect ( rootAstNode ) {
40
- const acc = new Set ( )
41
- for ( const n of rootAstNode . nodes ) {
42
- for ( const node of this . #results. get ( n ) ) {
43
- acc . add ( node )
44
- }
45
- }
46
- return acc
39
+ return new Set ( rootAstNode . nodes . flatMap ( n => this . #results. get ( n ) ) )
47
40
}
48
41
}
49
42
@@ -78,7 +71,7 @@ const retrieveNodesFromParsedAst = async ({
78
71
return ( String ( pkg [ attribute ] || '' ) . match ( / \w + / g) || [ ] ) . includes ( value )
79
72
} ,
80
73
'*=' ( { attribute, value, pkg } ) {
81
- return String ( pkg [ attribute ] || '' ) . indexOf ( value ) > - 1
74
+ return String ( pkg [ attribute ] || '' ) . includes ( value )
82
75
} ,
83
76
'|=' ( { attribute, value, pkg } ) {
84
77
return String ( pkg [ attribute ] || '' ) . split ( '-' ) [ 0 ] === value
@@ -91,42 +84,49 @@ const retrieveNodesFromParsedAst = async ({
91
84
} ,
92
85
} ) )
93
86
const depTypesMap = new Map ( Object . entries ( {
94
- '.prod' ( prevResults ) {
95
- return Promise . resolve ( prevResults . filter ( node =>
96
- [ ...node . edgesIn ] . some ( edge => edge . prod ) ) )
87
+ async '.prod' ( prevResults ) {
88
+ return prevResults . filter ( node =>
89
+ [ ...node . edgesIn ] . some ( edge => edge . prod )
90
+ )
97
91
} ,
98
- '.dev' ( prevResults ) {
99
- return Promise . resolve ( prevResults . filter ( node =>
100
- [ ...node . edgesIn ] . some ( edge => edge . dev ) ) )
92
+ async '.dev' ( prevResults ) {
93
+ return prevResults . filter ( node =>
94
+ [ ...node . edgesIn ] . some ( edge => edge . dev )
95
+ )
101
96
} ,
102
- '.optional' ( prevResults ) {
103
- return Promise . resolve ( prevResults . filter ( node =>
104
- [ ...node . edgesIn ] . some ( edge => edge . optional ) ) )
97
+ async '.optional' ( prevResults ) {
98
+ return prevResults . filter ( node =>
99
+ [ ...node . edgesIn ] . some ( edge => edge . optional )
100
+ )
105
101
} ,
106
- '.peer' ( prevResults ) {
107
- return Promise . resolve ( prevResults . filter ( node =>
108
- [ ...node . edgesIn ] . some ( edge => edge . peer ) ) )
102
+ async '.peer' ( prevResults ) {
103
+ return prevResults . filter ( node =>
104
+ [ ...node . edgesIn ] . some ( edge => edge . peer )
105
+ )
109
106
} ,
110
- '.workspace' ( prevResults ) {
111
- return Promise . resolve (
112
- prevResults . filter ( node => node . isWorkspace ) )
107
+ async '.workspace' ( prevResults ) {
108
+ return prevResults . filter ( node =>
109
+ node . isWorkspace
110
+ )
113
111
} ,
114
- '.bundled' ( prevResults ) {
115
- return Promise . resolve (
116
- prevResults . filter ( node => node . inBundle ) )
112
+ async '.bundled' ( prevResults ) {
113
+ return prevResults . filter ( node =>
114
+ node . inBundle
115
+ )
117
116
} ,
118
117
} ) )
119
118
120
- const hasParent = ( node , compareNodes ) => {
119
+ const hasParent = async ( node , compareNodes ) => {
121
120
if ( parentCache . has ( node ) && parentCache . get ( node ) . has ( compareNodes ) ) {
122
- return Promise . resolve ( true )
121
+ return true
123
122
}
124
123
const parentFound = compareNodes . some ( compareNode => {
125
124
// follows logical parent for link anscestors
126
- return ( node . isTop && node . resolveParent ) === compareNode ||
125
+ if ( node . isTop && ( node . resolveParent === compareNode ) ) {
126
+ return true
127
+ }
127
128
// follows edges-in to check if they match a possible parent
128
- [ ...node . edgesIn ] . some ( edge =>
129
- edge && edge . from === compareNode )
129
+ return [ ...node . edgesIn ] . some ( edge => edge && edge . from === compareNode )
130
130
} )
131
131
132
132
if ( parentFound ) {
@@ -136,7 +136,7 @@ const retrieveNodesFromParsedAst = async ({
136
136
parentCache . get ( node ) . add ( compareNodes )
137
137
}
138
138
139
- return Promise . resolve ( parentFound )
139
+ return parentFound
140
140
}
141
141
142
142
// checks if a given node is a descendant of any
@@ -226,17 +226,7 @@ const retrieveNodesFromParsedAst = async ({
226
226
// all its indexes testing for possible objects that may eventually
227
227
// hold more keys specified in a selector
228
228
if ( prop === arrayDelimiter ) {
229
- const newObjs = [ ]
230
- for ( const obj of objs ) {
231
- if ( Array . isArray ( obj ) ) {
232
- obj . forEach ( ( i , index ) => {
233
- newObjs . push ( obj [ index ] )
234
- } )
235
- } else {
236
- newObjs . push ( obj )
237
- }
238
- }
239
- objs = newObjs
229
+ objs = objs . flat ( )
240
230
continue
241
231
} else {
242
232
// otherwise just maps all currently found objs
0 commit comments