From 017b026a165cf4e76d09d33fdf524ce8ab9a467d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Thu, 5 Sep 2019 12:24:05 -0400 Subject: [PATCH] fix: early return when instance is not iterable --- packages/babel-helpers/src/helpers.js | 3 ++- .../test/fixtures/destructuring/non-iterable/exec.js | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/non-iterable/exec.js diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index ef9231df6ff4..45b5cc815346 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");