diff --git a/packages/babel-helpers/src/helpers-generated.ts b/packages/babel-helpers/src/helpers-generated.ts index 19663a2a73f2..b1b389a98b34 100644 --- a/packages/babel-helpers/src/helpers-generated.ts +++ b/packages/babel-helpers/src/helpers-generated.ts @@ -45,6 +45,14 @@ export default Object.freeze({ "7.20.1", 'export default function _checkInRHS(value){if(Object(value)!==value)throw TypeError("right-hand side of \'in\' should be an object, got "+(null!==value?typeof value:"null"));return value}', ), + iterableToArrayLimit: helper( + "7.0.0-beta.0", + 'export default function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}', + ), + iterableToArrayLimitLoose: helper( + "7.0.0-beta.0", + 'export default function _iterableToArrayLimitLoose(arr,i){var _i=arr&&("undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"]);if(null!=_i){var _s,_arr=[];for(_i=_i.call(arr);arr.length1){for(var childArray=new Array(childrenLength),i=0;i { + var [] = { + [Symbol.iterator]: () => { + return { + return: () => {}, + }; + }, + }; +}).toThrow(TypeError); + +expect(() => { + var [] = { + [Symbol.iterator]: () => { + return { + return: () => ({}), + }; + }, + }; +}).not.toThrow(); + +expect(() => { + var [x] = { + [Symbol.iterator]: () => { + return { + next: () => ({ done: false, value: 1 }), + return: () => {}, + }; + }, + }; +}).toThrow(TypeError); + +expect(() => { + var [x] = { + [Symbol.iterator]: () => { + return { + next: () => ({ done: false, value: 1 }), + return: () => ({}), + }; + }, + }; +}).not.toThrow(); diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/check-iterator-return/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/check-iterator-return/input.js new file mode 100644 index 000000000000..a79f08732cb2 --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/check-iterator-return/input.js @@ -0,0 +1,33 @@ +var [] = { + [Symbol.iterator]: () => { + return { + return: () => {}, + }; + }, +}; + +var [] = { + [Symbol.iterator]: () => { + return { + return: () => ({}), + }; + }, +}; + +var [x] = { + [Symbol.iterator]: () => { + return { + next: () => ({ done: false, value: 1 }), + return: () => {}, + }; + }, +}; + +var [x] = { + [Symbol.iterator]: () => { + return { + next: () => ({ done: false, value: 1 }), + return: () => ({}), + }; + }, +}; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/check-iterator-return/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/check-iterator-return/output.js new file mode 100644 index 000000000000..7bdc193b7308 --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/check-iterator-return/output.js @@ -0,0 +1,42 @@ +var _Symbol$iterator = { + [Symbol.iterator]: () => { + return { + return: () => {} + }; + } + }, + _Symbol$iterator2 = babelHelpers.slicedToArray(_Symbol$iterator, 0); +var _Symbol$iterator3 = { + [Symbol.iterator]: () => { + return { + return: () => ({}) + }; + } + }, + _Symbol$iterator4 = babelHelpers.slicedToArray(_Symbol$iterator3, 0); +var _Symbol$iterator5 = { + [Symbol.iterator]: () => { + return { + next: () => ({ + done: false, + value: 1 + }), + return: () => {} + }; + } + }, + _Symbol$iterator6 = babelHelpers.slicedToArray(_Symbol$iterator5, 1), + x = _Symbol$iterator6[0]; +var _Symbol$iterator7 = { + [Symbol.iterator]: () => { + return { + next: () => ({ + done: false, + value: 1 + }), + return: () => ({}) + }; + } + }, + _Symbol$iterator8 = babelHelpers.slicedToArray(_Symbol$iterator7, 1), + x = _Symbol$iterator8[0]; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/exec.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/exec.js new file mode 100644 index 000000000000..4a74739479ba --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/exec.js @@ -0,0 +1,38 @@ +expect(() => { + var [] = null; +}).toThrow(TypeError); + +expect(() => { + var [] = 42; +}).toThrow(TypeError); + +expect(() => { + var [] = {}; +}).toThrow(TypeError); + +expect(() => { + var [] = { [Symbol.iterator]: () => {} }; +}).toThrow(TypeError); + +expect(() => { + var [] = []; + var [] = [0, 1, 2]; + var [] = "foo"; + var [] = (function*() { throw new Error("Should not throw"); })(); + var [] = { [Symbol.iterator]: () => ({}) }; + var [] = { [Symbol.iterator]: () => () => {} }; + var [] = { [Symbol.iterator]: async function*() {} }; +}).not.toThrow(); + +var returnCalled = false; +var [] = { + [Symbol.iterator]: () => { + return { + return: () => { + returnCalled = true; + return {}; + }, + }; + }, +}; +expect(returnCalled).toStrictEqual(true); diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/input.js new file mode 100644 index 000000000000..064f8902399d --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/input.js @@ -0,0 +1,24 @@ +var [] = null; +var [] = 42; +var [] = {}; +var [] = { [Symbol.iterator]: () => {} }; + +var [] = []; +var [] = [0, 1, 2]; +var [] = "foo"; +var [] = (function*() { throw new Error("Should not throw"); })(); +var [] = { [Symbol.iterator]: () => ({}) }; +var [] = { [Symbol.iterator]: () => () => {} }; +var [] = { [Symbol.iterator]: async function*() {} }; + +var returnCalled = false; +var [] = { + [Symbol.iterator]: () => { + return { + return: () => { + returnCalled = true; + return {}; + }, + }; + }, +}; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/output.js new file mode 100644 index 000000000000..a5f12c42ff7a --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/empty-array-pattern/output.js @@ -0,0 +1,61 @@ +var _ref = null, + _ref2 = babelHelpers.slicedToArray(_ref, 0); +var _ = 42, + _ref3 = babelHelpers.slicedToArray(_, 0); +var _ref4 = {}, + _ref5 = babelHelpers.slicedToArray(_ref4, 0); +var _Symbol$iterator = { + [Symbol.iterator]: () => {} + }, + _Symbol$iterator2 = babelHelpers.slicedToArray(_Symbol$iterator, 0); +var _ref6 = [0, 1, 2]; +var _foo = "foo", + _foo2 = babelHelpers.slicedToArray(_foo, 0); +var _ref7 = /*#__PURE__*/babelHelpers.regeneratorRuntime().mark(function _callee() { + return babelHelpers.regeneratorRuntime().wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + throw new Error("Should not throw"); + case 1: + case "end": + return _context.stop(); + } + } + }, _callee); + })(), + _ref8 = babelHelpers.slicedToArray(_ref7, 0); +var _Symbol$iterator3 = { + [Symbol.iterator]: () => ({}) + }, + _Symbol$iterator4 = babelHelpers.slicedToArray(_Symbol$iterator3, 0); +var _Symbol$iterator5 = { + [Symbol.iterator]: () => () => {} + }, + _Symbol$iterator6 = babelHelpers.slicedToArray(_Symbol$iterator5, 0); +var _Symbol$iterator7 = { + [Symbol.iterator]: /*#__PURE__*/babelHelpers.regeneratorRuntime().mark(function _callee2() { + return babelHelpers.regeneratorRuntime().async(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + case "end": + return _context2.stop(); + } + } + }, _callee2, null, null, Promise); + }) + }, + _Symbol$iterator8 = babelHelpers.slicedToArray(_Symbol$iterator7, 0); +var returnCalled = false; +var _Symbol$iterator9 = { + [Symbol.iterator]: () => { + return { + return: () => { + returnCalled = true; + return {}; + } + }; + } + }, + _Symbol$iterator10 = babelHelpers.slicedToArray(_Symbol$iterator9, 0); diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/init-hole/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/init-hole/output.js index 05a00e9b37d5..8ea1f3daea16 100644 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/init-hole/output.js +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/init-hole/output.js @@ -45,7 +45,7 @@ try { expect(thrown).toEqual(true); try { thrown = false; - var _ = babelHelpers.toArray(void 0); + var _ = babelHelpers.slicedToArray(void 0, 0); } catch (e) { thrown = true; } diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/next-eval-once/exec.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/next-eval-once/exec.js new file mode 100644 index 000000000000..3c996571bae4 --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/next-eval-once/exec.js @@ -0,0 +1,22 @@ +let gets = 0; +let it = { + [Symbol.iterator]: () => ({ + get next() { + gets++; + let i = 0; + return () => ({ done: false, value: i++ }); + }, + }), +}; + +let [] = it; +expect(gets).toBe(1); + +let [a] = it; +expect(gets).toBe(2); +expect(a).toBe(0); + +let [b, c] = it; +expect(gets).toBe(3); +expect(b).toBe(0); +expect(c).toBe(1); diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/exec.js b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/exec.js new file mode 100644 index 000000000000..200fe886738f --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/exec.js @@ -0,0 +1,3 @@ +expect(() => { + var [] = { [Symbol.iterator]: () => [] }; +}).not.toThrow(); diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/input.js new file mode 100644 index 000000000000..fa976372b57a --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/input.js @@ -0,0 +1 @@ +var [] = { [Symbol.iterator]: () => [] }; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/options.json b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/options.json new file mode 100644 index 000000000000..84e28c07f51e --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-destructuring"] +} diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/output.js new file mode 100644 index 000000000000..678e2655ef49 --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15154/output.js @@ -0,0 +1,4 @@ +var _Symbol$iterator = { + [Symbol.iterator]: () => [] + }, + _Symbol$iterator2 = babelHelpers.slicedToArray(_Symbol$iterator, 0); diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/exec.js b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/exec.js new file mode 100644 index 000000000000..d1a3ff74de70 --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/exec.js @@ -0,0 +1,3 @@ +expect(() => { + var [] = { [Symbol.iterator]: () => async function* () {} }; +}).not.toThrow(); diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/input.js new file mode 100644 index 000000000000..e7edfef99ff4 --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/input.js @@ -0,0 +1 @@ +var [] = { [Symbol.iterator]: () => async function* () {} }; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/options.json b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/options.json new file mode 100644 index 000000000000..bcd3c208a8bc --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + "transform-destructuring", + "transform-regenerator" + ] +} diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/output.js new file mode 100644 index 000000000000..cf218b07135d --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/regression/15168/output.js @@ -0,0 +1,12 @@ +var _Symbol$iterator = { + [Symbol.iterator]: () => /*#__PURE__*/babelHelpers.regeneratorRuntime().mark(function _callee() { + return babelHelpers.regeneratorRuntime().async(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + case "end": + return _context.stop(); + } + }, _callee, null, null, Promise); + }) + }, + _Symbol$iterator2 = babelHelpers.slicedToArray(_Symbol$iterator, 0); diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/T7199/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/T7199/output.js index 1a24ee595677..57d7b6094b99 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/T7199/output.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/regression/T7199/output.js @@ -6,7 +6,7 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } -function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } +function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } const _bar = bar, _bar2 = _slicedToArray(_bar, 1), diff --git a/packages/babel-preset-env/test/fixtures/plugins-integration/issue-15012/output.js b/packages/babel-preset-env/test/fixtures/plugins-integration/issue-15012/output.js index ddfdfaa2c8ac..c273d4c8d716 100644 --- a/packages/babel-preset-env/test/fixtures/plugins-integration/issue-15012/output.js +++ b/packages/babel-preset-env/test/fixtures/plugins-integration/issue-15012/output.js @@ -1,5 +1,5 @@ function f(_ref) { - var _ref2 = babelHelpers.toArray(_ref); + var _ref2 = babelHelpers.slicedToArray(_ref, 0); return /*#__PURE__*/babelHelpers.regeneratorRuntime().mark(function _callee() { return babelHelpers.regeneratorRuntime().wrap(function _callee$(_context) { while (1) { diff --git a/packages/babel-runtime-corejs2/package.json b/packages/babel-runtime-corejs2/package.json index a2c11cde470c..f56115a1007d 100644 --- a/packages/babel-runtime-corejs2/package.json +++ b/packages/babel-runtime-corejs2/package.json @@ -90,6 +90,24 @@ "./helpers/checkInRHS.js" ], "./helpers/esm/checkInRHS": "./helpers/esm/checkInRHS.js", + "./helpers/iterableToArrayLimit": [ + { + "node": "./helpers/iterableToArrayLimit.js", + "import": "./helpers/esm/iterableToArrayLimit.js", + "default": "./helpers/iterableToArrayLimit.js" + }, + "./helpers/iterableToArrayLimit.js" + ], + "./helpers/esm/iterableToArrayLimit": "./helpers/esm/iterableToArrayLimit.js", + "./helpers/iterableToArrayLimitLoose": [ + { + "node": "./helpers/iterableToArrayLimitLoose.js", + "import": "./helpers/esm/iterableToArrayLimitLoose.js", + "default": "./helpers/iterableToArrayLimitLoose.js" + }, + "./helpers/iterableToArrayLimitLoose.js" + ], + "./helpers/esm/iterableToArrayLimitLoose": "./helpers/esm/iterableToArrayLimitLoose.js", "./helpers/jsx": [ { "node": "./helpers/jsx.js", @@ -558,24 +576,6 @@ "./helpers/iterableToArray.js" ], "./helpers/esm/iterableToArray": "./helpers/esm/iterableToArray.js", - "./helpers/iterableToArrayLimit": [ - { - "node": "./helpers/iterableToArrayLimit.js", - "import": "./helpers/esm/iterableToArrayLimit.js", - "default": "./helpers/iterableToArrayLimit.js" - }, - "./helpers/iterableToArrayLimit.js" - ], - "./helpers/esm/iterableToArrayLimit": "./helpers/esm/iterableToArrayLimit.js", - "./helpers/iterableToArrayLimitLoose": [ - { - "node": "./helpers/iterableToArrayLimitLoose.js", - "import": "./helpers/esm/iterableToArrayLimitLoose.js", - "default": "./helpers/iterableToArrayLimitLoose.js" - }, - "./helpers/iterableToArrayLimitLoose.js" - ], - "./helpers/esm/iterableToArrayLimitLoose": "./helpers/esm/iterableToArrayLimitLoose.js", "./helpers/unsupportedIterableToArray": [ { "node": "./helpers/unsupportedIterableToArray.js", diff --git a/packages/babel-runtime-corejs3/package.json b/packages/babel-runtime-corejs3/package.json index 4b509a8cfa17..b71528df708f 100644 --- a/packages/babel-runtime-corejs3/package.json +++ b/packages/babel-runtime-corejs3/package.json @@ -89,6 +89,24 @@ "./helpers/checkInRHS.js" ], "./helpers/esm/checkInRHS": "./helpers/esm/checkInRHS.js", + "./helpers/iterableToArrayLimit": [ + { + "node": "./helpers/iterableToArrayLimit.js", + "import": "./helpers/esm/iterableToArrayLimit.js", + "default": "./helpers/iterableToArrayLimit.js" + }, + "./helpers/iterableToArrayLimit.js" + ], + "./helpers/esm/iterableToArrayLimit": "./helpers/esm/iterableToArrayLimit.js", + "./helpers/iterableToArrayLimitLoose": [ + { + "node": "./helpers/iterableToArrayLimitLoose.js", + "import": "./helpers/esm/iterableToArrayLimitLoose.js", + "default": "./helpers/iterableToArrayLimitLoose.js" + }, + "./helpers/iterableToArrayLimitLoose.js" + ], + "./helpers/esm/iterableToArrayLimitLoose": "./helpers/esm/iterableToArrayLimitLoose.js", "./helpers/jsx": [ { "node": "./helpers/jsx.js", @@ -557,24 +575,6 @@ "./helpers/iterableToArray.js" ], "./helpers/esm/iterableToArray": "./helpers/esm/iterableToArray.js", - "./helpers/iterableToArrayLimit": [ - { - "node": "./helpers/iterableToArrayLimit.js", - "import": "./helpers/esm/iterableToArrayLimit.js", - "default": "./helpers/iterableToArrayLimit.js" - }, - "./helpers/iterableToArrayLimit.js" - ], - "./helpers/esm/iterableToArrayLimit": "./helpers/esm/iterableToArrayLimit.js", - "./helpers/iterableToArrayLimitLoose": [ - { - "node": "./helpers/iterableToArrayLimitLoose.js", - "import": "./helpers/esm/iterableToArrayLimitLoose.js", - "default": "./helpers/iterableToArrayLimitLoose.js" - }, - "./helpers/iterableToArrayLimitLoose.js" - ], - "./helpers/esm/iterableToArrayLimitLoose": "./helpers/esm/iterableToArrayLimitLoose.js", "./helpers/unsupportedIterableToArray": [ { "node": "./helpers/unsupportedIterableToArray.js", diff --git a/packages/babel-runtime/package.json b/packages/babel-runtime/package.json index e7f9e12930ad..c3022f2f2aad 100644 --- a/packages/babel-runtime/package.json +++ b/packages/babel-runtime/package.json @@ -89,6 +89,24 @@ "./helpers/checkInRHS.js" ], "./helpers/esm/checkInRHS": "./helpers/esm/checkInRHS.js", + "./helpers/iterableToArrayLimit": [ + { + "node": "./helpers/iterableToArrayLimit.js", + "import": "./helpers/esm/iterableToArrayLimit.js", + "default": "./helpers/iterableToArrayLimit.js" + }, + "./helpers/iterableToArrayLimit.js" + ], + "./helpers/esm/iterableToArrayLimit": "./helpers/esm/iterableToArrayLimit.js", + "./helpers/iterableToArrayLimitLoose": [ + { + "node": "./helpers/iterableToArrayLimitLoose.js", + "import": "./helpers/esm/iterableToArrayLimitLoose.js", + "default": "./helpers/iterableToArrayLimitLoose.js" + }, + "./helpers/iterableToArrayLimitLoose.js" + ], + "./helpers/esm/iterableToArrayLimitLoose": "./helpers/esm/iterableToArrayLimitLoose.js", "./helpers/jsx": [ { "node": "./helpers/jsx.js", @@ -557,24 +575,6 @@ "./helpers/iterableToArray.js" ], "./helpers/esm/iterableToArray": "./helpers/esm/iterableToArray.js", - "./helpers/iterableToArrayLimit": [ - { - "node": "./helpers/iterableToArrayLimit.js", - "import": "./helpers/esm/iterableToArrayLimit.js", - "default": "./helpers/iterableToArrayLimit.js" - }, - "./helpers/iterableToArrayLimit.js" - ], - "./helpers/esm/iterableToArrayLimit": "./helpers/esm/iterableToArrayLimit.js", - "./helpers/iterableToArrayLimitLoose": [ - { - "node": "./helpers/iterableToArrayLimitLoose.js", - "import": "./helpers/esm/iterableToArrayLimitLoose.js", - "default": "./helpers/iterableToArrayLimitLoose.js" - }, - "./helpers/iterableToArrayLimitLoose.js" - ], - "./helpers/esm/iterableToArrayLimitLoose": "./helpers/esm/iterableToArrayLimitLoose.js", "./helpers/unsupportedIterableToArray": [ { "node": "./helpers/unsupportedIterableToArray.js", diff --git a/packages/babel-traverse/src/scope/index.ts b/packages/babel-traverse/src/scope/index.ts index b858d452462e..1019f398bb15 100644 --- a/packages/babel-traverse/src/scope/index.ts +++ b/packages/babel-traverse/src/scope/index.ts @@ -686,7 +686,7 @@ export default class Scope { if (i === true) { // Used in array-spread to create an array. helperName = "toConsumableArray"; - } else if (i) { + } else if (typeof i === "number") { args.push(numericLiteral(i)); // Used in array-rest to create an array from a subset of an iterable.