strong-tie/inbound-calls
0
1const SemVer = require('../classes/semver')2const Range = require('../classes/range')3const gt = require('../functions/gt')4 5const minVersion = (range, loose) => {6 range = new Range(range, loose)7 8 let minver = new SemVer('0.0.0')9 if (range.test(minver)) {10 return minver11 }12 13 minver = new SemVer('0.0.0-0')14 if (range.test(minver)) {15 return minver16 }17 18 minver = null19 for (let i = 0; i < range.set.length; ++i) {20 const comparators = range.set[i]21 22 let setMin = null23 comparators.forEach((comparator) => {24 // Clone to avoid manipulating the comparator's semver object.25 const compver = new SemVer(comparator.semver.version)26 switch (comparator.operator) {27 case '>':28 if (compver.prerelease.length === 0) {29 compver.patch++30 } else {31 compver.prerelease.push(0)32 }33 compver.raw = compver.format()34 /* fallthrough */35 case '':36 case '>=':37 if (!setMin || gt(compver, setMin)) {38 setMin = compver39 }40 break41 case '<':42 case '<=':43 /* Ignore maximum versions */44 break45 /* istanbul ignore next */46 default:47 throw new Error(`Unexpected operation: ${comparator.operator}`)48 }49 })50 if (setMin && (!minver || gt(minver, setMin))) {51 minver = setMin52 }53 }54 55 if (minver && range.test(minver)) {56 return minver57 }58 59 return null60}61module.exports = minVersion62 