UNPKG

@d3vtool/kazejs

Version:

A flexible Node.js web framework built with TypeScript, focusing on dependency injection, routing, middleware, and schema validation. Supports dynamic routes, global middleware, static files, and customizable error handling for scalable apps.

261 lines (260 loc) 12.6 kB
"use strict"; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _MapRouter_instances, _MapRouter_routeMap, _MapRouter_dynamicRouteMap, _MapRouter_middlewares, _MapRouter_genRouteSegment; Object.defineProperty(exports, "__esModule", { value: true }); exports.MapRouter = void 0; const kaze_1 = require("./kaze"); const kaze_router_1 = require("./kaze-router"); class MapRouter extends kaze_router_1.Router { constructor() { super(); _MapRouter_instances.add(this); _MapRouter_routeMap.set(this, new Map()); _MapRouter_dynamicRouteMap.set(this, new Map()); _MapRouter_middlewares.set(this, []); kaze_1.AcceptedMethods.forEach(method => { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").set(method, new Map()); __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").set(method, new Map()); }); } get(route, ...handlers) { const isDynamicRoute = route.includes("/:") || route.includes("/*"); if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get("GET")?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get("GET")?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); } post(route, ...handlers) { const isDynamicRoute = route.includes("/:"); if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get("POST")?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get("POST")?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); } put(route, ...handlers) { const isDynamicRoute = route.includes("/:"); if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get("PUT")?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get("PUT")?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); } delete(route, ...handlers) { const isDynamicRoute = route.includes("/:"); if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get("DELETE")?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get("DELETE")?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); } patch(route, ...handlers) { const isDynamicRoute = route.includes("/:"); if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get("PATCH")?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get("PATCH")?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); } head(route, ...handlers) { const isDynamicRoute = route.includes("/:"); if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get("HEAD")?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get("HEAD")?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); } options(route, ...handlers) { const isDynamicRoute = route.includes("/:"); if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get("OPTIONS")?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get("OPTIONS")?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); } trace(route, ...handlers) { const isDynamicRoute = route.includes("/:"); if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get("TRACE")?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get("TRACE")?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); } connect(route, ...handlers) { const isDynamicRoute = route.includes("/:"); if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get("CONNECT")?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get("CONNECT")?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); } link(route, ...handlers) { const isDynamicRoute = route.includes("/:"); if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get("LINK")?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get("LINK")?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); } unlink(route, ...handlers) { const isDynamicRoute = route.includes("/:"); if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get("UNLINK")?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get("UNLINK")?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); } all(route, ...handlers) { const isDynamicRoute = route.includes("/:"); kaze_1.AcceptedMethods.forEach(method => { if (!isDynamicRoute) { __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get(method)?.set(route, handlers); return; } const dynRouteSeg = __classPrivateFieldGet(this, _MapRouter_instances, "m", _MapRouter_genRouteSegment).call(this, route); const dynRouteInfo = { dynSeg: dynRouteSeg.dynamicRouteSeg, normSeg: dynRouteSeg.normalSeg, fullRoute: route, handlers }; __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get(method)?.set(dynRouteSeg.routeSegments.length, dynRouteInfo); }); } middlewares(...handlers) { __classPrivateFieldSet(this, _MapRouter_middlewares, handlers, "f"); } fetchMiddlewares() { return [...__classPrivateFieldGet(this, _MapRouter_middlewares, "f")]; } fetchRoutes() { return __classPrivateFieldGet(this, _MapRouter_routeMap, "f"); } fetchDynamicRoutes() { return __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f"); } async fetchHandlers(route, reqMethod) { let handlers = __classPrivateFieldGet(this, _MapRouter_routeMap, "f").get(reqMethod)?.get(route); if (!handlers) { const routeSegments = route.split("/"); const dynSegInfo = __classPrivateFieldGet(this, _MapRouter_dynamicRouteMap, "f").get(reqMethod)?.get(routeSegments.length); if (!dynSegInfo) { return; } const dynSegStartIdx = routeSegments.length - dynSegInfo.dynSeg.length; const paramsMap = {}; for (let i = 0; i < dynSegInfo.dynSeg.length; ++i) { paramsMap[dynSegInfo.dynSeg[i]] = routeSegments[i + dynSegStartIdx]; } return { params: paramsMap, handlers: dynSegInfo.handlers }; } return handlers; } } exports.MapRouter = MapRouter; _MapRouter_routeMap = new WeakMap(), _MapRouter_dynamicRouteMap = new WeakMap(), _MapRouter_middlewares = new WeakMap(), _MapRouter_instances = new WeakSet(), _MapRouter_genRouteSegment = function _MapRouter_genRouteSegment(route) { const routeSegments = route.split("/"); const dynamicRouteSeg = routeSegments.reduce((acc, seg) => { seg.startsWith(":") ? acc.push(seg.substring(1)) : acc; return acc; }, []); const dynSegStartIdx = routeSegments.length - dynamicRouteSeg.length; const normalSeg = routeSegments.slice(0, dynSegStartIdx); return { normalSeg, routeSegments, dynamicRouteSeg, }; }; ;