diff --git a/scripts/dev-runner.mjs b/scripts/dev-runner.mjs index 60ea70b0963e3fa79cacd14eb6533c25cbbac6ab..8861c1b8378efc2b59f6745f084f437414d58422 100644 --- a/scripts/dev-runner.mjs +++ b/scripts/dev-runner.mjs @@ -260,7 +260,13 @@ export async function findFirstAvailableOffset({ }) { for (let candidate = startOffset; ; candidate += 1) { const { serverPort, webPort } = portPairForOffset(candidate); - if (serverPort > MAX_PORT || webPort > MAX_PORT) { + const serverPortOutOfRange = serverPort > MAX_PORT; + const webPortOutOfRange = webPort > MAX_PORT; + if ( + (requireServerPort && serverPortOutOfRange) || + (requireWebPort && webPortOutOfRange) || + (!requireServerPort && !requireWebPort && (serverPortOutOfRange || webPortOutOfRange)) + ) { break; } diff --git a/scripts/dev-runner.test.ts b/scripts/dev-runner.test.ts index a9944e1f49f3f795b6f0b5b13334d24f9b9d1a62..eafa3c8c8713ab1ab96c8e08ba2e7f779435b09b 100644 --- a/scripts/dev-runner.test.ts +++ b/scripts/dev-runner.test.ts @@ -149,6 +149,17 @@ describe("findFirstAvailableOffset", () => { expect(offset).toBe(2); }); + + it("allows offsets where only non-required ports exceed max", async () => { + const offset = await findFirstAvailableOffset({ + startOffset: 59_803, + requireServerPort: true, + requireWebPort: false, + checkPortAvailability: async () => true, + }); + + expect(offset).toBe(59_803); + }); }); describe("resolveModePortOffsets", () => {