28 lines
830 B
TypeScript
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;
|
|
} |