UNPKG

@hv-kit/hexpress

Version:

facilitates typescript backend development with express

92 lines 4.69 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.InitController = exports.Options = exports.Delete = exports.Put = exports.Post = exports.Get = exports.Controller = exports.MethodDecoratorFactory = exports.serve = void 0; require("reflect-metadata"); const path_1 = __importDefault(require("path")); const server_1 = require("./dta/server"); exports.serve = server_1.runServer; var MetadataKeys; (function (MetadataKeys) { MetadataKeys["BASE_PATH"] = "base_path"; MetadataKeys["ROUTERS"] = "routers"; })(MetadataKeys || (MetadataKeys = {})); var Methods; (function (Methods) { Methods["GET"] = "get"; Methods["POST"] = "post"; Methods["DELETE"] = "delete"; Methods["PUT"] = "put"; Methods["OPTIONS"] = "options"; })(Methods || (Methods = {})); const MethodDecoratorFactory = (method) => { return (path, ...middlewares) => { middlewares = (typeof middlewares === 'object' && Array.isArray(middlewares) === true) ? middlewares : []; return (target, propertyKey) => { if (!Reflect.hasMetadata('routes', target.constructor)) { Reflect.defineMetadata('routes', [], target.constructor); } const routes = Reflect.getMetadata('routes', target.constructor); routes.push({ requestMethod: method, path, methodName: propertyKey, middlewares: middlewares, }); Reflect.defineMetadata('routes', routes, target.constructor); }; }; }; exports.MethodDecoratorFactory = MethodDecoratorFactory; const Controller = (prefix = '', ...middlewares) => { return (target) => { middlewares = (typeof middlewares === 'object' && Array.isArray(middlewares) === true) ? middlewares : []; Reflect.defineMetadata('prefix', prefix, target); Reflect.defineMetadata('middlewares', middlewares, target); if (!Reflect.hasMetadata('routes', target)) { Reflect.defineMetadata('routes', [], target); } }; }; exports.Controller = Controller; exports.Get = (0, exports.MethodDecoratorFactory)(Methods.GET); exports.Post = (0, exports.MethodDecoratorFactory)(Methods.POST); exports.Put = (0, exports.MethodDecoratorFactory)(Methods.PUT); exports.Delete = (0, exports.MethodDecoratorFactory)(Methods.DELETE); exports.Options = (0, exports.MethodDecoratorFactory)(Methods.OPTIONS); const InitController = (app, controllers) => __awaiter(void 0, void 0, void 0, function* () { // console.log('> server.decorator.ts > InitController - app:: ', app); console.log('> server.decorator.ts > InitController - controllers:: ', controllers); for (let index = 0; index < controllers.length; index++) { const controller = controllers[index]; const instance = new controller(); const prefix = Reflect.getMetadata('prefix', controller); const middlewaresPrim = Reflect.getMetadata('middlewares', controller); const routes = Reflect.getMetadata('routes', controller); for (let index2 = 0; index2 < routes.length; index2++) { const route = routes[index2]; const finalRoute = path_1.default.join(prefix, route.path).split('\\').join('/'); // console.log('> server.decorator.ts > InitController - index:: ', index, ' - index2:: ', index2, ' - finalRoute:: ', finalRoute); app[route.requestMethod](finalRoute, ...middlewaresPrim, ...route.middlewares, (req, res, next) => { instance[route.methodName](req, res, next); }); } } }); exports.InitController = InitController; const HExpress = exports.serve; exports.default = HExpress; //# sourceMappingURL=hexpress.js.map