You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

35 lines
798 B

import MarkdownIt from "markdown-it"
const mark = new MarkdownIt()
const mdToHtml = (str: string) => {
const content = mark.render(str)
return `
import React from "react"
export default React.createElement('div', {dangerouslySetInnerHTML:{__html: \`${content}\`} })`
}
export default function md(): any {
return {
name: "vite-plugin-md",
enforce: "pre",
transform(raw: any, id: any) {
if (!/\.md/g.test(id))
return
try {
return mdToHtml(raw)
} catch (e) {
this.error(e)
return ""
}
},
async handleHotUpdate(ctx: any) {
if (!/\.md/g.test(ctx.file))
return
const defaultRead = ctx.read
ctx.read = async function() {
return mdToHtml(await defaultRead())
}
}
}
}