| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | 
							- const ANY = Symbol('SemVer ANY')
 
- // hoisted class for cyclic dependency
 
- class Comparator {
 
-   static get ANY () {
 
-     return ANY
 
-   }
 
-   constructor (comp, options) {
 
-     options = parseOptions(options)
 
-     if (comp instanceof Comparator) {
 
-       if (comp.loose === !!options.loose) {
 
-         return comp
 
-       } else {
 
-         comp = comp.value
 
-       }
 
-     }
 
-     comp = comp.trim().split(/\s+/).join(' ')
 
-     debug('comparator', comp, options)
 
-     this.options = options
 
-     this.loose = !!options.loose
 
-     this.parse(comp)
 
-     if (this.semver === ANY) {
 
-       this.value = ''
 
-     } else {
 
-       this.value = this.operator + this.semver.version
 
-     }
 
-     debug('comp', this)
 
-   }
 
-   parse (comp) {
 
-     const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
 
-     const m = comp.match(r)
 
-     if (!m) {
 
-       throw new TypeError(`Invalid comparator: ${comp}`)
 
-     }
 
-     this.operator = m[1] !== undefined ? m[1] : ''
 
-     if (this.operator === '=') {
 
-       this.operator = ''
 
-     }
 
-     // if it literally is just '>' or '' then allow anything.
 
-     if (!m[2]) {
 
-       this.semver = ANY
 
-     } else {
 
-       this.semver = new SemVer(m[2], this.options.loose)
 
-     }
 
-   }
 
-   toString () {
 
-     return this.value
 
-   }
 
-   test (version) {
 
-     debug('Comparator.test', version, this.options.loose)
 
-     if (this.semver === ANY || version === ANY) {
 
-       return true
 
-     }
 
-     if (typeof version === 'string') {
 
-       try {
 
-         version = new SemVer(version, this.options)
 
-       } catch (er) {
 
-         return false
 
-       }
 
-     }
 
-     return cmp(version, this.operator, this.semver, this.options)
 
-   }
 
-   intersects (comp, options) {
 
-     if (!(comp instanceof Comparator)) {
 
-       throw new TypeError('a Comparator is required')
 
-     }
 
-     if (this.operator === '') {
 
-       if (this.value === '') {
 
-         return true
 
-       }
 
-       return new Range(comp.value, options).test(this.value)
 
-     } else if (comp.operator === '') {
 
-       if (comp.value === '') {
 
-         return true
 
-       }
 
-       return new Range(this.value, options).test(comp.semver)
 
-     }
 
-     options = parseOptions(options)
 
-     // Special cases where nothing can possibly be lower
 
-     if (options.includePrerelease &&
 
-       (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {
 
-       return false
 
-     }
 
-     if (!options.includePrerelease &&
 
-       (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {
 
-       return false
 
-     }
 
-     // Same direction increasing (> or >=)
 
-     if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {
 
-       return true
 
-     }
 
-     // Same direction decreasing (< or <=)
 
-     if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {
 
-       return true
 
-     }
 
-     // same SemVer and both sides are inclusive (<= or >=)
 
-     if (
 
-       (this.semver.version === comp.semver.version) &&
 
-       this.operator.includes('=') && comp.operator.includes('=')) {
 
-       return true
 
-     }
 
-     // opposite directions less than
 
-     if (cmp(this.semver, '<', comp.semver, options) &&
 
-       this.operator.startsWith('>') && comp.operator.startsWith('<')) {
 
-       return true
 
-     }
 
-     // opposite directions greater than
 
-     if (cmp(this.semver, '>', comp.semver, options) &&
 
-       this.operator.startsWith('<') && comp.operator.startsWith('>')) {
 
-       return true
 
-     }
 
-     return false
 
-   }
 
- }
 
- module.exports = Comparator
 
- const parseOptions = require('../internal/parse-options')
 
- const { safeRe: re, t } = require('../internal/re')
 
- const cmp = require('../functions/cmp')
 
- const debug = require('../internal/debug')
 
- const SemVer = require('./semver')
 
- const Range = require('./range')
 
 
  |