Skip to content

Commit

Permalink
add top level intersects function
Browse files Browse the repository at this point in the history
  • Loading branch information
isaacs committed Jul 24, 2017
1 parent 6cb2bcb commit e1668ce
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 2 deletions.
3 changes: 3 additions & 0 deletions README.md
Expand Up @@ -306,6 +306,8 @@ strings that they parse.
* `major(v)`: Return the major version number.
* `minor(v)`: Return the minor version number.
* `patch(v)`: Return the patch version number.
* `intersects(r1, r2, loose)`: Return true if the two supplied ranges
or comparators intersect.

### Comparison

Expand All @@ -330,6 +332,7 @@ strings that they parse.
or null if the versions are the same.

### Comparators

* `intersects(comparator)`: Return true if the comparators intersect

### Ranges
Expand Down
20 changes: 18 additions & 2 deletions semver.js
Expand Up @@ -746,8 +746,17 @@ Comparator.prototype.intersects = function(comp, loose) {

exports.Range = Range;
function Range(range, loose) {
if ((range instanceof Range) && range.loose === loose)
return range;
if (range instanceof Range) {
if (range.loose === loose) {
return range;
} else {
return new Range(range.raw, loose);
}
}

if (range instanceof Comparator) {
return new Range(range.value, loose);
}

if (!(this instanceof Range))
return new Range(range, loose);
Expand Down Expand Up @@ -1270,3 +1279,10 @@ function prerelease(version, loose) {
var parsed = parse(version, loose);
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null;
}

exports.intersects = intersects;
function intersects(r1, r2, loose) {
r1 = new Range(r1, loose)
r2 = new Range(r2, loose)
return r1.intersects(r2)
}
31 changes: 31 additions & 0 deletions test/index.js
Expand Up @@ -753,8 +753,23 @@ test('\nintersect comparators', function(t) {

var actual1 = comparator1.intersects(comparator2);
var actual2 = comparator2.intersects(comparator1);
var actual3 = semver.intersects(comparator1, comparator2);
var actual4 = semver.intersects(comparator2, comparator1);
var actual4 = semver.intersects(comparator1, comparator2, true);
var actual5 = semver.intersects(comparator2, comparator1, true);
var actual6 = semver.intersects(v[0], v[1]);
var actual7 = semver.intersects(v[1], v[0]);
var actual8 = semver.intersects(v[0], v[1], true);
var actual9 = semver.intersects(v[1], v[0], true);
t.equal(actual1, expect);
t.equal(actual2, expect);
t.equal(actual3, expect);
t.equal(actual4, expect);
t.equal(actual5, expect);
t.equal(actual6, expect);
t.equal(actual7, expect);
t.equal(actual8, expect);
t.equal(actual9, expect);
});
t.end();
});
Expand Down Expand Up @@ -782,8 +797,24 @@ test('\nranges intersect', function(t) {
var expect = v[2];
var actual1 = range1.intersects(range2);
var actual2 = range2.intersects(range1);
var actual3 = semver.intersects(v[1], v[0]);
var actual4 = semver.intersects(v[0], v[1]);
var actual5 = semver.intersects(v[1], v[0], true);
var actual6 = semver.intersects(v[0], v[1], true);
var actual7 = semver.intersects(range1, range2);
var actual8 = semver.intersects(range2, range1);
var actual9 = semver.intersects(range1, range2, true);
var actual0 = semver.intersects(range2, range1, true);
t.equal(actual1, expect);
t.equal(actual2, expect);
t.equal(actual3, expect);
t.equal(actual4, expect);
t.equal(actual5, expect);
t.equal(actual6, expect);
t.equal(actual7, expect);
t.equal(actual8, expect);
t.equal(actual9, expect);
t.equal(actual0, expect);
});
t.end();
});
Expand Down

0 comments on commit e1668ce

Please sign in to comment.