1
1
/**
2
- * @typedef {Parent['children'][number]|Root } Node
3
- * @typedef {import('mdast').Parent } Parent
4
- * @typedef {import('mdast').Literal } Literal
2
+ * @typedef {import('unist').Node } UnistNode
3
+ * @typedef {import('unist').Parent } UnistParent
4
+ * @typedef {import('unist').Literal } UnistLiteral
5
+ *
5
6
* @typedef {import('mdast').Root } Root
7
+ * @typedef {import('mdast').Content } Content
6
8
* @typedef {import('mdast').List } List
7
9
* @typedef {import('mdast').ListItem } ListItem
8
10
* @typedef {import('mdast').Heading } Heading
17
19
* @typedef {import('mdast').Table } Table
18
20
*/
19
21
22
+ /**
23
+ * @typedef {Root | Content } Node
24
+ * @typedef {Extract<Node, UnistParent> } Parent
25
+ * @typedef {Extract<Node, UnistLiteral> } Literal
26
+ */
20
27
import nodeAssert from 'node:assert'
21
28
import { zwitch } from 'zwitch'
22
29
import { mapz } from 'mapz'
@@ -33,7 +40,7 @@ import {
33
40
* If `node` is a parent, all children will be asserted too.
34
41
*
35
42
* @param {unknown } [node]
36
- * @param {Parent } [parent]
43
+ * @param {UnistParent | null | undefined } [parent]
37
44
* @returns {asserts node is Node }
38
45
*/
39
46
export function assert ( node , parent ) {
@@ -44,7 +51,7 @@ export function assert(node, parent) {
44
51
* Assert that `node` is a valid mdast parent.
45
52
*
46
53
* @param {unknown } [node]
47
- * @param {Parent } [parent]
54
+ * @param {UnistParent | null | undefined } [parent]
48
55
* @returns {asserts node is Parent }
49
56
*/
50
57
export function parent ( node , parent ) {
@@ -55,7 +62,7 @@ export function parent(node, parent) {
55
62
* Assert that `node` is a valid mdast literal.
56
63
*
57
64
* @param {unknown } [node]
58
- * @param {Parent } [parent]
65
+ * @param {UnistParent | null | undefined } [parent]
59
66
* @returns {asserts node is Literal }
60
67
*/
61
68
export function literal ( node , parent ) {
@@ -65,67 +72,37 @@ export function literal(node, parent) {
65
72
// Construct.
66
73
const mdast = zwitch ( 'type' , {
67
74
// Core interface.
68
- // @ts -expect-error: fine.
69
75
unknown,
70
- // @ts -expect-error: fine.
71
76
invalid : unknown ,
72
77
// Per-type handling.
73
78
handlers : {
74
- // @ts -expect-error: fine.
75
79
root : wrap ( root ) ,
76
- // @ts -expect-error: fine.
77
80
paragraph : parent ,
78
- // @ts -expect-error: fine.
79
81
blockquote : parent ,
80
- // @ts -expect-error: fine.
81
82
tableRow : parent ,
82
- // @ts -expect-error: fine.
83
83
tableCell : parent ,
84
- // @ts -expect-error: fine.
85
84
strong : parent ,
86
- // @ts -expect-error: fine.
87
85
emphasis : parent ,
88
- // @ts -expect-error: fine.
89
86
delete : parent ,
90
- // @ts -expect-error: fine.
91
87
listItem : wrap ( listItem ) ,
92
- // @ts -expect-error: fine.
93
88
footnote : parent ,
94
- // @ts -expect-error: fine.
95
89
heading : wrap ( heading ) ,
96
- // @ts -expect-error: fine.
97
90
text : literal ,
98
- // @ts -expect-error: fine.
99
91
inlineCode : literal ,
100
- // @ts -expect-error: fine.
101
92
yaml : literal ,
102
- // @ts -expect-error: fine.
103
93
toml : literal ,
104
- // @ts -expect-error: fine.
105
94
code : wrap ( code ) ,
106
- // @ts -expect-error: fine.
107
95
thematicBreak : _void ,
108
- // @ts -expect-error: fine.
109
96
break : _void ,
110
- // @ts -expect-error: fine.
111
97
list : wrap ( list ) ,
112
- // @ts -expect-error: fine.
113
98
footnoteDefinition : wrap ( footnoteDefinition ) ,
114
- // @ts -expect-error: fine.
115
99
definition : wrap ( definition ) ,
116
- // @ts -expect-error: fine.
117
100
link : wrap ( link ) ,
118
- // @ts -expect-error: fine.
119
101
image : wrap ( image ) ,
120
- // @ts -expect-error: fine.
121
102
linkReference : wrap ( linkReference ) ,
122
- // @ts -expect-error: fine.
123
103
imageReference : wrap ( imageReference ) ,
124
- // @ts -expect-error: fine.
125
104
footnoteReference : wrap ( footnoteReference ) ,
126
- // @ts -expect-error: fine.
127
105
table : wrap ( table ) ,
128
- // @ts -expect-error: fine.
129
106
html : literal
130
107
}
131
108
} )
@@ -134,7 +111,7 @@ const all = mapz(mdast, {key: 'children'})
134
111
135
112
/**
136
113
* @param {unknown } node
137
- * @param {Parent } [ancestor]
114
+ * @param {UnistParent | null | undefined } [ancestor]
138
115
* @returns {asserts node is Node }
139
116
*/
140
117
function unknown ( node , ancestor ) {
@@ -157,14 +134,16 @@ function assertParent(node) {
157
134
function assertLiteral ( node ) {
158
135
unistLiteral ( node )
159
136
nodeAssert (
137
+ // `value` in unist literals is `any`.
138
+ // type-coverage:ignore-next-line
160
139
typeof node . value === 'string' ,
161
140
'literal should have a string `value`'
162
141
)
163
142
}
164
143
165
144
/**
166
145
* @param {unknown } node
167
- * @param {Parent } ancestor
146
+ * @param {UnistParent | null | undefined } [ ancestor]
168
147
* @returns {asserts node is Root }
169
148
*/
170
149
function root ( node , ancestor ) {
0 commit comments