| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | 
							- var nodeSemver = require('semver');
 
- var sver = require('./sver');
 
- var Semver = sver.Semver;
 
- var SemverRange = sver.SemverRange;
 
- var forOf = require('es6-iterator/for-of');
 
- module.exports = function nodeRangeToSemverRange (range) {
 
-   var parsed = nodeSemver.validRange(range);
 
-   // tag version
 
-   if (!parsed)
 
-     return new SemverRange(range);
 
-   if (parsed === '*')
 
-     return new SemverRange(parsed);
 
-   try {
 
-     var semverRange = new SemverRange(range);
 
-     if (!semverRange.version.tag)
 
-       return semverRange;
 
-   }
 
-   catch (e) {
 
-     if (e.code !== 'ENOTSEMVER')
 
-       throw e;
 
-   }
 
-   var outRange;
 
-   forOf(parsed.split('||'), function(union) {
 
-     // compute the intersection into a lowest upper bound and a highest lower bound
 
-     var upperBound, lowerBound, upperEq, lowerEq;
 
-     forOf(union.split(' '), function(intersection, doBreak) {
 
-       var lt = intersection[0] === '<';
 
-       var gt = intersection[0] === '>';
 
-       if (!lt && !gt) {
 
-         upperBound = intersection;
 
-         upperEq = true;
 
-         return doBreak();
 
-       }
 
-       var eq = intersection[1] === '=';
 
-       if (!gt) {
 
-         var version = new Semver(intersection.substr(1 + eq));
 
-         if (!upperBound || upperBound.gt(version)) {
 
-           upperBound = version;
 
-           upperEq = eq;
 
-         }
 
-       }
 
-       else if (!lt) {
 
-         var eq = intersection[1] === '=';
 
-         var version = new Semver(intersection.substr(1 + eq));
 
-         if (!lowerBound || lowerBound.lt(version)) {
 
-           lowerBound = version;
 
-           lowerEq = eq;
 
-         }
 
-       }
 
-     });
 
-     // if the lower bound is greater than the upper bound then just return the lower bound exactly
 
-     if (lowerBound && upperBound && lowerBound.gt(upperBound)) {
 
-       var curRange = new SemverRange(lowerBound.toString());
 
-       // the largest or highest union range wins
 
-       if (!outRange || !outRange.contains(curRange) && (curRange.gt(outRange) || curRange.contains(outRange)))
 
-         outRange = curRange;
 
-       return;
 
-     }
 
-     // determine the largest semver range satisfying the upper bound
 
-     var upperRange;
 
-     if (upperBound) {
 
-       // if the upper bound has an equality then we return it directly
 
-       if (upperEq) {
 
-         var curRange = new SemverRange(upperBound.toString());
 
-         // the largest or highest union range wins
 
-         if (!outRange || !outRange.contains(curRange) && (curRange.gt(outRange) || curRange.contains(outRange)))
 
-           outRange = curRange;
 
-         return;
 
-       }
 
-       // prerelease ignored in upper bound
 
-       var major = 0, minor = 0, patch = 0, rangeType = '';
 
-       // <2.0.0 -> ^1.0.0
 
-       if (upperBound.patch === 0) {
 
-         if (upperBound.minor === 0) {
 
-           if (upperBound.major > 0) {
 
-             major = upperBound.major - 1;
 
-             rangeType = '^';
 
-           }
 
-         }
 
-         // <1.2.0 -> ~1.1.0
 
-         else {
 
-           major = upperBound.major;
 
-           minor = upperBound.minor - 1;
 
-           rangeType = '~';
 
-         }
 
-       }
 
-       // <1.2.3 -> ~1.2.0
 
-       else {
 
-         major = upperBound.major;
 
-         minor = upperBound.minor;
 
-         patch = 0;
 
-         rangeType = '~';
 
-       }
 
-       if (major === 0 && rangeType === '^')
 
-         upperRange = new SemverRange('0');
 
-       else
 
-         upperRange = new SemverRange(rangeType + major + '.' + minor + '.' + patch);
 
-     }
 
-     // determine the lower range semver range
 
-     var lowerRange;
 
-     if (!lowerEq) {
 
-       if (lowerBound.pre)
 
-         lowerRange = new SemverRange('^' + lowerBound.major + '.' + lowerBound.minor + '.' + lowerBound.patch + '-' + lowerBound.pre.join('.') + '.1');
 
-       else
 
-         lowerRange = new SemverRange('^' + lowerBound.major + '.' + lowerBound.minor + '.' + (lowerBound.patch + 1));
 
-     }
 
-     else {
 
-       lowerRange = new SemverRange('^' + lowerBound.toString());
 
-     }
 
-     // we then intersect the upper semver range with the lower semver range
 
-     // if the intersection is empty, we return the upper range only
 
-     var curRange = upperRange ? lowerRange.intersect(upperRange) || upperRange : lowerRange;
 
-     // the largest or highest union range wins
 
-     if (!outRange || !outRange.contains(curRange) && (curRange.gt(outRange) || curRange.contains(outRange)))
 
-       outRange = curRange;
 
-   });
 
-   return outRange;
 
- }
 
 
  |