summaryrefslogtreecommitdiff
path: root/cgithub/scripts/compile-views.ts
blob: 785efc1355907c22978444215eccf4f4d9aefcdc (plain)
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
// Precompiles views/*.eta into plain functions for the Cloudflare Workers
// build (src/views.generated.ts). Workers disallow runtime code generation
// (`new Function`), so Eta cannot compile templates there at request time.
import { Eta } from "eta";
import fs from "node:fs";
import path from "node:path";

const root = path.join(import.meta.dirname, "..");
const viewsDir = path.join(root, "views");
const eta = new Eta({ views: viewsDir });

const names = fs
  .readdirSync(viewsDir)
  .filter((name) => name.endsWith(".eta"))
  .sort();

let out = `// @ts-nocheck
// Generated by scripts/compile-views.ts -- do not edit.
export const views = {
`;
for (const name of names) {
  const source = fs.readFileSync(path.join(viewsDir, name), "utf8");
  const body = eta.compileToString(source);
  out += `  ${JSON.stringify(name)}: function (it, options) {\n${body}\n  },\n`;
}
out += "};\n";

fs.writeFileSync(path.join(root, "src", "views.generated.ts"), out);
console.log(`Compiled ${names.length} templates to src/views.generated.ts`);