@@ -3,6 +3,7 @@ import type {
3
3
Parent as MdastParent ,
4
4
Literal as MdastLiteral ,
5
5
BlockContent ,
6
+ DefinitionContent ,
6
7
PhrasingContent
7
8
} from 'mdast'
8
9
import type { Program } from 'estree-jsx'
@@ -16,52 +17,140 @@ export {mdxJsxFromMarkdown, mdxJsxToMarkdown} from './lib/index.js'
16
17
export type { ToMarkdownOptions } from './lib/index.js'
17
18
18
19
// Expose node types.
20
+ /**
21
+ * MDX JSX attribute value set to an expression.
22
+ *
23
+ * ```markdown
24
+ * > | <a b={c} />
25
+ * ^^^
26
+ * ```
27
+ */
19
28
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
20
29
export interface MdxJsxAttributeValueExpression extends MdastLiteral {
30
+ /**
31
+ * Node type.
32
+ */
21
33
type : 'mdxJsxAttributeValueExpression'
22
- data ?: { estree ?: Program } & MdastLiteral [ 'data' ]
34
+ data ?: {
35
+ /**
36
+ * Program node from estree.
37
+ */
38
+ // eslint-disable-next-line @typescript-eslint/ban-types
39
+ estree ?: Program | null | undefined
40
+ } & MdastLiteral [ 'data' ]
23
41
}
24
42
43
+ /**
44
+ * MDX JSX attribute as an expression.
45
+ *
46
+ * ```markdown
47
+ * > | <a {...b} />
48
+ * ^^^^^^
49
+ * ```
50
+ */
25
51
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
26
52
export interface MdxJsxExpressionAttribute extends MdastLiteral {
53
+ /**
54
+ * Node type.
55
+ */
27
56
type : 'mdxJsxExpressionAttribute'
28
- data ?: { estree ?: Program } & MdastLiteral [ 'data' ]
57
+ data ?: {
58
+ /**
59
+ * Program node from estree.
60
+ */
61
+ // eslint-disable-next-line @typescript-eslint/ban-types
62
+ estree ?: Program | null | undefined
63
+ } & MdastLiteral [ 'data' ]
29
64
}
30
65
66
+ /**
67
+ * MDX JSX attribute with a key.
68
+ *
69
+ * ```markdown
70
+ * > | <a b="c" />
71
+ * ^^^^^
72
+ * ```
73
+ */
31
74
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
32
75
export interface MdxJsxAttribute extends MdastNode {
76
+ /**
77
+ * Node type.
78
+ */
33
79
type : 'mdxJsxAttribute'
80
+ /**
81
+ * Attribute name.
82
+ */
34
83
name : string
84
+ /**
85
+ * Attribute value.
86
+ */
87
+ // eslint-disable-next-line @typescript-eslint/ban-types
35
88
value ?: MdxJsxAttributeValueExpression | string | null | undefined
36
89
}
37
90
91
+ /**
92
+ * MDX JSX element node, occurring in flow (block).
93
+ */
38
94
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
39
- interface MdxJsxElementFields {
95
+ export interface MdxJsxFlowElement extends MdastParent {
96
+ /**
97
+ * Node type.
98
+ */
99
+ type : 'mdxJsxFlowElement'
100
+ /**
101
+ * MDX JSX element name (`null` for fragments).
102
+ */
103
+ // eslint-disable-next-line @typescript-eslint/ban-types
40
104
name : string | null
105
+ /**
106
+ * MDX JSX element attributes.
107
+ */
41
108
attributes : Array < MdxJsxAttribute | MdxJsxExpressionAttribute >
109
+ /**
110
+ * Content.
111
+ */
112
+ children : Array < BlockContent | DefinitionContent >
42
113
}
43
114
115
+ /**
116
+ * MDX JSX element node, occurring in text (phrasing).
117
+ */
44
118
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
45
- export interface MdxJsxFlowElement extends MdxJsxElementFields , MdastParent {
46
- type : 'mdxJsxFlowElement'
47
- children : BlockContent [ ]
48
- }
49
-
50
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
51
- export interface MdxJsxTextElement extends MdxJsxElementFields , MdastParent {
119
+ export interface MdxJsxTextElement extends MdastParent {
120
+ /**
121
+ * Node type.
122
+ */
52
123
type : 'mdxJsxTextElement'
124
+ /**
125
+ * MDX JSX element name (`null` for fragments).
126
+ */
127
+ // eslint-disable-next-line @typescript-eslint/ban-types
128
+ name : string | null
129
+ /**
130
+ * MDX JSX element attributes.
131
+ */
132
+ attributes : Array < MdxJsxAttribute | MdxJsxExpressionAttribute >
133
+ /**
134
+ * Content.
135
+ */
53
136
children : PhrasingContent [ ]
54
137
}
55
138
56
139
// Add nodes to mdast content.
57
140
declare module 'mdast' {
58
141
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
59
142
interface StaticPhrasingContentMap {
143
+ /**
144
+ * MDX JSX element node, occurring in text (phrasing).
145
+ */
60
146
mdxJsxTextElement : MdxJsxTextElement
61
147
}
62
148
63
149
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
64
150
interface BlockContentMap {
151
+ /**
152
+ * MDX JSX element node, occurring in flow (block).
153
+ */
65
154
mdxJsxFlowElement : MdxJsxFlowElement
66
155
}
67
156
}
@@ -70,13 +159,25 @@ declare module 'mdast' {
70
159
declare module 'hast' {
71
160
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
72
161
interface RootContentMap {
162
+ /**
163
+ * MDX JSX element node, occurring in text (phrasing).
164
+ */
73
165
mdxJsxTextElement : MdxJsxTextElement
166
+ /**
167
+ * MDX JSX element node, occurring in flow (block).
168
+ */
74
169
mdxJsxFlowElement : MdxJsxFlowElement
75
170
}
76
171
77
172
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
78
173
interface ElementContentMap {
174
+ /**
175
+ * MDX JSX element node, occurring in text (phrasing).
176
+ */
79
177
mdxJsxTextElement : MdxJsxTextElement
178
+ /**
179
+ * MDX JSX element node, occurring in flow (block).
180
+ */
80
181
mdxJsxFlowElement : MdxJsxFlowElement
81
182
}
82
183
}
0 commit comments