Skip to content

Commit 817c4dd

Browse files
committed
1 parent f73a13f commit 817c4dd

22 files changed

+363
-11
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
## Changelog
22
##### Unreleased
3+
- Added [`Array.fromAsync` stage 1 proposal](https://github.com/tc39/proposal-array-from-async):
4+
- `Array.fromAsync`
5+
- `%TypedArray%.fromAsync`
36
- `.name` and `.toString()` on polyfilled functions improved in many different cases
47
- Improved internal `IsConstructor` and `IsCallable` checks
58
- Fixed some internal cases of `GetMethod` operation

README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ Promise.resolve(32).then(x => console.log(x)); // => 32
109109
- [New collections methods](#new-collections-methods)
110110
- [`.of` and `.from` methods on collection constructors](#of-and-from-methods-on-collection-constructors)
111111
- [`compositeKey` and `compositeSymbol`](#compositekey-and-compositesymbol)
112+
- [`Array.fromAsync`](#arrayfromasync)
112113
- [`Array` filtering](#array-filtering)
113114
- [`Array` grouping](#array-grouping)
114115
- [`Array` deduplication](#array-deduplication)
@@ -2297,6 +2298,27 @@ console.log(compositeSymbol(1, a) === compositeSymbol(1, a)); // => true
22972298
console.log(compositeSymbol(1, a, 2, b) === compositeSymbol(1, a, 2, b)); // => true
22982299
console.log(compositeSymbol(a, a) === compositeSymbol(a, a)); // => true
22992300
```
2301+
##### [`Array.fromAsync`](https://github.com/tc39/proposal-array-from-async)[⬆](#index)
2302+
Modules [`esnext.array.from-async`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.array.from-async.js) and [`esnext.typed-array.from-async`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.typed-array.from-async.js)
2303+
```js
2304+
class Array {
2305+
static fromAsync(asyncItems: AsyncIterable | Iterable | ArrayLike, mapfn?: (value: any, index: number) => any, thisArg?: any): Array;
2306+
}
2307+
2308+
class %TypedArray% {
2309+
static fromAsync(asyncItems: AsyncIterable | Iterable | ArrayLike, mapfn?: (value: number, index: number, target) => number, thisArg?: any): %TypedArray%;
2310+
}
2311+
```
2312+
[*CommonJS entry points:*](#commonjs-api)
2313+
```js
2314+
core-js/proposals/array-from-async
2315+
core-js(-pure)/features/array/from-async
2316+
core-js/features/typed-array/from-async
2317+
```
2318+
[*Example*](https://goo.gl/Jt7SsD):
2319+
```js
2320+
await Array.fromAsync((async function * (){ yield * [1, 2, 3] })(), i => i * i); // => [1, 4, 9]
2321+
```
23002322
##### [Array filtering](https://github.com/tc39/proposal-array-filtering)[⬆](#index)
23012323
Modules [`esnext.array.filter-reject`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.array.filter-reject.js) and [`esnext.typed-array.filter-reject`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.typed-array.filter-reject.js).
23022324
```js

packages/core-js-compat/src/data.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,6 +1428,8 @@ export const data = {
14281428
},
14291429
// TODO: Remove from `core-js@4`
14301430
'esnext.aggregate-error': null,
1431+
'esnext.array.from-async': {
1432+
},
14311433
// TODO: Remove from `core-js@4`
14321434
'esnext.array.at': null,
14331435
// TODO: Remove from `core-js@4`
@@ -1700,6 +1702,8 @@ export const data = {
17001702
// TODO: Remove from `core-js@4`
17011703
'esnext.symbol.replace-all': {
17021704
},
1705+
'esnext.typed-array.from-async': {
1706+
},
17031707
// TODO: Remove from `core-js@4`
17041708
'esnext.typed-array.at': null,
17051709
// TODO: Remove from `core-js@4`

packages/core-js-compat/src/modules-by-versions.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,8 @@ export default {
107107
'es.string.at-alternative',
108108
'es.typed-array.at',
109109
],
110+
3.18: [
111+
'esnext.array.from-async',
112+
'esnext.typed-array.from-async',
113+
],
110114
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// empty
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
require('../../modules/es.array.iterator');
2+
require('../../modules/es.object.to-string');
3+
require('../../modules/es.promise');
4+
require('../../modules/es.string.iterator');
5+
require('../../modules/esnext.array.from-async');
6+
var path = require('../../internals/path');
7+
8+
module.exports = path.Array.fromAsync;

packages/core-js/features/array/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
var parent = require('../../stable/array');
22
require('../../modules/es.map');
3+
require('../../modules/es.promise');
4+
require('../../modules/esnext.array.from-async');
35
// TODO: Remove from `core-js@4`
46
require('../../modules/esnext.array.at');
57
// TODO: Remove from `core-js@4`
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require('../../modules/esnext.typed-array.from-async');

packages/core-js/features/typed-array/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
var parent = require('../../stable/typed-array');
22
require('../../modules/es.map');
3+
require('../../modules/es.promise');
4+
require('../../modules/esnext.typed-array.from-async');
35
// TODO: Remove from `core-js@4`
46
require('../../modules/esnext.typed-array.at');
57
// TODO: Remove from `core-js@4`
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
'use strict';
2+
var bind = require('../internals/function-bind-context');
3+
var toObject = require('../internals/to-object');
4+
var isConstructor = require('../internals/is-constructor');
5+
var getAsyncIterator = require('../internals/get-async-iterator');
6+
var getIterator = require('../internals/get-iterator');
7+
var getIteratorMethod = require('../internals/get-iterator-method');
8+
var getMethod = require('../internals/get-method');
9+
var getVirtual = require('../internals/entry-virtual');
10+
var wellKnownSymbol = require('../internals/well-known-symbol');
11+
var AsyncFromSyncIterator = require('../internals/async-from-sync-iterator');
12+
var toArray = require('../internals/async-iterator-iteration').toArray;
13+
14+
var ASYNC_ITERATOR = wellKnownSymbol('asyncIterator');
15+
var arrayIterator = getVirtual('Array').values;
16+
17+
// `Array.fromAsync` method implementation
18+
// https://github.com/tc39/proposal-array-from-async
19+
module.exports = function fromAsync(asyncItems /* , mapfn = undefined, thisArg = undefined */) {
20+
var O = toObject(asyncItems);
21+
var argumentsLength = arguments.length;
22+
var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
23+
if (mapfn !== undefined) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);
24+
var usingAsyncIterator = getMethod(O, ASYNC_ITERATOR);
25+
var usingIterator;
26+
if (!usingAsyncIterator) usingIterator = getIteratorMethod(O);
27+
var A = isConstructor(this) ? new this() : [];
28+
var iterator = usingAsyncIterator
29+
? getAsyncIterator(O, usingAsyncIterator)
30+
: new AsyncFromSyncIterator(getIterator(O, usingIterator || arrayIterator));
31+
return toArray(iterator, mapfn, A);
32+
};

0 commit comments

Comments
 (0)