Skip to content

Commit d91d6dd

Browse files
committed
feat(jsx): base for supporting more runtimes
1 parent aa5b349 commit d91d6dd

File tree

2 files changed

+73
-6
lines changed

2 files changed

+73
-6
lines changed

src/index.js

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,24 @@ import dirnameMessedUp from './dirname-messed-up.cjs'
1010

1111
const {readFile, unlink} = fs.promises
1212

13+
/**
14+
* @type {import('./types').JsxConfig}
15+
*/
16+
const defaultJSXConfig = {
17+
JsxLib: {
18+
varName: 'React',
19+
package: 'react',
20+
},
21+
JsxDom: {
22+
varName: 'ReactDOM',
23+
package: 'react-dom'
24+
},
25+
JsxRuntime: {
26+
varName: '_jsx_runtime',
27+
package: 'react/jsx-runtime'
28+
}
29+
}
30+
1331
/**
1432
* @template {{[key: string]: any}} Frontmatter
1533
* @param {import('./types').BundleMDX<Frontmatter>} options
@@ -26,6 +44,7 @@ async function bundleMDX({
2644
grayMatterOptions = options => options,
2745
bundleDirectory,
2846
bundlePath,
47+
jsxConfig = defaultJSXConfig
2948
}) {
3049
/* c8 ignore start */
3150
if (dirnameMessedUp && !process.env.ESBUILD_BINARY_PATH) {
@@ -187,16 +206,16 @@ async function bundleMDX({
187206
plugins: [
188207
globalExternals({
189208
...globals,
190-
react: {
191-
varName: 'React',
209+
[jsxConfig.JsxLib.package]: {
210+
varName: jsxConfig.JsxLib.varName,
192211
type: 'cjs',
193212
},
194-
'react-dom': {
195-
varName: 'ReactDOM',
213+
[jsxConfig.JsxDom.package]: {
214+
varName: jsxConfig.JsxDom.varName,
196215
type: 'cjs',
197216
},
198-
'react/jsx-runtime': {
199-
varName: '_jsx_runtime',
217+
[jsxConfig.JsxRuntime.package]: {
218+
varName: jsxConfig.JsxRuntime.varName,
200219
type: 'cjs',
201220
},
202221
}),
@@ -213,6 +232,7 @@ async function bundleMDX({
213232
remarkFrontmatter,
214233
[remarkMdxFrontmatter, {name: 'frontmatter'}],
215234
],
235+
jsxImportSource: jsxConfig.JsxLib.package
216236
},
217237
matter.data,
218238
),
@@ -248,6 +268,7 @@ async function bundleMDX({
248268
)
249269
}
250270

271+
console.log(code);
251272
return {
252273
code: `${code};return Component;`,
253274
frontmatter: matter.data,

src/types.d.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,52 @@ type BundleMDXOptions<Frontmatter> = {
195195
* @see bundleDirectory
196196
*/
197197
bundlePath?: string
198+
/**
199+
* Allows this to output code other than react.
200+
* Follow https://mdxjs.com/docs/getting-started/#jsx and JSX library's documentation to use
201+
*
202+
* @example
203+
* ```
204+
* bundleMDX({
205+
* jsxConfig: {
206+
* JsxLib: {
207+
* varName: 'HonoJSX',
208+
* package: 'hono/jsx',
209+
* },
210+
* JsxDom: {
211+
* varName: 'HonoDOM',
212+
* package: 'hono/jsx/dom',
213+
* },
214+
* jsxRuntime: {
215+
* varName: '_jsx_runtime',
216+
* package: 'hono/jsx/jsx-runtime',
217+
* },
218+
* }
219+
* })
220+
* ```
221+
*/
222+
jsxConfig?: JsxConfig;
223+
};
224+
225+
export type JsxConfig = {
226+
JsxLib: {
227+
/** @default 'React' */
228+
varName: string;
229+
/** @default 'react' */
230+
package: string;
231+
}
232+
JsxDom: {
233+
/** @default 'ReactDOM' */
234+
varName: string;
235+
/** @default 'react-dom' */
236+
package: string;
237+
}
238+
JsxRuntime: {
239+
/** @default '_jsx_runtime' */
240+
varName: string;
241+
/** @default 'react/jsx-runtime' */
242+
package: string;
243+
}
198244
}
199245

200246
type MDXExport<

0 commit comments

Comments
 (0)