core-js 3.46.0 → 3.48.0

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.
Files changed (97) hide show
  1. package/LICENSE +2 -1
  2. package/actual/iterator/concat.js +2 -18
  3. package/actual/iterator/index.js +3 -0
  4. package/actual/iterator/zip-keyed.js +24 -0
  5. package/actual/iterator/zip.js +22 -0
  6. package/actual/json/index.js +0 -3
  7. package/actual/json/is-raw-json.js +2 -2
  8. package/actual/json/parse.js +2 -3
  9. package/actual/json/raw-json.js +3 -4
  10. package/actual/map/get-or-insert-computed.js +2 -3
  11. package/actual/map/get-or-insert.js +2 -3
  12. package/actual/map/group-by.js +2 -0
  13. package/actual/weak-map/get-or-insert-computed.js +2 -3
  14. package/actual/weak-map/get-or-insert.js +2 -3
  15. package/es/index.js +8 -0
  16. package/es/iterator/concat.js +21 -0
  17. package/es/iterator/index.js +1 -0
  18. package/es/json/index.js +6 -0
  19. package/es/json/is-raw-json.js +5 -0
  20. package/es/json/parse.js +6 -0
  21. package/es/json/raw-json.js +7 -0
  22. package/es/map/get-or-insert-computed.js +6 -0
  23. package/es/map/get-or-insert.js +6 -0
  24. package/es/map/group-by.js +2 -0
  25. package/es/map/index.js +2 -0
  26. package/es/weak-map/get-or-insert-computed.js +6 -0
  27. package/es/weak-map/get-or-insert.js +6 -0
  28. package/es/weak-map/index.js +2 -0
  29. package/full/index.js +8 -0
  30. package/full/iterator/index.js +1 -3
  31. package/full/iterator/zip-keyed.js +2 -22
  32. package/full/iterator/zip.js +2 -20
  33. package/internals/array-from.js +2 -1
  34. package/internals/array-iteration.js +11 -13
  35. package/internals/array-unique-by.js +3 -3
  36. package/internals/async-iterator-iteration.js +5 -3
  37. package/internals/check-correctness-of-iteration.js +2 -0
  38. package/internals/fix-regexp-well-known-symbol-logic.js +6 -4
  39. package/internals/flatten-into-array.js +2 -1
  40. package/internals/internal-metadata.js +1 -0
  41. package/internals/native-raw-json.js +2 -2
  42. package/internals/set-method-accept-set-like.js +1 -3
  43. package/internals/shared-store.js +3 -3
  44. package/internals/to-string-tag-support.js +1 -1
  45. package/modules/es.array.concat.js +2 -1
  46. package/modules/es.array.flat-map.js +1 -1
  47. package/modules/es.array.flat.js +1 -1
  48. package/modules/es.array.of.js +2 -1
  49. package/modules/es.array.slice.js +2 -1
  50. package/modules/es.array.splice.js +1 -1
  51. package/modules/es.array.to-reversed.js +8 -2
  52. package/modules/es.array.to-spliced.js +4 -3
  53. package/modules/es.array.with.js +13 -2
  54. package/modules/es.error.cause.js +2 -0
  55. package/modules/es.iterator.concat.js +56 -0
  56. package/modules/es.iterator.flat-map.js +15 -1
  57. package/modules/es.iterator.to-array.js +5 -3
  58. package/modules/es.json.is-raw-json.js +11 -0
  59. package/modules/es.json.parse.js +251 -0
  60. package/modules/es.json.raw-json.js +39 -0
  61. package/modules/es.json.stringify.js +78 -19
  62. package/modules/es.map.get-or-insert-computed.js +25 -0
  63. package/modules/es.map.get-or-insert.js +19 -0
  64. package/modules/es.regexp.constructor.js +2 -2
  65. package/modules/es.typed-array.map.js +3 -4
  66. package/modules/es.typed-array.to-reversed.js +7 -2
  67. package/modules/es.typed-array.with.js +11 -3
  68. package/modules/es.uint8-array.set-from-hex.js +14 -1
  69. package/modules/es.weak-map.get-or-insert-computed.js +36 -0
  70. package/modules/es.weak-map.get-or-insert.js +19 -0
  71. package/modules/esnext.iterator.concat.js +2 -55
  72. package/modules/esnext.iterator.zip-keyed.js +1 -1
  73. package/modules/esnext.iterator.zip.js +1 -1
  74. package/modules/esnext.json.is-raw-json.js +2 -10
  75. package/modules/esnext.json.parse.js +2 -250
  76. package/modules/esnext.json.raw-json.js +2 -85
  77. package/modules/esnext.map.get-or-insert-computed.js +2 -24
  78. package/modules/esnext.map.get-or-insert.js +2 -18
  79. package/modules/esnext.weak-map.get-or-insert-computed.js +2 -35
  80. package/modules/esnext.weak-map.get-or-insert.js +2 -18
  81. package/modules/web.url-search-params.constructor.js +1 -1
  82. package/package.json +2 -1
  83. package/stable/index.js +8 -0
  84. package/stable/iterator/concat.js +5 -0
  85. package/stable/json/is-raw-json.js +4 -0
  86. package/stable/json/parse.js +4 -0
  87. package/stable/json/raw-json.js +4 -0
  88. package/stable/map/get-or-insert-computed.js +4 -0
  89. package/stable/map/get-or-insert.js +4 -0
  90. package/stable/weak-map/get-or-insert-computed.js +4 -0
  91. package/stable/weak-map/get-or-insert.js +4 -0
  92. package/stage/2.7.js +0 -1
  93. package/stage/3.js +1 -3
  94. package/stage/4.js +3 -0
  95. package/internals/array-to-reversed.js +0 -12
  96. package/internals/array-with.js +0 -18
  97. package/internals/get-json-replacer-function.js +0 -30
