2
2
* @typedef {import('./index.js').Node } Node
3
3
* @typedef {import('./index.js').KeyFunction } KeyFunction
4
4
* @typedef {import('./index.js').Test } Test
5
+ * @typedef {Node & {id: number} } IdNode
5
6
*/
6
7
7
8
import test from 'tape'
@@ -22,12 +23,8 @@ test('Index', (t) => {
22
23
'new Index(prop)'
23
24
)
24
25
25
- instance = new Index (
26
- /**
27
- * @param {Node & {id: string} } node
28
- */
29
- ( node ) => node . id
30
- )
26
+ // @ts -expect-error: fine.
27
+ instance = new Index ( ( /** @type {IdNode } */ node ) => node . id )
31
28
instance . add ( node )
32
29
33
30
t . deepEqual (
@@ -67,7 +64,8 @@ test('index.add', (t) => {
67
64
68
65
t . equal ( result , index , 'returns this' )
69
66
70
- index . add ( select ( '[word=foo]' , ast ) )
67
+ const node = select ( '[word=foo]' , ast )
68
+ if ( node ) index . add ( node )
71
69
t . deepEqual ( index . get ( 'foo' ) , [ select ( '[word=foo]' , ast ) , extraNode ] )
72
70
73
71
index . add ( extraNode )
@@ -170,6 +168,7 @@ test('index.get', (t) => {
170
168
} )
171
169
172
170
t . test ( 'empty index' , ( st ) => {
171
+ // @ts -expect-error: runtime.
173
172
st . deepEqual ( new Index ( 'foo' , null ) . get ( 'bar' ) , [ ] )
174
173
st . deepEqual ( new Index ( 'foo' ) . get ( 'bar' ) , [ ] )
175
174
st . end ( )
@@ -191,19 +190,18 @@ test('index.get', (t) => {
191
190
} )
192
191
193
192
st . test ( 'function test' , ( sst ) => {
194
- const index = new Index ( 'word' , ast , filter )
193
+ const index = new Index ( 'word' , ast , ( node , index , parent ) =>
194
+ Boolean (
195
+ typeof index === 'number' &&
196
+ parent &&
197
+ 'word' in node &&
198
+ index < 2 &&
199
+ parent . type === 'root'
200
+ )
201
+ )
195
202
sst . deepEqual ( index . get ( 'foo' ) , [ select ( 'node[word="foo"]' , ast ) ] )
196
203
sst . deepEqual ( index . get ( 'bar' ) , [ select ( 'node[word="bar"]' , ast ) ] )
197
204
sst . end ( )
198
-
199
- /**
200
- * @param {Node } node
201
- * @param {number } index
202
- * @param {Node } parent
203
- */
204
- function filter ( node , index , parent ) {
205
- return 'word' in node && index < 2 && parent . type === 'root'
206
- }
207
205
} )
208
206
209
207
st . end ( )
@@ -262,18 +260,24 @@ test('index.remove', (t) => {
262
260
select ( 'node[word=foo]' , ast )
263
261
] )
264
262
265
- const result = index . remove ( select ( 'bad' , ast ) )
263
+ let node = select ( 'bad' , ast )
264
+ if ( ! node ) throw new Error ( 'Expected `node`' )
265
+ const result = index . remove ( node )
266
266
t . deepEqual ( index . get ( 'foo' ) , [ select ( 'node[word=foo]' , ast ) ] )
267
267
268
268
t . equal ( result , index , 'returns this' )
269
269
270
- index . remove ( select ( 'bad' , ast ) )
270
+ node = select ( 'bad' , ast )
271
+ if ( ! node ) throw new Error ( 'Expected `node`' )
272
+ index . remove ( node )
271
273
t . deepEqual ( index . get ( 'foo' ) , [ select ( 'node[word=foo]' , ast ) ] )
272
274
273
275
index . remove ( u ( 'terrible' , { word : 'baz' } ) )
274
276
t . deepEqual ( index . get ( 'foo' ) , [ select ( 'node[word=foo]' , ast ) ] )
275
277
276
- index . remove ( select ( 'node[word=foo]' , ast ) )
278
+ node = select ( 'node[word=foo]' , ast )
279
+ if ( ! node ) throw new Error ( 'Expected `node`' )
280
+ index . remove ( node )
277
281
t . deepEqual ( index . get ( 'foo' ) , [ ] )
278
282
279
283
t . end ( )
0 commit comments