UNPKG

ufiber

Version:

Next-gen webserver for node-js developer

52 lines (50 loc) 1.36 kB
import { MESSAGE_MATCHER_IS_ALREADY_BUILT } from "../consts.js"; import { UnsupportedPathError } from "./error.js"; //#region src/router/smart.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$1 = 0, len$1 = routes.length; i$1 < len$1; i$1++) router.add(...routes[i$1]); 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 };