Merge pull request #5085 from spicyj/cdp

Extract defineProperty feature testing to one file
(cherry picked from commit 2253405dcc)
This commit is contained in:
Ben Alpert
2015-10-08 11:33:07 -07:00
committed by Paul O’Shannessy
parent fb620be2b8
commit fdb2486b98
6 changed files with 32 additions and 23 deletions
+1 -10
View File
@@ -14,6 +14,7 @@
var ReactCurrentOwner = require('ReactCurrentOwner');
var assign = require('Object.assign');
var canDefineProperty = require('canDefineProperty');
// The Symbol used to tag the ReactElement type. If there is no native Symbol
// nor polyfill, then a plain number is used for performance.
@@ -28,16 +29,6 @@ var RESERVED_PROPS = {
__source: true,
};
var canDefineProperty = false;
if (__DEV__) {
try {
Object.defineProperty({}, 'x', {});
canDefineProperty = true;
} catch (x) {
// IE will fail on defineProperty
}
}
/**
* Base constructor for all React elements. This is only used to make this
* work with a dynamic instanceof check. Nothing should live on this prototype.
@@ -23,6 +23,7 @@ var ReactPropTypeLocations = require('ReactPropTypeLocations');
var ReactPropTypeLocationNames = require('ReactPropTypeLocationNames');
var ReactCurrentOwner = require('ReactCurrentOwner');
var canDefineProperty = require('canDefineProperty');
var getIteratorFn = require('getIteratorFn');
var invariant = require('invariant');
var warning = require('warning');
@@ -298,7 +299,7 @@ var ReactElementValidator = {
validatedFactory.type = type;
if (__DEV__) {
try {
if (canDefineProperty) {
Object.defineProperty(
validatedFactory,
'type',
@@ -317,8 +318,6 @@ var ReactElementValidator = {
},
}
);
} catch (x) {
// IE will fail on defineProperty (es5-shim/sham too)
}
}
@@ -13,6 +13,7 @@
var ReactNoopUpdateQueue = require('ReactNoopUpdateQueue');
var canDefineProperty = require('canDefineProperty');
var emptyObject = require('emptyObject');
var invariant = require('invariant');
var warning = require('warning');
@@ -129,7 +130,7 @@ if (__DEV__) {
],
};
var defineDeprecationWarning = function(methodName, info) {
try {
if (canDefineProperty) {
Object.defineProperty(ReactComponent.prototype, methodName, {
get: function() {
warning(
@@ -141,8 +142,6 @@ if (__DEV__) {
return undefined;
},
});
} catch (x) {
// IE will fail on defineProperty (es5-shim/sham too)
}
};
for (var fnName in deprecatedAPIs) {
@@ -180,6 +180,8 @@ function startWatchingForValueChange(target, targetID) {
'value'
);
// Not guarded in a canDefineProperty check: IE8 supports defineProperty only
// on DOM elements
Object.defineProperty(activeElement, 'value', newValueProp);
activeElement.attachEvent('onpropertychange', handlePropertyChange);
}
@@ -33,6 +33,7 @@ var ReactPerf = require('ReactPerf');
var ReactUpdateQueue = require('ReactUpdateQueue');
var assign = require('Object.assign');
var canDefineProperty = require('canDefineProperty');
var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
var invariant = require('invariant');
var isEventSupported = require('isEventSupported');
@@ -54,13 +55,6 @@ var STYLE = keyOf({style: null});
var ELEMENT_NODE_TYPE = 1;
var canDefineProperty = false;
try {
Object.defineProperty({}, 'test', {get: function() {}});
canDefineProperty = true;
} catch (e) {
}
function getDeclarationErrorAddendum(internalInstance) {
if (internalInstance) {
var owner = internalInstance._currentElement._owner || null;
+24
View File
@@ -0,0 +1,24 @@
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule canDefineProperty
*/
'use strict';
var canDefineProperty = false;
if (__DEV__) {
try {
Object.defineProperty({}, 'x', {});
canDefineProperty = true;
} catch (x) {
// IE will fail on defineProperty
}
}
module.exports = canDefineProperty;