// pnpm build [talk...] — builds each talk to dist// plus an index page at dist/ import { cpSync, mkdirSync, rmSync, writeFileSync } from "node:fs"; import { join } from "node:path"; import { distDir, listTalks, pickTalk, root, slidev } from "./lib.mjs"; const only = process.argv.slice(2); const talks = listTalks(); const building = only.length ? only.map(pickTalk) : talks; if (!only.length) rmSync(distDir, { recursive: true, force: true }); mkdirSync(distDir, { recursive: true }); // public/ holds site-root files (the favicon, shared with tyler.fun) that every // talk points at by absolute path. cpSync(join(root, "public"), distDir, { recursive: true }); for (const talk of building) { console.log(`\n▸ ${talk.slug}`); slidev(["build", talk.entry, "--base", `/${talk.slug}/`, "--out", join(distDir, talk.slug)]); } const escape = (s) => s.replace(/[&<>"]/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """ })[c]); writeFileSync( join(distDir, "index.html"), ` Slides — tyler.fun

Slides

`, ); console.log(`\nBuilt ${building.length} talk(s) → dist/`);