@@ -24,6 +24,25 @@ import {isInjectableComponent, isInjectableEstree} from './jsx-utils.js'
2424 */
2525const jsPrefix = ( jsxImportSource ) => `/* @jsxRuntime automatic
2626@jsxImportSource ${ jsxImportSource } */
27+
28+ /**
29+ * @internal
30+ * @template T
31+ * @typedef {void extends MDX.IntrinsicElements ? any : T extends keyof MDX.IntrinsicElements ? MDX.IntrinsicElements[T] : any} _MDXProps
32+ */
33+
34+ /**
35+ * @internal
36+ * @typedef {void extends MDX.Element ? JSX.Element : MDX.Element} _MDXElement
37+ */
38+
39+ /**
40+ * @internal
41+ * @type {{
42+ * [Name in keyof _MDXNodeNames]: (props: _MDXProps<Name>) => _MDXElement
43+ * }}
44+ */
45+ const _MDXNodes = /** @type {any} */(0);
2746`
2847
2948/**
@@ -247,6 +266,8 @@ function getEmbeddedCodes(
247266 let jsxVariables = ''
248267 let markdown = ''
249268 let nextMarkdownSourceStart = 0
269+ /** @type {Set<string> } */
270+ const foundMdxNodeNames = new Set ( )
250271
251272 const plugins = virtualCodePlugins . map ( ( plugin ) => plugin ( ) )
252273 /** @type {CodeMapping[] } */
@@ -739,7 +760,8 @@ function getEmbeddedCodes(
739760 }
740761
741762 default : {
742- jsx += jsxIndent + '<>'
763+ foundMdxNodeNames . add ( node . type )
764+ jsx += jsxIndent + `<_MDXNodes.${ node . type } >`
743765 break
744766 }
745767 }
@@ -789,7 +811,7 @@ function getEmbeddedCodes(
789811 }
790812
791813 default : {
792- jsx += jsxIndent + '</>'
814+ jsx += jsxIndent + `</_MDXNodes. ${ node . type } >`
793815 break
794816 }
795817 }
@@ -820,6 +842,12 @@ function getEmbeddedCodes(
820842 esmMapping . lengths . unshift ( 0 )
821843 }
822844
845+ esm += `/**
846+ * @typedef {object} _MDXNodeNames
847+ ${ [ ...foundMdxNodeNames ] . map ( ( name ) => ` * @property {unknown} ${ name } ` ) . join ( '\n' ) }
848+ */
849+ `
850+
823851 updateMarkdownFromOffsets ( mdx . length , mdx . length )
824852 esm += componentStart ( hasAwait , programScope )
825853
0 commit comments