Files
diachron/deno/app.ts

46 lines
1.3 KiB
TypeScript

// 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);