@@ -17,6 +17,7 @@ module.exports = function (KEY, exec, FORCED, SHAM) {
17
17
  var DELEGATES_TO_SYMBOL = !fails(function () {
18
18
  // String methods call symbol-named RegExp methods
19
19
  var O = {};
20
+ // eslint-disable-next-line unicorn/no-immediate-mutation -- ES3 syntax limitation
20
21
  O[SYMBOL] = function () { return 7; };
21
22
  return ''[KEY](O) !== 7;
22
23
  });
@@ -30,12 +31,13 @@ module.exports = function (KEY, exec, FORCED, SHAM) {
30
31
  // We can't use real regex here since it causes deoptimization
31
32
  // and serious performance degradation in V8
32
33
  // https://github.com/zloirock/core-js/issues/306
33
- re = {};
34
34
  // RegExp[@@split] doesn't call the regex's exec method, but first creates
35
35
  // a new one. We need to return the patched regex when creating the new one.
36
- re.constructor = {};
37
- re.constructor[SPECIES] = function () { return re; };
38
- re.flags = '';
36
+ var constructor = {};
37
+ // eslint-disable-next-line unicorn/no-immediate-mutation -- ES3 syntax limitation
38
+ constructor[SPECIES] = function () { return re; };
39
+ re = { constructor: constructor, flags: '' };
40
+ // eslint-disable-next-line unicorn/no-immediate-mutation -- ES3 syntax limitation
39
41
  re[SYMBOL] = /./[SYMBOL];
40
42
  }
41
43
 
@@ -3,6 +3,7 @@ var isArray = require('../internals/is-array');
3
3
  var lengthOfArrayLike = require('../internals/length-of-array-like');
4
4
  var doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');
5
5
  var bind = require('../internals/function-bind-context');
6
+ var createProperty = require('../internals/create-property');
6
7
 
7
8
  // `FlattenIntoArray` abstract operation
8
9
  // https://tc39.es/ecma262/#sec-flattenintoarray
@@ -21,7 +22,7 @@ var flattenIntoArray = function (target, original, source, sourceLen, start, dep
21
22
  targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;
22
23
  } else {
23
24
  doesNotExceedSafeInteger(targetIndex + 1);
24
- target[targetIndex] = element;
25
+ createProperty(target, targetIndex, element);
25
26
  }
26
27
 
27
28
  targetIndex++;
@@ -60,6 +60,7 @@ var enable = function () {
60
60
  var getOwnPropertyNames = getOwnPropertyNamesModule.f;
61
61
  var splice = uncurryThis([].splice);
62
62
  var test = {};
63
+ // eslint-disable-next-line unicorn/no-immediate-mutation -- ES3 syntax limitation
63
64
  test[METADATA] = 1;
64
65
 
65
66
  // prevent exposing of metadata key
@@ -4,8 +4,8 @@ var fails = require('../internals/fails');
4
4
 
5
5
  module.exports = !fails(function () {
6
6
  var unsafeInt = '9007199254740993';
7
- // eslint-disable-next-line es/no-nonstandard-json-properties -- feature detection
7
+ // eslint-disable-next-line es/no-json-rawjson -- feature detection
8
8
  var raw = JSON.rawJSON(unsafeInt);
9
- // eslint-disable-next-line es/no-nonstandard-json-properties -- feature detection
9
+ // eslint-disable-next-line es/no-json-israwjson -- feature detection
10
10
  return !JSON.isRawJSON(raw) || JSON.stringify(raw) !== unsafeInt;
11
11
  });
@@ -48,9 +48,7 @@ module.exports = function (name, callback) {
48
48
  new Set()[name](createSetLikeWithInfinitySize(-Infinity));
49
49
  return false;
50
50
  } catch (error) {
51
- var set = new Set();
52
- set.add(1);
53
- set.add(2);
51
+ var set = new Set([1, 2]);
54
52
  return callback(set[name](createSetLikeWithInfinitySize(Infinity)));
55
53
  }
56
54
  }
@@ -7,9 +7,9 @@ var SHARED = '__core-js_shared__';
7
7
  var store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});
