From 0ba83923647891f05e3ee8cc5311c83c47fc478d Mon Sep 17 00:00:00 2001 From: Sharmila Date: Tue, 30 Oct 2018 23:19:28 -0700 Subject: [PATCH] Fixes #7597 Ensure that `Symbol` exists and is a function before using it. We ran into an issue with the usage of `Symbol` breaking on ie11 because it is not supported. --- packages/babel-helpers/src/helpers.js | 6 ++++-- .../babel-runtime/helpers/esm/iterableToArray.js | 12 ++++++++++-- packages/babel-runtime/helpers/iterableToArray.js | 10 +++++++++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 7aa8518aec2f..55c3d404e8f2 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -1539,7 +1539,8 @@ helpers.decorate = helper("7.0.2")` value: "Descriptor", configurable: true, }; - Object.defineProperty(obj, Symbol.toStringTag, desc); + + if (typeof Symbol === 'function' && Symbol.toStringTag) Object.defineProperty(obj, Symbol.toStringTag, desc); if (element.kind === "field") obj.initializer = element.initializer; @@ -1653,7 +1654,8 @@ helpers.decorate = helper("7.0.2")` }; var desc = { value: "Descriptor", configurable: true }; - Object.defineProperty(obj, Symbol.toStringTag, desc); + + if (typeof Symbol === 'function' && Symbol.toStringTag) Object.defineProperty(obj, Symbol.toStringTag, desc); return obj; } diff --git a/packages/babel-runtime/helpers/esm/iterableToArray.js b/packages/babel-runtime/helpers/esm/iterableToArray.js index 671e400d9166..e20f3581c3cf 100644 --- a/packages/babel-runtime/helpers/esm/iterableToArray.js +++ b/packages/babel-runtime/helpers/esm/iterableToArray.js @@ -1,3 +1,11 @@ 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 + if ( + Array.isArray(iter) + || typeof iter === 'string' + || (typeof Symbol === 'function' && Symbol.iterator in Object(iter)) + || (iter && 'length' in iter) + || (typeof Map !== 'undefined' && iter instanceof Map) + || (typeof Set !== 'undefined' && iter instanceof Set) + || Object.prototype.toString.call(iter) === "[object Arguments]" + ) return Array.from(iter); +} diff --git a/packages/babel-runtime/helpers/iterableToArray.js b/packages/babel-runtime/helpers/iterableToArray.js index e917e57937bf..2b03c898b641 100644 --- a/packages/babel-runtime/helpers/iterableToArray.js +++ b/packages/babel-runtime/helpers/iterableToArray.js @@ -1,5 +1,13 @@ function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); + if ( + Array.isArray(iter) + || typeof iter === 'string' + || (typeof Symbol === 'function' && Symbol.iterator in Object(iter)) + || (iter && 'length' in iter) + || (typeof Map !== 'undefined' && iter instanceof Map) + || (typeof Set !== 'undefined' && iter instanceof Set) + || Object.prototype.toString.call(iter) === "[object Arguments]" + ) return Array.from(iter); } module.exports = _iterableToArray; \ No newline at end of file