diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index ef9231df6ff4..5a2856d0da8c 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -943,7 +943,7 @@ helpers.iterableToArrayLimit = helper("7.0.0-beta.0")` // _e = _iteratorError // _i = _iterator // _s = _step - + if (!(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; @@ -969,6 +969,7 @@ helpers.iterableToArrayLimit = helper("7.0.0-beta.0")` helpers.iterableToArrayLimitLoose = helper("7.0.0-beta.0")` export default function _iterableToArrayLimitLoose(arr, i) { + if (!(Symbol.iterator in Object(arr))) return; var _arr = []; for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { _arr.push(_step.value); diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/non-iterable/exec.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/non-iterable/exec.js new file mode 100644 index 000000000000..83099c46c4f4 --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/non-iterable/exec.js @@ -0,0 +1,9 @@ +expect( + () => { + var [foo, bar] = undefined; + }).toThrow("Invalid attempt to destructure non-iterable instance"); + +expect( + () => { + var foo = [ ...undefined ]; + }).toThrow("Invalid attempt to spread non-iterable instance");