UNPKG

tedi

Version:

Express wrappper written in typescript with dependency injection capabilities

78 lines (77 loc) 3.39 kB
"use strict"; 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;