base-nestjs-app
Version:
Nestjs wrapper for creation of standarized apps
50 lines • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.listen = listen;
const net_1 = require("net");
const DEFAULT_PORT = 3000;
async function getUnusedPortOtherThan(mainPort) {
const servers = [];
let port = 0;
do {
const server = (0, net_1.createServer)();
await new Promise((resolve, reject) => {
server.on('error', reject);
server.listen(0, () => {
servers.push(server);
const address = server.address();
if (address && typeof address === 'object') {
const serverPort = address.port;
if (serverPort !== mainPort)
port = serverPort;
}
else {
reject(new Error('Could not get server address'));
}
resolve();
});
});
} while (!port || port === mainPort);
servers.forEach((server) => server.close());
return port;
}
async function listen(app, options) {
const mainPort = options.server?.port ?? DEFAULT_PORT;
if (options.microservices?.length) {
for (const ms of app.getMicroservices()) {
if ('serverInstance' in ms &&
typeof ms.serverInstance === 'object' &&
ms.serverInstance &&
'port' in ms.serverInstance &&
ms.serverInstance.port === mainPort) {
ms.serverInstance.port = await getUnusedPortOtherThan(mainPort);
options.loggingModule.logger.warn(`Microservice port conflicted with main server port. Changed microservice port to ${ms.serverInstance.port}`);
}
}
await app.startAllMicroservices();
}
await app.listen(mainPort, '0.0.0.0');
options.loggingModule.logger.info(`Listening on ${await app.getUrl()}`);
return app;
}
//# sourceMappingURL=listen.js.map