language: TypeScript
1.11 KB / 30 lines / 25 loc
// Cloudflare Workers entry point. Static files under public/ are served by
// Workers Static Assets before the worker runs (see wrangler.jsonc).
import { Eta } from "eta";
import { createApp } from "./app.ts";
import { views } from "./views.generated.ts";
// Workers disallow runtime code generation, so templates are precompiled by
// scripts/build.ts and preloaded into Eta's cache here. With
// cache: true, Eta serves them from the cache and never compiles.
const eta = new Eta({ cache: true });
// Templates name each other as siblings ("./_tree") or from the views root
// ("/layouts/base.eta"); either way the name is the path under views/ that
// scripts/build.ts keyed the template by.
eta.resolvePath = (templatePath: string) => {
let name = templatePath.replace(/^\.?\//, "");
if (!name.endsWith(".eta")) name += ".eta";
return name;
};
// Only reached on a cache miss, i.e. a template missing from the build.
eta.readFile = (path: string) => {
throw new Error(`Unknown template: ${path}`);
};
for (const [name, fn] of Object.entries(views)) {
eta.loadTemplate(name, fn);
}
export default createApp(eta);