UNPKG

@methodus/server

Version:
63 lines 2.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const log_1 = require("../../log"); const express = require("express"); const fp_1 = require("../../fp"); let ExpressRouter = class ExpressRouter { constructor(obj, methodType, app) { this.routers = []; const methodus = fp_1.fp.maybeMethodus(obj)[obj.name]; const proto = fp_1.fp.maybeProto(obj); const globalMiddlewares = []; if (methodus.middlewares) { methodus.middlewares.forEach((element) => { if (element) { globalMiddlewares.push(element); } else { log_1.logger.error('could not load middleware'); } }); } const routerDataObject = {}; Object.keys(methodus._descriptors).forEach((itemKey) => { const item = methodus._descriptors[itemKey]; routerDataObject[item.route] = routerDataObject[item.route] || []; routerDataObject[item.route].push(item); }); Object.keys(routerDataObject).forEach((route) => { const autoRouter = express.Router(); routerDataObject[route].map((item) => { const verb = item.verb.toLowerCase(); const functionArray = [...globalMiddlewares]; if (item.middlewares) { log_1.logger.info(`loading middleware for ${item.propertyKey}`); item.middlewares.forEach((element) => { if (element) { functionArray.push(element); } }); } const repositoryBuilder = (...args) => { args.push(methodus.repository); proto[item.propertyKey].apply(methodus, args); }; if (methodus.repository) { functionArray.push(repositoryBuilder.bind(methodus)); } else { functionArray.push(proto[item.propertyKey].bind(methodus)); } autoRouter[verb](route, ...functionArray); }); app.use('/', autoRouter); }); } }; ExpressRouter = tslib_1.__decorate([ log_1.LogClass(log_1.logger), tslib_1.__metadata("design:paramtypes", [Object, String, Object]) ], ExpressRouter); exports.ExpressRouter = ExpressRouter; //# sourceMappingURL=Router.js.map