UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

57 lines (55 loc) • 1.51 kB
let effect = require("effect"); let node_child_process = require("node:child_process"); //#region src/infra/port-ownership.ts let lsofCached = null; const execFileText = (path, args) => new Promise((resolve, reject) => { (0, node_child_process.execFile)(path, args, { timeout: 5e3 }, (error, stdout) => { if (error && !stdout) reject(error); else resolve(stdout); }); }); const isValidPort = (port) => Number.isInteger(port) && port > 0 && port <= 65535; const ownerOfPort = (port, options) => effect.Effect.callback((resume) => { (async () => { if (!isValidPort(port)) { resume(effect.Effect.succeed(null)); return; } const lsof = options?.lsofPath ?? "lsof"; try { const stdout = await execFileText(lsof, [ "-ti", `:${port}`, "-sTCP:LISTEN" ]); const pid = Number.parseInt(stdout.trim().split("\n")[0] ?? "", 10); if (!Number.isInteger(pid) || pid <= 0) { resume(effect.Effect.succeed(null)); return; } try { const psOut = await execFileText(options?.psPath ?? "ps", [ "-o", "command=", "-p", String(pid) ]); resume(effect.Effect.succeed({ pid, command: psOut.trim() || "unknown" })); } catch { resume(effect.Effect.succeed({ pid, command: "unknown" })); } } catch (error) { if (error.code === "ENOENT") lsofCached = false; resume(effect.Effect.succeed(null)); } })(); }); //#endregion exports.ownerOfPort = ownerOfPort; //# sourceMappingURL=port-ownership.cjs.map