core-js 3.23.3 → 3.24.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 (58) hide show
  1. package/actual/typed-array/index.js +1 -0
  2. package/actual/typed-array/methods.js +1 -0
  3. package/actual/typed-array/to-spliced.js +1 -0
  4. package/features/async-iterator/indexed.js +1 -0
  5. package/features/iterator/indexed.js +1 -0
  6. package/full/async-iterator/index.js +2 -0
  7. package/full/async-iterator/indexed.js +8 -0
  8. package/full/index.js +2 -0
  9. package/full/iterator/index.js +2 -0
  10. package/full/iterator/indexed.js +8 -0
  11. package/full/typed-array/to-spliced.js +1 -0
  12. package/internals/async-from-sync-iterator.js +6 -18
  13. package/internals/async-iterator-close.js +18 -0
  14. package/internals/async-iterator-create-proxy.js +97 -44
  15. package/internals/async-iterator-indexed.js +28 -0
  16. package/internals/async-iterator-iteration.js +35 -42
  17. package/internals/async-iterator-wrap.js +6 -0
  18. package/internals/get-iterator-direct.js +9 -0
  19. package/internals/iterate.js +5 -2
  20. package/internals/iterator-create-proxy.js +51 -28
  21. package/internals/iterator-indexed.js +18 -0
  22. package/internals/map-emplace.js +11 -5
  23. package/internals/not-a-nan.js +7 -0
  24. package/internals/promise-constructor-detection.js +12 -11
  25. package/internals/regexp-exec.js +1 -1
  26. package/internals/shared.js +2 -2
  27. package/modules/es.regexp.constructor.js +1 -1
  28. package/modules/es.typed-array.reduce-right.js +1 -1
  29. package/modules/esnext.async-iterator.as-indexed-pairs.js +4 -24
  30. package/modules/esnext.async-iterator.drop.js +15 -11
  31. package/modules/esnext.async-iterator.filter.js +24 -11
  32. package/modules/esnext.async-iterator.flat-map.js +30 -16
  33. package/modules/esnext.async-iterator.from.js +4 -9
  34. package/modules/esnext.async-iterator.indexed.js +7 -0
  35. package/modules/esnext.async-iterator.map.js +30 -11
  36. package/modules/esnext.async-iterator.reduce.js +13 -6
  37. package/modules/esnext.async-iterator.take.js +24 -14
  38. package/modules/esnext.iterator.as-indexed-pairs.js +4 -17
  39. package/modules/esnext.iterator.drop.js +6 -6
  40. package/modules/esnext.iterator.every.js +4 -4
  41. package/modules/esnext.iterator.filter.js +5 -5
  42. package/modules/esnext.iterator.find.js +4 -4
  43. package/modules/esnext.iterator.flat-map.js +11 -13
  44. package/modules/esnext.iterator.for-each.js +2 -2
  45. package/modules/esnext.iterator.from.js +5 -7
  46. package/modules/esnext.iterator.indexed.js +7 -0
  47. package/modules/esnext.iterator.map.js +5 -5
  48. package/modules/esnext.iterator.reduce.js +4 -4
  49. package/modules/esnext.iterator.some.js +4 -4
  50. package/modules/esnext.iterator.take.js +7 -6
  51. package/modules/esnext.iterator.to-array.js +2 -2
  52. package/modules/esnext.iterator.to-async.js +3 -1
  53. package/modules/esnext.typed-array.to-spliced.js +1 -0
  54. package/modules/web.dom-exception.stack.js +11 -1
  55. package/modules/web.structured-clone.js +8 -4
  56. package/package.json +1 -1
  57. package/proposals/change-array-by-copy.js +1 -0
  58. package/proposals/iterator-helpers.js +4 -0
@@ -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');
@@ -0,0 +1 @@
1
+ module.exports = require('../../full/async-iterator/indexed');
@@ -0,0 +1 @@
1
+ module.exports = require('../../full/iterator/indexed');
@@ -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
@@ -258,6 +258,7 @@ require('../modules/esnext.async-iterator.find');
258
258
  require('../modules/esnext.async-iterator.flat-map');
259
259
  require('../modules/esnext.async-iterator.for-each');
260
260
  require('../modules/esnext.async-iterator.from');
