UNPKG

dino-express

Version:

DinO enabled REST framework based on express

72 lines 3.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Server = void 0; const dino_core_1 = require("dino-core"); const FinalResponseMiddleware_1 = require("./middlewares/FinalResponseMiddleware"); const RequestAdaptor_1 = require("./request/RequestAdaptor"); const Response_1 = require("./Response"); class Server { runtimeContext; environment; applicationContext; intervalTimer; router; finalResponseHandler; requestAdaptor; async load(config, registrations = []) { this.applicationContext = await dino_core_1.Dino.run(config, registrations); this.environment = this.applicationContext.resolve('environment'); this.runtimeContext = this.applicationContext.resolve('dinoRuntimeContext'); this.requestAdaptor = new RequestAdaptor_1.RequestAdaptor(this.runtimeContext, this.environment, this.applicationContext); this.finalResponseHandler = new FinalResponseMiddleware_1.FinalResponseMiddleware(this.environment); if (this.runtimeContext.isEmbedded()) { this.intervalTimer = setInterval(this.discoverRouter.bind(this), 10); } return this.run.bind(this); } async run(req, res) { if (this.runtimeContext.isStandalone()) { // the context will be loaded and the express server will be started await Promise.resolve(); } else { return await this.handleServerlessMode(req, res); } } async handleServerlessMode(req, res) { return await new Promise((resolve, reject) => { let request = req; let response = res; if (this.runtimeContext.isRunningOnAwsLambda()) { request = this.requestAdaptor.adapt(req); response = new Response_1.ResponseImpl(resolve, request, this.runtimeContext); } if (dino_core_1.ObjectHelper.isDefined(this.router)) { dino_core_1.Logger.debug('router has already been initialized...'); this.router.handle(request, response, this.finalResponseHandler.handle(request, response, resolve, reject)); } else { dino_core_1.Logger.info('router not found initialize it...'); const resolver = () => { this.router = this.applicationContext.resolve('dinoApiRouter'); clearInterval(this.intervalTimer); this.router.handle(request, response, this.finalResponseHandler.handle(request, response, resolve, reject)); }; setTimeout(resolver.bind(this), 500); } }); } discoverRouter() { try { this.router = this.applicationContext.resolve('dinoApiRouter'); if (dino_core_1.ObjectHelper.isDefined(this.router)) { clearInterval(this.intervalTimer); } } catch (error) { // nothing to do } } } exports.Server = Server; //# sourceMappingURL=Server.js.map