8
8
 
9
9
  (store.versions || (store.versions = [])).push({
10
- version: '3.46.0',
10
+ version: '3.48.0',
11
11
  mode: IS_PURE ? 'pure' : 'global',
12
- copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru), 2025 CoreJS Company (core-js.io)',
13
- license: 'https://github.com/zloirock/core-js/blob/v3.46.0/LICENSE',
12
+ copyright: '© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.',
13
+ license: 'https://github.com/zloirock/core-js/blob/v3.48.0/LICENSE',
14
14
  source: 'https://github.com/zloirock/core-js'
15
15
  });
@@ -3,7 +3,7 @@ var wellKnownSymbol = require('../internals/well-known-symbol');
3
3
 
4
4
  var TO_STRING_TAG = wellKnownSymbol('toStringTag');
5
5
  var test = {};
6
-
6
+ // eslint-disable-next-line unicorn/no-immediate-mutation -- ES3 syntax limitation
7
7
  test[TO_STRING_TAG] = 'z';
8
8
 
9
9
  module.exports = String(test) === '[object z]';
@@ -7,6 +7,7 @@ var toObject = require('../internals/to-object');
7
7
  var lengthOfArrayLike = require('../internals/length-of-array-like');
8
8
  var doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');
9
9
  var createProperty = require('../internals/create-property');
10
+ var setArrayLength = require('../internals/array-set-length');
10
11
  var arraySpeciesCreate = require('../internals/array-species-create');
11
12
  var arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');
12
13
  var wellKnownSymbol = require('../internals/well-known-symbol');
@@ -52,7 +53,7 @@ $({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {
52
53
  createProperty(A, n++, E);
53
54
  }
54
55
  }
55
- A.length = n;
56
+ setArrayLength(A, n);
56
57
  return A;
57
58
  }
58
59
  });
@@ -15,7 +15,7 @@ $({ target: 'Array', proto: true }, {
15
15
  var A;
16
16
  aCallable(callbackfn);
17
17
  A = arraySpeciesCreate(O, 0);
18
- A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
18
+ flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
19
19
  return A;
20
20
  }
21
21
  });
@@ -14,7 +14,7 @@ $({ target: 'Array', proto: true }, {
14
14
  var O = toObject(this);
15
15
  var sourceLen = lengthOfArrayLike(O);
16
16
  var A = arraySpeciesCreate(O, 0);
17
- A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toIntegerOrInfinity(depthArg));
17
+ flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toIntegerOrInfinity(depthArg));
18
18
  return A;
19
19
  }
20
20
  });
@@ -3,6 +3,7 @@ var $ = require('../internals/export');
3
3
  var fails = require('../internals/fails');
4
4
  var isConstructor = require('../internals/is-constructor');
5
5
  var createProperty = require('../internals/create-property');
6
+ var setArrayLength = require('../internals/array-set-length');
6
7
 
7
8
  var $Array = Array;
8
9
 
@@ -21,7 +22,7 @@ $({ target: 'Array', stat: true, forced: ISNT_GENERIC }, {
21
22
  var argumentsLength = arguments.length;
22
23
  var result = new (isConstructor(this) ? this : $Array)(argumentsLength);
23
24
  while (argumentsLength > index) createProperty(result, index, arguments[index++]);
24
- result.length = argumentsLength;
25
+ setArrayLength(result, argumentsLength);
25
26
  return result;
26
27
  }
27
28
  });
