core-js 3.48.0 → 3.50.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 (179) hide show
  1. package/README.md +2 -2
  2. package/actual/iterator/chunks.js +8 -0
  3. package/actual/iterator/concat.js +4 -0
  4. package/actual/iterator/from.js +4 -0
  5. package/actual/iterator/includes.js +8 -0
  6. package/actual/iterator/index.js +4 -1
  7. package/actual/iterator/join.js +8 -0
  8. package/actual/iterator/windows.js +8 -0
  9. package/actual/iterator/zip-keyed.js +6 -21
  10. package/actual/iterator/zip.js +6 -19
  11. package/actual/promise/all-keyed.js +16 -0
  12. package/actual/promise/all-settled-keyed.js +16 -0
  13. package/actual/promise/index.js +4 -0
  14. package/configurator.js +1 -1
  15. package/es/index.js +2 -0
  16. package/es/iterator/index.js +4 -0
  17. package/es/iterator/zip-keyed.js +24 -0
  18. package/es/iterator/zip.js +22 -0
  19. package/es/object/define-properties.js +2 -2
  20. package/es/object/define-property.js +2 -2
  21. package/es/object/get-own-property-descriptor.js +2 -2
  22. package/es/promise/try.js +2 -2
  23. package/features/iterator/includes.js +2 -0
  24. package/features/iterator/join.js +2 -0
  25. package/features/promise/all-keyed.js +2 -0
  26. package/features/promise/all-settled-keyed.js +2 -0
  27. package/full/index.js +6 -0
  28. package/full/iterator/chunks.js +2 -6
  29. package/full/iterator/concat.js +0 -2
  30. package/full/iterator/from.js +0 -2
  31. package/full/iterator/includes.js +4 -0
  32. package/full/iterator/index.js +0 -2
  33. package/full/iterator/join.js +4 -0
  34. package/full/iterator/range.js +3 -1
  35. package/full/iterator/windows.js +2 -6
  36. package/full/iterator/zip-keyed.js +0 -2
  37. package/full/iterator/zip.js +0 -2
  38. package/full/promise/all-keyed.js +4 -0
  39. package/full/promise/all-settled-keyed.js +4 -0
  40. package/internals/add-disposable-resource.js +1 -1
  41. package/internals/advance-string-index.js +1 -1
  42. package/internals/array-buffer-transfer.js +4 -1
  43. package/internals/array-buffer-view-core.js +1 -1
  44. package/internals/array-buffer.js +1 -2
  45. package/internals/array-fill.js +2 -1
  46. package/internals/array-from-async.js +7 -9
  47. package/internals/array-from.js +15 -4
  48. package/internals/async-from-sync-iterator.js +28 -4
  49. package/internals/async-iterator-close.js +11 -3
  50. package/internals/async-iterator-create-proxy.js +61 -22
  51. package/internals/async-iterator-iteration.js +7 -4
  52. package/internals/async-iterator-map.js +20 -18
  53. package/internals/does-not-exceed-safe-integer.js +1 -1
  54. package/internals/environment-is-ios.js +1 -2
  55. package/internals/error-stack-clear.js +1 -1
  56. package/internals/function-bind-native.js +1 -1
  57. package/internals/function-name.js +1 -1
  58. package/internals/get-async-iterator-flattenable.js +1 -1
  59. package/internals/get-async-iterator.js +1 -1
  60. package/internals/get-internal-iterator.js +1 -0
  61. package/internals/get-iterator-flattenable.js +1 -1
  62. package/internals/get-iterator-internal.js +14 -0
  63. package/internals/get-iterator-method-internal.js +14 -0
  64. package/internals/get-iterator-method.js +4 -7
  65. package/internals/get-iterator-record.js +1 -1
  66. package/internals/get-iterator.js +4 -5
  67. package/internals/is-iterable.js +4 -10
  68. package/internals/iterate.js +10 -5
  69. package/internals/iterator-chunk-size-validation.js +17 -0
  70. package/internals/iterator-cleanup-state.js +6 -0
  71. package/internals/iterator-create-proxy.js +14 -5
  72. package/internals/iterator-window.js +4 -6
  73. package/internals/iterator-zip.js +4 -3
  74. package/internals/iterators.js +1 -1
  75. package/internals/math-log1p.js +3 -1
  76. package/internals/numeric-range-iterator.js +9 -4
  77. package/internals/regexp-exec.js +20 -13
  78. package/internals/set-difference.js +1 -1
  79. package/internals/set-is-disjoint-from.js +1 -1
  80. package/internals/set-is-superset-of.js +1 -1
  81. package/internals/shared-store.js +2 -2
  82. package/internals/shared.js +3 -1
  83. package/internals/string-pad.js +2 -1
  84. package/internals/string-parse.js +1 -1
  85. package/internals/string-repeat.js +2 -1
  86. package/internals/to-uint8-clamped.js +11 -3
  87. package/internals/typed-array-constructor.js +1 -2
  88. package/internals/typed-array-from.js +5 -3
  89. package/internals/uint8-from-base64.js +4 -2
  90. package/internals/uint8-from-hex.js +10 -10
  91. package/internals/url-percent-coding.js +171 -0
  92. package/modules/es.array.flat.js +2 -1
  93. package/modules/es.array.from-async.js +1 -1
  94. package/modules/es.array.includes.js +7 -1
  95. package/modules/es.array.sort.js +3 -1
  96. package/modules/es.data-view.get-float16.js +1 -1
  97. package/modules/es.data-view.set-float16.js +2 -1
  98. package/modules/es.date.set-year.js +4 -1
  99. package/modules/es.date.to-json.js +1 -1
  100. package/modules/es.error.is-error.js +1 -1
  101. package/modules/es.escape.js +10 -8
  102. package/modules/es.iterator.concat.js +5 -4
  103. package/modules/es.iterator.drop.js +16 -1
  104. package/modules/es.iterator.flat-map.js +12 -14
  105. package/modules/es.iterator.take.js +22 -2
  106. package/modules/es.iterator.zip-keyed.js +70 -0
  107. package/modules/es.iterator.zip.js +92 -0
  108. package/modules/es.json.parse.js +14 -2
  109. package/modules/es.json.stringify.js +157 -38
  110. package/modules/es.map.get-or-insert-computed.js +3 -4
  111. package/modules/es.map.get-or-insert.js +2 -3
  112. package/modules/es.map.group-by.js +2 -0
  113. package/modules/es.math.asinh.js +6 -1
  114. package/modules/es.math.atanh.js +2 -2
  115. package/modules/es.math.cbrt.js +3 -1
  116. package/modules/es.math.sum-precise.js +3 -3
  117. package/modules/es.number.to-exponential.js +15 -6
  118. package/modules/es.object.group-by.js +2 -0
  119. package/modules/es.object.proto.js +2 -1
  120. package/modules/es.promise.try.js +16 -8
  121. package/modules/es.reflect.construct.js +1 -1
  122. package/modules/es.reflect.define-property.js +10 -0
  123. package/modules/es.reflect.delete-property.js +5 -2
  124. package/modules/es.reflect.get.js +9 -7
  125. package/modules/es.reflect.set.js +14 -9
  126. package/modules/es.regexp.constructor.js +16 -5
  127. package/modules/es.string.ends-with.js +1 -1
  128. package/modules/es.string.from-code-point.js +2 -2
  129. package/modules/es.string.match-all.js +1 -1
  130. package/modules/es.string.match.js +5 -3
  131. package/modules/es.string.replace.js +9 -8
  132. package/modules/es.string.search.js +3 -1
  133. package/modules/es.string.split.js +7 -5
  134. package/modules/es.string.starts-with.js +1 -1
  135. package/modules/es.string.substr.js +5 -7
  136. package/modules/es.symbol.constructor.js +3 -2
  137. package/modules/es.symbol.description.js +9 -0
  138. package/modules/es.typed-array.sort.js +3 -3
  139. package/modules/es.uint8-array.from-base64.js +1 -1
  140. package/modules/es.uint8-array.from-hex.js +1 -1
  141. package/modules/es.uint8-array.set-from-base64.js +1 -1
  142. package/modules/es.uint8-array.set-from-hex.js +1 -1
  143. package/modules/es.uint8-array.to-base64.js +23 -6
  144. package/modules/es.uint8-array.to-hex.js +6 -4
  145. package/modules/es.weak-map.get-or-insert-computed.js +2 -2
  146. package/modules/es.weak-map.get-or-insert.js +2 -3
  147. package/modules/esnext.array.is-template-object.js +1 -1
  148. package/modules/esnext.async-iterator.reduce.js +2 -2
  149. package/modules/esnext.async-iterator.take.js +4 -2
  150. package/modules/esnext.bigint.range.js +1 -1
  151. package/modules/esnext.iterator.chunks.js +6 -8
  152. package/modules/esnext.iterator.includes.js +44 -0
  153. package/modules/esnext.iterator.join.js +31 -0
  154. package/modules/esnext.iterator.range.js +1 -1
  155. package/modules/esnext.iterator.windows.js +2 -1
  156. package/modules/esnext.iterator.zip-keyed.js +2 -70
  157. package/modules/esnext.iterator.zip.js +2 -90
  158. package/modules/esnext.number.from-string.js +30 -3
  159. package/modules/esnext.number.range.js +1 -1
  160. package/modules/esnext.observable.from.js +6 -3
  161. package/modules/esnext.promise.all-keyed.js +57 -0
  162. package/modules/esnext.promise.all-settled-keyed.js +60 -0
  163. package/modules/esnext.string.dedent.js +1 -1
  164. package/modules/web.atob.js +15 -6
  165. package/modules/web.btoa.js +10 -3
  166. package/modules/web.structured-clone.js +2 -2
  167. package/modules/web.url-search-params.constructor.js +13 -130
  168. package/modules/web.url-search-params.delete.js +6 -9
  169. package/modules/web.url.constructor.js +154 -39
  170. package/modules/web.url.parse.js +1 -1
  171. package/modules/web.url.to-json.js +4 -1
  172. package/package.json +8 -1
  173. package/proposals/await-dictionary.js +4 -0
  174. package/proposals/iterator-includes.js +3 -0
  175. package/proposals/iterator-join.js +3 -0
  176. package/stable/index.js +2 -0
  177. package/stable/iterator/zip-keyed.js +5 -0
  178. package/stable/iterator/zip.js +5 -0
  179. package/stage/3.js +4 -0
