Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
outside.js83 linesDownload Raw Back to ranges
1'use strict'
2
3const SemVer = require('../classes/semver')
4const Comparator = require('../classes/comparator')
5const { ANY } = Comparator
6const Range = require('../classes/range')
7const satisfies = require('../functions/satisfies')
8const gt = require('../functions/gt')
9const lt = require('../functions/lt')
10const lte = require('../functions/lte')
11const gte = require('../functions/gte')
12
13const outside = (version, range, hilo, options) => {
14  version = new SemVer(version, options)
15  range = new Range(range, options)
16
17  let gtfn, ltefn, ltfn, comp, ecomp
18  switch (hilo) {
19    case '>':
20      gtfn = gt
21      ltefn = lte
22      ltfn = lt
23      comp = '>'
24      ecomp = '>='
25      break
26    case '<':
27      gtfn = lt
28      ltefn = gte
29      ltfn = gt
30      comp = '<'
31      ecomp = '<='
32      break
33    default:
34      throw new TypeError('Must provide a hilo val of "<" or ">"')
35  }
36
37  // If it satisfies the range it is not outside
38  if (satisfies(version, range, options)) {
39    return false
40  }
41
42  // From now on, variable terms are as if we're in "gtr" mode.
43  // but note that everything is flipped for the "ltr" function.
44
45  for (let i = 0; i < range.set.length; ++i) {
46    const comparators = range.set[i]
47
48    let high = null
49    let low = null
50
51    comparators.forEach((comparator) => {
52      if (comparator.semver === ANY) {
53        comparator = new Comparator('>=0.0.0')
54      }
55      high = high || comparator
56      low = low || comparator
57      if (gtfn(comparator.semver, high.semver, options)) {
58        high = comparator
59      } else if (ltfn(comparator.semver, low.semver, options)) {
60        low = comparator
61      }
62    })
63
64    // If the edge version comparator has a operator then our version
65    // isn't outside it
66    if (high.operator === comp || high.operator === ecomp) {
67      return false
68    }
69
70    // If the lowest version comparator has an operator and our version
71    // is less than it then it isn't higher than the range
72    if ((!low.operator || low.operator === comp) &&
73        ltefn(version, low.semver)) {
74      return false
75    } else if (low.operator === ecomp && ltfn(version, low.semver)) {
76      return false
77    }
78  }
79  return true
80}
81
82module.exports = outside
83 
codekingpro/portable-devtools · Team Ai