diff --git a/.changeset/big-carrots-raise.md b/.changeset/big-carrots-raise.md new file mode 100644 index 0000000000..1f3d212836 --- /dev/null +++ b/.changeset/big-carrots-raise.md @@ -0,0 +1,6 @@ +--- +"@pnpm/package-requester": patch +"pnpm": patch +--- + +Don't fail when the version of a package in the store is not a semver version. diff --git a/packages/package-requester/src/equalOrSemverEqual.ts b/packages/package-requester/src/equalOrSemverEqual.ts new file mode 100644 index 0000000000..a96561e7a0 --- /dev/null +++ b/packages/package-requester/src/equalOrSemverEqual.ts @@ -0,0 +1,10 @@ +import semver from 'semver' + +export default function equalOrSemverEqual (version1: string, version2: string): boolean { + if (version1 === version2) return true + try { + return semver.eq(version1, version2, { loose: true }) + } catch (err) { + return false + } +} diff --git a/packages/package-requester/src/packageRequester.ts b/packages/package-requester/src/packageRequester.ts index f46a166d0b..de3d8ef699 100644 --- a/packages/package-requester/src/packageRequester.ts +++ b/packages/package-requester/src/packageRequester.ts @@ -47,6 +47,7 @@ import pick from 'ramda/src/pick' import renameOverwrite from 'rename-overwrite' import semver from 'semver' import ssri from 'ssri' +import equalOrSemverEqual from './equalOrSemverEqual' import safeDeferredPromise from './safeDeferredPromise' const TARBALL_INTEGRITY_FILENAME = 'tarball-integrity' @@ -446,7 +447,7 @@ function fetchToStore ( // So it may happen that the version will be in different formats. // For instance, v1.0.0 and 1.0.0 // Hence, we need to use semver.eq() to compare them. - !semver.eq(pkgFilesIndex.version, opts.pkg.version, { loose: true }) + !equalOrSemverEqual(pkgFilesIndex.version, opts.pkg.version) ) ) { /* eslint-disable @typescript-eslint/restrict-template-expressions */ diff --git a/packages/package-requester/test/equalOrSemverEqual.test.ts b/packages/package-requester/test/equalOrSemverEqual.test.ts new file mode 100644 index 0000000000..8003e45e91 --- /dev/null +++ b/packages/package-requester/test/equalOrSemverEqual.test.ts @@ -0,0 +1,7 @@ +import equalOrSemverEqual from '@pnpm/package-requester/lib/equalOrSemverEqual' + +test('equalOrSemverEqual()', () => { + expect(equalOrSemverEqual('a', 'a')).toBeTruthy() + expect(equalOrSemverEqual('a', 'b')).toBeFalsy() + expect(equalOrSemverEqual('1.0.0', 'v1.0.0')).toBeTruthy() +})