@amirmarmul/waba-common
Version:

74 lines (73 loc) • 3.28 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.App = void 0;
const express_1 = __importDefault(require("express"));
const helmet_1 = __importDefault(require("helmet"));
const cors_1 = __importDefault(require("cors"));
require("express-async-errors");
const Container_1 = require("../../../core/infrastructure/Container");
const Controller_1 = require("../../../core/infrastructure/Controller");
const loggerMiddleware_1 = require("../../../core/infrastructure/http/middleware/loggerMiddleware");
const routeNotFoundMiddleware_1 = require("../../../core/infrastructure/http/middleware/routeNotFoundMiddleware");
const errorMiddleware_1 = require("../../../core/infrastructure/http/middleware/errorMiddleware");
const alwaysAcceptJsonMiddleware_1 = require("../../../core/infrastructure/http/middleware/alwaysAcceptJsonMiddleware");
const HealthController_1 = __importDefault(require("../../../core/modules/health/useCases/health/HealthController"));
const DetailController_1 = __importDefault(require("../../../core/modules/service/useCases/detail/DetailController"));
class App {
app = (0, express_1.default)();
controllers = [];
constructor(controllers, options = {}) {
this.registerMiddleware();
this.registerHealthHandlers(options.health);
this.registerDetailControllers();
this.registerControllers([...this.controllers, ...controllers]);
this.registerErrorHandlers();
}
start() {
this.app.listen(3000, () => {
console.info('App listening @', 3000);
});
}
registerMiddleware() {
this.app.disable('x-powered-by');
this.app.use(loggerMiddleware_1.loggerMiddleware);
this.app.use(alwaysAcceptJsonMiddleware_1.alwaysAcceptJsonMiddleware);
this.app.use((0, cors_1.default)({ origin: '*' }));
// this.app.use(compression());
this.app.use((0, helmet_1.default)());
this.app.use(express_1.default.json({ limit: '2048mb' }));
this.app.use(express_1.default.urlencoded({ limit: '2048mb', extended: true }));
}
registerControllers(controllers) {
controllers.forEach((controller) => {
const instance = this.resolve(controller);
this.app.use('/', instance.router);
});
}
resolve(klass) {
if (klass instanceof Controller_1.Controller) {
return klass;
}
return Container_1.Container.get(klass);
}
registerHealthHandlers(health) {
Container_1.Container.set('health', health);
if (!Container_1.Container.has('HealthController')) {
this.controllers.push(HealthController_1.default);
return;
}
const healthController = Container_1.Container.get('HealthController');
this.controllers.push(healthController);
}
registerDetailControllers() {
this.controllers.push(DetailController_1.default);
}
registerErrorHandlers() {
this.app.use(routeNotFoundMiddleware_1.routeNotFoundMiddleware);
this.app.use(errorMiddleware_1.errorMiddleware);
}
}
exports.App = App;