strong-tie/inbound-calls
0
1const SemVer = require('../classes/semver')2const Comparator = require('../classes/comparator')3const { ANY } = Comparator4const Range = require('../classes/range')5const satisfies = require('../functions/satisfies')6const gt = require('../functions/gt')7const lt = require('../functions/lt')8const lte = require('../functions/lte')9const gte = require('../functions/gte')10 11const outside = (version, range, hilo, options) => {12 version = new SemVer(version, options)13 range = new Range(range, options)14 15 let gtfn, ltefn, ltfn, comp, ecomp16 switch (hilo) {17 case '>':18 gtfn = gt19 ltefn = lte20 ltfn = lt21 comp = '>'22 ecomp = '>='23 break24 case '<':25 gtfn = lt26 ltefn = gte27 ltfn = gt28 comp = '<'29 ecomp = '<='30 break31 default:32 throw new TypeError('Must provide a hilo val of "<" or ">"')33 }34 35 // If it satisfies the range it is not outside36 if (satisfies(version, range, options)) {37 return false38 }39 40 // From now on, variable terms are as if we're in "gtr" mode.41 // but note that everything is flipped for the "ltr" function.42 43 for (let i = 0; i < range.set.length; ++i) {44 const comparators = range.set[i]45 46 let high = null47 let low = null48 49 comparators.forEach((comparator) => {50 if (comparator.semver === ANY) {51 comparator = new Comparator('>=0.0.0')52 }53 high = high || comparator54 low = low || comparator55 if (gtfn(comparator.semver, high.semver, options)) {56 high = comparator57 } else if (ltfn(comparator.semver, low.semver, options)) {58 low = comparator59 }60 })61 62 // If the edge version comparator has a operator then our version63 // isn't outside it64 if (high.operator === comp || high.operator === ecomp) {65 return false66 }67 68 // If the lowest version comparator has an operator and our version69 // is less than it then it isn't higher than the range70 if ((!low.operator || low.operator === comp) &&71 ltefn(version, low.semver)) {72 return false73 } else if (low.operator === ecomp && ltfn(version, low.semver)) {74 return false75 }76 }77 return true78}79 80module.exports = outside81 