@cldn/web-ts
Version:
Class-based Node.js web server
50 lines • 2.71 kB
JavaScript
/**
* A registry that manages multiple routes and delegates request handling.
*/
class RouteRegistry {
routes = new Set();
/**
* Registers one or more routes into the registry.
*
* @param routes The routes to register.
*/
register(...routes) {
for (const route of routes)
this.routes.add(route);
}
/**
* Check if any registered route matches the given request.
* @param req The request to check.
*/
match(req) {
for (const route of this.routes)
if (route.match(req))
return true;
return false;
}
/**
* Find and invoke the first matching route to handle the request.
* @param req The request to handle.
* @return The response generated by handling the request.
* @throws {@link RouteRegistry.NoRouteError} If no route matches the request.
*/
handle(req) {
for (const route of this.routes)
if (route.match(req))
return route.handle(req);
throw new RouteRegistry.NoRouteError();
}
}
(function (RouteRegistry) {
/**
* No route can be found for handling the request.
*/
class NoRouteError extends Error {
constructor() {
super("No route in this registry matches the request.");
}
}
RouteRegistry.NoRouteError = NoRouteError;
})(RouteRegistry || (RouteRegistry = {}));
export { RouteRegistry };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVSZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb3V0aW5nL1JvdXRlUmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7O0dBRUc7QUFDSCxNQUFNLGFBQWE7SUFDRSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQVksQ0FBQztJQUU5Qzs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLEdBQUcsTUFBa0I7UUFDakMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsR0FBZTtRQUN4QixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQzNCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDO1FBQ3BCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxHQUFlO1FBQ3pCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU07WUFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFDaEIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztDQUNKO0FBRUQsV0FBVSxhQUFhO0lBQ25COztPQUVHO0lBQ0gsTUFBYSxZQUFhLFNBQVEsS0FBSztRQUNuQztZQUNJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQzVELENBQUM7S0FDSjtJQUpZLDBCQUFZLGVBSXhCLENBQUE7QUFDTCxDQUFDLEVBVFMsYUFBYSxLQUFiLGFBQWEsUUFTdEI7QUFFRCxPQUFPLEVBQUMsYUFBYSxFQUFDLENBQUMifQ==