Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGar <gar+gh@danger.computer>2022-03-02 22:13:26 +0300
committerGar <wraithgar@github.com>2022-03-02 23:15:15 +0300
commit236e3b4030dd91397713eb02cdf2737dcc988fd7 (patch)
tree0fca4cdbe394fb6554595117cda36c11359de2a4
parent1dd2f7ee16a61024e520b3efa54f8cdba5458a16 (diff)
minimatch@3.1.2
-rw-r--r--node_modules/minimatch/minimatch.js162
-rw-r--r--node_modules/minimatch/package.json9
-rw-r--r--package-lock.json12
3 files changed, 105 insertions, 78 deletions
diff --git a/node_modules/minimatch/minimatch.js b/node_modules/minimatch/minimatch.js
index 5b5f8cf44..fda45ade7 100644
--- a/node_modules/minimatch/minimatch.js
+++ b/node_modules/minimatch/minimatch.js
@@ -1,10 +1,10 @@
module.exports = minimatch
minimatch.Minimatch = Minimatch
-var path = { sep: '/' }
-try {
- path = require('path')
-} catch (er) {}
+var path = (function () { try { return require('path') } catch (e) {}}()) || {
+ sep: '/'
+}
+minimatch.sep = path.sep
var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
var expand = require('brace-expansion')
@@ -56,43 +56,64 @@ function filter (pattern, options) {
}
function ext (a, b) {
- a = a || {}
b = b || {}
var t = {}
- Object.keys(b).forEach(function (k) {
- t[k] = b[k]
- })
Object.keys(a).forEach(function (k) {
t[k] = a[k]
})
+ Object.keys(b).forEach(function (k) {
+ t[k] = b[k]
+ })
return t
}
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 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) {
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
}
Minimatch.defaults = function (def) {
- if (!def || !Object.keys(def).length) return Minimatch
return minimatch.defaults(def).Minimatch
}
function minimatch (p, pattern, options) {
- if (typeof pattern !== 'string') {
- throw new TypeError('glob pattern string required')
- }
+ assertValidPattern(pattern)
if (!options) options = {}
@@ -101,9 +122,6 @@ function minimatch (p, pattern, options) {
return false
}
- // "" only matches ""
- if (pattern.trim() === '') return p === ''
-
return new Minimatch(pattern, options).match(p)
}
@@ -112,15 +130,14 @@ function Minimatch (pattern, options) {
return new Minimatch(pattern, options)
}
- if (typeof pattern !== 'string') {
- throw new TypeError('glob pattern string required')
- }
+ assertValidPattern(pattern)
if (!options) options = {}
+
pattern = pattern.trim()
// windows support: need to use /, not \
- if (path.sep !== '/') {
+ if (!options.allowWindowsEscape && path.sep !== '/') {
pattern = pattern.split(path.sep).join('/')
}
@@ -131,6 +148,7 @@ function Minimatch (pattern, options) {
this.negate = false
this.comment = false
this.empty = false
+ this.partial = !!options.partial
// make the set of regexps etc.
this.make()
@@ -140,9 +158,6 @@ Minimatch.prototype.debug = function () {}
Minimatch.prototype.make = make
function make () {
- // don't do it more than once.
- if (this._made) return
-
var pattern = this.pattern
var options = this.options
@@ -162,7 +177,7 @@ function make () {
// step 2: expand braces
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)
@@ -242,12 +257,11 @@ function braceExpand (pattern, options) {
pattern = typeof pattern === 'undefined'
? this.pattern : pattern
- if (typeof pattern === 'undefined') {
- throw new TypeError('undefined pattern')
- }
+ assertValidPattern(pattern)
- if (options.nobrace ||
- !pattern.match(/\{.*\}/)) {
+ // Thanks to Yeting Li <https://github.com/yetingli> for
+ // improving this regexp to avoid a ReDOS vulnerability.
+ if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
// shortcut. no need to expand.
return [pattern]
}
@@ -255,6 +269,17 @@ function braceExpand (pattern, options) {
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.
// At this point, no pattern may contain "/" in it
// so we're going to return a 2d array, where each entry is the full
@@ -269,14 +294,17 @@ function braceExpand (pattern, options) {
Minimatch.prototype.parse = parse
var SUBPARSE = {}
function parse (pattern, isSub) {
- if (pattern.length > 1024 * 64) {
- throw new TypeError('pattern is too long')
- }
+ assertValidPattern(pattern)
var options = this.options
// shortcuts
- if (!options.noglobstar && pattern === '**') return GLOBSTAR
+ if (pattern === '**') {
+ if (!options.noglobstar)
+ return GLOBSTAR
+ else
+ pattern = '*'
+ }
if (pattern === '') return ''
var re = ''
@@ -332,10 +360,12 @@ function parse (pattern, isSub) {
}
switch (c) {
- case '/':
+ /* istanbul ignore next */
+ case '/': {
// completely not allowed, even escaped.
// Should already be path-split by now.
return false
+ }
case '\\':
clearStateChar()
@@ -454,25 +484,23 @@ function parse (pattern, isSub) {
// handle the case where we left a class open.
// "[z-a]" is valid, equivalent to "\[z-a\]"
- if (inClass) {
- // split where the last [ was, make sure we don't have
- // an invalid re. if so, re-walk the contents of the
- // would-be class to re-translate any characters that
- // were passed through as-is
- // TODO: It would probably be faster to determine this
- // without a try/catch and a new RegExp, but it's tricky
- // to do safely. For now, this is safe and works.
- var cs = pattern.substring(classStart + 1, i)
- try {
- RegExp('[' + cs + ']')
- } catch (er) {
- // not a valid class!
- var sp = this.parse(cs, SUBPARSE)
- re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
- hasMagic = hasMagic || sp[1]
- inClass = false
- continue
- }
+ // split where the last [ was, make sure we don't have
+ // an invalid re. if so, re-walk the contents of the
+ // would-be class to re-translate any characters that
+ // were passed through as-is
+ // TODO: It would probably be faster to determine this
+ // without a try/catch and a new RegExp, but it's tricky
+ // to do safely. For now, this is safe and works.
+ var cs = pattern.substring(classStart + 1, i)
+ try {
+ RegExp('[' + cs + ']')
+ } catch (er) {
+ // not a valid class!
+ var sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
+ hasMagic = hasMagic || sp[1]
+ inClass = false
+ continue
}
// finish up the class.
@@ -556,9 +584,7 @@ function parse (pattern, isSub) {
// something that could conceivably capture a dot
var addPatternStart = false
switch (re.charAt(0)) {
- case '.':
- case '[':
- case '(': addPatternStart = true
+ case '[': case '.': case '(': addPatternStart = true
}
// Hack to work around lack of negative lookbehind in JS
@@ -620,7 +646,7 @@ function parse (pattern, isSub) {
var flags = options.nocase ? 'i' : ''
try {
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
// anything. This trick looks for a character after the end of
// the string, which is of course impossible, except in multi-line
@@ -678,7 +704,7 @@ function makeRe () {
try {
this.regexp = new RegExp(re, flags)
- } catch (ex) {
+ } catch (ex) /* istanbul ignore next - should be impossible */ {
this.regexp = false
}
return this.regexp
@@ -696,8 +722,8 @@ minimatch.match = function (list, pattern, options) {
return list
}
-Minimatch.prototype.match = match
-function match (f, partial) {
+Minimatch.prototype.match = function match (f, partial) {
+ if (typeof partial === 'undefined') partial = this.partial
this.debug('match', f, this.pattern)
// short-circuit in the case of busted things.
// comments, etc.
@@ -779,6 +805,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
// should be impossible.
// some invalid regexp stuff in the set.
+ /* istanbul ignore if */
if (p === false) return false
if (p === GLOBSTAR) {
@@ -852,6 +879,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
// no match was found.
// However, in partial mode, we can't say this is necessarily over.
// If there's more *pattern* left, then
+ /* istanbul ignore if */
if (partial) {
// ran out of file
this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
@@ -865,11 +893,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
// patterns with magic have been turned into regexps.
var hit
if (typeof p === 'string') {
- if (options.nocase) {
- hit = f.toLowerCase() === p.toLowerCase()
- } else {
- hit = f === p
- }
+ hit = f === p
this.debug('string match', p, f, hit)
} else {
hit = f.match(p)
@@ -900,16 +924,16 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
// this is ok if we're doing the match as part of
// a glob fs traversal.
return partial
- } else if (pi === pl) {
+ } else /* istanbul ignore else */ if (pi === pl) {
// ran out of pattern, still have file left.
// this is only acceptable if we're on the very last
// empty segment of a file with a trailing slash.
// a/* should match a/b/
- var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
- return emptyFileEnd
+ return (fi === fl - 1) && (file[fi] === '')
}
// should be unreachable.
+ /* istanbul ignore next */
throw new Error('wtf?')
}
diff --git a/node_modules/minimatch/package.json b/node_modules/minimatch/package.json
index c4514c807..566efdfe4 100644
--- a/node_modules/minimatch/package.json
+++ b/node_modules/minimatch/package.json
@@ -2,14 +2,17 @@
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)",
"name": "minimatch",
"description": "a glob matcher in javascript",
- "version": "3.0.4",
+ "version": "3.1.2",
+ "publishConfig": {
+ "tag": "v3-legacy"
+ },
"repository": {
"type": "git",
"url": "git://github.com/isaacs/minimatch.git"
},
"main": "minimatch.js",
"scripts": {
- "test": "tap test/*.js --cov",
+ "test": "tap",
"preversion": "npm test",
"postversion": "npm publish",
"postpublish": "git push origin --all; git push origin --tags"
@@ -21,7 +24,7 @@
"brace-expansion": "^1.1.7"
},
"devDependencies": {
- "tap": "^10.3.2"
+ "tap": "^15.1.6"
},
"license": "ISC",
"files": [
diff --git a/package-lock.json b/package-lock.json
index af16fe871..bfd2950a2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5148,9 +5148,9 @@
"dev": true
},
"node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"inBundle": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -14777,9 +14777,9 @@
"dev": true
},
"minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"requires": {
"brace-expansion": "^1.1.7"
}