Skip to content

Commit 0293834

Browse files
committed
Add strict to tsconfig.json
1 parent 74ac475 commit 0293834

File tree

4 files changed

+35
-27
lines changed

4 files changed

+35
-27
lines changed

index.js

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
1+
/**
2+
* @typedef {import('hast').Root} Root
3+
* @typedef {Root['children'][number]|Root} Node
4+
*/
5+
16
/**
27
* Check whether a `node` is labelable:
38
* See: <https://html.spec.whatwg.org/#category-label>.
49
*
5-
* @param {unknown} node
10+
* @param {Node} node
611
* @returns {boolean}
712
*/
813
export function labelable(node) {
9-
/** @type {string} */
10-
const name =
11-
// @ts-ignore Looks like an object.
12-
node && typeof node === 'object' && node.type === 'element' && node.tagName
13-
1414
return Boolean(
15-
name === 'button' ||
16-
name === 'keygen' ||
17-
name === 'meter' ||
18-
name === 'output' ||
19-
name === 'progress' ||
20-
name === 'select' ||
21-
name === 'textarea' ||
22-
(name === 'input' &&
23-
// @ts-ignore Looks like an object.
24-
(node.properties && node.properties.type) !== 'hidden')
15+
node &&
16+
typeof node === 'object' &&
17+
node.type === 'element' &&
18+
(node.tagName === 'button' ||
19+
node.tagName === 'keygen' ||
20+
node.tagName === 'meter' ||
21+
node.tagName === 'output' ||
22+
node.tagName === 'progress' ||
23+
node.tagName === 'select' ||
24+
node.tagName === 'textarea' ||
25+
(node.tagName === 'input' &&
26+
(node.properties && node.properties.type) !== 'hidden'))
2527
)
2628
}

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
"index.d.ts",
3131
"index.js"
3232
],
33+
"dependencies": {
34+
"@types/hast": "^2.0.0"
35+
},
3336
"devDependencies": {
3437
"@types/tape": "^4.0.0",
3538
"c8": "^7.0.0",

test.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import test from 'tape'
22
import {labelable} from './index.js'
33

44
test('labelable', (t) => {
5+
// @ts-expect-error: runtime.
56
t.equal(labelable(), false, 'should return `false` without node')
67

78
t.equal(
@@ -11,13 +12,13 @@ test('labelable', (t) => {
1112
)
1213

1314
t.equal(
14-
labelable({type: 'element', tagName: 'div'}),
15+
labelable({type: 'element', tagName: 'div', children: []}),
1516
false,
1617
'should return `false` for non-labelable elements'
1718
)
1819

1920
t.equal(
20-
labelable({type: 'element', tagName: 'input'}),
21+
labelable({type: 'element', tagName: 'input', children: []}),
2122
true,
2223
'should return `true` for `input` elements'
2324
)
@@ -26,50 +27,51 @@ test('labelable', (t) => {
2627
labelable({
2728
type: 'element',
2829
tagName: 'input',
29-
properties: {type: 'hidden'}
30+
properties: {type: 'hidden'},
31+
children: []
3032
}),
3133
false,
3234
'should return `false` for `input[type=hidden]` elements'
3335
)
3436

3537
t.equal(
36-
labelable({type: 'element', tagName: 'button'}),
38+
labelable({type: 'element', tagName: 'button', children: []}),
3739
true,
3840
'should return `true` for `button` elements'
3941
)
4042

4143
t.equal(
42-
labelable({type: 'element', tagName: 'keygen'}),
44+
labelable({type: 'element', tagName: 'keygen', children: []}),
4345
true,
4446
'should return `true` for `keygen` elements'
4547
)
4648

4749
t.equal(
48-
labelable({type: 'element', tagName: 'meter'}),
50+
labelable({type: 'element', tagName: 'meter', children: []}),
4951
true,
5052
'should return `true` for `meter` elements'
5153
)
5254

5355
t.equal(
54-
labelable({type: 'element', tagName: 'output'}),
56+
labelable({type: 'element', tagName: 'output', children: []}),
5557
true,
5658
'should return `true` for `output` elements'
5759
)
5860

5961
t.equal(
60-
labelable({type: 'element', tagName: 'progress'}),
62+
labelable({type: 'element', tagName: 'progress', children: []}),
6163
true,
6264
'should return `true` for `progress` elements'
6365
)
6466

6567
t.equal(
66-
labelable({type: 'element', tagName: 'select'}),
68+
labelable({type: 'element', tagName: 'select', children: []}),
6769
true,
6870
'should return `true` for `select` elements'
6971
)
7072

7173
t.equal(
72-
labelable({type: 'element', tagName: 'textarea'}),
74+
labelable({type: 'element', tagName: 'textarea', children: []}),
7375
true,
7476
'should return `true` for `textarea` elements'
7577
)

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)