import { readFile } from "fs-extra"; import { unified } from "unified"; import remarkParse from "remark-parse"; import remarkRehype from "remark-rehype"; import rehypeStringify from "rehype-stringify"; import remarkFrontmatter from "remark-frontmatter"; import rehypeFormat from "rehype-format"; import rehypeDocument from "rehype-document"; import rehypeMeta from "rehype-meta"; import rehypeRaw from "rehype-raw"; import { extractFrontmatter } from "./extractFrontmatter"; // //NOTE input: markdown file. output, HTML document //TODO does not yet accept before/after JSX components. //This is using unified's rehypeDocument to create a boilerplate with a few //inserts (favicon, css, title) // export async function writePage(filepath) { const frontmatter = await extractFrontmatter(filepath); let content; const processor = await unified() .use(remarkParse) .use(remarkFrontmatter) .use(remarkRehype, { allowDangerousHtml: true }) .use(rehypeRaw) .use(rehypeFormat) .use(rehypeDocument, { css: frontmatter.css ?? "style.css", title: frontmatter.title ?? frontmater.filename, link: [{ href: "favicon.png", rel: "icon", type: "image/png" }], }) .use(rehypeStringify) .process(await readFile(filepath, "utf-8")); return processor.value; } // let input = "./input/cookie.md"; // console.log(await writePage(input));