@hv-kit/hexpress
Version:
facilitates typescript backend development with express
92 lines • 4.69 kB
JavaScript
;
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