Skip to content

Commit 4004271

Browse files
committed
Add strict to tsconfig.json
1 parent 94d9538 commit 4004271

File tree

3 files changed

+36
-28
lines changed

3 files changed

+36
-28
lines changed

index.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export class Index {
1717
/** @type {Map.<unknown, Array.<Node>>} */
1818
this.index = new Map()
1919
/** @type {KeyFunction} */
20+
// @ts-expect-error: Looks indexable.
2021
this.key = typeof prop === 'string' ? (node) => node[prop] : prop
2122

2223
if (tree) {
@@ -39,13 +40,13 @@ export class Index {
3940
*/
4041
add(node) {
4142
const key = this.key(node)
43+
let nodes = this.index.get(key)
4244

43-
if (!this.index.has(key)) {
44-
this.index.set(key, [])
45+
if (!nodes) {
46+
nodes = []
47+
this.index.set(key, nodes)
4548
}
4649

47-
const nodes = this.index.get(key)
48-
4950
if (!nodes.includes(node)) {
5051
nodes.push(node)
5152
}
@@ -59,10 +60,12 @@ export class Index {
5960
remove(node) {
6061
const key = this.key(node)
6162
const nodes = this.index.get(key)
62-
const pos = nodes ? nodes.indexOf(node) : -1
6363

64-
if (pos !== -1) {
65-
nodes.splice(pos, 1)
64+
if (nodes) {
65+
const pos = nodes.indexOf(node)
66+
if (pos !== -1) {
67+
nodes.splice(pos, 1)
68+
}
6669
}
6770

6871
return this

test.js

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
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

78
import 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()

tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"declaration": true,
1111
"emitDeclarationOnly": true,
1212
"allowSyntheticDefaultImports": true,
13-
"skipLibCheck": true
13+
"skipLibCheck": true,
14+
"strict": true
1415
}
1516
}

0 commit comments

Comments
 (0)