/// import type { Root } from 'mdast' import type { MdxjsEsm } from 'mdast-util-mdx' import { createJSXWithSpreadPropsNode, createNameSpaceImportNode, } from '../../utils/mdastUtils' export function TsInfoMdxPlugin() { return transformer function transformer(tree: Root, file: any) { const children = tree.children const addImports: MdxjsEsm[] = [] children.forEach((child, index) => { // find jsx node like: if (child.type === 'mdxJsxFlowElement' && child.name === 'TsInfo') { const srcAttr = child.attributes.find( (attr) => attr.type === 'mdxJsxAttribute' && attr.name === 'src' && typeof attr.value === 'string' ) const srcValue = srcAttr?.value const nameAttr = child.attributes.find( (attr) => attr.type === 'mdxJsxAttribute' && attr.name === 'name' && typeof attr.value === 'string' ) const nameValue = nameAttr?.value if (srcValue && nameValue) { const nextIndex = addImports.length const varName = `_tsInfo${nextIndex}` // add import: // import * as varName from "${srcValue}?tsInfo=${nameValue}" addImports.push( createNameSpaceImportNode({ name: varName, from: `${srcValue}?tsInfo=${nameValue}`, }) ) // replace this node with: // children.splice( index, 1, createJSXWithSpreadPropsNode({ Component: 'TsInfo', props: varName, }) ) } } }) children.unshift(...addImports) } }