import type { Plugin } from 'vite'; import hljs from 'highlight.js'; import MarkdownIt from 'markdown-it'; import { createRequire } from 'node:module'; const isMd = (id: string) => /\.md$/.test(id); function markdownCardWrapper(htmlCode: string) { const group = htmlCode .replace(/
/g, '');
return `${html}`;
};
// add target="_blank" to all links
function markdownLinkOpen(md: MarkdownIt) {
const defaultRender = md.renderer.rules.link_open;
md.renderer.rules.link_open = (tokens, idx, options, env, self) => {
const aIndex = tokens[idx].attrIndex('target');
if (aIndex < 0) {
tokens[idx].attrPush(['target', '_blank']); // add new attribute
}
if (defaultRender) {
return defaultRender(tokens, idx, options, env, self);
}
return self.renderToken(tokens, idx, options);
};
}
export function vitePluginMd(): Plugin {
const md = initMarkdownIt();
return {
name: 'vite-plugin-md',
enforce: 'pre',
transform(raw, id) {
if (!isMd(id)) {
return;
}
try {
return markdownToVue({ id, raw, md });
} catch (e: any) {
this.error(e);
}
},
async handleHotUpdate(ctx) {
if (!isMd(ctx.file)) {
return;
}
const defaultRead = ctx.read;
ctx.read = async function () {
const raw = await defaultRead();
return markdownToVue({
id: ctx.file,
raw,
md,
});
};
},
};
}