diff --git a/package.json b/package.json index 61af042..3f033f6 100644 --- a/package.json +++ b/package.json @@ -25,5 +25,5 @@ "lint": "eslint .", "test": "jenkins-mocha tests/unit --recursive" }, - "version": "1.1.0" + "version": "1.1.1" } diff --git a/semver-intersect.js b/semver-intersect.js index 4447024..d9a7fb4 100644 --- a/semver-intersect.js +++ b/semver-intersect.js @@ -2,7 +2,7 @@ const semver = require('semver'); const regex = { condition: /^([<=>]+)?/, majorVersion: /\d+/, - minMax: /^>=([\d]+\.[\d]+\.[\d]+(?:-[\w.]+)?) <([\d]+\.[\d]+\.[\d]+)$/, + minMax: /^>=([\d]+\.[\d]+\.[\d]+(?:-[\w.]+)?) <=?([\d]+\.[\d]+\.[\d]+)$/, version: /([\d]+\.[\d]+\.[\d]+(?:-[\w.]+)?)$/, whitespace: /\s+/ }; @@ -14,6 +14,10 @@ function createShorthand (range) { } const [ min, max ] = match.slice(1); + if (min === max) { + // Exact range + return min; + } // Special handling for major version 0 if (semver.major(min) === 0 && semver.major(max) === 0) { @@ -72,7 +76,8 @@ function intersect (...ranges) { // Exact version number specified, must be compatible with both bounds if (condition === '=') { ensureCompatible(range, lowerBound, upperBound); - lowerBound = upperBound = range; + lowerBound = '>=' + range; + upperBound = '<=' + range; } // New lower bound must be less than existing upper bound diff --git a/tests/unit/semver-intersect.js b/tests/unit/semver-intersect.js index d9e8a33..78ff7c0 100644 --- a/tests/unit/semver-intersect.js +++ b/tests/unit/semver-intersect.js @@ -130,6 +130,10 @@ describe('intersect', () => { const result = intersect('^4.0.0', '~4.3.0'); expect(result).to.equal('~4.3.0'); }); + it('should return an exact version intersected with a range', () => { + const result = intersect('1.5.16', '^1.0.0'); + expect(result).to.equal('1.5.16'); + }); it('should simplify redundant ranges', () => { const result = intersect('^4.0.0', '~4.3.89', '~4.3.24', '~4.3.63'); expect(result).to.equal('~4.3.89');