261
+ require('../modules/esnext.async-iterator.indexed');
261
262
  require('../modules/esnext.async-iterator.map');
262
263
  require('../modules/esnext.async-iterator.reduce');
263
264
  require('../modules/esnext.async-iterator.some');
@@ -279,6 +280,7 @@ require('../modules/esnext.iterator.find');
279
280
  require('../modules/esnext.iterator.flat-map');
280
281
  require('../modules/esnext.iterator.for-each');
281
282
  require('../modules/esnext.iterator.from');
283
+ require('../modules/esnext.iterator.indexed');
282
284
  require('../modules/esnext.iterator.map');
283
285
  require('../modules/esnext.iterator.reduce');
284
286
  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
+
@@ -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 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');
@@ -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({ done: true, value: undefined });
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,6 +1,6 @@
1
1
  'use strict';
2
2
  var call = require('../internals/function-call');
3
- var aCallable = require('../internals/a-callable');
3
+ var perform = require('../internals/perform');
4
4
  var anObject = require('../internals/an-object');
5
5
  var create = require('../internals/object-create');
6
6
  var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
@@ -10,65 +10,118 @@ var InternalStateModule = require('../internals/internal-state');
10
10
  var getBuiltIn = require('../internals/get-built-in');
11
11
  var getMethod = require('../internals/get-method');
12
12
  var AsyncIteratorPrototype = require('../internals/async-iterator-prototype');
13
+ var iteratorClose = require('../internals/iterator-close');
13
14
 
14
15
  var Promise = getBuiltIn('Promise');
15
16
 
16
- var ASYNC_ITERATOR_PROXY = 'AsyncIteratorProxy';
17
+ var ASYNC_ITERATOR_HELPER = 'AsyncIteratorHelper';
18
+ var WRAP_FOR_VALID_ASYNC_ITERATOR = 'WrapForValidAsyncIterator';
17
19
  var setInternalState = InternalStateModule.set;
18
- var getInternalState = InternalStateModule.getterFor(ASYNC_ITERATOR_PROXY);
19
20
 
20
21
  var TO_STRING_TAG = wellKnownSymbol('toStringTag');
21
22
 
22
- module.exports = function (nextHandler, IS_ITERATOR) {
23
- var AsyncIteratorProxy = function AsyncIterator(state) {
24
- state.type = ASYNC_ITERATOR_PROXY;
25
- state.next = aCallable(state.iterator.next);
26
- state.done = false;
27
- state.ignoreArgument = !IS_ITERATOR;
28
- 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({ done: true, value: undefined }) };
39
+ } return { exit: false, value: state };
29
40
  };
30
41
 
31
- AsyncIteratorProxy.prototype = defineBuiltIns(create(AsyncIteratorPrototype), {
32
- next: function next(arg) {
33
- var that = this;
34
- var hasArgument = !!arguments.length;
35
- return new Promise(function (resolve) {
36
- var state = getInternalState(that);
37
- var args = hasArgument ? [state.ignoreArgument ? undefined : arg] : IS_ITERATOR ? [] : [undefined];
38
- state.ignoreArgument = false;
39
- resolve(state.done ? { done: true, value: undefined } : anObject(call(nextHandler, state, Promise, args)));
40
- });
41
- },
42
- 'return': function (value) {
43
- var that = this;
44
- return new Promise(function (resolve, reject) {
45
- var state = getInternalState(that);
46
- var iterator = state.iterator;
47
- state.done = true;
48
- var $$return = getMethod(iterator, 'return');
49
- if ($$return === undefined) return resolve({ done: true, value: value });
50
- Promise.resolve(call($$return, iterator, value)).then(function (result) {
51
- anObject(result);
52
- resolve({ done: true, value: value });
53
- }, reject);
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);
54
71
  });
55
72
  },
56
- 'throw': function (value) {
57
- var that = this;
58
- return new Promise(function (resolve, reject) {
59
- var state = getInternalState(that);
60
- var iterator = state.iterator;
61
- state.done = true;
62
- var $$throw = getMethod(iterator, 'throw');
63
- if ($$throw === undefined) return reject(value);
64
- resolve(call($$throw, iterator, value));
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 () {
79
+ return new Promise(function (resolve, reject) {
80
+ var iterator = state.iterator;
81
+ var innerIterator = state.innerIterator;
82
+ state.done = true;
83
+ if (innerIterator) try {
84
+ iteratorClose(innerIterator, 'return');
85
+ } catch (error) {
86
+ return iteratorClose(iterator, 'throw', error);
87
+ }
88
+ var $$return = getMethod(iterator, 'return');
89
+ if ($$return === undefined) return resolve({ done: true, value: undefined });
90
+ Promise.resolve(call($$return, iterator)).then(function (result) {
91
+ anObject(result);
92
+ resolve({ done: true, value: undefined });
93
+ }, reject);
94
+ });
65
95
  });
66
96
  }
67
97
  });
