@suveren/gateway 0.8.4 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/control-plane/index.mjs +89 -70
- package/dist/mcp-server/http.mjs +75 -0
- package/dist/ui/assets/index-CheBVmNI.css +1 -0
- package/dist/ui/assets/index-IVfLWq4W.js +110 -0
- package/dist/ui/index.html +2 -2
- package/node_modules/@types/node/README.md +2 -2
- package/node_modules/@types/node/buffer.d.ts +1 -0
- package/node_modules/@types/node/child_process.d.ts +1 -1
- package/node_modules/@types/node/crypto.d.ts +20 -8
- package/node_modules/@types/node/diagnostics_channel.d.ts +4 -4
- package/node_modules/@types/node/ffi.d.ts +14 -0
- package/node_modules/@types/node/http.d.ts +1 -1
- package/node_modules/@types/node/http2.d.ts +3 -2
- package/node_modules/@types/node/net.d.ts +16 -4
- package/node_modules/@types/node/package.json +3 -18
- package/node_modules/@types/node/perf_hooks.d.ts +31 -19
- package/node_modules/@types/node/process.d.ts +1 -0
- package/node_modules/@types/node/quic.d.ts +45 -5
- package/node_modules/@types/node/stream/iter.d.ts +9 -12
- package/node_modules/@types/node/stream/web.d.ts +20 -0
- package/node_modules/@types/node/test/reporters.d.ts +1 -0
- package/node_modules/@types/node/test.d.ts +72 -0
- package/node_modules/@types/node/tls.d.ts +40 -25
- package/node_modules/@types/node/vfs.d.ts +7 -6
- package/node_modules/@types/node/vm.d.ts +2 -1
- package/node_modules/@types/node/web-globals/streams.d.ts +4 -0
- package/node_modules/@types/node/worker_threads.d.ts +4 -1
- package/node_modules/@types/node/zlib.d.ts +17 -0
- package/node_modules/body-parser/HISTORY.md +156 -145
- package/node_modules/body-parser/package.json +2 -2
- package/node_modules/express/History.md +583 -576
- package/node_modules/express/lib/request.js +2 -2
- package/node_modules/express/package.json +3 -3
- package/node_modules/fast-uri/index.js +10 -6
- package/node_modules/fast-uri/package.json +1 -1
- package/node_modules/fast-uri/test/security-normalization.test.js +38 -0
- package/node_modules/hono/README.md +1 -1
- package/node_modules/hono/dist/adapter/aws-lambda/handler.js +5 -4
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +5 -4
- package/node_modules/hono/dist/cjs/context.js +1 -1
- package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +1 -1
- package/node_modules/hono/dist/cjs/jsx/dom/render.js +44 -8
- package/node_modules/hono/dist/cjs/middleware/language/language.js +4 -1
- package/node_modules/hono/dist/cjs/request.js +4 -1
- package/node_modules/hono/dist/cjs/utils/accept.js +4 -7
- package/node_modules/hono/dist/context.js +1 -1
- package/node_modules/hono/dist/helper/accepts/accepts.js +1 -1
- package/node_modules/hono/dist/jsx/dom/render.js +44 -8
- package/node_modules/hono/dist/middleware/language/language.js +4 -1
- package/node_modules/hono/dist/request.js +4 -1
- package/node_modules/hono/dist/types/helper/proxy/index.d.ts +1 -1
- package/node_modules/hono/dist/types/helper/route/index.d.ts +2 -2
- package/node_modules/hono/dist/types/middleware/combine/index.d.ts +3 -1
- package/node_modules/hono/dist/types/utils/types.d.ts +1 -1
- package/node_modules/hono/dist/utils/accept.js +4 -7
- package/node_modules/hono/package.json +1 -1
- package/node_modules/ip-address/README.md +114 -114
- package/node_modules/ip-address/dist/common.d.ts +5 -0
- package/node_modules/ip-address/dist/common.js +12 -0
- package/node_modules/ip-address/dist/common.js.map +1 -1
- package/node_modules/ip-address/dist/ipv4.d.ts +10 -3
- package/node_modules/ip-address/dist/ipv4.js +20 -5
- package/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/ip-address/dist/ipv6.d.ts +5 -1
- package/node_modules/ip-address/dist/ipv6.js +18 -3
- package/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/ip-address/package.json +1 -1
- package/node_modules/proxy-addr/HISTORY.md +60 -54
- package/node_modules/proxy-addr/README.md +1 -1
- package/node_modules/proxy-addr/index.js +32 -0
- package/node_modules/proxy-addr/package.json +8 -4
- package/node_modules/qs/.github/THREAT_MODEL.md +3 -3
- package/node_modules/qs/CHANGELOG.md +15 -0
- package/node_modules/qs/README.md +19 -1
- package/node_modules/qs/dist/qs.js +21 -21
- package/node_modules/qs/eslint.config.mjs +1 -1
- package/node_modules/qs/lib/parse.js +3 -4
- package/node_modules/qs/lib/stringify.js +23 -8
- package/node_modules/qs/lib/utils.js +10 -3
- package/node_modules/qs/package.json +4 -4
- package/node_modules/qs/test/parse.js +192 -3
- package/node_modules/qs/test/stringify.js +317 -0
- package/node_modules/qs/test/utils.js +12 -0
- package/node_modules/undici-types/client.d.ts +8 -3
- package/node_modules/undici-types/connector.d.ts +1 -0
- package/node_modules/undici-types/cookies.d.ts +1 -1
- package/node_modules/undici-types/dispatcher.d.ts +3 -3
- package/node_modules/undici-types/errors.d.ts +10 -0
- package/node_modules/undici-types/fetch.d.ts +5 -1
- package/node_modules/undici-types/handlers.d.ts +2 -0
- package/node_modules/undici-types/interceptors.d.ts +1 -1
- package/node_modules/undici-types/mock-interceptor.d.ts +5 -1
- package/node_modules/undici-types/package.json +1 -1
- package/node_modules/undici-types/proxy-agent.d.ts +7 -0
- package/package.json +1 -1
- package/dist/ui/assets/index-BYVb_0oG.css +0 -1
- package/dist/ui/assets/index-Z0OQ-dd1.js +0 -110
|
@@ -36,6 +36,7 @@ var defaults = {
|
|
|
36
36
|
charsetSentinel: false,
|
|
37
37
|
commaRoundTrip: false,
|
|
38
38
|
delimiter: '&',
|
|
39
|
+
depth: Infinity,
|
|
39
40
|
encode: true,
|
|
40
41
|
encodeDotInKeys: false,
|
|
41
42
|
encoder: utils.encode,
|
|
@@ -80,10 +81,16 @@ var stringify = function stringify(
|
|
|
80
81
|
formatter,
|
|
81
82
|
encodeValuesOnly,
|
|
82
83
|
charset,
|
|
83
|
-
sideChannel
|
|
84
|
+
sideChannel,
|
|
85
|
+
depth,
|
|
86
|
+
currentDepth
|
|
84
87
|
) {
|
|
85
88
|
var obj = object;
|
|
86
89
|
|
|
90
|
+
if (currentDepth > depth) {
|
|
91
|
+
throw new RangeError('Input depth exceeded depth option of ' + depth);
|
|
92
|
+
}
|
|
93
|
+
|
|
87
94
|
var tmpSc = sideChannel;
|
|
88
95
|
var step = 0;
|
|
89
96
|
var findFlag = false;
|
|
@@ -103,9 +110,9 @@ var stringify = function stringify(
|
|
|
103
110
|
}
|
|
104
111
|
}
|
|
105
112
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
113
|
+
obj = typeof filter === 'function' ? filter(prefix, obj) : obj;
|
|
114
|
+
|
|
115
|
+
if (obj instanceof Date) {
|
|
109
116
|
obj = serializeDate(obj);
|
|
110
117
|
} else if (generateArrayPrefix === 'comma' && isArray(obj)) {
|
|
111
118
|
obj = utils.maybeMap(obj, function (value) {
|
|
@@ -158,7 +165,7 @@ var stringify = function stringify(
|
|
|
158
165
|
|
|
159
166
|
var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;
|
|
160
167
|
|
|
161
|
-
if (allowEmptyArrays && isArray(obj) && obj.length === 0) {
|
|
168
|
+
if (allowEmptyArrays && isArray(obj) && obj.length === 0 && Object.keys(obj).length === 0) {
|
|
162
169
|
return adjustedPrefix + '[]';
|
|
163
170
|
}
|
|
164
171
|
|
|
@@ -198,7 +205,9 @@ var stringify = function stringify(
|
|
|
198
205
|
formatter,
|
|
199
206
|
encodeValuesOnly,
|
|
200
207
|
charset,
|
|
201
|
-
valueSideChannel
|
|
208
|
+
valueSideChannel,
|
|
209
|
+
depth,
|
|
210
|
+
currentDepth + 1
|
|
202
211
|
));
|
|
203
212
|
}
|
|
204
213
|
|
|
@@ -265,6 +274,7 @@ var normalizeStringifyOptions = function normalizeStringifyOptions(opts) {
|
|
|
265
274
|
charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,
|
|
266
275
|
commaRoundTrip: !!opts.commaRoundTrip,
|
|
267
276
|
delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,
|
|
277
|
+
depth: typeof opts.depth === 'number' ? opts.depth : defaults.depth,
|
|
268
278
|
encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,
|
|
269
279
|
encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,
|
|
270
280
|
encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,
|
|
@@ -324,9 +334,12 @@ module.exports = function (object, opts) {
|
|
|
324
334
|
if (options.skipNulls && value === null) {
|
|
325
335
|
continue;
|
|
326
336
|
}
|
|
337
|
+
|
|
338
|
+
var encodedKey = options.encodeDotInKeys ? String(key).replace(/\./g, '%2E') : String(key);
|
|
339
|
+
|
|
327
340
|
pushToArray(keys, stringify(
|
|
328
341
|
value,
|
|
329
|
-
|
|
342
|
+
encodedKey,
|
|
330
343
|
generateArrayPrefix,
|
|
331
344
|
commaRoundTrip,
|
|
332
345
|
options.allowEmptyArrays,
|
|
@@ -342,7 +355,9 @@ module.exports = function (object, opts) {
|
|
|
342
355
|
options.formatter,
|
|
343
356
|
options.encodeValuesOnly,
|
|
344
357
|
options.charset,
|
|
345
|
-
sideChannel
|
|
358
|
+
sideChannel,
|
|
359
|
+
options.depth,
|
|
360
|
+
0
|
|
346
361
|
));
|
|
347
362
|
}
|
|
348
363
|
|
|
@@ -329,7 +329,7 @@ var isBuffer = function isBuffer(obj) {
|
|
|
329
329
|
return false;
|
|
330
330
|
}
|
|
331
331
|
|
|
332
|
-
return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
|
|
332
|
+
return !!(obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj));
|
|
333
333
|
};
|
|
334
334
|
|
|
335
335
|
var combine = function combine(a, b, arrayLimit, plainObjects, throwOnLimitExceeded) {
|
|
@@ -338,8 +338,15 @@ var combine = function combine(a, b, arrayLimit, plainObjects, throwOnLimitExcee
|
|
|
338
338
|
if (throwOnLimitExceeded) {
|
|
339
339
|
throw new RangeError('Array limit exceeded. Only ' + arrayLimit + ' element' + (arrayLimit === 1 ? '' : 's') + ' allowed in an array.');
|
|
340
340
|
}
|
|
341
|
-
|
|
342
|
-
|
|
341
|
+
// spread `b` one level, matching the `[].concat(a, b)` used below, so a
|
|
342
|
+
// collection appended to an already-overflowed object is flattened
|
|
343
|
+
// rather than nested under a single index
|
|
344
|
+
var bValues = isArray(b) ? b : [b];
|
|
345
|
+
var newIndex = getMaxIndex(a);
|
|
346
|
+
for (var i = 0; i < bValues.length; ++i) {
|
|
347
|
+
newIndex += 1;
|
|
348
|
+
a[newIndex] = bValues[i];
|
|
349
|
+
}
|
|
343
350
|
setMaxIndex(a, newIndex);
|
|
344
351
|
return a;
|
|
345
352
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "qs",
|
|
3
3
|
"description": "A querystring parser that supports nesting and arrays, with a depth limit",
|
|
4
4
|
"homepage": "https://github.com/ljharb/qs",
|
|
5
|
-
"version": "6.
|
|
5
|
+
"version": "6.16.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "https://github.com/ljharb/qs.git"
|
|
@@ -37,14 +37,14 @@
|
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@browserify/envify": "^6.0.0",
|
|
39
39
|
"@browserify/uglifyify": "^6.0.0",
|
|
40
|
-
"@ljharb/eslint-config": "^22.2.
|
|
40
|
+
"@ljharb/eslint-config": "^22.2.4",
|
|
41
41
|
"browserify": "^16.5.2",
|
|
42
42
|
"bundle-collapser": "^1.4.0",
|
|
43
43
|
"common-shakeify": "~1.0.0",
|
|
44
44
|
"eclint": "^2.8.1",
|
|
45
45
|
"es-value-fixtures": "^1.7.1",
|
|
46
|
-
"eslint": "^10.
|
|
47
|
-
"evalmd": "^0.0.
|
|
46
|
+
"eslint": "^10.9.0",
|
|
47
|
+
"evalmd": "^0.0.22",
|
|
48
48
|
"for-each": "^0.3.5",
|
|
49
49
|
"glob": "=10.3.7",
|
|
50
50
|
"has-bigints": "^1.1.0",
|
|
@@ -1475,6 +1475,73 @@ test('parse()', function (t) {
|
|
|
1475
1475
|
sst.end();
|
|
1476
1476
|
});
|
|
1477
1477
|
|
|
1478
|
+
st.test('spreads a comma group appended to an already-overflowed object', function (sst) {
|
|
1479
|
+
var result = qs.parse('a=1,2,3,4,5,6&a=7,8', { comma: true, arrayLimit: 5 });
|
|
1480
|
+
sst.deepEqual(
|
|
1481
|
+
result,
|
|
1482
|
+
{ a: { 0: '1', 1: '2', 2: '3', 3: '4', 4: '5', 5: '6', 6: '7', 7: '8' } },
|
|
1483
|
+
'appended comma values are flattened, not nested'
|
|
1484
|
+
);
|
|
1485
|
+
sst.end();
|
|
1486
|
+
});
|
|
1487
|
+
|
|
1488
|
+
st.test('keeps a `[]=` comma group as one element when appended to an already-overflowed key', function (sst) {
|
|
1489
|
+
var result = qs.parse('a[]=1&a[]=2&a[]=3&a[]=4,5', { comma: true, arrayLimit: 2 });
|
|
1490
|
+
sst.deepEqual(
|
|
1491
|
+
result,
|
|
1492
|
+
{ a: { 0: '1', 1: '2', 2: '3', 3: ['4', '5'] } },
|
|
1493
|
+
'nested comma group stays a single element, not double-nested'
|
|
1494
|
+
);
|
|
1495
|
+
sst.end();
|
|
1496
|
+
});
|
|
1497
|
+
|
|
1498
|
+
st.test('spreads every later comma group appended to an already-overflowed object', function (sst) {
|
|
1499
|
+
var result = qs.parse('a=1,2,3,4,5,6&a=7,8&a=9,10', { comma: true, arrayLimit: 5 });
|
|
1500
|
+
sst.deepEqual(
|
|
1501
|
+
result,
|
|
1502
|
+
{ a: { 0: '1', 1: '2', 2: '3', 3: '4', 4: '5', 5: '6', 6: '7', 7: '8', 8: '9', 9: '10' } },
|
|
1503
|
+
'each appended group is flattened in order'
|
|
1504
|
+
);
|
|
1505
|
+
sst.end();
|
|
1506
|
+
});
|
|
1507
|
+
|
|
1508
|
+
st.test('spreads a comma group appended to an object overflowed under the default arrayLimit', function (sst) {
|
|
1509
|
+
var values = [];
|
|
1510
|
+
for (var i = 0; i <= 20; i += 1) {
|
|
1511
|
+
values[values.length] = String(i);
|
|
1512
|
+
}
|
|
1513
|
+
var expected = {};
|
|
1514
|
+
for (var j = 0; j < values.length; j += 1) {
|
|
1515
|
+
expected[j] = values[j];
|
|
1516
|
+
}
|
|
1517
|
+
expected[21] = 'x';
|
|
1518
|
+
expected[22] = 'y';
|
|
1519
|
+
|
|
1520
|
+
var result = qs.parse('a=' + values.join(',') + '&a=x,y', { comma: true });
|
|
1521
|
+
sst.deepEqual(result, { a: expected }, 'appended values land at indices 21 and 22');
|
|
1522
|
+
sst.end();
|
|
1523
|
+
});
|
|
1524
|
+
|
|
1525
|
+
st.test('spreads a comma group appended to an already-overflowed object with plainObjects', function (sst) {
|
|
1526
|
+
var result = qs.parse('a=1,2,3,4,5,6&a=7,8', { comma: true, arrayLimit: 5, plainObjects: true });
|
|
1527
|
+
sst.deepEqual(
|
|
1528
|
+
result,
|
|
1529
|
+
{ __proto__: null, a: { __proto__: null, 0: '1', 1: '2', 2: '3', 3: '4', 4: '5', 5: '6', 6: '7', 7: '8' } },
|
|
1530
|
+
'appended comma values are flattened into the null object'
|
|
1531
|
+
);
|
|
1532
|
+
sst.end();
|
|
1533
|
+
});
|
|
1534
|
+
|
|
1535
|
+
st.test('still throws with throwOnLimitExceeded when a comma group is appended to an already-overflowed object', function (sst) {
|
|
1536
|
+
sst['throws'](
|
|
1537
|
+
function () {
|
|
1538
|
+
qs.parse('a=1,2,3,4,5,6&a=7,8', { comma: true, arrayLimit: 5, throwOnLimitExceeded: true });
|
|
1539
|
+
},
|
|
1540
|
+
/Array limit exceeded/,
|
|
1541
|
+
'throws before spreading the appended group'
|
|
1542
|
+
);
|
|
1543
|
+
sst.end();
|
|
1544
|
+
});
|
|
1478
1545
|
st.test('does not throw for comma groups nested under bracket notation, counting each group as one element', function (sst) {
|
|
1479
1546
|
var result = qs.parse('a[]=1,2,3&a[]=4,5,6', { comma: true, arrayLimit: 5, throwOnLimitExceeded: true });
|
|
1480
1547
|
sst.deepEqual(result, { a: [['1', '2', '3'], ['4', '5', '6']] }, 'nested comma groups count as one element each');
|
|
@@ -1522,9 +1589,131 @@ test('parse()', function (t) {
|
|
|
1522
1589
|
sst.end();
|
|
1523
1590
|
});
|
|
1524
1591
|
|
|
1525
|
-
st.test('
|
|
1526
|
-
|
|
1527
|
-
|
|
1592
|
+
st.test('throws before splitting when a bracketed comma group exceeds arrayLimit', function (sst) {
|
|
1593
|
+
sst['throws'](
|
|
1594
|
+
function () {
|
|
1595
|
+
qs.parse('a[]=1,2,3,4,5,6', { comma: true, arrayLimit: 5, throwOnLimitExceeded: true });
|
|
1596
|
+
},
|
|
1597
|
+
new RangeError('Array limit exceeded. Only 5 elements allowed in an array.'),
|
|
1598
|
+
'the inner group is itself an array and is subject to arrayLimit'
|
|
1599
|
+
);
|
|
1600
|
+
sst.end();
|
|
1601
|
+
});
|
|
1602
|
+
|
|
1603
|
+
st.test('throws before splitting when a comma group under `[]=` exceeds arrayLimit', function (sst) {
|
|
1604
|
+
sst['throws'](
|
|
1605
|
+
function () {
|
|
1606
|
+
qs.parse('a[]=1,2,3,4', { comma: true, arrayLimit: 3, throwOnLimitExceeded: true });
|
|
1607
|
+
},
|
|
1608
|
+
new RangeError('Array limit exceeded. Only 3 elements allowed in an array.'),
|
|
1609
|
+
'a bracket-push comma group over the limit throws like the flat form'
|
|
1610
|
+
);
|
|
1611
|
+
|
|
1612
|
+
sst['throws'](
|
|
1613
|
+
function () {
|
|
1614
|
+
qs.parse('a[]=1,2', { comma: true, arrayLimit: 1, throwOnLimitExceeded: true });
|
|
1615
|
+
},
|
|
1616
|
+
new RangeError('Array limit exceeded. Only 1 element allowed in an array.'),
|
|
1617
|
+
'singular message at arrayLimit 1'
|
|
1618
|
+
);
|
|
1619
|
+
|
|
1620
|
+
sst['throws'](
|
|
1621
|
+
function () {
|
|
1622
|
+
qs.parse('a[b][]=1,2,3,4', { comma: true, arrayLimit: 3, throwOnLimitExceeded: true });
|
|
1623
|
+
},
|
|
1624
|
+
new RangeError('Array limit exceeded. Only 3 elements allowed in an array.'),
|
|
1625
|
+
'a nested bracket-push key throws'
|
|
1626
|
+
);
|
|
1627
|
+
|
|
1628
|
+
sst['throws'](
|
|
1629
|
+
function () {
|
|
1630
|
+
qs.parse('a[][]=1,2,3,4', { comma: true, arrayLimit: 3, throwOnLimitExceeded: true });
|
|
1631
|
+
},
|
|
1632
|
+
new RangeError('Array limit exceeded. Only 3 elements allowed in an array.'),
|
|
1633
|
+
'a doubly bracket-pushed key throws'
|
|
1634
|
+
);
|
|
1635
|
+
|
|
1636
|
+
sst['throws'](
|
|
1637
|
+
function () {
|
|
1638
|
+
qs.parse('a[]=5&a[]=1,2,3,4', { comma: true, arrayLimit: 3, throwOnLimitExceeded: true });
|
|
1639
|
+
},
|
|
1640
|
+
new RangeError('Array limit exceeded. Only 3 elements allowed in an array.'),
|
|
1641
|
+
'an oversized group appended after a scalar throws'
|
|
1642
|
+
);
|
|
1643
|
+
|
|
1644
|
+
sst['throws'](
|
|
1645
|
+
function () {
|
|
1646
|
+
qs.parse('a[]=1,2,3,4&a[]=5', { comma: true, arrayLimit: 3, throwOnLimitExceeded: true });
|
|
1647
|
+
},
|
|
1648
|
+
new RangeError('Array limit exceeded. Only 3 elements allowed in an array.'),
|
|
1649
|
+
'an oversized group throws even when a later part would fit'
|
|
1650
|
+
);
|
|
1651
|
+
|
|
1652
|
+
sst['throws'](
|
|
1653
|
+
function () {
|
|
1654
|
+
qs.parse('a[]=1,2,3,4&a[]=5', { comma: true, arrayLimit: 3, throwOnLimitExceeded: true, duplicates: 'first' });
|
|
1655
|
+
},
|
|
1656
|
+
new RangeError('Array limit exceeded. Only 3 elements allowed in an array.'),
|
|
1657
|
+
'throws with duplicates: first'
|
|
1658
|
+
);
|
|
1659
|
+
|
|
1660
|
+
sst['throws'](
|
|
1661
|
+
function () {
|
|
1662
|
+
qs.parse('a[]=5&a[]=1,2,3,4', { comma: true, arrayLimit: 3, throwOnLimitExceeded: true, duplicates: 'last' });
|
|
1663
|
+
},
|
|
1664
|
+
new RangeError('Array limit exceeded. Only 3 elements allowed in an array.'),
|
|
1665
|
+
'throws with duplicates: last'
|
|
1666
|
+
);
|
|
1667
|
+
|
|
1668
|
+
sst['throws'](
|
|
1669
|
+
function () {
|
|
1670
|
+
qs.parse({ a: '1,2,3,4' }, { comma: true, arrayLimit: 3, throwOnLimitExceeded: true });
|
|
1671
|
+
},
|
|
1672
|
+
new RangeError('Array limit exceeded. Only 3 elements allowed in an array.'),
|
|
1673
|
+
'an oversized comma value in object input throws'
|
|
1674
|
+
);
|
|
1675
|
+
|
|
1676
|
+
var big = 'a[]=' + new Array(1e5 + 1).join('1,') + '1';
|
|
1677
|
+
sst['throws'](
|
|
1678
|
+
function () {
|
|
1679
|
+
qs.parse(big, { comma: true, arrayLimit: 3, throwOnLimitExceeded: true });
|
|
1680
|
+
},
|
|
1681
|
+
new RangeError('Array limit exceeded. Only 3 elements allowed in an array.'),
|
|
1682
|
+
'a very long bracket-push comma group throws'
|
|
1683
|
+
);
|
|
1684
|
+
sst.end();
|
|
1685
|
+
});
|
|
1686
|
+
|
|
1687
|
+
st.test('does not throw for a comma group under `[]=` within arrayLimit', function (sst) {
|
|
1688
|
+
sst.deepEqual(
|
|
1689
|
+
qs.parse('a[]=1,2,3', { comma: true, arrayLimit: 3, throwOnLimitExceeded: true }),
|
|
1690
|
+
{ a: [['1', '2', '3']] },
|
|
1691
|
+
'an inner group exactly at the limit stays a single nested element'
|
|
1692
|
+
);
|
|
1693
|
+
sst.deepEqual(
|
|
1694
|
+
qs.parse('a[]=1,2,3&a[]=4,5,6&a[]=7', { comma: true, arrayLimit: 3, throwOnLimitExceeded: true }),
|
|
1695
|
+
{ a: [['1', '2', '3'], ['4', '5', '6'], '7'] },
|
|
1696
|
+
'each group counts as one element of the outer array'
|
|
1697
|
+
);
|
|
1698
|
+
sst.deepEqual(
|
|
1699
|
+
qs.parse('a[b][]=1,2,3', { comma: true, arrayLimit: 3, throwOnLimitExceeded: true }),
|
|
1700
|
+
{ a: { b: [['1', '2', '3']] } },
|
|
1701
|
+
'nested bracket-push key within the limit'
|
|
1702
|
+
);
|
|
1703
|
+
sst.deepEqual(
|
|
1704
|
+
qs.parse({ a: '1,2,3' }, { comma: true, arrayLimit: 3, throwOnLimitExceeded: true }),
|
|
1705
|
+
{ a: ['1', '2', '3'] },
|
|
1706
|
+
'object input within the limit'
|
|
1707
|
+
);
|
|
1708
|
+
sst.end();
|
|
1709
|
+
});
|
|
1710
|
+
|
|
1711
|
+
st.test('keeps an oversized comma group under `[]=` as a nested array without throwOnLimitExceeded', function (sst) {
|
|
1712
|
+
sst.deepEqual(
|
|
1713
|
+
qs.parse('a[]=1,2,3,4', { comma: true, arrayLimit: 3 }),
|
|
1714
|
+
{ a: [['1', '2', '3', '4']] },
|
|
1715
|
+
'the inner group is not converted to an overflow object'
|
|
1716
|
+
);
|
|
1528
1717
|
sst.end();
|
|
1529
1718
|
});
|
|
1530
1719
|
|