import { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from "../../router.js"; //#region src/router/smart-router/router.ts var SmartRouter = class { name = "SmartRouter"; #routers = []; #routes = []; constructor(init) { this.#routers = init.routers; } 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 = this.#routers; const routes = this.#routes; const len = routers.length; let i = 0; let res; for (; i < len; i++) { const router = routers[i]; try { for (let i = 0, len = routes.length; i < len; i++) router.add(...routes[i]); 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]; } }; //#endregion export { SmartRouter };