import { Marked } from "https://deno.land/x/markdown/mod.ts" import * as yaml from "https://deno.land/x/js_yaml_port/js-yaml.js" // the structure of policies/list.yml interface policyList { [file: string]: { name: string; description: string; aliases?: string[]; }; } const decoder = new TextDecoder("utf-8"); const encoder = new TextEncoder(); const policyFile = "policies/list.yml"; const rawPolicies = decoder.decode(await Deno.readFile(policyFile)); const policies: policyList = yaml.load(rawPolicies); const index = { prefix: ` The Mana World Policies \n\n" }; // the _redirects file used by netlify let redirects = ""; console.info(">> Building the static site..."); // empty the build directory await Deno.remove("build", { recursive: true }); // loop through every policy markdown file for (const [file, props] of Object.entries(policies)) { if (file.startsWith(".")) { console.log(`Ignoring disabled policy file: ${file}.md`); continue; } // add to the index page index.list += `
  • ${props.name}
  • \n`; // add to the netlify redirect file redirects += `/${file} /${file}/index.html 200!\n`; // built-in aliases if (file != file.replace("-", "_")) { redirects += `/${file.replace("-", "_")} /${file} 302\n`; } if (file != file.replace("-", "")) { redirects += `/${file.replace("-", "")} /${file} 302\n`; } // process path aliases if (Reflect.has(props, "aliases")) { for (const alias of props.aliases as string[]) { redirects += `/${alias} /${file} 302\n`; if (alias != alias.toLowerCase()) { redirects += `/${alias.toLocaleLowerCase()} /${file} 302\n`; } } } // convert from markdown to html const markdown = decoder.decode(await Deno.readFile(`policies/${file}.md`)); const html: string = Marked.parse(markdown); // wrap the generated html with our template const policyPage = encoder.encode(` The Mana World – ${props.name}
    ${html}
    `.trim()); // create a subdirectory for it await Deno.mkdir(`build/${file}`, {recursive: true}); await Deno.writeFile(`build/${file}/index.html`, policyPage, {create: true}); } // write the index page const indexPage = encoder.encode(index.prefix + index.list + index.suffix); await Deno.writeFile("build/index.html", indexPage, {create: true}); // write the _redirects file (netlify) await Deno.writeFile("build/_redirects", encoder.encode(redirects), {create: true}); // copy static assets for await (const dirEntry of Deno.readDir("src/static")) { await Deno.copyFile(`src/static/${dirEntry.name}`, `build/${dirEntry.name}`,); } console.info(">> Build success ✅");