@@ -30,11 +30,12 @@ const type = zwitch('type', {
30
30
* Tree.
31
31
* @param {SelectState } state
32
32
* State.
33
- * @returns {Array<Element> }
34
- * Results.
33
+ * @returns {void }
35
34
*/
36
35
export function any ( query , node , state ) {
37
- return query && node ? type ( query , node , state ) : [ ]
36
+ if ( query && node ) {
37
+ type ( query , node , state )
38
+ }
38
39
}
39
40
40
41
/**
@@ -46,19 +47,15 @@ export function any(query, node, state) {
46
47
* Tree.
47
48
* @param {SelectState } state
48
49
* State.
49
- * @returns {Array<Element> }
50
- * Results.
50
+ * @returns {void }
51
51
*/
52
52
function selectors ( query , node , state ) {
53
- const collector = new Collector ( state . one )
54
53
let index = - 1
55
54
56
55
while ( ++ index < query . selectors . length ) {
57
56
const set = query . selectors [ index ]
58
- collector . collectAll ( rule ( set . rule , node , state ) )
57
+ rule ( set . rule , node , state )
59
58
}
60
-
61
- return collector . result
62
59
}
63
60
64
61
/**
@@ -70,11 +67,10 @@ function selectors(query, node, state) {
70
67
* Tree.
71
68
* @param {SelectState } state
72
69
* State.
73
- * @returns {Array<Element> }
74
- * Results.
70
+ * @returns {void }
75
71
*/
76
72
function ruleSet ( query , node , state ) {
77
- return rule ( query . rule , node , state )
73
+ rule ( query . rule , node , state )
78
74
}
79
75
80
76
/**
@@ -86,12 +82,9 @@ function ruleSet(query, node, state) {
86
82
* Tree.
87
83
* @param {SelectState } state
88
84
* State.
89
- * @returns {Array<Element> }
90
- * Results.
85
+ * @returns {void }
91
86
*/
92
87
function rule ( query , tree , state ) {
93
- const collector = new Collector ( state . one )
94
-
95
88
if ( state . shallow && query . rule ) {
96
89
throw new Error ( 'Expected selector without nesting' )
97
90
}
@@ -102,8 +95,6 @@ function rule(query, tree, state) {
102
95
index : needsIndex ( query )
103
96
} )
104
97
105
- return collector . result
106
-
107
98
/** @type {SelectIterator } */
108
99
function iterator ( query , node , index , parent , state ) {
109
100
const exit = enterState ( state , node )
@@ -117,7 +108,7 @@ function rule(query, tree, state) {
117
108
} )
118
109
} else {
119
110
// @ts -expect-error `test` also asserts `node is Element`
120
- collector . collect ( node )
111
+ if ( ! state . results . includes ( node ) ) state . results . push ( node )
121
112
state . found = true
122
113
}
123
114
}
@@ -161,63 +152,3 @@ function unknownType(query) {
161
152
function invalidType ( ) {
162
153
throw new Error ( 'Invalid type' )
163
154
}
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