tsunamy
Version:
A new typesript framework
50 lines (49 loc) • 1.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
require("reflect-metadata");
var Injector_1 = require("../Injector");
var Router_1 = require("../Router");
var ModuleWithProviders = /** @class */ (function () {
function ModuleWithProviders() {
}
return ModuleWithProviders;
}());
var idVar = 0;
function TyModule(value) {
var injector;
return function (target) {
value.id = idVar.toString();
idVar++;
injector = new Injector_1.Injector();
if (value.declarations) {
value.declarations.map(function (declaration) {
var controllerInstance = injector.resolve(declaration);
Reflect.defineMetadata('moduleId', value.id, declaration);
addRoutes(controllerInstance, 'RequestMapping', null);
addRoutes(controllerInstance, 'GetMapping', 'GET');
addRoutes(controllerInstance, 'PostMapping', 'POST');
addRoutes(controllerInstance, 'PutMapping', 'PUT');
addRoutes(controllerInstance, 'DeleteMapping', 'DELETE');
});
}
};
}
exports.TyModule = TyModule;
function addRoutes(controllerInstance, metadataKey, method) {
var metadatas = Reflect.getMetadata('Controller', controllerInstance);
var controllerPath = '';
if (metadatas && metadatas.path) {
controllerPath = metadatas.path;
}
var routes = Reflect.getMetadata(metadataKey, controllerInstance) || [];
routes.map(function (route) {
Router_1.Router.add(buildPath(controllerPath, route.path), (method ? method : route.method), route.functionName, controllerInstance);
});
}
function buildPath(controllerPath, routePath) {
var routePathCalculated = '';
if (routePath && routePath !== '') {
routePathCalculated = routePath.startsWith('/') ? routePath : '/' + routePath;
}
return controllerPath + routePathCalculated;
}