UNPKG

@alauda/doom

Version:

Doctor Doom making docs.

70 lines (69 loc) 2.16 kB
import { isExternalUrl } from '@rspress/shared'; import { visit } from 'unist-util-visit'; import { getASTNodeImport } from '../shared.js'; const getMdxSrcAttribute = (tempVar) => { return { type: 'mdxJsxAttribute', name: 'src', value: { type: 'mdxJsxAttributeValueExpression', value: tempVar, data: { estree: { type: 'Program', sourceType: 'module', body: [ { type: 'ExpressionStatement', expression: { type: 'Identifier', name: tempVar, }, }, ], }, }, }, }; }; const normalizeImageUrl = (imageUrl) => { if (isExternalUrl(imageUrl) || imageUrl.startsWith('/')) { return; } return imageUrl; }; export const rehypeNormalizeLink = () => { return (tree) => { const images = []; visit(tree, 'element', (node) => { if (node.tagName !== 'img') { return; } const { alt, src } = node.properties; if (typeof src !== 'string') { return; } const imagePath = normalizeImageUrl(src); if (!imagePath) { return; } // relative path const tempVariableName = `doom_image${images.length}`; Object.assign(node, { type: 'mdxJsxFlowElement', name: 'img', children: [], attributes: [ alt && { type: 'mdxJsxAttribute', name: 'alt', value: alt, }, getMdxSrcAttribute(tempVariableName), ].filter(Boolean), }); images.push(getASTNodeImport(tempVariableName, imagePath)); }); tree.children.unshift(...images); }; };