core-js 3.23.4 → 3.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) 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 +95 -44
  15. package/internals/async-iterator-indexed.js +28 -0
  16. package/internals/async-iterator-iteration.js +30 -39
  17. package/internals/async-iterator-wrap.js +6 -0
  18. package/internals/engine-is-browser.js +6 -1
  19. package/internals/iterator-create-proxy.js +51 -30
  20. package/internals/iterator-indexed.js +18 -0
  21. package/internals/not-a-nan.js +7 -0
  22. package/internals/promise-constructor-detection.js +12 -11
  23. package/internals/shared.js +2 -2
  24. package/modules/esnext.async-iterator.as-indexed-pairs.js +4 -24
  25. package/modules/esnext.async-iterator.drop.js +13 -9
  26. package/modules/esnext.async-iterator.filter.js +22 -9
  27. package/modules/esnext.async-iterator.flat-map.js +28 -14
  28. package/modules/esnext.async-iterator.from.js +3 -9
  29. package/modules/esnext.async-iterator.indexed.js +7 -0
  30. package/modules/esnext.async-iterator.map.js +28 -9
  31. package/modules/esnext.async-iterator.reduce.js +9 -4
  32. package/modules/esnext.async-iterator.take.js +23 -12
  33. package/modules/esnext.iterator.as-indexed-pairs.js +4 -17
  34. package/modules/esnext.iterator.drop.js +4 -4
  35. package/modules/esnext.iterator.filter.js +3 -3
  36. package/modules/esnext.iterator.flat-map.js +9 -11
  37. package/modules/esnext.iterator.from.js +3 -6
  38. package/modules/esnext.iterator.indexed.js +7 -0
  39. package/modules/esnext.iterator.map.js +3 -3
  40. package/modules/esnext.iterator.take.js +5 -4
  41. package/modules/esnext.iterator.to-async.js +3 -1
  42. package/modules/esnext.typed-array.to-spliced.js +1 -0
  43. package/modules/web.structured-clone.js +1 -1
  44. package/package.json +1 -1
  45. package/proposals/change-array-by-copy.js +1 -0
  46. 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,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,118 @@ 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
 
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 };
40
+ };
41
+
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);
71
+ });
72
+ },
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
+ });
95
+ });
96
+ }
97
+ });
98
+
99
+ if (IS_GENERATOR) {
100
+ createNonEnumerableProperty(AsyncIteratorProxyPrototype, TO_STRING_TAG, 'Async Iterator Helper');
101
+ }
102
+
103
+ return AsyncIteratorProxyPrototype;
104
+ };
105
+
106
+ var AsyncIteratorHelperPrototype = createAsyncIteratorProxyPrototype(false);
107
+ var WrapForValidAsyncIteratorPrototype = createAsyncIteratorProxyPrototype(true);
108
+
21
109
  module.exports = function (nextHandler, IS_ITERATOR) {
110
+ var ASYNC_ITERATOR_PROXY = IS_ITERATOR ? WRAP_FOR_VALID_ASYNC_ITERATOR : ASYNC_ITERATOR_HELPER;
111
+
22
112
  var AsyncIteratorProxy = function AsyncIterator(record, state) {
23
113
  if (state) {
24
114
  state.iterator = record.iterator;
25
115
  state.next = record.next;
26
116
  } else state = record;
27
117
  state.type = ASYNC_ITERATOR_PROXY;
118
+ state.nextHandler = nextHandler;
28
119
  state.done = false;
29
- state.ignoreArgument = !IS_ITERATOR;
120
+ state.awaiting = null;
30
121
  setInternalState(this, state);
31
122
  };
32
123
 
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
- });
43
- },
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;
49
- 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
- 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));
67
- });
68
- }
69
- });
70
-
71
- if (!IS_ITERATOR) {
72
- createNonEnumerableProperty(AsyncIteratorProxy.prototype, TO_STRING_TAG, 'Generator');
73
- }
124
+ AsyncIteratorProxy.prototype = IS_ITERATOR ? WrapForValidAsyncIteratorPrototype : AsyncIteratorHelperPrototype;
74
125
 
75
126
  return AsyncIteratorProxy;
76
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
+ };
@@ -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);
@@ -1 +1,6 @@
1
- module.exports = typeof window == 'object' && typeof Deno != 'object';
1
+ var IS_DENO = require('../internals/engine-is-deno');
2
+ var IS_NODE = require('../internals/engine-is-node');
3
+
4
+ module.exports = !IS_DENO && !IS_NODE
5
+ && typeof window == 'object'
6
+ && typeof document == 'object';
@@ -8,53 +8,74 @@ var wellKnownSymbol = require('../internals/well-known-symbol');
8
8
  var InternalStateModule = require('../internals/internal-state');
9
9
  var getMethod = require('../internals/get-method');
10
10
  var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;
11
+ var iteratorClose = require('../internals/iterator-close');
11
12
 
12
- var ITERATOR_PROXY = 'IteratorProxy';
13
+ var ITERATOR_HELPER = 'IteratorHelper';
14
+ var WRAP_FOR_VALID_ITERATOR = 'WrapForValidIterator';
13
15
  var setInternalState = InternalStateModule.set;
14
- var getInternalState = InternalStateModule.getterFor(ITERATOR_PROXY);
15
16
 
16
17
  var TO_STRING_TAG = wellKnownSymbol('toStringTag');
17
18
 
