Skip to content

Commit f6ca708

Browse files
committed
util: Expose LocalBrowser.findAvailablePort() utility
1 parent 5119002 commit f6ca708

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

src/safari.js

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,6 @@ async function delay (wait) {
66
await new Promise(resolve => setTimeout(resolve, wait));
77
}
88

9-
async function findAvailablePort () {
10-
const net = await import('node:net');
11-
return new Promise((resolve, _reject) => {
12-
const srv = net.createServer();
13-
srv.listen(0, () => {
14-
// @ts-ignore - Not null after listen()
15-
const port = srv.address().port;
16-
srv.close(() => resolve(port));
17-
});
18-
});
19-
}
20-
219
async function launchSafariDriver (bin, port, signals, logger) {
2210
try {
2311
// Use the global signal here since the process may be shared by multiple instances
@@ -67,7 +55,7 @@ async function safari (url, signals, logger) {
6755
if (process.platform !== 'darwin' || !safaridriverBin) {
6856
throw new CommandNotFoundError('Safari requires macOS and safaridriver');
6957
}
70-
sharedSafariDriverPort = findAvailablePort();
58+
sharedSafariDriverPort = LocalBrowser.findAvailablePort();
7159
launchSafariDriver(safaridriverBin, await sharedSafariDriverPort, signals, logger);
7260
} else {
7361
// This is not an optimization. Safari can only be claimed by one safaridriver.

src/util.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,21 @@ export class BrowserStopSignal extends Error {}
9494
export class BrowserConnectTimeout extends Error {}
9595

9696
export const LocalBrowser = {
97+
/**
98+
* @return {Promise<number>}
99+
*/
100+
async findAvailablePort () {
101+
const net = await import('node:net');
102+
return new Promise((resolve, _reject) => {
103+
const srv = net.createServer();
104+
srv.listen(0, () => {
105+
// @ts-ignore - Not null after listen()
106+
const port = srv.address().port;
107+
srv.close(() => resolve(port));
108+
});
109+
});
110+
},
111+
97112
/**
98113
* @param {string|Array<string|null>|Generator<string|null|undefined>} paths
99114
* Path to an executable command or an iterable list of candidate paths to

0 commit comments

Comments
 (0)