@oxog/port-terminator
Version:
Cross-platform utility to terminate processes on ports with zero dependencies
87 lines • 3.1 kB
JavaScript
;
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