mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-31 13:32:18 -04:00
fix(npm-resolver): pick lowest version with * from prerelease versions only
This commit is contained in:
5
.changeset/polite-buckets-watch.md
Normal file
5
.changeset/polite-buckets-watch.md
Normal 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.
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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')
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user