Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support clearLockedPorts #70

Merged
merged 12 commits into from
Mar 20, 2024
5 changes: 5 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,8 @@ console.log(await getPort({port: portNumbers(3000, 3100)}));
```
*/
export function portNumbers(from: number, to: number): Iterable<number>;

/**
Clear the internal cache of locked ports.
*/
nanianlisao marked this conversation as resolved.
Show resolved Hide resolved
nanianlisao marked this conversation as resolved.
Show resolved Hide resolved
nanianlisao marked this conversation as resolved.
Show resolved Hide resolved
export function clearLockedPorts(): void;
5 changes: 5 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -178,3 +178,8 @@ export function portNumbers(from, to) {

return generator(from, to);
}

export function clearLockedPorts() {
lockedPorts.old.clear();
lockedPorts.young.clear();
}
17 changes: 16 additions & 1 deletion test.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {promisify} from 'node:util';
import net from 'node:net';
import test from 'ava';
import getPort, {portNumbers} from './index.js';
import getPort, {portNumbers, clearLockedPorts} from './index.js';

test('port can be bound when promise resolves', async t => {
const port = await getPort();
Expand Down Expand Up @@ -193,3 +193,18 @@ test('preferred ports is bound up with different hosts', async t => {

t.is(port, desiredPorts[3]);
});

test('clear locked ports by lockedPorts', async t => {
nanianlisao marked this conversation as resolved.
Show resolved Hide resolved
const desiredPort = 8088;
const port1 = await getPort({port: desiredPort});
t.is(port1, desiredPort);

const port2 = await getPort({port: desiredPort});
// Port1 is locked
t.not(port2, desiredPort);

// Clear locked ports
clearLockedPorts();
const port3 = await getPort({port: desiredPort});
t.is(port3, desiredPort);
});