1
+ /**
2
+ * @typedef {Parent['children'][number]|Root } Node
3
+ * @typedef {import('mdast').Parent } Parent
4
+ * @typedef {import('mdast').Literal } Literal
5
+ * @typedef {import('mdast').Root } Root
6
+ * @typedef {import('mdast').List } List
7
+ * @typedef {import('mdast').ListItem } ListItem
8
+ * @typedef {import('mdast').Heading } Heading
9
+ * @typedef {import('mdast').Code } Code
10
+ * @typedef {import('mdast').FootnoteDefinition } FootnoteDefinition
11
+ * @typedef {import('mdast').Definition } Definition
12
+ * @typedef {import('mdast').Link } Link
13
+ * @typedef {import('mdast').Image } Image
14
+ * @typedef {import('mdast').LinkReference } LinkReference
15
+ * @typedef {import('mdast').ImageReference } ImageReference
16
+ * @typedef {import('mdast').FootnoteReference } FootnoteReference
17
+ * @typedef {import('mdast').Table } Table
18
+ */
19
+
1
20
import nodeAssert from 'assert'
2
21
import { zwitch } from 'zwitch'
3
22
import { mapz } from 'mapz'
@@ -85,10 +104,19 @@ var mdast = zwitch('type', {
85
104
86
105
var all = mapz ( mdast , { key : 'children' } )
87
106
107
+ /**
108
+ * @param {unknown } node
109
+ * @param {Parent } [ancestor]
110
+ * @returns {asserts node is Node }
111
+ */
88
112
function unknown ( node , ancestor ) {
89
113
unistAssert ( node , ancestor )
90
114
}
91
115
116
+ /**
117
+ * @param {unknown } node
118
+ * @returns {asserts node is Parent }
119
+ */
92
120
function assertParent ( node ) {
93
121
unistParent ( node )
94
122
all ( node )
@@ -107,12 +135,21 @@ function assertLiteral(node) {
107
135
)
108
136
}
109
137
138
+ /**
139
+ * @param {unknown } node
140
+ * @param {Parent } ancestor
141
+ * @returns {asserts node is Root }
142
+ */
110
143
function root ( node , ancestor ) {
111
144
parent ( node )
112
145
113
146
nodeAssert . strictEqual ( ancestor , undefined , '`root` should not have a parent' )
114
147
}
115
148
149
+ /**
150
+ * @param {unknown } node
151
+ * @returns {asserts node is List }
152
+ */
116
153
function list ( node ) {
117
154
parent ( node )
118
155
@@ -144,6 +181,10 @@ function list(node) {
144
181
}
145
182
}
146
183
184
+ /**
185
+ * @param {unknown } node
186
+ * @returns {asserts node is ListItem }
187
+ */
147
188
function listItem ( node ) {
148
189
parent ( node )
149
190
@@ -164,13 +205,21 @@ function listItem(node) {
164
205
}
165
206
}
166
207
208
+ /**
209
+ * @param {unknown } node
210
+ * @returns {asserts node is Heading }
211
+ */
167
212
function heading ( node ) {
168
213
parent ( node )
169
214
170
215
nodeAssert . ok ( node . depth > 0 , '`depth` should be gte `1`' )
171
216
nodeAssert . ok ( node . depth <= 6 , '`depth` should be lte `6`' )
172
217
}
173
218
219
+ /**
220
+ * @param {unknown } node
221
+ * @returns {asserts node is Code }
222
+ */
174
223
function code ( node ) {
175
224
literal ( node )
176
225
@@ -192,6 +241,10 @@ function code(node) {
192
241
}
193
242
}
194
243
244
+ /**
245
+ * @param {unknown } node
246
+ * @returns {asserts node is FootnoteDefinition }
247
+ */
195
248
function footnoteDefinition ( node ) {
196
249
parent ( node )
197
250
@@ -210,6 +263,10 @@ function footnoteDefinition(node) {
210
263
}
211
264
}
212
265
266
+ /**
267
+ * @param {unknown } node
268
+ * @returns {asserts node is Definition }
269
+ */
213
270
function definition ( node ) {
214
271
_void ( node )
215
272
@@ -238,6 +295,10 @@ function definition(node) {
238
295
}
239
296
}
240
297
298
+ /**
299
+ * @param {unknown } node
300
+ * @returns {asserts node is Link }
301
+ */
241
302
function link ( node ) {
242
303
parent ( node )
243
304
@@ -252,6 +313,10 @@ function link(node) {
252
313
}
253
314
}
254
315
316
+ /**
317
+ * @param {unknown } node
318
+ * @returns {asserts node is Image }
319
+ */
255
320
function image ( node ) {
256
321
_void ( node )
257
322
@@ -270,6 +335,10 @@ function image(node) {
270
335
}
271
336
}
272
337
338
+ /**
339
+ * @param {unknown } node
340
+ * @returns {asserts node is LinkReference }
341
+ */
273
342
function linkReference ( node ) {
274
343
parent ( node )
275
344
@@ -289,13 +358,18 @@ function linkReference(node) {
289
358
290
359
if ( node . referenceType != null ) {
291
360
nodeAssert . notStrictEqual (
361
+ // @ts -expect-error Check if it’s a string.
292
362
[ 'shortcut' , 'collapsed' , 'full' ] . indexOf ( node . referenceType ) ,
293
363
- 1 ,
294
364
'`referenceType` must be `shortcut`, `collapsed`, or `full`'
295
365
)
296
366
}
297
367
}
298
368
369
+ /**
370
+ * @param {unknown } node
371
+ * @returns {asserts node is ImageReference }
372
+ */
299
373
function imageReference ( node ) {
300
374
_void ( node )
301
375
@@ -319,13 +393,18 @@ function imageReference(node) {
319
393
320
394
if ( node . referenceType != null ) {
321
395
nodeAssert . notStrictEqual (
396
+ // @ts -expect-error Check if it’s a string.
322
397
[ 'shortcut' , 'collapsed' , 'full' ] . indexOf ( node . referenceType ) ,
323
398
- 1 ,
324
399
'`referenceType` must be `shortcut`, `collapsed`, or `full`'
325
400
)
326
401
}
327
402
}
328
403
404
+ /**
405
+ * @param {unknown } node
406
+ * @returns {asserts node is FootnoteReference }
407
+ */
329
408
function footnoteReference ( node ) {
330
409
_void ( node )
331
410
@@ -344,20 +423,29 @@ function footnoteReference(node) {
344
423
}
345
424
}
346
425
426
+ /**
427
+ * @param {unknown } node
428
+ * @returns {asserts node is Table }
429
+ */
347
430
function table ( node ) {
348
431
var index = - 1
432
+ /** @type {Array.<unknown> } */
433
+ var align
434
+ /** @type {unknown } */
349
435
var value
350
436
351
437
parent ( node )
352
438
353
439
if ( node . align != null ) {
354
440
nodeAssert . ok ( Array . isArray ( node . align ) , '`align` must be `array`' )
441
+ align = node . align // type-coverage:ignore-line
355
442
356
- while ( ++ index < node . align . length ) {
357
- value = node . align [ index ]
443
+ while ( ++ index < align . length ) {
444
+ value = align [ index ]
358
445
359
446
if ( value != null ) {
360
447
nodeAssert . notStrictEqual (
448
+ // @ts -expect-error Check if it’s a string.
361
449
[ 'left' , 'right' , 'center' ] . indexOf ( value ) ,
362
450
- 1 ,
363
451
"each align in table must be `null, 'left', 'right', 'center'`"
0 commit comments