tedi
Version:
Express wrappper written in typescript with dependency injection capabilities
78 lines (77 loc) • 3.39 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("../core");
const decorators_1 = require("../decorators");
const winston_logger_1 = require("../logger/winston-logger");
const router_1 = require("../router");
const app_1 = require("./app");
let ExpressServer = class ExpressServer extends core_1.Module {
constructor() {
super();
// Define empty routing by default
this.setJsonRoutes({});
// Set default dependencies
this.dependencies(core_1.dependency("Server", { value: this }), core_1.dependency(app_1.EXPRESS_APP, { class: app_1.ExpressApp }), core_1.dependency(core_1.ROUTER, { class: router_1.TediRouter }), core_1.dependency(core_1.ROUTE_ACTIONS_BUILDER, { class: router_1.DefaultRouteActionsBuilder }), core_1.dependency(core_1.LOGGER, { class: winston_logger_1.WinstonLoggerFactory() }), core_1.dependency(core_1.CONFIG, { value: { port: 8080 } }));
}
setConfig(config) {
this.setDependency(core_1.dependency(core_1.CONFIG, { value: config }));
return this;
}
getConfig() {
return this.getDependency(core_1.CONFIG);
}
getLogger() {
return this.getDependency(core_1.LOGGER);
}
buildApp(app) {
if (!this._app) {
let jsonRoutes = this.getJsonRoutes();
let appBuilder = this.getDependency(app_1.EXPRESS_APP);
this._app = appBuilder.build(app, jsonRoutes, this);
}
return this._app;
}
getApp() {
return this._app;
}
run() {
let config = this.getConfig();
let logger = this.getLogger();
return new Promise((resolve, reject) => {
this._server = this.buildApp().listen(config.port, (error) => {
return error ? reject(error) : resolve(this._server);
});
}).then((httpServer) => {
logger.debug(`Server running on port: ${config.port}...`);
return this._server;
});
}
stop() {
let logger = this.getLogger();
return new Promise((resolve, reject) => {
if (!this._server) {
logger.debug("#stop called but no running server exists");
}
this._server.close((error) => {
return error ? reject(error) : resolve();
});
}).then(() => {
this._server = null;
logger.debug(`Server stopped`);
});
}
};
ExpressServer = __decorate([
decorators_1.Injectable(),
__metadata("design:paramtypes", [])
], ExpressServer);
exports.ExpressServer = ExpressServer;