dino-express
Version:
DinO enabled REST framework based on express
72 lines • 3.07 kB
JavaScript
"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