68
98
 
69
- if (!IS_ITERATOR) {
70
- createNonEnumerableProperty(AsyncIteratorProxy.prototype, TO_STRING_TAG, 'Generator');
99
+ if (IS_GENERATOR) {
100
+ createNonEnumerableProperty(AsyncIteratorProxyPrototype, TO_STRING_TAG, 'Async Iterator Helper');
71
101
  }
72
102
 
103
+ return AsyncIteratorProxyPrototype;
104
+ };
105
+
106
+ var AsyncIteratorHelperPrototype = createAsyncIteratorProxyPrototype(false);
107
+ var WrapForValidAsyncIteratorPrototype = createAsyncIteratorProxyPrototype(true);
108
+
109
+ module.exports = function (nextHandler, IS_ITERATOR) {
110
+ var ASYNC_ITERATOR_PROXY = IS_ITERATOR ? WRAP_FOR_VALID_ASYNC_ITERATOR : ASYNC_ITERATOR_HELPER;
111
+
112
+ var AsyncIteratorProxy = function AsyncIterator(record, state) {
113
+ if (state) {
114
+ state.iterator = record.iterator;
115
+ state.next = record.next;
116
+ } else state = record;
117
+ state.type = ASYNC_ITERATOR_PROXY;
118
+ state.nextHandler = nextHandler;
119
+ state.done = false;
120
+ state.awaiting = null;
121
+ setInternalState(this, state);
122
+ };
123
+
124
+ AsyncIteratorProxy.prototype = IS_ITERATOR ? WrapForValidAsyncIteratorPrototype : AsyncIteratorHelperPrototype;
125
+
73
126
  return AsyncIteratorProxy;
74
127
  };
@@ -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 { done: true, value: undefined };
16
+ }
17
+ return { done: false, value: [state.index++, step.value] };
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
+ };
@@ -6,44 +6,33 @@ var aCallable = require('../internals/a-callable');
6
6
  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
- var getMethod = require('../internals/get-method');
9
+ var getIteratorDirect = require('../internals/get-iterator-direct');
10
+ var closeAsyncIteration = require('../internals/async-iterator-close');
10
11
 
