From 50e6c95ef5d90961aedf7e1b173a50cc4018dbf8 Mon Sep 17 00:00:00 2001 From: Jake Wang Date: Fri, 18 Sep 2026 18:14:11 -0400 Subject: [PATCH] fix: preserve ranges with no matching versions when simplifying --- ranges/simplify.js | 4 ++++ test/ranges/simplify.js | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/ranges/simplify.js b/ranges/simplify.js index 262732e6..2eb0e41e 100644 --- a/ranges/simplify.js +++ b/ranges/simplify.js @@ -29,6 +29,10 @@ module.exports = (versions, range, options) => { set.push([first, null]) } + if (!set.length) { + return range + } + const ranges = [] for (const [min, max] of set) { if (min === max) { diff --git a/test/ranges/simplify.js b/test/ranges/simplify.js index eac6624a..a0d70c40 100644 --- a/test/ranges/simplify.js +++ b/test/ranges/simplify.js @@ -2,6 +2,7 @@ const simplify = require('../../ranges/simplify.js') const Range = require('../../classes/range.js') +const satisfies = require('../../functions/satisfies.js') const t = require('tap') const versions = [ '1.0.0', @@ -42,3 +43,12 @@ t.equal(simplify(versions, '>=3.0.0 <3.1.0'), '3.0.0') t.equal(simplify(versions, '3.0.0 || 3.1 || 3.2 || 3.3'), '>=3.0.0') t.equal(simplify(versions, '1 || 2 || 3'), '*') t.equal(simplify(versions, '2.1 || 2.2 || 2.3'), '2.1.0 - 2.3.1') + +t.test('ranges with no matching versions', t => { + for (const range of ['^4.0.0', new Range('^4.0.0'), '<0.0.0-0']) { + const simplified = simplify(versions, range) + t.equal(simplified, range, 'preserves the original range') + t.same(versions.filter(v => satisfies(v, simplified)), [], 'still matches no versions') + } + t.end() +})