mirror of
				https://github.com/SillyTavern/SillyTavern.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	modules
This commit is contained in:
		
							
								
								
									
										136
									
								
								node_modules/semver/classes/comparator.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								node_modules/semver/classes/comparator.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,136 @@ | ||||
| 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 | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     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 (!options || typeof options !== 'object') { | ||||
|       options = { | ||||
|         loose: !!options, | ||||
|         includePrerelease: false, | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     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) | ||||
|     } | ||||
|  | ||||
|     const sameDirectionIncreasing = | ||||
|       (this.operator === '>=' || this.operator === '>') && | ||||
|       (comp.operator === '>=' || comp.operator === '>') | ||||
|     const sameDirectionDecreasing = | ||||
|       (this.operator === '<=' || this.operator === '<') && | ||||
|       (comp.operator === '<=' || comp.operator === '<') | ||||
|     const sameSemVer = this.semver.version === comp.semver.version | ||||
|     const differentDirectionsInclusive = | ||||
|       (this.operator === '>=' || this.operator === '<=') && | ||||
|       (comp.operator === '>=' || comp.operator === '<=') | ||||
|     const oppositeDirectionsLessThan = | ||||
|       cmp(this.semver, '<', comp.semver, options) && | ||||
|       (this.operator === '>=' || this.operator === '>') && | ||||
|         (comp.operator === '<=' || comp.operator === '<') | ||||
|     const oppositeDirectionsGreaterThan = | ||||
|       cmp(this.semver, '>', comp.semver, options) && | ||||
|       (this.operator === '<=' || this.operator === '<') && | ||||
|         (comp.operator === '>=' || comp.operator === '>') | ||||
|  | ||||
|     return ( | ||||
|       sameDirectionIncreasing || | ||||
|       sameDirectionDecreasing || | ||||
|       (sameSemVer && differentDirectionsInclusive) || | ||||
|       oppositeDirectionsLessThan || | ||||
|       oppositeDirectionsGreaterThan | ||||
|     ) | ||||
|   } | ||||
| } | ||||
|  | ||||
| module.exports = Comparator | ||||
|  | ||||
| const parseOptions = require('../internal/parse-options') | ||||
| const { re, t } = require('../internal/re') | ||||
| const cmp = require('../functions/cmp') | ||||
| const debug = require('../internal/debug') | ||||
| const SemVer = require('./semver') | ||||
| const Range = require('./range') | ||||
							
								
								
									
										5
									
								
								node_modules/semver/classes/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								node_modules/semver/classes/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| module.exports = { | ||||
|   SemVer: require('./semver.js'), | ||||
|   Range: require('./range.js'), | ||||
|   Comparator: require('./comparator.js'), | ||||
| } | ||||
							
								
								
									
										522
									
								
								node_modules/semver/classes/range.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										522
									
								
								node_modules/semver/classes/range.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,522 @@ | ||||
