obsidian-visualiser/composables/useMarkdown.ts

28 lines
830 B
TypeScript

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 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]);
processor.use(RemarkRehype, { allowDangerousHtml: true });
processor.use(RehypeRaw);
}
const processed = processor.runSync(processor.parse(markdown)) as Root;
return processed;
}
return parse;
}