import { unified, type Processor } from "unified"; import type { Root } from 'hast'; import RemarkParse from "remark-parse"; import RemarkRehype from 'remark-rehype'; import RemarkOfm from 'remark-ofm'; import RemarkBreaks from 'remark-breaks' import RemarkGfm from 'remark-gfm'; import RemarkFrontmatter from 'remark-frontmatter'; import RehypeRaw from 'rehype-raw'; export default function useMarkdown(): (md: string) => Root { let processor: Processor; const parse = (markdown: string) => { if (!processor) { processor = unified().use([RemarkParse, RemarkGfm , RemarkOfm , RemarkBreaks, RemarkFrontmatter]); processor.use(RemarkRehype, { allowDangerousHtml: true }); processor.use(RehypeRaw); } const processed = processor.runSync(processor.parse(markdown)) as Root; return processed; } return parse; }