6
6
* @typedef {import('mdast-util-from-markdown').Token } Token
7
7
* @typedef {import('mdast-util-to-markdown').Options } ToMarkdownExtension
8
8
* @typedef {import('mdast-util-to-markdown').Handle } ToMarkdownHandle
9
- * @typedef {import('estree-jsx').Program } Estree
10
- *
11
- * @typedef {Literal & {type: 'mdxJsxAttributeValueExpression', data?: {estree?: Estree}} } MDXJsxAttributeValueExpression
12
- * @typedef {Omit<Literal, 'value'> & {type: 'mdxJsxAttribute', name: string, value: MDXJsxAttributeValueExpression|string|null} } MDXJsxAttribute
13
- * @typedef {Literal & {type: 'mdxJsxExpressionAttribute'} } MDXJsxExpressionAttribute
14
- * @typedef {MDXJsxAttribute|MDXJsxExpressionAttribute } Attribute
15
- * @typedef {{name: string|null, attributes: Attribute[], close?: boolean, selfClosing?: boolean, start: Token['start'], end: Token['start']} } Tag
16
- *
17
- * @typedef {{name: string|null, attributes: Attribute[]} } MDXJsxElement
18
- * @typedef {Parent & MDXJsxElement & {type: 'mdxJsxFlowElement'} } MDXJsxFlowElement
19
- * @typedef {Parent & MDXJsxElement & {type: 'mdxJsxTextElement'} } MDXJsxTextElement
9
+ * @typedef {import('estree-jsx').Program } Program
10
+ * @typedef {import('./complex-types').MDXJsxAttributeValueExpression } MDXJsxAttributeValueExpression
11
+ * @typedef {import('./complex-types').MDXJsxAttribute } MDXJsxAttribute
12
+ * @typedef {import('./complex-types').MDXJsxExpressionAttribute } MDXJsxExpressionAttribute
13
+ * @typedef {import('./complex-types').MDXJsxFlowElement } MDXJsxFlowElement
14
+ * @typedef {import('./complex-types').MDXJsxTextElement } MDXJsxTextElement
15
+ * @typedef {{name: string|null, attributes: (MDXJsxAttribute|MDXJsxExpressionAttribute)[], close?: boolean, selfClosing?: boolean, start: Token['start'], end: Token['start']} } Tag
20
16
*/
21
17
22
18
import { parseEntities } from 'parse-entities'
@@ -122,9 +118,7 @@ function enterMdxJsxTag(token) {
122
118
123
119
/** @type {FromMarkdownHandle } */
124
120
function enterMdxJsxTagClosingMarker ( token ) {
125
- /** @type {Tag[] } */
126
- // @ts -expect-error: hush
127
- const stack = this . getData ( 'mdxJsxTagStack' )
121
+ const stack = /** @type {Tag[] } */ ( this . getData ( 'mdxJsxTagStack' ) )
128
122
129
123
if ( stack . length === 0 ) {
130
124
throw new VFileMessage (
@@ -137,9 +131,7 @@ function enterMdxJsxTagClosingMarker(token) {
137
131
138
132
/** @type {FromMarkdownHandle } */
139
133
function enterMdxJsxTagAnyAttribute ( token ) {
140
- /** @type {Tag } */
141
- // @ts -expect-error: hush
142
- const tag = this . getData ( 'mdxJsxTag' )
134
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
143
135
144
136
if ( tag . close ) {
145
137
throw new VFileMessage (
@@ -152,9 +144,7 @@ function enterMdxJsxTagAnyAttribute(token) {
152
144
153
145
/** @type {FromMarkdownHandle } */
154
146
function enterMdxJsxTagSelfClosingMarker ( token ) {
155
- /** @type {Tag } */
156
- // @ts -expect-error: hush
157
- const tag = this . getData ( 'mdxJsxTag' )
147
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
158
148
159
149
if ( tag . close ) {
160
150
throw new VFileMessage (
@@ -167,64 +157,50 @@ function enterMdxJsxTagSelfClosingMarker(token) {
167
157
168
158
/** @type {FromMarkdownHandle } */
169
159
function exitMdxJsxTagClosingMarker ( ) {
170
- /** @type {Tag } */
171
- // @ts -expect-error: hush
172
- const tag = this . getData ( 'mdxJsxTag' )
160
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
173
161
tag . close = true
174
162
}
175
163
176
164
/** @type {FromMarkdownHandle } */
177
165
function exitMdxJsxTagNamePrimary ( token ) {
178
- /** @type {Tag } */
179
- // @ts -expect-error: hush
180
- const tag = this . getData ( 'mdxJsxTag' )
166
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
181
167
tag . name = this . sliceSerialize ( token )
182
168
}
183
169
184
170
/** @type {FromMarkdownHandle } */
185
171
function exitMdxJsxTagNameMember ( token ) {
186
- /** @type {Tag } */
187
- // @ts -expect-error: hush
188
- const tag = this . getData ( 'mdxJsxTag' )
172
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
189
173
tag . name += '.' + this . sliceSerialize ( token )
190
174
}
191
175
192
176
/** @type {FromMarkdownHandle } */
193
177
function exitMdxJsxTagNameLocal ( token ) {
194
- /** @type {Tag } */
195
- // @ts -expect-error: hush
196
- const tag = this . getData ( 'mdxJsxTag' )
178
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
197
179
tag . name += ':' + this . sliceSerialize ( token )
198
180
}
199
181
200
182
/** @type {FromMarkdownHandle } */
201
183
function enterMdxJsxTagAttribute ( token ) {
202
- /** @type {Tag } */
203
- // @ts -expect-error: hush
204
- const tag = this . getData ( 'mdxJsxTag' )
184
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
205
185
enterMdxJsxTagAnyAttribute . call ( this , token )
206
186
tag . attributes . push ( { type : 'mdxJsxAttribute' , name : '' , value : null } )
207
187
}
208
188
209
189
/** @type {FromMarkdownHandle } */
210
190
function enterMdxJsxTagExpressionAttribute ( token ) {
211
- /** @type {Tag } */
212
- // @ts -expect-error: hush
213
- const tag = this . getData ( 'mdxJsxTag' )
191
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
214
192
enterMdxJsxTagAnyAttribute . call ( this , token )
215
193
tag . attributes . push ( { type : 'mdxJsxExpressionAttribute' , value : '' } )
216
194
this . buffer ( )
217
195
}
218
196
219
197
/** @type {FromMarkdownHandle } */
220
198
function exitMdxJsxTagExpressionAttribute ( token ) {
221
- /** @type {Tag } */
222
- // @ts -expect-error: hush
223
- const tag = this . getData ( 'mdxJsxTag' )
224
- /** @type {MDXJsxExpressionAttribute } */
225
- // @ts -expect-error: hush
226
- const tail = tag . attributes [ tag . attributes . length - 1 ]
227
- /** @type {Estree? } */
199
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
200
+ const tail = /** @type {MDXJsxExpressionAttribute } */ (
201
+ tag . attributes [ tag . attributes . length - 1 ]
202
+ )
203
+ /** @type {Program|undefined } */
228
204
// @ts -expect-error: custom.
229
205
const estree = token . estree
230
206
@@ -237,26 +213,25 @@ function exitMdxJsxTagExpressionAttribute(token) {
237
213
238
214
/** @type {FromMarkdownHandle } */
239
215
function exitMdxJsxTagAttributeNamePrimary ( token ) {
240
- /** @type {Tag } */
241
- // @ts -expect-error: hush
242
- const tag = this . getData ( 'mdxJsxTag' )
243
- tag . attributes [ tag . attributes . length - 1 ] . name = this . sliceSerialize ( token )
216
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
217
+ const node = /** @type {MDXJsxAttribute } */ (
218
+ tag . attributes [ tag . attributes . length - 1 ]
219
+ )
220
+ node . name = this . sliceSerialize ( token )
244
221
}
245
222
246
223
/** @type {FromMarkdownHandle } */
247
224
function exitMdxJsxTagAttributeNameLocal ( token ) {
248
- /** @type {Tag } */
249
- // @ts -expect-error: hush
250
- const tag = this . getData ( 'mdxJsxTag' )
251
- tag . attributes [ tag . attributes . length - 1 ] . name +=
252
- ':' + this . sliceSerialize ( token )
225
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
226
+ const node = /** @type { MDXJsxAttribute } */ (
227
+ tag . attributes [ tag . attributes . length - 1 ]
228
+ )
229
+ node . name += ':' + this . sliceSerialize ( token )
253
230
}
254
231
255
232
/** @type {FromMarkdownHandle } */
256
233
function exitMdxJsxTagAttributeValueLiteral ( ) {
257
- /** @type {Tag } */
258
- // @ts -expect-error: hush
259
- const tag = this . getData ( 'mdxJsxTag' )
234
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
260
235
tag . attributes [ tag . attributes . length - 1 ] . value = parseEntities (
261
236
this . resume ( ) ,
262
237
{ nonTerminated : false }
@@ -265,15 +240,13 @@ function exitMdxJsxTagAttributeValueLiteral() {
265
240
266
241
/** @type {FromMarkdownHandle } */
267
242
function exitMdxJsxTagAttributeValueExpression ( token ) {
268
- /** @type {Tag } */
269
- // @ts -expect-error: hush
270
- const tag = this . getData ( 'mdxJsxTag' )
271
- /** @type {MDXJsxAttribute } */
272
- // @ts -expect-error: hush
273
- const tail = tag . attributes [ tag . attributes . length - 1 ]
243
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
244
+ const tail = /** @type {MDXJsxAttribute } */ (
245
+ tag . attributes [ tag . attributes . length - 1 ]
246
+ )
274
247
/** @type {MDXJsxAttributeValueExpression } */
275
248
const node = { type : 'mdxJsxAttributeValueExpression' , value : this . resume ( ) }
276
- /** @type {Estree? } */
249
+ /** @type {Program|undefined } */
277
250
// @ts -expect-error: custom.
278
251
const estree = token . estree
279
252
@@ -286,21 +259,15 @@ function exitMdxJsxTagAttributeValueExpression(token) {
286
259
287
260
/** @type {FromMarkdownHandle } */
288
261
function exitMdxJsxTagSelfClosingMarker ( ) {
289
- /** @type {Tag } */
290
- // @ts -expect-error: hush
291
- const tag = this . getData ( 'mdxJsxTag' )
262
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
292
263
293
264
tag . selfClosing = true
294
265
}
295
266
296
267
/** @type {FromMarkdownHandle } */
297
268
function exitMdxJsxTag ( token ) {
298
- /** @type {Tag } */
299
- // @ts -expect-error: hush
300
- const tag = this . getData ( 'mdxJsxTag' )
301
- /** @type {Tag[] } */
302
- // @ts -expect-error: hush
303
- const stack = this . getData ( 'mdxJsxTagStack' )
269
+ const tag = /** @type {Tag } */ ( this . getData ( 'mdxJsxTag' ) )
270
+ const stack = /** @type {Tag[] } */ ( this . getData ( 'mdxJsxTagStack' ) )
304
271
const tail = stack [ stack . length - 1 ]
305
272
306
273
if ( tag . close && tail . name !== tag . name ) {
@@ -323,19 +290,18 @@ function exitMdxJsxTag(token) {
323
290
if ( tag . close ) {
324
291
stack . pop ( )
325
292
} else {
326
- /** @type {MDXJsxFlowElement|MDXJsxTextElement } */
327
- const node = {
328
- type :
329
- token . type === 'mdxJsxTextTag'
330
- ? 'mdxJsxTextElement'
331
- : 'mdxJsxFlowElement' ,
332
- name : tag . name ,
333
- attributes : tag . attributes ,
334
- children : [ ]
335
- }
336
-
337
- // @ts -expect-error: custom
338
- this . enter ( node , token )
293
+ this . enter (
294
+ {
295
+ type :
296
+ token . type === 'mdxJsxTextTag'
297
+ ? 'mdxJsxTextElement'
298
+ : 'mdxJsxFlowElement' ,
299
+ name : tag . name ,
300
+ attributes : tag . attributes ,
301
+ children : [ ]
302
+ } ,
303
+ token
304
+ )
339
305
}
340
306
341
307
if ( tag . selfClosing || tag . close ) {
0 commit comments