Skip to content

Commit 8777b44

Browse files
authored
Add Modern WWW build (#18028)
* Build both stable and experimental WWW builds * Flip already experimental WWW flags to true * Remove FB-specific internals from modern FB builds We think we're not going to need these. * Disable classic features in modern WWW builds * Disable legacy ReactDOM API for modern WWW build * Don’t include user timing in prod * Fix bad copy paste and add missing flags to test renderer * Add testing WWW feature flag file We need it because WWW has a different meaning of experimental now.
1 parent 58b8797 commit 8777b44

14 files changed

+143
-49
lines changed

packages/react-dom/src/client/ReactDOM.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import ReactVersion from 'shared/ReactVersion';
5656
import invariant from 'shared/invariant';
5757
import {
5858
exposeConcurrentModeAPIs,
59+
disableLegacyReactDOMAPIs,
5960
disableUnstableCreatePortal,
6061
disableUnstableRenderSubtreeIntoContainer,
6162
warnUnstableRenderSubtreeIntoContainer,
@@ -133,12 +134,6 @@ function createPortal(
133134
const ReactDOM: Object = {
134135
createPortal,
135136

136-
// Legacy
137-
findDOMNode,
138-
hydrate,
139-
render,
140-
unmountComponentAtNode,
141-
142137
unstable_batchedUpdates: batchedUpdates,
143138

144139
flushSync: flushSync,
@@ -166,6 +161,13 @@ const ReactDOM: Object = {
166161
version: ReactVersion,
167162
};
168163

164+
if (!disableLegacyReactDOMAPIs) {
165+
ReactDOM.findDOMNode = findDOMNode;
166+
ReactDOM.hydrate = hydrate;
167+
ReactDOM.render = render;
168+
ReactDOM.unmountComponentAtNode = unmountComponentAtNode;
169+
}
170+
169171
if (exposeConcurrentModeAPIs) {
170172
ReactDOM.createRoot = createRoot;
171173
ReactDOM.createBlockingRoot = createBlockingRoot;

packages/react-dom/src/client/ReactDOMFB.js

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,24 @@ import ReactDOM from './ReactDOM';
1313
import {isEnabled} from '../events/ReactBrowserEventEmitter';
1414
import {getClosestInstanceFromNode} from './ReactDOMComponentTree';
1515

16-
Object.assign(
17-
(ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: any),
18-
{
19-
// These are real internal dependencies that are trickier to remove:
20-
ReactBrowserEventEmitter: {
21-
isEnabled,
16+
if (__EXPERIMENTAL__) {
17+
// This is a modern WWW build.
18+
// It should be the same as open source. Don't add new things here.
19+
} else {
20+
// For classic WWW builds, include a few internals that are already in use.
21+
Object.assign(
22+
(ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: any),
23+
{
24+
ReactBrowserEventEmitter: {
25+
isEnabled,
26+
},
27+
ReactDOMComponentTree: {
28+
getClosestInstanceFromNode,
29+
},
30+
// Perf experiment
31+
addUserTimingListener,
2232
},
23-
ReactDOMComponentTree: {
24-
getClosestInstanceFromNode,
25-
},
26-
// Perf experiment
27-
addUserTimingListener,
28-
},
29-
);
33+
);
34+
}
3035

3136
export default ReactDOM;

packages/react-reconciler/src/ReactFiber.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,9 @@ export function createWorkInProgress(
425425

426426
if (__DEV__) {
427427
// DEV-only fields
428-
workInProgress._debugID = current._debugID;
428+
if (enableUserTimingAPI) {
429+
workInProgress._debugID = current._debugID;
430+
}
429431
workInProgress._debugSource = current._debugSource;
430432
workInProgress._debugOwner = current._debugOwner;
431433
workInProgress._debugHookTypes = current._debugHookTypes;
@@ -958,7 +960,9 @@ export function assignFiberPropertiesInDEV(
958960
target.selfBaseDuration = source.selfBaseDuration;
959961
target.treeBaseDuration = source.treeBaseDuration;
960962
}
961-
target._debugID = source._debugID;
963+
if (enableUserTimingAPI) {
964+
target._debugID = source._debugID;
965+
}
962966
target._debugSource = source._debugSource;
963967
target._debugOwner = source._debugOwner;
964968
target._debugIsCurrentlyTiming = source._debugIsCurrentlyTiming;

packages/shared/ReactFeatureFlags.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ export const disableLegacyContext = false;
114114
// Disables React.createFactory
115115
export const disableCreateFactory = false;
116116

117+
// Disables hydrate, render, findDOMNode, unmountComponentAtNode
118+
export const disableLegacyReactDOMAPIs = false;
119+
117120
// Disables children for <textarea> elements
118121
export const disableTextareaChildren = false;
119122

packages/shared/forks/ReactFeatureFlags.native-fb.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import invariant from 'shared/invariant';
1111

1212
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
13-
import typeof * as FeatureFlagsShimType from './ReactFeatureFlags.native-fb';
13+
import typeof * as ExportsType from './ReactFeatureFlags.native-fb';
1414

1515
// Uncomment to re-export dynamic flags from the fbsource version.
1616
export const {
@@ -46,6 +46,7 @@ export const disableSchedulerTimeoutBasedOnReactExpirationTime = false;
4646
export const enableTrainModelFix = true;
4747
export const enableTrustedTypesIntegration = false;
4848
export const disableCreateFactory = false;
49+
export const disableLegacyReactDOMAPIs = false;
4950
export const disableTextareaChildren = false;
5051
export const disableMapsAsChildren = false;
5152
export const disableUnstableRenderSubtreeIntoContainer = false;
@@ -63,4 +64,4 @@ export function addUserTimingListener() {
6364
// eslint-disable-next-line no-unused-vars
6465
type Check<_X, Y: _X, X: Y = _X> = null;
6566
// eslint-disable-next-line no-unused-expressions
66-
(null: Check<FeatureFlagsShimType, FeatureFlagsType>);
67+
(null: Check<ExportsType, FeatureFlagsType>);

packages/shared/forks/ReactFeatureFlags.native-oss.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import invariant from 'shared/invariant';
1111

1212
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
13-
import typeof * as FeatureFlagsShimType from './ReactFeatureFlags.native-oss';
13+
import typeof * as ExportsType from './ReactFeatureFlags.native-oss';
1414

1515
export const debugRenderPhaseSideEffectsForStrictMode = false;
1616
export const enableUserTimingAPI = __DEV__;
@@ -41,6 +41,7 @@ export const enableTrainModelFix = true;
4141
export const enableTrustedTypesIntegration = false;
4242
export const enableNativeTargetAsInstance = false;
4343
export const disableCreateFactory = false;
44+
export const disableLegacyReactDOMAPIs = false;
4445
export const disableTextareaChildren = false;
4546
export const disableMapsAsChildren = false;
4647
export const disableUnstableRenderSubtreeIntoContainer = false;
@@ -58,4 +59,4 @@ export function addUserTimingListener() {
5859
// eslint-disable-next-line no-unused-vars
5960
type Check<_X, Y: _X, X: Y = _X> = null;
6061
// eslint-disable-next-line no-unused-expressions
61-
(null: Check<FeatureFlagsShimType, FeatureFlagsType>);
62+
(null: Check<ExportsType, FeatureFlagsType>);

packages/shared/forks/ReactFeatureFlags.persistent.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import invariant from 'shared/invariant';
1111

1212
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
13-
import typeof * as PersistentFeatureFlagsType from './ReactFeatureFlags.persistent';
13+
import typeof * as ExportsType from './ReactFeatureFlags.persistent';
1414

1515
export const debugRenderPhaseSideEffectsForStrictMode = false;
1616
export const enableUserTimingAPI = __DEV__;
@@ -41,6 +41,7 @@ export const enableTrainModelFix = true;
4141
export const enableTrustedTypesIntegration = false;
4242
export const enableNativeTargetAsInstance = false;
4343
export const disableCreateFactory = false;
44+
export const disableLegacyReactDOMAPIs = false;
4445
export const disableTextareaChildren = false;
4546
export const disableMapsAsChildren = false;
4647
export const disableUnstableRenderSubtreeIntoContainer = false;
@@ -58,4 +59,4 @@ export function addUserTimingListener() {
5859
// eslint-disable-next-line no-unused-vars
5960
type Check<_X, Y: _X, X: Y = _X> = null;
6061
// eslint-disable-next-line no-unused-expressions
61-
(null: Check<PersistentFeatureFlagsType, FeatureFlagsType>);
62+
(null: Check<ExportsType, FeatureFlagsType>);

packages/shared/forks/ReactFeatureFlags.test-renderer.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import invariant from 'shared/invariant';
1111

1212
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
13-
import typeof * as PersistentFeatureFlagsType from './ReactFeatureFlags.persistent';
13+
import typeof * as ExportsType from './ReactFeatureFlags.test-renderer';
1414

1515
export const debugRenderPhaseSideEffectsForStrictMode = false;
1616
export const enableUserTimingAPI = __DEV__;
@@ -41,6 +41,7 @@ export const enableTrainModelFix = true;
4141
export const enableTrustedTypesIntegration = false;
4242
export const enableNativeTargetAsInstance = false;
4343
export const disableCreateFactory = false;
44+
export const disableLegacyReactDOMAPIs = false;
4445
export const disableTextareaChildren = false;
4546
export const disableMapsAsChildren = false;
4647
export const disableUnstableRenderSubtreeIntoContainer = false;
@@ -58,4 +59,4 @@ export function addUserTimingListener() {
5859
// eslint-disable-next-line no-unused-vars
5960
type Check<_X, Y: _X, X: Y = _X> = null;
6061
// eslint-disable-next-line no-unused-expressions
61-
(null: Check<PersistentFeatureFlagsType, FeatureFlagsType>);
62+
(null: Check<ExportsType, FeatureFlagsType>);

packages/shared/forks/ReactFeatureFlags.test-renderer.www.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import invariant from 'shared/invariant';
1111

1212
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
13-
import typeof * as PersistentFeatureFlagsType from './ReactFeatureFlags.persistent';
13+
import typeof * as ExportsType from './ReactFeatureFlags.test-renderer.www';
1414

1515
export const debugRenderPhaseSideEffectsForStrictMode = false;
1616
export const enableUserTimingAPI = __DEV__;
@@ -22,8 +22,10 @@ export const enableSuspenseServerRenderer = false;
2222
export const enableSelectiveHydration = false;
2323
export const enableChunksAPI = false;
2424
export const exposeConcurrentModeAPIs = __EXPERIMENTAL__;
25+
export const warnAboutShorthandPropertyCollision = true;
2526
export const enableSchedulerDebugging = false;
2627
export const disableJavaScriptURLs = false;
28+
export const disableInputAttributeSyncing = false;
2729
export const enableDeprecatedFlareAPI = true;
2830
export const enableFundamentalAPI = false;
2931
export const enableScopeAPI = true;
@@ -39,6 +41,7 @@ export const enableTrainModelFix = true;
3941
export const enableTrustedTypesIntegration = false;
4042
export const enableNativeTargetAsInstance = false;
4143
export const disableCreateFactory = false;
44+
export const disableLegacyReactDOMAPIs = false;
4245
export const disableTextareaChildren = false;
4346
export const disableMapsAsChildren = false;
4447
export const disableUnstableRenderSubtreeIntoContainer = false;
@@ -56,4 +59,4 @@ export function addUserTimingListener() {
5659
// eslint-disable-next-line no-unused-vars
5760
type Check<_X, Y: _X, X: Y = _X> = null;
5861
// eslint-disable-next-line no-unused-expressions
59-
(null: Check<PersistentFeatureFlagsType, FeatureFlagsType>);
62+
(null: Check<ExportsType, FeatureFlagsType>);

packages/shared/forks/ReactFeatureFlags.testing.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import invariant from 'shared/invariant';
1111

1212
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
13-
import typeof * as PersistentFeatureFlagsType from './ReactFeatureFlags.persistent';
13+
import typeof * as ExportsType from './ReactFeatureFlags.testing';
1414

1515
export const debugRenderPhaseSideEffectsForStrictMode = false;
1616
export const enableUserTimingAPI = __DEV__;
@@ -41,6 +41,7 @@ export const enableTrainModelFix = true;
4141
export const enableTrustedTypesIntegration = false;
4242
export const enableNativeTargetAsInstance = false;
4343
export const disableCreateFactory = false;
44+
export const disableLegacyReactDOMAPIs = false;
4445
export const disableTextareaChildren = false;
4546
export const disableMapsAsChildren = false;
4647
export const disableUnstableRenderSubtreeIntoContainer = false;
@@ -58,4 +59,4 @@ export function addUserTimingListener() {
5859
// eslint-disable-next-line no-unused-vars
5960
type Check<_X, Y: _X, X: Y = _X> = null;
6061
// eslint-disable-next-line no-unused-expressions
61-
(null: Check<PersistentFeatureFlagsType, FeatureFlagsType>);
62+
(null: Check<ExportsType, FeatureFlagsType>);

0 commit comments

Comments
 (0)