@samitouri / QOS-React / commits / dee604dbe2

Add static injection for feature flags (#11269)

* Replace ReactDOMFeatureFlags with ReactFeatureFlags * Add static injection for feature flags

Dan Abramov committed Oct 18, 2017 at 18:40 UTC dee604dbe287b34918073110c425078583f8fd9a
5 files changed +37 -25
scripts/rollup/build.js
+6 -3
@@ -372,7 +372,8 @@ function getPlugins(
372 hasteName,
373 moduleType,
374 manglePropertiesOnProd,
375 - modulesToStub
375 + modulesToStub,
376 + featureFlags
377 ) {
378 const plugins = [
379 babel(updateBabelConfig(babelOpts, bundleType)),
@@ -383,7 +384,8 @@ function getPlugins(
384
385 const replaceModules = Modules.getDefaultReplaceModules(
386 bundleType,
386 - modulesToStub
387 + modulesToStub,
388 + featureFlags
389 );
390
391 // We have to do this check because Rollup breaks on empty object.
@@ -525,7 +527,8 @@ function createBundle(bundle, bundleType) {
527 bundle.hasteName,
528 bundle.moduleType,
529 bundle.manglePropertiesOnProd,
528 - bundle.modulesToStub
530 + bundle.modulesToStub,
531 + bundle.featureFlags
532 ),
533 })
534 .then(result =>
scripts/rollup/modules.js
+16 -3
@@ -124,7 +124,6 @@ function ignoreFBModules() {
124 return [
125 // At FB, we don't know them statically:
126 'ReactFeatureFlags',
127 - 'ReactDOMFeatureFlags',
127 // In FB bundles, we preserve an inline require to ReactCurrentOwner.
128 // See the explanation in FB version of ReactCurrentOwner in www:
129 'ReactCurrentOwner',
@@ -297,13 +296,27 @@ function getAliases(paths, bundleType, moduleType, extractErrors) {
296 );
297 }
298
300 -function getDefaultReplaceModules(bundleType, bundleModulesToStub) {
299 +function replaceFeatureFlags(featureFlags) {
300 + if (!featureFlags) {
301 + return {};
302 + }
303 + return {
304 + "'ReactFeatureFlags'": `'${resolve(featureFlags)}'`,
305 + };
306 +}
307 +
308 +function getDefaultReplaceModules(
309 + bundleType,
310 + bundleModulesToStub,
311 + featureFlags
312 +) {
313 return Object.assign(
314 {},
315 replaceFbjsModuleAliases(bundleType),
316 replaceDevOnlyStubbedModules(bundleType),
317 replaceLegacyModuleAliases(bundleType),
306 - replaceBundleStubModules(bundleModulesToStub)
318 + replaceBundleStubModules(bundleModulesToStub),
319 + replaceFeatureFlags(featureFlags)
320 );
321 }
322
src/renderers/dom/fiber/ReactDOMFiberEntry.js
+2 -2
@@ -17,8 +17,8 @@ var DOMNamespaces = require('DOMNamespaces');
17 var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
18 var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
19 var ReactControlledComponent = require('ReactControlledComponent');
20 +var ReactFeatureFlags = require('ReactFeatureFlags');
21 var ReactDOMComponentTree = require('ReactDOMComponentTree');
21 -var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
22 var ReactDOMFiberComponent = require('ReactDOMFiberComponent');
23 var ReactDOMFrameScheduling = require('ReactDOMFrameScheduling');
24 var ReactGenericBatching = require('ReactGenericBatching');
@@ -632,7 +632,7 @@ var DOMRenderer = ReactFiberReconciler({
632
633 scheduleDeferredCallback: ReactDOMFrameScheduling.rIC,
634
635 - useSyncScheduling: !ReactDOMFeatureFlags.fiberAsyncScheduling,
635 + useSyncScheduling: !ReactFeatureFlags.enableAsyncSchedulingByDefaultInReactDOM,
636 });
637
638 ReactGenericBatching.injection.injectFiberBatchedUpdates(
src/renderers/dom/shared/ReactDOMFeatureFlags.js deleted
-16
@@ -1,16 +0,0 @@
1 -/**
2 - * Copyright (c) 2013-present, Facebook, Inc.
3 - *
4 - * This source code is licensed under the MIT license found in the
5 - * LICENSE file in the root directory of this source tree.
6 - *
7 - * @providesModule ReactDOMFeatureFlags
8 - */
9 -
10 -'use strict';
11 -
12 -var ReactDOMFeatureFlags = {
13 - fiberAsyncScheduling: false,
14 -};
15 -
16 -module.exports = ReactDOMFeatureFlags;
src/renderers/shared/utils/ReactFeatureFlags.js
+13 -1
@@ -10,8 +10,20 @@
10
11 'use strict';
12
13 -var ReactFeatureFlags = {
13 +export type FeatureFlags = {|
14 + enableAsyncSubtreeAPI: boolean,
15 + enableAsyncSchedulingByDefaultInReactDOM: boolean,
16 +|};
17 +
18 +var ReactFeatureFlags: FeatureFlags = {
19 enableAsyncSubtreeAPI: true,
20 + enableAsyncSchedulingByDefaultInReactDOM: false,
21 };
22
23 +if (__DEV__) {
24 + if (Object.freeze) {
25 + Object.freeze(ReactFeatureFlags);
26 + }
27 +}
28 +
29 module.exports = ReactFeatureFlags;