From 8b8d7767bc48f5214b308a34ac6685b79ff7c10d Mon Sep 17 00:00:00 2001
From: Sergei Zharinov <zharinov@users.noreply.github.com>
Date: Mon, 19 Apr 2021 20:15:46 +0400
Subject: [PATCH] fix(npm): Widen range only if necessary (#9630)

---
 lib/versioning/hex/index.spec.ts |  2 +-
 lib/versioning/npm/index.spec.ts | 34 ++++++++++++++++++++++++++++++++
 lib/versioning/npm/range.ts      |  3 +++
 3 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/lib/versioning/hex/index.spec.ts b/lib/versioning/hex/index.spec.ts
index 6481de5b38..2c3b66bfb1 100644
--- a/lib/versioning/hex/index.spec.ts
+++ b/lib/versioning/hex/index.spec.ts
@@ -198,7 +198,7 @@ describe(getName(__filename), () => {
         currentVersion: '1.2.3',
         newVersion: '2.0.7',
       })
-    ).toEqual('>= 1.0.0 or <= 2.0.7');
+    ).toEqual('>= 1.0.0 or <= 2.0.0');
     expect(
       hexScheme.getNewValue({
         currentValue: '>= 1.0.0 or <= 2.0.0',
diff --git a/lib/versioning/npm/index.spec.ts b/lib/versioning/npm/index.spec.ts
index 09b1d75213..73e5f5bd00 100644
--- a/lib/versioning/npm/index.spec.ts
+++ b/lib/versioning/npm/index.spec.ts
@@ -325,4 +325,38 @@ describe('semver.getNewValue()', () => {
       })
     ).toEqual('>= 1.0.1 < 2');
   });
+  it('widens', () => {
+    expect(
+      semver.getNewValue({
+        currentValue: '<=1.2.3',
+        rangeStrategy: 'widen',
+        currentVersion: '1.0.0',
+        newVersion: '1.2.3',
+      })
+    ).toEqual('<=1.2.3');
+    expect(
+      semver.getNewValue({
+        currentValue: '<=1.2.3',
+        rangeStrategy: 'widen',
+        currentVersion: '1.0.0',
+        newVersion: '1.2.4',
+      })
+    ).toEqual('<=1.2.4');
+    expect(
+      semver.getNewValue({
+        currentValue: '>=1.2.3',
+        rangeStrategy: 'widen',
+        currentVersion: '1.0.0',
+        newVersion: '1.2.3',
+      })
+    ).toEqual('>=1.2.3');
+    expect(
+      semver.getNewValue({
+        currentValue: '>=1.2.3',
+        rangeStrategy: 'widen',
+        currentVersion: '1.0.0',
+        newVersion: '1.2.1',
+      })
+    ).toEqual('>=1.2.3 || 1.2.1');
+  });
 });
diff --git a/lib/versioning/npm/range.ts b/lib/versioning/npm/range.ts
index 46cfcfcdcc..8bccb58811 100644
--- a/lib/versioning/npm/range.ts
+++ b/lib/versioning/npm/range.ts
@@ -75,6 +75,9 @@ export function getNewValue({
   const parsedRange = parseRange(currentValue);
   const element = parsedRange[parsedRange.length - 1];
   if (rangeStrategy === 'widen') {
+    if (satisfies(newVersion, currentValue)) {
+      return currentValue;
+    }
     const newValue = getNewValue({
       currentValue,
       rangeStrategy: 'replace',
-- 
GitLab