all repos — kushiyaki @ 0ce9861827fe2080a14ba3ead98458dbd91b78c5

🍢 A tiny static site generator for grilling markdown files to perfection

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));