UNPKG

expressmultithread

Version:

Fast, light-weight and low dependency [Express.js](https://www.npmjs.com/package/express) multithreaded router.

64 lines 2.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.pathToRoute = void 0; const toArray_1 = require("./utils/toArray"); const walk_1 = require("./utils/walk"); const importModule_1 = require("./utils/importModule"); const deepCopy_1 = require("./utils/deepCopy"); const types_1 = require("../types"); const config_1 = __importDefault(require("../config")); const strings_1 = require("../constants/strings"); const ctlPlugins = config_1.default.plugins.filter(p => p.kind === types_1.PluginType.controllerDecorator); config_1.default.debug && console.debug("Loaded controller plugins:", ctlPlugins); const rtPlugins = config_1.default.plugins.filter(p => p.kind === types_1.PluginType.routeDecorator); config_1.default.debug && console.debug("Loaded route plugins:", rtPlugins); const ogopd = (m) => Object.getOwnPropertyDescriptors(m); function exploreController(module) { if (!ogopd(module)?.__controller?.value) return undefined; let controller = ogopd(module).__controller.value; for (let i = 0; i < ctlPlugins.length; i++) controller = ctlPlugins[i].cb((0, deepCopy_1.deepCopy)(controller), ogopd(module)); const routes = {}; const methods = ogopd(module.prototype); const keys = Object.keys(methods); for (let i = 0; i < keys.length; i++) { if (!keys[i].endsWith(strings_1.__route)) continue; let route = methods[keys[i]].value; const propertyKey = keys[i].slice(0, -strings_1.__route.length); for (let j = 0; j < rtPlugins.length; j++) route = rtPlugins[j].cb((0, deepCopy_1.deepCopy)(route), propertyKey, ogopd(module.prototype)); const endpoint = (controller.path ?? strings_1.empty) + route.path; const controllerMid = (0, toArray_1.toArray)(controller.middlewares ?? []); const callstack = [...controllerMid, ...route.middlewares, route.cb]; routes[route.method + endpoint] = { ...route, callstack, endpoint }; } return routes; } function pathToRoute(path) { const res = {}; path = (0, toArray_1.toArray)(path); for (let i = 0; i < path.length; i++) { const files = (0, walk_1.walk)(path[i]); for (let j = 0; j < files.length; j++) { const module = (0, importModule_1.importModule)(files[j]); const k = Object.keys(module); for (let l = 0; l < k.length; l++) { if (k[l] !== strings_1.defaultStr && module[k[l]] === module.default) continue; Object.assign(res, exploreController(module[k[l]]) ?? {}); } } } return res; } exports.pathToRoute = pathToRoute; //# sourceMappingURL=pathToRoute.js.map