update dist

This commit is contained in:
panticmilos 2022-05-04 14:31:29 +02:00
parent 66b5fd10b7
commit 9056cd392d
2 changed files with 375 additions and 506 deletions

View file

@ -7143,80 +7143,75 @@ var MAX_SAFE_COMPONENT_LENGTH = 16
// The actual regexps go on exports.re // The actual regexps go on exports.re
var re = exports.re = [] var re = exports.re = []
var src = exports.src = [] var src = exports.src = []
var t = exports.tokens = {}
var R = 0 var R = 0
function tok (n) {
t[n] = R++
}
// The following Regular Expressions can be used for tokenizing, // The following Regular Expressions can be used for tokenizing,
// validating, and parsing SemVer version strings. // validating, and parsing SemVer version strings.
// ## Numeric Identifier // ## Numeric Identifier
// A single `0`, or a non-zero digit followed by zero or more digits. // A single `0`, or a non-zero digit followed by zero or more digits.
tok('NUMERICIDENTIFIER') var NUMERICIDENTIFIER = R++
src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*' src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'
tok('NUMERICIDENTIFIERLOOSE') var NUMERICIDENTIFIERLOOSE = R++
src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+' src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'
// ## Non-numeric Identifier // ## Non-numeric Identifier
// Zero or more digits, followed by a letter or hyphen, and then zero or // Zero or more digits, followed by a letter or hyphen, and then zero or
// more letters, digits, or hyphens. // more letters, digits, or hyphens.
tok('NONNUMERICIDENTIFIER') var NONNUMERICIDENTIFIER = R++
src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
// ## Main Version // ## Main Version
// Three dot-separated numeric identifiers. // Three dot-separated numeric identifiers.
tok('MAINVERSION') var MAINVERSION = R++
src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
'(' + src[t.NUMERICIDENTIFIER] + ')\\.' + '(' + src[NUMERICIDENTIFIER] + ')\\.' +
'(' + src[t.NUMERICIDENTIFIER] + ')' '(' + src[NUMERICIDENTIFIER] + ')'
tok('MAINVERSIONLOOSE') var MAINVERSIONLOOSE = R++
src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
'(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
'(' + src[t.NUMERICIDENTIFIERLOOSE] + ')' '(' + src[NUMERICIDENTIFIERLOOSE] + ')'
// ## Pre-release Version Identifier // ## Pre-release Version Identifier
// A numeric identifier, or a non-numeric identifier. // A numeric identifier, or a non-numeric identifier.
tok('PRERELEASEIDENTIFIER') var PRERELEASEIDENTIFIER = R++
src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] + src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
'|' + src[t.NONNUMERICIDENTIFIER] + ')' '|' + src[NONNUMERICIDENTIFIER] + ')'
tok('PRERELEASEIDENTIFIERLOOSE') var PRERELEASEIDENTIFIERLOOSE = R++
src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] + src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
'|' + src[t.NONNUMERICIDENTIFIER] + ')' '|' + src[NONNUMERICIDENTIFIER] + ')'
// ## Pre-release Version // ## Pre-release Version
// Hyphen, followed by one or more dot-separated pre-release version // Hyphen, followed by one or more dot-separated pre-release version
// identifiers. // identifiers.
tok('PRERELEASE') var PRERELEASE = R++
src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] + src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
'(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))' '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'
tok('PRERELEASELOOSE') var PRERELEASELOOSE = R++
src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] + src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
'(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))' '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'
// ## Build Metadata Identifier // ## Build Metadata Identifier
// Any combination of digits, letters, or hyphens. // Any combination of digits, letters, or hyphens.
tok('BUILDIDENTIFIER') var BUILDIDENTIFIER = R++
src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+' src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
// ## Build Metadata // ## Build Metadata
// Plus sign, followed by one or more period-separated build metadata // Plus sign, followed by one or more period-separated build metadata
// identifiers. // identifiers.
tok('BUILD') var BUILD = R++
src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] + src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
'(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))' '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'
// ## Full Version String // ## Full Version String
// A main version, followed optionally by a pre-release version and // A main version, followed optionally by a pre-release version and
@ -7227,133 +7222,129 @@ src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] +
// capturing group, because it should not ever be used in version // capturing group, because it should not ever be used in version
// comparison. // comparison.
tok('FULL') var FULL = R++
tok('FULLPLAIN') var FULLPLAIN = 'v?' + src[MAINVERSION] +
src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] + src[PRERELEASE] + '?' +
src[t.PRERELEASE] + '?' + src[BUILD] + '?'
src[t.BUILD] + '?'
src[t.FULL] = '^' + src[t.FULLPLAIN] + '$' src[FULL] = '^' + FULLPLAIN + '$'
// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. // like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
// common in the npm registry. // common in the npm registry.
tok('LOOSEPLAIN') var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] + src[PRERELEASELOOSE] + '?' +
src[t.PRERELEASELOOSE] + '?' + src[BUILD] + '?'
src[t.BUILD] + '?'
tok('LOOSE') var LOOSE = R++
src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$' src[LOOSE] = '^' + LOOSEPLAIN + '$'
tok('GTLT') var GTLT = R++
src[t.GTLT] = '((?:<|>)?=?)' src[GTLT] = '((?:<|>)?=?)'
// Something like "2.*" or "1.2.x". // Something like "2.*" or "1.2.x".
// Note that "x.x" is a valid xRange identifer, meaning "any version" // Note that "x.x" is a valid xRange identifer, meaning "any version"
// Only the first item is strictly required. // Only the first item is strictly required.
tok('XRANGEIDENTIFIERLOOSE') var XRANGEIDENTIFIERLOOSE = R++
src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
tok('XRANGEIDENTIFIER') var XRANGEIDENTIFIER = R++
src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*' src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'
tok('XRANGEPLAIN') var XRANGEPLAIN = R++
src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' + src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
'(?:' + src[t.PRERELEASE] + ')?' + '(?:' + src[PRERELEASE] + ')?' +
src[t.BUILD] + '?' + src[BUILD] + '?' +
')?)?' ')?)?'
tok('XRANGEPLAINLOOSE') var XRANGEPLAINLOOSE = R++
src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:' + src[t.PRERELEASELOOSE] + ')?' + '(?:' + src[PRERELEASELOOSE] + ')?' +
src[t.BUILD] + '?' + src[BUILD] + '?' +
')?)?' ')?)?'
tok('XRANGE') var XRANGE = R++
src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$' src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'
tok('XRANGELOOSE') var XRANGELOOSE = R++
src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$' src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'
// Coercion. // Coercion.
// Extract anything that could conceivably be a part of a valid semver // Extract anything that could conceivably be a part of a valid semver
tok('COERCE') var COERCE = R++
src[t.COERCE] = '(^|[^\\d])' + src[COERCE] = '(?:^|[^\\d])' +
'(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:$|[^\\d])' '(?:$|[^\\d])'
tok('COERCERTL')
re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g')
// Tilde ranges. // Tilde ranges.
// Meaning is "reasonably at or greater than" // Meaning is "reasonably at or greater than"
tok('LONETILDE') var LONETILDE = R++
src[t.LONETILDE] = '(?:~>?)' src[LONETILDE] = '(?:~>?)'
tok('TILDETRIM') var TILDETRIM = R++
src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+' src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'
re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g') re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')
var tildeTrimReplace = '$1~' var tildeTrimReplace = '$1~'
tok('TILDE') var TILDE = R++
src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$' src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'
tok('TILDELOOSE') var TILDELOOSE = R++
src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$' src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'
// Caret ranges. // Caret ranges.
// Meaning is "at least and backwards compatible with" // Meaning is "at least and backwards compatible with"
tok('LONECARET') var LONECARET = R++
src[t.LONECARET] = '(?:\\^)' src[LONECARET] = '(?:\\^)'
tok('CARETTRIM') var CARETTRIM = R++
src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+' src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'
re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g') re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')
var caretTrimReplace = '$1^' var caretTrimReplace = '$1^'
tok('CARET') var CARET = R++
src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$' src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'
tok('CARETLOOSE') var CARETLOOSE = R++
src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$' src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'
// A simple gt/lt/eq thing, or just "" to indicate "any version" // A simple gt/lt/eq thing, or just "" to indicate "any version"
tok('COMPARATORLOOSE') var COMPARATORLOOSE = R++
src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$' src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'
tok('COMPARATOR') var COMPARATOR = R++
src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$' src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'
// An expression to strip any whitespace between the gtlt and the thing // An expression to strip any whitespace between the gtlt and the thing
// it modifies, so that `> 1.2.3` ==> `>1.2.3` // it modifies, so that `> 1.2.3` ==> `>1.2.3`
tok('COMPARATORTRIM') var COMPARATORTRIM = R++
src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] + src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
'\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')' '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'
// this one has to use the /g flag // this one has to use the /g flag
re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g') re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')
var comparatorTrimReplace = '$1$2$3' var comparatorTrimReplace = '$1$2$3'
// Something like `1.2.3 - 1.2.4` // Something like `1.2.3 - 1.2.4`
// Note that these all use the loose form, because they'll be // Note that these all use the loose form, because they'll be
// checked against either the strict or loose comparator form // checked against either the strict or loose comparator form
// later. // later.
tok('HYPHENRANGE') var HYPHENRANGE = R++
src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' + src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
'\\s+-\\s+' + '\\s+-\\s+' +
'(' + src[t.XRANGEPLAIN] + ')' + '(' + src[XRANGEPLAIN] + ')' +
'\\s*$' '\\s*$'
tok('HYPHENRANGELOOSE') var HYPHENRANGELOOSE = R++
src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' + src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
'\\s+-\\s+' + '\\s+-\\s+' +
'(' + src[t.XRANGEPLAINLOOSE] + ')' + '(' + src[XRANGEPLAINLOOSE] + ')' +
'\\s*$' '\\s*$'
// Star ranges basically just allow anything at all. // Star ranges basically just allow anything at all.
tok('STAR') var STAR = R++
src[t.STAR] = '(<|>)?=?\\s*\\*' src[STAR] = '(<|>)?=?\\s*\\*'
// Compile to actual regexp objects. // Compile to actual regexp objects.
// All are flag-free, unless they were created above with a flag. // All are flag-free, unless they were created above with a flag.
@ -7385,7 +7376,7 @@ function parse (version, options) {
return null return null
} }
var r = options.loose ? re[t.LOOSE] : re[t.FULL] var r = options.loose ? re[LOOSE] : re[FULL]
if (!r.test(version)) { if (!r.test(version)) {
return null return null
} }
@ -7440,7 +7431,7 @@ function SemVer (version, options) {
this.options = options this.options = options
this.loose = !!options.loose this.loose = !!options.loose
var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])
if (!m) { if (!m) {
throw new TypeError('Invalid Version: ' + version) throw new TypeError('Invalid Version: ' + version)
@ -7901,7 +7892,7 @@ function Comparator (comp, options) {
var ANY = {} var ANY = {}
Comparator.prototype.parse = function (comp) { Comparator.prototype.parse = function (comp) {
var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
var m = comp.match(r) var m = comp.match(r)
if (!m) { if (!m) {
@ -8056,18 +8047,18 @@ Range.prototype.parseRange = function (range) {
var loose = this.options.loose var loose = this.options.loose
range = range.trim() range = range.trim()
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]
range = range.replace(hr, hyphenReplace) range = range.replace(hr, hyphenReplace)
debug('hyphen replace', range) debug('hyphen replace', range)
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)
debug('comparator trim', range, re[t.COMPARATORTRIM]) debug('comparator trim', range, re[COMPARATORTRIM])
// `~ 1.2.3` => `~1.2.3` // `~ 1.2.3` => `~1.2.3`
range = range.replace(re[t.TILDETRIM], tildeTrimReplace) range = range.replace(re[TILDETRIM], tildeTrimReplace)
// `^ 1.2.3` => `^1.2.3` // `^ 1.2.3` => `^1.2.3`
range = range.replace(re[t.CARETTRIM], caretTrimReplace) range = range.replace(re[CARETTRIM], caretTrimReplace)
// normalize spaces // normalize spaces
range = range.split(/\s+/).join(' ') range = range.split(/\s+/).join(' ')
@ -8075,7 +8066,7 @@ Range.prototype.parseRange = function (range) {
// At this point, the range is completely trimmed and // At this point, the range is completely trimmed and
// ready to be split into comparators. // ready to be split into comparators.
var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
var set = range.split(' ').map(function (comp) { var set = range.split(' ').map(function (comp) {
return parseComparator(comp, this.options) return parseComparator(comp, this.options)
}, this).join(' ').split(/\s+/) }, this).join(' ').split(/\s+/)
@ -8175,7 +8166,7 @@ function replaceTildes (comp, options) {
} }
function replaceTilde (comp, options) { function replaceTilde (comp, options) {
var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] var r = options.loose ? re[TILDELOOSE] : re[TILDE]
return comp.replace(r, function (_, M, m, p, pr) { return comp.replace(r, function (_, M, m, p, pr) {
debug('tilde', comp, _, M, m, p, pr) debug('tilde', comp, _, M, m, p, pr)
var ret var ret
@ -8216,7 +8207,7 @@ function replaceCarets (comp, options) {
function replaceCaret (comp, options) { function replaceCaret (comp, options) {
debug('caret', comp, options) debug('caret', comp, options)
var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] var r = options.loose ? re[CARETLOOSE] : re[CARET]
return comp.replace(r, function (_, M, m, p, pr) { return comp.replace(r, function (_, M, m, p, pr) {
debug('caret', comp, _, M, m, p, pr) debug('caret', comp, _, M, m, p, pr)
var ret var ret
@ -8275,7 +8266,7 @@ function replaceXRanges (comp, options) {
function replaceXRange (comp, options) { function replaceXRange (comp, options) {
comp = comp.trim() comp = comp.trim()
var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]
return comp.replace(r, function (ret, gtlt, M, m, p, pr) { return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
debug('xRange', comp, ret, gtlt, M, m, p, pr) debug('xRange', comp, ret, gtlt, M, m, p, pr)
var xM = isX(M) var xM = isX(M)
@ -8287,14 +8278,10 @@ function replaceXRange (comp, options) {
gtlt = '' 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 (xM) {
if (gtlt === '>' || gtlt === '<') { if (gtlt === '>' || gtlt === '<') {
// nothing is allowed // nothing is allowed
ret = '<0.0.0-0' ret = '<0.0.0'
} else { } else {
// nothing is forbidden // nothing is forbidden
ret = '*' ret = '*'
@ -8331,12 +8318,11 @@ function replaceXRange (comp, options) {
} }
} }
ret = gtlt + M + '.' + m + '.' + p + pr ret = gtlt + M + '.' + m + '.' + p
} else if (xm) { } else if (xm) {
ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
} else if (xp) { } else if (xp) {
ret = '>=' + M + '.' + m + '.0' + pr + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
' <' + M + '.' + (+m + 1) + '.0' + pr
} }
debug('xRange return', ret) debug('xRange return', ret)
@ -8350,10 +8336,10 @@ function replaceXRange (comp, options) {
function replaceStars (comp, options) { function replaceStars (comp, options) {
debug('replaceStars', comp, options) debug('replaceStars', comp, options)
// Looseness is ignored here. star is always as loose as it gets! // Looseness is ignored here. star is always as loose as it gets!
return comp.trim().replace(re[t.STAR], '') return comp.trim().replace(re[STAR], '')
} }
// This function is passed to string.replace(re[t.HYPHENRANGE]) // This function is passed to string.replace(re[HYPHENRANGE])
// M, m, patch, prerelease, build // M, m, patch, prerelease, build
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do // 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
@ -8664,49 +8650,19 @@ function coerce (version, options) {
return version return version
} }
if (typeof version === 'number') {
version = String(version)
}
if (typeof version !== 'string') { if (typeof version !== 'string') {
return null return null
} }
options = options || {} var match = version.match(re[COERCE])
var match = null if (match == null) {
if (!options.rtl) {
match = version.match(re[t.COERCE])
} else {
// Find the right-most coercible string that does not share
// a terminus with a more left-ward coercible string.
// Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
//
// Walk through the string checking with a /g regexp
// Manually set the index so as to pick up overlapping matches.
// Stop when we get a match that ends at the string end, since no
// coercible string can be more right-ward without the same terminus.
var next
while ((next = re[t.COERCERTL].exec(version)) &&
(!match || match.index + match[0].length !== version.length)
) {
if (!match ||
next.index + next[0].length !== match.index + match[0].length) {
match = next
}
re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
}
// leave it in a clean state
re[t.COERCERTL].lastIndex = -1
}
if (match === null) {
return null return null
} }
return parse(match[2] + return parse(match[1] +
'.' + (match[3] || '0') + '.' + (match[2] || '0') +
'.' + (match[4] || '0'), options) '.' + (match[3] || '0'), options)
} }

361
dist/setup/index.js vendored
View file

@ -10418,31 +10418,8 @@ exports.implementation = class URLImpl {
// Note: since nyc uses this module to output coverage, any lines // Note: since nyc uses this module to output coverage, any lines
// that are in the direct sync flow of nyc's outputCoverage are // that are in the direct sync flow of nyc's outputCoverage are
// ignored, since we can never get coverage for them. // ignored, since we can never get coverage for them.
// grab a reference to node's real process object right away
var process = global.process
const processOk = function (process) {
return process &&
typeof process === 'object' &&
typeof process.removeListener === 'function' &&
typeof process.emit === 'function' &&
typeof process.reallyExit === 'function' &&
typeof process.listeners === 'function' &&
typeof process.kill === 'function' &&
typeof process.pid === 'number' &&
typeof process.on === 'function'
}
// some kind of non-node environment, just no-op
/* istanbul ignore if */
if (!processOk(process)) {
module.exports = function () {
return function () {}
}
} else {
var assert = __webpack_require__(357) var assert = __webpack_require__(357)
var signals = __webpack_require__(654) var signals = __webpack_require__(654)
var isWin = /^win/i.test(process.platform)
var EE = __webpack_require__(614) var EE = __webpack_require__(614)
/* istanbul ignore if */ /* istanbul ignore if */
@ -10469,10 +10446,6 @@ if (!processOk(process)) {
} }
module.exports = function (cb, opts) { module.exports = function (cb, opts) {
/* istanbul ignore if */
if (!processOk(global.process)) {
return function () {}
}
assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler') assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')
if (loaded === false) { if (loaded === false) {
@ -10496,8 +10469,9 @@ if (!processOk(process)) {
return remove return remove
} }
var unload = function unload () { module.exports.unload = unload
if (!loaded || !processOk(global.process)) { function unload () {
if (!loaded) {
return return
} }
loaded = false loaded = false
@ -10511,10 +10485,8 @@ if (!processOk(process)) {
process.reallyExit = originalProcessReallyExit process.reallyExit = originalProcessReallyExit
emitter.count -= 1 emitter.count -= 1
} }
module.exports.unload = unload
var emit = function emit (event, code, signal) { function emit (event, code, signal) {
/* istanbul ignore if */
if (emitter.emitted[event]) { if (emitter.emitted[event]) {
return return
} }
@ -10526,10 +10498,6 @@ if (!processOk(process)) {
var sigListeners = {} var sigListeners = {}
signals.forEach(function (sig) { signals.forEach(function (sig) {
sigListeners[sig] = function listener () { sigListeners[sig] = function listener () {
/* istanbul ignore if */
if (!processOk(global.process)) {
return
}
// If there are no other listeners, an exit is coming! // If there are no other listeners, an exit is coming!
// Simplest way: remove us and then re-send the signal. // Simplest way: remove us and then re-send the signal.
// We know that this will kill the process, so we can // We know that this will kill the process, so we can
@ -10541,12 +10509,6 @@ if (!processOk(process)) {
/* istanbul ignore next */ /* istanbul ignore next */
emit('afterexit', null, sig) emit('afterexit', null, sig)
/* istanbul ignore next */ /* istanbul ignore next */
if (isWin && sig === 'SIGHUP') {
// "SIGHUP" throws an `ENOSYS` error on Windows,
// so use a supported signal instead
sig = 'SIGINT'
}
/* istanbul ignore next */
process.kill(process.pid, sig) process.kill(process.pid, sig)
} }
} }
@ -10556,10 +10518,12 @@ if (!processOk(process)) {
return signals return signals
} }
module.exports.load = load
var loaded = false var loaded = false
var load = function load () { function load () {
if (loaded || !processOk(global.process)) { if (loaded) {
return return
} }
loaded = true loaded = true
@ -10582,15 +10546,10 @@ if (!processOk(process)) {
process.emit = processEmit process.emit = processEmit
process.reallyExit = processReallyExit process.reallyExit = processReallyExit
} }
module.exports.load = load
var originalProcessReallyExit = process.reallyExit var originalProcessReallyExit = process.reallyExit
var processReallyExit = function processReallyExit (code) { function processReallyExit (code) {
/* istanbul ignore if */ process.exitCode = code || 0
if (!processOk(global.process)) {
return
}
process.exitCode = code || /* istanbul ignore next */ 0
emit('exit', process.exitCode, null) emit('exit', process.exitCode, null)
/* istanbul ignore next */ /* istanbul ignore next */
emit('afterexit', process.exitCode, null) emit('afterexit', process.exitCode, null)
@ -10599,24 +10558,20 @@ if (!processOk(process)) {
} }
var originalProcessEmit = process.emit var originalProcessEmit = process.emit
var processEmit = function processEmit (ev, arg) { function processEmit (ev, arg) {
if (ev === 'exit' && processOk(global.process)) { if (ev === 'exit') {
/* istanbul ignore else */
if (arg !== undefined) { if (arg !== undefined) {
process.exitCode = arg process.exitCode = arg
} }
var ret = originalProcessEmit.apply(this, arguments) var ret = originalProcessEmit.apply(this, arguments)
/* istanbul ignore next */
emit('exit', process.exitCode, null) emit('exit', process.exitCode, null)
/* istanbul ignore next */ /* istanbul ignore next */
emit('afterexit', process.exitCode, null) emit('afterexit', process.exitCode, null)
/* istanbul ignore next */
return ret return ret
} else { } else {
return originalProcessEmit.apply(this, arguments) return originalProcessEmit.apply(this, arguments)
} }
} }
}
/***/ }), /***/ }),
@ -10991,80 +10946,75 @@ var MAX_SAFE_COMPONENT_LENGTH = 16
// The actual regexps go on exports.re // The actual regexps go on exports.re
var re = exports.re = [] var re = exports.re = []
var src = exports.src = [] var src = exports.src = []
var t = exports.tokens = {}
var R = 0 var R = 0
function tok (n) {
t[n] = R++
}
// The following Regular Expressions can be used for tokenizing, // The following Regular Expressions can be used for tokenizing,
// validating, and parsing SemVer version strings. // validating, and parsing SemVer version strings.
// ## Numeric Identifier // ## Numeric Identifier
// A single `0`, or a non-zero digit followed by zero or more digits. // A single `0`, or a non-zero digit followed by zero or more digits.
tok('NUMERICIDENTIFIER') var NUMERICIDENTIFIER = R++
src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*' src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'
tok('NUMERICIDENTIFIERLOOSE') var NUMERICIDENTIFIERLOOSE = R++
src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+' src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'
// ## Non-numeric Identifier // ## Non-numeric Identifier
// Zero or more digits, followed by a letter or hyphen, and then zero or // Zero or more digits, followed by a letter or hyphen, and then zero or
// more letters, digits, or hyphens. // more letters, digits, or hyphens.
tok('NONNUMERICIDENTIFIER') var NONNUMERICIDENTIFIER = R++
src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
// ## Main Version // ## Main Version
// Three dot-separated numeric identifiers. // Three dot-separated numeric identifiers.
tok('MAINVERSION') var MAINVERSION = R++
src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
'(' + src[t.NUMERICIDENTIFIER] + ')\\.' + '(' + src[NUMERICIDENTIFIER] + ')\\.' +
'(' + src[t.NUMERICIDENTIFIER] + ')' '(' + src[NUMERICIDENTIFIER] + ')'
tok('MAINVERSIONLOOSE') var MAINVERSIONLOOSE = R++
src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
'(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
'(' + src[t.NUMERICIDENTIFIERLOOSE] + ')' '(' + src[NUMERICIDENTIFIERLOOSE] + ')'
// ## Pre-release Version Identifier // ## Pre-release Version Identifier
// A numeric identifier, or a non-numeric identifier. // A numeric identifier, or a non-numeric identifier.
tok('PRERELEASEIDENTIFIER') var PRERELEASEIDENTIFIER = R++
src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] + src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
'|' + src[t.NONNUMERICIDENTIFIER] + ')' '|' + src[NONNUMERICIDENTIFIER] + ')'
tok('PRERELEASEIDENTIFIERLOOSE') var PRERELEASEIDENTIFIERLOOSE = R++
src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] + src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
'|' + src[t.NONNUMERICIDENTIFIER] + ')' '|' + src[NONNUMERICIDENTIFIER] + ')'
// ## Pre-release Version // ## Pre-release Version
// Hyphen, followed by one or more dot-separated pre-release version // Hyphen, followed by one or more dot-separated pre-release version
// identifiers. // identifiers.
tok('PRERELEASE') var PRERELEASE = R++
src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] + src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
'(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))' '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'
tok('PRERELEASELOOSE') var PRERELEASELOOSE = R++
src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] + src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
'(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))' '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'
// ## Build Metadata Identifier // ## Build Metadata Identifier
// Any combination of digits, letters, or hyphens. // Any combination of digits, letters, or hyphens.
tok('BUILDIDENTIFIER') var BUILDIDENTIFIER = R++
src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+' src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
// ## Build Metadata // ## Build Metadata
// Plus sign, followed by one or more period-separated build metadata // Plus sign, followed by one or more period-separated build metadata
// identifiers. // identifiers.
tok('BUILD') var BUILD = R++
src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] + src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
'(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))' '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'
// ## Full Version String // ## Full Version String
// A main version, followed optionally by a pre-release version and // A main version, followed optionally by a pre-release version and
@ -11075,133 +11025,129 @@ src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] +
// capturing group, because it should not ever be used in version // capturing group, because it should not ever be used in version
// comparison. // comparison.
tok('FULL') var FULL = R++
tok('FULLPLAIN') var FULLPLAIN = 'v?' + src[MAINVERSION] +
src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] + src[PRERELEASE] + '?' +
src[t.PRERELEASE] + '?' + src[BUILD] + '?'
src[t.BUILD] + '?'
src[t.FULL] = '^' + src[t.FULLPLAIN] + '$' src[FULL] = '^' + FULLPLAIN + '$'
// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. // like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
// common in the npm registry. // common in the npm registry.
tok('LOOSEPLAIN') var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] + src[PRERELEASELOOSE] + '?' +
src[t.PRERELEASELOOSE] + '?' + src[BUILD] + '?'
src[t.BUILD] + '?'
tok('LOOSE') var LOOSE = R++
src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$' src[LOOSE] = '^' + LOOSEPLAIN + '$'
tok('GTLT') var GTLT = R++
src[t.GTLT] = '((?:<|>)?=?)' src[GTLT] = '((?:<|>)?=?)'
// Something like "2.*" or "1.2.x". // Something like "2.*" or "1.2.x".
// Note that "x.x" is a valid xRange identifer, meaning "any version" // Note that "x.x" is a valid xRange identifer, meaning "any version"
// Only the first item is strictly required. // Only the first item is strictly required.
tok('XRANGEIDENTIFIERLOOSE') var XRANGEIDENTIFIERLOOSE = R++
src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
tok('XRANGEIDENTIFIER') var XRANGEIDENTIFIER = R++
src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*' src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'
tok('XRANGEPLAIN') var XRANGEPLAIN = R++
src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' + src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
'(?:' + src[t.PRERELEASE] + ')?' + '(?:' + src[PRERELEASE] + ')?' +
src[t.BUILD] + '?' + src[BUILD] + '?' +
')?)?' ')?)?'
tok('XRANGEPLAINLOOSE') var XRANGEPLAINLOOSE = R++
src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:' + src[t.PRERELEASELOOSE] + ')?' + '(?:' + src[PRERELEASELOOSE] + ')?' +
src[t.BUILD] + '?' + src[BUILD] + '?' +
')?)?' ')?)?'
tok('XRANGE') var XRANGE = R++
src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$' src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'
tok('XRANGELOOSE') var XRANGELOOSE = R++
src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$' src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'
// Coercion. // Coercion.
// Extract anything that could conceivably be a part of a valid semver // Extract anything that could conceivably be a part of a valid semver
tok('COERCE') var COERCE = R++
src[t.COERCE] = '(^|[^\\d])' + src[COERCE] = '(?:^|[^\\d])' +
'(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:$|[^\\d])' '(?:$|[^\\d])'
tok('COERCERTL')
re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g')
// Tilde ranges. // Tilde ranges.
// Meaning is "reasonably at or greater than" // Meaning is "reasonably at or greater than"
tok('LONETILDE') var LONETILDE = R++
src[t.LONETILDE] = '(?:~>?)' src[LONETILDE] = '(?:~>?)'
tok('TILDETRIM') var TILDETRIM = R++
src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+' src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'
re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g') re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')
var tildeTrimReplace = '$1~' var tildeTrimReplace = '$1~'
tok('TILDE') var TILDE = R++
src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$' src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'
tok('TILDELOOSE') var TILDELOOSE = R++
src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$' src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'
// Caret ranges. // Caret ranges.
// Meaning is "at least and backwards compatible with" // Meaning is "at least and backwards compatible with"
tok('LONECARET') var LONECARET = R++
src[t.LONECARET] = '(?:\\^)' src[LONECARET] = '(?:\\^)'
tok('CARETTRIM') var CARETTRIM = R++
src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+' src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'
re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g') re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')
var caretTrimReplace = '$1^' var caretTrimReplace = '$1^'
tok('CARET') var CARET = R++
src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$' src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'
tok('CARETLOOSE') var CARETLOOSE = R++
src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$' src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'
// A simple gt/lt/eq thing, or just "" to indicate "any version" // A simple gt/lt/eq thing, or just "" to indicate "any version"
tok('COMPARATORLOOSE') var COMPARATORLOOSE = R++
src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$' src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'
tok('COMPARATOR') var COMPARATOR = R++
src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$' src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'
// An expression to strip any whitespace between the gtlt and the thing // An expression to strip any whitespace between the gtlt and the thing
// it modifies, so that `> 1.2.3` ==> `>1.2.3` // it modifies, so that `> 1.2.3` ==> `>1.2.3`
tok('COMPARATORTRIM') var COMPARATORTRIM = R++
src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] + src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
'\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')' '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'
// this one has to use the /g flag // this one has to use the /g flag
re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g') re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')
var comparatorTrimReplace = '$1$2$3' var comparatorTrimReplace = '$1$2$3'
// Something like `1.2.3 - 1.2.4` // Something like `1.2.3 - 1.2.4`
// Note that these all use the loose form, because they'll be // Note that these all use the loose form, because they'll be
// checked against either the strict or loose comparator form // checked against either the strict or loose comparator form
// later. // later.
tok('HYPHENRANGE') var HYPHENRANGE = R++
src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' + src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
'\\s+-\\s+' + '\\s+-\\s+' +
'(' + src[t.XRANGEPLAIN] + ')' + '(' + src[XRANGEPLAIN] + ')' +
'\\s*$' '\\s*$'
tok('HYPHENRANGELOOSE') var HYPHENRANGELOOSE = R++
src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' + src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
'\\s+-\\s+' + '\\s+-\\s+' +
'(' + src[t.XRANGEPLAINLOOSE] + ')' + '(' + src[XRANGEPLAINLOOSE] + ')' +
'\\s*$' '\\s*$'
// Star ranges basically just allow anything at all. // Star ranges basically just allow anything at all.
tok('STAR') var STAR = R++
src[t.STAR] = '(<|>)?=?\\s*\\*' src[STAR] = '(<|>)?=?\\s*\\*'
// Compile to actual regexp objects. // Compile to actual regexp objects.
// All are flag-free, unless they were created above with a flag. // All are flag-free, unless they were created above with a flag.
@ -11233,7 +11179,7 @@ function parse (version, options) {
return null return null
} }
var r = options.loose ? re[t.LOOSE] : re[t.FULL] var r = options.loose ? re[LOOSE] : re[FULL]
if (!r.test(version)) { if (!r.test(version)) {
return null return null
} }
@ -11288,7 +11234,7 @@ function SemVer (version, options) {
this.options = options this.options = options
this.loose = !!options.loose this.loose = !!options.loose
var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])
if (!m) { if (!m) {
throw new TypeError('Invalid Version: ' + version) throw new TypeError('Invalid Version: ' + version)
@ -11749,7 +11695,7 @@ function Comparator (comp, options) {
var ANY = {} var ANY = {}
Comparator.prototype.parse = function (comp) { Comparator.prototype.parse = function (comp) {
var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
var m = comp.match(r) var m = comp.match(r)
if (!m) { if (!m) {
@ -11904,18 +11850,18 @@ Range.prototype.parseRange = function (range) {
var loose = this.options.loose var loose = this.options.loose
range = range.trim() range = range.trim()
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]
range = range.replace(hr, hyphenReplace) range = range.replace(hr, hyphenReplace)
debug('hyphen replace', range) debug('hyphen replace', range)
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)
debug('comparator trim', range, re[t.COMPARATORTRIM]) debug('comparator trim', range, re[COMPARATORTRIM])
// `~ 1.2.3` => `~1.2.3` // `~ 1.2.3` => `~1.2.3`
range = range.replace(re[t.TILDETRIM], tildeTrimReplace) range = range.replace(re[TILDETRIM], tildeTrimReplace)
// `^ 1.2.3` => `^1.2.3` // `^ 1.2.3` => `^1.2.3`
range = range.replace(re[t.CARETTRIM], caretTrimReplace) range = range.replace(re[CARETTRIM], caretTrimReplace)
// normalize spaces // normalize spaces
range = range.split(/\s+/).join(' ') range = range.split(/\s+/).join(' ')
@ -11923,7 +11869,7 @@ Range.prototype.parseRange = function (range) {
// At this point, the range is completely trimmed and // At this point, the range is completely trimmed and
// ready to be split into comparators. // ready to be split into comparators.
var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
var set = range.split(' ').map(function (comp) { var set = range.split(' ').map(function (comp) {
return parseComparator(comp, this.options) return parseComparator(comp, this.options)
}, this).join(' ').split(/\s+/) }, this).join(' ').split(/\s+/)
@ -12023,7 +11969,7 @@ function replaceTildes (comp, options) {
} }
function replaceTilde (comp, options) { function replaceTilde (comp, options) {
var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] var r = options.loose ? re[TILDELOOSE] : re[TILDE]
return comp.replace(r, function (_, M, m, p, pr) { return comp.replace(r, function (_, M, m, p, pr) {
debug('tilde', comp, _, M, m, p, pr) debug('tilde', comp, _, M, m, p, pr)
var ret var ret
@ -12064,7 +12010,7 @@ function replaceCarets (comp, options) {
function replaceCaret (comp, options) { function replaceCaret (comp, options) {
debug('caret', comp, options) debug('caret', comp, options)
var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] var r = options.loose ? re[CARETLOOSE] : re[CARET]
return comp.replace(r, function (_, M, m, p, pr) { return comp.replace(r, function (_, M, m, p, pr) {
debug('caret', comp, _, M, m, p, pr) debug('caret', comp, _, M, m, p, pr)
var ret var ret
@ -12123,7 +12069,7 @@ function replaceXRanges (comp, options) {
function replaceXRange (comp, options) { function replaceXRange (comp, options) {
comp = comp.trim() comp = comp.trim()
var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]
return comp.replace(r, function (ret, gtlt, M, m, p, pr) { return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
debug('xRange', comp, ret, gtlt, M, m, p, pr) debug('xRange', comp, ret, gtlt, M, m, p, pr)
var xM = isX(M) var xM = isX(M)
@ -12135,14 +12081,10 @@ function replaceXRange (comp, options) {
gtlt = '' 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 (xM) {
if (gtlt === '>' || gtlt === '<') { if (gtlt === '>' || gtlt === '<') {
// nothing is allowed // nothing is allowed
ret = '<0.0.0-0' ret = '<0.0.0'
} else { } else {
// nothing is forbidden // nothing is forbidden
ret = '*' ret = '*'
@ -12179,12 +12121,11 @@ function replaceXRange (comp, options) {
} }
} }
ret = gtlt + M + '.' + m + '.' + p + pr ret = gtlt + M + '.' + m + '.' + p
} else if (xm) { } else if (xm) {
ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
} else if (xp) { } else if (xp) {
ret = '>=' + M + '.' + m + '.0' + pr + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
' <' + M + '.' + (+m + 1) + '.0' + pr
} }
debug('xRange return', ret) debug('xRange return', ret)
@ -12198,10 +12139,10 @@ function replaceXRange (comp, options) {
function replaceStars (comp, options) { function replaceStars (comp, options) {
debug('replaceStars', comp, options) debug('replaceStars', comp, options)
// Looseness is ignored here. star is always as loose as it gets! // Looseness is ignored here. star is always as loose as it gets!
return comp.trim().replace(re[t.STAR], '') return comp.trim().replace(re[STAR], '')
} }
// This function is passed to string.replace(re[t.HYPHENRANGE]) // This function is passed to string.replace(re[HYPHENRANGE])
// M, m, patch, prerelease, build // M, m, patch, prerelease, build
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do // 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
@ -12512,49 +12453,19 @@ function coerce (version, options) {
return version return version
} }
if (typeof version === 'number') {
version = String(version)
}
if (typeof version !== 'string') { if (typeof version !== 'string') {
return null return null
} }
options = options || {} var match = version.match(re[COERCE])
var match = null if (match == null) {
if (!options.rtl) {
match = version.match(re[t.COERCE])
} else {
// Find the right-most coercible string that does not share
// a terminus with a more left-ward coercible string.
// Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
//
// Walk through the string checking with a /g regexp
// Manually set the index so as to pick up overlapping matches.
// Stop when we get a match that ends at the string end, since no
// coercible string can be more right-ward without the same terminus.
var next
while ((next = re[t.COERCERTL].exec(version)) &&
(!match || match.index + match[0].length !== version.length)
) {
if (!match ||
next.index + next[0].length !== match.index + match[0].length) {
match = next
}
re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
}
// leave it in a clean state
re[t.COERCERTL].lastIndex = -1
}
if (match === null) {
return null return null
} }
return parse(match[2] + return parse(match[1] +
'.' + (match[3] || '0') + '.' + (match[2] || '0') +
'.' + (match[4] || '0'), options) '.' + (match[3] || '0'), options)
} }
@ -62677,7 +62588,9 @@ function queryDistForMatch(versionSpec, arch = os.arch()) {
} }
let versions = []; let versions = [];
let nodeVersions = yield installer.getVersionsFromDist(); let nodeVersions = yield installer.getVersionsFromDist();
if (versionSpec === 'current' || versionSpec === 'latest' || versionSpec === 'node') { if (versionSpec === 'current' ||
versionSpec === 'latest' ||
versionSpec === 'node') {
core.info(`getting latest node version...`); core.info(`getting latest node version...`);
return nodeVersions[0].version; return nodeVersions[0].version;
} }