New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@teambit/toolbox.network.get-port

Package Overview
Dependencies
Maintainers
15
Versions
122
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@teambit/toolbox.network.get-port - npm Package Compare versions

Comparing version 1.0.8 to 1.0.9

227

dist/get-port.js
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Port = void 0;
function _net() {
const data = _interopRequireDefault(require("net"));
_net = function () {
return data;
};
return data;
}
function _locked() {
const data = require("./locked");
_locked = function () {
return data;
};
return data;
}
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/* eslint-disable no-use-before-define */
// based on : https://github.com/sindresorhus/get-port/blob/main/index.js
const net_1 = __importDefault(require("net"));
const locked_1 = require("./locked");
class Port {
get(options) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const lockedPorts = {
old: new Set(),
young: new Set(),
};
const portCheckSequence = function* (ports) {
if (ports) {
yield* ports;
}
yield 0;
};
let ports;
const releaseOldLockedPortsIntervalMs = 1000 * 15;
// Lazily create interval on first use
let interval;
if (options) {
ports = typeof options.port === 'number' ? [options.port] : options.port;
}
if (interval === undefined) {
interval = setInterval(() => {
lockedPorts.old = lockedPorts.young;
lockedPorts.young = new Set();
}, releaseOldLockedPortsIntervalMs);
// Does not exist in some environments (Electron, Jest jsdom env, browser, etc).
if (interval.unref) {
interval.unref();
}
}
for (const port of portCheckSequence(ports)) {
try {
if ((_a = options.usedPort) === null || _a === void 0 ? void 0 : _a.includes(port))
throw new locked_1.Locked(port);
let availablePort = yield this.getAvailablePort(Object.assign(Object.assign({}, options), { port })); // eslint-disable-line no-await-in-loop
while (lockedPorts.old.has(availablePort) || lockedPorts.young.has(availablePort)) {
if (port !== 0) {
throw new locked_1.Locked(port);
}
availablePort = yield this.getAvailablePort(Object.assign(Object.assign({}, options), { port })); // eslint-disable-line no-await-in-loop
}
lockedPorts.young.add(availablePort);
return availablePort;
}
catch (error) {
if (!['EADDRINUSE', 'EACCES'].includes(error.code) && !(error instanceof locked_1.Locked)) {
throw error;
}
}
}
throw new Error('No available ports found');
});
async get(options) {
const lockedPorts = {
old: new Set(),
young: new Set()
};
const portCheckSequence = function* (ports) {
if (ports) {
yield* ports;
}
yield 0;
};
let ports;
const releaseOldLockedPortsIntervalMs = 1000 * 15;
// Lazily create interval on first use
let interval;
if (options) {
ports = typeof options.port === 'number' ? [options.port] : options.port;
}
getAvailablePort(options) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
const server = net_1.default.createServer();
server.unref();
server.on('error', reject);
server.listen(options, () => {
const serverInfo = server.address();
server.close(() => {
// @ts-ignore
resolve(serverInfo === null || serverInfo === void 0 ? void 0 : serverInfo.port);
});
});
});
});
if (interval === undefined) {
interval = setInterval(() => {
lockedPorts.old = lockedPorts.young;
lockedPorts.young = new Set();
}, releaseOldLockedPortsIntervalMs);
// Does not exist in some environments (Electron, Jest jsdom env, browser, etc).
if (interval.unref) {
interval.unref();
}
}
makeRange(from, to) {
if (!Number.isInteger(from) || !Number.isInteger(to)) {
throw new TypeError('`from` and `to` must be integer numbers');
for (const port of portCheckSequence(ports)) {
try {
if (options.usedPort?.includes(port)) throw new (_locked().Locked)(port);
let availablePort = await this.getAvailablePort({
...options,
port
}); // eslint-disable-line no-await-in-loop
while (lockedPorts.old.has(availablePort) || lockedPorts.young.has(availablePort)) {
if (port !== 0) {
throw new (_locked().Locked)(port);
}
availablePort = await this.getAvailablePort({
...options,
port
}); // eslint-disable-line no-await-in-loop
}
if (from < 1024 || from > 65535) {
throw new RangeError('`from` must be between 1024 and 65535');
lockedPorts.young.add(availablePort);
return availablePort;
} catch (error) {
if (!['EADDRINUSE', 'EACCES'].includes(error.code) && !(error instanceof _locked().Locked)) {
throw error;
}
if (to < 1024 || to > 65536) {
throw new RangeError('`to` must be between 1024 and 65536');
}
if (to < from) {
throw new RangeError('`to` must be greater than or equal to `from`');
}
const generator = function* (f, t) {
for (let port = f; port <= t; port += 1) {
yield port;
}
};
return generator(from, to);
}
}
static getPort(from, to, usedPort) {
const port = new Port();
const range = port.makeRange(from, to);
return port.get({ port: range, usedPort });
throw new Error('No available ports found');
}
async getAvailablePort(options) {
return new Promise((resolve, reject) => {
const server = _net().default.createServer();
server.unref();
server.on('error', reject);
server.listen(options, () => {
const serverInfo = server.address();
server.close(() => {
// @ts-ignore
resolve(serverInfo?.port);
});
});
});
}
makeRange(from, to) {
if (!Number.isInteger(from) || !Number.isInteger(to)) {
throw new TypeError('`from` and `to` must be integer numbers');
}
static getPortFromRange(range, usedPort) {
const port = new Port();
const portsRange = typeof range === 'number' ? [range] : port.makeRange(range[0], range[1]);
return port.get({ port: portsRange, usedPort });
if (from < 1024 || from > 65535) {
throw new RangeError('`from` must be between 1024 and 65535');
}
if (to < 1024 || to > 65536) {
throw new RangeError('`to` must be between 1024 and 65536');
}
if (to < from) {
throw new RangeError('`to` must be greater than or equal to `from`');
}
const generator = function* (f, t) {
for (let port = f; port <= t; port += 1) {
yield port;
}
};
return generator(from, to);
}
static getPort(from, to, usedPort) {
const port = new Port();
const range = port.makeRange(from, to);
return port.get({
port: range,
usedPort
});
}
static getPortFromRange(range, usedPort) {
const port = new Port();
const portsRange = typeof range === 'number' ? [range] : port.makeRange(range[0], range[1]);
return port.get({
port: portsRange,
usedPort
});
}
}
exports.Port = Port;
//# sourceMappingURL=get-port.js.map
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const chai_1 = require("chai");
const get_port_1 = require("./get-port");
function _chai() {
const data = require("chai");
_chai = function () {
return data;
};
return data;
}
function _getPort() {
const data = require("./get-port");
_getPort = function () {
return data;
};
return data;
}
describe('Get port', () => {
it('it should return port from range', () => __awaiter(void 0, void 0, void 0, function* () {
const port = yield get_port_1.Port.getPort(3100, 3200);
(0, chai_1.expect)(typeof port).to.equal('number');
}));
it('it should return port', () => __awaiter(void 0, void 0, void 0, function* () {
const port = yield get_port_1.Port.getPort(3300, 3400);
(0, chai_1.expect)(port).to.equal(3300);
}));
it('it should return port', () => __awaiter(void 0, void 0, void 0, function* () {
const port = yield get_port_1.Port.getPort(3500, 3600, [3500, 3501]);
(0, chai_1.expect)(port).to.equal(3502);
}));
it('it should return port from range', () => __awaiter(void 0, void 0, void 0, function* () {
const port = yield get_port_1.Port.getPortFromRange([7005, 7100]);
(0, chai_1.expect)(port).to.equal(7005);
}));
it('it should return port from range', async () => {
const port = await _getPort().Port.getPort(3100, 3200);
(0, _chai().expect)(typeof port).to.equal('number');
});
it('it should return port', async () => {
const port = await _getPort().Port.getPort(3300, 3400);
(0, _chai().expect)(port).to.equal(3300);
});
it('it should return port', async () => {
const port = await _getPort().Port.getPort(3500, 3600, [3500, 3501]);
(0, _chai().expect)(port).to.equal(3502);
});
it('it should return port from range', async () => {
const port = await _getPort().Port.getPortFromRange([7005, 7100]);
(0, _chai().expect)(port).to.equal(7005);
});
});
//# sourceMappingURL=get-port.spec.js.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Port = void 0;
const get_port_1 = require("./get-port");
Object.defineProperty(exports, "Port", { enumerable: true, get: function () { return get_port_1.Port; } });
exports.default = get_port_1.Port;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "Port", {
enumerable: true,
get: function () {
return _getPort().Port;
}
});
exports.default = void 0;
function _getPort() {
const data = require("./get-port");
_getPort = function () {
return data;
};
return data;
}
var _default = exports.default = _getPort().Port;
//# sourceMappingURL=index.js.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Locked = void 0;
class Locked extends Error {
constructor(port) {
super(`${port} is locked`);
}
constructor(port) {
super(`${port} is locked`);
}
}
exports.Locked = Locked;
//# sourceMappingURL=locked.js.map
{
"name": "@teambit/toolbox.network.get-port",
"version": "1.0.8",
"version": "1.0.9",
"homepage": "https://bit.cloud/teambit/toolbox/network/get-port",

@@ -9,3 +9,3 @@ "main": "dist/index.js",

"name": "network/get-port",
"version": "1.0.8"
"version": "1.0.9"
},

@@ -17,4 +17,3 @@ "dependencies": {},

"@types/mocha": "9.1.0",
"@types/jest": "26.0.20",
"@types/node": "22.10.5"
"@teambit/node.envs.node-babel-mocha": "0.1.4"
},

@@ -21,0 +20,0 @@ "peerDependencies": {},

@@ -8,8 +8,8 @@ declare module '*.png' {

export const ReactComponent: FunctionComponent<SVGProps<SVGSVGElement> & { title?: string }>;
export const ReactComponent: FunctionComponent<
SVGProps<SVGSVGElement> & { title?: string }
>;
const src: string;
export default src;
}
// @TODO Gilad
declare module '*.jpg' {

@@ -31,1 +31,13 @@ const value: any;

}
declare module '*.otf' {
const value: any;
export = value;
}
declare module '*.woff' {
const value: any;
export = value;
}
declare module '*.woff2' {
const value: any;
export = value;
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc