UNPKG

@httpc/kit

Version:

httpc toolbox for building function-based API with minimal code and end-to-end type safety

68 lines (67 loc) 2.46 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Application = void 0; const assert_1 = __importDefault(require("assert")); const server_1 = require("@httpc/server"); const di_1 = require("./di"); const tsyringe_1 = require("tsyringe"); class Application { constructor(options) { this.options = options; this._isInitialized = false; this._server = undefined; this._logger = undefined; } get server() { (0, assert_1.default)(this._server, "Application not initialized"); return this._server; } get logger() { (0, assert_1.default)(this._logger, "Application not initialized"); return this._logger; } async initialize() { this._server = this._createServer(); await (0, di_1.initializeContainer)(); this._logger = (0, di_1.RESOLVE)(tsyringe_1.container, "ApplicationLogger"); this._isInitialized = true; } getHttpCRequestProcessor() { return this.server.getHttpCRequestProcessor(); } start(port) { (0, assert_1.default)(this._isInitialized, "Application not initialized"); return new Promise(resolve => { this.server.listen(port ?? this.options.port, resolve); const address = this.server.address(); const listening = typeof address === "string" ? address : address?.port; this.logger.info("Started: listening on %s", listening); }); } async stop(waitPending = false) { await new Promise((resolve, reject) => { if (waitPending) { this.logger.verbose("Stopping: wait for pending connection"); this.server.once("close", resolve); } this.server.close(err => { if (err) reject(err); else if (!waitPending) { resolve(); } }); }); this.logger.info("Stopped"); } _createServer() { return (0, server_1.createHttpCServer)({ ...this.options, log: false, // disable server logging, as it's handled by application services }); } } exports.Application = Application;