22 * @typedef {import('./index.js').Node } Node
33 * @typedef {import('./index.js').KeyFunction } KeyFunction
44 * @typedef {import('./index.js').Test } Test
5+ * @typedef {Node & {id: number} } IdNode
56 */
67
78import test from 'tape'
@@ -22,12 +23,8 @@ test('Index', (t) => {
2223 'new Index(prop)'
2324 )
2425
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 )
3128 instance . add ( node )
3229
3330 t . deepEqual (
@@ -67,7 +64,8 @@ test('index.add', (t) => {
6764
6865 t . equal ( result , index , 'returns this' )
6966
70- index . add ( select ( '[word=foo]' , ast ) )
67+ const node = select ( '[word=foo]' , ast )
68+ if ( node ) index . add ( node )
7169 t . deepEqual ( index . get ( 'foo' ) , [ select ( '[word=foo]' , ast ) , extraNode ] )
7270
7371 index . add ( extraNode )
@@ -170,6 +168,7 @@ test('index.get', (t) => {
170168 } )
171169
172170 t . test ( 'empty index' , ( st ) => {
171+ // @ts -expect-error: runtime.
173172 st . deepEqual ( new Index ( 'foo' , null ) . get ( 'bar' ) , [ ] )
174173 st . deepEqual ( new Index ( 'foo' ) . get ( 'bar' ) , [ ] )
175174 st . end ( )
@@ -191,19 +190,18 @@ test('index.get', (t) => {
191190 } )
192191
193192 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+ )
195202 sst . deepEqual ( index . get ( 'foo' ) , [ select ( 'node[word="foo"]' , ast ) ] )
196203 sst . deepEqual ( index . get ( 'bar' ) , [ select ( 'node[word="bar"]' , ast ) ] )
197204 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- }
207205 } )
208206
209207 st . end ( )
@@ -262,18 +260,24 @@ test('index.remove', (t) => {
262260 select ( 'node[word=foo]' , ast )
263261 ] )
264262
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 )
266266 t . deepEqual ( index . get ( 'foo' ) , [ select ( 'node[word=foo]' , ast ) ] )
267267
268268 t . equal ( result , index , 'returns this' )
269269
270- index . remove ( select ( 'bad' , ast ) )
270+ node = select ( 'bad' , ast )
271+ if ( ! node ) throw new Error ( 'Expected `node`' )
272+ index . remove ( node )
271273 t . deepEqual ( index . get ( 'foo' ) , [ select ( 'node[word=foo]' , ast ) ] )
272274
273275 index . remove ( u ( 'terrible' , { word : 'baz' } ) )
274276 t . deepEqual ( index . get ( 'foo' ) , [ select ( 'node[word=foo]' , ast ) ] )
275277
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 )
277281 t . deepEqual ( index . get ( 'foo' ) , [ ] )
278282
279283 t . end ( )
0 commit comments