UNPKG

@nx/web

Version:

The Nx Plugin for Web Components contains generators for managing Web Component applications and libraries within an Nx workspace. It provides: - Integration with libraries such as Jest, Playwright, Cypress, and Storybook. - Scaffolding for creating bu

45 lines (44 loc) 1.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.waitForPortOpen = waitForPortOpen; const devkit_1 = require("@nx/devkit"); const net = require("net"); function waitForPortOpen(port, options = {}) { const host = options.host ?? '127.0.0.1'; const allowedErrorCodes = ['ECONNREFUSED', 'ECONNRESET', 'ETIMEDOUT']; return new Promise((resolve, reject) => { const checkPort = (retries = options.retries ?? 120) => { const client = new net.Socket(); const cleanupClient = () => { client.removeAllListeners('connect'); client.removeAllListeners('error'); client.end(); client.destroy(); client.unref(); }; client.once('connect', () => { cleanupClient(); resolve(); }); client.once('error', (err) => { if (retries === 0 || !allowedErrorCodes.includes(err['code'])) { if (process.env['NX_VERBOSE_LOGGING'] === 'true') { devkit_1.logger.info(`Error connecting on ${host}:${port}: ${err['code'] || err}`); } cleanupClient(); reject(err); } else { setTimeout(() => checkPort(retries - 1), options.retryDelay ?? 1000); } }); // Node will use IPv6 if it is available, but this can cause issues if the server is only listening on IPv4. // Hard-coding to look on 127.0.0.1 to avoid using the IPv6 loopback address "::1". if (process.env['NX_VERBOSE_LOGGING'] === 'true') { devkit_1.logger.info(`Connecting on ${host}:${port}`); } client.connect({ port, host }); }; checkPort(); }); }