UNPKG

@oxog/port-terminator

Version:

Cross-platform utility to terminate processes on ports with zero dependencies

87 lines 3.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProcessFinder = void 0; const platform_1 = require("../utils/platform"); const windows_1 = require("../platforms/windows"); const macos_1 = require("../platforms/macos"); const linux_1 = require("../platforms/linux"); const errors_1 = require("../errors"); class ProcessFinder { constructor() { const platformName = (0, platform_1.getPlatform)(); switch (platformName) { case 'win32': this.platform = new windows_1.WindowsPlatform(); break; case 'darwin': this.platform = new macos_1.MacOSPlatform(); break; case 'linux': this.platform = new linux_1.LinuxPlatform(); break; default: throw new errors_1.PlatformError(platformName); } } async findByPort(port, protocol) { return this.platform.findProcessesByPort(port, protocol); } async findByPorts(ports, protocol) { const results = new Map(); await Promise.all(ports.map(async (port) => { try { const processes = await this.findByPort(port, protocol); results.set(port, processes); } catch (error) { results.set(port, []); } })); return results; } async isPortAvailable(port, protocol) { return this.platform.isPortAvailable(port, protocol); } async waitForPortToBeAvailable(port, timeout = 30000, protocol) { const checkInterval = 250; // Perform an initial check immediately let isAvailable = await this.isPortAvailable(port, protocol); if (isAvailable) { return true; } // If timeout is 0 and not immediately available, return false if (timeout === 0) { return false; } for (let i = 0; i < timeout / checkInterval; i++) { await new Promise((resolve) => setTimeout(resolve, checkInterval)); isAvailable = await this.isPortAvailable(port, protocol); if (isAvailable) { return true; } } return false; } async waitForPortToBeBusy(port, timeout = 30000, protocol) { const checkInterval = 250; // Perform an initial check immediately let isAvailable = await this.isPortAvailable(port, protocol); if (!isAvailable) { return true; } // If timeout is 0 and not immediately busy, return false if (timeout === 0) { return false; } for (let i = 0; i < timeout / checkInterval; i++) { await new Promise((resolve) => setTimeout(resolve, checkInterval)); isAvailable = await this.isPortAvailable(port, protocol); if (!isAvailable) { return true; } } return false; } } exports.ProcessFinder = ProcessFinder; //# sourceMappingURL=process-finder.js.map