@oxog/port-terminator
Version:
Cross-platform utility to terminate processes on ports with zero dependencies
68 lines • 2.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validatePort = validatePort;
exports.validatePorts = validatePorts;
exports.validateTimeout = validateTimeout;
exports.parsePortRange = parsePortRange;
exports.isValidProtocol = isValidProtocol;
exports.normalizeProtocol = normalizeProtocol;
const errors_1 = require("../errors");
function validatePort(port) {
let portNum;
if (typeof port === 'string') {
// Check for decimal numbers in string
if (port.includes('.')) {
throw new errors_1.InvalidPortError(port);
}
portNum = parseInt(port, 10);
}
else {
portNum = port;
}
if (isNaN(portNum) || !isFinite(portNum)) {
throw new errors_1.InvalidPortError(port);
}
if (portNum < 1 || portNum > 65535) {
throw new errors_1.InvalidPortError(portNum);
}
return portNum;
}
function validatePorts(ports) {
return ports.map(validatePort);
}
function validateTimeout(timeout) {
if (timeout < 0 || !isFinite(timeout)) {
throw new Error(`Invalid timeout: ${timeout}. Timeout must be a positive number`);
}
return timeout;
}
function parsePortRange(range) {
const rangeParts = range.split('-');
if (rangeParts.length !== 2) {
throw new Error(`Invalid port range: ${range}. Expected format: start-end`);
}
const start = validatePort(rangeParts[0].trim());
const end = validatePort(rangeParts[1].trim());
if (start > end) {
throw new Error(`Invalid port range: ${range}. Start port must be less than or equal to end port`);
}
const ports = [];
for (let port = start; port <= end; port++) {
ports.push(port);
}
return ports;
}
function isValidProtocol(protocol) {
return ['tcp', 'udp', 'both'].includes(protocol.toLowerCase());
}
function normalizeProtocol(protocol) {
if (protocol === undefined || protocol === null) {
return 'both';
}
const normalized = protocol.toLowerCase();
if (!isValidProtocol(normalized)) {
throw new Error(`Invalid protocol: ${protocol}. Must be 'tcp', 'udp', or 'both'`);
}
return normalized;
}
//# sourceMappingURL=validators.js.map