From 1595aee95fb770a6d3c0128f4963fa3ac4d0f1dd Mon Sep 17 00:00:00 2001 From: Brad Cornes Date: Sat, 17 Dec 2022 23:23:34 +0000 Subject: [PATCH] Support JSX development runtime (fixes #1) --- index.js | 7 ++++++- package-lock.json | 14 +++++++------- package.json | 2 +- test.js | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/index.js b/index.js index 5fb7d75..491488d 100644 --- a/index.js +++ b/index.js @@ -87,7 +87,12 @@ export const mdxAnnotations = { return (tree) => { estreeVisit(tree, (node) => { if (node.type !== 'CallExpression') return - if (node.callee.name !== '_jsxs' && node.callee.name !== '_jsx') return + if ( + node.callee.name !== '_jsxs' && + node.callee.name !== '_jsx' && + node.callee.name !== '_jsxDEV' + ) + return let propsNode = node.arguments[1] if (propsNode?.type !== 'ObjectExpression') return diff --git a/package-lock.json b/package-lock.json index 8417228..4f06769 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,15 +14,15 @@ "unist-util-visit": "^4.1.1" }, "devDependencies": { - "@mdx-js/mdx": "^2.1.5", + "@mdx-js/mdx": "^2.2.1", "remark-gfm": "^3.0.1", "uvu": "^0.5.6" } }, "node_modules/@mdx-js/mdx": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.1.5.tgz", - "integrity": "sha512-zEG0lt+Bl/r5U6e0TOS7qDbsXICtemfAPquxWFsMbdzrvlWaqMGemLl+sjVpqlyaaiCiGVQBSGdCk0t1qXjkQg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.2.1.tgz", + "integrity": "sha512-hZ3ex7exYLJn6FfReq8yTvA6TE53uW9UHJQM9IlSauOuS55J9y8RtA7W+dzp6Yrzr00/U1sd7q+Wf61q6SfiTQ==", "dev": true, "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -1900,9 +1900,9 @@ }, "dependencies": { "@mdx-js/mdx": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.1.5.tgz", - "integrity": "sha512-zEG0lt+Bl/r5U6e0TOS7qDbsXICtemfAPquxWFsMbdzrvlWaqMGemLl+sjVpqlyaaiCiGVQBSGdCk0t1qXjkQg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.2.1.tgz", + "integrity": "sha512-hZ3ex7exYLJn6FfReq8yTvA6TE53uW9UHJQM9IlSauOuS55J9y8RtA7W+dzp6Yrzr00/U1sd7q+Wf61q6SfiTQ==", "dev": true, "requires": { "@types/estree-jsx": "^1.0.0", diff --git a/package.json b/package.json index 0daa5c0..2af3363 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "test": "node test.js" }, "devDependencies": { - "@mdx-js/mdx": "^2.1.5", + "@mdx-js/mdx": "^2.2.1", "remark-gfm": "^3.0.1", "uvu": "^0.5.6" }, diff --git a/test.js b/test.js index 3c2e0cc..e37702f 100644 --- a/test.js +++ b/test.js @@ -128,6 +128,42 @@ export default MDXContent;` ) }) +test('dev runtime', async () => { + let compiled = await compile("# Hello {{ foo: 'bar' }}", { development: true }) + + assert.equal( + compiled, + `/*@jsxRuntime automatic @jsxImportSource react*/ +import {jsxDEV as _jsxDEV} from "react/jsx-dev-runtime"; +function _createMdxContent(props) { + const _components = Object.assign({ + h1: "h1" + }, props.components); + return _jsxDEV(_components.h1, { + children: "Hello", + ...{ + foo: 'bar' + } + }, undefined, false, { + fileName: "", + lineNumber: 1, + columnNumber: 1 + }, this); +} +function MDXContent(props = {}) { + const {wrapper: MDXLayout} = props.components || ({}); + return MDXLayout ? _jsxDEV(MDXLayout, Object.assign({}, props, { + children: _jsxDEV(_createMdxContent, props, undefined, false, { + fileName: "" + }, this) + }), undefined, false, { + fileName: "" + }, this) : _createMdxContent(props); +} +export default MDXContent;` + ) +}) + test('gfm', async () => { let compiled = await compile( [