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;