Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / semver / ranges / outside.js
1 const SemVer = require('../classes/semver')
2 const Comparator = require('../classes/comparator')
3 const {ANY} = Comparator
4 const Range = require('../classes/range')
5 const satisfies = require('../functions/satisfies')
6 const gt = require('../functions/gt')
7 const lt = require('../functions/lt')
8 const lte = require('../functions/lte')
9 const gte = require('../functions/gte')
10
11 const outside = (version, range, hilo, options) => {
12   version = new SemVer(version, options)
13   range = new Range(range, options)
14
15   let gtfn, ltefn, ltfn, comp, ecomp
16   switch (hilo) {
17     case '>':
18       gtfn = gt
19       ltefn = lte
20       ltfn = lt
21       comp = '>'
22       ecomp = '>='
23       break
24     case '<':
25       gtfn = lt
26       ltefn = gte
27       ltfn = gt
28       comp = '<'
29       ecomp = '<='
30       break
31     default:
32       throw new TypeError('Must provide a hilo val of "<" or ">"')
33   }
34
35   // If it satisfies the range it is not outside
36   if (satisfies(version, range, options)) {
37     return false
38   }
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 = null
47     let low = null
48
49     comparators.forEach((comparator) => {
50       if (comparator.semver === ANY) {
51         comparator = new Comparator('>=0.0.0')
52       }
53       high = high || comparator
54       low = low || comparator
55       if (gtfn(comparator.semver, high.semver, options)) {
56         high = comparator
57       } else if (ltfn(comparator.semver, low.semver, options)) {
58         low = comparator
59       }
60     })
61
62     // If the edge version comparator has a operator then our version
63     // isn't outside it
64     if (high.operator === comp || high.operator === ecomp) {
65       return false
66     }
67
68     // If the lowest version comparator has an operator and our version
69     // is less than it then it isn't higher than the range
70     if ((!low.operator || low.operator === comp) &&
71         ltefn(version, low.semver)) {
72       return false
73     } else if (low.operator === ecomp && ltfn(version, low.semver)) {
74       return false
75     }
76   }
77   return true
78 }
79
80 module.exports = outside