import { Renderer } from "@libs/markdown"; import HighlightPlugin from "@libs/markdown/plugins/highlighting"; import { walk } from "@std/fs"; import * as pathTools from "@std/path"; function injectIntoTemplate(name: string, rendered: string): string { let content = [ "", "", "", [ `${name}`, '', '', ], "", "", [ rendered, ], "", "", ]; while (content.some((x) => Array.isArray(x))) { content = content.flat(); } return content.join(""); } async function renderMarkdown() { const renderer = await Renderer.with({ plugins: [HighlightPlugin], }); for await ( const entry of walk("src", { exts: [".md"], includeDirs: false }) ) { const parsed = pathTools.parse(entry.path); parsed.dir = parsed.dir.replace(/^src[\\/]?/, ""); parsed.dir = pathTools.join("-", parsed.dir); parsed.ext = ".html"; parsed.base = `${parsed.name}${parsed.ext}`; await Deno.mkdir(parsed.dir, { recursive: true }); const content = await renderer.render(await Deno.readTextFile(entry.path)); await Deno.writeTextFile( pathTools.format(parsed), injectIntoTemplate(parsed.name, content), ); } } async function copyStaticFiles() { for await (const entry of walk("static", { includeDirs: false })) { const parsed = pathTools.parse(entry.path); parsed.dir = parsed.dir.replace(/^static[\\/]?/, ""); parsed.dir = pathTools.join("-", parsed.dir); await Deno.mkdir(parsed.dir, { recursive: true }); await Deno.copyFile(entry.path, pathTools.format(parsed)); } } async function main() { await renderMarkdown(); await copyStaticFiles(); } if (import.meta.main) { main(); }