UNPKG

@amirmarmul/waba-common

Version:

![GitHub release](https://img.shields.io/github/v/release/amirmarmul/waba-common?style=flat-square)

74 lines (73 loc) 3.28 kB
"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;