ecma-evaluator 2.1.0 → 2.1.1
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/README.md +2 -2
- package/README.zh-CN.md +2 -2
- package/dist/cjs/Evaluator.d.cts +0 -8
- package/dist/cjs/index.cjs +914 -199
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/Evaluator.d.mts +0 -8
- package/dist/esm/index.mjs +914 -199
- package/dist/esm/index.mjs.map +1 -1
- package/package.json +13 -7
package/dist/esm/index.mjs
CHANGED
|
@@ -235,7 +235,7 @@ var blockedGlobalBuiltIns = [
|
|
|
235
235
|
"Intl",
|
|
236
236
|
"Deno"
|
|
237
237
|
];
|
|
238
|
-
function
|
|
238
|
+
function regExpSafety_array_like_to_array(arr, len) {
|
|
239
239
|
if (null == len || len > arr.length) len = arr.length;
|
|
240
240
|
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
241
241
|
return arr2;
|
|
@@ -243,6 +243,516 @@ function Evaluator_array_like_to_array(arr, len) {
|
|
|
243
243
|
function _array_with_holes(arr) {
|
|
244
244
|
if (Array.isArray(arr)) return arr;
|
|
245
245
|
}
|
|
246
|
+
function _iterable_to_array_limit(arr, i) {
|
|
247
|
+
var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
|
|
248
|
+
if (null == _i) return;
|
|
249
|
+
var _arr = [];
|
|
250
|
+
var _n = true;
|
|
251
|
+
var _d = false;
|
|
252
|
+
var _s, _e;
|
|
253
|
+
try {
|
|
254
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
255
|
+
_arr.push(_s.value);
|
|
256
|
+
if (i && _arr.length === i) break;
|
|
257
|
+
}
|
|
258
|
+
} catch (err) {
|
|
259
|
+
_d = true;
|
|
260
|
+
_e = err;
|
|
261
|
+
} finally{
|
|
262
|
+
try {
|
|
263
|
+
if (!_n && null != _i["return"]) _i["return"]();
|
|
264
|
+
} finally{
|
|
265
|
+
if (_d) throw _e;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return _arr;
|
|
269
|
+
}
|
|
270
|
+
function _non_iterable_rest() {
|
|
271
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
272
|
+
}
|
|
273
|
+
function _sliced_to_array(arr, i) {
|
|
274
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || regExpSafety_unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
275
|
+
}
|
|
276
|
+
function regExpSafety_unsupported_iterable_to_array(o, minLen) {
|
|
277
|
+
if (!o) return;
|
|
278
|
+
if ("string" == typeof o) return regExpSafety_array_like_to_array(o, minLen);
|
|
279
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
280
|
+
if ("Object" === n && o.constructor) n = o.constructor.name;
|
|
281
|
+
if ("Map" === n || "Set" === n) return Array.from(n);
|
|
282
|
+
if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return regExpSafety_array_like_to_array(o, minLen);
|
|
283
|
+
}
|
|
284
|
+
function isUnsafeRegExpPattern(pattern) {
|
|
285
|
+
var pos = 0;
|
|
286
|
+
var depth = 0;
|
|
287
|
+
var MAX_DEPTH = 1000;
|
|
288
|
+
function parseAlternation() {
|
|
289
|
+
var start = pos;
|
|
290
|
+
var branches = [
|
|
291
|
+
parseSequence()
|
|
292
|
+
];
|
|
293
|
+
while("|" === pattern[pos]){
|
|
294
|
+
pos++;
|
|
295
|
+
branches.push(parseSequence());
|
|
296
|
+
}
|
|
297
|
+
if (1 === branches.length) return branches[0];
|
|
298
|
+
return {
|
|
299
|
+
type: "alt",
|
|
300
|
+
branches: branches,
|
|
301
|
+
start: start,
|
|
302
|
+
end: pos
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function parseSequence() {
|
|
306
|
+
var start = pos;
|
|
307
|
+
var terms = [];
|
|
308
|
+
while(pos < pattern.length && "|" !== pattern[pos] && ")" !== pattern[pos])terms.push(parseTerm());
|
|
309
|
+
return {
|
|
310
|
+
type: "seq",
|
|
311
|
+
terms: terms,
|
|
312
|
+
start: start,
|
|
313
|
+
end: pos
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
function parseTerm() {
|
|
317
|
+
var atom = parseAtom();
|
|
318
|
+
var quantifier = parseQuantifier();
|
|
319
|
+
if (quantifier) return {
|
|
320
|
+
type: "quant",
|
|
321
|
+
min: quantifier.min,
|
|
322
|
+
max: quantifier.max,
|
|
323
|
+
body: atom,
|
|
324
|
+
start: atom.start,
|
|
325
|
+
end: pos
|
|
326
|
+
};
|
|
327
|
+
return atom;
|
|
328
|
+
}
|
|
329
|
+
function parseQuantifier() {
|
|
330
|
+
var ch = pattern[pos];
|
|
331
|
+
if ("*" === ch) {
|
|
332
|
+
pos++;
|
|
333
|
+
return {
|
|
334
|
+
min: 0,
|
|
335
|
+
max: 1 / 0
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
if ("+" === ch) {
|
|
339
|
+
pos++;
|
|
340
|
+
return {
|
|
341
|
+
min: 1,
|
|
342
|
+
max: 1 / 0
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
if ("?" === ch) {
|
|
346
|
+
pos++;
|
|
347
|
+
return {
|
|
348
|
+
min: 0,
|
|
349
|
+
max: 1
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
if ("{" === ch) {
|
|
353
|
+
var match = /^\{(\d+)(,(\d*))?\}/.exec(pattern.slice(pos));
|
|
354
|
+
if (match) {
|
|
355
|
+
pos += match[0].length;
|
|
356
|
+
var min = Number(match[1]);
|
|
357
|
+
var max;
|
|
358
|
+
max = void 0 === match[2] ? min : "" === match[3] ? 1 / 0 : Number(match[3]);
|
|
359
|
+
return {
|
|
360
|
+
min: min,
|
|
361
|
+
max: max
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return null;
|
|
366
|
+
}
|
|
367
|
+
function parseAtom() {
|
|
368
|
+
var start = pos;
|
|
369
|
+
var ch = pattern[pos];
|
|
370
|
+
if ("(" === ch) {
|
|
371
|
+
pos++;
|
|
372
|
+
var zeroWidth = false;
|
|
373
|
+
if ("?" === pattern[pos]) {
|
|
374
|
+
var rest = pattern.slice(pos);
|
|
375
|
+
if (rest.startsWith("?:")) pos += 2;
|
|
376
|
+
else if (rest.startsWith("?=") || rest.startsWith("?!")) {
|
|
377
|
+
pos += 2;
|
|
378
|
+
zeroWidth = true;
|
|
379
|
+
} else if (rest.startsWith("?<=") || rest.startsWith("?<!")) {
|
|
380
|
+
pos += 3;
|
|
381
|
+
zeroWidth = true;
|
|
382
|
+
} else if (rest.startsWith("?<")) {
|
|
383
|
+
var named = /^\?<[A-Za-z_$][\w$]*>/.exec(rest);
|
|
384
|
+
pos += named ? named[0].length : 2;
|
|
385
|
+
} else pos += 1;
|
|
386
|
+
}
|
|
387
|
+
depth++;
|
|
388
|
+
if (depth > MAX_DEPTH) throw new RangeError("regexp nesting too deep");
|
|
389
|
+
var body = parseAlternation();
|
|
390
|
+
depth--;
|
|
391
|
+
if (")" === pattern[pos]) pos++;
|
|
392
|
+
return {
|
|
393
|
+
type: "group",
|
|
394
|
+
body: body,
|
|
395
|
+
zeroWidth: zeroWidth,
|
|
396
|
+
start: start,
|
|
397
|
+
end: pos
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
if ("[" === ch) {
|
|
401
|
+
pos++;
|
|
402
|
+
if ("^" === pattern[pos]) pos++;
|
|
403
|
+
if ("]" === pattern[pos]) pos++;
|
|
404
|
+
while(pos < pattern.length && "]" !== pattern[pos]){
|
|
405
|
+
if ("\\" === pattern[pos]) pos++;
|
|
406
|
+
pos++;
|
|
407
|
+
}
|
|
408
|
+
pos++;
|
|
409
|
+
return {
|
|
410
|
+
type: "char",
|
|
411
|
+
zeroWidth: false,
|
|
412
|
+
start: start,
|
|
413
|
+
end: pos
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
if ("\\" === ch) {
|
|
417
|
+
pos += 2;
|
|
418
|
+
var escaped = pattern[start + 1];
|
|
419
|
+
return {
|
|
420
|
+
type: "char",
|
|
421
|
+
zeroWidth: "b" === escaped || "B" === escaped,
|
|
422
|
+
start: start,
|
|
423
|
+
end: pos
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
pos++;
|
|
427
|
+
return {
|
|
428
|
+
type: "char",
|
|
429
|
+
zeroWidth: "^" === ch || "$" === ch,
|
|
430
|
+
start: start,
|
|
431
|
+
end: pos
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
var raw = function(node) {
|
|
435
|
+
return pattern.slice(node.start, node.end);
|
|
436
|
+
};
|
|
437
|
+
var ANY = Symbol("any");
|
|
438
|
+
var DIGITS = new Set("0123456789".split(""));
|
|
439
|
+
var WORD = new Set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_".split(""));
|
|
440
|
+
var SPACES = new Set([
|
|
441
|
+
" ",
|
|
442
|
+
"\t",
|
|
443
|
+
"\n",
|
|
444
|
+
"\r",
|
|
445
|
+
"\f",
|
|
446
|
+
"\v",
|
|
447
|
+
"\u00a0",
|
|
448
|
+
"\ufeff",
|
|
449
|
+
"\u2028",
|
|
450
|
+
"\u2029"
|
|
451
|
+
]);
|
|
452
|
+
function escapeSet(esc) {
|
|
453
|
+
switch(esc){
|
|
454
|
+
case "d":
|
|
455
|
+
return DIGITS;
|
|
456
|
+
case "w":
|
|
457
|
+
return WORD;
|
|
458
|
+
case "s":
|
|
459
|
+
return SPACES;
|
|
460
|
+
case "n":
|
|
461
|
+
return new Set([
|
|
462
|
+
"\n"
|
|
463
|
+
]);
|
|
464
|
+
case "t":
|
|
465
|
+
return new Set([
|
|
466
|
+
"\t"
|
|
467
|
+
]);
|
|
468
|
+
case "r":
|
|
469
|
+
return new Set([
|
|
470
|
+
"\r"
|
|
471
|
+
]);
|
|
472
|
+
case "f":
|
|
473
|
+
return new Set([
|
|
474
|
+
"\f"
|
|
475
|
+
]);
|
|
476
|
+
case "v":
|
|
477
|
+
return new Set([
|
|
478
|
+
"\v"
|
|
479
|
+
]);
|
|
480
|
+
case "0":
|
|
481
|
+
return new Set([
|
|
482
|
+
"\0"
|
|
483
|
+
]);
|
|
484
|
+
default:
|
|
485
|
+
if (/[0-9A-Za-z]/.test(esc)) return ANY;
|
|
486
|
+
return new Set([
|
|
487
|
+
esc
|
|
488
|
+
]);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
function classSet(text) {
|
|
492
|
+
var inner = text.slice(1, -1);
|
|
493
|
+
if (inner.startsWith("^")) return ANY;
|
|
494
|
+
var set = new Set();
|
|
495
|
+
for(var i = 0; i < inner.length; i++){
|
|
496
|
+
var ch = inner[i];
|
|
497
|
+
if ("\\" === ch) {
|
|
498
|
+
var esc = inner[++i];
|
|
499
|
+
var expanded = escapeSet(esc);
|
|
500
|
+
if (expanded === ANY) return ANY;
|
|
501
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
502
|
+
try {
|
|
503
|
+
for(var _iterator = expanded[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
504
|
+
var c = _step.value;
|
|
505
|
+
set.add(c);
|
|
506
|
+
}
|
|
507
|
+
} catch (err) {
|
|
508
|
+
_didIteratorError = true;
|
|
509
|
+
_iteratorError = err;
|
|
510
|
+
} finally{
|
|
511
|
+
try {
|
|
512
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
513
|
+
} finally{
|
|
514
|
+
if (_didIteratorError) throw _iteratorError;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
continue;
|
|
518
|
+
}
|
|
519
|
+
if ("-" === inner[i + 1] && void 0 !== inner[i + 2] && "]" !== inner[i + 2]) {
|
|
520
|
+
var end = inner[i + 2];
|
|
521
|
+
var startCode = ch.codePointAt(0);
|
|
522
|
+
var endCode = end.codePointAt(0);
|
|
523
|
+
if (endCode - startCode > 1024) return ANY;
|
|
524
|
+
for(var code = startCode; code <= endCode; code++)set.add(String.fromCodePoint(code));
|
|
525
|
+
i += 2;
|
|
526
|
+
continue;
|
|
527
|
+
}
|
|
528
|
+
set.add(ch);
|
|
529
|
+
}
|
|
530
|
+
return set;
|
|
531
|
+
}
|
|
532
|
+
function firstCharSet(node) {
|
|
533
|
+
switch(node.type){
|
|
534
|
+
case "char":
|
|
535
|
+
var text = raw(node);
|
|
536
|
+
if (node.zeroWidth || text.startsWith("^") || text.startsWith("$")) return new Set();
|
|
537
|
+
if ("." === text) return ANY;
|
|
538
|
+
if (text.startsWith("[")) return classSet(text);
|
|
539
|
+
if (text.startsWith("\\")) {
|
|
540
|
+
var esc = text.slice(1);
|
|
541
|
+
if (1 === esc.length) return escapeSet(esc);
|
|
542
|
+
return ANY;
|
|
543
|
+
}
|
|
544
|
+
return new Set([
|
|
545
|
+
text[0]
|
|
546
|
+
]);
|
|
547
|
+
case "quant":
|
|
548
|
+
return 0 === node.min ? ANY : firstCharSet(node.body);
|
|
549
|
+
case "group":
|
|
550
|
+
return node.zeroWidth ? ANY : firstCharSet(node.body);
|
|
551
|
+
case "alt":
|
|
552
|
+
var union = new Set();
|
|
553
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
554
|
+
try {
|
|
555
|
+
for(var _iterator = node.branches[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
556
|
+
var branch = _step.value;
|
|
557
|
+
var set = firstCharSet(branch);
|
|
558
|
+
if (set === ANY) return ANY;
|
|
559
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
|
|
560
|
+
try {
|
|
561
|
+
for(var _iterator1 = set[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
562
|
+
var ch = _step1.value;
|
|
563
|
+
union.add(ch);
|
|
564
|
+
}
|
|
565
|
+
} catch (err) {
|
|
566
|
+
_didIteratorError1 = true;
|
|
567
|
+
_iteratorError1 = err;
|
|
568
|
+
} finally{
|
|
569
|
+
try {
|
|
570
|
+
if (!_iteratorNormalCompletion1 && null != _iterator1.return) _iterator1.return();
|
|
571
|
+
} finally{
|
|
572
|
+
if (_didIteratorError1) throw _iteratorError1;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
} catch (err) {
|
|
577
|
+
_didIteratorError = true;
|
|
578
|
+
_iteratorError = err;
|
|
579
|
+
} finally{
|
|
580
|
+
try {
|
|
581
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
582
|
+
} finally{
|
|
583
|
+
if (_didIteratorError) throw _iteratorError;
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
return union;
|
|
587
|
+
case "seq":
|
|
588
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
|
|
589
|
+
try {
|
|
590
|
+
for(var _iterator2 = node.terms[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
|
|
591
|
+
var term = _step2.value;
|
|
592
|
+
var set1 = firstCharSet(term);
|
|
593
|
+
if (set1 === ANY) return ANY;
|
|
594
|
+
if (set1.size > 0) return set1;
|
|
595
|
+
}
|
|
596
|
+
} catch (err) {
|
|
597
|
+
_didIteratorError2 = true;
|
|
598
|
+
_iteratorError2 = err;
|
|
599
|
+
} finally{
|
|
600
|
+
try {
|
|
601
|
+
if (!_iteratorNormalCompletion2 && null != _iterator2.return) _iterator2.return();
|
|
602
|
+
} finally{
|
|
603
|
+
if (_didIteratorError2) throw _iteratorError2;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
return new Set();
|
|
607
|
+
default:
|
|
608
|
+
return ANY;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
function setsIntersect(a, b) {
|
|
612
|
+
if (a === ANY || b === ANY) return true;
|
|
613
|
+
if (0 === a.size || 0 === b.size) return false;
|
|
614
|
+
var _ref = _sliced_to_array(a.size <= b.size ? [
|
|
615
|
+
a,
|
|
616
|
+
b
|
|
617
|
+
] : [
|
|
618
|
+
b,
|
|
619
|
+
a
|
|
620
|
+
], 2), small = _ref[0], large = _ref[1];
|
|
621
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
622
|
+
try {
|
|
623
|
+
for(var _iterator = small[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
624
|
+
var ch = _step.value;
|
|
625
|
+
if (large.has(ch)) return true;
|
|
626
|
+
}
|
|
627
|
+
} catch (err) {
|
|
628
|
+
_didIteratorError = true;
|
|
629
|
+
_iteratorError = err;
|
|
630
|
+
} finally{
|
|
631
|
+
try {
|
|
632
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
633
|
+
} finally{
|
|
634
|
+
if (_didIteratorError) throw _iteratorError;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
return false;
|
|
638
|
+
}
|
|
639
|
+
function consumableCharSet(quantNode) {
|
|
640
|
+
return firstCharSet(quantNode.body);
|
|
641
|
+
}
|
|
642
|
+
function trailingQuantifier(node) {
|
|
643
|
+
switch(node.type){
|
|
644
|
+
case "quant":
|
|
645
|
+
return node.max === 1 / 0 ? node : null;
|
|
646
|
+
case "group":
|
|
647
|
+
return node.zeroWidth ? null : trailingQuantifier(node.body);
|
|
648
|
+
case "seq":
|
|
649
|
+
for(var i = node.terms.length - 1; i >= 0; i--){
|
|
650
|
+
var quantifier = trailingQuantifier(node.terms[i]);
|
|
651
|
+
if (quantifier) return quantifier;
|
|
652
|
+
var set = firstCharSet(node.terms[i]);
|
|
653
|
+
if (set === ANY || set.size > 0) break;
|
|
654
|
+
}
|
|
655
|
+
return null;
|
|
656
|
+
default:
|
|
657
|
+
return null;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
function leadingQuantifier(node) {
|
|
661
|
+
switch(node.type){
|
|
662
|
+
case "quant":
|
|
663
|
+
return node.max === 1 / 0 ? node : null;
|
|
664
|
+
case "group":
|
|
665
|
+
return node.zeroWidth ? null : leadingQuantifier(node.body);
|
|
666
|
+
case "seq":
|
|
667
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
668
|
+
try {
|
|
669
|
+
for(var _iterator = node.terms[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
670
|
+
var term = _step.value;
|
|
671
|
+
var quantifier = leadingQuantifier(term);
|
|
672
|
+
if (quantifier) return quantifier;
|
|
673
|
+
var set = firstCharSet(term);
|
|
674
|
+
if (set === ANY || set.size > 0) return null;
|
|
675
|
+
}
|
|
676
|
+
} catch (err) {
|
|
677
|
+
_didIteratorError = true;
|
|
678
|
+
_iteratorError = err;
|
|
679
|
+
} finally{
|
|
680
|
+
try {
|
|
681
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
682
|
+
} finally{
|
|
683
|
+
if (_didIteratorError) throw _iteratorError;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
return null;
|
|
687
|
+
default:
|
|
688
|
+
return null;
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
function hasAdjacentOverlappingQuantifiers(seqNode) {
|
|
692
|
+
var terms = seqNode.terms;
|
|
693
|
+
for(var i = 0; i + 1 < terms.length; i++){
|
|
694
|
+
var left = trailingQuantifier(terms[i]);
|
|
695
|
+
var right = leadingQuantifier(terms[i + 1]);
|
|
696
|
+
if (left && right && setsIntersect(consumableCharSet(left), consumableCharSet(right))) return true;
|
|
697
|
+
}
|
|
698
|
+
return false;
|
|
699
|
+
}
|
|
700
|
+
function containsUnboundedQuantifier(node) {
|
|
701
|
+
switch(node.type){
|
|
702
|
+
case "quant":
|
|
703
|
+
if (node.max === 1 / 0) return true;
|
|
704
|
+
return containsUnboundedQuantifier(node.body);
|
|
705
|
+
case "group":
|
|
706
|
+
return containsUnboundedQuantifier(node.body);
|
|
707
|
+
case "alt":
|
|
708
|
+
return node.branches.some(containsUnboundedQuantifier);
|
|
709
|
+
case "seq":
|
|
710
|
+
return node.terms.some(containsUnboundedQuantifier);
|
|
711
|
+
default:
|
|
712
|
+
return false;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
function alternationOverlaps(node) {
|
|
716
|
+
if ("alt" !== node.type) return false;
|
|
717
|
+
var texts = node.branches.map(raw).sort();
|
|
718
|
+
for(var i = 0; i + 1 < texts.length; i++)if ("" === texts[i] || texts[i + 1].startsWith(texts[i])) return true;
|
|
719
|
+
var sets = node.branches.map(firstCharSet);
|
|
720
|
+
for(var i1 = 0; i1 < sets.length; i1++)for(var j = i1 + 1; j < sets.length; j++)if (setsIntersect(sets[i1], sets[j])) return true;
|
|
721
|
+
return false;
|
|
722
|
+
}
|
|
723
|
+
function isCatastrophic(node) {
|
|
724
|
+
switch(node.type){
|
|
725
|
+
case "quant":
|
|
726
|
+
if (node.max === 1 / 0) {
|
|
727
|
+
var inner = "group" === node.body.type ? node.body.body : node.body;
|
|
728
|
+
if (containsUnboundedQuantifier(inner)) return true;
|
|
729
|
+
if ("alt" === inner.type && alternationOverlaps(inner)) return true;
|
|
730
|
+
}
|
|
731
|
+
return isCatastrophic(node.body);
|
|
732
|
+
case "group":
|
|
733
|
+
return isCatastrophic(node.body);
|
|
734
|
+
case "alt":
|
|
735
|
+
return node.branches.some(isCatastrophic);
|
|
736
|
+
case "seq":
|
|
737
|
+
return hasAdjacentOverlappingQuantifiers(node) || node.terms.some(isCatastrophic);
|
|
738
|
+
default:
|
|
739
|
+
return false;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
try {
|
|
743
|
+
return isCatastrophic(parseAlternation());
|
|
744
|
+
} catch (e) {
|
|
745
|
+
return false;
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
function Evaluator_array_like_to_array(arr, len) {
|
|
749
|
+
if (null == len || len > arr.length) len = arr.length;
|
|
750
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
751
|
+
return arr2;
|
|
752
|
+
}
|
|
753
|
+
function Evaluator_array_with_holes(arr) {
|
|
754
|
+
if (Array.isArray(arr)) return arr;
|
|
755
|
+
}
|
|
246
756
|
function Evaluator_array_without_holes(arr) {
|
|
247
757
|
if (Array.isArray(arr)) return Evaluator_array_like_to_array(arr);
|
|
248
758
|
}
|
|
@@ -283,7 +793,7 @@ function _instanceof(left, right) {
|
|
|
283
793
|
function Evaluator_iterable_to_array(iter) {
|
|
284
794
|
if ("undefined" != typeof Symbol && null != iter[Symbol.iterator] || null != iter["@@iterator"]) return Array.from(iter);
|
|
285
795
|
}
|
|
286
|
-
function
|
|
796
|
+
function Evaluator_non_iterable_rest() {
|
|
287
797
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
288
798
|
}
|
|
289
799
|
function Evaluator_non_iterable_spread() {
|
|
@@ -297,7 +807,7 @@ function _set_prototype_of(o, p) {
|
|
|
297
807
|
return _set_prototype_of(o, p);
|
|
298
808
|
}
|
|
299
809
|
function _to_array(arr) {
|
|
300
|
-
return
|
|
810
|
+
return Evaluator_array_with_holes(arr) || Evaluator_iterable_to_array(arr) || Evaluator_unsupported_iterable_to_array(arr) || Evaluator_non_iterable_rest();
|
|
301
811
|
}
|
|
302
812
|
function Evaluator_to_consumable_array(arr) {
|
|
303
813
|
return Evaluator_array_without_holes(arr) || Evaluator_iterable_to_array(arr) || Evaluator_unsupported_iterable_to_array(arr) || Evaluator_non_iterable_spread();
|
|
@@ -400,6 +910,56 @@ var TYPED_ARRAY_MUTATORS = function() {
|
|
|
400
910
|
}
|
|
401
911
|
return map;
|
|
402
912
|
}();
|
|
913
|
+
var REGEXP_SYMBOL_METHODS = new Set([
|
|
914
|
+
Symbol.match,
|
|
915
|
+
Symbol.matchAll,
|
|
916
|
+
Symbol.replace,
|
|
917
|
+
Symbol.search,
|
|
918
|
+
Symbol.split
|
|
919
|
+
].map(function(symbol) {
|
|
920
|
+
return RegExp.prototype[symbol];
|
|
921
|
+
}).filter(function(method) {
|
|
922
|
+
return "function" == typeof method;
|
|
923
|
+
}));
|
|
924
|
+
var REGEXP_INVOCATION_KIND = function() {
|
|
925
|
+
var map = new Map();
|
|
926
|
+
for(var _i = 0, _iter = [
|
|
927
|
+
String.prototype.match,
|
|
928
|
+
String.prototype.matchAll,
|
|
929
|
+
String.prototype.search
|
|
930
|
+
]; _i < _iter.length; _i++){
|
|
931
|
+
var method = _iter[_i];
|
|
932
|
+
map.set(method, "stringPattern");
|
|
933
|
+
}
|
|
934
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
935
|
+
try {
|
|
936
|
+
for(var _iterator = [
|
|
937
|
+
RegExp.prototype.test,
|
|
938
|
+
RegExp.prototype.exec
|
|
939
|
+
].concat(Evaluator_to_consumable_array(REGEXP_SYMBOL_METHODS))[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
940
|
+
var method1 = _step.value;
|
|
941
|
+
map.set(method1, "receiverPattern");
|
|
942
|
+
}
|
|
943
|
+
} catch (err) {
|
|
944
|
+
_didIteratorError = true;
|
|
945
|
+
_iteratorError = err;
|
|
946
|
+
} finally{
|
|
947
|
+
try {
|
|
948
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
949
|
+
} finally{
|
|
950
|
+
if (_didIteratorError) throw _iteratorError;
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
for(var _i1 = 0, _iter1 = [
|
|
954
|
+
String.prototype.replace,
|
|
955
|
+
String.prototype.replaceAll,
|
|
956
|
+
String.prototype.split
|
|
957
|
+
]; _i1 < _iter1.length; _i1++){
|
|
958
|
+
var method2 = _iter1[_i1];
|
|
959
|
+
map.set(method2, "regexArgument");
|
|
960
|
+
}
|
|
961
|
+
return map;
|
|
962
|
+
}();
|
|
403
963
|
var NO_OBJECT = Symbol("no-object");
|
|
404
964
|
var renderErrorMessage = function(template) {
|
|
405
965
|
var context = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
|
|
@@ -407,6 +967,26 @@ var renderErrorMessage = function(template) {
|
|
|
407
967
|
return String(context[key]);
|
|
408
968
|
});
|
|
409
969
|
};
|
|
970
|
+
var SAFE_REGEXP_PATTERNS = new Set();
|
|
971
|
+
var MAX_SAFE_REGEXP_PATTERNS = 1000;
|
|
972
|
+
function assertSafeRegExpPattern(pattern) {
|
|
973
|
+
if ("string" != typeof pattern || SAFE_REGEXP_PATTERNS.has(pattern)) return;
|
|
974
|
+
if (isUnsafeRegExpPattern(pattern)) throw new RangeError("RegExp pattern may cause catastrophic backtracking and is not allowed");
|
|
975
|
+
if (SAFE_REGEXP_PATTERNS.size >= MAX_SAFE_REGEXP_PATTERNS) SAFE_REGEXP_PATTERNS.delete(SAFE_REGEXP_PATTERNS.values().next().value);
|
|
976
|
+
SAFE_REGEXP_PATTERNS.add(pattern);
|
|
977
|
+
}
|
|
978
|
+
function assertSafeRegExpInvocation(func, target, args) {
|
|
979
|
+
var kind = REGEXP_INVOCATION_KIND.get(func);
|
|
980
|
+
if (void 0 === kind) return;
|
|
981
|
+
if ("stringPattern" === kind) {
|
|
982
|
+
var pattern = args[0];
|
|
983
|
+
if ("string" == typeof pattern) assertSafeRegExpPattern(pattern);
|
|
984
|
+
else if (_instanceof(pattern, RegExp)) assertSafeRegExpPattern(pattern.source);
|
|
985
|
+
return;
|
|
986
|
+
}
|
|
987
|
+
var regexp = "receiverPattern" === kind ? target : args[0];
|
|
988
|
+
if (_instanceof(regexp, RegExp)) assertSafeRegExpPattern(regexp.source);
|
|
989
|
+
}
|
|
410
990
|
function validateLimit(value, name, defaultValue, maximum) {
|
|
411
991
|
if (void 0 === value) return defaultValue;
|
|
412
992
|
if (!Number.isSafeInteger(value) || value < 1 || value > maximum) throw new RangeError("".concat(name, " must be an integer between 1 and ").concat(maximum));
|
|
@@ -423,7 +1003,59 @@ function countLiteralMatches(value, search, all) {
|
|
|
423
1003
|
}
|
|
424
1004
|
return count;
|
|
425
1005
|
}
|
|
1006
|
+
function countRegExpMatches(value, regexp, all) {
|
|
1007
|
+
var flags = regexp.flags.includes("g") ? regexp.flags : regexp.flags + "g";
|
|
1008
|
+
var re = new RegExp(regexp.source, flags);
|
|
1009
|
+
var count = 0;
|
|
1010
|
+
var match;
|
|
1011
|
+
while(null !== (match = re.exec(value))){
|
|
1012
|
+
count++;
|
|
1013
|
+
if (!all || count > MAX_STRING_LENGTH) break;
|
|
1014
|
+
if (re.lastIndex === match.index) re.lastIndex++;
|
|
1015
|
+
}
|
|
1016
|
+
return count;
|
|
1017
|
+
}
|
|
1018
|
+
var PARSE_CACHE = new Map();
|
|
1019
|
+
var MAX_PARSE_CACHE_ENTRIES = 1000;
|
|
1020
|
+
var MAX_PARSE_CACHE_CHARS = 200000;
|
|
1021
|
+
var parseCacheChars = 0;
|
|
1022
|
+
function parseExpression(expression) {
|
|
1023
|
+
var cached = PARSE_CACHE.get(expression);
|
|
1024
|
+
if (void 0 !== cached) return cached;
|
|
1025
|
+
var ast;
|
|
1026
|
+
try {
|
|
1027
|
+
ast = external_acorn_parse(expression, {
|
|
1028
|
+
ecmaVersion: "latest"
|
|
1029
|
+
});
|
|
1030
|
+
} catch (error) {
|
|
1031
|
+
if (_instanceof(error, RangeError) && /call stack/i.test(error.message)) throw new SyntaxError("Expression nesting is too deep to parse");
|
|
1032
|
+
throw error;
|
|
1033
|
+
}
|
|
1034
|
+
if (expression.length <= MAX_PARSE_CACHE_CHARS) {
|
|
1035
|
+
while(PARSE_CACHE.size >= MAX_PARSE_CACHE_ENTRIES || parseCacheChars + expression.length > MAX_PARSE_CACHE_CHARS){
|
|
1036
|
+
var oldestKey = PARSE_CACHE.keys().next().value;
|
|
1037
|
+
if (void 0 === oldestKey) break;
|
|
1038
|
+
parseCacheChars -= oldestKey.length;
|
|
1039
|
+
PARSE_CACHE.delete(oldestKey);
|
|
1040
|
+
}
|
|
1041
|
+
PARSE_CACHE.set(expression, ast);
|
|
1042
|
+
parseCacheChars += expression.length;
|
|
1043
|
+
}
|
|
1044
|
+
return ast;
|
|
1045
|
+
}
|
|
426
1046
|
function assertBoundedData(value, label) {
|
|
1047
|
+
var valueType = void 0 === value ? "undefined" : _type_of(value);
|
|
1048
|
+
if ("string" === valueType) {
|
|
1049
|
+
if (value.length > MAX_STRING_LENGTH) throw new RangeError("".concat(label, " contains a string that exceeds the maximum length"));
|
|
1050
|
+
return {
|
|
1051
|
+
dataSize: value.length + 8,
|
|
1052
|
+
dataNodes: 1
|
|
1053
|
+
};
|
|
1054
|
+
}
|
|
1055
|
+
if (null === value || "undefined" === valueType || "number" === valueType || "boolean" === valueType || "bigint" === valueType) return {
|
|
1056
|
+
dataSize: 8,
|
|
1057
|
+
dataNodes: 1
|
|
1058
|
+
};
|
|
427
1059
|
var pending = [
|
|
428
1060
|
value
|
|
429
1061
|
];
|
|
@@ -493,74 +1125,140 @@ function assertBoundedData(value, label) {
|
|
|
493
1125
|
dataNodes: dataNodes
|
|
494
1126
|
};
|
|
495
1127
|
}
|
|
496
|
-
var BINARY_OPERATION_MAP =
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
1128
|
+
var BINARY_OPERATION_MAP = new Map([
|
|
1129
|
+
[
|
|
1130
|
+
"+",
|
|
1131
|
+
function(a, b) {
|
|
1132
|
+
return a + b;
|
|
1133
|
+
}
|
|
1134
|
+
],
|
|
1135
|
+
[
|
|
1136
|
+
"-",
|
|
1137
|
+
function(a, b) {
|
|
1138
|
+
return a - b;
|
|
1139
|
+
}
|
|
1140
|
+
],
|
|
1141
|
+
[
|
|
1142
|
+
"*",
|
|
1143
|
+
function(a, b) {
|
|
1144
|
+
return a * b;
|
|
1145
|
+
}
|
|
1146
|
+
],
|
|
1147
|
+
[
|
|
1148
|
+
"**",
|
|
1149
|
+
function(a, b) {
|
|
1150
|
+
return Math.pow(a, b);
|
|
1151
|
+
}
|
|
1152
|
+
],
|
|
1153
|
+
[
|
|
1154
|
+
"==",
|
|
1155
|
+
function(a, b) {
|
|
1156
|
+
return a == b;
|
|
1157
|
+
}
|
|
1158
|
+
],
|
|
1159
|
+
[
|
|
1160
|
+
"===",
|
|
1161
|
+
function(a, b) {
|
|
1162
|
+
return a === b;
|
|
1163
|
+
}
|
|
1164
|
+
],
|
|
1165
|
+
[
|
|
1166
|
+
"!=",
|
|
1167
|
+
function(a, b) {
|
|
1168
|
+
return a != b;
|
|
1169
|
+
}
|
|
1170
|
+
],
|
|
1171
|
+
[
|
|
1172
|
+
"!==",
|
|
1173
|
+
function(a, b) {
|
|
1174
|
+
return a !== b;
|
|
1175
|
+
}
|
|
1176
|
+
],
|
|
1177
|
+
[
|
|
1178
|
+
">",
|
|
1179
|
+
function(a, b) {
|
|
1180
|
+
return a > b;
|
|
1181
|
+
}
|
|
1182
|
+
],
|
|
1183
|
+
[
|
|
1184
|
+
">=",
|
|
1185
|
+
function(a, b) {
|
|
1186
|
+
return a >= b;
|
|
1187
|
+
}
|
|
1188
|
+
],
|
|
1189
|
+
[
|
|
1190
|
+
"<",
|
|
1191
|
+
function(a, b) {
|
|
1192
|
+
return a < b;
|
|
1193
|
+
}
|
|
1194
|
+
],
|
|
1195
|
+
[
|
|
1196
|
+
"<=",
|
|
1197
|
+
function(a, b) {
|
|
1198
|
+
return a <= b;
|
|
1199
|
+
}
|
|
1200
|
+
],
|
|
1201
|
+
[
|
|
1202
|
+
"%",
|
|
1203
|
+
function(a, b) {
|
|
1204
|
+
return a % b;
|
|
1205
|
+
}
|
|
1206
|
+
],
|
|
1207
|
+
[
|
|
1208
|
+
"/",
|
|
1209
|
+
function(a, b) {
|
|
1210
|
+
return a / b;
|
|
1211
|
+
}
|
|
1212
|
+
],
|
|
1213
|
+
[
|
|
1214
|
+
"|",
|
|
1215
|
+
function(a, b) {
|
|
1216
|
+
return a | b;
|
|
1217
|
+
}
|
|
1218
|
+
],
|
|
1219
|
+
[
|
|
1220
|
+
"&",
|
|
1221
|
+
function(a, b) {
|
|
1222
|
+
return a & b;
|
|
1223
|
+
}
|
|
1224
|
+
],
|
|
1225
|
+
[
|
|
1226
|
+
"^",
|
|
1227
|
+
function(a, b) {
|
|
1228
|
+
return a ^ b;
|
|
1229
|
+
}
|
|
1230
|
+
],
|
|
1231
|
+
[
|
|
1232
|
+
"<<",
|
|
1233
|
+
function(a, b) {
|
|
1234
|
+
return a << b;
|
|
1235
|
+
}
|
|
1236
|
+
],
|
|
1237
|
+
[
|
|
1238
|
+
">>",
|
|
1239
|
+
function(a, b) {
|
|
1240
|
+
return a >> b;
|
|
1241
|
+
}
|
|
1242
|
+
],
|
|
1243
|
+
[
|
|
1244
|
+
">>>",
|
|
1245
|
+
function(a, b) {
|
|
1246
|
+
return a >>> b;
|
|
1247
|
+
}
|
|
1248
|
+
],
|
|
1249
|
+
[
|
|
1250
|
+
"in",
|
|
1251
|
+
function(a, b) {
|
|
1252
|
+
return a in b;
|
|
1253
|
+
}
|
|
1254
|
+
],
|
|
1255
|
+
[
|
|
1256
|
+
"instanceof",
|
|
1257
|
+
function(a, b) {
|
|
1258
|
+
return _instanceof(a, b);
|
|
1259
|
+
}
|
|
1260
|
+
]
|
|
1261
|
+
]);
|
|
564
1262
|
function createGlobalScope() {
|
|
565
1263
|
var scope = Object.create(null);
|
|
566
1264
|
var builtin = globals.builtin;
|
|
@@ -587,7 +1285,12 @@ function createGlobalScope() {
|
|
|
587
1285
|
});
|
|
588
1286
|
return scope;
|
|
589
1287
|
}
|
|
590
|
-
var GLOBAL_SCOPE =
|
|
1288
|
+
var GLOBAL_SCOPE = null;
|
|
1289
|
+
function getGlobalScope() {
|
|
1290
|
+
if (null === GLOBAL_SCOPE) GLOBAL_SCOPE = createGlobalScope();
|
|
1291
|
+
return GLOBAL_SCOPE;
|
|
1292
|
+
}
|
|
1293
|
+
var EMPTY_CONTEXT = Object.freeze(Object.create(null));
|
|
591
1294
|
var getBlockedMethods = function() {
|
|
592
1295
|
var BLOCKED_METHODS = null;
|
|
593
1296
|
return function() {
|
|
@@ -638,26 +1341,39 @@ var getBlockedMethods = function() {
|
|
|
638
1341
|
var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
639
1342
|
"use strict";
|
|
640
1343
|
function Evaluator() {
|
|
641
|
-
var variables = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] :
|
|
1344
|
+
var variables = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : EMPTY_CONTEXT, options = arguments.length > 1 ? arguments[1] : void 0;
|
|
642
1345
|
_class_call_check(this, Evaluator);
|
|
643
1346
|
this.maxInputLength = validateLimit(null == options ? void 0 : options.maxInputLength, "maxInputLength", DEFAULT_MAX_INPUT_LENGTH, MAX_CONFIGURABLE_INPUT_LENGTH);
|
|
644
1347
|
this.maxEvaluationSteps = validateLimit(null == options ? void 0 : options.maxEvaluationSteps, "maxEvaluationSteps", DEFAULT_MAX_EVALUATION_STEPS, MAX_CONFIGURABLE_EVALUATION_STEPS);
|
|
645
1348
|
this.maxDepth = validateLimit(null == options ? void 0 : options.maxDepth, "maxDepth", DEFAULT_MAX_DEPTH, MAX_CONFIGURABLE_DEPTH);
|
|
646
|
-
|
|
647
|
-
|
|
1349
|
+
var clonedVariables = EMPTY_CONTEXT;
|
|
1350
|
+
if (variables !== EMPTY_CONTEXT) {
|
|
1351
|
+
assertBoundedData(variables, "Evaluation context");
|
|
1352
|
+
clonedVariables = structuredClone(variables);
|
|
1353
|
+
}
|
|
648
1354
|
this.scopes = [
|
|
649
1355
|
clonedVariables,
|
|
650
|
-
|
|
1356
|
+
getGlobalScope()
|
|
651
1357
|
].filter(function(scope) {
|
|
652
1358
|
return null != scope;
|
|
653
1359
|
});
|
|
654
1360
|
this.source = void 0;
|
|
1361
|
+
this.evaluating = false;
|
|
655
1362
|
this.remainingEvaluationSteps = 0;
|
|
656
1363
|
this.remainingDataSize = MAX_BUFFER_BYTES;
|
|
657
1364
|
this.remainingDataNodes = MAX_DATA_NODES;
|
|
658
1365
|
this.evaluationDepth = 0;
|
|
659
1366
|
}
|
|
660
1367
|
_create_class(Evaluator, [
|
|
1368
|
+
{
|
|
1369
|
+
key: "resetBudget",
|
|
1370
|
+
value: function() {
|
|
1371
|
+
this.remainingEvaluationSteps = this.maxEvaluationSteps;
|
|
1372
|
+
this.remainingDataSize = MAX_BUFFER_BYTES;
|
|
1373
|
+
this.remainingDataNodes = MAX_DATA_NODES;
|
|
1374
|
+
this.evaluationDepth = 0;
|
|
1375
|
+
}
|
|
1376
|
+
},
|
|
661
1377
|
{
|
|
662
1378
|
key: "evaluate",
|
|
663
1379
|
value: function(expression) {
|
|
@@ -666,22 +1382,13 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
666
1382
|
this.maxInputLength
|
|
667
1383
|
]));
|
|
668
1384
|
this.source = expression;
|
|
669
|
-
this.
|
|
670
|
-
|
|
671
|
-
this.
|
|
672
|
-
this.evaluationDepth = 0;
|
|
673
|
-
var ast;
|
|
674
|
-
try {
|
|
675
|
-
ast = external_acorn_parse(expression, {
|
|
676
|
-
ecmaVersion: "latest"
|
|
677
|
-
});
|
|
678
|
-
} catch (error) {
|
|
679
|
-
if (_instanceof(error, RangeError) && /call stack/i.test(error.message)) throw new SyntaxError("Expression nesting is too deep to parse");
|
|
680
|
-
throw error;
|
|
681
|
-
}
|
|
1385
|
+
this.resetBudget();
|
|
1386
|
+
var ast = parseExpression(expression);
|
|
1387
|
+
this.evaluating = true;
|
|
682
1388
|
try {
|
|
683
1389
|
return this.execute(ast.body);
|
|
684
1390
|
} finally{
|
|
1391
|
+
this.evaluating = false;
|
|
685
1392
|
this.source = void 0;
|
|
686
1393
|
}
|
|
687
1394
|
}
|
|
@@ -689,11 +1396,7 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
689
1396
|
{
|
|
690
1397
|
key: "execute",
|
|
691
1398
|
value: function(body) {
|
|
692
|
-
if (
|
|
693
|
-
this.remainingEvaluationSteps = this.maxEvaluationSteps;
|
|
694
|
-
this.remainingDataSize = MAX_BUFFER_BYTES;
|
|
695
|
-
this.remainingDataNodes = MAX_DATA_NODES;
|
|
696
|
-
}
|
|
1399
|
+
if (!this.evaluating) this.resetBudget();
|
|
697
1400
|
var result;
|
|
698
1401
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
699
1402
|
try {
|
|
@@ -718,6 +1421,8 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
718
1421
|
if (_instanceof(result, Promise)) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
719
1422
|
"Returning promises from expressions"
|
|
720
1423
|
]));
|
|
1424
|
+
var resultType = void 0 === result ? "undefined" : _type_of(result);
|
|
1425
|
+
if (null === result || "string" === resultType || "number" === resultType || "boolean" === resultType || "undefined" === resultType || "bigint" === resultType) return result;
|
|
721
1426
|
try {
|
|
722
1427
|
return structuredClone(result);
|
|
723
1428
|
} catch (error) {
|
|
@@ -731,6 +1436,7 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
731
1436
|
{
|
|
732
1437
|
key: "visit",
|
|
733
1438
|
value: function(node) {
|
|
1439
|
+
var _this = this;
|
|
734
1440
|
this.remainingEvaluationSteps--;
|
|
735
1441
|
if (this.remainingEvaluationSteps < 0) throw new RangeError("Evaluation step limit exceeded");
|
|
736
1442
|
this.evaluationDepth++;
|
|
@@ -739,82 +1445,76 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
739
1445
|
throw new RangeError("Maximum evaluation depth exceeded");
|
|
740
1446
|
}
|
|
741
1447
|
try {
|
|
742
|
-
|
|
1448
|
+
switch(node.type){
|
|
1449
|
+
case "ExpressionStatement":
|
|
1450
|
+
return this.visit(node.expression);
|
|
1451
|
+
case "BinaryExpression":
|
|
1452
|
+
return this.handleBinaryExpression(node);
|
|
1453
|
+
case "LogicalExpression":
|
|
1454
|
+
return this.handleLogicalExpression(node);
|
|
1455
|
+
case "UnaryExpression":
|
|
1456
|
+
return this.handleUnaryExpression(node);
|
|
1457
|
+
case "Identifier":
|
|
1458
|
+
return this.handleIdentifier(node);
|
|
1459
|
+
case "Literal":
|
|
1460
|
+
if (node.regex) assertSafeRegExpPattern(node.regex.pattern);
|
|
1461
|
+
return node.value;
|
|
1462
|
+
case "MemberExpression":
|
|
1463
|
+
return this.handleMemberExpression(node);
|
|
1464
|
+
case "ArrayExpression":
|
|
1465
|
+
return this.handleArrayExpression(node);
|
|
1466
|
+
case "SpreadElement":
|
|
1467
|
+
return this.handleSpreadElement(node);
|
|
1468
|
+
case "ObjectExpression":
|
|
1469
|
+
return this.handleObjectExpression(node);
|
|
1470
|
+
case "FunctionExpression":
|
|
1471
|
+
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1472
|
+
"Function expression"
|
|
1473
|
+
]));
|
|
1474
|
+
case "ArrowFunctionExpression":
|
|
1475
|
+
return this.handleArrowFunctionExpression(node);
|
|
1476
|
+
case "CallExpression":
|
|
1477
|
+
return this.handleCallExpression(node);
|
|
1478
|
+
case "ConditionalExpression":
|
|
1479
|
+
return this.visit(node.test) ? this.visit(node.consequent) : this.visit(node.alternate);
|
|
1480
|
+
case "NewExpression":
|
|
1481
|
+
if ("Identifier" !== node.callee.type) throw new Error("Unsupported callee type '".concat(node.callee.type, "' in new expression"));
|
|
1482
|
+
if ("Function" === node.callee.name) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1483
|
+
"new Function() constructor"
|
|
1484
|
+
]));
|
|
1485
|
+
if ("Promise" === node.callee.name) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1486
|
+
"Promise constructor"
|
|
1487
|
+
]));
|
|
1488
|
+
var Constructor = this.visit(node.callee);
|
|
1489
|
+
var args = node.arguments.length ? node.arguments.map(function(arg) {
|
|
1490
|
+
return _this.visit(arg);
|
|
1491
|
+
}) : [];
|
|
1492
|
+
this.assertBoundedConstruction(Constructor, args);
|
|
1493
|
+
return _construct(Constructor, Evaluator_to_consumable_array(args));
|
|
1494
|
+
case "ChainExpression":
|
|
1495
|
+
return this.visit(node.expression);
|
|
1496
|
+
case "TemplateLiteral":
|
|
1497
|
+
return this.handleTemplateLiteral(node);
|
|
1498
|
+
case "ThisExpression":
|
|
1499
|
+
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1500
|
+
"'this' expression"
|
|
1501
|
+
]));
|
|
1502
|
+
case "WithStatement":
|
|
1503
|
+
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1504
|
+
"'with' statement"
|
|
1505
|
+
]));
|
|
1506
|
+
default:
|
|
1507
|
+
var content = this.source.slice(node.start, node.end);
|
|
1508
|
+
if (content.length > 20) content = content.slice(0, 17) + "...";
|
|
1509
|
+
throw new SyntaxError("'".concat(content, "'") + " " + renderErrorMessage(ERROR_MESSAGES.IS_INVALID_SYNTAX, [
|
|
1510
|
+
content
|
|
1511
|
+
]));
|
|
1512
|
+
}
|
|
743
1513
|
} finally{
|
|
744
1514
|
this.evaluationDepth--;
|
|
745
1515
|
}
|
|
746
1516
|
}
|
|
747
1517
|
},
|
|
748
|
-
{
|
|
749
|
-
key: "visitNode",
|
|
750
|
-
value: function(node) {
|
|
751
|
-
var _this = this;
|
|
752
|
-
switch(node.type){
|
|
753
|
-
case "ExpressionStatement":
|
|
754
|
-
return this.visit(node.expression);
|
|
755
|
-
case "BinaryExpression":
|
|
756
|
-
return this.handleBinaryExpression(node);
|
|
757
|
-
case "LogicalExpression":
|
|
758
|
-
return this.handleLogicalExpression(node);
|
|
759
|
-
case "UnaryExpression":
|
|
760
|
-
return this.handleUnaryExpression(node);
|
|
761
|
-
case "Identifier":
|
|
762
|
-
return this.handleIdentifier(node);
|
|
763
|
-
case "Literal":
|
|
764
|
-
return node.value;
|
|
765
|
-
case "MemberExpression":
|
|
766
|
-
return this.handleMemberExpression(node);
|
|
767
|
-
case "ArrayExpression":
|
|
768
|
-
return this.handleArrayExpression(node);
|
|
769
|
-
case "SpreadElement":
|
|
770
|
-
return this.handleSpreadElement(node);
|
|
771
|
-
case "ObjectExpression":
|
|
772
|
-
return this.handleObjectExpression(node);
|
|
773
|
-
case "FunctionExpression":
|
|
774
|
-
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
775
|
-
"Function expression"
|
|
776
|
-
]));
|
|
777
|
-
case "ArrowFunctionExpression":
|
|
778
|
-
return this.handleArrowFunctionExpression(node);
|
|
779
|
-
case "CallExpression":
|
|
780
|
-
return this.handleCallExpression(node);
|
|
781
|
-
case "ConditionalExpression":
|
|
782
|
-
return this.visit(node.test) ? this.visit(node.consequent) : this.visit(node.alternate);
|
|
783
|
-
case "NewExpression":
|
|
784
|
-
if ("Identifier" !== node.callee.type) throw new Error("Unsupported callee type '".concat(node.callee.type, "' in new expression"));
|
|
785
|
-
if ("Function" === node.callee.name) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
786
|
-
"new Function() constructor"
|
|
787
|
-
]));
|
|
788
|
-
if ("Promise" === node.callee.name) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
789
|
-
"Promise constructor"
|
|
790
|
-
]));
|
|
791
|
-
var Constructor = this.visit(node.callee);
|
|
792
|
-
var args = node.arguments.length ? node.arguments.map(function(arg) {
|
|
793
|
-
return _this.visit(arg);
|
|
794
|
-
}) : [];
|
|
795
|
-
this.assertBoundedConstruction(Constructor, args);
|
|
796
|
-
return _construct(Constructor, Evaluator_to_consumable_array(args));
|
|
797
|
-
case "ChainExpression":
|
|
798
|
-
return this.visit(node.expression);
|
|
799
|
-
case "TemplateLiteral":
|
|
800
|
-
return this.handleTemplateLiteral(node);
|
|
801
|
-
case "ThisExpression":
|
|
802
|
-
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
803
|
-
"'this' expression"
|
|
804
|
-
]));
|
|
805
|
-
case "WithStatement":
|
|
806
|
-
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
807
|
-
"'with' statement"
|
|
808
|
-
]));
|
|
809
|
-
default:
|
|
810
|
-
var content = this.source.slice(node.start, node.end);
|
|
811
|
-
if (content.length > 20) content = content.slice(0, 17) + "...";
|
|
812
|
-
throw new SyntaxError("'".concat(content, "'") + " " + renderErrorMessage(ERROR_MESSAGES.IS_INVALID_SYNTAX, [
|
|
813
|
-
content
|
|
814
|
-
]));
|
|
815
|
-
}
|
|
816
|
-
}
|
|
817
|
-
},
|
|
818
1518
|
{
|
|
819
1519
|
key: "handleBinaryExpression",
|
|
820
1520
|
value: function(node) {
|
|
@@ -830,7 +1530,8 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
830
1530
|
var rightBits = right.toString(2).length;
|
|
831
1531
|
if ("**" === op && leftBits * Number(right) > MAX_BIGINT_BITS || "<<" === op && right > BigInt(MAX_BIGINT_BITS) || "<<" === op && right >= 0n && leftBits + Number(right) > MAX_BIGINT_BITS || "*" === op && leftBits + rightBits > MAX_BIGINT_BITS || ("+" === op || "-" === op) && Math.max(leftBits, rightBits) + 1 > MAX_BIGINT_BITS) throw new RangeError("BigInt result exceeds the maximum allowed size");
|
|
832
1532
|
}
|
|
833
|
-
|
|
1533
|
+
var apply = BINARY_OPERATION_MAP.get(op);
|
|
1534
|
+
if (void 0 !== apply) return apply(left, right);
|
|
834
1535
|
throw new SyntaxError("Unsupported operator: ".concat(node.operator));
|
|
835
1536
|
}
|
|
836
1537
|
},
|
|
@@ -839,6 +1540,7 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
839
1540
|
value: function(args) {
|
|
840
1541
|
if ("string" == typeof args[0] && args[0].length > MAX_REGEXP_SOURCE_LENGTH) throw new RangeError("RegExp source exceeds the maximum allowed length");
|
|
841
1542
|
if ("string" == typeof args[1] && args[1].length > MAX_REGEXP_FLAGS_LENGTH) throw new RangeError("RegExp flags exceed the maximum allowed length");
|
|
1543
|
+
assertSafeRegExpPattern(args[0]);
|
|
842
1544
|
}
|
|
843
1545
|
},
|
|
844
1546
|
{
|
|
@@ -919,21 +1621,10 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
919
1621
|
key: "handleIdentifier",
|
|
920
1622
|
value: function(node) {
|
|
921
1623
|
var name = node.name;
|
|
922
|
-
var
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
if (Object.hasOwn(scope, name)) return scope[name];
|
|
927
|
-
}
|
|
928
|
-
} catch (err) {
|
|
929
|
-
_didIteratorError = true;
|
|
930
|
-
_iteratorError = err;
|
|
931
|
-
} finally{
|
|
932
|
-
try {
|
|
933
|
-
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
934
|
-
} finally{
|
|
935
|
-
if (_didIteratorError) throw _iteratorError;
|
|
936
|
-
}
|
|
1624
|
+
var scopes = this.scopes;
|
|
1625
|
+
for(var i = 0; i < scopes.length; i++){
|
|
1626
|
+
var scope = scopes[i];
|
|
1627
|
+
if (Object.hasOwn(scope, name)) return scope[name];
|
|
937
1628
|
}
|
|
938
1629
|
throw new ReferenceError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_DEFINED, [
|
|
939
1630
|
name
|
|
@@ -950,9 +1641,6 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
950
1641
|
if ("stack" === property && _instanceof(object, Error)) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
951
1642
|
"Accessing error stack"
|
|
952
1643
|
]));
|
|
953
|
-
if (null != object && void 0 !== object.__proto__ && object[property] === object.__proto__) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
954
|
-
"Accessing prototype properties"
|
|
955
|
-
]));
|
|
956
1644
|
if (null == object) {
|
|
957
1645
|
if (node.optional) return;
|
|
958
1646
|
throw new TypeError(renderErrorMessage(ERROR_MESSAGES.CAN_NOT_READ_PROPERTY, [
|
|
@@ -964,6 +1652,10 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
964
1652
|
if (result === Function || result === Function.prototype) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
965
1653
|
"Function constructor"
|
|
966
1654
|
]));
|
|
1655
|
+
var prototype = object.__proto__;
|
|
1656
|
+
if (void 0 !== prototype && result === prototype) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1657
|
+
"Accessing prototype properties"
|
|
1658
|
+
]));
|
|
967
1659
|
return result;
|
|
968
1660
|
}
|
|
969
1661
|
},
|
|
@@ -972,7 +1664,7 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
972
1664
|
value: function(node) {
|
|
973
1665
|
var result = [];
|
|
974
1666
|
for(var i = 0; i < node.elements.length; i++){
|
|
975
|
-
var element = node.elements
|
|
1667
|
+
var element = node.elements[i];
|
|
976
1668
|
if (null === element) {
|
|
977
1669
|
result.length++;
|
|
978
1670
|
continue;
|
|
@@ -1043,6 +1735,24 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
1043
1735
|
key: "handleArrowFunctionExpression",
|
|
1044
1736
|
value: function(node) {
|
|
1045
1737
|
var _this = this;
|
|
1738
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
1739
|
+
try {
|
|
1740
|
+
for(var _iterator = node.params[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
1741
|
+
var param = _step.value;
|
|
1742
|
+
if ("Identifier" !== param.type) throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1743
|
+
"Destructuring, default, and rest parameters"
|
|
1744
|
+
]));
|
|
1745
|
+
}
|
|
1746
|
+
} catch (err) {
|
|
1747
|
+
_didIteratorError = true;
|
|
1748
|
+
_iteratorError = err;
|
|
1749
|
+
} finally{
|
|
1750
|
+
try {
|
|
1751
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
1752
|
+
} finally{
|
|
1753
|
+
if (_didIteratorError) throw _iteratorError;
|
|
1754
|
+
}
|
|
1755
|
+
}
|
|
1046
1756
|
return function() {
|
|
1047
1757
|
for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++)args[_key] = arguments[_key];
|
|
1048
1758
|
var newScope = {};
|
|
@@ -1083,15 +1793,13 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
1083
1793
|
if (func === Function) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1084
1794
|
"Function constructor"
|
|
1085
1795
|
]));
|
|
1086
|
-
if (func === Error.prepareStackTrace) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1796
|
+
if ("function" == typeof func && func === Error.prepareStackTrace) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1087
1797
|
"Error.prepareStackTrace"
|
|
1088
1798
|
]));
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
]));
|
|
1094
|
-
}
|
|
1799
|
+
var blockedPath = getBlockedMethods().get(func);
|
|
1800
|
+
if (void 0 !== blockedPath) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1801
|
+
blockedPath
|
|
1802
|
+
]));
|
|
1095
1803
|
if (TYPED_ARRAY_MUTATORS.has(func)) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1096
1804
|
"TypedArray.prototype.".concat(TYPED_ARRAY_MUTATORS.get(func))
|
|
1097
1805
|
]));
|
|
@@ -1099,7 +1807,7 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
1099
1807
|
if (0 === node.arguments.length) return [];
|
|
1100
1808
|
var result = [];
|
|
1101
1809
|
for(var i = 0; i < node.arguments.length; i++){
|
|
1102
|
-
var element = node.arguments
|
|
1810
|
+
var element = node.arguments[i];
|
|
1103
1811
|
var value = _this.visit(element);
|
|
1104
1812
|
if ("SpreadElement" === element.type) {
|
|
1105
1813
|
var _result;
|
|
@@ -1124,19 +1832,26 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
1124
1832
|
if (resultLength > MAX_STRING_LENGTH) throw new RangeError("String result exceeds the maximum allowed length");
|
|
1125
1833
|
}
|
|
1126
1834
|
if (String.prototype.replace && func === String.prototype.replace || String.prototype.replaceAll && func === String.prototype.replaceAll) {
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1835
|
+
var all = func === String.prototype.replaceAll;
|
|
1836
|
+
var search = args[0];
|
|
1837
|
+
var replacement = args[1];
|
|
1838
|
+
if ("function" == typeof replacement) throw new Error("Only literal string replacements are allowed");
|
|
1839
|
+
if ("string" == typeof replacement && RegExp("\\$(?:[$&'`])", "u").test(replacement)) throw new Error("Only literal string replacements are allowed");
|
|
1840
|
+
var matchCount;
|
|
1841
|
+
if ("string" == typeof search) {
|
|
1842
|
+
if (target.length * Math.max(1, search.length) > 10000000) throw new RangeError("String operation exceeds the maximum work limit");
|
|
1843
|
+
matchCount = countLiteralMatches(target, search, all);
|
|
1844
|
+
} else matchCount = _instanceof(search, RegExp) ? countRegExpMatches(target, search, all || search.flags.includes("g")) : 0;
|
|
1845
|
+
if (target.length + matchCount * String(replacement).length > MAX_STRING_LENGTH) throw new RangeError("String result exceeds the maximum allowed length");
|
|
1133
1846
|
}
|
|
1134
1847
|
if (func === String.prototype.split) {
|
|
1135
1848
|
if ("" === args[0] && target.length > MAX_ARRAY_LENGTH) throw new RangeError("Split result exceeds the maximum allowed length");
|
|
1136
1849
|
if ("string" == typeof args[0] && "" !== args[0] && countLiteralMatches(target, args[0], true) >= MAX_ARRAY_LENGTH) throw new RangeError("Split result exceeds the maximum allowed length");
|
|
1850
|
+
if (_instanceof(args[0], RegExp) && countRegExpMatches(target, args[0], true) >= MAX_ARRAY_LENGTH) throw new RangeError("Split result exceeds the maximum allowed length");
|
|
1137
1851
|
}
|
|
1138
1852
|
}
|
|
1139
1853
|
if (func === RegExp) this.assertBoundedRegExp(args);
|
|
1854
|
+
assertSafeRegExpInvocation(func, target, args);
|
|
1140
1855
|
if ((target === Array || isTypedArrayConstructor(target)) && func === target.from) {
|
|
1141
1856
|
var source = args[0];
|
|
1142
1857
|
var _source_size;
|