| // hoisted class for cyclic dependency | ||||
| class Range { | ||||
|   constructor (range, options) { | ||||
|     options = parseOptions(options) | ||||
|  | ||||
|     if (range instanceof Range) { | ||||
|       if ( | ||||
|         range.loose === !!options.loose && | ||||
|         range.includePrerelease === !!options.includePrerelease | ||||
|       ) { | ||||
|         return range | ||||
|       } else { | ||||
|         return new Range(range.raw, options) | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if (range instanceof Comparator) { | ||||
|       // just put it in the set and return | ||||
|       this.raw = range.value | ||||
|       this.set = [[range]] | ||||
|       this.format() | ||||
|       return this | ||||
|     } | ||||
|  | ||||
|     this.options = options | ||||
|     this.loose = !!options.loose | ||||
|     this.includePrerelease = !!options.includePrerelease | ||||
|  | ||||
|     // First, split based on boolean or || | ||||
|     this.raw = range | ||||
|     this.set = range | ||||
|       .split('||') | ||||
|       // map the range to a 2d array of comparators | ||||
|       .map(r => this.parseRange(r.trim())) | ||||
|       // throw out any comparator lists that are empty | ||||
|       // this generally means that it was not a valid range, which is allowed | ||||
|       // in loose mode, but will still throw if the WHOLE range is invalid. | ||||
|       .filter(c => c.length) | ||||
|  | ||||
|     if (!this.set.length) { | ||||
|       throw new TypeError(`Invalid SemVer Range: ${range}`) | ||||
|     } | ||||
|  | ||||
|     // if we have any that are not the null set, throw out null sets. | ||||
|     if (this.set.length > 1) { | ||||
|       // keep the first one, in case they're all null sets | ||||
|       const first = this.set[0] | ||||
|       this.set = this.set.filter(c => !isNullSet(c[0])) | ||||
|       if (this.set.length === 0) { | ||||
|         this.set = [first] | ||||
|       } else if (this.set.length > 1) { | ||||
|         // if we have any that are *, then the range is just * | ||||
|         for (const c of this.set) { | ||||
|           if (c.length === 1 && isAny(c[0])) { | ||||
|             this.set = [c] | ||||
|             break | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     this.format() | ||||
|   } | ||||
|  | ||||
|   format () { | ||||
|     this.range = this.set | ||||
|       .map((comps) => { | ||||
|         return comps.join(' ').trim() | ||||
|       }) | ||||
|       .join('||') | ||||
|       .trim() | ||||
|     return this.range | ||||
|   } | ||||
|  | ||||
|   toString () { | ||||
|     return this.range | ||||
|   } | ||||
|  | ||||
|   parseRange (range) { | ||||
|     range = range.trim() | ||||
|  | ||||
|     // memoize range parsing for performance. | ||||
|     // this is a very hot path, and fully deterministic. | ||||
|     const memoOpts = Object.keys(this.options).join(',') | ||||
|     const memoKey = `parseRange:${memoOpts}:${range}` | ||||
|     const cached = cache.get(memoKey) | ||||
|     if (cached) { | ||||
|       return cached | ||||
|     } | ||||
|  | ||||
|     const loose = this.options.loose | ||||
|     // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` | ||||
|     const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] | ||||
|     range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) | ||||
|     debug('hyphen replace', range) | ||||
|     // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` | ||||
|     range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) | ||||
|     debug('comparator trim', range) | ||||
|  | ||||
|     // `~ 1.2.3` => `~1.2.3` | ||||
|     range = range.replace(re[t.TILDETRIM], tildeTrimReplace) | ||||
|  | ||||
|     // `^ 1.2.3` => `^1.2.3` | ||||
|     range = range.replace(re[t.CARETTRIM], caretTrimReplace) | ||||
|  | ||||
|     // normalize spaces | ||||
|     range = range.split(/\s+/).join(' ') | ||||
|  | ||||
|     // At this point, the range is completely trimmed and | ||||
|     // ready to be split into comparators. | ||||
|  | ||||
|     let rangeList = range | ||||
|       .split(' ') | ||||
|       .map(comp => parseComparator(comp, this.options)) | ||||
|       .join(' ') | ||||
|       .split(/\s+/) | ||||
|       // >=0.0.0 is equivalent to * | ||||
|       .map(comp => replaceGTE0(comp, this.options)) | ||||
|  | ||||
|     if (loose) { | ||||
|       // in loose mode, throw out any that are not valid comparators | ||||
|       rangeList = rangeList.filter(comp => { | ||||
|         debug('loose invalid filter', comp, this.options) | ||||
|         return !!comp.match(re[t.COMPARATORLOOSE]) | ||||
|       }) | ||||
|     } | ||||
|     debug('range list', rangeList) | ||||
|  | ||||
|     // if any comparators are the null set, then replace with JUST null set | ||||
|     // if more than one comparator, remove any * comparators | ||||
|     // also, don't include the same comparator more than once | ||||
|     const rangeMap = new Map() | ||||
|     const comparators = rangeList.map(comp => new Comparator(comp, this.options)) | ||||
|     for (const comp of comparators) { | ||||
|       if (isNullSet(comp)) { | ||||
|         return [comp] | ||||
|       } | ||||
|       rangeMap.set(comp.value, comp) | ||||
|     } | ||||
|     if (rangeMap.size > 1 && rangeMap.has('')) { | ||||
|       rangeMap.delete('') | ||||
|     } | ||||
|  | ||||
|     const result = [...rangeMap.values()] | ||||
|     cache.set(memoKey, result) | ||||
|     return result | ||||
|   } | ||||
|  | ||||
|   intersects (range, options) { | ||||
|     if (!(range instanceof Range)) { | ||||
|       throw new TypeError('a Range is required') | ||||
|     } | ||||
|  | ||||
|     return this.set.some((thisComparators) => { | ||||
|       return ( | ||||
|         isSatisfiable(thisComparators, options) && | ||||
|         range.set.some((rangeComparators) => { | ||||
|           return ( | ||||
|             isSatisfiable(rangeComparators, options) && | ||||
|             thisComparators.every((thisComparator) => { | ||||
|               return rangeComparators.every((rangeComparator) => { | ||||
|                 return thisComparator.intersects(rangeComparator, options) | ||||
|               }) | ||||
|             }) | ||||
|           ) | ||||
|         }) | ||||
|       ) | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   // if ANY of the sets match ALL of its comparators, then pass | ||||
|   test (version) { | ||||
|     if (!version) { | ||||
|       return false | ||||
|     } | ||||
|  | ||||
|     if (typeof version === 'string') { | ||||
|       try { | ||||
|         version = new SemVer(version, this.options) | ||||
|       } catch (er) { | ||||
|         return false | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     for (let i = 0; i < this.set.length; i++) { | ||||
|       if (testSet(this.set[i], version, this.options)) { | ||||
|         return true | ||||
|       } | ||||
|     } | ||||
|     return false | ||||
|   } | ||||
| } | ||||
| module.exports = Range | ||||
|  | ||||
| const LRU = require('lru-cache') | ||||
| const cache = new LRU({ max: 1000 }) | ||||
|  | ||||
| const parseOptions = require('../internal/parse-options') | ||||
| const Comparator = require('./comparator') | ||||
| const debug = require('../internal/debug') | ||||
| const SemVer = require('./semver') | ||||
| const { | ||||
|   re, | ||||
|   t, | ||||
|   comparatorTrimReplace, | ||||
|   tildeTrimReplace, | ||||
|   caretTrimReplace, | ||||
| } = require('../internal/re') | ||||
|  | ||||
| const isNullSet = c => c.value === '<0.0.0-0' | ||||
| const isAny = c => c.value === '' | ||||
|  | ||||
| // take a set of comparators and determine whether there | ||||
| // exists a version which can satisfy it | ||||
| const isSatisfiable = (comparators, options) => { | ||||
|   let result = true | ||||
|   const remainingComparators = comparators.slice() | ||||
|   let testComparator = remainingComparators.pop() | ||||
|  | ||||
|   while (result && remainingComparators.length) { | ||||
|     result = remainingComparators.every((otherComparator) => { | ||||
|       return testComparator.intersects(otherComparator, options) | ||||
|     }) | ||||
|  | ||||
|     testComparator = remainingComparators.pop() | ||||
|   } | ||||
|  | ||||
|   return result | ||||
| } | ||||
|  | ||||
| // comprised of xranges, tildes, stars, and gtlt's at this point. | ||||
| // already replaced the hyphen ranges | ||||
| // turn into a set of JUST comparators. | ||||
| const parseComparator = (comp, options) => { | ||||
|   debug('comp', comp, options) | ||||
|   comp = replaceCarets(comp, options) | ||||
|   debug('caret', comp) | ||||
|   comp = replaceTildes(comp, options) | ||||
|   debug('tildes', comp) | ||||
|   comp = replaceXRanges(comp, options) | ||||
|   debug('xrange', comp) | ||||
|   comp = replaceStars(comp, options) | ||||
|   debug('stars', comp) | ||||
|   return comp | ||||
| } | ||||
|  | ||||
| const isX = id => !id || id.toLowerCase() === 'x' || id === '*' | ||||
|  | ||||
| // ~, ~> --> * (any, kinda silly) | ||||
| // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 | ||||
| // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 | ||||
| // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 | ||||
| // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 | ||||
| // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 | ||||
| // ~0.0.1 --> >=0.0.1 <0.1.0-0 | ||||
| const replaceTildes = (comp, options) => | ||||
|   comp.trim().split(/\s+/).map((c) => { | ||||
|     return replaceTilde(c, options) | ||||
|   }).join(' ') | ||||
|  | ||||
| const replaceTilde = (comp, options) => { | ||||
|   const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] | ||||
|   return comp.replace(r, (_, M, m, p, pr) => { | ||||
|     debug('tilde', comp, _, M, m, p, pr) | ||||
|     let ret | ||||
|  | ||||
|     if (isX(M)) { | ||||
|       ret = '' | ||||
|     } else if (isX(m)) { | ||||
|       ret = `>=${M}.0.0 <${+M + 1}.0.0-0` | ||||
|     } else if (isX(p)) { | ||||
|       // ~1.2 == >=1.2.0 <1.3.0-0 | ||||
|       ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` | ||||
|     } else if (pr) { | ||||
|       debug('replaceTilde pr', pr) | ||||
|       ret = `>=${M}.${m}.${p}-${pr | ||||
|       } <${M}.${+m + 1}.0-0` | ||||
|     } else { | ||||
|       // ~1.2.3 == >=1.2.3 <1.3.0-0 | ||||
|       ret = `>=${M}.${m}.${p | ||||
|       } <${M}.${+m + 1}.0-0` | ||||
|     } | ||||
|  | ||||
|     debug('tilde return', ret) | ||||
|     return ret | ||||
|   }) | ||||
| } | ||||
|  | ||||
| // ^ --> * (any, kinda silly) | ||||
| // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 | ||||
| // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 | ||||
| // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 | ||||
| // ^1.2.3 --> >=1.2.3 <2.0.0-0 | ||||
| // ^1.2.0 --> >=1.2.0 <2.0.0-0 | ||||
| // ^0.0.1 --> >=0.0.1 <0.0.2-0 | ||||
| // ^0.1.0 --> >=0.1.0 <0.2.0-0 | ||||
| const replaceCarets = (comp, options) => | ||||
|   comp.trim().split(/\s+/).map((c) => { | ||||
|     return replaceCaret(c, options) | ||||
|   }).join(' ') | ||||
|  | ||||
| const replaceCaret = (comp, options) => { | ||||
|   debug('caret', comp, options) | ||||
|   const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] | ||||
|   const z = options.includePrerelease ? '-0' : '' | ||||
|   return comp.replace(r, (_, M, m, p, pr) => { | ||||
|     debug('caret', comp, _, M, m, p, pr) | ||||
|     let ret | ||||
|  | ||||
|     if (isX(M)) { | ||||
|       ret = '' | ||||
|     } else if (isX(m)) { | ||||
|       ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` | ||||
|     } else if (isX(p)) { | ||||
|       if (M === '0') { | ||||
|         ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` | ||||
|       } else { | ||||
|         ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` | ||||
|       } | ||||
|     } else if (pr) { | ||||
|       debug('replaceCaret pr', pr) | ||||
|       if (M === '0') { | ||||
|         if (m === '0') { | ||||
|           ret = `>=${M}.${m}.${p}-${pr | ||||
|           } <${M}.${m}.${+p + 1}-0` | ||||
|         } else { | ||||
|           ret = `>=${M}.${m}.${p}-${pr | ||||
|           } <${M}.${+m + 1}.0-0` | ||||
|         } | ||||
|       } else { | ||||
|         ret = `>=${M}.${m}.${p}-${pr | ||||
|         } <${+M + 1}.0.0-0` | ||||
|       } | ||||
|     } else { | ||||
|       debug('no pr') | ||||
|       if (M === '0') { | ||||
|         if (m === '0') { | ||||
|           ret = `>=${M}.${m}.${p | ||||
|           }${z} <${M}.${m}.${+p + 1}-0` | ||||
|         } else { | ||||
|           ret = `>=${M}.${m}.${p | ||||
|           }${z} <${M}.${+m + 1}.0-0` | ||||
|         } | ||||
|       } else { | ||||
|         ret = `>=${M}.${m}.${p | ||||
|         } <${+M + 1}.0.0-0` | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     debug('caret return', ret) | ||||
|     return ret | ||||
|   }) | ||||
| } | ||||
|  | ||||
| const replaceXRanges = (comp, options) => { | ||||
|   debug('replaceXRanges', comp, options) | ||||
|   return comp.split(/\s+/).map((c) => { | ||||
|     return replaceXRange(c, options) | ||||
|   }).join(' ') | ||||
| } | ||||
|  | ||||
| const replaceXRange = (comp, options) => { | ||||
|   comp = comp.trim() | ||||
|   const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] | ||||
|   return comp.replace(r, (ret, gtlt, M, m, p, pr) => { | ||||
|     debug('xRange', comp, ret, gtlt, M, m, p, pr) | ||||
|     const xM = isX(M) | ||||
|     const xm = xM || isX(m) | ||||
|     const xp = xm || isX(p) | ||||
|     const anyX = xp | ||||
|  | ||||
|     if (gtlt === '=' && anyX) { | ||||
|       gtlt = '' | ||||
|     } | ||||
|  | ||||
|     // if we're including prereleases in the match, then we need | ||||
|     // to fix this to -0, the lowest possible prerelease value | ||||
|     pr = options.includePrerelease ? '-0' : '' | ||||
|  | ||||
|     if (xM) { | ||||
|       if (gtlt === '>' || gtlt === '<') { | ||||
|         // nothing is allowed | ||||
|         ret = '<0.0.0-0' | ||||
|       } else { | ||||
|         // nothing is forbidden | ||||
|         ret = '*' | ||||
|       } | ||||
|     } else if (gtlt && anyX) { | ||||
|       // we know patch is an x, because we have any x at all. | ||||
|       // replace X with 0 | ||||
|       if (xm) { | ||||
|         m = 0 | ||||
|       } | ||||
|       p = 0 | ||||
|  | ||||
|       if (gtlt === '>') { | ||||
|         // >1 => >=2.0.0 | ||||
|         // >1.2 => >=1.3.0 | ||||
|         gtlt = '>=' | ||||
|         if (xm) { | ||||
|           M = +M + 1 | ||||
|           m = 0 | ||||
|           p = 0 | ||||
|         } else { | ||||
|           m = +m + 1 | ||||
|           p = 0 | ||||
|         } | ||||
|       } else if (gtlt === '<=') { | ||||
|         // <=0.7.x is actually <0.8.0, since any 0.7.x should | ||||
|         // pass.  Similarly, <=7.x is actually <8.0.0, etc. | ||||
|         gtlt = '<' | ||||
|         if (xm) { | ||||
|           M = +M + 1 | ||||
|         } else { | ||||
|           m = +m + 1 | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       if (gtlt === '<') { | ||||
|         pr = '-0' | ||||
|       } | ||||
|  | ||||
|       ret = `${gtlt + M}.${m}.${p}${pr}` | ||||
|     } else if (xm) { | ||||
|       ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` | ||||
|     } else if (xp) { | ||||
|       ret = `>=${M}.${m}.0${pr | ||||
|       } <${M}.${+m + 1}.0-0` | ||||
|     } | ||||
|  | ||||
|     debug('xRange return', ret) | ||||
|  | ||||
|     return ret | ||||
|   }) | ||||
| } | ||||
|  | ||||
| // Because * is AND-ed with everything else in the comparator, | ||||
| // and '' means "any version", just remove the *s entirely. | ||||
| const replaceStars = (comp, options) => { | ||||
|   debug('replaceStars', comp, options) | ||||
|   // Looseness is ignored here.  star is always as loose as it gets! | ||||
|   return comp.trim().replace(re[t.STAR], '') | ||||
| } | ||||
|  | ||||
| const replaceGTE0 = (comp, options) => { | ||||
|   debug('replaceGTE0', comp, options) | ||||
|   return comp.trim() | ||||
|     .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') | ||||
| } | ||||
|  | ||||
| // This function is passed to string.replace(re[t.HYPHENRANGE]) | ||||
| // M, m, patch, prerelease, build | ||||
| // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 | ||||
| // 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do | ||||
| // 1.2 - 3.4 => >=1.2.0 <3.5.0-0 | ||||
| const hyphenReplace = incPr => ($0, | ||||
|   from, fM, fm, fp, fpr, fb, | ||||
|   to, tM, tm, tp, tpr, tb) => { | ||||
|   if (isX(fM)) { | ||||
|     from = '' | ||||
|   } else if (isX(fm)) { | ||||
|     from = `>=${fM}.0.0${incPr ? '-0' : ''}` | ||||
|   } else if (isX(fp)) { | ||||
|     from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` | ||||
|   } else if (fpr) { | ||||
|     from = `>=${from}` | ||||
|   } else { | ||||
|     from = `>=${from}${incPr ? '-0' : ''}` | ||||
|   } | ||||
|  | ||||
|   if (isX(tM)) { | ||||
|     to = '' | ||||
|   } else if (isX(tm)) { | ||||
|     to = `<${+tM + 1}.0.0-0` | ||||
|   } else if (isX(tp)) { | ||||
|     to = `<${tM}.${+tm + 1}.0-0` | ||||
|   } else if (tpr) { | ||||
|     to = `<=${tM}.${tm}.${tp}-${tpr}` | ||||
|   } else if (incPr) { | ||||
|     to = `<${tM}.${tm}.${+tp + 1}-0` | ||||
|   } else { | ||||
|     to = `<=${to}` | ||||
|   } | ||||
|  | ||||
|   return (`${from} ${to}`).trim() | ||||
| } | ||||
|  | ||||
| const testSet = (set, version, options) => { | ||||
|   for (let i = 0; i < set.length; i++) { | ||||
|     if (!set[i].test(version)) { | ||||
|       return false | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (version.prerelease.length && !options.includePrerelease) { | ||||
|     // Find the set of versions that are allowed to have prereleases | ||||
|     // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 | ||||
|     // That should allow `1.2.3-pr.2` to pass. | ||||
|     // However, `1.2.4-alpha.notready` should NOT be allowed, | ||||
|     // even though it's within the range set by the comparators. | ||||
|     for (let i = 0; i < set.length; i++) { | ||||
|       debug(set[i].semver) | ||||
|       if (set[i].semver === Comparator.ANY) { | ||||
|         continue | ||||
|       } | ||||
|  | ||||
|       if (set[i].semver.prerelease.length > 0) { | ||||
|         const allowed = set[i].semver | ||||
|         if (allowed.major === version.major && | ||||
|             allowed.minor === version.minor && | ||||
|             allowed.patch === version.patch) { | ||||
|           return true | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     // Version has a -pre, but it's not one of the ones we like. | ||||
|     return false | ||||
|   } | ||||
|  | ||||
|   return true | ||||
| } | ||||
							
								
								
									
										287
									
								
								node_modules/semver/classes/semver.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										287
									
								
								node_modules/semver/classes/semver.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,287 @@ | ||||
| const debug = require('../internal/debug') | ||||
| const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants') | ||||
| const { re, t } = require('../internal/re') | ||||
|  | ||||
| const parseOptions = require('../internal/parse-options') | ||||
| const { compareIdentifiers } = require('../internal/identifiers') | ||||
| class SemVer { | ||||
|   constructor (version, options) { | ||||
|     options = parseOptions(options) | ||||
|  | ||||
|     if (version instanceof SemVer) { | ||||
|       if (version.loose === !!options.loose && | ||||
|           version.includePrerelease === !!options.includePrerelease) { | ||||
|         return version | ||||
|       } else { | ||||
|         version = version.version | ||||
|       } | ||||
|     } else if (typeof version !== 'string') { | ||||
|       throw new TypeError(`Invalid Version: ${version}`) | ||||
|     } | ||||
|  | ||||
|     if (version.length > MAX_LENGTH) { | ||||
|       throw new TypeError( | ||||
|         `version is longer than ${MAX_LENGTH} characters` | ||||
|       ) | ||||
|     } | ||||
|  | ||||
|     debug('SemVer', version, options) | ||||
|     this.options = options | ||||
|     this.loose = !!options.loose | ||||
|     // this isn't actually relevant for versions, but keep it so that we | ||||
|     // don't run into trouble passing this.options around. | ||||
|     this.includePrerelease = !!options.includePrerelease | ||||
|  | ||||
|     const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) | ||||
|  | ||||
|     if (!m) { | ||||
|       throw new TypeError(`Invalid Version: ${version}`) | ||||
|     } | ||||
|  | ||||
|     this.raw = version | ||||
|  | ||||
|     // these are actually numbers | ||||
|     this.major = +m[1] | ||||
|     this.minor = +m[2] | ||||
|     this.patch = +m[3] | ||||
|  | ||||
|     if (this.major > MAX_SAFE_INTEGER || this.major < 0) { | ||||
|       throw new TypeError('Invalid major version') | ||||
|     } | ||||
|  | ||||
|     if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { | ||||
|       throw new TypeError('Invalid minor version') | ||||
|     } | ||||
|  | ||||
|     if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { | ||||
|       throw new TypeError('Invalid patch version') | ||||
|     } | ||||
|  | ||||
|     // numberify any prerelease numeric ids | ||||
|     if (!m[4]) { | ||||
|       this.prerelease = [] | ||||
|     } else { | ||||
|       this.prerelease = m[4].split('.').map((id) => { | ||||
|         if (/^[0-9]+$/.test(id)) { | ||||
|           const num = +id | ||||
|           if (num >= 0 && num < MAX_SAFE_INTEGER) { | ||||
|             return num | ||||
|           } | ||||
|         } | ||||
|         return id | ||||
|       }) | ||||
|     } | ||||
|  | ||||
|     this.build = m[5] ? m[5].split('.') : [] | ||||
|     this.format() | ||||
|   } | ||||
|  | ||||
|   format () { | ||||
|     this.version = `${this.major}.${this.minor}.${this.patch}` | ||||
|     if (this.prerelease.length) { | ||||
|       this.version += `-${this.prerelease.join('.')}` | ||||
|     } | ||||
|     return this.version | ||||
|   } | ||||
|  | ||||
|   toString () { | ||||
|     return this.version | ||||
|   } | ||||
|  | ||||
|   compare (other) { | ||||
|     debug('SemVer.compare', this.version, this.options, other) | ||||
|     if (!(other instanceof SemVer)) { | ||||
|       if (typeof other === 'string' && other === this.version) { | ||||
|         return 0 | ||||
|       } | ||||
|       other = new SemVer(other, this.options) | ||||
|     } | ||||
|  | ||||
|     if (other.version === this.version) { | ||||
|       return 0 | ||||
|     } | ||||
|  | ||||
|     return this.compareMain(other) || this.comparePre(other) | ||||
|   } | ||||
|  | ||||
|   compareMain (other) { | ||||
|     if (!(other instanceof SemVer)) { | ||||
|       other = new SemVer(other, this.options) | ||||
|     } | ||||
|  | ||||
|     return ( | ||||
|       compareIdentifiers(this.major, other.major) || | ||||
|       compareIdentifiers(this.minor, other.minor) || | ||||
|       compareIdentifiers(this.patch, other.patch) | ||||
|     ) | ||||
|   } | ||||
|  | ||||
|   comparePre (other) { | ||||
|     if (!(other instanceof SemVer)) { | ||||
|       other = new SemVer(other, this.options) | ||||
|     } | ||||
|  | ||||
|     // NOT having a prerelease is > having one | ||||
|     if (this.prerelease.length && !other.prerelease.length) { | ||||
|       return -1 | ||||
|     } else if (!this.prerelease.length && other.prerelease.length) { | ||||
|       return 1 | ||||
|     } else if (!this.prerelease.length && !other.prerelease.length) { | ||||
|       return 0 | ||||
|     } | ||||
|  | ||||
|     let i = 0 | ||||
|     do { | ||||
|       const a = this.prerelease[i] | ||||
|       const b = other.prerelease[i] | ||||
|       debug('prerelease compare', i, a, b) | ||||
|       if (a === undefined && b === undefined) { | ||||
|         return 0 | ||||
|       } else if (b === undefined) { | ||||
|         return 1 | ||||
|       } else if (a === undefined) { | ||||
|         return -1 | ||||
|       } else if (a === b) { | ||||
|         continue | ||||
|       } else { | ||||
|         return compareIdentifiers(a, b) | ||||
|       } | ||||
|     } while (++i) | ||||
|   } | ||||
|  | ||||
|   compareBuild (other) { | ||||
|     if (!(other instanceof SemVer)) { | ||||
|       other = new SemVer(other, this.options) | ||||
|     } | ||||
|  | ||||
|     let i = 0 | ||||
|     do { | ||||
|       const a = this.build[i] | ||||
|       const b = other.build[i] | ||||
|       debug('prerelease compare', i, a, b) | ||||
|       if (a === undefined && b === undefined) { | ||||
|         return 0 | ||||
|       } else if (b === undefined) { | ||||
|         return 1 | ||||
|       } else if (a === undefined) { | ||||
|         return -1 | ||||
|       } else if (a === b) { | ||||
|         continue | ||||
|       } else { | ||||
|         return compareIdentifiers(a, b) | ||||
|       } | ||||
|     } while (++i) | ||||
|   } | ||||
|  | ||||
|   // preminor will bump the version up to the next minor release, and immediately | ||||
|   // down to pre-release. premajor and prepatch work the same way. | ||||
|   inc (release, identifier) { | ||||
|     switch (release) { | ||||
|       case 'premajor': | ||||
|         this.prerelease.length = 0 | ||||
|         this.patch = 0 | ||||
|         this.minor = 0 | ||||
|         this.major++ | ||||
|         this.inc('pre', identifier) | ||||
|         break | ||||
|       case 'preminor': | ||||
|         this.prerelease.length = 0 | ||||
|         this.patch = 0 | ||||
|         this.minor++ | ||||
|         this.inc('pre', identifier) | ||||
|         break | ||||
|       case 'prepatch': | ||||
|         // If this is already a prerelease, it will bump to the next version | ||||
|         // drop any prereleases that might already exist, since they are not | ||||
|         // relevant at this point. | ||||
|         this.prerelease.length = 0 | ||||
|         this.inc('patch', identifier) | ||||
|         this.inc('pre', identifier) | ||||
|         break | ||||
|       // If the input is a non-prerelease version, this acts the same as | ||||
|       // prepatch. | ||||
|       case 'prerelease': | ||||
|         if (this.prerelease.length === 0) { | ||||
|           this.inc('patch', identifier) | ||||
|         } | ||||
|         this.inc('pre', identifier) | ||||
|         break | ||||
|  | ||||
|       case 'major': | ||||
|         // If this is a pre-major version, bump up to the same major version. | ||||
|         // Otherwise increment major. | ||||
|         // 1.0.0-5 bumps to 1.0.0 | ||||
|         // 1.1.0 bumps to 2.0.0 | ||||
|         if ( | ||||
|           this.minor !== 0 || | ||||
|           this.patch !== 0 || | ||||
|           this.prerelease.length === 0 | ||||
|         ) { | ||||
|           this.major++ | ||||
|         } | ||||
|         this.minor = 0 | ||||
|         this.patch = 0 | ||||
|         this.prerelease = [] | ||||
|         break | ||||
|       case 'minor': | ||||
|         // If this is a pre-minor version, bump up to the same minor version. | ||||
|         // Otherwise increment minor. | ||||
|         // 1.2.0-5 bumps to 1.2.0 | ||||
|         // 1.2.1 bumps to 1.3.0 | ||||
|         if (this.patch !== 0 || this.prerelease.length === 0) { | ||||
|           this.minor++ | ||||
|         } | ||||
|         this.patch = 0 | ||||
|         this.prerelease = [] | ||||
|         break | ||||
|       case 'patch': | ||||
|         // If this is not a pre-release version, it will increment the patch. | ||||
|         // If it is a pre-release it will bump up to the same patch version. | ||||
|         // 1.2.0-5 patches to 1.2.0 | ||||
|         // 1.2.0 patches to 1.2.1 | ||||
|         if (this.prerelease.length === 0) { | ||||
|           this.patch++ | ||||
|         } | ||||
|         this.prerelease = [] | ||||
|         break | ||||
|       // This probably shouldn't be used publicly. | ||||
|       // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. | ||||
|       case 'pre': | ||||
|         if (this.prerelease.length === 0) { | ||||
|           this.prerelease = [0] | ||||
|         } else { | ||||
|           let i = this.prerelease.length | ||||
|           while (--i >= 0) { | ||||
|             if (typeof this.prerelease[i] === 'number') { | ||||
|               this.prerelease[i]++ | ||||
|               i = -2 | ||||
|             } | ||||
|           } | ||||
|           if (i === -1) { | ||||
|             // didn't increment anything | ||||
|             this.prerelease.push(0) | ||||
|           } | ||||
|         } | ||||
|         if (identifier) { | ||||
|           // 1.2.0-beta.1 bumps to 1.2.0-beta.2, | ||||
|           // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 | ||||
|           if (compareIdentifiers(this.prerelease[0], identifier) === 0) { | ||||
|             if (isNaN(this.prerelease[1])) { | ||||
|               this.prerelease = [identifier, 0] | ||||
|             } | ||||
|           } else { | ||||
|             this.prerelease = [identifier, 0] | ||||
|           } | ||||
|         } | ||||
|         break | ||||
|  | ||||
|       default: | ||||
|         throw new Error(`invalid increment argument: ${release}`) | ||||
|     } | ||||
|     this.format() | ||||
|     this.raw = this.version | ||||
|     return this | ||||
|   } | ||||
| } | ||||
|  | ||||
| module.exports = SemVer | ||||
		Reference in New Issue
	
	Block a user