expressmultithread
Version:
Fast, light-weight and low dependency [Express.js](https://www.npmjs.com/package/express) multithreaded router.
64 lines • 2.9 kB
JavaScript
;
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