UNPKG

hono

Version:

Web framework built on Web Standards

58 lines (57 loc) 1.42 kB
// src/router/smart-router/router.ts import { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from "../../router.js"; var SmartRouter = class { name = "SmartRouter"; routers = []; routes = []; constructor(init) { Object.assign(this, init); } add(method, path, handler) { if (!this.routes) { throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT); } this.routes.push([method, path, handler]); } match(method, path) { if (!this.routes) { throw new Error("Fatal error"); } const { routers, routes } = this; const len = routers.length; let i = 0; let res; for (; i < len; i++) { const router = routers[i]; try { routes.forEach((args) => { router.add(...args); }); res = router.match(method, path); } catch (e) { if (e instanceof UnsupportedPathError) { continue; } throw e; } this.match = router.match.bind(router); this.routers = [router]; this.routes = void 0; break; } if (i === len) { throw new Error("Fatal error"); } this.name = `SmartRouter + ${this.activeRouter.name}`; return res; } get activeRouter() { if (this.routes || this.routers.length !== 1) { throw new Error("No active router has been determined yet."); } return this.routers[0]; } }; export { SmartRouter };