UNPKG

@anyme/anymejs

Version:
97 lines (94 loc) 3.33 kB
'use strict'; var _tslib = require('../_virtual/_tslib.js'); var gracefulExit = require('../utils/graceful-exit.js'); var inversify = require('inversify'); var constants = require('../utils/constants.js'); exports.Anyme = class Anyme { config; logger; service; redis; dataSource; gracefulExit; constructor(config, logger, service, redis, dataSource) { this.config = config; this.logger = logger; this.service = service; this.redis = redis; this.dataSource = dataSource; this.gracefulExit = new gracefulExit.GracefulExit(this.logger); } async bootstrap(port) { try { await this.initialize(); const { port: prt, server, scheme } = await this.service.createServer(); await this.service.applySocket(server); server.listen(port ?? prt, () => { this.logger.info(`🚀 Server running on ${scheme}://localhost:${port ?? prt}`); }); this.gracefulExit.register(server, { healthCheck: { "/health": async () => ({ timestamp: new Date().toLocaleString(), }), }, }); return server; } catch (error) { this.logger.error("❌ Failed to start server:", error); throw error; } } async initialize() { try { await Promise.all([this.initDatabase(), this.initRedis()]); await this.service.applyLimiter(); await this.service.applySession(); await this.service.applySSE(); await this.service.applyRoute(); } catch (error) { this.logger.error("❌ Failed to initialize", error); throw error; } } async initDatabase() { try { const { db } = await this.config.get(); if (!db.enable) return; const result = await this.dataSource.connectAll(); if (result.length > 0) this.gracefulExit.addCleanupTask(() => this.dataSource.closeAll()); } catch (error) { this.logger.error("❌ Failed to connect to database", error); throw error; } } async initRedis() { try { const { redis } = await this.config.get(); if (!redis.enable) return; const result = await this.redis.connectAll(); if (result.length > 0) this.gracefulExit.addCleanupTask(() => this.redis.closeAll()); } catch (error) { this.logger.error("❌ Failed to init Redis", error); throw error; } } }; exports.Anyme = _tslib.__decorate([ inversify.injectable("Singleton"), _tslib.__param(0, inversify.inject(constants.SYMBOLS.Config)), _tslib.__param(1, inversify.inject(constants.SYMBOLS.Logger)), _tslib.__param(2, inversify.inject(constants.SYMBOLS.Service)), _tslib.__param(3, inversify.inject(constants.SYMBOLS.Redis)), _tslib.__param(4, inversify.inject(constants.SYMBOLS.DB)), _tslib.__metadata("design:paramtypes", [Object, Function, Function, Object, Object]) ], exports.Anyme); //# sourceMappingURL=app.js.map