From 178e4d17860699b51f63ebd9f2c3960f9821657c Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Wed, 18 Oct 2017 13:35:32 +0100 Subject: [PATCH 1/2] Replace ReactDOMFeatureFlags with ReactFeatureFlags --- scripts/rollup/modules.js | 1 - src/renderers/dom/fiber/ReactDOMFiberEntry.js | 4 ++-- src/renderers/dom/shared/ReactDOMFeatureFlags.js | 16 ---------------- src/renderers/shared/utils/ReactFeatureFlags.js | 7 +++++++ 4 files changed, 9 insertions(+), 19 deletions(-) delete mode 100644 src/renderers/dom/shared/ReactDOMFeatureFlags.js diff --git a/scripts/rollup/modules.js b/scripts/rollup/modules.js index 7d4effb0196..f84fa09ee2a 100644 --- a/scripts/rollup/modules.js +++ b/scripts/rollup/modules.js @@ -124,7 +124,6 @@ function ignoreFBModules() { return [ // At FB, we don't know them statically: 'ReactFeatureFlags', - 'ReactDOMFeatureFlags', // In FB bundles, we preserve an inline require to ReactCurrentOwner. // See the explanation in FB version of ReactCurrentOwner in www: 'ReactCurrentOwner', diff --git a/src/renderers/dom/fiber/ReactDOMFiberEntry.js b/src/renderers/dom/fiber/ReactDOMFiberEntry.js index d319b9d2d87..4037960b4f3 100644 --- a/src/renderers/dom/fiber/ReactDOMFiberEntry.js +++ b/src/renderers/dom/fiber/ReactDOMFiberEntry.js @@ -17,8 +17,8 @@ var DOMNamespaces = require('DOMNamespaces'); var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment'); var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter'); var ReactControlledComponent = require('ReactControlledComponent'); +var ReactFeatureFlags = require('ReactFeatureFlags'); var ReactDOMComponentTree = require('ReactDOMComponentTree'); -var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags'); var ReactDOMFiberComponent = require('ReactDOMFiberComponent'); var ReactDOMFrameScheduling = require('ReactDOMFrameScheduling'); var ReactGenericBatching = require('ReactGenericBatching'); @@ -632,7 +632,7 @@ var DOMRenderer = ReactFiberReconciler({ scheduleDeferredCallback: ReactDOMFrameScheduling.rIC, - useSyncScheduling: !ReactDOMFeatureFlags.fiberAsyncScheduling, + useSyncScheduling: !ReactFeatureFlags.enableAsyncSchedulingByDefaultInReactDOM, }); ReactGenericBatching.injection.injectFiberBatchedUpdates( diff --git a/src/renderers/dom/shared/ReactDOMFeatureFlags.js b/src/renderers/dom/shared/ReactDOMFeatureFlags.js deleted file mode 100644 index 43f4085015b..00000000000 --- a/src/renderers/dom/shared/ReactDOMFeatureFlags.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @providesModule ReactDOMFeatureFlags - */ - -'use strict'; - -var ReactDOMFeatureFlags = { - fiberAsyncScheduling: false, -}; - -module.exports = ReactDOMFeatureFlags; diff --git a/src/renderers/shared/utils/ReactFeatureFlags.js b/src/renderers/shared/utils/ReactFeatureFlags.js index 9e3e68d1efb..259259f9293 100644 --- a/src/renderers/shared/utils/ReactFeatureFlags.js +++ b/src/renderers/shared/utils/ReactFeatureFlags.js @@ -12,6 +12,13 @@ var ReactFeatureFlags = { enableAsyncSubtreeAPI: true, + enableAsyncSchedulingByDefaultInReactDOM: false, }; +if (__DEV__) { + if (Object.freeze) { + Object.freeze(ReactFeatureFlags); + } +} + module.exports = ReactFeatureFlags; From db1de5a178a49f4aefb98fcb0b789ab73c21588e Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Wed, 18 Oct 2017 17:25:58 +0100 Subject: [PATCH 2/2] Add static injection for feature flags --- scripts/rollup/build.js | 9 ++++++--- scripts/rollup/modules.js | 18 ++++++++++++++++-- .../shared/utils/ReactFeatureFlags.js | 7 ++++++- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/scripts/rollup/build.js b/scripts/rollup/build.js index d25bb9d5e89..14dc5a6cd8f 100644 --- a/scripts/rollup/build.js +++ b/scripts/rollup/build.js @@ -372,7 +372,8 @@ function getPlugins( hasteName, moduleType, manglePropertiesOnProd, - modulesToStub + modulesToStub, + featureFlags ) { const plugins = [ babel(updateBabelConfig(babelOpts, bundleType)), @@ -383,7 +384,8 @@ function getPlugins( const replaceModules = Modules.getDefaultReplaceModules( bundleType, - modulesToStub + modulesToStub, + featureFlags ); // We have to do this check because Rollup breaks on empty object. @@ -525,7 +527,8 @@ function createBundle(bundle, bundleType) { bundle.hasteName, bundle.moduleType, bundle.manglePropertiesOnProd, - bundle.modulesToStub + bundle.modulesToStub, + bundle.featureFlags ), }) .then(result => diff --git a/scripts/rollup/modules.js b/scripts/rollup/modules.js index f84fa09ee2a..15dbebeb9fd 100644 --- a/scripts/rollup/modules.js +++ b/scripts/rollup/modules.js @@ -296,13 +296,27 @@ function getAliases(paths, bundleType, moduleType, extractErrors) { ); } -function getDefaultReplaceModules(bundleType, bundleModulesToStub) { +function replaceFeatureFlags(featureFlags) { + if (!featureFlags) { + return {}; + } + return { + "'ReactFeatureFlags'": `'${resolve(featureFlags)}'`, + }; +} + +function getDefaultReplaceModules( + bundleType, + bundleModulesToStub, + featureFlags +) { return Object.assign( {}, replaceFbjsModuleAliases(bundleType), replaceDevOnlyStubbedModules(bundleType), replaceLegacyModuleAliases(bundleType), - replaceBundleStubModules(bundleModulesToStub) + replaceBundleStubModules(bundleModulesToStub), + replaceFeatureFlags(featureFlags) ); } diff --git a/src/renderers/shared/utils/ReactFeatureFlags.js b/src/renderers/shared/utils/ReactFeatureFlags.js index 259259f9293..d60ef12f551 100644 --- a/src/renderers/shared/utils/ReactFeatureFlags.js +++ b/src/renderers/shared/utils/ReactFeatureFlags.js @@ -10,7 +10,12 @@ 'use strict'; -var ReactFeatureFlags = { +export type FeatureFlags = {| + enableAsyncSubtreeAPI: boolean, + enableAsyncSchedulingByDefaultInReactDOM: boolean, +|}; + +var ReactFeatureFlags: FeatureFlags = { enableAsyncSubtreeAPI: true, enableAsyncSchedulingByDefaultInReactDOM: false, };