@bestcodetools/api-node-base
Version:
BestCodeTools Node Base for Backend API
84 lines • 2.76 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = __importDefault(require("assert"));
const externals_1 = require("../../../externals");
class HttpApp {
constructor(options = {}) {
this.internalListeningPort = null;
this.listening = false;
this.options = { ...options };
this.app = (0, externals_1.express)();
const jsonOptions = {
limit: '50mb',
...this.options.json,
};
const rawOptions = {
limit: '50mb',
...this.options.raw,
};
const urlencodedOptions = {
limit: '256kb',
extended: true,
...this.options.urlencoded,
};
const textOptions = {
limit: '50mb',
...this.options.text,
};
this.app.use(externals_1.express.json(jsonOptions));
this.app.use(externals_1.express.raw(rawOptions));
this.app.use(externals_1.express.urlencoded(urlencodedOptions));
this.app.use(externals_1.express.text(textOptions));
}
isListening() {
return this.listening;
}
get listeningPort() {
return this.internalListeningPort;
}
get rawApp() {
return this.app;
}
get rawServer() {
return this.server;
}
start() {
return new Promise((resolve, reject) => {
try {
if (this.server)
throw new Error('server.already.started');
const onListenCallback = () => {
const addressInfo = this.server.address();
this.internalListeningPort = addressInfo.port;
resolve(addressInfo);
};
this.server = this.options.port ? this.app.listen(this.options.port, onListenCallback) : this.app.listen(onListenCallback);
this.server.on('close', () => {
this.listening = false;
Object.assign(this, { server: null });
});
}
catch (error) {
reject(error);
}
}).then(() => {
this.listening = true;
});
}
async stop() {
if (!this.server) {
throw new Error('server.not.started');
}
const result = await new Promise((resolve) => {
this.server.close((error) => {
return resolve(error);
});
});
(0, assert_1.default)(!result, result);
}
}
exports.default = HttpApp;
//# sourceMappingURL=index.js.map