@@ -16,7 +16,7 @@ var INCORRECT_CONSTRUCTURING = !nativeFromAsync || fails(function () {
16
16
  });
17
17
 
18
18
  // `Array.fromAsync` method
19
- // https://github.com/tc39/proposal-array-from-async
19
+ // https://tc39.es/ecma262/#sec-array.fromasync
20
20
  $({ target: 'Array', stat: true, forced: INCORRECT_CONSTRUCTURING }, {
21
21
  fromAsync: fromAsync
22
22
  });
@@ -10,9 +10,15 @@ var BROKEN_ON_SPARSE = fails(function () {
10
10
  return !Array(1).includes();
11
11
  });
12
12
 
13
+ // Safari 26.4- bug
14
+ var BROKEN_ON_SPARSE_WITH_FROM_INDEX = fails(function () {
15
+ // eslint-disable-next-line no-sparse-arrays, es/no-array-prototype-includes -- detection
16
+ return [, 1].includes(undefined, 1);
17
+ });
18
+
13
19
  // `Array.prototype.includes` method
14
20
  // https://tc39.es/ecma262/#sec-array.prototype.includes
15
- $({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {
21
+ $({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE || BROKEN_ON_SPARSE_WITH_FROM_INDEX }, {
16
22
  includes: function includes(el /* , fromIndex = 0 */) {
17
23
  return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
18
24
  }
@@ -71,7 +71,9 @@ var getSortCompare = function (comparefn) {
71
71
  if (y === undefined) return -1;
72
72
  if (x === undefined) return 1;
73
73
  if (comparefn !== undefined) return +comparefn(x, y) || 0;
74
- return toString(x) > toString(y) ? 1 : -1;
74
+ var xString = toString(x);
75
+ var yString = toString(y);
76
+ return xString === yString ? 0 : xString > yString ? 1 : -1;
75
77
  };
76
78
  };
77
79
 
@@ -13,7 +13,7 @@ var unpackFloat16 = function (bytes) {
13
13
  var sign = bytes >>> 15;
14
14
  var exponent = bytes >>> 10 & EXP_MASK16;
15
15
  var significand = bytes & SIGNIFICAND_MASK16;
16
- if (exponent === EXP_MASK16) return significand === 0 ? (sign === 0 ? Infinity : -Infinity) : NaN;
16
+ if (exponent === EXP_MASK16) return significand === 0 ? sign === 0 ? Infinity : -Infinity : NaN;
17
17
  if (exponent === 0) return significand * (sign === 0 ? MIN_SUBNORMAL16 : -MIN_SUBNORMAL16);
18
18
  return pow(2, exponent - 15) * (sign === 0 ? 1 + significand * SIGNIFICAND_DENOM16 : -1 - significand * SIGNIFICAND_DENOM16);
19
19
  };
@@ -7,6 +7,7 @@ var toIndex = require('../internals/to-index');
7
7
  var log2 = require('../internals/math-log2');
8
8
  var roundTiesToEven = require('../internals/math-round-ties-to-even');
9
9
 
10
+ var floor = Math.floor;
10
11
  var pow = Math.pow;
11
12
 
12
13
  var MIN_INFINITY16 = 65520; // (2 - 2 ** -11) * 2 ** 15
@@ -25,7 +26,7 @@ var packFloat16 = function (value) {
25
26
  if (value < MIN_NORMAL16) return neg << 15 | roundTiesToEven(value * REC_MIN_SUBNORMAL16); // subnormal
26
27
 
27
28
  // normal
28
- var exponent = log2(value) | 0;
29
+ var exponent = floor(log2(value));
29
30
  if (exponent === -15) {
30
31
  // we round from a value between 2 ** -15 * (1 + 1022/1024) (the largest subnormal) and 2 ** -14 * (1 + 0/1024) (the smallest normal)
31
32
  // to the latter (former impossible because of the subnormal check above)
@@ -13,7 +13,10 @@ $({ target: 'Date', proto: true }, {
13
13
  setYear: function setYear(year) {
14
14
  // validate
15
15
  thisTimeValue(this);
16
- var yi = toIntegerOrInfinity(year);
16
+ var y = +year;
17
+ // eslint-disable-next-line no-self-compare -- NaN check
18
+ if (y !== y) return setFullYear(this, y);
19
+ var yi = toIntegerOrInfinity(y);
17
20
  var yyyy = yi >= 0 && yi <= 99 ? yi + 1900 : yi;
18
21
  return setFullYear(this, yyyy);
19
22
  }
@@ -11,7 +11,7 @@ var FORCED = fails(function () {
11
11
 
12
12
  // `Date.prototype.toJSON` method
13
13
  // https://tc39.es/ecma262/#sec-date.prototype.tojson
14
- $({ target: 'Date', proto: true, arity: 1, forced: FORCED }, {
14
+ $({ target: 'Date', proto: true, forced: FORCED }, {
15
15
  // eslint-disable-next-line no-unused-vars -- required for `.length`
16
16
  toJSON: function toJSON(key) {
17
17
  var O = toObject(this);
@@ -8,7 +8,7 @@ var fails = require('../internals/fails');
8
8
  var ERROR = 'Error';
9
9
  var DOM_EXCEPTION = 'DOMException';
10
10
  // eslint-disable-next-line es/no-object-setprototypeof, no-proto -- safe
11
- var PROTOTYPE_SETTING_AVAILABLE = Object.setPrototypeOf || ({}).__proto__;
11
+ var PROTOTYPE_SETTING_AVAILABLE = Object.setPrototypeOf || {}.__proto__;
12
12
 
13
13
  var DOMException = getBuiltIn(DOM_EXCEPTION);
14
14
  var $Error = Error;
@@ -8,6 +8,8 @@ var charCodeAt = uncurryThis(''.charCodeAt);
8
8
  var exec = uncurryThis(/./.exec);
9
9
  var numberToString = uncurryThis(1.1.toString);
10
10
  var toUpperCase = uncurryThis(''.toUpperCase);
11
+ var join = uncurryThis([].join);
12
+ var $Array = Array;
11
13
 
12
14
  var raw = /[\w*+\-./@]/;
13
15
 
@@ -22,22 +24,22 @@ var hex = function (code, length) {
22
24
  $({ global: true }, {
23
25
  escape: function escape(string) {
24
26
  var str = toString(string);
25
- var result = '';
26
27
  var length = str.length;
27
- var index = 0;
28
+ var result = $Array(length);
29
+ var index;
28
30
  var chr, code;
29
- while (index < length) {
30
- chr = charAt(str, index++);
31
+ for (index = 0; index < length; index++) {
32
+ chr = charAt(str, index);
31
33
  if (exec(raw, chr)) {
32
- result += chr;
34
+ result[index] = chr;
33
35
  } else {
34
36
  code = charCodeAt(chr, 0);
35
37
  if (code < 256) {
36
- result += '%' + hex(code, 2);
38
+ result[index] = '%' + toUpperCase(hex(code, 2));
37
39
  } else {
38
- result += '%u' + toUpperCase(hex(code, 4));
40
+ result[index] = '%u' + toUpperCase(hex(code, 4));
39
41
  }
40
42
  }
41
- } return result;
43
+ } return join(result, '');
42
44
  }
43
45
  });
@@ -3,8 +3,9 @@ var $ = require('../internals/export');
3
3
  var call = require('../internals/function-call');
4
4
  var aCallable = require('../internals/a-callable');
5
5
  var anObject = require('../internals/an-object');
6
- var getIteratorMethod = require('../internals/get-iterator-method');
6
+ var getIteratorMethod = require('../internals/get-iterator-method-internal');
7
7
  var createIteratorProxy = require('../internals/iterator-create-proxy');
8
+ var IS_PURE = require('../internals/is-pure');
8
9
 
9
10
  var $Array = Array;
10
11
 
@@ -20,7 +21,7 @@ var IteratorProxy = createIteratorProxy(function () {
20
21
  }
21
22
  var entry = iterables[iterableIndex];
22
23
  this.iterables[iterableIndex] = null;
23
- iterator = this.iterator = call(entry.method, entry.iterable);
24
+ iterator = this.iterator = anObject(call(entry.method, entry.iterable));
24
25
  this.next = iterator.next;
25
26
  }
26
27
  var result = anObject(call(this.next, iterator));
@@ -34,8 +35,8 @@ var IteratorProxy = createIteratorProxy(function () {
34
35
  });
35
36
 
36
37
  // `Iterator.concat` method
37
- // https://github.com/tc39/proposal-iterator-sequencing
38
- $({ target: 'Iterator', stat: true }, {
38
+ // https://tc39.es/ecma262/#sec-iterator.concat
39
+ $({ target: 'Iterator', stat: true, forced: IS_PURE }, {
39
40
  concat: function concat() {
40
41
  var length = arguments.length;
41
42
  var iterables = $Array(length);
@@ -11,11 +11,23 @@ var iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helpe
11
11
  var iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');
12
12
  var IS_PURE = require('../internals/is-pure');
13
13
 
14
+ var $RangeError = RangeError;
15
+ var $Infinity = Infinity;
16
+
14
17
  var DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('drop', 0);
15
18
  var dropWithoutClosingOnEarlyError = !IS_PURE && !DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR
16
19
  && iteratorHelperWithoutClosingOnEarlyError('drop', RangeError);
17
20
 
18
- var FORCED = IS_PURE || DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR || dropWithoutClosingOnEarlyError;
21
+ var FORCED = IS_PURE || DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR || dropWithoutClosingOnEarlyError || !function () {
22
+ try {
23
+ // eslint-disable-next-line es/no-iterator, es/no-iterator-prototype-drop -- detection
24
+ Iterator.prototype.drop.call({
25
+ next: function () { return { done: true }; }
26
+ }, 0x20000000000000);
27
+ } catch (error) {
28
+ return error instanceof $RangeError;
29
+ }
30
+ }();
19
31
 
20
32
  var IteratorProxy = createIteratorProxy(function () {
21
33
  var iterator = this.iterator;
@@ -40,6 +52,9 @@ $({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {
40
52
  var remaining;
41
53
  try {
42
54
  remaining = toPositiveInteger(notANaN(+limit));
55
+ if (remaining > 0x1FFFFFFFFFFFFF && remaining !== $Infinity) {
56
+ throw new $RangeError('The argument should be a safe integer');
57
+ }
43
58
  } catch (error) {
44
59
  iteratorClose(this, 'throw', error);
45
60
  }
@@ -7,30 +7,28 @@ var getIteratorDirect = require('../internals/get-iterator-direct');
7
7
  var getIteratorFlattenable = require('../internals/get-iterator-flattenable');
8
8
  var createIteratorProxy = require('../internals/iterator-create-proxy');
9
9
  var iteratorClose = require('../internals/iterator-close');
10
+ var fails = require('../internals/fails');
10
11
  var IS_PURE = require('../internals/is-pure');
11
12
  var iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');
12
13
  var iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');
13
14
 
14
15
  // Should not throw an error for an iterator without `return` method. Fixed in Safari 26.2
15
16
  // 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
- }
17
+ var THROWS_ON_ITERATOR_WITHOUT_RETURN = !IS_PURE && fails(function () {
18
+ // eslint-disable-next-line es/no-array-prototype-values, es/no-iterator-prototype-flatmap, es/no-iterator-prototype-find -- testing
19
+ return [1].values()
20
+ .flatMap(function () { return [1]; })
21
+ .find(function () { return true; }) !== 1;
22
+ });
26
23
 
27
- var FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE
24
+ var FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !THROWS_ON_ITERATOR_WITHOUT_RETURN
28
25
  && !iteratorHelperThrowsOnInvalidIterator('flatMap', function () { /* empty */ });
29
- var flatMapWithoutClosingOnEarlyError = !IS_PURE && !FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR
26
+
27
+ var flatMapWithoutClosingOnEarlyError = !IS_PURE && !THROWS_ON_ITERATOR_WITHOUT_RETURN && !FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR
30
28
  && iteratorHelperWithoutClosingOnEarlyError('flatMap', TypeError);
31
29
 
32
- var FORCED = IS_PURE || FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || flatMapWithoutClosingOnEarlyError
33
- || throwsOnIteratorWithoutReturn();
30
+ var FORCED = IS_PURE || THROWS_ON_ITERATOR_WITHOUT_RETURN || FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR
31
+ || flatMapWithoutClosingOnEarlyError;
34
32
 
35
33
  var IteratorProxy = createIteratorProxy(function () {
36
34
  var iterator = this.iterator;
@@ -7,10 +7,27 @@ var notANaN = require('../internals/not-a-nan');
7
7
  var toPositiveInteger = require('../internals/to-positive-integer');
8
8
  var createIteratorProxy = require('../internals/iterator-create-proxy');
9
9
  var iteratorClose = require('../internals/iterator-close');
10
+ var iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');
10
11
  var iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');
11
12
  var IS_PURE = require('../internals/is-pure');
12
13
 
13
- var takeWithoutClosingOnEarlyError = !IS_PURE && iteratorHelperWithoutClosingOnEarlyError('take', RangeError);
14
+ var $RangeError = RangeError;
15
+ var $Infinity = Infinity;
16
+
17
+ var TAKE_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('take', 1);
18
+ var takeWithoutClosingOnEarlyError = !IS_PURE && !TAKE_WITHOUT_THROWING_ON_INVALID_ITERATOR
19
+ && iteratorHelperWithoutClosingOnEarlyError('take', RangeError);
20
+
21
+ var FORCED = IS_PURE || TAKE_WITHOUT_THROWING_ON_INVALID_ITERATOR || takeWithoutClosingOnEarlyError || !function () {
22
+ try {
23
+ // eslint-disable-next-line es/no-iterator, es/no-iterator-prototype-take -- detection
24
+ Iterator.prototype.take.call({
25
+ next: function () { return { done: true }; }
26
+ }, 0x20000000000000);
27
+ } catch (error) {
28
+ return error instanceof $RangeError;
29
+ }
30
+ }();
14
31
 
15
32
  var IteratorProxy = createIteratorProxy(function () {
16
33
  var iterator = this.iterator;
@@ -25,12 +42,15 @@ var IteratorProxy = createIteratorProxy(function () {
25
42
 
26
43
  // `Iterator.prototype.take` method
27
44
  // https://tc39.es/ecma262/#sec-iterator.prototype.take
28
- $({ target: 'Iterator', proto: true, real: true, forced: IS_PURE || takeWithoutClosingOnEarlyError }, {
45
+ $({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {
29
46
  take: function take(limit) {
30
47
  anObject(this);
31
48
  var remaining;
32
49
  try {
33
50
  remaining = toPositiveInteger(notANaN(+limit));
51
+ if (remaining > 0x1FFFFFFFFFFFFF && remaining !== $Infinity) {
52
+ throw new $RangeError('The argument should be a safe integer');
53
+ }
34
54
  } catch (error) {
35
55
  iteratorClose(this, 'throw', error);
36
56
  }
@@ -0,0 +1,70 @@
1
+ 'use strict';
2
+ var $ = require('../internals/export');
3
+ var anObject = require('../internals/an-object');
4
+ var anObjectOrUndefined = require('../internals/an-object-or-undefined');
5
+ var createProperty = require('../internals/create-property');
6
+ var call = require('../internals/function-call');
7
+ var uncurryThis = require('../internals/function-uncurry-this');
8
+ var getBuiltIn = require('../internals/get-built-in');
9
+ var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');
10
+ var getIteratorFlattenable = require('../internals/get-iterator-flattenable');
11
+ var getModeOption = require('../internals/get-mode-option');
12
+ var iteratorCloseAll = require('../internals/iterator-close-all');
13
+ var iteratorZip = require('../internals/iterator-zip');
14
+ var IS_PURE = require('../internals/is-pure');
15
+
16
+ var push = uncurryThis([].push);
17
+ var THROW = 'throw';
18
+
19
+ // `Iterator.zipKeyed` method
20
+ // https://github.com/tc39/proposal-joint-iteration
21
+ $({ target: 'Iterator', stat: true, forced: IS_PURE }, {
22
+ zipKeyed: function zipKeyed(iterables /* , options */) {
23
+ anObject(iterables);
24
+ var options = arguments.length > 1 ? anObjectOrUndefined(arguments[1]) : undefined;
25
+ var mode = getModeOption(options);
26
+ var paddingOption = mode === 'longest' ? anObjectOrUndefined(options && options.padding) : undefined;
27
+
28
+ var iters = [];
29
+ var padding = [];
30
+ var allKeys = getBuiltIn('Reflect', 'ownKeys')(iterables);
31
+ var keys = [];
32
+ var propertyIsEnumerable = propertyIsEnumerableModule.f;
33
+ var i, key, value;
34
+ for (i = 0; i < allKeys.length; i++) try {
35
+ key = allKeys[i];
36
+ if (!call(propertyIsEnumerable, iterables, key)) continue;
37
+ value = iterables[key];
38
+ if (value !== undefined) {
39
+ push(keys, key);
40
+ push(iters, getIteratorFlattenable(value, false));
41
+ }
42
+ } catch (error) {
43
+ return iteratorCloseAll(iters, THROW, error);
44
+ }
45
+
46
+ var iterCount = iters.length;
47
+ if (mode === 'longest') {
48
+ if (paddingOption === undefined) {
49
+ for (i = 0; i < iterCount; i++) push(padding, undefined);
50
+ } else {
51
+ for (i = 0; i < keys.length; i++) {
52
+ try {
53
+ value = paddingOption[keys[i]];
54
+ } catch (error) {
55
+ return iteratorCloseAll(iters, THROW, error);
56
+ }
57
+ push(padding, value);
58
+ }
59
+ }
60
+ }
61
+
62
+ return iteratorZip(iters, mode, padding, function (results) {
63
+ var obj = getBuiltIn('Object', 'create')(null);
64
+ for (var j = 0; j < iterCount; j++) {
65
+ createProperty(obj, keys[j], results[j]);
66
+ }
67
+ return obj;
68
+ });
69
+ }
70
+ });
@@ -0,0 +1,92 @@
1
+ 'use strict';
2
+ var $ = require('../internals/export');
3
+ var anObject = require('../internals/an-object');
4
+ var anObjectOrUndefined = require('../internals/an-object-or-undefined');
5
+ var call = require('../internals/function-call');
6
+ var uncurryThis = require('../internals/function-uncurry-this');
7
+ var getIteratorRecord = require('../internals/get-iterator-record');
8
+ var getIteratorFlattenable = require('../internals/get-iterator-flattenable');
9
+ var getModeOption = require('../internals/get-mode-option');
10
+ var iteratorClose = require('../internals/iterator-close');
11
+ var iteratorCloseAll = require('../internals/iterator-close-all');
12
+ var iteratorZip = require('../internals/iterator-zip');
13
+ var IS_PURE = require('../internals/is-pure');
14
+
15
+ var concat = uncurryThis([].concat);
16
+ var push = uncurryThis([].push);
17
+ var THROW = 'throw';
18
+
19
+ // `Iterator.zip` method
20
+ // https://github.com/tc39/proposal-joint-iteration
21
+ $({ target: 'Iterator', stat: true, forced: IS_PURE }, {
22
+ zip: function zip(iterables /* , options */) {
23
+ anObject(iterables);
24
+ var options = arguments.length > 1 ? anObjectOrUndefined(arguments[1]) : undefined;
25
+ var mode = getModeOption(options);
26
+ var paddingOption = mode === 'longest' ? anObjectOrUndefined(options && options.padding) : undefined;
27
+
28
+ var iters = [];
29
+ var padding = [];
30
+ var inputIter = getIteratorRecord(iterables);
31
+ var iter, done, next;
32
+ while (!done) {
33
+ try {
34
+ next = anObject(call(inputIter.next, inputIter.iterator));
35
+ done = next.done;
36
+ } catch (error) {
37
+ return iteratorCloseAll(iters, THROW, error);
38
+ }
39
+ if (!done) {
40
+ try {
41
+ iter = getIteratorFlattenable(next.value, false);
42
+ } catch (error) {
43
+ return iteratorCloseAll(concat([inputIter], iters), THROW, error);
44
+ }
45
+ push(iters, iter);
46
+ }
47
+ }
48
+
49
+ var iterCount = iters.length;
50
+ var i, paddingDone, paddingIter;
51
+ if (mode === 'longest') {
52
+ if (paddingOption === undefined) {
53
+ for (i = 0; i < iterCount; i++) push(padding, undefined);
54
+ } else {
55
+ try {
56
+ paddingIter = getIteratorRecord(paddingOption);
57
+ } catch (error) {
58
+ return iteratorCloseAll(iters, THROW, error);
59
+ }
60
+ var usingIterator = true;
61
+ for (i = 0; i < iterCount; i++) {
62
+ if (usingIterator) {
63
+ try {
64
+ next = anObject(call(paddingIter.next, paddingIter.iterator));
65
+ paddingDone = next.done;
66
+ next = next.value;
67
+ } catch (error) {
68
+ return iteratorCloseAll(iters, THROW, error);
69
+ }
70
+ if (paddingDone) {
71
+ usingIterator = false;
72
+ } else {
73
+ push(padding, next);
74
+ }
75
+ } else {
76
+ push(padding, undefined);
77
+ }
78
+ }
79
+
80
+ if (usingIterator) {
81
+ try {
82
+ iteratorClose(paddingIter.iterator, 'normal');
83
+ } catch (error) {
84
+ return iteratorCloseAll(iters, THROW, error);
85
+ }
86
+ }
87
+ }
88
+ }
89
+
90
+ return iteratorZip(iters, mode, padding);
91
+ }
92
+ });
@@ -38,7 +38,7 @@ var OBJECT = 1;
38
38
 
39
39
  var $parse = function (source, reviver) {
40
40
  source = toString(source);
41
- var context = new Context(source, 0, '');
41
+ var context = new Context(source, 0);
42
42
  var root = context.parse();
43
43
  var value = root.value;
44
44
  var endIndex = context.skip(IS_WHITESPACE, root.end);
@@ -130,10 +130,12 @@ Context.prototype = {
130
130
  var expectKeypair = false;
131
131
  var object = {};
132
132
  var nodes = {};
133
+ var closed = false;
133
134
  while (i < source.length) {
134
135
  i = this.until(['"', '}'], i);
135
136
  if (at(source, i) === '}' && !expectKeypair) {
136
137
  i++;
138
+ closed = true;
137
139
  break;
138
140
  }
139
141
  // Parsing the key
@@ -153,9 +155,11 @@ Context.prototype = {
153
155
  i++;
154
156
  } else if (chr === '}') {
155
157
  i++;
158
+ closed = true;
156
159
  break;
157
160
  }
158
161
  }
162
+ if (!closed) throw new SyntaxError('Unterminated object at: ' + i);
159
163
  return this.node(OBJECT, object, this.index, i, nodes);
160
164
  },
161
165
  array: function () {
@@ -164,10 +168,12 @@ Context.prototype = {
164
168
  var expectElement = false;
165
169
  var array = [];
166
170
  var nodes = [];
171
+ var closed = false;
167
172
  while (i < source.length) {
168
173
  i = this.skip(IS_WHITESPACE, i);
169
174
  if (at(source, i) === ']' && !expectElement) {
170
175
  i++;
176
+ closed = true;
171
177
  break;
172
178
  }
173
179
  var result = this.fork(i).parse();
@@ -179,9 +185,11 @@ Context.prototype = {
179
185
  i++;
180
186
  } else if (at(source, i) === ']') {
181
187
  i++;
188
+ closed = true;
182
189
  break;
183
190
  }
184
191
  }
192
+ if (!closed) throw new SyntaxError('Unterminated array at: ' + i);
185
193
  return this.node(OBJECT, array, this.index, i, nodes);
186
194
  },
187
195
  string: function () {
@@ -197,7 +205,11 @@ Context.prototype = {
197
205
  if (at(source, i) === '0') i++;
198
206
  else if (exec(IS_NON_ZERO_DIGIT, at(source, i))) i = this.skip(IS_DIGIT, i + 1);
199
207
  else throw new SyntaxError('Failed to parse number at: ' + i);
200
- if (at(source, i) === '.') i = this.skip(IS_DIGIT, i + 1);
208
+ if (at(source, i) === '.') {
209
+ var fractionStartIndex = i + 1;
210
+ i = this.skip(IS_DIGIT, fractionStartIndex);
211
+ if (fractionStartIndex === i) throw new SyntaxError("Failed to parse number's fraction at: " + i);
212
+ }
201
213
  if (at(source, i) === 'e' || at(source, i) === 'E') {
202
214
  i++;
203
215
  if (at(source, i) === '+' || at(source, i) === '-') i++;