From 8849cc8c37622b2a93cfd01d4fe73fbd12d1f594 Mon Sep 17 00:00:00 2001 From: Erick Zhao Date: Fri, 1 May 2026 16:06:13 -0700 Subject: [PATCH] fix: include prerelease versions in package manager version check --- .../api/cli/spec/util/check-system.spec.ts | 23 +++++++++++++++++++ packages/api/cli/src/util/check-system.ts | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/api/cli/spec/util/check-system.spec.ts b/packages/api/cli/spec/util/check-system.spec.ts index c31f15d27e..92f5d0458d 100644 --- a/packages/api/cli/spec/util/check-system.spec.ts +++ b/packages/api/cli/spec/util/check-system.spec.ts @@ -132,6 +132,29 @@ describe('checkPackageManager', () => { }, ); + it('should accept prerelease versions within the supported range', async () => { + vi.mocked(resolvePackageManager).mockResolvedValue({ + executable: 'pnpm', + install: 'add', + dev: '--dev', + exact: '--exact', + }); + vi.mocked(spawnPackageManager).mockImplementation((_pm, args) => { + if (args?.join(' ') === 'config get node-linker') { + return Promise.resolve('hoisted'); + } else if (args?.join(' ') === 'config get hoist-pattern') { + return Promise.resolve('undefined'); + } else if (args?.join(' ') === 'config get public-hoist-pattern') { + return Promise.resolve('undefined'); + } else if (args?.join(' ') === '--version') { + return Promise.resolve('11.0.0-beta.1'); + } else { + throw new Error('Unexpected command'); + } + }); + await expect(checkPackageManager()).resolves.not.toThrow(); + }); + // resolvePackageManager optionally returns a `version` if `npm_config_user_agent` was used to // resolve the package manager being used. it('should not shell out to child process if version was already parsed via npm_config_user_agent', async () => { diff --git a/packages/api/cli/src/util/check-system.ts b/packages/api/cli/src/util/check-system.ts index e2c70493f5..b812f9679f 100644 --- a/packages/api/cli/src/util/check-system.ts +++ b/packages/api/cli/src/util/check-system.ts @@ -119,7 +119,7 @@ export async function checkPackageManager() { `Could not check ${pm.executable} version "${version}", assuming incompatible`, ); } - if (!semver.satisfies(version, range)) { + if (!semver.satisfies(version, range, { includePrerelease: true })) { throw new Error( `Incompatible version of ${pm.executable} detected: "${version}" must be in range ${range}`, );