leblebijs/src/routing/router.ts

24 lines
660 B
TypeScript

import type { Server } from "../compose";
import type { BufferedResponse, Request } from "../core/bufferedServer";
export type Route<ReqData extends Request, ResData> = {
method: string;
url: string;
app: Server<ReqData, ResData>;
};
export function route<ReqData extends Request, ResData>(
routes: Route<ReqData, ResData>[],
): Server<ReqData, ResData> {
return async function route_(request) {
const { url, method } = request;
const route = routes.filter(
(registered) => registered.url === url && registered.method === method,
)[0];
if (route) {
return route.app(request);
}
throw "No routes matched";
};
}