appolo
Version:
nodejs server framework
66 lines • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Router = void 0;
const appolo_agent_1 = require("appolo-agent");
const IMiddleware_1 = require("../interfaces/IMiddleware");
const invokeActionMiddleware_1 = require("./invokeActionMiddleware");
const util_1 = require("../util/util");
class Router {
constructor(_env, _injector, _options, _agent) {
this._env = _env;
this._injector = _injector;
this._options = _options;
this._agent = _agent;
this.controllerSuffix = 'Controller';
this.actionSuffix = 'Action';
this._isInitialize = false;
this._routes = [];
}
initialize() {
this._isInitialize = true;
this._routes.forEach(route => this._initRoute(route));
}
getRoute(path, method) {
return this._routes.find(route => route.definition.path.includes(path) && route.definition.method.includes(method));
}
addRoute(route) {
this._routes.push(route);
if (this._isInitialize) {
setImmediate(() => this._initRoute(route));
}
}
_initRoute(route) {
let def = route.definition;
if (def.$initialized) {
return;
}
def.$initialized = true;
//check if we have valid path
if (!def.path.length || !def.action || (def.environments.length && def.environments.indexOf(this._env.name || this._env.type) == -1)) {
return;
}
def.controllerName = def.controller.replace(this.controllerSuffix, '');
def.definition = this._injector.getDefinition(def.controller);
let middewares = util_1.Util.convertMiddleware(def.middleware, IMiddleware_1.MiddlewareType.MiddleWare).concat(util_1.Util.convertMiddleware(def.middlewareError, IMiddleware_1.MiddlewareType.Error));
if (def.gzip || def.statusCode || def.headers.length || def.customRouteFn.length) {
middewares.unshift(invokeActionMiddleware_1.invokeCustomRouteMiddleWare);
}
// if (!_.isEmpty(def.validations)) {
// middewares.unshift(checkValidationMiddleware);
// }
middewares.push(invokeActionMiddleware_1.invokeActionMiddleware);
let hooks = {};
Object.keys(def.hooks || {}).forEach(key => {
let hook = def.hooks[key];
hooks[key] = util_1.Util.convertMiddlewareHooks(key, hook);
});
for (let i = 0, len = def.path.length; i < len; i++) {
this._agent.add(def.method[i] || appolo_agent_1.Methods.GET, def.path[i], middewares, def, hooks);
}
}
reset() {
this._routes.length = 0;
}
}
exports.Router = Router;
//# sourceMappingURL=router.js.map