diff --git a/ranges/min-version.js b/ranges/min-version.js index 09a65aa3..01d54c09 100644 --- a/ranges/min-version.js +++ b/ranges/min-version.js @@ -29,6 +29,12 @@ const minVersion = (range, loose) => { case '>': if (compver.prerelease.length === 0) { compver.patch++ + // in includePrerelease mode the next patch's lowest prerelease + // (e.g. 1.0.1-0) also satisfies `>1.0.0` and is lower than 1.0.1, + // so it is the true minimum -- matching the prerelease `>` case below + if (range.includePrerelease) { + compver.prerelease.push(0) + } } else { compver.prerelease.push(0) } diff --git a/test/ranges/min-version.js b/test/ranges/min-version.js index eeb9b725..2e6eb6ee 100644 --- a/test/ranges/min-version.js +++ b/test/ranges/min-version.js @@ -64,6 +64,11 @@ test('minimum version in range tests', (t) => { ['>2 || >1.0.0-0', '1.0.0-0.0'], ['>2 || >1.0.0-beta', '1.0.0-beta.0'], + // includePrerelease: the lowest prerelease of the next version is the true + // minimum for a `>` bound (and lower than the plain next version) + ['>1.0.0', '1.0.1-0', { includePrerelease: true }], + ['>2 || >1.0.0', '1.0.1-0', { includePrerelease: true }], + // Impossible range ['>4 <3', null], ].forEach((tuple) => {