From 835c21a5ef52a2f29180c4ffc046bebb14d07eb3 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Mon, 1 May 2017 13:23:37 -0700 Subject: [PATCH] Don't prevent extensions on Fiber if using bad Map polyfill (#9572) Many Map polyfills work by adding an extra field to the key type. In the future, we'll likely print a warning. --- src/renderers/shared/fiber/ReactFiber.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/renderers/shared/fiber/ReactFiber.js b/src/renderers/shared/fiber/ReactFiber.js index 19a8c906fe..99defaceb4 100644 --- a/src/renderers/shared/fiber/ReactFiber.js +++ b/src/renderers/shared/fiber/ReactFiber.js @@ -49,6 +49,18 @@ var invariant = require('fbjs/lib/invariant'); if (__DEV__) { var getComponentName = require('getComponentName'); + + var hasBadMapPolyfill = false; + try { + const nonExtensibleObject = Object.preventExtensions({}); + /* eslint-disable no-new */ + new Map([[nonExtensibleObject, null]]); + new Set([nonExtensibleObject]); + /* eslint-enable no-new */ + } catch (e) { + // TODO: Consider warning about bad polyfills + hasBadMapPolyfill = true; + } } // A Fiber is work on a Component that needs to be done or was done. There can @@ -234,7 +246,7 @@ var createFiber = function( fiber._debugSource = null; fiber._debugOwner = null; fiber._debugIsCurrentlyTiming = false; - if (typeof Object.preventExtensions === 'function') { + if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') { Object.preventExtensions(fiber); } }