@@ -12,11 +12,10 @@ const semver = require('semver')
1212// arborist nodes as its value, that is essential to how we handle multiple
1313// query selectors, e.g: `#a, #b, #c` <- 3 diff ast selector nodes
1414class Results {
15- #results = null
15+ #results = new Map ( )
1616 #currentAstSelector = null
1717
1818 constructor ( rootAstNode ) {
19- this . #results = new Map ( )
2019 this . #currentAstSelector = rootAstNode . nodes [ 0 ]
2120 }
2221
@@ -37,13 +36,7 @@ class Results {
3736 // selector nodes and collect all of their resulting arborist nodes into a
3837 // single/flat Set of items, this ensures we also deduplicate items
3938 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 ) ) )
4740 }
4841}
4942
@@ -78,7 +71,7 @@ const retrieveNodesFromParsedAst = async ({
7871 return ( String ( pkg [ attribute ] || '' ) . match ( / \w + / g) || [ ] ) . includes ( value )
7972 } ,
8073 '*=' ( { attribute, value, pkg } ) {
81- return String ( pkg [ attribute ] || '' ) . indexOf ( value ) > - 1
74+ return String ( pkg [ attribute ] || '' ) . includes ( value )
8275 } ,
8376 '|=' ( { attribute, value, pkg } ) {
8477 return String ( pkg [ attribute ] || '' ) . split ( '-' ) [ 0 ] === value
@@ -91,42 +84,49 @@ const retrieveNodesFromParsedAst = async ({
9184 } ,
9285 } ) )
9386 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+ )
9791 } ,
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+ )
10196 } ,
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+ )
105101 } ,
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+ )
109106 } ,
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+ )
113111 } ,
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+ )
117116 } ,
118117 } ) )
119118
120- const hasParent = ( node , compareNodes ) => {
119+ const hasParent = async ( node , compareNodes ) => {
121120 if ( parentCache . has ( node ) && parentCache . get ( node ) . has ( compareNodes ) ) {
122- return Promise . resolve ( true )
121+ return true
123122 }
124123 const parentFound = compareNodes . some ( compareNode => {
125124 // follows logical parent for link anscestors
126- return ( node . isTop && node . resolveParent ) === compareNode ||
125+ if ( node . isTop && ( node . resolveParent === compareNode ) ) {
126+ return true
127+ }
127128 // 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 )
130130 } )
131131
132132 if ( parentFound ) {
@@ -136,7 +136,7 @@ const retrieveNodesFromParsedAst = async ({
136136 parentCache . get ( node ) . add ( compareNodes )
137137 }
138138
139- return Promise . resolve ( parentFound )
139+ return parentFound
140140 }
141141
142142 // checks if a given node is a descendant of any
@@ -226,17 +226,7 @@ const retrieveNodesFromParsedAst = async ({
226226 // all its indexes testing for possible objects that may eventually
227227 // hold more keys specified in a selector
228228 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 ( )
240230 continue
241231 } else {
242232 // otherwise just maps all currently found objs
0 commit comments