Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extension of the API #1012

Merged
merged 11 commits into from Dec 15, 2021
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -23,6 +23,7 @@ node_modules/
/packages/core-js-compat/external.json
/packages/core-js-compat/modules.json
/packages/core-js-compat/modules-by-versions.json
/packages/core-js-pure/actual/
/packages/core-js-pure/es/
/packages/core-js-pure/features/
/packages/core-js-pure/internals/
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Expand Up @@ -35,6 +35,9 @@
- Added a workaround of most cases breakage modern `String#at` after loading obsolete `String#at` proposal module, [#1019](https://github.com/zloirock/core-js/issues/1019)
- Fixed `Array.prototype.{ values, @@iterator }.name` in V8 ~ Chrome 45-
- Fixed validation of typed arrays in typed arrays iteration methods in V8 ~ Chrome 50-
- Extension of the API, [#1012](https://github.com/zloirock/core-js/issues/1012)
- Added a new `core-js/actual/**` namespace
- Added entry points for each finished post-ES6 proposal

##### 3.19.3 - 2021.12.06
- Fixed internal slots check in methods of some built-in types, [#1017](https://github.com/zloirock/core-js/issues/1017)
Expand Down
927 changes: 523 additions & 404 deletions README.md

Large diffs are not rendered by default.

12 changes: 7 additions & 5 deletions deno/corejs/README.md
@@ -1,4 +1,4 @@
# core-js
![logo](https://user-images.githubusercontent.com/2213682/140570622-ea744c11-632e-4d9a-ba0a-70c390a1fdff.png)

[![Open Collective](https://opencollective.com/core-js/all/badge.svg?label=open%20collective)](https://opencollective.com/core-js) [![version](https://img.shields.io/npm/v/core-js.svg)](https://www.npmjs.com/package/core-js) [![core-js downloads](https://img.shields.io/npm/dm/core-js.svg?label=npm%20i%20core-js)](https://npm-stat.com/charts.html?package=core-js&package=core-js-pure&package=core-js-compat&from=2014-11-18) [![core-js-pure downloads](https://img.shields.io/npm/dm/core-js-pure.svg?label=npm%20i%20core-js-pure)](https://npm-stat.com/charts.html?package=core-js&package=core-js-pure&package=core-js-compat&from=2014-11-18) [![tests](https://github.com/zloirock/core-js/workflows/tests/badge.svg)](https://github.com/zloirock/core-js/actions) [![eslint](https://github.com/zloirock/core-js/workflows/eslint/badge.svg)](https://github.com/zloirock/core-js/actions)

Expand Down Expand Up @@ -26,22 +26,24 @@
```js
import 'https://deno.land/x/corejs@v3.19.3/index.js'; // <- at the top of your entry point

Object.hasOwn({ foo: 42 }, 'foo'); // => true
Object.hasOwn({ foo: 42 }, 'foo'); // => true

[1, 2, 3, 4, 5, 6, 7].at(-3); // => 5
[1, 2, 3, 4, 5, 6, 7].at(-3); // => 5

[1, 2, 3, 4, 5].groupBy(it => it % 2); // => { 1: [1, 3, 5], 0: [2, 4] }

Promise.any([
Promise.resolve(1),
Promise.reject(2),
Promise.resolve(3),
]).then(console.log); // => 1
]).then(console.log); // => 1

[1, 2, 3, 4, 5, 6, 7].values()
.drop(1)
.take(5)
.filter(it => it % 2)
.map(it => it ** 2)
.toArray(); // => [9, 25]
.toArray(); // => [9, 25]
```

**It's a bundled global version for Deno 1.0+, for more info see [`core-js` documentation](https://github.com/zloirock/core-js/blob/master/README.md).**
2 changes: 2 additions & 0 deletions packages/core-js-builder/README.md
@@ -1,3 +1,5 @@
![logo](https://user-images.githubusercontent.com/2213682/140570622-ea744c11-632e-4d9a-ba0a-70c390a1fdff.png)

For some cases could be useful to exclude some `core-js` features or generate a polyfill for target engines. This API helps conditionally include or exclude certain parts of [`core-js`](https://github.com/zloirock/core-js), build for targets [specified in `core-js-compat` format](https://github.com/zloirock/core-js/tree/master/packages/core-js-compat#targets-option).

```js
Expand Down
42 changes: 26 additions & 16 deletions packages/core-js-bundle/README.md
@@ -1,4 +1,4 @@
# core-js-bundle
![logo](https://user-images.githubusercontent.com/2213682/140570622-ea744c11-632e-4d9a-ba0a-70c390a1fdff.png)

[![Open Collective](https://opencollective.com/core-js/all/badge.svg?label=open%20collective)](https://opencollective.com/core-js) [![version](https://img.shields.io/npm/v/core-js.svg)](https://www.npmjs.com/package/core-js) [![core-js downloads](https://img.shields.io/npm/dm/core-js.svg?label=npm%20i%20core-js)](https://npm-stat.com/charts.html?package=core-js&package=core-js-pure&package=core-js-compat&from=2014-11-18) [![core-js-pure downloads](https://img.shields.io/npm/dm/core-js-pure.svg?label=npm%20i%20core-js-pure)](https://npm-stat.com/charts.html?package=core-js&package=core-js-pure&package=core-js-compat&from=2014-11-18) [![tests](https://github.com/zloirock/core-js/workflows/tests/badge.svg)](https://github.com/zloirock/core-js/actions) [![eslint](https://github.com/zloirock/core-js/workflows/eslint/badge.svg)](https://github.com/zloirock/core-js/actions)

Expand All @@ -22,37 +22,47 @@

---

[*Example*](http://goo.gl/a2xexl):
[*Example of usage*](https://is.gd/XD4mRe):
```js
import 'core-js'; // <- at the top of your entry point

Array.from(new Set([1, 2, 3, 2, 1])); // => [1, 2, 3]
[1, [2, 3], [4, [5]]].flat(2); // => [1, 2, 3, 4, 5]
Promise.resolve(32).then(x => console.log(x)); // => 32
[1, 2, 3, 4, 5].groupBy(it => it % 2); // => { 1: [1, 3, 5], 0: [2, 4] }
Promise.resolve(42).then(x => console.log(x)); // => 42
structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
queueMicrotask(() => console.log('called as microtask'));
```

*You can load only required features*:
```js
import 'core-js/features/array/from'; // <- at the top of your entry point
import 'core-js/features/array/flat'; // <- at the top of your entry point
import 'core-js/features/set'; // <- at the top of your entry point
import 'core-js/features/promise'; // <- at the top of your entry point
import 'core-js/actual/array/from'; // <- at the top of your entry point
import 'core-js/actual/array/group-by'; // <- at the top of your entry point
import 'core-js/actual/set'; // <- at the top of your entry point
import 'core-js/actual/promise'; // <- at the top of your entry point
import 'core-js/actual/structured-clone'; // <- at the top of your entry point
import 'core-js/actual/queue-microtask'; // <- at the top of your entry point

Array.from(new Set([1, 2, 3, 2, 1])); // => [1, 2, 3]
[1, [2, 3], [4, [5]]].flat(2); // => [1, 2, 3, 4, 5]
Promise.resolve(32).then(x => console.log(x)); // => 32
[1, 2, 3, 4, 5].groupBy(it => it % 2); // => { 1: [1, 3, 5], 0: [2, 4] }
Promise.resolve(42).then(x => console.log(x)); // => 42
structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
queueMicrotask(() => console.log('called as microtask'));
```

*Or use it without global namespace pollution*:
```js
import from from 'core-js-pure/features/array/from';
import flat from 'core-js-pure/features/array/flat';
import Set from 'core-js-pure/features/set';
import Promise from 'core-js-pure/features/promise';
import from from 'core-js-pure/actual/array/from';
import groupBy from 'core-js-pure/actual/array/group-by';
import Set from 'core-js-pure/actual/set';
import Promise from 'core-js-pure/actual/promise';
import structuredClone from 'core-js-pure/actual/structured-clone';
import queueMicrotask from 'core-js-pure/actual/queue-microtask';

from(new Set([1, 2, 3, 2, 1])); // => [1, 2, 3]
flat([1, [2, 3], [4, [5]]], 2); // => [1, 2, 3, 4, 5]
Promise.resolve(32).then(x => console.log(x)); // => 32
groupBy([1, 2, 3, 4, 5], it => it % 2); // => { 1: [1, 3, 5], 0: [2, 4] }
Promise.resolve(42).then(x => console.log(x)); // => 42
structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
queueMicrotask(() => console.log('called as microtask'));
```

**It's a bundled global version, for more info see [`core-js` documentation](https://github.com/zloirock/core-js/blob/master/README.md).**
2 changes: 2 additions & 0 deletions packages/core-js-compat/README.md
@@ -1,3 +1,5 @@
![logo](https://user-images.githubusercontent.com/2213682/140570622-ea744c11-632e-4d9a-ba0a-70c390a1fdff.png)

[`core-js-compat` package](https://github.com/zloirock/core-js/tree/master/packages/core-js-compat) contains data about the necessity of [`core-js`](https://github.com/zloirock/core-js) modules and API for getting a list of required core-js modules by browserslist query.

```js
Expand Down
42 changes: 26 additions & 16 deletions packages/core-js-pure/README.md
@@ -1,4 +1,4 @@
# core-js-pure
![logo](https://user-images.githubusercontent.com/2213682/140570622-ea744c11-632e-4d9a-ba0a-70c390a1fdff.png)

[![Open Collective](https://opencollective.com/core-js/all/badge.svg?label=open%20collective)](https://opencollective.com/core-js) [![version](https://img.shields.io/npm/v/core-js.svg)](https://www.npmjs.com/package/core-js) [![core-js downloads](https://img.shields.io/npm/dm/core-js.svg?label=npm%20i%20core-js)](https://npm-stat.com/charts.html?package=core-js&package=core-js-pure&package=core-js-compat&from=2014-11-18) [![core-js-pure downloads](https://img.shields.io/npm/dm/core-js-pure.svg?label=npm%20i%20core-js-pure)](https://npm-stat.com/charts.html?package=core-js&package=core-js-pure&package=core-js-compat&from=2014-11-18) [![tests](https://github.com/zloirock/core-js/workflows/tests/badge.svg)](https://github.com/zloirock/core-js/actions) [![eslint](https://github.com/zloirock/core-js/workflows/eslint/badge.svg)](https://github.com/zloirock/core-js/actions)

Expand All @@ -22,37 +22,47 @@

---

[*Example*](http://goo.gl/a2xexl):
[*Example of usage*](https://is.gd/XD4mRe):
```js
import 'core-js'; // <- at the top of your entry point

Array.from(new Set([1, 2, 3, 2, 1])); // => [1, 2, 3]
[1, [2, 3], [4, [5]]].flat(2); // => [1, 2, 3, 4, 5]
Promise.resolve(32).then(x => console.log(x)); // => 32
[1, 2, 3, 4, 5].groupBy(it => it % 2); // => { 1: [1, 3, 5], 0: [2, 4] }
Promise.resolve(42).then(x => console.log(x)); // => 42
structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
queueMicrotask(() => console.log('called as microtask'));
```

*You can load only required features*:
```js
import 'core-js/features/array/from'; // <- at the top of your entry point
import 'core-js/features/array/flat'; // <- at the top of your entry point
import 'core-js/features/set'; // <- at the top of your entry point
import 'core-js/features/promise'; // <- at the top of your entry point
import 'core-js/actual/array/from'; // <- at the top of your entry point
import 'core-js/actual/array/group-by'; // <- at the top of your entry point
import 'core-js/actual/set'; // <- at the top of your entry point
import 'core-js/actual/promise'; // <- at the top of your entry point
import 'core-js/actual/structured-clone'; // <- at the top of your entry point
import 'core-js/actual/queue-microtask'; // <- at the top of your entry point

Array.from(new Set([1, 2, 3, 2, 1])); // => [1, 2, 3]
[1, [2, 3], [4, [5]]].flat(2); // => [1, 2, 3, 4, 5]
Promise.resolve(32).then(x => console.log(x)); // => 32
[1, 2, 3, 4, 5].groupBy(it => it % 2); // => { 1: [1, 3, 5], 0: [2, 4] }
Promise.resolve(42).then(x => console.log(x)); // => 42
structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
queueMicrotask(() => console.log('called as microtask'));
```

*Or use it without global namespace pollution*:
```js
import from from 'core-js-pure/features/array/from';
import flat from 'core-js-pure/features/array/flat';
import Set from 'core-js-pure/features/set';
import Promise from 'core-js-pure/features/promise';
import from from 'core-js-pure/actual/array/from';
import groupBy from 'core-js-pure/actual/array/group-by';
import Set from 'core-js-pure/actual/set';
import Promise from 'core-js-pure/actual/promise';
import structuredClone from 'core-js-pure/actual/structured-clone';
import queueMicrotask from 'core-js-pure/actual/queue-microtask';

from(new Set([1, 2, 3, 2, 1])); // => [1, 2, 3]
flat([1, [2, 3], [4, [5]]], 2); // => [1, 2, 3, 4, 5]
Promise.resolve(32).then(x => console.log(x)); // => 32
groupBy([1, 2, 3, 4, 5], it => it % 2); // => { 1: [1, 3, 5], 0: [2, 4] }
Promise.resolve(42).then(x => console.log(x)); // => 42
structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
queueMicrotask(() => console.log('called as microtask'));
```

**It's a version without global namespace pollution (the third example), for more info see [`core-js` documentation](https://github.com/zloirock/core-js/blob/master/README.md)**.
42 changes: 26 additions & 16 deletions packages/core-js/README.md
@@ -1,4 +1,4 @@
# core-js
![logo](https://user-images.githubusercontent.com/2213682/140570622-ea744c11-632e-4d9a-ba0a-70c390a1fdff.png)

[![Open Collective](https://opencollective.com/core-js/all/badge.svg?label=open%20collective)](https://opencollective.com/core-js) [![version](https://img.shields.io/npm/v/core-js.svg)](https://www.npmjs.com/package/core-js) [![core-js downloads](https://img.shields.io/npm/dm/core-js.svg?label=npm%20i%20core-js)](https://npm-stat.com/charts.html?package=core-js&package=core-js-pure&package=core-js-compat&from=2014-11-18) [![core-js-pure downloads](https://img.shields.io/npm/dm/core-js-pure.svg?label=npm%20i%20core-js-pure)](https://npm-stat.com/charts.html?package=core-js&package=core-js-pure&package=core-js-compat&from=2014-11-18) [![tests](https://github.com/zloirock/core-js/workflows/tests/badge.svg)](https://github.com/zloirock/core-js/actions) [![eslint](https://github.com/zloirock/core-js/workflows/eslint/badge.svg)](https://github.com/zloirock/core-js/actions)

Expand All @@ -22,37 +22,47 @@

---

[*Example*](http://goo.gl/a2xexl):
[*Example of usage*](https://is.gd/XD4mRe):
```js
import 'core-js'; // <- at the top of your entry point

Array.from(new Set([1, 2, 3, 2, 1])); // => [1, 2, 3]
[1, [2, 3], [4, [5]]].flat(2); // => [1, 2, 3, 4, 5]
Promise.resolve(32).then(x => console.log(x)); // => 32
[1, 2, 3, 4, 5].groupBy(it => it % 2); // => { 1: [1, 3, 5], 0: [2, 4] }
Promise.resolve(42).then(x => console.log(x)); // => 42
structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
queueMicrotask(() => console.log('called as microtask'));
```

*You can load only required features*:
```js
import 'core-js/features/array/from'; // <- at the top of your entry point
import 'core-js/features/array/flat'; // <- at the top of your entry point
import 'core-js/features/set'; // <- at the top of your entry point
import 'core-js/features/promise'; // <- at the top of your entry point
import 'core-js/actual/array/from'; // <- at the top of your entry point
import 'core-js/actual/array/group-by'; // <- at the top of your entry point
import 'core-js/actual/set'; // <- at the top of your entry point
import 'core-js/actual/promise'; // <- at the top of your entry point
import 'core-js/actual/structured-clone'; // <- at the top of your entry point
import 'core-js/actual/queue-microtask'; // <- at the top of your entry point

Array.from(new Set([1, 2, 3, 2, 1])); // => [1, 2, 3]
[1, [2, 3], [4, [5]]].flat(2); // => [1, 2, 3, 4, 5]
Promise.resolve(32).then(x => console.log(x)); // => 32
[1, 2, 3, 4, 5].groupBy(it => it % 2); // => { 1: [1, 3, 5], 0: [2, 4] }
Promise.resolve(42).then(x => console.log(x)); // => 42
structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
queueMicrotask(() => console.log('called as microtask'));
```

*Or use it without global namespace pollution*:
```js
import from from 'core-js-pure/features/array/from';
import flat from 'core-js-pure/features/array/flat';
import Set from 'core-js-pure/features/set';
import Promise from 'core-js-pure/features/promise';
import from from 'core-js-pure/actual/array/from';
import groupBy from 'core-js-pure/actual/array/group-by';
import Set from 'core-js-pure/actual/set';
import Promise from 'core-js-pure/actual/promise';
import structuredClone from 'core-js-pure/actual/structured-clone';
import queueMicrotask from 'core-js-pure/actual/queue-microtask';

from(new Set([1, 2, 3, 2, 1])); // => [1, 2, 3]
flat([1, [2, 3], [4, [5]]], 2); // => [1, 2, 3, 4, 5]
Promise.resolve(32).then(x => console.log(x)); // => 32
groupBy([1, 2, 3, 4, 5], it => it % 2); // => { 1: [1, 3, 5], 0: [2, 4] }
Promise.resolve(42).then(x => console.log(x)); // => 42
structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
queueMicrotask(() => console.log('called as microtask'));
```

**It's a global version (first 2 examples), for more info see [`core-js` documentation](https://github.com/zloirock/core-js/blob/master/README.md).**
1 change: 1 addition & 0 deletions packages/core-js/actual/README.md
@@ -0,0 +1 @@
This folder contains entry points for all `core-js` features with dependencies. It's the recommended way for usage only required features.
3 changes: 3 additions & 0 deletions packages/core-js/actual/aggregate-error.js
@@ -0,0 +1,3 @@
var parent = require('../stable/aggregate-error');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array-buffer/constructor.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array-buffer/constructor');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array-buffer/index.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array-buffer');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array-buffer/is-view.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array-buffer/is-view');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array-buffer/slice.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array-buffer/slice');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/at.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/at');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/concat.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/concat');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/copy-within.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/copy-within');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/entries.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/entries');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/every.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/every');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/fill.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/fill');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/filter.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/filter');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/find-index.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/find-index');

module.exports = parent;
4 changes: 4 additions & 0 deletions packages/core-js/actual/array/find-last-index.js
@@ -0,0 +1,4 @@
require('../../modules/esnext.array.find-last-index');
var entryUnbind = require('../../internals/entry-unbind');

module.exports = entryUnbind('Array', 'findLastIndex');
4 changes: 4 additions & 0 deletions packages/core-js/actual/array/find-last.js
@@ -0,0 +1,4 @@
require('../../modules/esnext.array.find-last');
var entryUnbind = require('../../internals/entry-unbind');

module.exports = entryUnbind('Array', 'findLast');
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/find.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/find');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/flat-map.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/flat-map');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/flat.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/flat');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/for-each.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/for-each');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/from.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/from');

module.exports = parent;
5 changes: 5 additions & 0 deletions packages/core-js/actual/array/group-by-to-map.js
@@ -0,0 +1,5 @@
require('../../modules/es.map');
require('../../modules/esnext.array.group-by-to-map');
var entryUnbind = require('../../internals/entry-unbind');

module.exports = entryUnbind('Array', 'groupByToMap');
4 changes: 4 additions & 0 deletions packages/core-js/actual/array/group-by.js
@@ -0,0 +1,4 @@
require('../../modules/esnext.array.group-by');
var entryUnbind = require('../../internals/entry-unbind');

module.exports = entryUnbind('Array', 'groupBy');
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/includes.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/includes');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/index-of.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/index-of');

module.exports = parent;
8 changes: 8 additions & 0 deletions packages/core-js/actual/array/index.js
@@ -0,0 +1,8 @@
var parent = require('../../stable/array');
require('../../modules/es.map');
require('../../modules/esnext.array.find-last');
require('../../modules/esnext.array.find-last-index');
require('../../modules/esnext.array.group-by');
require('../../modules/esnext.array.group-by-to-map');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/is-array.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/is-array');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/iterator.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/iterator');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/join.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/join');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/actual/array/keys.js
@@ -0,0 +1,3 @@
var parent = require('../../stable/array/keys');

module.exports = parent;