import * as handlebars from "handlebars"; import * as fs from "fs-extra"; import * as path from "path"; import { readPosts } from "./posts"; export function generate([relativePath]: string[]) { let root = fs.realpathSync(relativePath || "."); while (!fs.existsSync(path.join(root, "template.html"))) { const next = path.dirname(root); if (next === root) { root = ""; break; } root = next; } if (!root) { console.error("Couldn't find template.html"); return; } fs.ensureDirSync("generated"); const generatedDir = fs.realpathSync("generated"); const postsDir = fs.realpathSync(path.join(root, "posts")); const templateFile = fs.realpathSync(path.join(root, "template.html")); const posts = readPosts(postsDir); fs.removeSync(generatedDir); fs.copySync(root, generatedDir, { filter: p => { p = fs.realpathSync(p); return (p !== generatedDir && p !== postsDir && p !== templateFile); }}); const template = handlebars.compile(fs.readFileSync(templateFile, "utf8")); for (const post of posts) { fs.writeFileSync( path.join(generatedDir, `${post.id}.html`), template(post)); } const latest = posts[0]; if (latest) { fs.writeFileSync( path.join(generatedDir, "index.html"), ` ${latest.title} ` ) } }