@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
JavaScript
"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;