writePage.js (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
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));
|