49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { services } from "./services.ts";
|
|
import {
|
|
DenoRequest,
|
|
massageMethod,DenoResponse,
|
|
Method,
|
|
ProcessedRoute,
|
|
Request,
|
|
Route,
|
|
} from "./types.ts";
|
|
|
|
import { routes } from "./routes.ts";
|
|
|
|
services.logging.log({ source: "logging", text: ["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: massageMethod(denoRequest.method),
|
|
parameters: { one: 1, two: 2 },
|
|
denoRequest,
|
|
};
|
|
return route.handler(req);
|
|
};
|
|
|
|
const retval: ProcessedRoute = { pattern, method, handler };
|
|
|
|
return retval;
|
|
},
|
|
);
|
|
|
|
async function handler(req: DenoRequest): Promise<DenoResponse> {
|
|
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);
|