fix(npm-resolver): pick lowest version with * from prerelease versions only

This commit is contained in:
Zoltan Kochan
2023-02-05 12:23:01 +02:00
parent 11886f4c26
commit 65563ae098
3 changed files with 41 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
---
"@pnpm/npm-resolver": patch
---
Return the lowest version when `pickLowestVersion` is `true` and the only versions in the metadata are prerelease versions.

View File

@@ -62,6 +62,9 @@ export function pickLowestVersionByVersionRange (
meta: PackageMeta,
versionRange: string
) {
if (versionRange === '*') {
return Object.keys(meta.versions).sort(semver.compare)[0]
}
return semver.minSatisfying(Object.keys(meta.versions), versionRange, true)
}

View File

@@ -1794,3 +1794,36 @@ test('resolveFromNpm() should normalize the registry', async () => {
expect(resolveResult!.manifest!.name).toBe('is-positive')
expect(resolveResult!.manifest!.version).toBe('1.0.0')
})
test('pick lowest version by * when there are only prerelease versions', async () => {
nock(registry)
.get('/is-positive')
.reply(200, {
versions: {
'1.0.0-alpha.1': {
name: 'is-positive',
version: '1.0.0-alpha.1',
dist: {
tarball: 'https://registry.npmjs.org/is-positive/-/is-positive-1.0.0-alpha.1.tgz',
},
},
},
'dist-tags': {
latest: '1.0.0-alpha.1',
},
})
const cacheDir = tempy.directory()
const resolve = createResolveFromNpm({
cacheDir,
})
const resolveResult = await resolve({ alias: 'is-positive', pref: '*' }, {
pickLowestVersion: true,
registry,
})
expect(resolveResult!.resolvedVia).toBe('npm-registry')
expect(resolveResult!.id).toBe('registry.npmjs.org/is-positive/1.0.0-alpha.1')
expect(resolveResult!.manifest!.name).toBe('is-positive')
expect(resolveResult!.manifest!.version).toBe('1.0.0-alpha.1')
})