11
12
  var createMethod = function (TYPE) {
12
13
  var IS_TO_ARRAY = TYPE == 0;
13
14
  var IS_FOR_EACH = TYPE == 1;
14
15
  var IS_EVERY = TYPE == 2;
15
16
  var IS_SOME = TYPE == 3;
16
- return function (iterator, fn, target) {
17
- anObject(iterator);
17
+ return function (object, fn, target) {
18
+ var record = getIteratorDirect(object);
18
19
  var Promise = getBuiltIn('Promise');
19
- var next = aCallable(iterator.next);
20
+ var iterator = record.iterator;
21
+ var next = record.next;
20
22
  var index = 0;
21
23
  var MAPPING = fn !== undefined;
22
24
  if (MAPPING || !IS_TO_ARRAY) aCallable(fn);
23
25
 
24
26
  return new Promise(function (resolve, reject) {
25
- var closeIteration = function (method, argument) {
26
- try {
27
- var returnMethod = getMethod(iterator, 'return');
28
- if (returnMethod) {
29
- return Promise.resolve(call(returnMethod, iterator)).then(function () {
30
- method(argument);
31
- }, function (error) {
32
- reject(error);
33
- });
34
- }
35
- } catch (error2) {
36
- return reject(error2);
37
- } method(argument);
38
- };
39
-
40
- var onError = function (error) {
41
- closeIteration(reject, error);
27
+ var ifAbruptCloseAsyncIterator = function (error) {
28
+ closeAsyncIteration(iterator, reject, error, reject);
42
29
  };
43
30
 
44
31
  var loop = function () {
45
32
  try {
46
- if (IS_TO_ARRAY && MAPPING) doesNotExceedSafeInteger(index);
33
+ if (IS_TO_ARRAY && MAPPING) try {
34
+ doesNotExceedSafeInteger(index);
35
+ } catch (error5) { ifAbruptCloseAsyncIterator(error5); }
47
36
  Promise.resolve(anObject(call(next, iterator))).then(function (step) {
48
37
  try {
49
38
  if (anObject(step).done) {
@@ -53,27 +42,31 @@ var createMethod = function (TYPE) {
53
42
  } else resolve(IS_SOME ? false : IS_EVERY || undefined);
54
43
  } else {
55
44
  var value = step.value;
56
- if (MAPPING) {
57
- Promise.resolve(IS_TO_ARRAY ? fn(value, index) : fn(value)).then(function (result) {
58
- if (IS_FOR_EACH) {
59
- loop();
60
- } else if (IS_EVERY) {
61
- result ? loop() : closeIteration(resolve, false);
62
- } else if (IS_TO_ARRAY) {
63
- target[index++] = result;
64
- loop();
65
- } else {
66
- result ? closeIteration(resolve, IS_SOME || value) : loop();
67
- }
68
- }, onError);
69
- } else {
70
- target[index++] = value;
71
- loop();
72
- }
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); }
73
66
  }
74
- } catch (error) { onError(error); }
75
- }, onError);
76
- } catch (error2) { onError(error2); }
67
+ } catch (error2) { reject(error2); }
68
+ }, reject);
69
+ } catch (error) { reject(error); }
77
70
  };
78
71
 
79
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);
@@ -0,0 +1,9 @@
1
+ var aCallable = require('../internals/a-callable');
2
+ var anObject = require('../internals/an-object');
3
+
4
+ module.exports = function (obj) {
5
+ return {
6
+ iterator: obj,
7
+ next: aCallable(anObject(obj).next)
8
+ };
9
+ };
@@ -21,6 +21,7 @@ var ResultPrototype = Result.prototype;
21
21
  module.exports = function (iterable, unboundFunction, options) {
22
22
  var that = options && options.that;
23
23
  var AS_ENTRIES = !!(options && options.AS_ENTRIES);
24
+ var IS_RECORD = !!(options && options.IS_RECORD);
24
25
  var IS_ITERATOR = !!(options && options.IS_ITERATOR);
25
26
  var INTERRUPTED = !!(options && options.INTERRUPTED);
26
27
  var fn = bind(unboundFunction, that);
@@ -38,7 +39,9 @@ module.exports = function (iterable, unboundFunction, options) {
38
39
  } return INTERRUPTED ? fn(value, stop) : fn(value);
39
40
  };
40
41
 
