feat: add getRandomAvailablePort function and update tests

This commit is contained in:
tone
2025-10-15 16:00:59 +08:00
parent ab288c24aa
commit 6fbba3f4c6
2 changed files with 35 additions and 2 deletions

View File

@@ -14,4 +14,31 @@ export type ToDeepPromise<T> = {
: T[K] extends object
? ToDeepPromise<T[K]>
: T[K]
};
};
export async function getRandomAvailablePort() {
const { createServer } = await import('http');
const server = createServer();
return new Promise((resolve, reject) => {
server.on('listening', () => {
const address = server.address();
if (address && isObject(address)) {
const port = address.port;
server.close(() => {
resolve(port);
})
} else {
server.close();
reject(new Error('Failed to get port'));
}
});
server.on('error', (err) => {
server.close();
reject(err);
});
server.listen(0);
})
}