diff options
| author | Joe Mou <dev@mou.fo> | 2026-07-15 02:08:17 -0400 |
|---|---|---|
| committer | Joe Mou <dev@mou.fo> | 2026-07-15 02:08:29 -0400 |
| commit | fb16dc2b017e339e6a36a89c9b5d8a830ce3a541 (patch) | |
| tree | 640775bc65b7a14019df8aea789a00e65023d3bb /scripts/compile-views.ts | |
| parent | 0f4681d55b9d865a4e860fb3f28203ffd0bdc034 (diff) | |
Add Cloudflare Workers deployment target
Split routes into a shared createApp() (src/app.ts) used by both the
Node entry (src/index.ts) and a new Workers entry (src/worker.ts).
Workers disallow runtime code generation, so scripts/compile-views.ts
precompiles the Eta templates into src/views.generated.ts and rendering
switches from renderAsync to the sync render. Static files move to
public/static so Workers Static Assets can serve them; the Node build
and serveStatic root are updated to match.
Deploy with pnpm run deploy:cf, local dev with pnpm run dev:cf.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Diffstat (limited to 'scripts/compile-views.ts')
| -rw-r--r-- | scripts/compile-views.ts | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/scripts/compile-views.ts b/scripts/compile-views.ts new file mode 100644 index 0000000..785efc1 --- /dev/null +++ b/scripts/compile-views.ts @@ -0,0 +1,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`); |
