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/cjs/index.cjs
CHANGED
|
@@ -276,7 +276,7 @@ var blockedGlobalBuiltIns = [
|
|
|
276
276
|
"Intl",
|
|
277
277
|
"Deno"
|
|
278
278
|
];
|
|
279
|
-
function
|
|
279
|
+
function regExpSafety_array_like_to_array(arr, len) {
|
|
280
280
|
if (null == len || len > arr.length) len = arr.length;
|
|
281
281
|
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
282
282
|
return arr2;
|
|
@@ -284,6 +284,516 @@ function Evaluator_array_like_to_array(arr, len) {
|
|
|
284
284
|
function _array_with_holes(arr) {
|
|
285
285
|
if (Array.isArray(arr)) return arr;
|
|
286
286
|
}
|
|
287
|
+
function _iterable_to_array_limit(arr, i) {
|
|
288
|
+
var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
|
|
289
|
+
if (null == _i) return;
|
|
290
|
+
var _arr = [];
|
|
291
|
+
var _n = true;
|
|
292
|
+
var _d = false;
|
|
293
|
+
var _s, _e;
|
|
294
|
+
try {
|
|
295
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
296
|
+
_arr.push(_s.value);
|
|
297
|
+
if (i && _arr.length === i) break;
|
|
298
|
+
}
|
|
299
|
+
} catch (err) {
|
|
300
|
+
_d = true;
|
|
301
|
+
_e = err;
|
|
302
|
+
} finally{
|
|
303
|
+
try {
|
|
304
|
+
if (!_n && null != _i["return"]) _i["return"]();
|
|
305
|
+
} finally{
|
|
306
|
+
if (_d) throw _e;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return _arr;
|
|
310
|
+
}
|
|
311
|
+
function _non_iterable_rest() {
|
|
312
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
313
|
+
}
|
|
314
|
+
function _sliced_to_array(arr, i) {
|
|
315
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || regExpSafety_unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
316
|
+
}
|
|
317
|
+
function regExpSafety_unsupported_iterable_to_array(o, minLen) {
|
|
318
|
+
if (!o) return;
|
|
319
|
+
if ("string" == typeof o) return regExpSafety_array_like_to_array(o, minLen);
|
|
320
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
321
|
+
if ("Object" === n && o.constructor) n = o.constructor.name;
|
|
322
|
+
if ("Map" === n || "Set" === n) return Array.from(n);
|
|
323
|
+
if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return regExpSafety_array_like_to_array(o, minLen);
|
|
324
|
+
}
|
|
325
|
+
function isUnsafeRegExpPattern(pattern) {
|
|
326
|
+
var pos = 0;
|
|
327
|
+
var depth = 0;
|
|
328
|
+
var MAX_DEPTH = 1000;
|
|
329
|
+
function parseAlternation() {
|
|
330
|
+
var start = pos;
|
|
331
|
+
var branches = [
|
|
332
|
+
parseSequence()
|
|
333
|
+
];
|
|
334
|
+
while("|" === pattern[pos]){
|
|
335
|
+
pos++;
|
|
336
|
+
branches.push(parseSequence());
|
|
337
|
+
}
|
|
338
|
+
if (1 === branches.length) return branches[0];
|
|
339
|
+
return {
|
|
340
|
+
type: "alt",
|
|
341
|
+
branches: branches,
|
|
342
|
+
start: start,
|
|
343
|
+
end: pos
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
function parseSequence() {
|
|
347
|
+
var start = pos;
|
|
348
|
+
var terms = [];
|
|
349
|
+
while(pos < pattern.length && "|" !== pattern[pos] && ")" !== pattern[pos])terms.push(parseTerm());
|
|
350
|
+
return {
|
|
351
|
+
type: "seq",
|
|
352
|
+
terms: terms,
|
|
353
|
+
start: start,
|
|
354
|
+
end: pos
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
function parseTerm() {
|
|
358
|
+
var atom = parseAtom();
|
|
359
|
+
var quantifier = parseQuantifier();
|
|
360
|
+
if (quantifier) return {
|
|
361
|
+
type: "quant",
|
|
362
|
+
min: quantifier.min,
|
|
363
|
+
max: quantifier.max,
|
|
364
|
+
body: atom,
|
|
365
|
+
start: atom.start,
|
|
366
|
+
end: pos
|
|
367
|
+
};
|
|
368
|
+
return atom;
|
|
369
|
+
}
|
|
370
|
+
function parseQuantifier() {
|
|
371
|
+
var ch = pattern[pos];
|
|
372
|
+
if ("*" === ch) {
|
|
373
|
+
pos++;
|
|
374
|
+
return {
|
|
375
|
+
min: 0,
|
|
376
|
+
max: 1 / 0
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
if ("+" === ch) {
|
|
380
|
+
pos++;
|
|
381
|
+
return {
|
|
382
|
+
min: 1,
|
|
383
|
+
max: 1 / 0
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
if ("?" === ch) {
|
|
387
|
+
pos++;
|
|
388
|
+
return {
|
|
389
|
+
min: 0,
|
|
390
|
+
max: 1
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
if ("{" === ch) {
|
|
394
|
+
var match = /^\{(\d+)(,(\d*))?\}/.exec(pattern.slice(pos));
|
|
395
|
+
if (match) {
|
|
396
|
+
pos += match[0].length;
|
|
397
|
+
var min = Number(match[1]);
|
|
398
|
+
var max;
|
|
399
|
+
max = void 0 === match[2] ? min : "" === match[3] ? 1 / 0 : Number(match[3]);
|
|
400
|
+
return {
|
|
401
|
+
min: min,
|
|
402
|
+
max: max
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
function parseAtom() {
|
|
409
|
+
var start = pos;
|
|
410
|
+
var ch = pattern[pos];
|
|
411
|
+
if ("(" === ch) {
|
|
412
|
+
pos++;
|
|
413
|
+
var zeroWidth = false;
|
|
414
|
+
if ("?" === pattern[pos]) {
|
|
415
|
+
var rest = pattern.slice(pos);
|
|
416
|
+
if (rest.startsWith("?:")) pos += 2;
|
|
417
|
+
else if (rest.startsWith("?=") || rest.startsWith("?!")) {
|
|
418
|
+
pos += 2;
|
|
419
|
+
zeroWidth = true;
|
|
420
|
+
} else if (rest.startsWith("?<=") || rest.startsWith("?<!")) {
|
|
421
|
+
pos += 3;
|
|
422
|
+
zeroWidth = true;
|
|
423
|
+
} else if (rest.startsWith("?<")) {
|
|
424
|
+
var named = /^\?<[A-Za-z_$][\w$]*>/.exec(rest);
|
|
425
|
+
pos += named ? named[0].length : 2;
|
|
426
|
+
} else pos += 1;
|
|
427
|
+
}
|
|
428
|
+
depth++;
|
|
429
|
+
if (depth > MAX_DEPTH) throw new RangeError("regexp nesting too deep");
|
|
430
|
+
var body = parseAlternation();
|
|
431
|
+
depth--;
|
|
432
|
+
if (")" === pattern[pos]) pos++;
|
|
433
|
+
return {
|
|
434
|
+
type: "group",
|
|
435
|
+
body: body,
|
|
436
|
+
zeroWidth: zeroWidth,
|
|
437
|
+
start: start,
|
|
438
|
+
end: pos
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
if ("[" === ch) {
|
|
442
|
+
pos++;
|
|
443
|
+
if ("^" === pattern[pos]) pos++;
|
|
444
|
+
if ("]" === pattern[pos]) pos++;
|
|
445
|
+
while(pos < pattern.length && "]" !== pattern[pos]){
|
|
446
|
+
if ("\\" === pattern[pos]) pos++;
|
|
447
|
+
pos++;
|
|
448
|
+
}
|
|
449
|
+
pos++;
|
|
450
|
+
return {
|
|
451
|
+
type: "char",
|
|
452
|
+
zeroWidth: false,
|
|
453
|
+
start: start,
|
|
454
|
+
end: pos
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
if ("\\" === ch) {
|
|
458
|
+
pos += 2;
|
|
459
|
+
var escaped = pattern[start + 1];
|
|
460
|
+
return {
|
|
461
|
+
type: "char",
|
|
462
|
+
zeroWidth: "b" === escaped || "B" === escaped,
|
|
463
|
+
start: start,
|
|
464
|
+
end: pos
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
pos++;
|
|
468
|
+
return {
|
|
469
|
+
type: "char",
|
|
470
|
+
zeroWidth: "^" === ch || "$" === ch,
|
|
471
|
+
start: start,
|
|
472
|
+
end: pos
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
var raw = function(node) {
|
|
476
|
+
return pattern.slice(node.start, node.end);
|
|
477
|
+
};
|
|
478
|
+
var ANY = Symbol("any");
|
|
479
|
+
var DIGITS = new Set("0123456789".split(""));
|
|
480
|
+
var WORD = new Set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_".split(""));
|
|
481
|
+
var SPACES = new Set([
|
|
482
|
+
" ",
|
|
483
|
+
"\t",
|
|
484
|
+
"\n",
|
|
485
|
+
"\r",
|
|
486
|
+
"\f",
|
|
487
|
+
"\v",
|
|
488
|
+
"\u00a0",
|
|
489
|
+
"\ufeff",
|
|
490
|
+
"\u2028",
|
|
491
|
+
"\u2029"
|
|
492
|
+
]);
|
|
493
|
+
function escapeSet(esc) {
|
|
494
|
+
switch(esc){
|
|
495
|
+
case "d":
|
|
496
|
+
return DIGITS;
|
|
497
|
+
case "w":
|
|
498
|
+
return WORD;
|
|
499
|
+
case "s":
|
|
500
|
+
return SPACES;
|
|
501
|
+
case "n":
|
|
502
|
+
return new Set([
|
|
503
|
+
"\n"
|
|
504
|
+
]);
|
|
505
|
+
case "t":
|
|
506
|
+
return new Set([
|
|
507
|
+
"\t"
|
|
508
|
+
]);
|
|
509
|
+
case "r":
|
|
510
|
+
return new Set([
|
|
511
|
+
"\r"
|
|
512
|
+
]);
|
|
513
|
+
case "f":
|
|
514
|
+
return new Set([
|
|
515
|
+
"\f"
|
|
516
|
+
]);
|
|
517
|
+
case "v":
|
|
518
|
+
return new Set([
|
|
519
|
+
"\v"
|
|
520
|
+
]);
|
|
521
|
+
case "0":
|
|
522
|
+
return new Set([
|
|
523
|
+
"\0"
|
|
524
|
+
]);
|
|
525
|
+
default:
|
|
526
|
+
if (/[0-9A-Za-z]/.test(esc)) return ANY;
|
|
527
|
+
return new Set([
|
|
528
|
+
esc
|
|
529
|
+
]);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
function classSet(text) {
|
|
533
|
+
var inner = text.slice(1, -1);
|
|
534
|
+
if (inner.startsWith("^")) return ANY;
|
|
535
|
+
var set = new Set();
|
|
536
|
+
for(var i = 0; i < inner.length; i++){
|
|
537
|
+
var ch = inner[i];
|
|
538
|
+
if ("\\" === ch) {
|
|
539
|
+
var esc = inner[++i];
|
|
540
|
+
var expanded = escapeSet(esc);
|
|
541
|
+
if (expanded === ANY) return ANY;
|
|
542
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
543
|
+
try {
|
|
544
|
+
for(var _iterator = expanded[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
545
|
+
var c = _step.value;
|
|
546
|
+
set.add(c);
|
|
547
|
+
}
|
|
548
|
+
} catch (err) {
|
|
549
|
+
_didIteratorError = true;
|
|
550
|
+
_iteratorError = err;
|
|
551
|
+
} finally{
|
|
552
|
+
try {
|
|
553
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
554
|
+
} finally{
|
|
555
|
+
if (_didIteratorError) throw _iteratorError;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
continue;
|
|
559
|
+
}
|
|
560
|
+
if ("-" === inner[i + 1] && void 0 !== inner[i + 2] && "]" !== inner[i + 2]) {
|
|
561
|
+
var end = inner[i + 2];
|
|
562
|
+
var startCode = ch.codePointAt(0);
|
|
563
|
+
var endCode = end.codePointAt(0);
|
|
564
|
+
if (endCode - startCode > 1024) return ANY;
|
|
565
|
+
for(var code = startCode; code <= endCode; code++)set.add(String.fromCodePoint(code));
|
|
566
|
+
i += 2;
|
|
567
|
+
continue;
|
|
568
|
+
}
|
|
569
|
+
set.add(ch);
|
|
570
|
+
}
|
|
571
|
+
return set;
|
|
572
|
+
}
|
|
573
|
+
function firstCharSet(node) {
|
|
574
|
+
switch(node.type){
|
|
575
|
+
case "char":
|
|
576
|
+
var text = raw(node);
|
|
577
|
+
if (node.zeroWidth || text.startsWith("^") || text.startsWith("$")) return new Set();
|
|
578
|
+
if ("." === text) return ANY;
|
|
579
|
+
if (text.startsWith("[")) return classSet(text);
|
|
580
|
+
if (text.startsWith("\\")) {
|
|
581
|
+
var esc = text.slice(1);
|
|
582
|
+
if (1 === esc.length) return escapeSet(esc);
|
|
583
|
+
return ANY;
|
|
584
|
+
}
|
|
585
|
+
return new Set([
|
|
586
|
+
text[0]
|
|
587
|
+
]);
|
|
588
|
+
case "quant":
|
|
589
|
+
return 0 === node.min ? ANY : firstCharSet(node.body);
|
|
590
|
+
case "group":
|
|
591
|
+
return node.zeroWidth ? ANY : firstCharSet(node.body);
|
|
592
|
+
case "alt":
|
|
593
|
+
var union = new Set();
|
|
594
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
595
|
+
try {
|
|
596
|
+
for(var _iterator = node.branches[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
597
|
+
var branch = _step.value;
|
|
598
|
+
var set = firstCharSet(branch);
|
|
599
|
+
if (set === ANY) return ANY;
|
|
600
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
|
|
601
|
+
try {
|
|
602
|
+
for(var _iterator1 = set[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
603
|
+
var ch = _step1.value;
|
|
604
|
+
union.add(ch);
|
|
605
|
+
}
|
|
606
|
+
} catch (err) {
|
|
607
|
+
_didIteratorError1 = true;
|
|
608
|
+
_iteratorError1 = err;
|
|
609
|
+
} finally{
|
|
610
|
+
try {
|
|
611
|
+
if (!_iteratorNormalCompletion1 && null != _iterator1.return) _iterator1.return();
|
|
612
|
+
} finally{
|
|
613
|
+
if (_didIteratorError1) throw _iteratorError1;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
} catch (err) {
|
|
618
|
+
_didIteratorError = true;
|
|
619
|
+
_iteratorError = err;
|
|
620
|
+
} finally{
|
|
621
|
+
try {
|
|
622
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
623
|
+
} finally{
|
|
624
|
+
if (_didIteratorError) throw _iteratorError;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
return union;
|
|
628
|
+
case "seq":
|
|
629
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
|
|
630
|
+
try {
|
|
631
|
+
for(var _iterator2 = node.terms[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
|
|
632
|
+
var term = _step2.value;
|
|
633
|
+
var set1 = firstCharSet(term);
|
|
634
|
+
if (set1 === ANY) return ANY;
|
|
635
|
+
if (set1.size > 0) return set1;
|
|
636
|
+
}
|
|
637
|
+
} catch (err) {
|
|
638
|
+
_didIteratorError2 = true;
|
|
639
|
+
_iteratorError2 = err;
|
|
640
|
+
} finally{
|
|
641
|
+
try {
|
|
642
|
+
if (!_iteratorNormalCompletion2 && null != _iterator2.return) _iterator2.return();
|
|
643
|
+
} finally{
|
|
644
|
+
if (_didIteratorError2) throw _iteratorError2;
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
return new Set();
|
|
648
|
+
default:
|
|
649
|
+
return ANY;
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
function setsIntersect(a, b) {
|
|
653
|
+
if (a === ANY || b === ANY) return true;
|
|
654
|
+
if (0 === a.size || 0 === b.size) return false;
|
|
655
|
+
var _ref = _sliced_to_array(a.size <= b.size ? [
|
|
656
|
+
a,
|
|
657
|
+
b
|
|
658
|
+
] : [
|
|
659
|
+
b,
|
|
660
|
+
a
|
|
661
|
+
], 2), small = _ref[0], large = _ref[1];
|
|
662
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
663
|
+
try {
|
|
664
|
+
for(var _iterator = small[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
665
|
+
var ch = _step.value;
|
|
666
|
+
if (large.has(ch)) return true;
|
|
667
|
+
}
|
|
668
|
+
} catch (err) {
|
|
669
|
+
_didIteratorError = true;
|
|
670
|
+
_iteratorError = err;
|
|
671
|
+
} finally{
|
|
672
|
+
try {
|
|
673
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
674
|
+
} finally{
|
|
675
|
+
if (_didIteratorError) throw _iteratorError;
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
return false;
|
|
679
|
+
}
|
|
680
|
+
function consumableCharSet(quantNode) {
|
|
681
|
+
return firstCharSet(quantNode.body);
|
|
682
|
+
}
|
|
683
|
+
function trailingQuantifier(node) {
|
|
684
|
+
switch(node.type){
|
|
685
|
+
case "quant":
|
|
686
|
+
return node.max === 1 / 0 ? node : null;
|
|
687
|
+
case "group":
|
|
688
|
+
return node.zeroWidth ? null : trailingQuantifier(node.body);
|
|
689
|
+
case "seq":
|
|
690
|
+
for(var i = node.terms.length - 1; i >= 0; i--){
|
|
691
|
+
var quantifier = trailingQuantifier(node.terms[i]);
|
|
692
|
+
if (quantifier) return quantifier;
|
|
693
|
+
var set = firstCharSet(node.terms[i]);
|
|
694
|
+
if (set === ANY || set.size > 0) break;
|
|
695
|
+
}
|
|
696
|
+
return null;
|
|
697
|
+
default:
|
|
698
|
+
return null;
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
function leadingQuantifier(node) {
|
|
702
|
+
switch(node.type){
|
|
703
|
+
case "quant":
|
|
704
|
+
return node.max === 1 / 0 ? node : null;
|
|
705
|
+
case "group":
|
|
706
|
+
return node.zeroWidth ? null : leadingQuantifier(node.body);
|
|
707
|
+
case "seq":
|
|
708
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
709
|
+
try {
|
|
710
|
+
for(var _iterator = node.terms[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
711
|
+
var term = _step.value;
|
|
712
|
+
var quantifier = leadingQuantifier(term);
|
|
713
|
+
if (quantifier) return quantifier;
|
|
714
|
+
var set = firstCharSet(term);
|
|
715
|
+
if (set === ANY || set.size > 0) return null;
|
|
716
|
+
}
|
|
717
|
+
} catch (err) {
|
|
718
|
+
_didIteratorError = true;
|
|
719
|
+
_iteratorError = err;
|
|
720
|
+
} finally{
|
|
721
|
+
try {
|
|
722
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
723
|
+
} finally{
|
|
724
|
+
if (_didIteratorError) throw _iteratorError;
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
return null;
|
|
728
|
+
default:
|
|
729
|
+
return null;
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
function hasAdjacentOverlappingQuantifiers(seqNode) {
|
|
733
|
+
var terms = seqNode.terms;
|
|
734
|
+
for(var i = 0; i + 1 < terms.length; i++){
|
|
735
|
+
var left = trailingQuantifier(terms[i]);
|
|
736
|
+
var right = leadingQuantifier(terms[i + 1]);
|
|
737
|
+
if (left && right && setsIntersect(consumableCharSet(left), consumableCharSet(right))) return true;
|
|
738
|
+
}
|
|
739
|
+
return false;
|
|
740
|
+
}
|
|
741
|
+
function containsUnboundedQuantifier(node) {
|
|
742
|
+
switch(node.type){
|
|
743
|
+
case "quant":
|
|
744
|
+
if (node.max === 1 / 0) return true;
|
|
745
|
+
return containsUnboundedQuantifier(node.body);
|
|
746
|
+
case "group":
|
|
747
|
+
return containsUnboundedQuantifier(node.body);
|
|
748
|
+
case "alt":
|
|
749
|
+
return node.branches.some(containsUnboundedQuantifier);
|
|
750
|
+
case "seq":
|
|
751
|
+
return node.terms.some(containsUnboundedQuantifier);
|
|
752
|
+
default:
|
|
753
|
+
return false;
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
function alternationOverlaps(node) {
|
|
757
|
+
if ("alt" !== node.type) return false;
|
|
758
|
+
var texts = node.branches.map(raw).sort();
|
|
759
|
+
for(var i = 0; i + 1 < texts.length; i++)if ("" === texts[i] || texts[i + 1].startsWith(texts[i])) return true;
|
|
760
|
+
var sets = node.branches.map(firstCharSet);
|
|
761
|
+
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;
|
|
762
|
+
return false;
|
|
763
|
+
}
|
|
764
|
+
function isCatastrophic(node) {
|
|
765
|
+
switch(node.type){
|
|
766
|
+
case "quant":
|
|
767
|
+
if (node.max === 1 / 0) {
|
|
768
|
+
var inner = "group" === node.body.type ? node.body.body : node.body;
|
|
769
|
+
if (containsUnboundedQuantifier(inner)) return true;
|
|
770
|
+
if ("alt" === inner.type && alternationOverlaps(inner)) return true;
|
|
771
|
+
}
|
|
772
|
+
return isCatastrophic(node.body);
|
|
773
|
+
case "group":
|
|
774
|
+
return isCatastrophic(node.body);
|
|
775
|
+
case "alt":
|
|
776
|
+
return node.branches.some(isCatastrophic);
|
|
777
|
+
case "seq":
|
|
778
|
+
return hasAdjacentOverlappingQuantifiers(node) || node.terms.some(isCatastrophic);
|
|
779
|
+
default:
|
|
780
|
+
return false;
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
try {
|
|
784
|
+
return isCatastrophic(parseAlternation());
|
|
785
|
+
} catch (e) {
|
|
786
|
+
return false;
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
function Evaluator_array_like_to_array(arr, len) {
|
|
790
|
+
if (null == len || len > arr.length) len = arr.length;
|
|
791
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
792
|
+
return arr2;
|
|
793
|
+
}
|
|
794
|
+
function Evaluator_array_with_holes(arr) {
|
|
795
|
+
if (Array.isArray(arr)) return arr;
|
|
796
|
+
}
|
|
287
797
|
function Evaluator_array_without_holes(arr) {
|
|
288
798
|
if (Array.isArray(arr)) return Evaluator_array_like_to_array(arr);
|
|
289
799
|
}
|
|
@@ -324,7 +834,7 @@ function _instanceof(left, right) {
|
|
|
324
834
|
function Evaluator_iterable_to_array(iter) {
|
|
325
835
|
if ("undefined" != typeof Symbol && null != iter[Symbol.iterator] || null != iter["@@iterator"]) return Array.from(iter);
|
|
326
836
|
}
|
|
327
|
-
function
|
|
837
|
+
function Evaluator_non_iterable_rest() {
|
|
328
838
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
329
839
|
}
|
|
330
840
|
function Evaluator_non_iterable_spread() {
|
|
@@ -338,7 +848,7 @@ function _set_prototype_of(o, p) {
|
|
|
338
848
|
return _set_prototype_of(o, p);
|
|
339
849
|
}
|
|
340
850
|
function _to_array(arr) {
|
|
341
|
-
return
|
|
851
|
+
return Evaluator_array_with_holes(arr) || Evaluator_iterable_to_array(arr) || Evaluator_unsupported_iterable_to_array(arr) || Evaluator_non_iterable_rest();
|
|
342
852
|
}
|
|
343
853
|
function Evaluator_to_consumable_array(arr) {
|
|
344
854
|
return Evaluator_array_without_holes(arr) || Evaluator_iterable_to_array(arr) || Evaluator_unsupported_iterable_to_array(arr) || Evaluator_non_iterable_spread();
|
|
@@ -441,6 +951,56 @@ var TYPED_ARRAY_MUTATORS = function() {
|
|
|
441
951
|
}
|
|
442
952
|
return map;
|
|
443
953
|
}();
|
|
954
|
+
var REGEXP_SYMBOL_METHODS = new Set([
|
|
955
|
+
Symbol.match,
|
|
956
|
+
Symbol.matchAll,
|
|
957
|
+
Symbol.replace,
|
|
958
|
+
Symbol.search,
|
|
959
|
+
Symbol.split
|
|
960
|
+
].map(function(symbol) {
|
|
961
|
+
return RegExp.prototype[symbol];
|
|
962
|
+
}).filter(function(method) {
|
|
963
|
+
return "function" == typeof method;
|
|
964
|
+
}));
|
|
965
|
+
var REGEXP_INVOCATION_KIND = function() {
|
|
966
|
+
var map = new Map();
|
|
967
|
+
for(var _i = 0, _iter = [
|
|
968
|
+
String.prototype.match,
|
|
969
|
+
String.prototype.matchAll,
|
|
970
|
+
String.prototype.search
|
|
971
|
+
]; _i < _iter.length; _i++){
|
|
972
|
+
var method = _iter[_i];
|
|
973
|
+
map.set(method, "stringPattern");
|
|
974
|
+
}
|
|
975
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
976
|
+
try {
|
|
977
|
+
for(var _iterator = [
|
|
978
|
+
RegExp.prototype.test,
|
|
979
|
+
RegExp.prototype.exec
|
|
980
|
+
].concat(Evaluator_to_consumable_array(REGEXP_SYMBOL_METHODS))[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
981
|
+
var method1 = _step.value;
|
|
982
|
+
map.set(method1, "receiverPattern");
|
|
983
|
+
}
|
|
984
|
+
} catch (err) {
|
|
985
|
+
_didIteratorError = true;
|
|
986
|
+
_iteratorError = err;
|
|
987
|
+
} finally{
|
|
988
|
+
try {
|
|
989
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
990
|
+
} finally{
|
|
991
|
+
if (_didIteratorError) throw _iteratorError;
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
for(var _i1 = 0, _iter1 = [
|
|
995
|
+
String.prototype.replace,
|
|
996
|
+
String.prototype.replaceAll,
|
|
997
|
+
String.prototype.split
|
|
998
|
+
]; _i1 < _iter1.length; _i1++){
|
|
999
|
+
var method2 = _iter1[_i1];
|
|
1000
|
+
map.set(method2, "regexArgument");
|
|
1001
|
+
}
|
|
1002
|
+
return map;
|
|
1003
|
+
}();
|
|
444
1004
|
var NO_OBJECT = Symbol("no-object");
|
|
445
1005
|
var renderErrorMessage = function(template) {
|
|
446
1006
|
var context = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
|
|
@@ -448,6 +1008,26 @@ var renderErrorMessage = function(template) {
|
|
|
448
1008
|
return String(context[key]);
|
|
449
1009
|
});
|
|
450
1010
|
};
|
|
1011
|
+
var SAFE_REGEXP_PATTERNS = new Set();
|
|
1012
|
+
var MAX_SAFE_REGEXP_PATTERNS = 1000;
|
|
1013
|
+
function assertSafeRegExpPattern(pattern) {
|
|
1014
|
+
if ("string" != typeof pattern || SAFE_REGEXP_PATTERNS.has(pattern)) return;
|
|
1015
|
+
if (isUnsafeRegExpPattern(pattern)) throw new RangeError("RegExp pattern may cause catastrophic backtracking and is not allowed");
|
|
1016
|
+
if (SAFE_REGEXP_PATTERNS.size >= MAX_SAFE_REGEXP_PATTERNS) SAFE_REGEXP_PATTERNS.delete(SAFE_REGEXP_PATTERNS.values().next().value);
|
|
1017
|
+
SAFE_REGEXP_PATTERNS.add(pattern);
|
|
1018
|
+
}
|
|
1019
|
+
function assertSafeRegExpInvocation(func, target, args) {
|
|
1020
|
+
var kind = REGEXP_INVOCATION_KIND.get(func);
|
|
1021
|
+
if (void 0 === kind) return;
|
|
1022
|
+
if ("stringPattern" === kind) {
|
|
1023
|
+
var pattern = args[0];
|
|
1024
|
+
if ("string" == typeof pattern) assertSafeRegExpPattern(pattern);
|
|
1025
|
+
else if (_instanceof(pattern, RegExp)) assertSafeRegExpPattern(pattern.source);
|
|
1026
|
+
return;
|
|
1027
|
+
}
|
|
1028
|
+
var regexp = "receiverPattern" === kind ? target : args[0];
|
|
1029
|
+
if (_instanceof(regexp, RegExp)) assertSafeRegExpPattern(regexp.source);
|
|
1030
|
+
}
|
|
451
1031
|
function validateLimit(value, name, defaultValue, maximum) {
|
|
452
1032
|
if (void 0 === value) return defaultValue;
|
|
453
1033
|
if (!Number.isSafeInteger(value) || value < 1 || value > maximum) throw new RangeError("".concat(name, " must be an integer between 1 and ").concat(maximum));
|
|
@@ -464,7 +1044,59 @@ function countLiteralMatches(value, search, all) {
|
|
|
464
1044
|
}
|
|
465
1045
|
return count;
|
|
466
1046
|
}
|
|
1047
|
+
function countRegExpMatches(value, regexp, all) {
|
|
1048
|
+
var flags = regexp.flags.includes("g") ? regexp.flags : regexp.flags + "g";
|
|
1049
|
+
var re = new RegExp(regexp.source, flags);
|
|
1050
|
+
var count = 0;
|
|
1051
|
+
var match;
|
|
1052
|
+
while(null !== (match = re.exec(value))){
|
|
1053
|
+
count++;
|
|
1054
|
+
if (!all || count > MAX_STRING_LENGTH) break;
|
|
1055
|
+
if (re.lastIndex === match.index) re.lastIndex++;
|
|
1056
|
+
}
|
|
1057
|
+
return count;
|
|
1058
|
+
}
|
|
1059
|
+
var PARSE_CACHE = new Map();
|
|
1060
|
+
var MAX_PARSE_CACHE_ENTRIES = 1000;
|
|
1061
|
+
var MAX_PARSE_CACHE_CHARS = 200000;
|
|
1062
|
+
var parseCacheChars = 0;
|
|
1063
|
+
function parseExpression(expression) {
|
|
1064
|
+
var cached = PARSE_CACHE.get(expression);
|
|
1065
|
+
if (void 0 !== cached) return cached;
|
|
1066
|
+
var ast;
|
|
1067
|
+
try {
|
|
1068
|
+
ast = external_acorn_namespaceObject.parse(expression, {
|
|
1069
|
+
ecmaVersion: "latest"
|
|
1070
|
+
});
|
|
1071
|
+
} catch (error) {
|
|
1072
|
+
if (_instanceof(error, RangeError) && /call stack/i.test(error.message)) throw new SyntaxError("Expression nesting is too deep to parse");
|
|
1073
|
+
throw error;
|
|
1074
|
+
}
|
|
1075
|
+
if (expression.length <= MAX_PARSE_CACHE_CHARS) {
|
|
1076
|
+
while(PARSE_CACHE.size >= MAX_PARSE_CACHE_ENTRIES || parseCacheChars + expression.length > MAX_PARSE_CACHE_CHARS){
|
|
1077
|
+
var oldestKey = PARSE_CACHE.keys().next().value;
|
|
1078
|
+
if (void 0 === oldestKey) break;
|
|
1079
|
+
parseCacheChars -= oldestKey.length;
|
|
1080
|
+
PARSE_CACHE.delete(oldestKey);
|
|
1081
|
+
}
|
|
1082
|
+
PARSE_CACHE.set(expression, ast);
|
|
1083
|
+
parseCacheChars += expression.length;
|
|
1084
|
+
}
|
|
1085
|
+
return ast;
|
|
1086
|
+
}
|
|
467
1087
|
function assertBoundedData(value, label) {
|
|
1088
|
+
var valueType = void 0 === value ? "undefined" : _type_of(value);
|
|
1089
|
+
if ("string" === valueType) {
|
|
1090
|
+
if (value.length > MAX_STRING_LENGTH) throw new RangeError("".concat(label, " contains a string that exceeds the maximum length"));
|
|
1091
|
+
return {
|
|
1092
|
+
dataSize: value.length + 8,
|
|
1093
|
+
dataNodes: 1
|
|
1094
|
+
};
|
|
1095
|
+
}
|
|
1096
|
+
if (null === value || "undefined" === valueType || "number" === valueType || "boolean" === valueType || "bigint" === valueType) return {
|
|
1097
|
+
dataSize: 8,
|
|
1098
|
+
dataNodes: 1
|
|
1099
|
+
};
|
|
468
1100
|
var pending = [
|
|
469
1101
|
value
|
|
470
1102
|
];
|
|
@@ -534,74 +1166,140 @@ function assertBoundedData(value, label) {
|
|
|
534
1166
|
dataNodes: dataNodes
|
|
535
1167
|
};
|
|
536
1168
|
}
|
|
537
|
-
var BINARY_OPERATION_MAP =
|
|
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
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
1169
|
+
var BINARY_OPERATION_MAP = new Map([
|
|
1170
|
+
[
|
|
1171
|
+
"+",
|
|
1172
|
+
function(a, b) {
|
|
1173
|
+
return a + b;
|
|
1174
|
+
}
|
|
1175
|
+
],
|
|
1176
|
+
[
|
|
1177
|
+
"-",
|
|
1178
|
+
function(a, b) {
|
|
1179
|
+
return a - b;
|
|
1180
|
+
}
|
|
1181
|
+
],
|
|
1182
|
+
[
|
|
1183
|
+
"*",
|
|
1184
|
+
function(a, b) {
|
|
1185
|
+
return a * b;
|
|
1186
|
+
}
|
|
1187
|
+
],
|
|
1188
|
+
[
|
|
1189
|
+
"**",
|
|
1190
|
+
function(a, b) {
|
|
1191
|
+
return Math.pow(a, b);
|
|
1192
|
+
}
|
|
1193
|
+
],
|
|
1194
|
+
[
|
|
1195
|
+
"==",
|
|
1196
|
+
function(a, b) {
|
|
1197
|
+
return a == b;
|
|
1198
|
+
}
|
|
1199
|
+
],
|
|
1200
|
+
[
|
|
1201
|
+
"===",
|
|
1202
|
+
function(a, b) {
|
|
1203
|
+
return a === b;
|
|
1204
|
+
}
|
|
1205
|
+
],
|
|
1206
|
+
[
|
|
1207
|
+
"!=",
|
|
1208
|
+
function(a, b) {
|
|
1209
|
+
return a != b;
|
|
1210
|
+
}
|
|
1211
|
+
],
|
|
1212
|
+
[
|
|
1213
|
+
"!==",
|
|
1214
|
+
function(a, b) {
|
|
1215
|
+
return a !== b;
|
|
1216
|
+
}
|
|
1217
|
+
],
|
|
1218
|
+
[
|
|
1219
|
+
">",
|
|
1220
|
+
function(a, b) {
|
|
1221
|
+
return a > b;
|
|
1222
|
+
}
|
|
1223
|
+
],
|
|
1224
|
+
[
|
|
1225
|
+
">=",
|
|
1226
|
+
function(a, b) {
|
|
1227
|
+
return a >= b;
|
|
1228
|
+
}
|
|
1229
|
+
],
|
|
1230
|
+
[
|
|
1231
|
+
"<",
|
|
1232
|
+
function(a, b) {
|
|
1233
|
+
return a < b;
|
|
1234
|
+
}
|
|
1235
|
+
],
|
|
1236
|
+
[
|
|
1237
|
+
"<=",
|
|
1238
|
+
function(a, b) {
|
|
1239
|
+
return a <= b;
|
|
1240
|
+
}
|
|
1241
|
+
],
|
|
1242
|
+
[
|
|
1243
|
+
"%",
|
|
1244
|
+
function(a, b) {
|
|
1245
|
+
return a % b;
|
|
1246
|
+
}
|
|
1247
|
+
],
|
|
1248
|
+
[
|
|
1249
|
+
"/",
|
|
1250
|
+
function(a, b) {
|
|
1251
|
+
return a / b;
|
|
1252
|
+
}
|
|
1253
|
+
],
|
|
1254
|
+
[
|
|
1255
|
+
"|",
|
|
1256
|
+
function(a, b) {
|
|
1257
|
+
return a | b;
|
|
1258
|
+
}
|
|
1259
|
+
],
|
|
1260
|
+
[
|
|
1261
|
+
"&",
|
|
1262
|
+
function(a, b) {
|
|
1263
|
+
return a & b;
|
|
1264
|
+
}
|
|
1265
|
+
],
|
|
1266
|
+
[
|
|
1267
|
+
"^",
|
|
1268
|
+
function(a, b) {
|
|
1269
|
+
return a ^ b;
|
|
1270
|
+
}
|
|
1271
|
+
],
|
|
1272
|
+
[
|
|
1273
|
+
"<<",
|
|
1274
|
+
function(a, b) {
|
|
1275
|
+
return a << b;
|
|
1276
|
+
}
|
|
1277
|
+
],
|
|
1278
|
+
[
|
|
1279
|
+
">>",
|
|
1280
|
+
function(a, b) {
|
|
1281
|
+
return a >> b;
|
|
1282
|
+
}
|
|
1283
|
+
],
|
|
1284
|
+
[
|
|
1285
|
+
">>>",
|
|
1286
|
+
function(a, b) {
|
|
1287
|
+
return a >>> b;
|
|
1288
|
+
}
|
|
1289
|
+
],
|
|
1290
|
+
[
|
|
1291
|
+
"in",
|
|
1292
|
+
function(a, b) {
|
|
1293
|
+
return a in b;
|
|
1294
|
+
}
|
|
1295
|
+
],
|
|
1296
|
+
[
|
|
1297
|
+
"instanceof",
|
|
1298
|
+
function(a, b) {
|
|
1299
|
+
return _instanceof(a, b);
|
|
1300
|
+
}
|
|
1301
|
+
]
|
|
1302
|
+
]);
|
|
605
1303
|
function createGlobalScope() {
|
|
606
1304
|
var scope = Object.create(null);
|
|
607
1305
|
var builtin = external_globals_namespaceObject.builtin;
|
|
@@ -628,7 +1326,12 @@ function createGlobalScope() {
|
|
|
628
1326
|
});
|
|
629
1327
|
return scope;
|
|
630
1328
|
}
|
|
631
|
-
var GLOBAL_SCOPE =
|
|
1329
|
+
var GLOBAL_SCOPE = null;
|
|
1330
|
+
function getGlobalScope() {
|
|
1331
|
+
if (null === GLOBAL_SCOPE) GLOBAL_SCOPE = createGlobalScope();
|
|
1332
|
+
return GLOBAL_SCOPE;
|
|
1333
|
+
}
|
|
1334
|
+
var EMPTY_CONTEXT = Object.freeze(Object.create(null));
|
|
632
1335
|
var getBlockedMethods = function() {
|
|
633
1336
|
var BLOCKED_METHODS = null;
|
|
634
1337
|
return function() {
|
|
@@ -679,26 +1382,39 @@ var getBlockedMethods = function() {
|
|
|
679
1382
|
var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
680
1383
|
"use strict";
|
|
681
1384
|
function Evaluator() {
|
|
682
|
-
var variables = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] :
|
|
1385
|
+
var variables = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : EMPTY_CONTEXT, options = arguments.length > 1 ? arguments[1] : void 0;
|
|
683
1386
|
_class_call_check(this, Evaluator);
|
|
684
1387
|
this.maxInputLength = validateLimit(null == options ? void 0 : options.maxInputLength, "maxInputLength", DEFAULT_MAX_INPUT_LENGTH, MAX_CONFIGURABLE_INPUT_LENGTH);
|
|
685
1388
|
this.maxEvaluationSteps = validateLimit(null == options ? void 0 : options.maxEvaluationSteps, "maxEvaluationSteps", DEFAULT_MAX_EVALUATION_STEPS, MAX_CONFIGURABLE_EVALUATION_STEPS);
|
|
686
1389
|
this.maxDepth = validateLimit(null == options ? void 0 : options.maxDepth, "maxDepth", DEFAULT_MAX_DEPTH, MAX_CONFIGURABLE_DEPTH);
|
|
687
|
-
|
|
688
|
-
|
|
1390
|
+
var clonedVariables = EMPTY_CONTEXT;
|
|
1391
|
+
if (variables !== EMPTY_CONTEXT) {
|
|
1392
|
+
assertBoundedData(variables, "Evaluation context");
|
|
1393
|
+
clonedVariables = structuredClone(variables);
|
|
1394
|
+
}
|
|
689
1395
|
this.scopes = [
|
|
690
1396
|
clonedVariables,
|
|
691
|
-
|
|
1397
|
+
getGlobalScope()
|
|
692
1398
|
].filter(function(scope) {
|
|
693
1399
|
return null != scope;
|
|
694
1400
|
});
|
|
695
1401
|
this.source = void 0;
|
|
1402
|
+
this.evaluating = false;
|
|
696
1403
|
this.remainingEvaluationSteps = 0;
|
|
697
1404
|
this.remainingDataSize = MAX_BUFFER_BYTES;
|
|
698
1405
|
this.remainingDataNodes = MAX_DATA_NODES;
|
|
699
1406
|
this.evaluationDepth = 0;
|
|
700
1407
|
}
|
|
701
1408
|
_create_class(Evaluator, [
|
|
1409
|
+
{
|
|
1410
|
+
key: "resetBudget",
|
|
1411
|
+
value: function() {
|
|
1412
|
+
this.remainingEvaluationSteps = this.maxEvaluationSteps;
|
|
1413
|
+
this.remainingDataSize = MAX_BUFFER_BYTES;
|
|
1414
|
+
this.remainingDataNodes = MAX_DATA_NODES;
|
|
1415
|
+
this.evaluationDepth = 0;
|
|
1416
|
+
}
|
|
1417
|
+
},
|
|
702
1418
|
{
|
|
703
1419
|
key: "evaluate",
|
|
704
1420
|
value: function(expression) {
|
|
@@ -707,22 +1423,13 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
707
1423
|
this.maxInputLength
|
|
708
1424
|
]));
|
|
709
1425
|
this.source = expression;
|
|
710
|
-
this.
|
|
711
|
-
|
|
712
|
-
this.
|
|
713
|
-
this.evaluationDepth = 0;
|
|
714
|
-
var ast;
|
|
715
|
-
try {
|
|
716
|
-
ast = external_acorn_namespaceObject.parse(expression, {
|
|
717
|
-
ecmaVersion: "latest"
|
|
718
|
-
});
|
|
719
|
-
} catch (error) {
|
|
720
|
-
if (_instanceof(error, RangeError) && /call stack/i.test(error.message)) throw new SyntaxError("Expression nesting is too deep to parse");
|
|
721
|
-
throw error;
|
|
722
|
-
}
|
|
1426
|
+
this.resetBudget();
|
|
1427
|
+
var ast = parseExpression(expression);
|
|
1428
|
+
this.evaluating = true;
|
|
723
1429
|
try {
|
|
724
1430
|
return this.execute(ast.body);
|
|
725
1431
|
} finally{
|
|
1432
|
+
this.evaluating = false;
|
|
726
1433
|
this.source = void 0;
|
|
727
1434
|
}
|
|
728
1435
|
}
|
|
@@ -730,11 +1437,7 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
730
1437
|
{
|
|
731
1438
|
key: "execute",
|
|
732
1439
|
value: function(body) {
|
|
733
|
-
if (
|
|
734
|
-
this.remainingEvaluationSteps = this.maxEvaluationSteps;
|
|
735
|
-
this.remainingDataSize = MAX_BUFFER_BYTES;
|
|
736
|
-
this.remainingDataNodes = MAX_DATA_NODES;
|
|
737
|
-
}
|
|
1440
|
+
if (!this.evaluating) this.resetBudget();
|
|
738
1441
|
var result;
|
|
739
1442
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
740
1443
|
try {
|
|
@@ -759,6 +1462,8 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
759
1462
|
if (_instanceof(result, Promise)) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
760
1463
|
"Returning promises from expressions"
|
|
761
1464
|
]));
|
|
1465
|
+
var resultType = void 0 === result ? "undefined" : _type_of(result);
|
|
1466
|
+
if (null === result || "string" === resultType || "number" === resultType || "boolean" === resultType || "undefined" === resultType || "bigint" === resultType) return result;
|
|
762
1467
|
try {
|
|
763
1468
|
return structuredClone(result);
|
|
764
1469
|
} catch (error) {
|
|
@@ -772,6 +1477,7 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
772
1477
|
{
|
|
773
1478
|
key: "visit",
|
|
774
1479
|
value: function(node) {
|
|
1480
|
+
var _this = this;
|
|
775
1481
|
this.remainingEvaluationSteps--;
|
|
776
1482
|
if (this.remainingEvaluationSteps < 0) throw new RangeError("Evaluation step limit exceeded");
|
|
777
1483
|
this.evaluationDepth++;
|
|
@@ -780,82 +1486,76 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
780
1486
|
throw new RangeError("Maximum evaluation depth exceeded");
|
|
781
1487
|
}
|
|
782
1488
|
try {
|
|
783
|
-
|
|
1489
|
+
switch(node.type){
|
|
1490
|
+
case "ExpressionStatement":
|
|
1491
|
+
return this.visit(node.expression);
|
|
1492
|
+
case "BinaryExpression":
|
|
1493
|
+
return this.handleBinaryExpression(node);
|
|
1494
|
+
case "LogicalExpression":
|
|
1495
|
+
return this.handleLogicalExpression(node);
|
|
1496
|
+
case "UnaryExpression":
|
|
1497
|
+
return this.handleUnaryExpression(node);
|
|
1498
|
+
case "Identifier":
|
|
1499
|
+
return this.handleIdentifier(node);
|
|
1500
|
+
case "Literal":
|
|
1501
|
+
if (node.regex) assertSafeRegExpPattern(node.regex.pattern);
|
|
1502
|
+
return node.value;
|
|
1503
|
+
case "MemberExpression":
|
|
1504
|
+
return this.handleMemberExpression(node);
|
|
1505
|
+
case "ArrayExpression":
|
|
1506
|
+
return this.handleArrayExpression(node);
|
|
1507
|
+
case "SpreadElement":
|
|
1508
|
+
return this.handleSpreadElement(node);
|
|
1509
|
+
case "ObjectExpression":
|
|
1510
|
+
return this.handleObjectExpression(node);
|
|
1511
|
+
case "FunctionExpression":
|
|
1512
|
+
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1513
|
+
"Function expression"
|
|
1514
|
+
]));
|
|
1515
|
+
case "ArrowFunctionExpression":
|
|
1516
|
+
return this.handleArrowFunctionExpression(node);
|
|
1517
|
+
case "CallExpression":
|
|
1518
|
+
return this.handleCallExpression(node);
|
|
1519
|
+
case "ConditionalExpression":
|
|
1520
|
+
return this.visit(node.test) ? this.visit(node.consequent) : this.visit(node.alternate);
|
|
1521
|
+
case "NewExpression":
|
|
1522
|
+
if ("Identifier" !== node.callee.type) throw new Error("Unsupported callee type '".concat(node.callee.type, "' in new expression"));
|
|
1523
|
+
if ("Function" === node.callee.name) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1524
|
+
"new Function() constructor"
|
|
1525
|
+
]));
|
|
1526
|
+
if ("Promise" === node.callee.name) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1527
|
+
"Promise constructor"
|
|
1528
|
+
]));
|
|
1529
|
+
var Constructor = this.visit(node.callee);
|
|
1530
|
+
var args = node.arguments.length ? node.arguments.map(function(arg) {
|
|
1531
|
+
return _this.visit(arg);
|
|
1532
|
+
}) : [];
|
|
1533
|
+
this.assertBoundedConstruction(Constructor, args);
|
|
1534
|
+
return _construct(Constructor, Evaluator_to_consumable_array(args));
|
|
1535
|
+
case "ChainExpression":
|
|
1536
|
+
return this.visit(node.expression);
|
|
1537
|
+
case "TemplateLiteral":
|
|
1538
|
+
return this.handleTemplateLiteral(node);
|
|
1539
|
+
case "ThisExpression":
|
|
1540
|
+
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1541
|
+
"'this' expression"
|
|
1542
|
+
]));
|
|
1543
|
+
case "WithStatement":
|
|
1544
|
+
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1545
|
+
"'with' statement"
|
|
1546
|
+
]));
|
|
1547
|
+
default:
|
|
1548
|
+
var content = this.source.slice(node.start, node.end);
|
|
1549
|
+
if (content.length > 20) content = content.slice(0, 17) + "...";
|
|
1550
|
+
throw new SyntaxError("'".concat(content, "'") + " " + renderErrorMessage(ERROR_MESSAGES.IS_INVALID_SYNTAX, [
|
|
1551
|
+
content
|
|
1552
|
+
]));
|
|
1553
|
+
}
|
|
784
1554
|
} finally{
|
|
785
1555
|
this.evaluationDepth--;
|
|
786
1556
|
}
|
|
787
1557
|
}
|
|
788
1558
|
},
|
|
789
|
-
{
|
|
790
|
-
key: "visitNode",
|
|
791
|
-
value: function(node) {
|
|
792
|
-
var _this = this;
|
|
793
|
-
switch(node.type){
|
|
794
|
-
case "ExpressionStatement":
|
|
795
|
-
return this.visit(node.expression);
|
|
796
|
-
case "BinaryExpression":
|
|
797
|
-
return this.handleBinaryExpression(node);
|
|
798
|
-
case "LogicalExpression":
|
|
799
|
-
return this.handleLogicalExpression(node);
|
|
800
|
-
case "UnaryExpression":
|
|
801
|
-
return this.handleUnaryExpression(node);
|
|
802
|
-
case "Identifier":
|
|
803
|
-
return this.handleIdentifier(node);
|
|
804
|
-
case "Literal":
|
|
805
|
-
return node.value;
|
|
806
|
-
case "MemberExpression":
|
|
807
|
-
return this.handleMemberExpression(node);
|
|
808
|
-
case "ArrayExpression":
|
|
809
|
-
return this.handleArrayExpression(node);
|
|
810
|
-
case "SpreadElement":
|
|
811
|
-
return this.handleSpreadElement(node);
|
|
812
|
-
case "ObjectExpression":
|
|
813
|
-
return this.handleObjectExpression(node);
|
|
814
|
-
case "FunctionExpression":
|
|
815
|
-
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
816
|
-
"Function expression"
|
|
817
|
-
]));
|
|
818
|
-
case "ArrowFunctionExpression":
|
|
819
|
-
return this.handleArrowFunctionExpression(node);
|
|
820
|
-
case "CallExpression":
|
|
821
|
-
return this.handleCallExpression(node);
|
|
822
|
-
case "ConditionalExpression":
|
|
823
|
-
return this.visit(node.test) ? this.visit(node.consequent) : this.visit(node.alternate);
|
|
824
|
-
case "NewExpression":
|
|
825
|
-
if ("Identifier" !== node.callee.type) throw new Error("Unsupported callee type '".concat(node.callee.type, "' in new expression"));
|
|
826
|
-
if ("Function" === node.callee.name) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
827
|
-
"new Function() constructor"
|
|
828
|
-
]));
|
|
829
|
-
if ("Promise" === node.callee.name) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
830
|
-
"Promise constructor"
|
|
831
|
-
]));
|
|
832
|
-
var Constructor = this.visit(node.callee);
|
|
833
|
-
var args = node.arguments.length ? node.arguments.map(function(arg) {
|
|
834
|
-
return _this.visit(arg);
|
|
835
|
-
}) : [];
|
|
836
|
-
this.assertBoundedConstruction(Constructor, args);
|
|
837
|
-
return _construct(Constructor, Evaluator_to_consumable_array(args));
|
|
838
|
-
case "ChainExpression":
|
|
839
|
-
return this.visit(node.expression);
|
|
840
|
-
case "TemplateLiteral":
|
|
841
|
-
return this.handleTemplateLiteral(node);
|
|
842
|
-
case "ThisExpression":
|
|
843
|
-
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
844
|
-
"'this' expression"
|
|
845
|
-
]));
|
|
846
|
-
case "WithStatement":
|
|
847
|
-
throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
848
|
-
"'with' statement"
|
|
849
|
-
]));
|
|
850
|
-
default:
|
|
851
|
-
var content = this.source.slice(node.start, node.end);
|
|
852
|
-
if (content.length > 20) content = content.slice(0, 17) + "...";
|
|
853
|
-
throw new SyntaxError("'".concat(content, "'") + " " + renderErrorMessage(ERROR_MESSAGES.IS_INVALID_SYNTAX, [
|
|
854
|
-
content
|
|
855
|
-
]));
|
|
856
|
-
}
|
|
857
|
-
}
|
|
858
|
-
},
|
|
859
1559
|
{
|
|
860
1560
|
key: "handleBinaryExpression",
|
|
861
1561
|
value: function(node) {
|
|
@@ -871,7 +1571,8 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
871
1571
|
var rightBits = right.toString(2).length;
|
|
872
1572
|
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");
|
|
873
1573
|
}
|
|
874
|
-
|
|
1574
|
+
var apply = BINARY_OPERATION_MAP.get(op);
|
|
1575
|
+
if (void 0 !== apply) return apply(left, right);
|
|
875
1576
|
throw new SyntaxError("Unsupported operator: ".concat(node.operator));
|
|
876
1577
|
}
|
|
877
1578
|
},
|
|
@@ -880,6 +1581,7 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
880
1581
|
value: function(args) {
|
|
881
1582
|
if ("string" == typeof args[0] && args[0].length > MAX_REGEXP_SOURCE_LENGTH) throw new RangeError("RegExp source exceeds the maximum allowed length");
|
|
882
1583
|
if ("string" == typeof args[1] && args[1].length > MAX_REGEXP_FLAGS_LENGTH) throw new RangeError("RegExp flags exceed the maximum allowed length");
|
|
1584
|
+
assertSafeRegExpPattern(args[0]);
|
|
883
1585
|
}
|
|
884
1586
|
},
|
|
885
1587
|
{
|
|
@@ -960,21 +1662,10 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
960
1662
|
key: "handleIdentifier",
|
|
961
1663
|
value: function(node) {
|
|
962
1664
|
var name = node.name;
|
|
963
|
-
var
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
if (Object.hasOwn(scope, name)) return scope[name];
|
|
968
|
-
}
|
|
969
|
-
} catch (err) {
|
|
970
|
-
_didIteratorError = true;
|
|
971
|
-
_iteratorError = err;
|
|
972
|
-
} finally{
|
|
973
|
-
try {
|
|
974
|
-
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
975
|
-
} finally{
|
|
976
|
-
if (_didIteratorError) throw _iteratorError;
|
|
977
|
-
}
|
|
1665
|
+
var scopes = this.scopes;
|
|
1666
|
+
for(var i = 0; i < scopes.length; i++){
|
|
1667
|
+
var scope = scopes[i];
|
|
1668
|
+
if (Object.hasOwn(scope, name)) return scope[name];
|
|
978
1669
|
}
|
|
979
1670
|
throw new ReferenceError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_DEFINED, [
|
|
980
1671
|
name
|
|
@@ -991,9 +1682,6 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
991
1682
|
if ("stack" === property && _instanceof(object, Error)) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
992
1683
|
"Accessing error stack"
|
|
993
1684
|
]));
|
|
994
|
-
if (null != object && void 0 !== object.__proto__ && object[property] === object.__proto__) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
995
|
-
"Accessing prototype properties"
|
|
996
|
-
]));
|
|
997
1685
|
if (null == object) {
|
|
998
1686
|
if (node.optional) return;
|
|
999
1687
|
throw new TypeError(renderErrorMessage(ERROR_MESSAGES.CAN_NOT_READ_PROPERTY, [
|
|
@@ -1005,6 +1693,10 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
1005
1693
|
if (result === Function || result === Function.prototype) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1006
1694
|
"Function constructor"
|
|
1007
1695
|
]));
|
|
1696
|
+
var prototype = object.__proto__;
|
|
1697
|
+
if (void 0 !== prototype && result === prototype) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1698
|
+
"Accessing prototype properties"
|
|
1699
|
+
]));
|
|
1008
1700
|
return result;
|
|
1009
1701
|
}
|
|
1010
1702
|
},
|
|
@@ -1013,7 +1705,7 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
1013
1705
|
value: function(node) {
|
|
1014
1706
|
var result = [];
|
|
1015
1707
|
for(var i = 0; i < node.elements.length; i++){
|
|
1016
|
-
var element = node.elements
|
|
1708
|
+
var element = node.elements[i];
|
|
1017
1709
|
if (null === element) {
|
|
1018
1710
|
result.length++;
|
|
1019
1711
|
continue;
|
|
@@ -1084,6 +1776,24 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
1084
1776
|
key: "handleArrowFunctionExpression",
|
|
1085
1777
|
value: function(node) {
|
|
1086
1778
|
var _this = this;
|
|
1779
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
1780
|
+
try {
|
|
1781
|
+
for(var _iterator = node.params[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
1782
|
+
var param = _step.value;
|
|
1783
|
+
if ("Identifier" !== param.type) throw new SyntaxError(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1784
|
+
"Destructuring, default, and rest parameters"
|
|
1785
|
+
]));
|
|
1786
|
+
}
|
|
1787
|
+
} catch (err) {
|
|
1788
|
+
_didIteratorError = true;
|
|
1789
|
+
_iteratorError = err;
|
|
1790
|
+
} finally{
|
|
1791
|
+
try {
|
|
1792
|
+
if (!_iteratorNormalCompletion && null != _iterator.return) _iterator.return();
|
|
1793
|
+
} finally{
|
|
1794
|
+
if (_didIteratorError) throw _iteratorError;
|
|
1795
|
+
}
|
|
1796
|
+
}
|
|
1087
1797
|
return function() {
|
|
1088
1798
|
for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++)args[_key] = arguments[_key];
|
|
1089
1799
|
var newScope = {};
|
|
@@ -1124,15 +1834,13 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
1124
1834
|
if (func === Function) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1125
1835
|
"Function constructor"
|
|
1126
1836
|
]));
|
|
1127
|
-
if (func === Error.prepareStackTrace) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1837
|
+
if ("function" == typeof func && func === Error.prepareStackTrace) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1128
1838
|
"Error.prepareStackTrace"
|
|
1129
1839
|
]));
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
]));
|
|
1135
|
-
}
|
|
1840
|
+
var blockedPath = getBlockedMethods().get(func);
|
|
1841
|
+
if (void 0 !== blockedPath) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1842
|
+
blockedPath
|
|
1843
|
+
]));
|
|
1136
1844
|
if (TYPED_ARRAY_MUTATORS.has(func)) throw new Error(renderErrorMessage(ERROR_MESSAGES.IS_NOT_ALLOWED, [
|
|
1137
1845
|
"TypedArray.prototype.".concat(TYPED_ARRAY_MUTATORS.get(func))
|
|
1138
1846
|
]));
|
|
@@ -1140,7 +1848,7 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
1140
1848
|
if (0 === node.arguments.length) return [];
|
|
1141
1849
|
var result = [];
|
|
1142
1850
|
for(var i = 0; i < node.arguments.length; i++){
|
|
1143
|
-
var element = node.arguments
|
|
1851
|
+
var element = node.arguments[i];
|
|
1144
1852
|
var value = _this.visit(element);
|
|
1145
1853
|
if ("SpreadElement" === element.type) {
|
|
1146
1854
|
var _result;
|
|
@@ -1165,19 +1873,26 @@ var Evaluator_Evaluator = /*#__PURE__*/ function() {
|
|
|
1165
1873
|
if (resultLength > MAX_STRING_LENGTH) throw new RangeError("String result exceeds the maximum allowed length");
|
|
1166
1874
|
}
|
|
1167
1875
|
if (String.prototype.replace && func === String.prototype.replace || String.prototype.replaceAll && func === String.prototype.replaceAll) {
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1876
|
+
var all = func === String.prototype.replaceAll;
|
|
1877
|
+
var search = args[0];
|
|
1878
|
+
var replacement = args[1];
|
|
1879
|
+
if ("function" == typeof replacement) throw new Error("Only literal string replacements are allowed");
|
|
1880
|
+
if ("string" == typeof replacement && RegExp("\\$(?:[$&'`])", "u").test(replacement)) throw new Error("Only literal string replacements are allowed");
|
|
1881
|
+
var matchCount;
|
|
1882
|
+
if ("string" == typeof search) {
|
|
1883
|
+
if (target.length * Math.max(1, search.length) > 10000000) throw new RangeError("String operation exceeds the maximum work limit");
|
|
1884
|
+
matchCount = countLiteralMatches(target, search, all);
|
|
1885
|
+
} else matchCount = _instanceof(search, RegExp) ? countRegExpMatches(target, search, all || search.flags.includes("g")) : 0;
|
|
1886
|
+
if (target.length + matchCount * String(replacement).length > MAX_STRING_LENGTH) throw new RangeError("String result exceeds the maximum allowed length");
|
|
1174
1887
|
}
|
|
1175
1888
|
if (func === String.prototype.split) {
|
|
1176
1889
|
if ("" === args[0] && target.length > MAX_ARRAY_LENGTH) throw new RangeError("Split result exceeds the maximum allowed length");
|
|
1177
1890
|
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");
|
|
1891
|
+
if (_instanceof(args[0], RegExp) && countRegExpMatches(target, args[0], true) >= MAX_ARRAY_LENGTH) throw new RangeError("Split result exceeds the maximum allowed length");
|
|
1178
1892
|
}
|
|
1179
1893
|
}
|
|
1180
1894
|
if (func === RegExp) this.assertBoundedRegExp(args);
|
|
1895
|
+
assertSafeRegExpInvocation(func, target, args);
|
|
1181
1896
|
if ((target === Array || isTypedArrayConstructor(target)) && func === target.from) {
|
|
1182
1897
|
var source = args[0];
|
|
1183
1898
|
var _source_size;
|