18
- module.exports = function (nextHandler, IS_ITERATOR) {
19
- var IteratorProxy = function Iterator(record, state) {
20
- if (state) {
21
- state.iterator = record.iterator;
22
- state.next = record.next;
23
- } else state = record;
24
- state.type = ITERATOR_PROXY;
25
- state.done = false;
26
- state.ignoreArg = !IS_ITERATOR;
27
- setInternalState(this, state);
28
- };
19
+ var createIteratorProxyPrototype = function (IS_ITERATOR) {
20
+ var ITERATOR_PROXY = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;
29
21
 
30
- IteratorProxy.prototype = defineBuiltIns(create(IteratorPrototype), {
31
- next: function next(arg) {
22
+ var getInternalState = InternalStateModule.getterFor(ITERATOR_PROXY);
23
+
24
+ var IteratorProxyPrototype = defineBuiltIns(create(IteratorPrototype), {
25
+ next: function next() {
32
26
  var state = getInternalState(this);
33
- var args = arguments.length ? [state.ignoreArg ? undefined : arg] : IS_ITERATOR ? [] : [undefined];
34
- state.ignoreArg = false;
35
- var result = state.done ? undefined : call(nextHandler, state, args);
36
- 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
+ }
37
38
  },
38
- 'return': function (value) {
39
+ 'return': function () {
39
40
  var state = getInternalState(this);
40
41
  var iterator = state.iterator;
42
+ var innerIterator = state.innerIterator;
41
43
  state.done = true;
44
+ if (innerIterator) try {
45
+ iteratorClose(innerIterator, 'return');
46
+ } catch (error) {
47
+ return iteratorClose(iterator, 'throw', error);
48
+ }
42
49
  var $$return = getMethod(iterator, 'return');
43
- return { done: true, value: $$return ? anObject(call($$return, iterator, value)).value : value };
44
- },
45
- 'throw': function (value) {
46
- var state = getInternalState(this);
47
- var iterator = state.iterator;
48
- state.done = true;
49
- var $$throw = getMethod(iterator, 'throw');
50
- if ($$throw) return call($$throw, iterator, value);
51
- throw value;
50
+ return { done: true, value: $$return ? anObject(call($$return, iterator)).value : undefined };
52
51
  }
53
52
  });
54
53
 
55
54
  if (!IS_ITERATOR) {
56
- createNonEnumerableProperty(IteratorProxy.prototype, TO_STRING_TAG, 'Generator');
55
+ createNonEnumerableProperty(IteratorProxyPrototype, TO_STRING_TAG, 'Iterator Helper');
57
56
  }
58
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
+
59
80
  return IteratorProxy;
60
81
  };
@@ -0,0 +1,18 @@
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 createIteratorProxy = require('../internals/iterator-create-proxy');
7
+
8
+ var IteratorProxy = createIteratorProxy(function () {
9
+ var result = anObject(call(this.next, this.iterator));
10
+ var done = this.done = !!result.done;
11
+ if (!done) return [this.index++, result.value];
12
+ });
13
+
14
+ module.exports = function indexed() {
15
+ return new IteratorProxy(getIteratorDirect(this), {
16
+ index: 0
17
+ });
18
+ };
@@ -0,0 +1,7 @@
1
+ var $RangeError = RangeError;
2
+
3
+ module.exports = function (it) {
4
+ // eslint-disable-next-line no-self-compare -- NaN check
5
+ if (it === it) return it;
6
+ throw $RangeError('NaN is not allowed');
7
+ };
@@ -5,6 +5,7 @@ var isForced = require('../internals/is-forced');
5
5
  var inspectSource = require('../internals/inspect-source');
6
6
  var wellKnownSymbol = require('../internals/well-known-symbol');
7
7
  var IS_BROWSER = require('../internals/engine-is-browser');
8
+ var IS_DENO = require('../internals/engine-is-deno');
8
9
  var IS_PURE = require('../internals/is-pure');
9
10
  var V8_VERSION = require('../internals/engine-v8-version');
10
11
 
@@ -25,18 +26,18 @@ var FORCED_PROMISE_CONSTRUCTOR = isForced('Promise', function () {
25
26
  // We can't use @@species feature detection in V8 since it causes
26
27
  // deoptimization and performance degradation
27
28
  // https://github.com/zloirock/core-js/issues/679
28
- if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;
29
- // Detect correctness of subclassing with @@species support
30
- var promise = new NativePromiseConstructor(function (resolve) { resolve(1); });
31
- var FakePromise = function (exec) {
32
- exec(function () { /* empty */ }, function () { /* empty */ });
33
- };
34
- var constructor = promise.constructor = {};
35
- constructor[SPECIES] = FakePromise;
36
- SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;
37
- if (!SUBCLASSING) return true;
29
+ if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) {
30
+ // Detect correctness of subclassing with @@species support
31
+ var promise = new NativePromiseConstructor(function (resolve) { resolve(1); });
32
+ var FakePromise = function (exec) {
33
+ exec(function () { /* empty */ }, function () { /* empty */ });
34
+ };
35
+ var constructor = promise.constructor = {};
36
+ constructor[SPECIES] = FakePromise;
37
+ SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;
38
+ if (!SUBCLASSING) return true;
38
39
  // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
39
- return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_PROMISE_REJECTION_EVENT;
40
+ } return !GLOBAL_CORE_JS_PROMISE && (IS_BROWSER || IS_DENO) && !NATIVE_PROMISE_REJECTION_EVENT;
40
41
  });
41
42
 
42
43
  module.exports = {