alapa
Version:
A cutting-edge web development framework designed to revolutionize the way developers build modern web applications.
103 lines (102 loc) • 3.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.startServer = startServer;
/* eslint-disable @typescript-eslint/no-explicit-any */
const globals_1 = require("../../shared/globals");
const http_1 = __importDefault(require("http"));
const express_1 = __importDefault(require("express"));
const utils_1 = require("../../utils");
const app = (0, express_1.default)();
const server = http_1.default.createServer(app);
async function startServer() {
let port = globals_1.GlobalConfig.server.port;
const host = globals_1.GlobalConfig.server.host;
process.on("uncaughtException", async (err) => {
utils_1.Logger.error(`Error binding to port ${port}: ${err?.message}`);
if (err) {
if (err.code === "EADDRINUSE") {
if (port) {
utils_1.Logger.info(`Port ${port} is in use, trying a different port...`);
port += 1;
// // Attempt to listen on a new port (you can specify your logic)
// server.listen(port + 1);
try {
setTimeout(async () => {
const { host, port } = await startServer();
return { host, port, server, app }; // Return values if restarted
}, 4000);
}
catch (error) {
utils_1.Logger.log(`Error killing port ${port}: ${error}`);
process.exit(1);
}
}
}
else {
console.error("Server error:", err);
}
}
else {
console.log(`Server running on port ${port}`);
}
});
// Ensure that port is available
//// eslint-disable-next-line @typescript-eslint/no-explicit-any
// process.on("uncaughtException", async (err: any) => {
// if (err.code === "EADDRINUSE") {
//
// } else {
// Logger.error("Server error:", err);
// process.exit(1);
// }
// });
const updatePort = (server) => {
const address = server?.address();
if (address && typeof address !== "string") {
port = address.port;
}
};
if (host && typeof port === "number") {
return new Promise((resolve) => {
server.listen(port, host, (err) => {
if (err) {
// handlerPortError(err, port);
}
else {
updatePort(server);
utils_1.Logger.info(`Server started at http://${host}:${port}`);
resolve({ host, port, server, app });
}
});
});
}
if (typeof port === "number") {
return new Promise((resolve) => {
server.listen(port, (err) => {
if (err) {
// handlerPortError(err, port);
}
else {
utils_1.Logger.info(`Server started at port ${port}`);
updatePort(server);
resolve({ host: undefined, port, server, app });
}
});
});
}
return new Promise((resolve) => {
server.listen((err) => {
if (err) {
utils_1.Logger.error(err);
}
else {
utils_1.Logger.info(`Server started`);
updatePort(server);
resolve({ host: undefined, port: port, server, app }); // Default host and port if none specified
}
});
});
}