Separate route definitions and where they're served from

This commit is contained in:
2025-03-07 10:28:17 -06:00
parent d6fccc3172
commit ad2b85bc2b
4 changed files with 138 additions and 53 deletions

45
deno/app.ts Normal file
View File

@@ -0,0 +1,45 @@
// app.ts
import { services } from "./services";
import{DenoRequest, Method, ProcessedRoute, Request, Route} from './types'
import {routes} from './routes'
services.logging.log({ foo: 1 });
const processedRoutes: ProcessedRoute[] = routes.map(
(route: Route, idx: number, allRoutes: Route[]) => {
const pattern: URLPattern = new URLPattern({ pathname: route.path });
const method: Method = route.method;
const handler = async (denoRequest: DenoRequest) => {
const req: Request = {
pattern: route.pattern,
path: denoRequest.path,
method: denoRequest.method,
parameters: { one: 1, two: 2 },
denoRequest,
};
return route.handler(req);
};
const retval: ProcessedRoute = { pattern, method, handler };
return retval
},
);
async function handler(req: globalThis.Request): globalThis.Response {
for (const [idx, pr] of processedRoutes.entries()) {
const match = pr.pattern.exec(req.url);
if (match) {
const resp = await pr.handler(req);
return new globalThis.Response(resp.result);
}
}
return new globalThis.Response("not found", { status: 404 });
}
Deno.serve(handler);