41
- if (IS_ITERATOR) {
42
+ if (IS_RECORD) {
43
+ iterator = iterable.iterator;
44
+ } else if (IS_ITERATOR) {
42
45
  iterator = iterable;
43
46
  } else {
44
47
  iterFn = getIteratorMethod(iterable);
@@ -53,7 +56,7 @@ module.exports = function (iterable, unboundFunction, options) {
53
56
  iterator = getIterator(iterable, iterFn);
54
57
  }
55
58
 
56
- next = iterator.next;
59
+ next = IS_RECORD ? iterable.next : iterator.next;
57
60
  while (!(step = call(next, iterator)).done) {
58
61
  try {
59
62
  result = callFn(step.value);
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
  var call = require('../internals/function-call');
3
- var aCallable = require('../internals/a-callable');
4
3
  var anObject = require('../internals/an-object');
5
4
  var create = require('../internals/object-create');
6
5
  var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
@@ -9,50 +8,74 @@ var wellKnownSymbol = require('../internals/well-known-symbol');
9
8
  var InternalStateModule = require('../internals/internal-state');
10
9
  var getMethod = require('../internals/get-method');
11
10
  var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;
11
+ var iteratorClose = require('../internals/iterator-close');
12
12
 
13
- var ITERATOR_PROXY = 'IteratorProxy';
13
+ var ITERATOR_HELPER = 'IteratorHelper';
14
+ var WRAP_FOR_VALID_ITERATOR = 'WrapForValidIterator';
14
15
  var setInternalState = InternalStateModule.set;
15
- var getInternalState = InternalStateModule.getterFor(ITERATOR_PROXY);
16
16
 
17
17
  var TO_STRING_TAG = wellKnownSymbol('toStringTag');
18
18
 
19
- module.exports = function (nextHandler, IS_ITERATOR) {
20
- var IteratorProxy = function Iterator(state) {
21
- state.type = ITERATOR_PROXY;
22
- state.next = aCallable(state.iterator.next);
23
- state.done = false;
24
- state.ignoreArg = !IS_ITERATOR;
25
- setInternalState(this, state);
26
- };
19
+ var createIteratorProxyPrototype = function (IS_ITERATOR) {
20
+ var ITERATOR_PROXY = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;
21
+
22
+ var getInternalState = InternalStateModule.getterFor(ITERATOR_PROXY);
27
23
 
28
- IteratorProxy.prototype = defineBuiltIns(create(IteratorPrototype), {
29
- next: function next(arg) {
24
+ var IteratorProxyPrototype = defineBuiltIns(create(IteratorPrototype), {
25
+ next: function next() {
30
26
  var state = getInternalState(this);
31
- var args = arguments.length ? [state.ignoreArg ? undefined : arg] : IS_ITERATOR ? [] : [undefined];
32
- state.ignoreArg = false;
33
- var result = state.done ? undefined : call(nextHandler, state, args);
34
- return { done: state.done, value: result };
27
+ // for simplification:
28
+ // for `%WrapForValidIteratorPrototype%.next` our `nextHandler` returns `IterResultObject`
29
+ // for `%IteratorHelperPrototype%.next` - just a value
30
+ if (IS_ITERATOR) return state.nextHandler();
31
+ try {
32
+ var result = state.done ? undefined : state.nextHandler();
33
+ return { done: state.done, value: result };
34
+ } catch (error) {
35
+ state.done = true;
36
+ throw error;
37
+ }
35
38
  },
36
- 'return': function (value) {
39
+ 'return': function () {
37
40
  var state = getInternalState(this);
38
41
  var iterator = state.iterator;
42
+ var innerIterator = state.innerIterator;
39
43
  state.done = true;
44
+ if (innerIterator) try {
45
+ iteratorClose(innerIterator, 'return');
46
+ } catch (error) {
47
+ return iteratorClose(iterator, 'throw', error);
48
+ }
40
49
  var $$return = getMethod(iterator, 'return');
41
- return { done: true, value: $$return ? anObject(call($$return, iterator, value)).value : value };
42
- },
43
- 'throw': function (value) {
44
- var state = getInternalState(this);
45
- var iterator = state.iterator;
46
- state.done = true;
47
- var $$throw = getMethod(iterator, 'throw');
48
- if ($$throw) return call($$throw, iterator, value);
49
- throw value;
50
+ return { done: true, value: $$return ? anObject(call($$return, iterator)).value : undefined };
50
51
  }
51
52
  });
52
53
 
53
54
  if (!IS_ITERATOR) {
54
- createNonEnumerableProperty(IteratorProxy.prototype, TO_STRING_TAG, 'Generator');
55
+ createNonEnumerableProperty(IteratorProxyPrototype, TO_STRING_TAG, 'Iterator Helper');
55
56
  }
56
57
 
58
+ return IteratorProxyPrototype;
59
+ };
60
+
61
+ var IteratorHelperPrototype = createIteratorProxyPrototype(false);
62
+ var WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);
63
+
64
+ module.exports = function (nextHandler, IS_ITERATOR) {
65
+ var ITERATOR_PROXY = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;
66
+
67
+ var IteratorProxy = function Iterator(record, state) {
68
+ if (state) {
69
+ state.iterator = record.iterator;
70
+ state.next = record.next;
71
+ } else state = record;
72
+ state.type = ITERATOR_PROXY;
73
+ state.nextHandler = nextHandler;
74
+ state.done = false;
75
+ setInternalState(this, state);
76
+ };
77
+
78
+ IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;
79
+
57
80
  return IteratorProxy;
58
81
  };