mirror of
https://github.com/golangci/golangci-lint-action.git
synced 2026-10-07 11:57:30 +00:00
build(deps): bump brace-expansion (#1428)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
This commit is contained in:
1 parent
e5e32b0b4b
commit
80a417e615
3 files changed
+164
-52
No files matched your search
+79
-23
@@ -24528,6 +24528,26 @@ var EXPANSION_MAX = 100000
|
|||||||
// characters) so legitimate input is unaffected.
|
// characters) so legitimate input is unaffected.
|
||||||
var EXPANSION_MAX_LENGTH = 4000000
|
var EXPANSION_MAX_LENGTH = 4000000
|
||||||
|
|
||||||
|
// `expand` recurses once per level of brace *nesting* - both when expanding a
|
||||||
|
// set's comma members and when re-wrapping a set whose body is a single part.
|
||||||
|
// The CVE-2026-14257 fix made the *tail* iterative (recursion on `m.post`, one
|
||||||
|
// level per chained group), which left nesting depth unbounded: about 3,100
|
||||||
|
// levels of `{{{...a,b...}}}` - only ~6KB of input - exhausted the native stack
|
||||||
|
// and crashed the process. `EXPANSION_MAX_DEPTH` bounds how deep the parser
|
||||||
|
// will follow nesting. It sits far above any realistic pattern and well below
|
||||||
|
// the depth at which the stack runs out.
|
||||||
|
var EXPANSION_MAX_DEPTH = 1000
|
||||||
|
|
||||||
|
// Bash keeps a quirk where a brace group followed by a comma set still expands
|
||||||
|
// (`{a},b}`). The parser implements it by rewriting the string and restarting
|
||||||
|
// the scan, absorbing one `}` per pass. `n` trailing braces therefore cost `n`
|
||||||
|
// full passes over a string that itself grows by one `escClose` sentinel each
|
||||||
|
// time - quadratic in `n`, with a ~26x constant from the sentinel's length.
|
||||||
|
// 128KB of `'{a}' + '}'.repeat(n) + ',z}'` blocked the event loop for 27
|
||||||
|
// seconds to produce two results. `EXPANSION_MAX_REWRITES` bounds how many
|
||||||
|
// times the scan may restart. Real `{a},b}` input needs a handful.
|
||||||
|
var EXPANSION_MAX_REWRITES = 1000
|
||||||
|
|
||||||
function numeric(str) {
|
function numeric(str) {
|
||||||
return parseInt(str, 10) == str
|
return parseInt(str, 10) == str
|
||||||
? parseInt(str, 10)
|
? parseInt(str, 10)
|
||||||
@@ -24551,34 +24571,54 @@ function unescapeBraces(str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Like `target.push(...items)` but doesn't overflow the stack
|
||||||
|
function pushAll(target, items) {
|
||||||
|
for (var i = 0; i < items.length; i++) {
|
||||||
|
target.push(items[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Basically just str.split(","), but handling cases
|
// Basically just str.split(","), but handling cases
|
||||||
// where we have nested braced sections, which should be
|
// where we have nested braced sections, which should be
|
||||||
// treated as individual members, like {a,{b,c},d}
|
// treated as individual members, like {a,{b,c},d}
|
||||||
function parseCommaParts(str) {
|
function parseCommaParts(str) {
|
||||||
if (!str)
|
|
||||||
return [''];
|
|
||||||
|
|
||||||
var parts = [];
|
var parts = [];
|
||||||
var m = balanced('{', '}', str);
|
|
||||||
|
|
||||||
if (!m)
|
// Walk the brace groups iteratively. Recursing on `post` once per group let a
|
||||||
return str.split(',');
|
// chain of them exhaust the stack - the parsing-side counterpart to
|
||||||
|
// the `expand` overflow fixed for CVE-2026-14257, and not something `max` or
|
||||||
|
// `maxLength` can bound, since it happens before expansion.
|
||||||
|
//
|
||||||
|
// The part the next chunk continues
|
||||||
|
var carry = '';
|
||||||
|
|
||||||
var pre = m.pre;
|
for (;;) {
|
||||||
var body = m.body;
|
var m = balanced('{', '}', str);
|
||||||
var post = m.post;
|
|
||||||
var p = pre.split(',');
|
|
||||||
|
|
||||||
p[p.length-1] += '{' + body + '}';
|
if (!m) {
|
||||||
var postParts = parseCommaParts(post);
|
var tail = str.split(',');
|
||||||
if (post.length) {
|
tail[0] = carry + tail[0];
|
||||||
p[p.length-1] += postParts.shift();
|
pushAll(parts, tail);
|
||||||
p.push.apply(p, postParts);
|
return parts;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pre = m.pre;
|
||||||
|
var body = m.body;
|
||||||
|
var post = m.post;
|
||||||
|
var p = pre.split(',');
|
||||||
|
|
||||||
|
p[0] = carry + p[0];
|
||||||
|
p[p.length-1] += '{' + body + '}';
|
||||||
|
|
||||||
|
if (!post.length) {
|
||||||
|
pushAll(parts, p);
|
||||||
|
return parts;
|
||||||
|
}
|
||||||
|
|
||||||
|
carry = p.pop();
|
||||||
|
pushAll(parts, p);
|
||||||
|
str = post;
|
||||||
}
|
}
|
||||||
|
|
||||||
parts.push.apply(parts, p);
|
|
||||||
|
|
||||||
return parts;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function expandTop(str, options) {
|
function expandTop(str, options) {
|
||||||
@@ -24588,6 +24628,8 @@ function expandTop(str, options) {
|
|||||||
options = options || {};
|
options = options || {};
|
||||||
var max = options.max == null ? EXPANSION_MAX : options.max;
|
var max = options.max == null ? EXPANSION_MAX : options.max;
|
||||||
var maxLength = options.maxLength == null ? EXPANSION_MAX_LENGTH : options.maxLength;
|
var maxLength = options.maxLength == null ? EXPANSION_MAX_LENGTH : options.maxLength;
|
||||||
|
var maxDepth = options.maxDepth == null ? EXPANSION_MAX_DEPTH : options.maxDepth;
|
||||||
|
var maxRewrites = options.maxRewrites == null ? EXPANSION_MAX_REWRITES : options.maxRewrites;
|
||||||
|
|
||||||
// I don't know why Bash 4.3 does this, but it does.
|
// I don't know why Bash 4.3 does this, but it does.
|
||||||
// Anything starting with {} will have the first two bytes preserved
|
// Anything starting with {} will have the first two bytes preserved
|
||||||
@@ -24599,7 +24641,7 @@ function expandTop(str, options) {
|
|||||||
str = '\\{\\}' + str.substr(2);
|
str = '\\{\\}' + str.substr(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return expand(escapeBraces(str), max, maxLength, true).map(unescapeBraces);
|
return expand(escapeBraces(str), max, maxLength, maxDepth, 0, maxRewrites, true).map(unescapeBraces);
|
||||||
}
|
}
|
||||||
|
|
||||||
function identity(e) {
|
function identity(e) {
|
||||||
@@ -24723,8 +24765,18 @@ function expand(
|
|||||||
str,
|
str,
|
||||||
max,
|
max,
|
||||||
maxLength,
|
maxLength,
|
||||||
|
maxDepth,
|
||||||
|
depth,
|
||||||
|
maxRewrites,
|
||||||
isTop
|
isTop
|
||||||
) {
|
) {
|
||||||
|
// Too deeply nested to keep following: treat the rest as literal, the same
|
||||||
|
// way a group that cannot expand is already handled. Truncating rather than
|
||||||
|
// throwing keeps expansion total, matching `max` and `maxLength`.
|
||||||
|
if (depth > maxDepth) {
|
||||||
|
return [str];
|
||||||
|
}
|
||||||
|
|
||||||
// Consume the string's top-level brace groups left to right, threading a
|
// Consume the string's top-level brace groups left to right, threading a
|
||||||
// running set of combined prefixes (`acc`). Expanding the tail iteratively -
|
// running set of combined prefixes (`acc`). Expanding the tail iteratively -
|
||||||
// rather than recursing on `m.post` once per group - keeps the native stack
|
// rather than recursing on `m.post` once per group - keeps the native stack
|
||||||
@@ -24745,6 +24797,9 @@ function expand(
|
|||||||
// `accBase[a]` records how much of `acc[a]` predates the current run;
|
// `accBase[a]` records how much of `acc[a]` predates the current run;
|
||||||
// `combine` treats an expansion as empty when it adds nothing past that.
|
// `combine` treats an expansion as empty when it adds nothing past that.
|
||||||
var accBase = [0]
|
var accBase = [0]
|
||||||
|
// How many times the `{a},b}` rewrite below has restarted the scan. Each pass
|
||||||
|
// re-reads the whole string, so leaving this unbounded is quadratic.
|
||||||
|
var rewrites = 0
|
||||||
var dropEmpties = false
|
var dropEmpties = false
|
||||||
var firstGroup = true
|
var firstGroup = true
|
||||||
var nextBase
|
var nextBase
|
||||||
@@ -24776,7 +24831,8 @@ function expand(
|
|||||||
var isOptions = m.body.indexOf(',') >= 0;
|
var isOptions = m.body.indexOf(',') >= 0;
|
||||||
if (!isSequence && !isOptions) {
|
if (!isSequence && !isOptions) {
|
||||||
// {a},b}
|
// {a},b}
|
||||||
if (m.post.match(/,(?!,).*\}/)) {
|
if (rewrites < maxRewrites && m.post.match(/,(?!,).*\}/)) {
|
||||||
|
rewrites++;
|
||||||
str = m.pre + '{' + m.body + escClose + m.post;
|
str = m.pre + '{' + m.body + escClose + m.post;
|
||||||
// The rewritten string is expanded as if it were a fresh top-level one,
|
// The rewritten string is expanded as if it were a fresh top-level one,
|
||||||
// so start a new empty-drop run: anchor the baseline at what `acc`
|
// so start a new empty-drop run: anchor the baseline at what `acc`
|
||||||
@@ -24815,7 +24871,7 @@ function expand(
|
|||||||
var n = parseCommaParts(m.body);
|
var n = parseCommaParts(m.body);
|
||||||
if (n.length === 1 && n[0] !== undefined) {
|
if (n.length === 1 && n[0] !== undefined) {
|
||||||
// x{{a,b}}y ==> x{a}y x{b}y
|
// x{{a,b}}y ==> x{a}y x{b}y
|
||||||
n = expand(n[0], max, maxLength, false).map(embrace);
|
n = expand(n[0], max, maxLength, maxDepth, depth + 1, maxRewrites, false).map(embrace);
|
||||||
//XXX is this necessary? Can't seem to hit it in tests.
|
//XXX is this necessary? Can't seem to hit it in tests.
|
||||||
/* c8 ignore start */
|
/* c8 ignore start */
|
||||||
if (n.length === 1) {
|
if (n.length === 1) {
|
||||||
@@ -24854,7 +24910,7 @@ function expand(
|
|||||||
values = []
|
values = []
|
||||||
var valuesLength = 0
|
var valuesLength = 0
|
||||||
outer: for (var j = 0; j < n.length; j++) {
|
outer: for (var j = 0; j < n.length; j++) {
|
||||||
var expanded = expand(n[j], max, maxLength, false)
|
var expanded = expand(n[j], max, maxLength, maxDepth, depth + 1, maxRewrites, false)
|
||||||
for (var k = 0; k < expanded.length; k++) {
|
for (var k = 0; k < expanded.length; k++) {
|
||||||
var v = expanded[k]
|
var v = expanded[k]
|
||||||
if (dropsEmpties && !v) continue
|
if (dropsEmpties && !v) continue
|
||||||
|
|||||||
+79
-23
@@ -24528,6 +24528,26 @@ var EXPANSION_MAX = 100000
|
|||||||
// characters) so legitimate input is unaffected.
|
// characters) so legitimate input is unaffected.
|
||||||
var EXPANSION_MAX_LENGTH = 4000000
|
var EXPANSION_MAX_LENGTH = 4000000
|
||||||
|
|
||||||
|
// `expand` recurses once per level of brace *nesting* - both when expanding a
|
||||||
|
// set's comma members and when re-wrapping a set whose body is a single part.
|
||||||
|
// The CVE-2026-14257 fix made the *tail* iterative (recursion on `m.post`, one
|
||||||
|
// level per chained group), which left nesting depth unbounded: about 3,100
|
||||||
|
// levels of `{{{...a,b...}}}` - only ~6KB of input - exhausted the native stack
|
||||||
|
// and crashed the process. `EXPANSION_MAX_DEPTH` bounds how deep the parser
|
||||||
|
// will follow nesting. It sits far above any realistic pattern and well below
|
||||||
|
// the depth at which the stack runs out.
|
||||||
|
var EXPANSION_MAX_DEPTH = 1000
|
||||||
|
|
||||||
|
// Bash keeps a quirk where a brace group followed by a comma set still expands
|
||||||
|
// (`{a},b}`). The parser implements it by rewriting the string and restarting
|
||||||
|
// the scan, absorbing one `}` per pass. `n` trailing braces therefore cost `n`
|
||||||
|
// full passes over a string that itself grows by one `escClose` sentinel each
|
||||||
|
// time - quadratic in `n`, with a ~26x constant from the sentinel's length.
|
||||||
|
// 128KB of `'{a}' + '}'.repeat(n) + ',z}'` blocked the event loop for 27
|
||||||
|
// seconds to produce two results. `EXPANSION_MAX_REWRITES` bounds how many
|
||||||
|
// times the scan may restart. Real `{a},b}` input needs a handful.
|
||||||
|
var EXPANSION_MAX_REWRITES = 1000
|
||||||
|
|
||||||
function numeric(str) {
|
function numeric(str) {
|
||||||
return parseInt(str, 10) == str
|
return parseInt(str, 10) == str
|
||||||
? parseInt(str, 10)
|
? parseInt(str, 10)
|
||||||
@@ -24551,34 +24571,54 @@ function unescapeBraces(str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Like `target.push(...items)` but doesn't overflow the stack
|
||||||
|
function pushAll(target, items) {
|
||||||
|
for (var i = 0; i < items.length; i++) {
|
||||||
|
target.push(items[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Basically just str.split(","), but handling cases
|
// Basically just str.split(","), but handling cases
|
||||||
// where we have nested braced sections, which should be
|
// where we have nested braced sections, which should be
|
||||||
// treated as individual members, like {a,{b,c},d}
|
// treated as individual members, like {a,{b,c},d}
|
||||||
function parseCommaParts(str) {
|
function parseCommaParts(str) {
|
||||||
if (!str)
|
|
||||||
return [''];
|
|
||||||
|
|
||||||
var parts = [];
|
var parts = [];
|
||||||
var m = balanced('{', '}', str);
|
|
||||||
|
|
||||||
if (!m)
|
// Walk the brace groups iteratively. Recursing on `post` once per group let a
|
||||||
return str.split(',');
|
// chain of them exhaust the stack - the parsing-side counterpart to
|
||||||
|
// the `expand` overflow fixed for CVE-2026-14257, and not something `max` or
|
||||||
|
// `maxLength` can bound, since it happens before expansion.
|
||||||
|
//
|
||||||
|
// The part the next chunk continues
|
||||||
|
var carry = '';
|
||||||
|
|
||||||
var pre = m.pre;
|
for (;;) {
|
||||||
var body = m.body;
|
var m = balanced('{', '}', str);
|
||||||
var post = m.post;
|
|
||||||
var p = pre.split(',');
|
|
||||||
|
|
||||||
p[p.length-1] += '{' + body + '}';
|
if (!m) {
|
||||||
var postParts = parseCommaParts(post);
|
var tail = str.split(',');
|
||||||
if (post.length) {
|
tail[0] = carry + tail[0];
|
||||||
p[p.length-1] += postParts.shift();
|
pushAll(parts, tail);
|
||||||
p.push.apply(p, postParts);
|
return parts;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pre = m.pre;
|
||||||
|
var body = m.body;
|
||||||
|
var post = m.post;
|
||||||
|
var p = pre.split(',');
|
||||||
|
|
||||||
|
p[0] = carry + p[0];
|
||||||
|
p[p.length-1] += '{' + body + '}';
|
||||||
|
|
||||||
|
if (!post.length) {
|
||||||
|
pushAll(parts, p);
|
||||||
|
return parts;
|
||||||
|
}
|
||||||
|
|
||||||
|
carry = p.pop();
|
||||||
|
pushAll(parts, p);
|
||||||
|
str = post;
|
||||||
}
|
}
|
||||||
|
|
||||||
parts.push.apply(parts, p);
|
|
||||||
|
|
||||||
return parts;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function expandTop(str, options) {
|
function expandTop(str, options) {
|
||||||
@@ -24588,6 +24628,8 @@ function expandTop(str, options) {
|
|||||||
options = options || {};
|
options = options || {};
|
||||||
var max = options.max == null ? EXPANSION_MAX : options.max;
|
var max = options.max == null ? EXPANSION_MAX : options.max;
|
||||||
var maxLength = options.maxLength == null ? EXPANSION_MAX_LENGTH : options.maxLength;
|
var maxLength = options.maxLength == null ? EXPANSION_MAX_LENGTH : options.maxLength;
|
||||||
|
var maxDepth = options.maxDepth == null ? EXPANSION_MAX_DEPTH : options.maxDepth;
|
||||||
|
var maxRewrites = options.maxRewrites == null ? EXPANSION_MAX_REWRITES : options.maxRewrites;
|
||||||
|
|
||||||
// I don't know why Bash 4.3 does this, but it does.
|
// I don't know why Bash 4.3 does this, but it does.
|
||||||
// Anything starting with {} will have the first two bytes preserved
|
// Anything starting with {} will have the first two bytes preserved
|
||||||
@@ -24599,7 +24641,7 @@ function expandTop(str, options) {
|
|||||||
str = '\\{\\}' + str.substr(2);
|
str = '\\{\\}' + str.substr(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return expand(escapeBraces(str), max, maxLength, true).map(unescapeBraces);
|
return expand(escapeBraces(str), max, maxLength, maxDepth, 0, maxRewrites, true).map(unescapeBraces);
|
||||||
}
|
}
|
||||||
|
|
||||||
function identity(e) {
|
function identity(e) {
|
||||||
@@ -24723,8 +24765,18 @@ function expand(
|
|||||||
str,
|
str,
|
||||||
max,
|
max,
|
||||||
maxLength,
|
maxLength,
|
||||||
|
maxDepth,
|
||||||
|
depth,
|
||||||
|
maxRewrites,
|
||||||
isTop
|
isTop
|
||||||
) {
|
) {
|
||||||
|
// Too deeply nested to keep following: treat the rest as literal, the same
|
||||||
|
// way a group that cannot expand is already handled. Truncating rather than
|
||||||
|
// throwing keeps expansion total, matching `max` and `maxLength`.
|
||||||
|
if (depth > maxDepth) {
|
||||||
|
return [str];
|
||||||
|
}
|
||||||
|
|
||||||
// Consume the string's top-level brace groups left to right, threading a
|
// Consume the string's top-level brace groups left to right, threading a
|
||||||
// running set of combined prefixes (`acc`). Expanding the tail iteratively -
|
// running set of combined prefixes (`acc`). Expanding the tail iteratively -
|
||||||
// rather than recursing on `m.post` once per group - keeps the native stack
|
// rather than recursing on `m.post` once per group - keeps the native stack
|
||||||
@@ -24745,6 +24797,9 @@ function expand(
|
|||||||
// `accBase[a]` records how much of `acc[a]` predates the current run;
|
// `accBase[a]` records how much of `acc[a]` predates the current run;
|
||||||
// `combine` treats an expansion as empty when it adds nothing past that.
|
// `combine` treats an expansion as empty when it adds nothing past that.
|
||||||
var accBase = [0]
|
var accBase = [0]
|
||||||
|
// How many times the `{a},b}` rewrite below has restarted the scan. Each pass
|
||||||
|
// re-reads the whole string, so leaving this unbounded is quadratic.
|
||||||
|
var rewrites = 0
|
||||||
var dropEmpties = false
|
var dropEmpties = false
|
||||||
var firstGroup = true
|
var firstGroup = true
|
||||||
var nextBase
|
var nextBase
|
||||||
@@ -24776,7 +24831,8 @@ function expand(
|
|||||||
var isOptions = m.body.indexOf(',') >= 0;
|
var isOptions = m.body.indexOf(',') >= 0;
|
||||||
if (!isSequence && !isOptions) {
|
if (!isSequence && !isOptions) {
|
||||||
// {a},b}
|
// {a},b}
|
||||||
if (m.post.match(/,(?!,).*\}/)) {
|
if (rewrites < maxRewrites && m.post.match(/,(?!,).*\}/)) {
|
||||||
|
rewrites++;
|
||||||
str = m.pre + '{' + m.body + escClose + m.post;
|
str = m.pre + '{' + m.body + escClose + m.post;
|
||||||
// The rewritten string is expanded as if it were a fresh top-level one,
|
// The rewritten string is expanded as if it were a fresh top-level one,
|
||||||
// so start a new empty-drop run: anchor the baseline at what `acc`
|
// so start a new empty-drop run: anchor the baseline at what `acc`
|
||||||
@@ -24815,7 +24871,7 @@ function expand(
|
|||||||
var n = parseCommaParts(m.body);
|
var n = parseCommaParts(m.body);
|
||||||
if (n.length === 1 && n[0] !== undefined) {
|
if (n.length === 1 && n[0] !== undefined) {
|
||||||
// x{{a,b}}y ==> x{a}y x{b}y
|
// x{{a,b}}y ==> x{a}y x{b}y
|
||||||
n = expand(n[0], max, maxLength, false).map(embrace);
|
n = expand(n[0], max, maxLength, maxDepth, depth + 1, maxRewrites, false).map(embrace);
|
||||||
//XXX is this necessary? Can't seem to hit it in tests.
|
//XXX is this necessary? Can't seem to hit it in tests.
|
||||||
/* c8 ignore start */
|
/* c8 ignore start */
|
||||||
if (n.length === 1) {
|
if (n.length === 1) {
|
||||||
@@ -24854,7 +24910,7 @@ function expand(
|
|||||||
values = []
|
values = []
|
||||||
var valuesLength = 0
|
var valuesLength = 0
|
||||||
outer: for (var j = 0; j < n.length; j++) {
|
outer: for (var j = 0; j < n.length; j++) {
|
||||||
var expanded = expand(n[j], max, maxLength, false)
|
var expanded = expand(n[j], max, maxLength, maxDepth, depth + 1, maxRewrites, false)
|
||||||
for (var k = 0; k < expanded.length; k++) {
|
for (var k = 0; k < expanded.length; k++) {
|
||||||
var v = expanded[k]
|
var v = expanded[k]
|
||||||
if (dropsEmpties && !v) continue
|
if (dropsEmpties && !v) continue
|
||||||
|
|||||||
Generated
+6
-6
@@ -1177,9 +1177,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
|
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
|
||||||
"version": "5.0.9",
|
"version": "5.0.12",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz",
|
||||||
"integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
|
"integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -1534,9 +1534,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/brace-expansion": {
|
"node_modules/brace-expansion": {
|
||||||
"version": "1.1.18",
|
"version": "1.1.21",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
|
||||||
"integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==",
|
"integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"balanced-match": "^1.0.0",
|
"balanced-match": "^1.0.0",
|
||||||
|
|||||||
Reference in new issue
Block a user