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.
- package/actual/typed-array/index.js +1 -0
- package/actual/typed-array/methods.js +1 -0
- package/actual/typed-array/to-spliced.js +1 -0
- package/features/async-iterator/indexed.js +1 -0
- package/features/iterator/indexed.js +1 -0
- package/full/async-iterator/index.js +2 -0
- package/full/async-iterator/indexed.js +8 -0
- package/full/index.js +2 -0
- package/full/iterator/index.js +2 -0
- package/full/iterator/indexed.js +8 -0
- package/full/typed-array/to-spliced.js +1 -0
- package/internals/async-from-sync-iterator.js +6 -18
- package/internals/async-iterator-close.js +18 -0
- package/internals/async-iterator-create-proxy.js +97 -44
- package/internals/async-iterator-indexed.js +28 -0
- package/internals/async-iterator-iteration.js +35 -42
- package/internals/async-iterator-wrap.js +6 -0
- package/internals/get-iterator-direct.js +9 -0
- package/internals/iterate.js +5 -2
- package/internals/iterator-create-proxy.js +51 -28
- package/internals/iterator-indexed.js +18 -0
- package/internals/map-emplace.js +11 -5
- package/internals/not-a-nan.js +7 -0
- package/internals/promise-constructor-detection.js +12 -11
- package/internals/regexp-exec.js +1 -1
- package/internals/shared.js +2 -2
- package/modules/es.regexp.constructor.js +1 -1
- package/modules/es.typed-array.reduce-right.js +1 -1
- package/modules/esnext.async-iterator.as-indexed-pairs.js +4 -24
- package/modules/esnext.async-iterator.drop.js +15 -11
- package/modules/esnext.async-iterator.filter.js +24 -11
- package/modules/esnext.async-iterator.flat-map.js +30 -16
- package/modules/esnext.async-iterator.from.js +4 -9
- package/modules/esnext.async-iterator.indexed.js +7 -0
- package/modules/esnext.async-iterator.map.js +30 -11
- package/modules/esnext.async-iterator.reduce.js +13 -6
- package/modules/esnext.async-iterator.take.js +24 -14
- package/modules/esnext.iterator.as-indexed-pairs.js +4 -17
- package/modules/esnext.iterator.drop.js +6 -6
- package/modules/esnext.iterator.every.js +4 -4
- package/modules/esnext.iterator.filter.js +5 -5
- package/modules/esnext.iterator.find.js +4 -4
- package/modules/esnext.iterator.flat-map.js +11 -13
- package/modules/esnext.iterator.for-each.js +2 -2
- package/modules/esnext.iterator.from.js +5 -7
- package/modules/esnext.iterator.indexed.js +7 -0
- package/modules/esnext.iterator.map.js +5 -5
- package/modules/esnext.iterator.reduce.js +4 -4
- package/modules/esnext.iterator.some.js +4 -4
- package/modules/esnext.iterator.take.js +7 -6
- package/modules/esnext.iterator.to-array.js +2 -2
- package/modules/esnext.iterator.to-async.js +3 -1
- package/modules/esnext.typed-array.to-spliced.js +1 -0
- package/modules/web.dom-exception.stack.js +11 -1
- package/modules/web.structured-clone.js +8 -4
- package/package.json +1 -1
- package/proposals/change-array-by-copy.js +1 -0
- 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
|
|
|
@@ -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');
|
package/full/iterator/index.js
CHANGED
|
@@ -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,5 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
var
|
|
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(
|
|
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(
|
|
36
|
+
var result = anObject(call(state.next, state.iterator));
|
|
38
37
|
asyncFromSyncIteratorContinuation(result, resolve, reject);
|
|
39
38
|
});
|
|
40
39
|
},
|
|
41
|
-
'return': function (
|
|
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:
|
|
47
|
-
var result = anObject(
|
|
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
|
|
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
|
|
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
|
-
|
|
23
|
-
var
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
var
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
'
|
|
57
|
-
var
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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 (
|
|
70
|
-
createNonEnumerableProperty(
|
|
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
|
|
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 (
|
|
17
|
-
|
|
17
|
+
return function (object, fn, target) {
|
|
18
|
+
var record = getIteratorDirect(object);
|
|
18
19
|
var Promise = getBuiltIn('Promise');
|
|
19
|
-
var
|
|
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
|
|
26
|
-
|
|
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)
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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 (
|
|
75
|
-
},
|
|
76
|
-
} catch (
|
|
67
|
+
} catch (error2) { reject(error2); }
|
|
68
|
+
}, reject);
|
|
69
|
+
} catch (error) { reject(error); }
|
|
77
70
|
};
|
|
78
71
|
|
|
79
72
|
loop();
|
package/internals/iterate.js
CHANGED
|
@@ -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 (
|
|
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
|
|
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
|
-
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
29
|
-
next: function next(
|
|
24
|
+
var IteratorProxyPrototype = defineBuiltIns(create(IteratorPrototype), {
|
|
25
|
+
next: function next() {
|
|
30
26
|
var state = getInternalState(this);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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 (
|
|
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
|
|
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(
|
|
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
|
};
|