8
8
[ ![ Backers] [ backers-badge ]] [ collective ]
9
9
[ ![ Chat] [ chat-badge ]] [ chat ]
10
10
11
- Extension for [ ` mdast-util-from-markdown ` ] [ from-markdown ] and/or
12
- [ ` mdast-util-to-markdown ` ] [ to-markdown ] to support MDX.js ESM import/exports.
13
- When parsing (` from-markdown ` ), must be combined with
14
- [ ` micromark-extension-mdxjs-esm ` ] [ extension ] .
15
-
16
- This utility handles parsing and serializing.
17
- See [ ` micromark-extension-mdxjs-esm ` ] [ extension ] for how the syntax works.
11
+ [ mdast] [ ] extensions to parse and serialize [ MDX] [ ] ESM import/exports.
12
+
13
+ ## Contents
14
+
15
+ * [ What is this?] ( #what-is-this )
16
+ * [ When to use this] ( #when-to-use-this )
17
+ * [ Install] ( #install )
18
+ * [ Use] ( #use )
19
+ * [ API] ( #api )
20
+ * [ ` mdxjsEsmFromMarkdown ` ] ( #mdxjsesmfrommarkdown )
21
+ * [ ` mdxjsEsmToMarkdown ` ] ( #mdxjsesmtomarkdown )
22
+ * [ Syntax tree] ( #syntax-tree )
23
+ * [ Nodes] ( #nodes )
24
+ * [ Content model] ( #content-model )
25
+ * [ Types] ( #types )
26
+ * [ Compatibility] ( #compatibility )
27
+ * [ Related] ( #related )
28
+ * [ Contribute] ( #contribute )
29
+ * [ License] ( #license )
30
+
31
+ ## What is this?
32
+
33
+ This package contains extensions that add support for the ESM syntax enabled
34
+ by MDX to [ ` mdast-util-from-markdown ` ] [ mdast-util-from-markdown ] and
35
+ [ ` mdast-util-to-markdown ` ] [ mdast-util-to-markdown ] .
18
36
19
37
## When to use this
20
38
21
- Use [ ` mdast-util-mdx ` ] [ mdast-util-mdx ] if you want all of MDX / MDX.js .
22
- Use this otherwise .
39
+ These tools are all rather low-level .
40
+ In most cases, you’d want to use [ ` remark-mdx ` ] [ remark-mdx ] with remark instead .
23
41
24
- ## Install
42
+ When you are working with syntax trees and want all of MDX, use
43
+ [ ` mdast-util-mdx ` ] [ mdast-util-mdx ] instead.
44
+
45
+ When working with ` mdast-util-from-markdown ` , you must combine this package with
46
+ [ ` micromark-extension-mdxjs-esm ` ] [ extension ] .
25
47
26
- This package is [ ESM only] ( https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c ) :
27
- Node 12+ is needed to use it and it must be ` import ` ed instead of ` require ` d.
48
+ ## Install
28
49
29
- [ npm] [ ] :
50
+ This package is [ ESM only] [ esm ] .
51
+ In Node.js (version 12.20+, 14.14+, or 16.0+), install with [ npm] [ ] :
30
52
31
53
``` sh
32
54
npm install mdast-util-mdxjs-esm
33
55
```
34
56
57
+ In Deno with [ ` esm.sh ` ] [ esmsh ] :
58
+
59
+ ``` js
60
+ import {mdxjsEsmFromMarkdown , mdxjsEsmToMarkdown } from ' https://esm.sh/mdast-util-mdxjs-esm@1'
61
+ ```
62
+
63
+ In browsers with [ ` esm.sh ` ] [ esmsh ] :
64
+
65
+ ``` html
66
+ <script type =" module" >
67
+ import {mdxjsEsmFromMarkdown , mdxjsEsmToMarkdown } from ' https://esm.sh/mdast-util-mdxjs-esm@1?bundle'
68
+ </script >
69
+ ```
70
+
35
71
## Use
36
72
37
- Say we have an MDX.js file, ` example.mdx ` :
73
+ Say our document ` example.mdx ` contains :
38
74
39
75
``` mdx
40
76
import a from ' b'
41
- export var c = ' '
77
+ export const c = ' '
42
78
43
79
d
44
80
```
45
81
46
- And our module, ` example.js ` , looks as follows:
82
+ …and our module ` example.js ` looks as follows:
47
83
48
84
``` js
49
- import fs from ' fs '
85
+ import fs from ' node:fs/promises '
50
86
import * as acorn from ' acorn'
51
87
import {fromMarkdown } from ' mdast-util-from-markdown'
52
88
import {toMarkdown } from ' mdast-util-to-markdown'
53
89
import {mdxjsEsm } from ' micromark-extension-mdxjs-esm'
54
90
import {mdxjsEsmFromMarkdown , mdxjsEsmToMarkdown } from ' mdast-util-mdxjs-esm'
55
91
56
- const doc = fs .readFileSync (' example.mdx' )
92
+ const doc = await fs .readFile (' example.mdx' )
57
93
58
94
const tree = fromMarkdown (doc, {
59
95
extensions: [mdxjsEsm ({acorn, addResult: true })],
@@ -67,15 +103,15 @@ const out = toMarkdown(tree, {extensions: [mdxjsEsmToMarkdown]})
67
103
console .log (out)
68
104
```
69
105
70
- Now, running ` node example ` yields (positional info removed for brevity):
106
+ …now running ` node example.js ` yields (positional info removed for brevity):
71
107
72
108
``` js
73
109
{
74
110
type: ' root' ,
75
111
children: [
76
112
{
77
113
type: ' mdxjsEsm' ,
78
- value: " import a from 'b'\n export var c = ''" ,
114
+ value: " import a from 'b'\n export const c = ''" ,
79
115
data: {
80
116
estree: {
81
117
type: ' Program' ,
@@ -101,7 +137,7 @@ Now, running `node example` yields (positional info removed for brevity):
101
137
init: {type: ' Literal' , value: ' ' , raw: " ''" }
102
138
}
103
139
],
104
- kind: ' var '
140
+ kind: ' const '
105
141
},
106
142
specifiers: [],
107
143
source: null
@@ -118,28 +154,27 @@ Now, running `node example` yields (positional info removed for brevity):
118
154
119
155
``` markdown
120
156
import a from 'b'
121
- export var c = ''
157
+ export const c = ''
122
158
123
159
d
124
160
```
125
161
126
162
## API
127
163
128
- This package exports the following identifier: ` mdxjsEsmFromMarkdown ` ,
164
+ This package exports the identifiers ` mdxjsEsmFromMarkdown ` and
129
165
` mdxjsEsmToMarkdown ` .
130
166
There is no default export.
131
167
132
168
### ` mdxjsEsmFromMarkdown `
133
169
134
- ### ` mdxjsEsmToMarkdown `
135
-
136
- Support MDX.js ESM import/exports.
137
- The exports are extensions, respectively for
138
- [ ` mdast-util-from-markdown ` ] [ from-markdown ] and
139
- [ ` mdast-util-to-markdown ` ] [ to-markdown ] .
170
+ Extension for [ ` mdast-util-from-markdown ` ] [ mdast-util-from-markdown ] .
140
171
141
172
When using the [ syntax extension with ` addResult ` ] [ extension ] , nodes will have
142
- a ` data.estree ` field set to an [ ESTree] [ ]
173
+ a ` data.estree ` field set to an [ ESTree] [ ] .
174
+
175
+ ### ` mdxjsEsmToMarkdown `
176
+
177
+ Extension for [ ` mdast-util-to-markdown ` ] [ mdast-util-to-markdown ] .
143
178
144
179
## Syntax tree
145
180
@@ -186,27 +221,53 @@ type FlowContentMdxjsEsm = MDXJSEsm | FlowContent
186
221
Note that when ESM is present, it can only exist as top-level content: if it has
187
222
a * [ parent] [ dfn-parent ] * , that parent must be ** [ Root] [ dfn-root ] ** .
188
223
224
+ ## Types
225
+
226
+ This package is fully typed with [ TypeScript] [ ] .
227
+ It exports the additional type ` MdxjsEsm ` .
228
+
229
+ It also registers the node types with ` @types/mdast ` .
230
+ If you’re working with the syntax tree, make sure to import this utility
231
+ somewhere in your types, as that registers the new node types in the tree.
232
+
233
+ ``` js
234
+ /**
235
+ * @typedef {import('mdast-util-mdxjs-esm')}
236
+ */
237
+
238
+ import {visit } from ' unist-util-visit'
239
+
240
+ /** @type {import('mdast').Root} */
241
+ const tree = getMdastNodeSomeHow ()
242
+
243
+ visit (tree, (node ) => {
244
+ // `node` can now be an ESM node.
245
+ })
246
+ ```
247
+
248
+ ## Compatibility
249
+
250
+ Projects maintained by the unified collective are compatible with all maintained
251
+ versions of Node.js.
252
+ As of now, that is Node.js 12.20+, 14.14+, and 16.0+.
253
+ Our projects sometimes work with older versions, but this is not guaranteed.
254
+
255
+ This plugin works with ` mdast-util-from-markdown ` version 1+ and
256
+ ` mdast-util-to-markdown ` version 1+.
257
+
189
258
## Related
190
259
191
- * [ ` remarkjs/remark ` ] [ remark ]
192
- — markdown processor powered by plugins
193
260
* [ ` remarkjs/remark-mdx ` ] [ remark-mdx ]
194
261
— remark plugin to support MDX
195
- * [ ` syntax-tree/mdast-util-from-markdown ` ] [ from-markdown ]
196
- — mdast parser using ` micromark ` to create mdast from markdown
197
- * [ ` syntax-tree/mdast-util-to-markdown ` ] [ to-markdown ]
198
- — mdast serializer to create markdown from mdast
199
262
* [ ` syntax-tree/mdast-util-mdx ` ] [ mdast-util-mdx ]
200
263
— mdast utility to support MDX
201
- * [ ` micromark/micromark ` ] [ micromark ]
202
- — the smallest commonmark-compliant markdown parser that exists
203
264
* [ ` micromark/micromark-extension-mdxjs-esm ` ] [ extension ]
204
265
— micromark extension to parse MDX.js ESM
205
266
206
267
## Contribute
207
268
208
- See [ ` contributing.md ` in ` syntax-tree/.github ` ] [ contributing ] for ways to get
209
- started.
269
+ See [ ` contributing.md ` ] [ contributing ] in [ ` syntax-tree/.github ` ] [ health ] for
270
+ ways to get started.
210
271
See [ ` support.md ` ] [ support ] for ways to get help.
211
272
212
273
This project has a [ code of conduct] [ coc ] .
@@ -247,30 +308,34 @@ abide by its terms.
247
308
248
309
[ npm ] : https://docs.npmjs.com/cli/install
249
310
311
+ [ esm ] : https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
312
+
313
+ [ esmsh ] : https://esm.sh
314
+
315
+ [ typescript ] : https://www.typescriptlang.org
316
+
250
317
[ license ] : license
251
318
252
319
[ author ] : https://wooorm.com
253
320
254
- [ contributing ] : https://github.com/syntax-tree/.github/blob/HEAD/contributing.md
321
+ [ health ] : https://github.com/syntax-tree/.github
255
322
256
- [ support ] : https://github.com/syntax-tree/.github/blob/HEAD/support .md
323
+ [ contributing ] : https://github.com/syntax-tree/.github/blob/main/contributing .md
257
324
258
- [ coc ] : https://github.com/syntax-tree/.github/blob/HEAD/code-of-conduct .md
325
+ [ support ] : https://github.com/syntax-tree/.github/blob/main/support .md
259
326
260
- [ mdast ] : https://github.com/syntax-tree/mdast
327
+ [ coc ] : https://github.com/syntax-tree/.github/blob/main/code-of-conduct.md
261
328
262
- [ remark ] : https://github.com/remarkjs/remark
329
+ [ mdast ] : https://github.com/syntax-tree/mdast
263
330
264
- [ from-markdown ] : https://github.com/syntax-tree/mdast-util-from-markdown
331
+ [ mdast-util- from-markdown] : https://github.com/syntax-tree/mdast-util-from-markdown
265
332
266
- [ to-markdown ] : https://github.com/syntax-tree/mdast-util-to-markdown
333
+ [ mdast-util- to-markdown] : https://github.com/syntax-tree/mdast-util-to-markdown
267
334
268
- [ micromark ] : https://github.com/micromark/micromark
335
+ [ mdast-util-mdx ] : https://github.com/syntax-tree/mdast-util-mdx
269
336
270
337
[ extension ] : https://github.com/micromark/micromark-extension-mdxjs-esm
271
338
272
- [ mdast-util-mdx ] : https://github.com/syntax-tree/mdast-util-mdx
273
-
274
339
[ estree ] : https://github.com/estree/estree
275
340
276
341
[ dfn-literal ] : https://github.com/syntax-tree/mdast#literal
@@ -281,4 +346,6 @@ abide by its terms.
281
346
282
347
[ dfn-flow-content ] : #flowcontent-mdxjs-esm
283
348
284
- [ remark-mdx ] : https://github.com/mdx-js/mdx/tree/next/packages/remark-mdx
349
+ [ remark-mdx ] : https://mdxjs.com/packages/remark-mdx/
350
+
351
+ [ mdx ] : https://mdxjs.com
0 commit comments