UNPKG

ufiber

Version:

Next-gen webserver for node-js developer

52 lines (50 loc) 1.38 kB
const require_consts = require('../consts.cjs'); const require_error = require('./error.cjs'); //#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(require_consts.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 require_error.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 exports.SmartRouter = SmartRouter;