diff --git a/.gitignore b/.gitignore index 34b621caa0..2d2ee52239 100644 --- a/.gitignore +++ b/.gitignore @@ -16,15 +16,19 @@ package-lock.json !/packages/babel-runtime/core-js/map.js /packages/babel-runtime/helpers/*.js !/packages/babel-runtime/helpers/toArray.js +!/packages/babel-runtime/helpers/iterableToArray.js !/packages/babel-runtime/helpers/temporalRef.js /packages/babel-runtime/helpers/builtin/*.js !/packages/babel-runtime/helpers/builtin/toArray.js +!/packages/babel-runtime/helpers/builtin/iterableToArray.js !/packages/babel-runtime/helpers/builtin/temporalRef.js /packages/babel-runtime/helpers/builtin/es6/*.js !/packages/babel-runtime/helpers/builtin/es6/toArray.js +!/packages/babel-runtime/helpers/builtin/es6/iterableToArray.js !/packages/babel-runtime/helpers/builtin/es6/temporalRef.js /packages/babel-runtime/helpers/es6/*.js !/packages/babel-runtime/helpers/es6/toArray.js +!/packages/babel-runtime/helpers/es6/iterableToArray.js !/packages/babel-runtime/helpers/es6/temporalRef.js /packages/babel-register/test/.babel /packages/babel-cli/test/tmp diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 0c379940fb..24531f015e 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -686,7 +686,7 @@ helpers.toArray = () => template.program.ast` import iterableToArray from "iterableToArray"; import nonIterableRest from "nonIterableRest"; - export default function _toConsumableArray(arr) { + export default function _toArray(arr) { return arrayWithHoles(arr) || iterableToArray(arr) || nonIterableRest(); } `; diff --git a/packages/babel-runtime/helpers/builtin/es6/iterableToArray.js b/packages/babel-runtime/helpers/builtin/es6/iterableToArray.js new file mode 100644 index 0000000000..671e400d91 --- /dev/null +++ b/packages/babel-runtime/helpers/builtin/es6/iterableToArray.js @@ -0,0 +1,3 @@ +export default function _iterableToArray(iter) { + if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); +} \ No newline at end of file diff --git a/packages/babel-runtime/helpers/builtin/es6/toArray.js b/packages/babel-runtime/helpers/builtin/es6/toArray.js index 5443502a98..5acb22b388 100644 --- a/packages/babel-runtime/helpers/builtin/es6/toArray.js +++ b/packages/babel-runtime/helpers/builtin/es6/toArray.js @@ -1,3 +1,6 @@ +import arrayWithHoles from "./arrayWithHoles"; +import iterableToArray from "./iterableToArray"; +import nonIterableRest from "./nonIterableRest"; export default function _toArray(arr) { - return Array.isArray(arr) ? arr : Array.from(arr); + return arrayWithHoles(arr) || iterableToArray(arr) || nonIterableRest(); } \ No newline at end of file diff --git a/packages/babel-runtime/helpers/builtin/iterableToArray.js b/packages/babel-runtime/helpers/builtin/iterableToArray.js new file mode 100644 index 0000000000..e917e57937 --- /dev/null +++ b/packages/babel-runtime/helpers/builtin/iterableToArray.js @@ -0,0 +1,5 @@ +function _iterableToArray(iter) { + if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); +} + +module.exports = _iterableToArray; \ No newline at end of file diff --git a/packages/babel-runtime/helpers/builtin/toArray.js b/packages/babel-runtime/helpers/builtin/toArray.js index 97107ebfeb..c28fd9e46e 100644 --- a/packages/babel-runtime/helpers/builtin/toArray.js +++ b/packages/babel-runtime/helpers/builtin/toArray.js @@ -1,5 +1,11 @@ +var arrayWithHoles = require("./arrayWithHoles"); + +var iterableToArray = require("./iterableToArray"); + +var nonIterableRest = require("./nonIterableRest"); + function _toArray(arr) { - return Array.isArray(arr) ? arr : Array.from(arr); + return arrayWithHoles(arr) || iterableToArray(arr) || nonIterableRest(); } module.exports = _toArray; \ No newline at end of file diff --git a/packages/babel-runtime/helpers/es6/iterableToArray.js b/packages/babel-runtime/helpers/es6/iterableToArray.js new file mode 100644 index 0000000000..9f20ecdbd9 --- /dev/null +++ b/packages/babel-runtime/helpers/es6/iterableToArray.js @@ -0,0 +1,5 @@ +import _Array$from from "../../core-js/array/from"; +import _isIterable from "../../core-js/is-iterable"; +export default function _iterableToArray(iter) { + if (_isIterable(Object(iter)) || Object.prototype.toString.call(iter) === "[object Arguments]") return _Array$from(iter); +} \ No newline at end of file diff --git a/packages/babel-runtime/helpers/es6/toArray.js b/packages/babel-runtime/helpers/es6/toArray.js index e14a0feb30..5acb22b388 100644 --- a/packages/babel-runtime/helpers/es6/toArray.js +++ b/packages/babel-runtime/helpers/es6/toArray.js @@ -1,4 +1,6 @@ -import _Array$from from "../../core-js/array/from"; +import arrayWithHoles from "./arrayWithHoles"; +import iterableToArray from "./iterableToArray"; +import nonIterableRest from "./nonIterableRest"; export default function _toArray(arr) { - return Array.isArray(arr) ? arr : _Array$from(arr); + return arrayWithHoles(arr) || iterableToArray(arr) || nonIterableRest(); } \ No newline at end of file diff --git a/packages/babel-runtime/helpers/iterableToArray.js b/packages/babel-runtime/helpers/iterableToArray.js new file mode 100644 index 0000000000..c7834a3122 --- /dev/null +++ b/packages/babel-runtime/helpers/iterableToArray.js @@ -0,0 +1,9 @@ +var _Array$from = require("../core-js/array/from"); + +var _isIterable = require("../core-js/is-iterable"); + +function _iterableToArray(iter) { + if (_isIterable(Object(iter)) || Object.prototype.toString.call(iter) === "[object Arguments]") return _Array$from(iter); +} + +module.exports = _iterableToArray; \ No newline at end of file diff --git a/packages/babel-runtime/helpers/toArray.js b/packages/babel-runtime/helpers/toArray.js index 6709feb464..c28fd9e46e 100644 --- a/packages/babel-runtime/helpers/toArray.js +++ b/packages/babel-runtime/helpers/toArray.js @@ -1,7 +1,11 @@ -var _Array$from = require("../core-js/array/from"); +var arrayWithHoles = require("./arrayWithHoles"); + +var iterableToArray = require("./iterableToArray"); + +var nonIterableRest = require("./nonIterableRest"); function _toArray(arr) { - return Array.isArray(arr) ? arr : _Array$from(arr); + return arrayWithHoles(arr) || iterableToArray(arr) || nonIterableRest(); } module.exports = _toArray; \ No newline at end of file