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())
      }
    }
  }
}