@@ -28,11 +28,12 @@ const type = zwitch('type', {
2828 * Tree.
2929 * @param {SelectState } state
3030 * State.
31- * @returns {Array<Node> }
32- * Results.
31+ * @returns {void }
3332 */
3433export function any ( query , node , state ) {
35- return query && node ? type ( query , node , state ) : [ ]
34+ if ( query && node ) {
35+ type ( query , node , state )
36+ }
3637}
3738
3839/**
@@ -44,19 +45,15 @@ export function any(query, node, state) {
4445 * Tree.
4546 * @param {SelectState } state
4647 * State.
47- * @returns {Array<Node> }
48- * Results.
48+ * @returns {void }
4949 */
5050function selectors ( query , node , state ) {
51- const collector = new Collector ( state . one )
5251 let index = - 1
5352
5453 while ( ++ index < query . selectors . length ) {
5554 const set = query . selectors [ index ]
56- collector . collectAll ( rule ( set . rule , node , state ) )
55+ rule ( set . rule , node , state )
5756 }
58-
59- return collector . result
6057}
6158
6259/**
@@ -68,8 +65,7 @@ function selectors(query, node, state) {
6865 * Tree.
6966 * @param {SelectState } state
7067 * State.
71- * @returns {Array<Node> }
72- * Results.
68+ * @returns {void }
7369 */
7470function ruleSet ( query , node , state ) {
7571 return rule ( query . rule , node , state )
@@ -84,12 +80,9 @@ function ruleSet(query, node, state) {
8480 * Tree.
8581 * @param {SelectState } state
8682 * State.
87- * @returns {Array<Node> }
88- * Results.
83+ * @returns {void }
8984 */
9085function rule ( query , tree , state ) {
91- const collector = new Collector ( state . one )
92-
9386 if ( state . shallow && query . rule ) {
9487 throw new Error ( 'Expected selector without nesting' )
9588 }
@@ -106,8 +99,6 @@ function rule(query, tree, state) {
10699 } )
107100 )
108101
109- return collector . result
110-
111102 /** @type {SelectIterator } */
112103 function iterator ( query , node , index , parent , state ) {
113104 if ( test ( query , node , index , parent , state ) ) {
@@ -118,7 +109,7 @@ function rule(query, tree, state) {
118109 index : needsIndex ( query . rule )
119110 } )
120111 } else {
121- collector . collect ( node )
112+ if ( ! state . results . includes ( node ) ) state . results . push ( node )
122113 state . found = true
123114 }
124115 }
@@ -183,63 +174,3 @@ function unknownType(query) {
183174function invalidType ( ) {
184175 throw new Error ( 'Invalid type' )
185176}
186-
187- /**
188- * Collect nodes.
189- */
190- class Collector {
191- /**
192- * @param {boolean | undefined } one
193- */
194- constructor ( one ) {
195- /**
196- * Found nodes.
197- *
198- * @type {Array<Node> }
199- */
200- this . result = [ ]
201-
202- /**
203- * Whether we’re looking for one result.
204- *
205- * @type {boolean }
206- */
207- this . one = one || false
208-
209- /**
210- * Whether we’ve found something.
211- *
212- * @type {boolean }
213- */
214- this . found = false
215- }
216-
217- /**
218- * Add multiple nodes.
219- *
220- * @param {Array<Node> } nodes
221- */
222- collectAll ( nodes ) {
223- let index = - 1
224-
225- while ( ++ index < nodes . length ) {
226- this . collect ( nodes [ index ] )
227- }
228- }
229-
230- /**
231- * Add one node.
232- *
233- * @param {Node } node
234- */
235- collect ( node ) {
236- if ( this . one ) {
237- // Shouldn’t happen, safeguards performance problems.
238- /* c8 ignore next */
239- if ( this . found ) return
240- this . found = true
241- }
242-
243- if ( ! this . result . includes ( node ) ) this . result . push ( node )
244- }
245- }
0 commit comments