kompendium
Version:
Documentation generator for Stencil components
50 lines (44 loc) • 1.44 kB
text/typescript
import { unified } from 'unified';
import remarkParse from 'remark-parse';
import remarkFrontmatter from 'remark-frontmatter';
import remarkDirective from 'remark-directive';
import remarkGfm from 'remark-gfm';
import remarkRehype from 'remark-rehype';
import rehypeRaw from 'rehype-raw';
import rehypeSlug from 'rehype-slug';
import rehypeStringify from 'rehype-stringify';
import { saveFrontmatter } from './markdown-frontmatter';
import {
admonitions,
normalizeLegacyAdmonitions,
} from './markdown-admonitions';
import { kompendiumCode } from './markdown-code';
import { typeLinks } from './markdown-typelinks';
export interface File {
data: {
frontmatter?: Record<string, any>;
path?: string;
};
toString(): string;
}
export async function markdownToHtml(text: string, types = []): Promise<File> {
const normalized = normalizeLegacyAdmonitions(text);
const file = await unified()
.use(remarkParse)
.use(remarkGfm)
.use(remarkFrontmatter)
.use(saveFrontmatter)
.use(remarkDirective)
.use(admonitions)
.use(remarkRehype, { allowDangerousHtml: true })
.use(rehypeRaw)
.use(rehypeSlug)
.use(typeLinks, { types: types })
.use(kompendiumCode)
.use(rehypeStringify)
.process(normalized);
return {
data: file.data as File['data'],
toString: () => file.toString(),
};
}