lib/app/RouteInjector.js
"use strict";
/// <reference path='../../typings/index.d.ts'/>
var Bootstrapper = require("./internals/Bootstrapper");
('use strict');
var AuthManager = require("./internals/AuthManager");
var DBConnection = require("./internals/DBConnection");
var ModelsLoader = require("./internals/ModelsLoader");
var PluginRegistry = require("./internals/PluginRegistry");
var ExpressManager = require("./internals/ExpressManager");
var Configurations = require("./internals/Configurations");
var Logger = require("./internals/Logger");
var PageLoader = require("./internals/PageLoader");
var RouteInjector = /** @class */ (function () {
//private middlewareRegistry:MiddlewareRegistry;
function RouteInjector() {
this.version = require('../../package.json').version;
this.cache = { middlewares: {} };
this.printRouteInjectorHeader();
this.configurations = Configurations.instance();
this.pluginRegistry = PluginRegistry.create(this.configurations);
}
RouteInjector.prototype.start = function (callback) {
var _this = this;
this.setupDependencies();
this.dbConnection.connect(function () {
_this.modelsLoader.loadModels();
_this.earlyGlobalize();
_this.authManager.loadAuth();
_this.pluginRegistry.onAuthLoaded();
_this.pageLoader.loadPages();
_this.expressManager.buildServer(_this);
_this.bootstrapper.bootstrap();
_this.globalize();
_this.expressManager.bind(function () {
return callback();
});
});
};
RouteInjector.prototype.loadPlugin = function (pluginName, config) {
RouteInjector.logger.debug('Plugin %s is being loaded', pluginName);
this.pluginRegistry.addPlugin(pluginName, config);
};
//prettier-ignore
RouteInjector.prototype.printRouteInjectorHeader = function () {
RouteInjector.logger.info(" __________ __ ");
RouteInjector.logger.info(" \\______ \\ ____ __ ___/ |_ ____ ");
RouteInjector.logger.info(" | _// _ \\| | \\ __\\/ __ \\ ");
RouteInjector.logger.info(" | | ( <_> ) | /| | \\ ___/ ");
RouteInjector.logger.info(" |____|_ /\\____/|____/ |__| \\___ > ");
RouteInjector.logger.info(" \\/ \\/ ");
RouteInjector.logger.info(" .___ __ __ ");
RouteInjector.logger.info(" | | ____ |__| ____ _____/ |_ ___________ ");
RouteInjector.logger.info(" | |/ \\ | |/ __ \\_/ ___\\ __\\/ _ \\_ __ \\ ");
RouteInjector.logger.info(" | | | \\ | \\ ___/\\ \\___| | ( <_> ) | \\/ ");
RouteInjector.logger.info(" |___|___| /\\__| |\\___ >\\___ >__| \\____/|__| ");
RouteInjector.logger.info(" \\/\\______| \\/ \\/ ");
RouteInjector.logger.info("");
RouteInjector.logger.info("RouteInjector version: %s", this.version);
};
RouteInjector.prototype.setupDependencies = function () {
this.dbConnection = DBConnection.create(this.configurations);
this.pageLoader = PageLoader.create(this.configurations, this.pluginRegistry);
this.expressManager = ExpressManager.create(this.configurations, this.pluginRegistry, this.pageLoader);
this.modelsLoader = ModelsLoader.create(this.configurations, this.pluginRegistry);
this.authManager = AuthManager.create(this.configurations, this.modelsLoader);
this.bootstrapper = Bootstrapper.create(this);
};
Object.defineProperty(RouteInjector.prototype, "config", {
get: function () {
return this.configurations;
},
enumerable: true,
configurable: true
});
Object.defineProperty(RouteInjector.prototype, "internals", {
get: function () {
return {
express: this.expressManager.express,
};
},
enumerable: true,
configurable: true
});
Object.defineProperty(RouteInjector.prototype, "app", {
get: function () {
return this.expressManager.app;
},
enumerable: true,
configurable: true
});
Object.defineProperty(RouteInjector.prototype, "mongoose", {
get: function () {
return this.dbConnection.mongoose;
},
enumerable: true,
configurable: true
});
Object.defineProperty(RouteInjector.prototype, "security", {
get: function () {
return this.authManager;
},
set: function (security) {
this.authManager = security;
},
enumerable: true,
configurable: true
});
Object.defineProperty(RouteInjector.prototype, "models", {
get: function () {
return this.modelsLoader.models;
},
enumerable: true,
configurable: true
});
Object.defineProperty(RouteInjector.prototype, "log", {
get: function () {
return RouteInjector.logger;
},
enumerable: true,
configurable: true
});
Object.defineProperty(RouteInjector.prototype, "pages", {
get: function () {
return this.pageLoader.pages;
},
enumerable: true,
configurable: true
});
Object.defineProperty(RouteInjector.prototype, "plugins", {
get: function () {
return this.pluginRegistry.plugins;
},
enumerable: true,
configurable: true
});
RouteInjector.prototype.globalize = function () {
RouteInjector.logger.info('Make Globals:');
if (this.config.globals.express) {
RouteInjector.logger.info(' internals -> express');
global['express'] = this.internals.express;
}
if (this.config.globals.app) {
RouteInjector.logger.info(' app');
global['app'] = this.app;
}
if (this.config.globals.mongoose) {
RouteInjector.logger.info(' mongoose');
global['mongoose'] = this.mongoose;
}
if (this.config.globals.env) {
RouteInjector.logger.info(' env');
global['env'] = this.config.env;
}
if (this.config.globals.security) {
RouteInjector.logger.info(' security');
global['security'] = this.security;
}
};
RouteInjector.prototype.earlyGlobalize = function () {
RouteInjector.logger.info('Early make Globals:');
if (this.config.globals.logger) {
RouteInjector.logger.info(' log');
global['log'] = this.log;
}
if (this.config.globals.models) {
RouteInjector.logger.info(' models');
this.modelsLoader.forEachModel(function (Model) {
RouteInjector.logger.info(' ', Model.modelName);
global[Model.modelName] = Model;
});
}
};
RouteInjector.logger = Logger.getLogger();
return RouteInjector;
}());
module.exports = new RouteInjector();
//# sourceMappingURL=RouteInjector.js.map