From 22dbacb100170a120425035a490068ca542e1426 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sun, 4 Apr 2021 22:59:24 +0300 Subject: [PATCH] fix: overrides should not fail on non-semver specs --- .../src/install/createVersionsOverrider.ts | 8 +++++-- .../install/createVersionOverrider.test.ts | 22 ++++++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/supi/src/install/createVersionsOverrider.ts b/packages/supi/src/install/createVersionsOverrider.ts index 7145409761..bd099b8db1 100644 --- a/packages/supi/src/install/createVersionsOverrider.ts +++ b/packages/supi/src/install/createVersionsOverrider.ts @@ -59,11 +59,15 @@ function overrideDepsOfPkg (pkg: PackageManifest, versionOverrides: VersionOverr function overrideDeps (versionOverrides: VersionOverride[], deps: Dependencies) { for (const versionOverride of versionOverrides) { + const actual = deps[versionOverride.wantedDependency.alias] if ( - deps[versionOverride.wantedDependency.alias] && + actual && ( !versionOverride.wantedDependency.pref || - semver.subset(deps[versionOverride.wantedDependency.alias], versionOverride.wantedDependency.pref) + actual === versionOverride.wantedDependency.pref || + semver.validRange(actual) != null && + semver.validRange(versionOverride.wantedDependency.pref) != null && + semver.subset(actual, versionOverride.wantedDependency.pref) ) ) { deps[versionOverride.wantedDependency.alias] = versionOverride.newPref diff --git a/packages/supi/test/install/createVersionOverrider.test.ts b/packages/supi/test/install/createVersionOverrider.test.ts index 4fefa7af0a..b4b5477e97 100644 --- a/packages/supi/test/install/createVersionOverrider.test.ts +++ b/packages/supi/test/install/createVersionOverrider.test.ts @@ -1,6 +1,6 @@ import createVersionsOverrider from 'supi/lib/install/createVersionsOverrider' -test('createVersionsOverrider()', () => { +test('createVersionsOverrider() matches subranges', () => { const overrider = createVersionsOverrider({ 'foo@2': '2.12.0', }) @@ -10,3 +10,23 @@ test('createVersionsOverrider()', () => { }) ).toStrictEqual({ dependencies: { foo: '2.12.0' } }) }) + +test('createVersionsOverrider() does not fail on non-range selectors', () => { + const overrider = createVersionsOverrider({ + 'foo@2': '2.12.0', + 'bar@github:org/bar': '2.12.0', + }) + expect( + overrider({ + dependencies: { + foo: 'github:org/foo', + bar: 'github:org/bar', + }, + }) + ).toStrictEqual({ + dependencies: { + foo: 'github:org/foo', + bar: '2.12.0', + }, + }) +})