@@ -7,6 +7,7 @@ var toAbsoluteIndex = require('../internals/to-absolute-index');
7
7
  var lengthOfArrayLike = require('../internals/length-of-array-like');
8
8
  var toIndexedObject = require('../internals/to-indexed-object');
9
9
  var createProperty = require('../internals/create-property');
10
+ var setArrayLength = require('../internals/array-set-length');
10
11
  var wellKnownSymbol = require('../internals/well-known-symbol');
11
12
  var arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');
12
13
  var nativeSlice = require('../internals/array-slice');
@@ -43,7 +44,7 @@ $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
43
44
  }
44
45
  result = new (Constructor === undefined ? $Array : Constructor)(max(fin - k, 0));
45
46
  for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
46
- result.length = n;
47
+ setArrayLength(result, n);
47
48
  return result;
48
49
  }
49
50
  });
@@ -41,7 +41,7 @@ $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
41
41
  from = actualStart + k;
42
42
  if (from in O) createProperty(A, k, O[from]);
43
43
  }
44
- A.length = actualDeleteCount;
44
+ setArrayLength(A, actualDeleteCount);
45
45
  if (insertCount < actualDeleteCount) {
46
46
  for (k = actualStart; k < len - actualDeleteCount; k++) {
47
47
  from = k + actualDeleteCount;
@@ -1,7 +1,8 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
- var arrayToReversed = require('../internals/array-to-reversed');
3
+ var lengthOfArrayLike = require('../internals/length-of-array-like');
4
4
  var toIndexedObject = require('../internals/to-indexed-object');
5
+ var createProperty = require('../internals/create-property');
5
6
  var addToUnscopables = require('../internals/add-to-unscopables');
6
7
 
7
8
  var $Array = Array;
@@ -10,7 +11,12 @@ var $Array = Array;
10
11
  // https://tc39.es/ecma262/#sec-array.prototype.toreversed
11
12
  $({ target: 'Array', proto: true }, {
12
13
  toReversed: function toReversed() {
13
- return arrayToReversed(toIndexedObject(this), $Array);
14
+ var O = toIndexedObject(this);
15
+ var len = lengthOfArrayLike(O);
16
+ var A = new $Array(len);
17
+ var k = 0;
18
+ for (; k < len; k++) createProperty(A, k, O[len - k - 1]);
19
+ return A;
14
20
  }
15
21
  });
16
22
 
@@ -6,6 +6,7 @@ var lengthOfArrayLike = require('../internals/length-of-array-like');
6
6
  var toAbsoluteIndex = require('../internals/to-absolute-index');
7
7
  var toIndexedObject = require('../internals/to-indexed-object');
8
8
  var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');
9
+ var createProperty = require('../internals/create-property');
9
10
 
10
11
  var $Array = Array;
11
12
  var max = Math.max;
@@ -33,9 +34,9 @@ $({ target: 'Array', proto: true }, {
33
34
  newLen = doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);
34
35
  A = $Array(newLen);
35
36
 
36
- for (; k < actualStart; k++) A[k] = O[k];
37
- for (; k < actualStart + insertCount; k++) A[k] = arguments[k - actualStart + 2];
38
- for (; k < newLen; k++) A[k] = O[k + actualDeleteCount - insertCount];
37
+ for (; k < actualStart; k++) createProperty(A, k, O[k]);
38
+ for (; k < actualStart + insertCount; k++) createProperty(A, k, arguments[k - actualStart + 2]);
39
+ for (; k < newLen; k++) createProperty(A, k, O[k + actualDeleteCount - insertCount]);
39
40
 
40
41
  return A;
41
42
  }
@@ -1,9 +1,12 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
- var arrayWith = require('../internals/array-with');
3
+ var lengthOfArrayLike = require('../internals/length-of-array-like');
4
+ var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');
4
5
  var toIndexedObject = require('../internals/to-indexed-object');
6
+ var createProperty = require('../internals/create-property');
5
7
 
6
8
  var $Array = Array;
9
+ var $RangeError = RangeError;
7
10
 
8
11
  // Firefox bug
9
12
  var INCORRECT_EXCEPTION_ON_COERCION_FAIL = (function () {
@@ -19,6 +22,14 @@ var INCORRECT_EXCEPTION_ON_COERCION_FAIL = (function () {
19
22
  // https://tc39.es/ecma262/#sec-array.prototype.with
20
23
  $({ target: 'Array', proto: true, forced: INCORRECT_EXCEPTION_ON_COERCION_FAIL }, {
21
24
  'with': function (index, value) {
22
- return arrayWith(toIndexedObject(this), $Array, index, value);
25
+ var O = toIndexedObject(this);
26
+ var len = lengthOfArrayLike(O);
27
+ var relativeIndex = toIntegerOrInfinity(index);
28
+ var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;
29
+ if (actualIndex >= len || actualIndex < 0) throw new $RangeError('Incorrect index');
30
+ var A = new $Array(len);
31
+ var k = 0;
32
+ for (; k < len; k++) createProperty(A, k, k === actualIndex ? value : O[k]);
33
+ return A;
23
34
  }
24
35
  });
@@ -13,6 +13,7 @@ var FORCED = new Error('e', { cause: 7 }).cause !== 7;
13
13
 
14
14
  var exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) {
15
15
  var O = {};
16
+ // eslint-disable-next-line unicorn/no-immediate-mutation -- ES3 syntax limitation
16
17
  O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);
17
18
  $({ global: true, constructor: true, arity: 1, forced: FORCED }, O);
18
19
  };
@@ -20,6 +21,7 @@ var exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) {
20
21
  var exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) {
21
22
  if (WebAssembly && WebAssembly[ERROR_NAME]) {
22
23
  var O = {};
24
+ // eslint-disable-next-line unicorn/no-immediate-mutation -- ES3 syntax limitation
23
25
  O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED);
24
26
  $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);
25
27
  }
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+ var $ = require('../internals/export');
3
+ var call = require('../internals/function-call');
4
+ var aCallable = require('../internals/a-callable');
5
+ var anObject = require('../internals/an-object');
6
+ var getIteratorMethod = require('../internals/get-iterator-method');
7
+ var createIteratorProxy = require('../internals/iterator-create-proxy');
8
+
9
+ var $Array = Array;
10
+
11
+ var IteratorProxy = createIteratorProxy(function () {
12
+ while (true) {
13
+ var iterator = this.iterator;
14
+ if (!iterator) {
15
+ var iterableIndex = this.nextIterableIndex++;
16
+ var iterables = this.iterables;
17
+ if (iterableIndex >= iterables.length) {
18
+ this.done = true;
19
+ return;
20
+ }
21
+ var entry = iterables[iterableIndex];
22
+ this.iterables[iterableIndex] = null;
23
+ iterator = this.iterator = call(entry.method, entry.iterable);
24
+ this.next = iterator.next;
25
+ }
26
+ var result = anObject(call(this.next, iterator));
27
+ if (result.done) {
28
+ this.iterator = null;
29
+ this.next = null;
30
+ continue;
31
+ }
32
+ return result.value;
33
+ }
34
+ });
35
+
36
+ // `Iterator.concat` method
37
+ // https://github.com/tc39/proposal-iterator-sequencing
38
+ $({ target: 'Iterator', stat: true }, {
39
+ concat: function concat() {
40
+ var length = arguments.length;
41
+ var iterables = $Array(length);
42
+ for (var index = 0; index < length; index++) {
43
+ var item = anObject(arguments[index]);
44
+ iterables[index] = {
45
+ iterable: item,
46
+ method: aCallable(getIteratorMethod(item))
47
+ };
48
+ }
49
+ return new IteratorProxy({
50
+ iterables: iterables,
51
+ nextIterableIndex: 0,
52
+ iterator: null,
53
+ next: null
54
+ });
55
+ }
56
+ });
@@ -11,12 +11,26 @@ var IS_PURE = require('../internals/is-pure');
11
11
  var iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');
12
12
  var iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');
13
13
 
14
+ // Should not throw an error for an iterator without `return` method. Fixed in Safari 26.2
15
+ // https://bugs.webkit.org/show_bug.cgi?id=297532
16
+ function throwsOnIteratorWithoutReturn() {
17
+ try {
18
+ // eslint-disable-next-line es/no-map, es/no-iterator, es/no-iterator-prototype-flatmap -- required for testing
19
+ var it = Iterator.prototype.flatMap.call(new Map([[4, 5]]).entries(), function (v) { return v; });
20
+ it.next();
21
+ it['return']();
22
+ } catch (error) {
23
+ return true;
24
+ }
25
+ }
26
+
14
27
  var FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE
15
28
  && !iteratorHelperThrowsOnInvalidIterator('flatMap', function () { /* empty */ });
16
29
  var flatMapWithoutClosingOnEarlyError = !IS_PURE && !FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR
17
30
  && iteratorHelperWithoutClosingOnEarlyError('flatMap', TypeError);
18
31
 
19
- var FORCED = IS_PURE || FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || flatMapWithoutClosingOnEarlyError;
32
+ var FORCED = IS_PURE || FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || flatMapWithoutClosingOnEarlyError
33
+ || throwsOnIteratorWithoutReturn();
20
34
 
21
35
  var IteratorProxy = createIteratorProxy(function () {
22
36
  var iterator = this.iterator;
@@ -1,17 +1,19 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
3
  var anObject = require('../internals/an-object');
4
+ var createProperty = require('../internals/create-property');
4
5
  var iterate = require('../internals/iterate');
5
6
  var getIteratorDirect = require('../internals/get-iterator-direct');
6
7
 
7
- var push = [].push;
8
-
9
8
  // `Iterator.prototype.toArray` method
10
9
  // https://tc39.es/ecma262/#sec-iterator.prototype.toarray
11
10
  $({ target: 'Iterator', proto: true, real: true }, {
12
11
  toArray: function toArray() {
13
12
  var result = [];
14
- iterate(getIteratorDirect(anObject(this)), push, { that: result, IS_RECORD: true });
13
+ var index = 0;
14
+ iterate(getIteratorDirect(anObject(this)), function (element) {
15
+ createProperty(result, index++, element);
16
+ }, { IS_RECORD: true });
15
17
  return result;
16
18
  }
17
19
  });
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+ var $ = require('../internals/export');
3
+ var NATIVE_RAW_JSON = require('../internals/native-raw-json');
4
+ var isRawJSON = require('../internals/is-raw-json');
5
+
6
+ // `JSON.isRawJSON` method
7
+ // https://tc39.es/proposal-json-parse-with-source/#sec-json.israwjson
8
+ // https://github.com/tc39/proposal-json-parse-with-source
9
+ $({ target: 'JSON', stat: true, forced: !NATIVE_RAW_JSON }, {
10
+ isRawJSON: isRawJSON
11
+ });
@@ -0,0 +1,251 @@
1
+ 'use strict';
2
+ var $ = require('../internals/export');
3
+ var DESCRIPTORS = require('../internals/descriptors');
4
+ var globalThis = require('../internals/global-this');
5
+ var getBuiltIn = require('../internals/get-built-in');
6
+ var uncurryThis = require('../internals/function-uncurry-this');
7
+ var call = require('../internals/function-call');
8
+ var isCallable = require('../internals/is-callable');
9
+ var isObject = require('../internals/is-object');
10
+ var isArray = require('../internals/is-array');
11
+ var hasOwn = require('../internals/has-own-property');
12
+ var toString = require('../internals/to-string');
13
+ var lengthOfArrayLike = require('../internals/length-of-array-like');
14
+ var createProperty = require('../internals/create-property');
15
+ var fails = require('../internals/fails');
16
+ var parseJSONString = require('../internals/parse-json-string');
17
+ var NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');
18
+
19
+ var JSON = globalThis.JSON;
20
+ var Number = globalThis.Number;
21
+ var SyntaxError = globalThis.SyntaxError;
22
+ var nativeParse = JSON && JSON.parse;
23
+ var enumerableOwnProperties = getBuiltIn('Object', 'keys');
24
+ // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
25
+ var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
26
+ var at = uncurryThis(''.charAt);
27
+ var slice = uncurryThis(''.slice);
28
+ var exec = uncurryThis(/./.exec);
29
+ var push = uncurryThis([].push);
30
+
31
+ var IS_DIGIT = /^\d$/;
32
+ var IS_NON_ZERO_DIGIT = /^[1-9]$/;
33
+ var IS_NUMBER_START = /^[\d-]$/;
34
+ var IS_WHITESPACE = /^[\t\n\r ]$/;
35
+
36
+ var PRIMITIVE = 0;
37
+ var OBJECT = 1;
38
+
39
+ var $parse = function (source, reviver) {
40
+ source = toString(source);
41
+ var context = new Context(source, 0, '');
42
+ var root = context.parse();
43
+ var value = root.value;
44
+ var endIndex = context.skip(IS_WHITESPACE, root.end);
45
+ if (endIndex < source.length) {
46
+ throw new SyntaxError('Unexpected extra character: "' + at(source, endIndex) + '" after the parsed data at: ' + endIndex);
47
+ }
48
+ return isCallable(reviver) ? internalize({ '': value }, '', reviver, root) : value;
49
+ };
50
+
51
+ var internalize = function (holder, name, reviver, node) {
52
+ var val = holder[name];
53
+ var unmodified = node && val === node.value;
54
+ var context = unmodified && typeof node.source == 'string' ? { source: node.source } : {};
55
+ var elementRecordsLen, keys, len, i, P;
56
+ if (isObject(val)) {
57
+ var nodeIsArray = isArray(val);
58
+ var nodes = unmodified ? node.nodes : nodeIsArray ? [] : {};
59
+ if (nodeIsArray) {
60
+ elementRecordsLen = nodes.length;
61
+ len = lengthOfArrayLike(val);
62
+ for (i = 0; i < len; i++) {
63
+ internalizeProperty(val, i, internalize(val, '' + i, reviver, i < elementRecordsLen ? nodes[i] : undefined));
64
+ }
65
+ } else {
66
+ keys = enumerableOwnProperties(val);
67
+ len = lengthOfArrayLike(keys);
68
+ for (i = 0; i < len; i++) {
69
+ P = keys[i];
70
+ internalizeProperty(val, P, internalize(val, P, reviver, hasOwn(nodes, P) ? nodes[P] : undefined));
71
+ }
72
+ }
73
+ }
74
+ return call(reviver, holder, name, val, context);
75
+ };
76
+
77
+ var internalizeProperty = function (object, key, value) {
78
+ if (DESCRIPTORS) {
79
+ var descriptor = getOwnPropertyDescriptor(object, key);
80
+ if (descriptor && !descriptor.configurable) return;
81
+ }
82
+ if (value === undefined) delete object[key];
83
+ else createProperty(object, key, value);
84
+ };
85
+
86
+ var Node = function (value, end, source, nodes) {
87
+ this.value = value;
88
+ this.end = end;
89
+ this.source = source;
90
+ this.nodes = nodes;
91
+ };
92
+
93
+ var Context = function (source, index) {
94
+ this.source = source;
95
+ this.index = index;
96
+ };
97
+
98
+ // https://www.json.org/json-en.html
99
+ Context.prototype = {
100
+ fork: function (nextIndex) {
101
+ return new Context(this.source, nextIndex);
102
+ },
103
+ parse: function () {
104
+ var source = this.source;
105
+ var i = this.skip(IS_WHITESPACE, this.index);
106
+ var fork = this.fork(i);
107
+ var chr = at(source, i);
108
+ if (exec(IS_NUMBER_START, chr)) return fork.number();
109
+ switch (chr) {
110
+ case '{':
111
+ return fork.object();
112
+ case '[':
113
+ return fork.array();
114
+ case '"':
115
+ return fork.string();
116
+ case 't':
117
+ return fork.keyword(true);
118
+ case 'f':
119
+ return fork.keyword(false);
120
+ case 'n':
121
+ return fork.keyword(null);
122
+ } throw new SyntaxError('Unexpected character: "' + chr + '" at: ' + i);
123
+ },
124
+ node: function (type, value, start, end, nodes) {
125
+ return new Node(value, end, type ? null : slice(this.source, start, end), nodes);
126
+ },
127
+ object: function () {
128
+ var source = this.source;
129
+ var i = this.index + 1;
130
+ var expectKeypair = false;
131
+ var object = {};
132
+ var nodes = {};
133
+ while (i < source.length) {
134
+ i = this.until(['"', '}'], i);
135
+ if (at(source, i) === '}' && !expectKeypair) {
136
+ i++;
137
+ break;
138
+ }
139
+ // Parsing the key
140
+ var result = this.fork(i).string();
141
+ var key = result.value;
142
+ i = result.end;
143
+ i = this.until([':'], i) + 1;
144
+ // Parsing value
145
+ i = this.skip(IS_WHITESPACE, i);
146
+ result = this.fork(i).parse();
147
+ createProperty(nodes, key, result);
148
+ createProperty(object, key, result.value);
149
+ i = this.until([',', '}'], result.end);
150
+ var chr = at(source, i);
151
+ if (chr === ',') {
152
+ expectKeypair = true;
153
+ i++;
154
+ } else if (chr === '}') {
155
+ i++;
156
+ break;
157
+ }
158
+ }
159
+ return this.node(OBJECT, object, this.index, i, nodes);
160
+ },
161
+ array: function () {
162
+ var source = this.source;
163
+ var i = this.index + 1;
164
+ var expectElement = false;
165
+ var array = [];
166
+ var nodes = [];
167
+ while (i < source.length) {
168
+ i = this.skip(IS_WHITESPACE, i);
169
+ if (at(source, i) === ']' && !expectElement) {
170
+ i++;
171
+ break;
172
+ }
173
+ var result = this.fork(i).parse();
174
+ push(nodes, result);
175
+ push(array, result.value);
176
+ i = this.until([',', ']'], result.end);
177
+ if (at(source, i) === ',') {
178
+ expectElement = true;
179
+ i++;
180
+ } else if (at(source, i) === ']') {
181
+ i++;
182
+ break;
183
+ }
184
+ }
185
+ return this.node(OBJECT, array, this.index, i, nodes);
186
+ },
187
+ string: function () {
188
+ var index = this.index;
189
+ var parsed = parseJSONString(this.source, this.index + 1);
190
+ return this.node(PRIMITIVE, parsed.value, index, parsed.end);
191
+ },
192
+ number: function () {
193
+ var source = this.source;
194
+ var startIndex = this.index;
195
+ var i = startIndex;
196
+ if (at(source, i) === '-') i++;
197
+ if (at(source, i) === '0') i++;
198
+ else if (exec(IS_NON_ZERO_DIGIT, at(source, i))) i = this.skip(IS_DIGIT, i + 1);
199
+ else throw new SyntaxError('Failed to parse number at: ' + i);
200
+ if (at(source, i) === '.') i = this.skip(IS_DIGIT, i + 1);
201
+ if (at(source, i) === 'e' || at(source, i) === 'E') {
202
+ i++;
203
+ if (at(source, i) === '+' || at(source, i) === '-') i++;
204
+ var exponentStartIndex = i;
205
+ i = this.skip(IS_DIGIT, i);
206
+ if (exponentStartIndex === i) throw new SyntaxError("Failed to parse number's exponent value at: " + i);
207
+ }
208
+ return this.node(PRIMITIVE, Number(slice(source, startIndex, i)), startIndex, i);
209
+ },
210
+ keyword: function (value) {
211
+ var keyword = '' + value;
212
+ var index = this.index;
213
+ var endIndex = index + keyword.length;
214
+ if (slice(this.source, index, endIndex) !== keyword) throw new SyntaxError('Failed to parse value at: ' + index);
215
+ return this.node(PRIMITIVE, value, index, endIndex);
216
+ },
217
+ skip: function (regex, i) {
218
+ var source = this.source;
219
+ for (; i < source.length; i++) if (!exec(regex, at(source, i))) break;
220
+ return i;
221
+ },
222
+ until: function (array, i) {
223
+ i = this.skip(IS_WHITESPACE, i);
224
+ var chr = at(this.source, i);
225
+ for (var j = 0; j < array.length; j++) if (array[j] === chr) return i;
226
+ throw new SyntaxError('Unexpected character: "' + chr + '" at: ' + i);
227
+ }
228
+ };
229
+
230
+ var NO_SOURCE_SUPPORT = fails(function () {
231
+ var unsafeInt = '9007199254740993';
232
+ var source;
233
+ nativeParse(unsafeInt, function (key, value, context) {
234
+ source = context.source;
235
+ });
236
+ return source !== unsafeInt;
237
+ });
238
+
239
+ var PROPER_BASE_PARSE = NATIVE_SYMBOL && !fails(function () {
240
+ // Safari 9 bug
241
+ return 1 / nativeParse('-0 \t') !== -Infinity;
242
+ });
243
+
244
+ // `JSON.parse` method
245
+ // https://tc39.es/ecma262/#sec-json.parse
246
+ // https://github.com/tc39/proposal-json-parse-with-source
247
+ $({ target: 'JSON', stat: true, forced: NO_SOURCE_SUPPORT }, {
248
+ parse: function parse(text, reviver) {
249
+ return PROPER_BASE_PARSE && !isCallable(reviver) ? nativeParse(text) : $parse(text, reviver);
250
+ }
251
+ });