|
|
@ -1892,10 +1892,10 @@ function serial(list, iterator, callback)
|
|
|
|
module.exports = minimatch
|
|
|
|
module.exports = minimatch
|
|
|
|
minimatch.Minimatch = Minimatch
|
|
|
|
minimatch.Minimatch = Minimatch
|
|
|
|
|
|
|
|
|
|
|
|
var path = { sep: '/' }
|
|
|
|
var path = (function () { try { return __webpack_require__(622) } catch (e) {}}()) || {
|
|
|
|
try {
|
|
|
|
sep: '/'
|
|
|
|
path = __webpack_require__(622)
|
|
|
|
}
|
|
|
|
} catch (er) {}
|
|
|
|
minimatch.sep = path.sep
|
|
|
|
|
|
|
|
|
|
|
|
var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
|
|
|
|
var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
|
|
|
|
var expand = __webpack_require__(306)
|
|
|
|
var expand = __webpack_require__(306)
|
|
|
@ -1947,43 +1947,64 @@ function filter (pattern, options) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function ext (a, b) {
|
|
|
|
function ext (a, b) {
|
|
|
|
a = a || {}
|
|
|
|
|
|
|
|
b = b || {}
|
|
|
|
b = b || {}
|
|
|
|
var t = {}
|
|
|
|
var t = {}
|
|
|
|
Object.keys(b).forEach(function (k) {
|
|
|
|
|
|
|
|
t[k] = b[k]
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
Object.keys(a).forEach(function (k) {
|
|
|
|
Object.keys(a).forEach(function (k) {
|
|
|
|
t[k] = a[k]
|
|
|
|
t[k] = a[k]
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
Object.keys(b).forEach(function (k) {
|
|
|
|
|
|
|
|
t[k] = b[k]
|
|
|
|
|
|
|
|
})
|
|
|
|
return t
|
|
|
|
return t
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
minimatch.defaults = function (def) {
|
|
|
|
minimatch.defaults = function (def) {
|
|
|
|
if (!def || !Object.keys(def).length) return minimatch
|
|
|
|
if (!def || typeof def !== 'object' || !Object.keys(def).length) {
|
|
|
|
|
|
|
|
return minimatch
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var orig = minimatch
|
|
|
|
var orig = minimatch
|
|
|
|
|
|
|
|
|
|
|
|
var m = function minimatch (p, pattern, options) {
|
|
|
|
var m = function minimatch (p, pattern, options) {
|
|
|
|
return orig.minimatch(p, pattern, ext(def, options))
|
|
|
|
return orig(p, pattern, ext(def, options))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m.Minimatch = function Minimatch (pattern, options) {
|
|
|
|
m.Minimatch = function Minimatch (pattern, options) {
|
|
|
|
return new orig.Minimatch(pattern, ext(def, options))
|
|
|
|
return new orig.Minimatch(pattern, ext(def, options))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
m.Minimatch.defaults = function defaults (options) {
|
|
|
|
|
|
|
|
return orig.defaults(ext(def, options)).Minimatch
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m.filter = function filter (pattern, options) {
|
|
|
|
|
|
|
|
return orig.filter(pattern, ext(def, options))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m.defaults = function defaults (options) {
|
|
|
|
|
|
|
|
return orig.defaults(ext(def, options))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m.makeRe = function makeRe (pattern, options) {
|
|
|
|
|
|
|
|
return orig.makeRe(pattern, ext(def, options))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m.braceExpand = function braceExpand (pattern, options) {
|
|
|
|
|
|
|
|
return orig.braceExpand(pattern, ext(def, options))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m.match = function (list, pattern, options) {
|
|
|
|
|
|
|
|
return orig.match(list, pattern, ext(def, options))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return m
|
|
|
|
return m
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Minimatch.defaults = function (def) {
|
|
|
|
Minimatch.defaults = function (def) {
|
|
|
|
if (!def || !Object.keys(def).length) return Minimatch
|
|
|
|
|
|
|
|
return minimatch.defaults(def).Minimatch
|
|
|
|
return minimatch.defaults(def).Minimatch
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function minimatch (p, pattern, options) {
|
|
|
|
function minimatch (p, pattern, options) {
|
|
|
|
if (typeof pattern !== 'string') {
|
|
|
|
assertValidPattern(pattern)
|
|
|
|
throw new TypeError('glob pattern string required')
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!options) options = {}
|
|
|
|
if (!options) options = {}
|
|
|
|
|
|
|
|
|
|
|
@ -1992,9 +2013,6 @@ function minimatch (p, pattern, options) {
|
|
|
|
return false
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// "" only matches ""
|
|
|
|
|
|
|
|
if (pattern.trim() === '') return p === ''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return new Minimatch(pattern, options).match(p)
|
|
|
|
return new Minimatch(pattern, options).match(p)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -2003,15 +2021,14 @@ function Minimatch (pattern, options) {
|
|
|
|
return new Minimatch(pattern, options)
|
|
|
|
return new Minimatch(pattern, options)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (typeof pattern !== 'string') {
|
|
|
|
assertValidPattern(pattern)
|
|
|
|
throw new TypeError('glob pattern string required')
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!options) options = {}
|
|
|
|
if (!options) options = {}
|
|
|
|
|
|
|
|
|
|
|
|
pattern = pattern.trim()
|
|
|
|
pattern = pattern.trim()
|
|
|
|
|
|
|
|
|
|
|
|
// windows support: need to use /, not \
|
|
|
|
// windows support: need to use /, not \
|
|
|
|
if (path.sep !== '/') {
|
|
|
|
if (!options.allowWindowsEscape && path.sep !== '/') {
|
|
|
|
pattern = pattern.split(path.sep).join('/')
|
|
|
|
pattern = pattern.split(path.sep).join('/')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -2022,6 +2039,7 @@ function Minimatch (pattern, options) {
|
|
|
|
this.negate = false
|
|
|
|
this.negate = false
|
|
|
|
this.comment = false
|
|
|
|
this.comment = false
|
|
|
|
this.empty = false
|
|
|
|
this.empty = false
|
|
|
|
|
|
|
|
this.partial = !!options.partial
|
|
|
|
|
|
|
|
|
|
|
|
// make the set of regexps etc.
|
|
|
|
// make the set of regexps etc.
|
|
|
|
this.make()
|
|
|
|
this.make()
|
|
|
@ -2031,9 +2049,6 @@ Minimatch.prototype.debug = function () {}
|
|
|
|
|
|
|
|
|
|
|
|
Minimatch.prototype.make = make
|
|
|
|
Minimatch.prototype.make = make
|
|
|
|
function make () {
|
|
|
|
function make () {
|
|
|
|
// don't do it more than once.
|
|
|
|
|
|
|
|
if (this._made) return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var pattern = this.pattern
|
|
|
|
var pattern = this.pattern
|
|
|
|
var options = this.options
|
|
|
|
var options = this.options
|
|
|
|
|
|
|
|
|
|
|
@ -2053,7 +2068,7 @@ function make () {
|
|
|
|
// step 2: expand braces
|
|
|
|
// step 2: expand braces
|
|
|
|
var set = this.globSet = this.braceExpand()
|
|
|
|
var set = this.globSet = this.braceExpand()
|
|
|
|
|
|
|
|
|
|
|
|
if (options.debug) this.debug = console.error
|
|
|
|
if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }
|
|
|
|
|
|
|
|
|
|
|
|
this.debug(this.pattern, set)
|
|
|
|
this.debug(this.pattern, set)
|
|
|
|
|
|
|
|
|
|
|
@ -2133,12 +2148,11 @@ function braceExpand (pattern, options) {
|
|
|
|
pattern = typeof pattern === 'undefined'
|
|
|
|
pattern = typeof pattern === 'undefined'
|
|
|
|
? this.pattern : pattern
|
|
|
|
? this.pattern : pattern
|
|
|
|
|
|
|
|
|
|
|
|
if (typeof pattern === 'undefined') {
|
|
|
|
assertValidPattern(pattern)
|
|
|
|
throw new TypeError('undefined pattern')
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (options.nobrace ||
|
|
|
|
// Thanks to Yeting Li <https://github.com/yetingli> for
|
|
|
|
!pattern.match(/\{.*\}/)) {
|
|
|
|
// improving this regexp to avoid a ReDOS vulnerability.
|
|
|
|
|
|
|
|
if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
|
|
|
|
// shortcut. no need to expand.
|
|
|
|
// shortcut. no need to expand.
|
|
|
|
return [pattern]
|
|
|
|
return [pattern]
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2146,6 +2160,17 @@ function braceExpand (pattern, options) {
|
|
|
|
return expand(pattern)
|
|
|
|
return expand(pattern)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var MAX_PATTERN_LENGTH = 1024 * 64
|
|
|
|
|
|
|
|
var assertValidPattern = function (pattern) {
|
|
|
|
|
|
|
|
if (typeof pattern !== 'string') {
|
|
|
|
|
|
|
|
throw new TypeError('invalid pattern')
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pattern.length > MAX_PATTERN_LENGTH) {
|
|
|
|
|
|
|
|
throw new TypeError('pattern is too long')
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// parse a component of the expanded set.
|
|
|
|
// parse a component of the expanded set.
|
|
|
|
// At this point, no pattern may contain "/" in it
|
|
|
|
// At this point, no pattern may contain "/" in it
|
|
|
|
// so we're going to return a 2d array, where each entry is the full
|
|
|
|
// so we're going to return a 2d array, where each entry is the full
|
|
|
@ -2160,14 +2185,17 @@ function braceExpand (pattern, options) {
|
|
|
|
Minimatch.prototype.parse = parse
|
|
|
|
Minimatch.prototype.parse = parse
|
|
|
|
var SUBPARSE = {}
|
|
|
|
var SUBPARSE = {}
|
|
|
|
function parse (pattern, isSub) {
|
|
|
|
function parse (pattern, isSub) {
|
|
|
|
if (pattern.length > 1024 * 64) {
|
|
|
|
assertValidPattern(pattern)
|
|
|
|
throw new TypeError('pattern is too long')
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var options = this.options
|
|
|
|
var options = this.options
|
|
|
|
|
|
|
|
|
|
|
|
// shortcuts
|
|
|
|
// shortcuts
|
|
|
|
if (!options.noglobstar && pattern === '**') return GLOBSTAR
|
|
|
|
if (pattern === '**') {
|
|
|
|
|
|
|
|
if (!options.noglobstar)
|
|
|
|
|
|
|
|
return GLOBSTAR
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
pattern = '*'
|
|
|
|
|
|
|
|
}
|
|
|
|
if (pattern === '') return ''
|
|
|
|
if (pattern === '') return ''
|
|
|
|
|
|
|
|
|
|
|
|
var re = ''
|
|
|
|
var re = ''
|
|
|
@ -2223,10 +2251,12 @@ function parse (pattern, isSub) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
switch (c) {
|
|
|
|
switch (c) {
|
|
|
|
case '/':
|
|
|
|
/* istanbul ignore next */
|
|
|
|
|
|
|
|
case '/': {
|
|
|
|
// completely not allowed, even escaped.
|
|
|
|
// completely not allowed, even escaped.
|
|
|
|
// Should already be path-split by now.
|
|
|
|
// Should already be path-split by now.
|
|
|
|
return false
|
|
|
|
return false
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case '\\':
|
|
|
|
case '\\':
|
|
|
|
clearStateChar()
|
|
|
|
clearStateChar()
|
|
|
@ -2345,25 +2375,23 @@ function parse (pattern, isSub) {
|
|
|
|
|
|
|
|
|
|
|
|
// handle the case where we left a class open.
|
|
|
|
// handle the case where we left a class open.
|
|
|
|
// "[z-a]" is valid, equivalent to "\[z-a\]"
|
|
|
|
// "[z-a]" is valid, equivalent to "\[z-a\]"
|
|
|
|
if (inClass) {
|
|
|
|
// split where the last [ was, make sure we don't have
|
|
|
|
// split where the last [ was, make sure we don't have
|
|
|
|
// an invalid re. if so, re-walk the contents of the
|
|
|
|
// an invalid re. if so, re-walk the contents of the
|
|
|
|
// would-be class to re-translate any characters that
|
|
|
|
// would-be class to re-translate any characters that
|
|
|
|
// were passed through as-is
|
|
|
|
// were passed through as-is
|
|
|
|
// TODO: It would probably be faster to determine this
|
|
|
|
// TODO: It would probably be faster to determine this
|
|
|
|
// without a try/catch and a new RegExp, but it's tricky
|
|
|
|
// without a try/catch and a new RegExp, but it's tricky
|
|
|
|
// to do safely. For now, this is safe and works.
|
|
|
|
// to do safely. For now, this is safe and works.
|
|
|
|
var cs = pattern.substring(classStart + 1, i)
|
|
|
|
var cs = pattern.substring(classStart + 1, i)
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
RegExp('[' + cs + ']')
|
|
|
|
RegExp('[' + cs + ']')
|
|
|
|
} catch (er) {
|
|
|
|
} catch (er) {
|
|
|
|
// not a valid class!
|
|
|
|
// not a valid class!
|
|
|
|
var sp = this.parse(cs, SUBPARSE)
|
|
|
|
var sp = this.parse(cs, SUBPARSE)
|
|
|
|
re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
|
|
|
|
re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
|
|
|
|
hasMagic = hasMagic || sp[1]
|
|
|
|
hasMagic = hasMagic || sp[1]
|
|
|
|
inClass = false
|
|
|
|
inClass = false
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// finish up the class.
|
|
|
|
// finish up the class.
|
|
|
@ -2447,9 +2475,7 @@ function parse (pattern, isSub) {
|
|
|
|
// something that could conceivably capture a dot
|
|
|
|
// something that could conceivably capture a dot
|
|
|
|
var addPatternStart = false
|
|
|
|
var addPatternStart = false
|
|
|
|
switch (re.charAt(0)) {
|
|
|
|
switch (re.charAt(0)) {
|
|
|
|
case '.':
|
|
|
|
case '[': case '.': case '(': addPatternStart = true
|
|
|
|
case '[':
|
|
|
|
|
|
|
|
case '(': addPatternStart = true
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Hack to work around lack of negative lookbehind in JS
|
|
|
|
// Hack to work around lack of negative lookbehind in JS
|
|
|
@ -2511,7 +2537,7 @@ function parse (pattern, isSub) {
|
|
|
|
var flags = options.nocase ? 'i' : ''
|
|
|
|
var flags = options.nocase ? 'i' : ''
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
var regExp = new RegExp('^' + re + '$', flags)
|
|
|
|
var regExp = new RegExp('^' + re + '$', flags)
|
|
|
|
} catch (er) {
|
|
|
|
} catch (er) /* istanbul ignore next - should be impossible */ {
|
|
|
|
// If it was an invalid regular expression, then it can't match
|
|
|
|
// If it was an invalid regular expression, then it can't match
|
|
|
|
// anything. This trick looks for a character after the end of
|
|
|
|
// anything. This trick looks for a character after the end of
|
|
|
|
// the string, which is of course impossible, except in multi-line
|
|
|
|
// the string, which is of course impossible, except in multi-line
|
|
|
@ -2569,7 +2595,7 @@ function makeRe () {
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
this.regexp = new RegExp(re, flags)
|
|
|
|
this.regexp = new RegExp(re, flags)
|
|
|
|
} catch (ex) {
|
|
|
|
} catch (ex) /* istanbul ignore next - should be impossible */ {
|
|
|
|
this.regexp = false
|
|
|
|
this.regexp = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return this.regexp
|
|
|
|
return this.regexp
|
|
|
@ -2587,8 +2613,8 @@ minimatch.match = function (list, pattern, options) {
|
|
|
|
return list
|
|
|
|
return list
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Minimatch.prototype.match = match
|
|
|
|
Minimatch.prototype.match = function match (f, partial) {
|
|
|
|
function match (f, partial) {
|
|
|
|
if (typeof partial === 'undefined') partial = this.partial
|
|
|
|
this.debug('match', f, this.pattern)
|
|
|
|
this.debug('match', f, this.pattern)
|
|
|
|
// short-circuit in the case of busted things.
|
|
|
|
// short-circuit in the case of busted things.
|
|
|
|
// comments, etc.
|
|
|
|
// comments, etc.
|
|
|
@ -2670,6 +2696,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
|
|
|
|
|
|
|
|
|
|
|
|
// should be impossible.
|
|
|
|
// should be impossible.
|
|
|
|
// some invalid regexp stuff in the set.
|
|
|
|
// some invalid regexp stuff in the set.
|
|
|
|
|
|
|
|
/* istanbul ignore if */
|
|
|
|
if (p === false) return false
|
|
|
|
if (p === false) return false
|
|
|
|
|
|
|
|
|
|
|
|
if (p === GLOBSTAR) {
|
|
|
|
if (p === GLOBSTAR) {
|
|
|
@ -2743,6 +2770,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
|
|
|
|
// no match was found.
|
|
|
|
// no match was found.
|
|
|
|
// However, in partial mode, we can't say this is necessarily over.
|
|
|
|
// However, in partial mode, we can't say this is necessarily over.
|
|
|
|
// If there's more *pattern* left, then
|
|
|
|
// If there's more *pattern* left, then
|
|
|
|
|
|
|
|
/* istanbul ignore if */
|
|
|
|
if (partial) {
|
|
|
|
if (partial) {
|
|
|
|
// ran out of file
|
|
|
|
// ran out of file
|
|
|
|
this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
|
|
|
|
this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
|
|
|
@ -2756,11 +2784,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
|
|
|
|
// patterns with magic have been turned into regexps.
|
|
|
|
// patterns with magic have been turned into regexps.
|
|
|
|
var hit
|
|
|
|
var hit
|
|
|
|
if (typeof p === 'string') {
|
|
|
|
if (typeof p === 'string') {
|
|
|
|
if (options.nocase) {
|
|
|
|
hit = f === p
|
|
|
|
hit = f.toLowerCase() === p.toLowerCase()
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
hit = f === p
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
this.debug('string match', p, f, hit)
|
|
|
|
this.debug('string match', p, f, hit)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
hit = f.match(p)
|
|
|
|
hit = f.match(p)
|
|
|
@ -2791,16 +2815,16 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
|
|
|
|
// this is ok if we're doing the match as part of
|
|
|
|
// this is ok if we're doing the match as part of
|
|
|
|
// a glob fs traversal.
|
|
|
|
// a glob fs traversal.
|
|
|
|
return partial
|
|
|
|
return partial
|
|
|
|
} else if (pi === pl) {
|
|
|
|
} else /* istanbul ignore else */ if (pi === pl) {
|
|
|
|
// ran out of pattern, still have file left.
|
|
|
|
// ran out of pattern, still have file left.
|
|
|
|
// this is only acceptable if we're on the very last
|
|
|
|
// this is only acceptable if we're on the very last
|
|
|
|
// empty segment of a file with a trailing slash.
|
|
|
|
// empty segment of a file with a trailing slash.
|
|
|
|
// a/* should match a/b/
|
|
|
|
// a/* should match a/b/
|
|
|
|
var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
|
|
|
|
return (fi === fl - 1) && (file[fi] === '')
|
|
|
|
return emptyFileEnd
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// should be unreachable.
|
|
|
|
// should be unreachable.
|
|
|
|
|
|
|
|
/* istanbul ignore next */
|
|
|
|
throw new Error('wtf?')
|
|
|
|
throw new Error('wtf?')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|