46 lines
1.3 KiB
TypeScript
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);
|
|
|