core-js 3.23.5 → 3.25.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 (158) hide show
  1. package/README.md +1 -1
  2. package/actual/object/proto.js +3 -0
  3. package/actual/typed-array/index.js +1 -0
  4. package/actual/typed-array/methods.js +1 -0
  5. package/actual/typed-array/to-spliced.js +1 -0
  6. package/es/index.js +1 -0
  7. package/es/object/index.js +1 -0
  8. package/es/object/proto.js +1 -0
  9. package/features/async-iterator/indexed.js +1 -0
  10. package/features/iterator/indexed.js +1 -0
  11. package/features/object/proto.js +1 -0
  12. package/full/async-iterator/index.js +2 -0
  13. package/full/async-iterator/indexed.js +8 -0
  14. package/full/index.js +3 -0
  15. package/full/iterator/index.js +2 -0
  16. package/full/iterator/indexed.js +8 -0
  17. package/full/object/proto.js +3 -0
  18. package/full/typed-array/to-spliced.js +1 -0
  19. package/internals/{array-buffer-native.js → array-buffer-basic-detection.js} +0 -0
  20. package/internals/array-buffer-view-core.js +1 -1
  21. package/internals/array-buffer.js +3 -3
  22. package/internals/array-set-length.js +27 -0
  23. package/internals/array-unique-by.js +2 -1
  24. package/internals/async-from-sync-iterator.js +7 -19
  25. package/internals/async-iterator-close.js +18 -0
  26. package/internals/async-iterator-create-proxy.js +103 -44
  27. package/internals/async-iterator-indexed.js +28 -0
  28. package/internals/async-iterator-iteration.js +30 -39
  29. package/internals/async-iterator-wrap.js +6 -0
  30. package/internals/collection-from.js +2 -1
  31. package/internals/collection-strong.js +3 -2
  32. package/internals/collection-weak.js +3 -2
  33. package/internals/collection.js +2 -1
  34. package/internals/date-to-iso-string.js +7 -6
  35. package/internals/engine-is-browser.js +6 -1
  36. package/internals/{clear-error-stack.js → error-stack-clear.js} +0 -0
  37. package/internals/get-iterator-method.js +2 -1
  38. package/internals/get-method.js +2 -1
  39. package/internals/internal-state.js +3 -3
  40. package/internals/is-iterable.js +2 -0
  41. package/internals/is-null-or-undefined.js +5 -0
  42. package/internals/is-object.js +8 -1
  43. package/internals/{create-iterator-constructor.js → iterator-create-constructor.js} +0 -0
  44. package/internals/iterator-create-proxy.js +56 -32
  45. package/internals/{define-iterator.js → iterator-define.js} +1 -1
  46. package/internals/iterator-indexed.js +18 -0
  47. package/internals/iterators-core.js +2 -1
  48. package/internals/new-promise-capability.js +3 -1
  49. package/internals/not-a-nan.js +7 -0
  50. package/internals/number-parse-float.js +5 -5
  51. package/internals/numeric-range-iterator.js +8 -7
  52. package/internals/object-iterator.js +1 -1
  53. package/internals/promise-constructor-detection.js +12 -11
  54. package/internals/require-object-coercible.js +3 -1
  55. package/internals/shared.js +2 -2
  56. package/internals/species-constructor.js +2 -1
  57. package/internals/{native-symbol.js → symbol-constructor-detection.js} +0 -0
  58. package/internals/{native-symbol-registry.js → symbol-registry-detection.js} +1 -1
  59. package/internals/{native-url.js → url-constructor-detection.js} +0 -0
  60. package/internals/use-symbol-as-uid.js +1 -1
  61. package/internals/weak-map-basic-detection.js +6 -0
  62. package/internals/{define-well-known-symbol.js → well-known-symbol-define.js} +0 -0
  63. package/internals/well-known-symbol.js +1 -1
  64. package/internals/wrap-error-constructor-with-cause.js +1 -1
  65. package/modules/es.aggregate-error.cause.js +1 -0
  66. package/modules/es.aggregate-error.constructor.js +2 -2
  67. package/modules/es.array-buffer.slice.js +3 -3
  68. package/modules/es.array.index-of.js +5 -5
  69. package/modules/es.array.iterator.js +1 -1
  70. package/modules/es.array.join.js +2 -2
  71. package/modules/es.array.push.js +2 -1
  72. package/modules/es.array.reverse.js +2 -2
  73. package/modules/es.array.slice.js +2 -2
  74. package/modules/es.array.sort.js +3 -3
  75. package/modules/es.array.splice.js +2 -1
  76. package/modules/es.array.unshift.js +2 -1
  77. package/modules/es.data-view.constructor.js +1 -1
  78. package/modules/es.date.now.js +2 -2
  79. package/modules/es.date.set-year.js +2 -2
  80. package/modules/es.date.to-string.js +4 -4
  81. package/modules/es.json.stringify.js +1 -1
  82. package/modules/es.number.to-exponential.js +11 -11
  83. package/modules/es.number.to-fixed.js +6 -6
  84. package/modules/es.number.to-precision.js +5 -5
  85. package/modules/es.object.get-own-property-symbols.js +1 -1
  86. package/modules/es.object.proto.js +29 -0
  87. package/modules/es.regexp.test.js +12 -12
  88. package/modules/es.regexp.to-string.js +3 -3
  89. package/modules/es.string.ends-with.js +3 -3
  90. package/modules/es.string.iterator.js +1 -1
  91. package/modules/es.string.match-all.js +8 -7
  92. package/modules/es.string.match.js +2 -1
  93. package/modules/es.string.replace-all.js +2 -1
  94. package/modules/es.string.replace.js +2 -1
  95. package/modules/es.string.search.js +2 -1
  96. package/modules/es.string.split.js +3 -2
  97. package/modules/es.string.starts-with.js +3 -3
  98. package/modules/es.symbol.async-iterator.js +1 -1
  99. package/modules/es.symbol.constructor.js +2 -2
  100. package/modules/es.symbol.description.js +4 -4
  101. package/modules/es.symbol.for.js +1 -1
  102. package/modules/es.symbol.has-instance.js +1 -1
  103. package/modules/es.symbol.is-concat-spreadable.js +1 -1
  104. package/modules/es.symbol.iterator.js +1 -1
  105. package/modules/es.symbol.key-for.js +1 -1
  106. package/modules/es.symbol.match-all.js +1 -1
  107. package/modules/es.symbol.match.js +1 -1
  108. package/modules/es.symbol.replace.js +1 -1
  109. package/modules/es.symbol.search.js +1 -1
  110. package/modules/es.symbol.species.js +1 -1
  111. package/modules/es.symbol.split.js +1 -1
  112. package/modules/es.symbol.to-primitive.js +1 -1
  113. package/modules/es.symbol.to-string-tag.js +1 -1
  114. package/modules/es.symbol.unscopables.js +1 -1
  115. package/modules/es.typed-array.sort.js +7 -7
  116. package/modules/es.weak-map.constructor.js +1 -1
  117. package/modules/esnext.array.is-template-object.js +1 -1
  118. package/modules/esnext.async-iterator.as-indexed-pairs.js +4 -24
  119. package/modules/esnext.async-iterator.drop.js +15 -11
  120. package/modules/esnext.async-iterator.filter.js +23 -10
  121. package/modules/esnext.async-iterator.flat-map.js +30 -16
  122. package/modules/esnext.async-iterator.from.js +3 -9
  123. package/modules/esnext.async-iterator.indexed.js +7 -0
  124. package/modules/esnext.async-iterator.map.js +28 -9
  125. package/modules/esnext.async-iterator.reduce.js +9 -4
  126. package/modules/esnext.async-iterator.take.js +23 -12
  127. package/modules/esnext.iterator.as-indexed-pairs.js +4 -17
  128. package/modules/esnext.iterator.drop.js +4 -4
  129. package/modules/esnext.iterator.filter.js +3 -3
  130. package/modules/esnext.iterator.flat-map.js +9 -11
  131. package/modules/esnext.iterator.from.js +3 -6
  132. package/modules/esnext.iterator.indexed.js +7 -0
  133. package/modules/esnext.iterator.map.js +3 -3
  134. package/modules/esnext.iterator.take.js +5 -4
  135. package/modules/esnext.iterator.to-async.js +3 -1
  136. package/modules/esnext.math.seeded-prng.js +1 -1
  137. package/modules/esnext.observable.constructor.js +4 -3
  138. package/modules/esnext.string.code-points.js +1 -1
  139. package/modules/esnext.symbol.async-dispose.js +1 -1
  140. package/modules/esnext.symbol.dispose.js +1 -1
  141. package/modules/esnext.symbol.matcher.js +1 -1
  142. package/modules/esnext.symbol.metadata-key.js +1 -1
  143. package/modules/esnext.symbol.metadata.js +1 -1
  144. package/modules/esnext.symbol.observable.js +1 -1
  145. package/modules/esnext.symbol.pattern-match.js +1 -1
  146. package/modules/esnext.symbol.replace-all.js +1 -1
  147. package/modules/esnext.typed-array.to-spliced.js +1 -0
  148. package/modules/web.dom-exception.constructor.js +1 -1
  149. package/modules/web.dom-exception.stack.js +1 -1
  150. package/modules/web.structured-clone.js +26 -14
  151. package/modules/web.url-search-params.constructor.js +2 -2
  152. package/modules/web.url.constructor.js +1 -1
  153. package/package.json +1 -1
  154. package/proposals/change-array-by-copy.js +1 -0
  155. package/proposals/iterator-helpers.js +4 -0
  156. package/stable/index.js +1 -0
  157. package/stable/object/proto.js +3 -0
  158. package/internals/native-weak-map.js +0 -7
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Open Collective](https://opencollective.com/core-js/all/badge.svg?label=open%20collective)](https://opencollective.com/core-js) [![version](https://img.shields.io/npm/v/core-js.svg)](https://www.npmjs.com/package/core-js) [![core-js downloads](https://img.shields.io/npm/dm/core-js.svg?label=npm%20i%20core-js)](https://npm-stat.com/charts.html?package=core-js&package=core-js-pure&package=core-js-compat&from=2014-11-18) [![core-js-pure downloads](https://img.shields.io/npm/dm/core-js-pure.svg?label=npm%20i%20core-js-pure)](https://npm-stat.com/charts.html?package=core-js&package=core-js-pure&package=core-js-compat&from=2014-11-18) [![tests](https://github.com/zloirock/core-js/workflows/tests/badge.svg)](https://github.com/zloirock/core-js/actions) [![eslint](https://github.com/zloirock/core-js/workflows/eslint/badge.svg)](https://github.com/zloirock/core-js/actions)
4
4
 
5
- > Modular standard library for JavaScript. Includes polyfills for [ECMAScript up to 2021](https://github.com/zloirock/core-js#ecmascript): [promises](https://github.com/zloirock/core-js#ecmascript-promise), [symbols](https://github.com/zloirock/core-js#ecmascript-symbol), [collections](https://github.com/zloirock/core-js#ecmascript-collections), iterators, [typed arrays](https://github.com/zloirock/core-js#ecmascript-typed-arrays), many other features, [ECMAScript proposals](https://github.com/zloirock/core-js#ecmascript-proposals), [some cross-platform WHATWG / W3C features and proposals](#web-standards) like [`URL`](https://github.com/zloirock/core-js#url-and-urlsearchparams). You can load only required features or use it without global namespace pollution.
5
+ > Modular standard library for JavaScript. Includes polyfills for [ECMAScript up to 2023](https://github.com/zloirock/core-js#ecmascript): [promises](https://github.com/zloirock/core-js#ecmascript-promise), [symbols](https://github.com/zloirock/core-js#ecmascript-symbol), [collections](https://github.com/zloirock/core-js#ecmascript-collections), iterators, [typed arrays](https://github.com/zloirock/core-js#ecmascript-typed-arrays), many other features, [ECMAScript proposals](https://github.com/zloirock/core-js#ecmascript-proposals), [some cross-platform WHATWG / W3C features and proposals](#web-standards) like [`URL`](https://github.com/zloirock/core-js#url-and-urlsearchparams). You can load only required features or use it without global namespace pollution.
6
6
 
7
7
  ## As advertising: the author is looking for a good job -)
8
8
 
@@ -0,0 +1,3 @@
1
+ var parent = require('../../stable/object/proto');
2
+
3
+ module.exports = parent;
@@ -3,6 +3,7 @@ require('../../modules/esnext.typed-array.find-last');
3
3
  require('../../modules/esnext.typed-array.find-last-index');
4
4
  require('../../modules/esnext.typed-array.to-reversed');
5
5
  require('../../modules/esnext.typed-array.to-sorted');
6
+ // TODO: Remove from `core-js@4`
6
7
  require('../../modules/esnext.typed-array.to-spliced');
7
8
  require('../../modules/esnext.typed-array.with');
8
9
 
@@ -3,6 +3,7 @@ require('../../modules/esnext.typed-array.find-last');
3
3
  require('../../modules/esnext.typed-array.find-last-index');
4
4
  require('../../modules/esnext.typed-array.to-reversed');
5
5
  require('../../modules/esnext.typed-array.to-sorted');
6
+ // TODO: Remove from `core-js@4`
6
7
  require('../../modules/esnext.typed-array.to-spliced');
7
8
  require('../../modules/esnext.typed-array.with');
8
9
 
@@ -1 +1,2 @@
1
+ // TODO: Remove from `core-js@4`
1
2
  require('../../modules/esnext.typed-array.to-spliced');
package/es/index.js CHANGED
@@ -124,6 +124,7 @@ require('../modules/es.object.keys');
124
124
  require('../modules/es.object.lookup-getter');
125
125
  require('../modules/es.object.lookup-setter');
126
126
  require('../modules/es.object.prevent-extensions');
127
+ require('../modules/es.object.proto');
127
128
  require('../modules/es.object.seal');
128
129
  require('../modules/es.object.set-prototype-of');
129
130
  require('../modules/es.object.to-string');
@@ -17,6 +17,7 @@ require('../../modules/es.object.is-frozen');
17
17
  require('../../modules/es.object.is-sealed');
18
18
  require('../../modules/es.object.keys');
19
19
  require('../../modules/es.object.prevent-extensions');
20
+ require('../../modules/es.object.proto');
20
21
  require('../../modules/es.object.seal');
21
22
  require('../../modules/es.object.set-prototype-of');
22
23
  require('../../modules/es.object.values');
@@ -0,0 +1 @@
1
+ require('../../modules/es.object.proto');
@@ -0,0 +1 @@
1
+ module.exports = require('../../full/async-iterator/indexed');
@@ -0,0 +1 @@
1
+ module.exports = require('../../full/iterator/indexed');
@@ -0,0 +1 @@
1
+ module.exports = require('../../full/object/proto');
@@ -3,6 +3,7 @@ require('../../modules/es.object.to-string');
3
3
  require('../../modules/es.promise');
4
4
  require('../../modules/es.string.iterator');
5
5
  require('../../modules/esnext.async-iterator.constructor');
6
+ // TODO: Remove from `core-js@4`
6
7
  require('../../modules/esnext.async-iterator.as-indexed-pairs');
7
8
  require('../../modules/esnext.async-iterator.drop');
8
9
  require('../../modules/esnext.async-iterator.every');
@@ -11,6 +12,7 @@ require('../../modules/esnext.async-iterator.find');
11
12
  require('../../modules/esnext.async-iterator.flat-map');
12
13
  require('../../modules/esnext.async-iterator.for-each');
13
14
  require('../../modules/esnext.async-iterator.from');
15
+ require('../../modules/esnext.async-iterator.indexed');
14
16
  require('../../modules/esnext.async-iterator.map');
15
17
  require('../../modules/esnext.async-iterator.reduce');
16
18
  require('../../modules/esnext.async-iterator.some');
@@ -0,0 +1,8 @@
1
+ require('../../modules/es.object.to-string');
2
+ require('../../modules/es.promise');
3
+ require('../../modules/esnext.async-iterator.constructor');
4
+ require('../../modules/esnext.async-iterator.indexed');
5
+
6
+ var entryUnbind = require('../../internals/entry-unbind');
7
+
8
+ module.exports = entryUnbind('AsyncIterator', 'indexed');
package/full/index.js CHANGED
@@ -124,6 +124,7 @@ require('../modules/es.object.keys');
124
124
  require('../modules/es.object.lookup-getter');
125
125
  require('../modules/es.object.lookup-setter');
126
126
  require('../modules/es.object.prevent-extensions');
127
+ require('../modules/es.object.proto');
127
128
  require('../modules/es.object.seal');
128
129
  require('../modules/es.object.set-prototype-of');
129
130
  require('../modules/es.object.to-string');
@@ -258,6 +259,7 @@ require('../modules/esnext.async-iterator.find');
258
259
  require('../modules/esnext.async-iterator.flat-map');
259
260
  require('../modules/esnext.async-iterator.for-each');
260
261
  require('../modules/esnext.async-iterator.from');
262
+ require('../modules/esnext.async-iterator.indexed');
261
263
  require('../modules/esnext.async-iterator.map');
262
264
  require('../modules/esnext.async-iterator.reduce');
263
265
  require('../modules/esnext.async-iterator.some');
@@ -279,6 +281,7 @@ require('../modules/esnext.iterator.find');
279
281
  require('../modules/esnext.iterator.flat-map');
280
282
  require('../modules/esnext.iterator.for-each');
281
283
  require('../modules/esnext.iterator.from');
284
+ require('../modules/esnext.iterator.indexed');
282
285
  require('../modules/esnext.iterator.map');
283
286
  require('../modules/esnext.iterator.reduce');
284
287
  require('../modules/esnext.iterator.some');
@@ -3,6 +3,7 @@ require('../../modules/es.object.to-string');
3
3
  require('../../modules/es.promise');
4
4
  require('../../modules/es.string.iterator');
5
5
  require('../../modules/esnext.iterator.constructor');
6
+ // TODO: Remove from `core-js@4`
6
7
  require('../../modules/esnext.iterator.as-indexed-pairs');
7
8
  require('../../modules/esnext.iterator.drop');
8
9
  require('../../modules/esnext.iterator.every');
@@ -11,6 +12,7 @@ require('../../modules/esnext.iterator.find');
11
12
  require('../../modules/esnext.iterator.flat-map');
12
13
  require('../../modules/esnext.iterator.for-each');
13
14
  require('../../modules/esnext.iterator.from');
15
+ require('../../modules/esnext.iterator.indexed');
14
16
  require('../../modules/esnext.iterator.map');
15
17
  require('../../modules/esnext.iterator.reduce');
16
18
  require('../../modules/esnext.iterator.some');
@@ -0,0 +1,8 @@
1
+ require('../../modules/es.object.to-string');
2
+ require('../../modules/esnext.iterator.constructor');
3
+ require('../../modules/esnext.iterator.indexed');
4
+
5
+ var entryUnbind = require('../../internals/entry-unbind');
6
+
7
+ module.exports = entryUnbind('Iterator', 'indexed');
8
+
@@ -0,0 +1,3 @@
1
+ var parent = require('../../actual/object/proto');
2
+
3
+ module.exports = parent;
@@ -1,3 +1,4 @@
1
+ // TODO: Remove from `core-js@4`
1
2
  var parent = require('../../actual/typed-array/to-spliced');
2
3
 
3
4
  module.exports = parent;
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
- var NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');
2
+ var NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection');
3
3
  var DESCRIPTORS = require('../internals/descriptors');
4
4
  var global = require('../internals/global');
5
5
  var isCallable = require('../internals/is-callable');
@@ -2,7 +2,7 @@
2
2
  var global = require('../internals/global');
3
3
  var uncurryThis = require('../internals/function-uncurry-this');
4
4
  var DESCRIPTORS = require('../internals/descriptors');
5
- var NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');
5
+ var NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection');
6
6
  var FunctionName = require('../internals/function-name');
7
7
  var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
8
8
  var defineBuiltIns = require('../internals/define-built-ins');
@@ -197,9 +197,9 @@ if (!NATIVE_ARRAY_BUFFER) {
197
197
  new NativeArrayBuffer();
198
198
  new NativeArrayBuffer(1.5);
199
199
  new NativeArrayBuffer(NaN);
200
- return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;
200
+ return NativeArrayBuffer.length != 1 || INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;
201
201
  })) {
202
- /* eslint-enable no-new -- required for testing */
202
+ /* eslint-enable no-new -- required for testing */
203
203
  $ArrayBuffer = function ArrayBuffer(length) {
204
204
  anInstance(this, ArrayBufferPrototype);
205
205
  return new NativeArrayBuffer(toIndex(length));
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+ var DESCRIPTORS = require('../internals/descriptors');
3
+ var isArray = require('../internals/is-array');
4
+
5
+ var $TypeError = TypeError;
6
+ // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
7
+ var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
8
+
9
+ // Safari < 13 does not throw an error in this case
10
+ var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {
11
+ // makes no sense without proper strict mode support
12
+ if (this !== undefined) return true;
13
+ try {
14
+ // eslint-disable-next-line es-x/no-object-defineproperty -- safe
15
+ Object.defineProperty([], 'length', { writable: false }).length = 1;
16
+ } catch (error) {
17
+ return error instanceof TypeError;
18
+ }
19
+ }();
20
+
21
+ module.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {
22
+ if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {
23
+ throw $TypeError('Cannot set read only .length');
24
+ } return O.length = length;
25
+ } : function (O, length) {
26
+ return O.length = length;
27
+ };
@@ -2,6 +2,7 @@
2
2
  var getBuiltIn = require('../internals/get-built-in');
3
3
  var uncurryThis = require('../internals/function-uncurry-this');
4
4
  var aCallable = require('../internals/a-callable');
5
+ var isNullOrUndefined = require('../internals/is-null-or-undefined');
5
6
  var lengthOfArrayLike = require('../internals/length-of-array-like');
6
7
  var toObject = require('../internals/to-object');
7
8
  var arraySpeciesCreate = require('../internals/array-species-create');
@@ -20,7 +21,7 @@ module.exports = function uniqueBy(resolver) {
20
21
  var length = lengthOfArrayLike(that);
21
22
  var result = arraySpeciesCreate(that, 0);
22
23
  var map = new Map();
23
- var resolverFunction = resolver != null ? aCallable(resolver) : function (value) {
24
+ var resolverFunction = !isNullOrUndefined(resolver) ? aCallable(resolver) : function (value) {
24
25
  return value;
25
26
  };
26
27
  var index, item, key;
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
- var apply = require('../internals/function-apply');
2
+ var call = require('../internals/function-call');
3
3
  var anObject = require('../internals/an-object');
4
4
  var create = require('../internals/object-create');
5
5
  var getMethod = require('../internals/get-method');
@@ -17,7 +17,7 @@ var getInternalState = InternalStateModule.getterFor(ASYNC_FROM_SYNC_ITERATOR);
17
17
  var asyncFromSyncIteratorContinuation = function (result, resolve, reject) {
18
18
  var done = result.done;
19
19
  Promise.resolve(result.value).then(function (value) {
20
- resolve({ done: done, value: value });
20
+ resolve({ value: value, done: done });
21
21
  }, reject);
22
22
  };
23
23
 
@@ -30,31 +30,19 @@ var AsyncFromSyncIterator = function AsyncIterator(iterator) {
30
30
  };
31
31
 
32
32
  AsyncFromSyncIterator.prototype = defineBuiltIns(create(AsyncIteratorPrototype), {
33
- next: function next(arg) {
33
+ next: function next() {
34
34
  var state = getInternalState(this);
35
- var hasArg = !!arguments.length;
36
35
  return new Promise(function (resolve, reject) {
37
- var result = anObject(apply(state.next, state.iterator, hasArg ? [arg] : []));
36
+ var result = anObject(call(state.next, state.iterator));
38
37
  asyncFromSyncIteratorContinuation(result, resolve, reject);
39
38
  });
40
39
  },
41
- 'return': function (arg) {
40
+ 'return': function () {
42
41
  var iterator = getInternalState(this).iterator;
43
- var hasArg = !!arguments.length;
44
42
  return new Promise(function (resolve, reject) {
45
43
  var $return = getMethod(iterator, 'return');
46
- if ($return === undefined) return resolve({ done: true, value: arg });
47
- var result = anObject(apply($return, iterator, hasArg ? [arg] : []));
48
- asyncFromSyncIteratorContinuation(result, resolve, reject);
49
- });
50
- },
51
- 'throw': function (arg) {
52
- var iterator = getInternalState(this).iterator;
53
- var hasArg = !!arguments.length;
54
- return new Promise(function (resolve, reject) {
55
- var $throw = getMethod(iterator, 'throw');
56
- if ($throw === undefined) return reject(arg);
57
- var result = anObject(apply($throw, iterator, hasArg ? [arg] : []));
44
+ if ($return === undefined) return resolve({ value: undefined, done: true });
45
+ var result = anObject(call($return, iterator));
58
46
  asyncFromSyncIteratorContinuation(result, resolve, reject);
59
47
  });
60
48
  }
@@ -0,0 +1,18 @@
1
+ var call = require('../internals/function-call');
2
+ var getBuiltIn = require('../internals/get-built-in');
3
+ var getMethod = require('../internals/get-method');
4
+
5
+ module.exports = function (iterator, method, argument, reject) {
6
+ try {
7
+ var returnMethod = getMethod(iterator, 'return');
8
+ if (returnMethod) {
9
+ return getBuiltIn('Promise').resolve(call(returnMethod, iterator)).then(function () {
10
+ method(argument);
11
+ }, function (error) {
12
+ reject(error);
13
+ });
14
+ }
15
+ } catch (error2) {
16
+ return reject(error2);
17
+ } method(argument);
18
+ };
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
  var call = require('../internals/function-call');
3
+ var perform = require('../internals/perform');
3
4
  var anObject = require('../internals/an-object');
4
5
  var create = require('../internals/object-create');
5
6
  var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
@@ -9,68 +10,126 @@ var InternalStateModule = require('../internals/internal-state');
9
10
  var getBuiltIn = require('../internals/get-built-in');
10
11
  var getMethod = require('../internals/get-method');
11
12
  var AsyncIteratorPrototype = require('../internals/async-iterator-prototype');
13
+ var iteratorClose = require('../internals/iterator-close');
12
14
 
13
15
  var Promise = getBuiltIn('Promise');
14
16
 
15
- var ASYNC_ITERATOR_PROXY = 'AsyncIteratorProxy';
17
+ var ASYNC_ITERATOR_HELPER = 'AsyncIteratorHelper';
18
+ var WRAP_FOR_VALID_ASYNC_ITERATOR = 'WrapForValidAsyncIterator';
16
19
  var setInternalState = InternalStateModule.set;
17
- var getInternalState = InternalStateModule.getterFor(ASYNC_ITERATOR_PROXY);
18
20
 
19
21
  var TO_STRING_TAG = wellKnownSymbol('toStringTag');
20
22
 
21
- module.exports = function (nextHandler, IS_ITERATOR) {
22
- var AsyncIteratorProxy = function AsyncIterator(record, state) {
23
- if (state) {
24
- state.iterator = record.iterator;
25
- state.next = record.next;
26
- } else state = record;
27
- state.type = ASYNC_ITERATOR_PROXY;
28
- state.done = false;
29
- state.ignoreArgument = !IS_ITERATOR;
30
- setInternalState(this, state);
23
+ var createAsyncIteratorProxyPrototype = function (IS_ITERATOR) {
24
+ var IS_GENERATOR = !IS_ITERATOR;
25
+ var ASYNC_ITERATOR_PROXY = IS_ITERATOR ? WRAP_FOR_VALID_ASYNC_ITERATOR : ASYNC_ITERATOR_HELPER;
26
+
27
+ var getInternalState = InternalStateModule.getterFor(ASYNC_ITERATOR_PROXY);
28
+
29
+ var getStateOrEarlyExit = function (that) {
30
+ var stateCompletion = perform(function () {
31
+ return getInternalState(that);
32
+ });
33
+
34
+ var stateError = stateCompletion.error;
35
+ var state = stateCompletion.value;
36
+
37
+ if (stateError || (IS_GENERATOR && state.done)) {
38
+ return { exit: true, value: stateError ? Promise.reject(state) : Promise.resolve({ value: undefined, done: true }) };
39
+ } return { exit: false, value: state };
31
40
  };
32
41
 
33
- AsyncIteratorProxy.prototype = defineBuiltIns(create(AsyncIteratorPrototype), {
34
- next: function next(arg) {
35
- var that = this;
36
- var hasArgument = !!arguments.length;
37
- return new Promise(function (resolve) {
38
- var state = getInternalState(that);
39
- var args = hasArgument ? [state.ignoreArgument ? undefined : arg] : IS_ITERATOR ? [] : [undefined];
40
- state.ignoreArgument = false;
41
- resolve(state.done ? { done: true, value: undefined } : anObject(call(nextHandler, state, Promise, args)));
42
+ var enqueue = function (state, handler) {
43
+ var task = function () {
44
+ var promise = handler();
45
+ if (IS_GENERATOR) {
46
+ state.awaiting = promise;
47
+ var clean = function () {
48
+ if (state.awaiting === promise) state.awaiting = null;
49
+ };
50
+ promise.then(clean, clean);
51
+ } return promise;
52
+ };
53
+
54
+ return state.awaiting ? state.awaiting = state.awaiting.then(task, task) : task();
55
+ };
56
+
57
+ var AsyncIteratorProxyPrototype = defineBuiltIns(create(AsyncIteratorPrototype), {
58
+ next: function next() {
59
+ var stateCompletion = getStateOrEarlyExit(this);
60
+ var exit = stateCompletion.exit;
61
+ var state = stateCompletion.value;
62
+
63
+ return exit ? state : enqueue(state, function () {
64
+ var handlerCompletion = perform(function () {
65
+ return anObject(state.nextHandler(Promise));
66
+ });
67
+ var handlerError = handlerCompletion.error;
68
+ var value = handlerCompletion.value;
69
+ if (handlerError) state.done = true;
70
+ return handlerError ? Promise.reject(value) : Promise.resolve(value);
42
71
  });
43
72
  },
44
- 'return': function (value) {
45
- var that = this;
46
- return new Promise(function (resolve, reject) {
47
- var state = getInternalState(that);
48
- var iterator = state.iterator;
73
+ 'return': function () {
74
+ var stateCompletion = getStateOrEarlyExit(this);
75
+ var exit = stateCompletion.exit;
76
+ var state = stateCompletion.value;
77
+
78
+ return exit ? state : enqueue(state, function () {
49
79
  state.done = true;
50
- var $$return = getMethod(iterator, 'return');
51
- if ($$return === undefined) return resolve({ done: true, value: value });
52
- Promise.resolve(call($$return, iterator, value)).then(function (result) {
53
- anObject(result);
54
- resolve({ done: true, value: value });
55
- }, reject);
56
- });
57
- },
58
- 'throw': function (value) {
59
- var that = this;
60
- return new Promise(function (resolve, reject) {
61
- var state = getInternalState(that);
62
80
  var iterator = state.iterator;
63
- state.done = true;
64
- var $$throw = getMethod(iterator, 'throw');
65
- if ($$throw === undefined) return reject(value);
66
- resolve(call($$throw, iterator, value));
81
+ var innerIterator = state.innerIterator;
82
+ var returnMethod, result;
83
+ var completion = perform(function () {
84
+ if (innerIterator) try {
85
+ iteratorClose(innerIterator, 'return');
86
+ } catch (error) {
87
+ return iteratorClose(iterator, 'throw', error);
88
+ }
89
+ return getMethod(iterator, 'return');
90
+ });
91
+ returnMethod = result = completion.value;
92
+ if (completion.error) return Promise.reject(result);
93
+ if (returnMethod === undefined) return Promise.resolve({ value: undefined, done: true });
94
+ completion = perform(function () {
95
+ return call(returnMethod, iterator);
96
+ });
97
+ result = completion.value;
98
+ if (completion.error) return Promise.reject(result);
99
+ return IS_ITERATOR ? Promise.resolve(result) : Promise.resolve(result).then(function (resolved) {
100
+ anObject(resolved);
101
+ return { value: undefined, done: true };
102
+ });
67
103
  });
68
104
  }
69
105
  });
70
106
 
71
- if (!IS_ITERATOR) {
72
- createNonEnumerableProperty(AsyncIteratorProxy.prototype, TO_STRING_TAG, 'Generator');
107
+ if (IS_GENERATOR) {
108
+ createNonEnumerableProperty(AsyncIteratorProxyPrototype, TO_STRING_TAG, 'Async Iterator Helper');
73
109
  }
74
110
 
111
+ return AsyncIteratorProxyPrototype;
112
+ };
113
+
114
+ var AsyncIteratorHelperPrototype = createAsyncIteratorProxyPrototype(false);
115
+ var WrapForValidAsyncIteratorPrototype = createAsyncIteratorProxyPrototype(true);
116
+
117
+ module.exports = function (nextHandler, IS_ITERATOR) {
118
+ var ASYNC_ITERATOR_PROXY = IS_ITERATOR ? WRAP_FOR_VALID_ASYNC_ITERATOR : ASYNC_ITERATOR_HELPER;
119
+
120
+ var AsyncIteratorProxy = function AsyncIterator(record, state) {
121
+ if (state) {
122
+ state.iterator = record.iterator;
123
+ state.next = record.next;
124
+ } else state = record;
125
+ state.type = ASYNC_ITERATOR_PROXY;
126
+ state.nextHandler = nextHandler;
127
+ state.done = false;
128
+ state.awaiting = null;
129
+ setInternalState(this, state);
130
+ };
131
+
132
+ AsyncIteratorProxy.prototype = IS_ITERATOR ? WrapForValidAsyncIteratorPrototype : AsyncIteratorHelperPrototype;
133
+
75
134
  return AsyncIteratorProxy;
76
135
  };
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+ // https://github.com/tc39/proposal-iterator-helpers
3
+ var call = require('../internals/function-call');
4
+ var anObject = require('../internals/an-object');
5
+ var getIteratorDirect = require('../internals/get-iterator-direct');
6
+ var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');
7
+
8
+ var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise) {
9
+ var state = this;
10
+ var iterator = state.iterator;
11
+
12
+ return Promise.resolve(anObject(call(state.next, iterator))).then(function (step) {
13
+ if (anObject(step).done) {
14
+ state.done = true;
15
+ return { value: undefined, done: true };
16
+ }
17
+ return { value: [state.index++, step.value], done: false };
18
+ }).then(null, function (error) {
19
+ state.done = true;
20
+ throw error;
21
+ });
22
+ });
23
+
24
+ module.exports = function indexed() {
25
+ return new AsyncIteratorProxy(getIteratorDirect(this), {
26
+ index: 0
27
+ });
28
+ };
@@ -7,7 +7,7 @@ var anObject = require('../internals/an-object');
7
7
  var doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');
8
8
  var getBuiltIn = require('../internals/get-built-in');
9
9
  var getIteratorDirect = require('../internals/get-iterator-direct');
10
- var getMethod = require('../internals/get-method');
10
+ var closeAsyncIteration = require('../internals/async-iterator-close');
11
11
 
12
12
  var createMethod = function (TYPE) {
13
13
  var IS_TO_ARRAY = TYPE == 0;
@@ -24,28 +24,15 @@ var createMethod = function (TYPE) {
24
24
  if (MAPPING || !IS_TO_ARRAY) aCallable(fn);
25
25
 
26
26
  return new Promise(function (resolve, reject) {
27
- var closeIteration = function (method, argument) {
28
- try {
29
- var returnMethod = getMethod(iterator, 'return');
30
- if (returnMethod) {
31
- return Promise.resolve(call(returnMethod, iterator)).then(function () {
32
- method(argument);
33
- }, function (error) {
34
- reject(error);
35
- });
36
- }
37
- } catch (error2) {
38
- return reject(error2);
39
- } method(argument);
40
- };
41
-
42
- var onError = function (error) {
43
- closeIteration(reject, error);
27
+ var ifAbruptCloseAsyncIterator = function (error) {
28
+ closeAsyncIteration(iterator, reject, error, reject);
44
29
  };
45
30
 
46
31
  var loop = function () {
47
32
  try {
48
- if (IS_TO_ARRAY && MAPPING) doesNotExceedSafeInteger(index);
33
+ if (IS_TO_ARRAY && MAPPING) try {
34
+ doesNotExceedSafeInteger(index);
35
+ } catch (error5) { ifAbruptCloseAsyncIterator(error5); }
49
36
  Promise.resolve(anObject(call(next, iterator))).then(function (step) {
50
37
  try {
51
38
  if (anObject(step).done) {
@@ -55,27 +42,31 @@ var createMethod = function (TYPE) {
55
42
  } else resolve(IS_SOME ? false : IS_EVERY || undefined);
56
43
  } else {
57
44
  var value = step.value;
58
- if (MAPPING) {
59
- Promise.resolve(IS_TO_ARRAY ? fn(value, index) : fn(value)).then(function (result) {
60
- if (IS_FOR_EACH) {
61
- loop();
62
- } else if (IS_EVERY) {
63
- result ? loop() : closeIteration(resolve, false);
64
- } else if (IS_TO_ARRAY) {
65
- target[index++] = result;
66
- loop();
67
- } else {
68
- result ? closeIteration(resolve, IS_SOME || value) : loop();
69
- }
70
- }, onError);
71
- } else {
72
- target[index++] = value;
73
- loop();
74
- }
45
+ try {
46
+ if (MAPPING) {
47
+ Promise.resolve(IS_TO_ARRAY ? fn(value, index) : fn(value)).then(function (result) {
48
+ if (IS_FOR_EACH) {
49
+ loop();
50
+ } else if (IS_EVERY) {
51
+ result ? loop() : closeAsyncIteration(iterator, resolve, false, reject);
52
+ } else if (IS_TO_ARRAY) {
53
+ try {
54
+ target[index++] = result;
55
+ loop();
56
+ } catch (error4) { ifAbruptCloseAsyncIterator(error4); }
57
+ } else {
58
+ result ? closeAsyncIteration(iterator, resolve, IS_SOME || value, reject) : loop();
59
+ }
60
+ }, ifAbruptCloseAsyncIterator);
61
+ } else {
62
+ target[index++] = value;
63
+ loop();
64
+ }
65
+ } catch (error3) { ifAbruptCloseAsyncIterator(error3); }
75
66
  }
76
- } catch (error) { onError(error); }
77
- }, onError);
78
- } catch (error2) { onError(error2); }
67
+ } catch (error2) { reject(error2); }
68
+ }, reject);
69
+ } catch (error) { reject(error); }
79
70
  };
80
71
 
81
72
  loop();
@@ -0,0 +1,6 @@
1
+ var call = require('../internals/function-call');
2
+ var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');
3
+
4
+ module.exports = createAsyncIteratorProxy(function () {
5
+ return call(this.next, this.iterator);
6
+ }, true);
@@ -4,6 +4,7 @@ var bind = require('../internals/function-bind-context');
4
4
  var call = require('../internals/function-call');
5
5
  var aCallable = require('../internals/a-callable');
6
6
  var aConstructor = require('../internals/a-constructor');
7
+ var isNullOrUndefined = require('../internals/is-null-or-undefined');
7
8
  var iterate = require('../internals/iterate');
8
9
 
9
10
  var push = [].push;
@@ -15,7 +16,7 @@ module.exports = function from(source /* , mapFn, thisArg */) {
15
16
  aConstructor(this);
16
17
  mapping = mapFn !== undefined;
17
18
  if (mapping) aCallable(mapFn);
18
- if (source == undefined) return new this();
19
+ if (isNullOrUndefined(source)) return new this();
19
20
  array = [];
20
21
  if (mapping) {
21
22
  n = 0;