@@ -30,11 +30,12 @@ const type = zwitch('type', {
3030 * Tree.
3131 * @param {SelectState } state
3232 * State.
33- * @returns {Array<Element> }
34- * Results.
33+ * @returns {void }
3534 */
3635export function any ( query , node , state ) {
37- return query && node ? type ( query , node , state ) : [ ]
36+ if ( query && node ) {
37+ type ( query , node , state )
38+ }
3839}
3940
4041/**
@@ -46,19 +47,15 @@ export function any(query, node, state) {
4647 * Tree.
4748 * @param {SelectState } state
4849 * State.
49- * @returns {Array<Element> }
50- * Results.
50+ * @returns {void }
5151 */
5252function selectors ( query , node , state ) {
53- const collector = new Collector ( state . one )
5453 let index = - 1
5554
5655 while ( ++ index < query . selectors . length ) {
5756 const set = query . selectors [ index ]
58- collector . collectAll ( rule ( set . rule , node , state ) )
57+ rule ( set . rule , node , state )
5958 }
60-
61- return collector . result
6259}
6360
6461/**
@@ -70,11 +67,10 @@ function selectors(query, node, state) {
7067 * Tree.
7168 * @param {SelectState } state
7269 * State.
73- * @returns {Array<Element> }
74- * Results.
70+ * @returns {void }
7571 */
7672function ruleSet ( query , node , state ) {
77- return rule ( query . rule , node , state )
73+ rule ( query . rule , node , state )
7874}
7975
8076/**
@@ -86,12 +82,9 @@ function ruleSet(query, node, state) {
8682 * Tree.
8783 * @param {SelectState } state
8884 * State.
89- * @returns {Array<Element> }
90- * Results.
85+ * @returns {void }
9186 */
9287function rule ( query , tree , state ) {
93- const collector = new Collector ( state . one )
94-
9588 if ( state . shallow && query . rule ) {
9689 throw new Error ( 'Expected selector without nesting' )
9790 }
@@ -102,8 +95,6 @@ function rule(query, tree, state) {
10295 index : needsIndex ( query )
10396 } )
10497
105- return collector . result
106-
10798 /** @type {SelectIterator } */
10899 function iterator ( query , node , index , parent , state ) {
109100 const exit = enterState ( state , node )
@@ -117,7 +108,7 @@ function rule(query, tree, state) {
117108 } )
118109 } else {
119110 // @ts -expect-error `test` also asserts `node is Element`
120- collector . collect ( node )
111+ if ( ! state . results . includes ( node ) ) state . results . push ( node )
121112 state . found = true
122113 }
123114 }
@@ -161,63 +152,3 @@ function unknownType(query) {
161152function invalidType ( ) {
162153 throw new Error ( 'Invalid type' )
163154}
164-
165- /**
166- * Collect elements.
167- */
168- class Collector {
169- /**
170- * @param {boolean | undefined } one
171- */
172- constructor ( one ) {
173- /**
174- * Found elements.
175- *
176- * @type {Array<Element> }
177- */
178- this . result = [ ]
179-
180- /**
181- * Whether we’re looking for one result.
182- *
183- * @type {boolean }
184- */
185- this . one = one || false
186-
187- /**
188- * Whether we’ve found something.
189- *
190- * @type {boolean }
191- */
192- this . found = false
193- }
194-
195- /**
196- * Add multiple elements.
197- *
198- * @param {Array<Element> } elements
199- */
200- collectAll ( elements ) {
201- let index = - 1
202-
203- while ( ++ index < elements . length ) {
204- this . collect ( elements [ index ] )
205- }
206- }
207-
208- /**
209- * Add one element.
210- *
211- * @param {Element } element
212- */
213- collect ( element ) {
214- if ( this . one ) {
215- // Shouldn’t happen, safeguards performance problems.
216- /* c8 ignore next */
217- if ( this . found ) return
218- this . found = true
219- }
220-
221- if ( ! this . result . includes ( element ) ) this . result . push ( element )
222- }
223- }
0 commit comments