UNPKG

@defikitdotnet/education-module-ai

Version:
76 lines (75 loc) 3.44 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.registerController = registerController; exports.registerControllers = registerControllers; var express_1 = require("express"); var controller_1 = require("../decorators/controller"); /** * Register a decorated controller with Express * @param app Express application * @param controller Controller instance */ function registerController(app, controller) { // Get controller class var controllerClass = controller.constructor; // Get base path from Controller decorator var basePath = Reflect.getMetadata(controller_1.CONTROLLER_META_KEY, controllerClass) || ""; // Create router var router = (0, express_1.Router)(); // Get routes from Route decorator var routes = Reflect.getMetadata(controller_1.ROUTES_META_KEY, controllerClass) || {}; // Get middleware from Use decorator var middlewareMap = Reflect.getMetadata(controller_1.MIDDLEWARE_META_KEY, controllerClass) || {}; // Register each route for (var _i = 0, _a = Object.entries(routes); _i < _a.length; _i++) { var _b = _a[_i], methodName = _b[0], routeInfo = _b[1]; var _c = routeInfo, path = _c.path, method = _c.method; // Get handler method from controller var handler = controller[methodName].bind(controller); // Get middleware for this route var middleware = (middlewareMap[methodName] || []); console.log("Registering route: [".concat(method, "] ").concat(basePath).concat(path, " -> ").concat(controllerClass.name, ".").concat(methodName)); // Add route to router based on HTTP method switch (method) { case "GET": router.get.apply(router, __spreadArray(__spreadArray([path], middleware, false), [handler], false)); break; case "POST": router.post.apply(router, __spreadArray(__spreadArray([path], middleware, false), [handler], false)); break; case "PUT": router.put.apply(router, __spreadArray(__spreadArray([path], middleware, false), [handler], false)); break; case "DELETE": router.delete.apply(router, __spreadArray(__spreadArray([path], middleware, false), [handler], false)); break; case "PATCH": router.patch.apply(router, __spreadArray(__spreadArray([path], middleware, false), [handler], false)); break; default: console.warn("Unknown HTTP method: ".concat(method)); } } // Mount router to app app.use(basePath, router); } /** * Register multiple decorated controllers with Express * @param app Express application * @param controllers Array of controller instances */ function registerControllers(app, controllers) { for (var _i = 0, controllers_1 = controllers; _i < controllers_1.length; _i++) { var controller = controllers_1[_i]; registerController(app, controller); } }