@samitouri / QOS-React / commits / c954efa70f

Remove `import * as` pattern from the codebase (#14282)

Whenever we do this, Rollup needs to materialize this as an object. This causes it to also add the Babel compatibility property which is unnecessary bloat. However, since when we use these, we leak the object this often also deopts any compiler optimizations. If we really need an object we should export default an object. Currently there is an exception for DOMTopLevelEventTypes since listing out the imports is a PITA and it doesn't escape so it should get properly inlined. We should probably move to a different pattern to avoid this for consistency though.

Sebastian Markbåge committed Nov 19, 2018 at 15:32 UTC c954efa70f44a44be9c33c60c57f87bea6f40a10
34 files changed +467 -390
packages/react-art/src/ReactART.js
+10 -6
@@ -7,7 +7,11 @@
7
8 import React from 'react';
9 import ReactVersion from 'shared/ReactVersion';
10 -import * as ARTRenderer from 'react-reconciler/inline.art';
10 +import {
11 + createContainer,
12 + updateContainer,
13 + injectIntoDevTools,
14 +} from 'react-reconciler/inline.art';
15 import Transform from 'art/core/transform';
16 import Mode from 'art/modes/current';
17 import FastNoSideEffects from 'art/modes/fast-noSideEffects';
@@ -61,8 +65,8 @@ class Surface extends React.Component {
65
66 this._surface = Mode.Surface(+width, +height, this._tagRef);
67
64 - this._mountNode = ARTRenderer.createContainer(this._surface);
65 - ARTRenderer.updateContainer(this.props.children, this._mountNode, this);
68 + this._mountNode = createContainer(this._surface);
69 + updateContainer(this.props.children, this._mountNode, this);
70 }
71
72 componentDidUpdate(prevProps, prevState) {
@@ -72,7 +76,7 @@ class Surface extends React.Component {
76 this._surface.resize(+props.width, +props.height);
77 }
78
75 - ARTRenderer.updateContainer(this.props.children, this._mountNode, this);
79 + updateContainer(this.props.children, this._mountNode, this);
80
81 if (this._surface.render) {
82 this._surface.render();
@@ -80,7 +84,7 @@ class Surface extends React.Component {
84 }
85
86 componentWillUnmount() {
83 - ARTRenderer.updateContainer(null, this._mountNode, this);
87 + updateContainer(null, this._mountNode, this);
88 }
89
90 render() {
@@ -132,7 +136,7 @@ class Text extends React.Component {
136 }
137 }
138
135 -ARTRenderer.injectIntoDevTools({
139 +injectIntoDevTools({
140 findFiberByHostInstance: () => null,
141 bundleType: __DEV__ ? 1 : 0,
142 version: ReactVersion,
packages/react-dom/src/client/ReactDOM.js
+84 -60
@@ -19,15 +19,42 @@ import type {Container} from './ReactDOMHostConfig';
19 import '../shared/checkReact';
20 import './ReactDOMClientInjection';
21
22 -import * as DOMRenderer from 'react-reconciler/inline.dom';
23 -import * as ReactPortal from 'shared/ReactPortal';
22 +import {
23 + computeUniqueAsyncExpiration,
24 + findHostInstanceWithNoPortals,
25 + updateContainerAtExpirationTime,
26 + flushRoot,
27 + createContainer,
28 + updateContainer,
29 + batchedUpdates,
30 + unbatchedUpdates,
31 + interactiveUpdates,
32 + flushInteractiveUpdates,
33 + flushSync,
34 + flushControlled,
35 + injectIntoDevTools,
36 + getPublicRootInstance,
37 + findHostInstance,
38 + findHostInstanceWithWarning,
39 +} from 'react-reconciler/inline.dom';
40 +import {createPortal as createPortalImpl} from 'shared/ReactPortal';
41 import {canUseDOM} from 'shared/ExecutionEnvironment';
25 -import * as ReactGenericBatching from 'events/ReactGenericBatching';
26 -import * as ReactControlledComponent from 'events/ReactControlledComponent';
27 -import * as EventPluginHub from 'events/EventPluginHub';
28 -import * as EventPluginRegistry from 'events/EventPluginRegistry';
29 -import * as EventPropagators from 'events/EventPropagators';
30 -import * as ReactInstanceMap from 'shared/ReactInstanceMap';
42 +import {setBatchingImplementation} from 'events/ReactGenericBatching';
43 +import {
44 + setRestoreImplementation,
45 + enqueueStateRestore,
46 + restoreStateIfNeeded,
47 +} from 'events/ReactControlledComponent';
48 +import {
49 + injection as EventPluginHubInjection,
50 + runEventsInBatch,
51 +} from 'events/EventPluginHub';
52 +import {eventNameDispatchConfigs} from 'events/EventPluginRegistry';
53 +import {
54 + accumulateTwoPhaseDispatches,
55 + accumulateDirectDispatches,
56 +} from 'events/EventPropagators';
57 +import {has as hasInstance} from 'shared/ReactInstanceMap';
58 import ReactVersion from 'shared/ReactVersion';
59 import ReactSharedInternals from 'shared/ReactSharedInternals';
60 import getComponentName from 'shared/getComponentName';
@@ -36,9 +63,14 @@ import lowPriorityWarning from 'shared/lowPriorityWarning';
63 import warningWithoutStack from 'shared/warningWithoutStack';
64 import {enableStableConcurrentModeAPIs} from 'shared/ReactFeatureFlags';
65
39 -import * as ReactDOMComponentTree from './ReactDOMComponentTree';
66 +import {
67 + getInstanceFromNode,
68 + getNodeFromInstance,
69 + getFiberCurrentPropsFromNode,
70 + getClosestInstanceFromNode,
71 +} from './ReactDOMComponentTree';
72 import {restoreControlledState} from './ReactDOMComponent';
41 -import * as ReactDOMEventListener from '../events/ReactDOMEventListener';
73 +import {dispatchEvent} from '../events/ReactDOMEventListener';
74 import {
75 ELEMENT_NODE,
76 COMMENT_NODE,
@@ -74,7 +106,7 @@ if (__DEV__) {
106
107 topLevelUpdateWarnings = (container: DOMContainer) => {
108 if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {
77 - const hostInstance = DOMRenderer.findHostInstanceWithNoPortals(
109 + const hostInstance = findHostInstanceWithNoPortals(
110 container._reactRootContainer._internalRoot.current,
111 );
112 if (hostInstance) {
@@ -90,9 +122,7 @@ if (__DEV__) {
122
123 const isRootRenderedBySomeReact = !!container._reactRootContainer;
124 const rootEl = getReactRootElementInContainer(container);
93 - const hasNonRootReactChild = !!(
94 - rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl)
95 - );
125 + const hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));
126
127 warningWithoutStack(
128 !hasNonRootReactChild || isRootRenderedBySomeReact,
@@ -125,7 +155,7 @@ if (__DEV__) {
155 };
156 }
157
128 -ReactControlledComponent.setRestoreImplementation(restoreControlledState);
158 +setRestoreImplementation(restoreControlledState);
159
160 export type DOMContainer =
161 | (Element & {
@@ -165,7 +195,7 @@ type Root = {
195 };
196
197 function ReactBatch(root: ReactRoot) {
168 - const expirationTime = DOMRenderer.computeUniqueAsyncExpiration();
198 + const expirationTime = computeUniqueAsyncExpiration();
199 this._expirationTime = expirationTime;
200 this._root = root;
201 this._next = null;
@@ -185,7 +215,7 @@ ReactBatch.prototype.render = function(children: ReactNodeList) {
215 const internalRoot = this._root._internalRoot;
216 const expirationTime = this._expirationTime;
217 const work = new ReactWork();
188 - DOMRenderer.updateContainerAtExpirationTime(
218 + updateContainerAtExpirationTime(
219 children,
220 internalRoot,
221 null,
@@ -256,7 +286,7 @@ ReactBatch.prototype.commit = function() {
286
287 // Synchronously flush all the work up to this batch's expiration time.
288 this._defer = false;
259 - DOMRenderer.flushRoot(internalRoot, expirationTime);
289 + flushRoot(internalRoot, expirationTime);
290
291 // Pop the batch from the list.
292 const next = this._next;
@@ -336,7 +366,7 @@ function ReactRoot(
366 isConcurrent: boolean,
367 hydrate: boolean,
368 ) {
339 - const root = DOMRenderer.createContainer(container, isConcurrent, hydrate);
369 + const root = createContainer(container, isConcurrent, hydrate);
370 this._internalRoot = root;
371 }
372 ReactRoot.prototype.render = function(
@@ -352,7 +382,7 @@ ReactRoot.prototype.render = function(
382 if (callback !== null) {
383 work.then(callback);
384 }
355 - DOMRenderer.updateContainer(children, root, null, work._onCommit);
385 + updateContainer(children, root, null, work._onCommit);
386 return work;
387 };
388 ReactRoot.prototype.unmount = function(callback: ?() => mixed): Work {
@@ -365,7 +395,7 @@ ReactRoot.prototype.unmount = function(callback: ?() => mixed): Work {
395 if (callback !== null) {
396 work.then(callback);
397 }
368 - DOMRenderer.updateContainer(null, root, null, work._onCommit);
398 + updateContainer(null, root, null, work._onCommit);
399 return work;
400 };
401 ReactRoot.prototype.legacy_renderSubtreeIntoContainer = function(
@@ -382,7 +412,7 @@ ReactRoot.prototype.legacy_renderSubtreeIntoContainer = function(
412 if (callback !== null) {
413 work.then(callback);
414 }
385 - DOMRenderer.updateContainer(children, root, parentComponent, work._onCommit);
415 + updateContainer(children, root, parentComponent, work._onCommit);
416 return work;
417 };
418 ReactRoot.prototype.createBatch = function(): Batch {
@@ -453,10 +483,10 @@ function shouldHydrateDueToLegacyHeuristic(container) {
483 );
484 }
485
456 -ReactGenericBatching.setBatchingImplementation(
457 - DOMRenderer.batchedUpdates,
458 - DOMRenderer.interactiveUpdates,
459 - DOMRenderer.flushInteractiveUpdates,
486 +setBatchingImplementation(
487 + batchedUpdates,
488 + interactiveUpdates,
489 + flushInteractiveUpdates,
490 );
491
492 let warnedAboutHydrateAPI = false;
@@ -535,12 +565,12 @@ function legacyRenderSubtreeIntoContainer(
565 if (typeof callback === 'function') {
566 const originalCallback = callback;
567 callback = function() {
538 - const instance = DOMRenderer.getPublicRootInstance(root._internalRoot);
568 + const instance = getPublicRootInstance(root._internalRoot);
569 originalCallback.call(instance);
570 };
571 }
572 // Initial mount should not be batched.
543 - DOMRenderer.unbatchedUpdates(() => {
573 + unbatchedUpdates(() => {
574 if (parentComponent != null) {
575 root.legacy_renderSubtreeIntoContainer(
576 parentComponent,
@@ -555,7 +585,7 @@ function legacyRenderSubtreeIntoContainer(
585 if (typeof callback === 'function') {
586 const originalCallback = callback;
587 callback = function() {
558 - const instance = DOMRenderer.getPublicRootInstance(root._internalRoot);
588 + const instance = getPublicRootInstance(root._internalRoot);
589 originalCallback.call(instance);
590 };
591 }
@@ -570,7 +600,7 @@ function legacyRenderSubtreeIntoContainer(
600 root.render(children, callback);
601 }
602 }
573 - return DOMRenderer.getPublicRootInstance(root._internalRoot);
603 + return getPublicRootInstance(root._internalRoot);
604 }
605
606 function createPortal(
@@ -583,7 +613,7 @@ function createPortal(
613 'Target container is not a DOM element.',
614 );
615 // TODO: pass ReactDOM portal implementation as third argument
586 - return ReactPortal.createPortal(children, container, null, key);
616 + return createPortalImpl(children, container, null, key);
617 }
618
619 const ReactDOM: Object = {
@@ -616,12 +646,9 @@ const ReactDOM: Object = {
646 return (componentOrElement: any);
647 }
648 if (__DEV__) {
619 - return DOMRenderer.findHostInstanceWithWarning(
620 - componentOrElement,
621 - 'findDOMNode',
622 - );
649 + return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');
650 }
624 - return DOMRenderer.findHostInstance(componentOrElement);
651 + return findHostInstance(componentOrElement);
652 },
653
654 hydrate(element: React$Node, container: DOMContainer, callback: ?Function) {
@@ -656,7 +683,7 @@ const ReactDOM: Object = {
683 callback: ?Function,
684 ) {
685 invariant(
659 - parentComponent != null && ReactInstanceMap.has(parentComponent),
686 + parentComponent != null && hasInstance(parentComponent),
687 'parentComponent must be a valid React Component',
688 );
689 return legacyRenderSubtreeIntoContainer(
@@ -677,8 +704,7 @@ const ReactDOM: Object = {
704 if (container._reactRootContainer) {
705 if (__DEV__) {
706 const rootEl = getReactRootElementInContainer(container);
680 - const renderedByDifferentReact =
681 - rootEl && !ReactDOMComponentTree.getInstanceFromNode(rootEl);
707 + const renderedByDifferentReact = rootEl && !getInstanceFromNode(rootEl);
708 warningWithoutStack(
709 !renderedByDifferentReact,
710 "unmountComponentAtNode(): The node you're attempting to unmount " +
@@ -687,7 +713,7 @@ const ReactDOM: Object = {
713 }
714
715 // Unmount should not be batched.
690 - DOMRenderer.unbatchedUpdates(() => {
716 + unbatchedUpdates(() => {
717 legacyRenderSubtreeIntoContainer(null, null, container, false, () => {
718 container._reactRootContainer = null;
719 });
@@ -698,9 +724,7 @@ const ReactDOM: Object = {
724 } else {
725 if (__DEV__) {
726 const rootEl = getReactRootElementInContainer(container);
701 - const hasNonRootReactChild = !!(
702 - rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl)
703 - );
727 + const hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));
728
729 // Check if the container itself is a React root node.
730 const isContainerReactRoot =
@@ -740,29 +764,29 @@ const ReactDOM: Object = {
764 return createPortal(...args);
765 },
766
743 - unstable_batchedUpdates: DOMRenderer.batchedUpdates,
767 + unstable_batchedUpdates: batchedUpdates,
768
745 - unstable_interactiveUpdates: DOMRenderer.interactiveUpdates,
769 + unstable_interactiveUpdates: interactiveUpdates,
770
747 - flushSync: DOMRenderer.flushSync,
771 + flushSync: flushSync,
772
749 - unstable_flushControlled: DOMRenderer.flushControlled,
773 + unstable_flushControlled: flushControlled,
774
775 __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {
776 // Keep in sync with ReactDOMUnstableNativeDependencies.js
777 // and ReactTestUtils.js. This is an array for better minification.
778 Events: [
755 - ReactDOMComponentTree.getInstanceFromNode,
756 - ReactDOMComponentTree.getNodeFromInstance,
757 - ReactDOMComponentTree.getFiberCurrentPropsFromNode,
758 - EventPluginHub.injection.injectEventPluginsByName,
759 - EventPluginRegistry.eventNameDispatchConfigs,
760 - EventPropagators.accumulateTwoPhaseDispatches,
761 - EventPropagators.accumulateDirectDispatches,
762 - ReactControlledComponent.enqueueStateRestore,
763 - ReactControlledComponent.restoreStateIfNeeded,
764 - ReactDOMEventListener.dispatchEvent,
765 - EventPluginHub.runEventsInBatch,
779 + getInstanceFromNode,
780 + getNodeFromInstance,
781 + getFiberCurrentPropsFromNode,
782 + EventPluginHubInjection.injectEventPluginsByName,
783 + eventNameDispatchConfigs,
784 + accumulateTwoPhaseDispatches,
785 + accumulateDirectDispatches,
786 + enqueueStateRestore,
787 + restoreStateIfNeeded,
788 + dispatchEvent,
789 + runEventsInBatch,
790 ],
791 },
792 };
@@ -790,8 +814,8 @@ if (enableStableConcurrentModeAPIs) {
814 ReactDOM.unstable_createRoot = createRoot;
815 }
816
793 -const foundDevTools = DOMRenderer.injectIntoDevTools({
794 - findFiberByHostInstance: ReactDOMComponentTree.getClosestInstanceFromNode,
817 +const foundDevTools = injectIntoDevTools({
818 + findFiberByHostInstance: getClosestInstanceFromNode,
819 bundleType: __DEV__ ? 1 : 0,
820 version: ReactVersion,
821 rendererPackageName: 'react-dom',
packages/react-dom/src/client/ReactDOMClientInjection.js
+5 -5
@@ -5,8 +5,8 @@
5 * LICENSE file in the root directory of this source tree.
6 */
7
8 -import * as EventPluginHub from 'events/EventPluginHub';
9 -import * as EventPluginUtils from 'events/EventPluginUtils';
8 +import {injection as EventPluginHubInjection} from 'events/EventPluginHub';
9 +import {setComponentTree} from 'events/EventPluginUtils';
10
11 import {
12 getFiberCurrentPropsFromNode,
@@ -23,8 +23,8 @@ import SimpleEventPlugin from '../events/SimpleEventPlugin';
23 /**
24 * Inject modules for resolving DOM hierarchy and plugin ordering.
25 */
26 -EventPluginHub.injection.injectEventPluginOrder(DOMEventPluginOrder);
27 -EventPluginUtils.setComponentTree(
26 +EventPluginHubInjection.injectEventPluginOrder(DOMEventPluginOrder);
27 +setComponentTree(
28 getFiberCurrentPropsFromNode,
29 getInstanceFromNode,
30 getNodeFromInstance,
@@ -34,7 +34,7 @@ EventPluginUtils.setComponentTree(
34 * Some important event plugins included by default (without having to require
35 * them).
36 */
37 -EventPluginHub.injection.injectEventPluginsByName({
37 +EventPluginHubInjection.injectEventPluginsByName({
38 SimpleEventPlugin: SimpleEventPlugin,
39 EnterLeaveEventPlugin: EnterLeaveEventPlugin,
40 ChangeEventPlugin: ChangeEventPlugin,
packages/react-dom/src/client/ReactDOMComponent.js
+84 -76
@@ -14,12 +14,39 @@ import warning from 'shared/warning';
14 import {canUseDOM} from 'shared/ExecutionEnvironment';
15 import warningWithoutStack from 'shared/warningWithoutStack';
16
17 -import * as DOMPropertyOperations from './DOMPropertyOperations';
18 -import * as ReactDOMInput from './ReactDOMInput';
19 -import * as ReactDOMOption from './ReactDOMOption';
20 -import * as ReactDOMSelect from './ReactDOMSelect';
21 -import * as ReactDOMTextarea from './ReactDOMTextarea';
22 -import * as inputValueTracking from './inputValueTracking';
17 +import {
18 + getValueForAttribute,
19 + getValueForProperty,
20 + setValueForProperty,
21 +} from './DOMPropertyOperations';
22 +import {
23 + initWrapperState as ReactDOMInputInitWrapperState,
24 + getHostProps as ReactDOMInputGetHostProps,
25 + postMountWrapper as ReactDOMInputPostMountWrapper,
26 + updateChecked as ReactDOMInputUpdateChecked,
27 + updateWrapper as ReactDOMInputUpdateWrapper,
28 + restoreControlledState as ReactDOMInputRestoreControlledState,
29 +} from './ReactDOMInput';
30 +import {
31 + getHostProps as ReactDOMOptionGetHostProps,
32 + postMountWrapper as ReactDOMOptionPostMountWrapper,
33 + validateProps as ReactDOMOptionValidateProps,
34 +} from './ReactDOMOption';
35 +import {
36 + initWrapperState as ReactDOMSelectInitWrapperState,
37 + getHostProps as ReactDOMSelectGetHostProps,
38 + postMountWrapper as ReactDOMSelectPostMountWrapper,
39 + restoreControlledState as ReactDOMSelectRestoreControlledState,
40 + postUpdateWrapper as ReactDOMSelectPostUpdateWrapper,
41 +} from './ReactDOMSelect';
42 +import {
43 + initWrapperState as ReactDOMTextareaInitWrapperState,
44 + getHostProps as ReactDOMTextareaGetHostProps,
45 + postMountWrapper as ReactDOMTextareaPostMountWrapper,
46 + updateWrapper as ReactDOMTextareaUpdateWrapper,
47 + restoreControlledState as ReactDOMTextareaRestoreControlledState,
48 +} from './ReactDOMTextarea';
49 +import {track} from './inputValueTracking';
50 import setInnerHTML from './setInnerHTML';
51 import setTextContent from './setTextContent';
52 import {
@@ -32,7 +59,11 @@ import {
59 } from '../events/DOMTopLevelEventTypes';
60 import {listenTo, trapBubbledEvent} from '../events/ReactBrowserEventEmitter';
61 import {mediaEventTypes} from '../events/DOMTopLevelEventTypes';
35 -import * as CSSPropertyOperations from '../shared/CSSPropertyOperations';
62 +import {
63 + createDangerousStringForStyles,
64 + setValueForStyles,
65 + validateShorthandPropertyCollisionInDev,
66 +} from '../shared/CSSPropertyOperations';
67 import {Namespaces, getIntrinsicNamespace} from '../shared/DOMNamespaces';
68 import {
69 getPropertyInfo,
@@ -276,7 +307,7 @@ function setInitialDOMProperties(
307 }
308 }
309 // Relies on `updateStylesByID` not mutating `styleUpdates`.
279 - CSSPropertyOperations.setValueForStyles(domElement, nextProp);
310 + setValueForStyles(domElement, nextProp);
311 } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
312 const nextHtml = nextProp ? nextProp[HTML] : undefined;
313 if (nextHtml != null) {
@@ -313,12 +344,7 @@ function setInitialDOMProperties(
344 ensureListeningTo(rootContainerElement, propKey);
345 }
346 } else if (nextProp != null) {
316 - DOMPropertyOperations.setValueForProperty(
317 - domElement,
318 - propKey,
319 - nextProp,
320 - isCustomComponentTag,
321 - );
347 + setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);
348 }
349 }
350 }
@@ -334,18 +360,13 @@ function updateDOMProperties(
360 const propKey = updatePayload[i];
361 const propValue = updatePayload[i + 1];
362 if (propKey === STYLE) {
337 - CSSPropertyOperations.setValueForStyles(domElement, propValue);
363 + setValueForStyles(domElement, propValue);
364 } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
365 setInnerHTML(domElement, propValue);
366 } else if (propKey === CHILDREN) {
367 setTextContent(domElement, propValue);
368 } else {
343 - DOMPropertyOperations.setValueForProperty(
344 - domElement,
345 - propKey,
346 - propValue,
347 - isCustomComponentTag,
348 - );
369 + setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);
370 }
371 }
372 }
@@ -505,28 +526,28 @@ export function setInitialProperties(
526 props = rawProps;
527 break;
528 case 'input':
508 - ReactDOMInput.initWrapperState(domElement, rawProps);
509 - props = ReactDOMInput.getHostProps(domElement, rawProps);
529 + ReactDOMInputInitWrapperState(domElement, rawProps);
530 + props = ReactDOMInputGetHostProps(domElement, rawProps);
531 trapBubbledEvent(TOP_INVALID, domElement);
532 // For controlled components we always need to ensure we're listening
533 // to onChange. Even if there is no listener.
534 ensureListeningTo(rootContainerElement, 'onChange');
535 break;
536 case 'option':
516 - ReactDOMOption.validateProps(domElement, rawProps);
517 - props = ReactDOMOption.getHostProps(domElement, rawProps);
537 + ReactDOMOptionValidateProps(domElement, rawProps);
538 + props = ReactDOMOptionGetHostProps(domElement, rawProps);
539 break;
540 case 'select':
520 - ReactDOMSelect.initWrapperState(domElement, rawProps);
521 - props = ReactDOMSelect.getHostProps(domElement, rawProps);
541 + ReactDOMSelectInitWrapperState(domElement, rawProps);
542 + props = ReactDOMSelectGetHostProps(domElement, rawProps);
543 trapBubbledEvent(TOP_INVALID, domElement);
544 // For controlled components we always need to ensure we're listening
545 // to onChange. Even if there is no listener.
546 ensureListeningTo(rootContainerElement, 'onChange');
547 break;
548 case 'textarea':
528 - ReactDOMTextarea.initWrapperState(domElement, rawProps);
529 - props = ReactDOMTextarea.getHostProps(domElement, rawProps);
549 + ReactDOMTextareaInitWrapperState(domElement, rawProps);
550 + props = ReactDOMTextareaGetHostProps(domElement, rawProps);
551 trapBubbledEvent(TOP_INVALID, domElement);
552 // For controlled components we always need to ensure we're listening
553 // to onChange. Even if there is no listener.
@@ -550,20 +571,20 @@ export function setInitialProperties(
571 case 'input':
572 // TODO: Make sure we check if this is still unmounted or do any clean
573 // up necessary since we never stop tracking anymore.
553 - inputValueTracking.track((domElement: any));
554 - ReactDOMInput.postMountWrapper(domElement, rawProps, false);
574 + track((domElement: any));
575 + ReactDOMInputPostMountWrapper(domElement, rawProps, false);
576 break;
577 case 'textarea':
578 // TODO: Make sure we check if this is still unmounted or do any clean
579 // up necessary since we never stop tracking anymore.
559 - inputValueTracking.track((domElement: any));
560 - ReactDOMTextarea.postMountWrapper(domElement, rawProps);
580 + track((domElement: any));
581 + ReactDOMTextareaPostMountWrapper(domElement, rawProps);
582 break;
583 case 'option':
563 - ReactDOMOption.postMountWrapper(domElement, rawProps);
584 + ReactDOMOptionPostMountWrapper(domElement, rawProps);
585 break;
586 case 'select':
566 - ReactDOMSelect.postMountWrapper(domElement, rawProps);
587 + ReactDOMSelectPostMountWrapper(domElement, rawProps);
588 break;
589 default:
590 if (typeof props.onClick === 'function') {
@@ -592,23 +613,23 @@ export function diffProperties(
613 let nextProps: Object;
614 switch (tag) {
615 case 'input':
595 - lastProps = ReactDOMInput.getHostProps(domElement, lastRawProps);
596 - nextProps = ReactDOMInput.getHostProps(domElement, nextRawProps);
616 + lastProps = ReactDOMInputGetHostProps(domElement, lastRawProps);
617 + nextProps = ReactDOMInputGetHostProps(domElement, nextRawProps);
618 updatePayload = [];
619 break;
620 case 'option':
600 - lastProps = ReactDOMOption.getHostProps(domElement, lastRawProps);
601 - nextProps = ReactDOMOption.getHostProps(domElement, nextRawProps);
621 + lastProps = ReactDOMOptionGetHostProps(domElement, lastRawProps);
622 + nextProps = ReactDOMOptionGetHostProps(domElement, nextRawProps);
623 updatePayload = [];
624 break;
625 case 'select':
605 - lastProps = ReactDOMSelect.getHostProps(domElement, lastRawProps);
606 - nextProps = ReactDOMSelect.getHostProps(domElement, nextRawProps);
626 + lastProps = ReactDOMSelectGetHostProps(domElement, lastRawProps);
627 + nextProps = ReactDOMSelectGetHostProps(domElement, nextRawProps);
628 updatePayload = [];
629 break;
630 case 'textarea':
610 - lastProps = ReactDOMTextarea.getHostProps(domElement, lastRawProps);
611 - nextProps = ReactDOMTextarea.getHostProps(domElement, nextRawProps);
631 + lastProps = ReactDOMTextareaGetHostProps(domElement, lastRawProps);
632 + nextProps = ReactDOMTextareaGetHostProps(domElement, nextRawProps);
633 updatePayload = [];
634 break;
635 default:
@@ -767,10 +788,7 @@ export function diffProperties(
788 }
789 if (styleUpdates) {
790 if (__DEV__) {
770 - CSSPropertyOperations.validateShorthandPropertyCollisionInDev(
771 - styleUpdates,
772 - nextProps[STYLE],
773 - );
791 + validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);
792 }
793 (updatePayload = updatePayload || []).push(STYLE, styleUpdates);
794 }
@@ -793,7 +811,7 @@ export function updateProperties(
811 nextRawProps.type === 'radio' &&
812 nextRawProps.name != null
813 ) {
796 - ReactDOMInput.updateChecked(domElement, nextRawProps);
814 + ReactDOMInputUpdateChecked(domElement, nextRawProps);
815 }
816
817 const wasCustomComponentTag = isCustomComponent(tag, lastRawProps);
@@ -813,15 +831,15 @@ export function updateProperties(
831 // Update the wrapper around inputs *after* updating props. This has to
832 // happen after `updateDOMProperties`. Otherwise HTML5 input validations
833 // raise warnings and prevent the new value from being assigned.
816 - ReactDOMInput.updateWrapper(domElement, nextRawProps);
834 + ReactDOMInputUpdateWrapper(domElement, nextRawProps);
835 break;
836 case 'textarea':
819 - ReactDOMTextarea.updateWrapper(domElement, nextRawProps);
837 + ReactDOMTextareaUpdateWrapper(domElement, nextRawProps);
838 break;
839 case 'select':
840 // <select> value update needs to occur after <option> children
841 // reconciliation
824 - ReactDOMSelect.postUpdateWrapper(domElement, nextRawProps);
842 + ReactDOMSelectPostUpdateWrapper(domElement, nextRawProps);
843 break;
844 }
845 }
@@ -896,24 +914,24 @@ export function diffHydratedProperties(
914 trapBubbledEvent(TOP_TOGGLE, domElement);
915 break;
916 case 'input':
899 - ReactDOMInput.initWrapperState(domElement, rawProps);
917 + ReactDOMInputInitWrapperState(domElement, rawProps);
918 trapBubbledEvent(TOP_INVALID, domElement);
919 // For controlled components we always need to ensure we're listening
920 // to onChange. Even if there is no listener.
921 ensureListeningTo(rootContainerElement, 'onChange');
922 break;
923 case 'option':
906 - ReactDOMOption.validateProps(domElement, rawProps);
924 + ReactDOMOptionValidateProps(domElement, rawProps);
925 break;
926 case 'select':
909 - ReactDOMSelect.initWrapperState(domElement, rawProps);
927 + ReactDOMSelectInitWrapperState(domElement, rawProps);
928 trapBubbledEvent(TOP_INVALID, domElement);
929 // For controlled components we always need to ensure we're listening
930 // to onChange. Even if there is no listener.
931 ensureListeningTo(rootContainerElement, 'onChange');
932 break;
933 case 'textarea':
916 - ReactDOMTextarea.initWrapperState(domElement, rawProps);
934 + ReactDOMTextareaInitWrapperState(domElement, rawProps);
935 trapBubbledEvent(TOP_INVALID, domElement);
936 // For controlled components we always need to ensure we're listening
937 // to onChange. Even if there is no listener.
@@ -1021,9 +1039,7 @@ export function diffHydratedProperties(
1039 extraAttributeNames.delete(propKey);
1040
1041 if (canDiffStyleForHydrationWarning) {
1024 - const expectedStyle = CSSPropertyOperations.createDangerousStringForStyles(
1025 - nextProp,
1026 - );
1042 + const expectedStyle = createDangerousStringForStyles(nextProp);
1043 serverValue = domElement.getAttribute('style');
1044 if (expectedStyle !== serverValue) {
1045 warnForPropDifference(propKey, serverValue, expectedStyle);
@@ -1032,11 +1048,7 @@ export function diffHydratedProperties(
1048 } else if (isCustomComponentTag) {
1049 // $FlowFixMe - Should be inferred as not undefined.
1050 extraAttributeNames.delete(propKey.toLowerCase());
1035 - serverValue = DOMPropertyOperations.getValueForAttribute(
1036 - domElement,
1037 - propKey,
1038 - nextProp,
1039 - );
1051 + serverValue = getValueForAttribute(domElement, propKey, nextProp);
1052
1053 if (nextProp !== serverValue) {
1054 warnForPropDifference(propKey, serverValue, nextProp);
@@ -1054,7 +1066,7 @@ export function diffHydratedProperties(
1066 if (propertyInfo !== null) {
1067 // $FlowFixMe - Should be inferred as not undefined.
1068 extraAttributeNames.delete(propertyInfo.attributeName);
1057 - serverValue = DOMPropertyOperations.getValueForProperty(
1069 + serverValue = getValueForProperty(
1070 domElement,
1071 propKey,
1072 nextProp,
@@ -1083,11 +1095,7 @@ export function diffHydratedProperties(
1095 // $FlowFixMe - Should be inferred as not undefined.
1096 extraAttributeNames.delete(propKey);
1097 }
1086 - serverValue = DOMPropertyOperations.getValueForAttribute(
1087 - domElement,
1088 - propKey,
1089 - nextProp,
1090 - );
1098 + serverValue = getValueForAttribute(domElement, propKey, nextProp);
1099 }
1100
1101 if (nextProp !== serverValue && !isMismatchDueToBadCasing) {
@@ -1109,14 +1117,14 @@ export function diffHydratedProperties(
1117 case 'input':
1118 // TODO: Make sure we check if this is still unmounted or do any clean
1119 // up necessary since we never stop tracking anymore.
1112 - inputValueTracking.track((domElement: any));
1113 - ReactDOMInput.postMountWrapper(domElement, rawProps, true);
1120 + track((domElement: any));
1121 + ReactDOMInputPostMountWrapper(domElement, rawProps, true);
1122 break;
1123 case 'textarea':
1124 // TODO: Make sure we check if this is still unmounted or do any clean
1125 // up necessary since we never stop tracking anymore.
1118 - inputValueTracking.track((domElement: any));
1119 - ReactDOMTextarea.postMountWrapper(domElement, rawProps);
1126 + track((domElement: any));
1127 + ReactDOMTextareaPostMountWrapper(domElement, rawProps);
1128 break;
1129 case 'select':
1130 case 'option':
@@ -1235,13 +1243,13 @@ export function restoreControlledState(
1243 ): void {
1244 switch (tag) {
1245 case 'input':
1238 - ReactDOMInput.restoreControlledState(domElement, props);
1246 + ReactDOMInputRestoreControlledState(domElement, props);
1247 return;
1248 case 'textarea':
1241 - ReactDOMTextarea.restoreControlledState(domElement, props);
1249 + ReactDOMTextareaRestoreControlledState(domElement, props);
1250 return;
1251 case 'select':
1244 - ReactDOMSelect.restoreControlledState(domElement, props);
1252 + ReactDOMSelectRestoreControlledState(domElement, props);
1253 return;
1254 }
1255 }
packages/react-dom/src/client/ReactDOMFB.js
+16 -8
@@ -7,22 +7,30 @@
7 * @flow
8 */
9
10 -import * as ReactFiberTreeReflection from 'react-reconciler/reflection';
11 -import * as ReactInstanceMap from 'shared/ReactInstanceMap';
10 +import {findCurrentFiberUsingSlowPath} from 'react-reconciler/reflection';
11 +import {get as getInstance} from 'shared/ReactInstanceMap';
12 import {addUserTimingListener} from 'shared/ReactFeatureFlags';
13
14 import ReactDOM from './ReactDOM';
15 -import * as ReactBrowserEventEmitter from '../events/ReactBrowserEventEmitter';
16 -import * as ReactDOMComponentTree from './ReactDOMComponentTree';
15 +import {isEnabled} from '../events/ReactBrowserEventEmitter';
16 +import {getClosestInstanceFromNode} from './ReactDOMComponentTree';
17
18 Object.assign(
19 (ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: any),
20 {
21 // These are real internal dependencies that are trickier to remove:
22 - ReactBrowserEventEmitter,
23 - ReactFiberTreeReflection,
24 - ReactDOMComponentTree,
25 - ReactInstanceMap,
22 + ReactBrowserEventEmitter: {
23 + isEnabled,
24 + },
25 + ReactFiberTreeReflection: {
26 + findCurrentFiberUsingSlowPath,
27 + },
28 + ReactDOMComponentTree: {
29 + getClosestInstanceFromNode,
30 + },
31 + ReactInstanceMap: {
32 + get: getInstance,
33 + },
34 // Perf experiment
35 addUserTimingListener,
36 },
packages/react-dom/src/client/ReactDOMHostConfig.js
+10 -7
@@ -23,10 +23,13 @@ import {
23 warnForInsertedHydratedElement,
24 warnForInsertedHydratedText,
25 } from './ReactDOMComponent';
26 -import * as ReactInputSelection from './ReactInputSelection';
26 +import {getSelectionInformation, restoreSelection} from './ReactInputSelection';
27 import setTextContent from './setTextContent';
28 import {validateDOMNesting, updatedAncestorInfo} from './validateDOMNesting';
29 -import * as ReactBrowserEventEmitter from '../events/ReactBrowserEventEmitter';
29 +import {
30 + isEnabled as ReactBrowserEventEmitterIsEnabled,
31 + setEnabled as ReactBrowserEventEmitterSetEnabled,
32 +} from '../events/ReactBrowserEventEmitter';
33 import {getChildNamespace} from '../shared/DOMNamespaces';
34 import {
35 ELEMENT_NODE,
@@ -152,15 +155,15 @@ export function getPublicInstance(instance: Instance): * {
155 }
156
157 export function prepareForCommit(containerInfo: Container): void {
155 - eventsEnabled = ReactBrowserEventEmitter.isEnabled();
156 - selectionInformation = ReactInputSelection.getSelectionInformation();
157 - ReactBrowserEventEmitter.setEnabled(false);
158 + eventsEnabled = ReactBrowserEventEmitterIsEnabled();
159 + selectionInformation = getSelectionInformation();
160 + ReactBrowserEventEmitterSetEnabled(false);
161 }
162
163 export function resetAfterCommit(containerInfo: Container): void {
161 - ReactInputSelection.restoreSelection(selectionInformation);
164 + restoreSelection(selectionInformation);
165 selectionInformation = null;
163 - ReactBrowserEventEmitter.setEnabled(eventsEnabled);
166 + ReactBrowserEventEmitterSetEnabled(eventsEnabled);
167 eventsEnabled = null;
168 }
169
packages/react-dom/src/client/ReactDOMInput.js
+4 -4
@@ -12,11 +12,11 @@ import {getCurrentFiberOwnerNameInDevOrNull} from 'react-reconciler/src/ReactCur
12 import invariant from 'shared/invariant';
13 import warning from 'shared/warning';
14
15 -import * as DOMPropertyOperations from './DOMPropertyOperations';
15 +import {setValueForProperty} from './DOMPropertyOperations';
16 import {getFiberCurrentPropsFromNode} from './ReactDOMComponentTree';
17 import {getToStringValue, toString} from './ToStringValue';
18 import ReactControlledValuePropTypes from '../shared/ReactControlledValuePropTypes';
19 -import * as inputValueTracking from './inputValueTracking';
19 +import {updateValueIfChanged} from './inputValueTracking';
20 import {disableInputAttributeSyncing} from 'shared/ReactFeatureFlags';
21
22 import type {ToStringValue} from './ToStringValue';
@@ -129,7 +129,7 @@ export function updateChecked(element: Element, props: Object) {
129 const node = ((element: any): InputWithWrapperState);
130 const checked = props.checked;
131 if (checked != null) {
132 - DOMPropertyOperations.setValueForProperty(node, 'checked', checked, false);
132 + setValueForProperty(node, 'checked', checked, false);
133 }
134 }
135
@@ -389,7 +389,7 @@ function updateNamedCousins(rootNode, props) {
389
390 // We need update the tracked value on the named cousin since the value
391 // was changed but the input saw no event or value set
392 - inputValueTracking.updateValueIfChanged(otherNode);
392 + updateValueIfChanged(otherNode);
393
394 // If this is a controlled radio button group, forcing the input that
395 // was previously checked to update will cause it to be come re-checked
packages/react-dom/src/client/ReactInputSelection.js
+3 -3
@@ -7,7 +7,7 @@
7
8 import getActiveElement from './getActiveElement';
9
10 -import * as ReactDOMSelection from './ReactDOMSelection';
10 +import {getOffsets, setOffsets} from './ReactDOMSelection';
11 import {ELEMENT_NODE, TEXT_NODE} from '../shared/HTMLNodeType';
12
13 function isTextNode(node) {
@@ -152,7 +152,7 @@ export function getSelection(input) {
152 };
153 } else {
154 // Content editable or old IE textarea.
155 - selection = ReactDOMSelection.getOffsets(input);
155 + selection = getOffsets(input);
156 }
157
158 return selection || {start: 0, end: 0};
@@ -174,6 +174,6 @@ export function setSelection(input, offsets) {
174 input.selectionStart = start;
175 input.selectionEnd = Math.min(end, input.value.length);
176 } else {
177 - ReactDOMSelection.setOffsets(input, offsets);
177 + setOffsets(input, offsets);
178 }
179 }
packages/react-dom/src/events/BeforeInputEventPlugin.js
+9 -5
@@ -22,7 +22,11 @@ import {
22 TOP_TEXT_INPUT,
23 TOP_PASTE,
24 } from './DOMTopLevelEventTypes';
25 -import * as FallbackCompositionState from './FallbackCompositionState';
25 +import {
26 + getData as FallbackCompositionStateGetData,
27 + initialize as FallbackCompositionStateInitialize,
28 + reset as FallbackCompositionStateReset,
29 +} from './FallbackCompositionState';
30 import SyntheticCompositionEvent from './SyntheticCompositionEvent';
31 import SyntheticInputEvent from './SyntheticInputEvent';
32
@@ -246,10 +250,10 @@ function extractCompositionEvent(
250 // The current composition is stored statically and must not be
251 // overwritten while composition continues.
252 if (!isComposing && eventType === eventTypes.compositionStart) {
249 - isComposing = FallbackCompositionState.initialize(nativeEventTarget);
253 + isComposing = FallbackCompositionStateInitialize(nativeEventTarget);
254 } else if (eventType === eventTypes.compositionEnd) {
255 if (isComposing) {
252 - fallbackData = FallbackCompositionState.getData();
256 + fallbackData = FallbackCompositionStateGetData();
257 }
258 }
259 }
@@ -346,8 +350,8 @@ function getFallbackBeforeInputChars(topLevelType: TopLevelType, nativeEvent) {
350 (!canUseCompositionEvent &&
351 isFallbackCompositionEnd(topLevelType, nativeEvent))
352 ) {
349 - const chars = FallbackCompositionState.getData();
350 - FallbackCompositionState.reset();
353 + const chars = FallbackCompositionStateGetData();
354 + FallbackCompositionStateReset();
355 isComposing = false;
356 return chars;
357 }
packages/react-dom/src/events/ChangeEventPlugin.js
+4 -4
@@ -5,7 +5,7 @@
5 * LICENSE file in the root directory of this source tree.
6 */
7
8 -import * as EventPluginHub from 'events/EventPluginHub';
8 +import {runEventsInBatch} from 'events/EventPluginHub';
9 import {accumulateTwoPhaseDispatches} from 'events/EventPropagators';
10 import {enqueueStateRestore} from 'events/ReactControlledComponent';
11 import {batchedUpdates} from 'events/ReactGenericBatching';
@@ -26,7 +26,7 @@ import {
26 import getEventTarget from './getEventTarget';
27 import isEventSupported from './isEventSupported';
28 import {getNodeFromInstance} from '../client/ReactDOMComponentTree';
29 -import * as inputValueTracking from '../client/inputValueTracking';
29 +import {updateValueIfChanged} from '../client/inputValueTracking';
30 import {setDefaultValue} from '../client/ReactDOMInput';
31 import {disableInputAttributeSyncing} from 'shared/ReactFeatureFlags';
32
@@ -100,12 +100,12 @@ function manualDispatchChangeEvent(nativeEvent) {
100 }
101
102 function runEventInBatch(event) {
103 - EventPluginHub.runEventsInBatch(event);
103 + runEventsInBatch(event);
104 }
105
106 function getInstIfValueChanged(targetInst) {
107 const targetNode = getNodeFromInstance(targetInst);
108 - if (inputValueTracking.updateValueIfChanged(targetNode)) {
108 + if (updateValueIfChanged(targetNode)) {
109 return targetInst;
110 }
111 }
packages/react-dom/src/events/SelectEventPlugin.js
+2 -5
@@ -25,7 +25,7 @@ import {
25 import {isListeningToAllDependencies} from './ReactBrowserEventEmitter';
26 import getActiveElement from '../client/getActiveElement';
27 import {getNodeFromInstance} from '../client/ReactDOMComponentTree';
28 -import * as ReactInputSelection from '../client/ReactInputSelection';
28 +import {hasSelectionCapabilities} from '../client/ReactInputSelection';
29 import {DOCUMENT_NODE} from '../shared/HTMLNodeType';
30
31 const skipSelectionChangeEvent =
@@ -66,10 +66,7 @@ let mouseDown = false;
66 * @return {object}
67 */
68 function getSelection(node) {
69 - if (
70 - 'selectionStart' in node &&
71 - ReactInputSelection.hasSelectionCapabilities(node)
72 - ) {
69 + if ('selectionStart' in node && hasSelectionCapabilities(node)) {
70 return {
71 start: node.selectionStart,
72 end: node.selectionEnd,
packages/react-dom/src/test-utils/ReactTestUtils.js
+4 -4
@@ -8,7 +8,7 @@
8 import React from 'react';
9 import ReactDOM from 'react-dom';
10 import {findCurrentFiberUsingSlowPath} from 'react-reconciler/reflection';
11 -import * as ReactInstanceMap from 'shared/ReactInstanceMap';
11 +import {get as getInstance} from 'shared/ReactInstanceMap';
12 import {
13 ClassComponent,
14 FunctionComponent,
@@ -121,7 +121,7 @@ function validateClassInstance(inst, methodName) {
121 // This is probably too relaxed but it's existing behavior.
122 return;
123 }
124 - if (ReactInstanceMap.get(inst)) {
124 + if (getInstance(inst)) {
125 // This is a public instance indeed.
126 return;
127 }
@@ -198,7 +198,7 @@ const ReactTestUtils = {
198 if (!ReactTestUtils.isCompositeComponent(inst)) {
199 return false;
200 }
201 - const internalInstance = ReactInstanceMap.get(inst);
201 + const internalInstance = getInstance(inst);
202 const constructor = internalInstance.type;
203 return constructor === type;
204 },
@@ -208,7 +208,7 @@ const ReactTestUtils = {
208 if (!inst) {
209 return [];
210 }
211 - const internalInstance = ReactInstanceMap.get(inst);
211 + const internalInstance = getInstance(inst);
212 return findAllInRenderedFiberTreeInternal(internalInstance, test);
213 },
214
packages/react-dom/src/unstable-native-dependencies/ReactDOMUnstableNativeDependencies.js
+2 -2
@@ -6,7 +6,7 @@
6 */
7
8 import ReactDOM from 'react-dom';
9 -import * as EventPluginUtils from 'events/EventPluginUtils';
9 +import {setComponentTree} from 'events/EventPluginUtils';
10 import ResponderEventPlugin from 'events/ResponderEventPlugin';
11 import ResponderTouchHistoryStore from 'events/ResponderTouchHistoryStore';
12
@@ -19,7 +19,7 @@ const [
19 injectEventPluginsByName,
20 ] = ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Events;
21
22 -EventPluginUtils.setComponentTree(
22 +setComponentTree(
23 getFiberCurrentPropsFromNode,
24 getInstanceFromNode,
25 getNodeFromInstance,
packages/react-native-renderer/src/NativeMethodsMixin.js
+2 -5
@@ -20,7 +20,7 @@ import invariant from 'shared/invariant';
20 import TextInputState from 'TextInputState';
21 import UIManager from 'UIManager';
22
23 -import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
23 +import {create} from './ReactNativeAttributePayload';
24 import {
25 mountSafeCallback_NOT_REALLY_SAFE,
26 throwOnStylesProp,
@@ -149,10 +149,7 @@ export default function(
149 warnForStyleProps(nativeProps, viewConfig.validAttributes);
150 }
151
152 - const updatePayload = ReactNativeAttributePayload.create(
153 - nativeProps,
154 - viewConfig.validAttributes,
155 - );
152 + const updatePayload = create(nativeProps, viewConfig.validAttributes);
153
154 // Avoid the overhead of bridge calls if there's no update.
155 // This is an expensive no-op for Android, and causes an unnecessary
packages/react-native-renderer/src/ReactFabric.js
+26 -19
@@ -12,15 +12,25 @@ import type {ReactNodeList} from 'shared/ReactTypes';
12
13 import './ReactFabricInjection';
14
15 -import * as ReactFabricRenderer from 'react-reconciler/inline.fabric';
16 -
17 -import * as ReactPortal from 'shared/ReactPortal';
18 -import * as ReactGenericBatching from 'events/ReactGenericBatching';
15 +import {
16 + findHostInstance,
17 + findHostInstanceWithWarning,
18 + batchedUpdates as batchedUpdatesImpl,
19 + interactiveUpdates,
20 + flushInteractiveUpdates,
21 + createContainer,
22 + updateContainer,
23 + injectIntoDevTools,
24 + getPublicRootInstance,
25 +} from 'react-reconciler/inline.fabric';
26 +
27 +import {createPortal} from 'shared/ReactPortal';
28 +import {setBatchingImplementation} from 'events/ReactGenericBatching';
29 import ReactVersion from 'shared/ReactVersion';
30
31 import NativeMethodsMixin from './NativeMethodsMixin';
32 import ReactNativeComponent from './ReactNativeComponent';
23 -import * as ReactFabricComponentTree from './ReactFabricComponentTree';
33 +import {getClosestInstanceFromNode} from './ReactFabricComponentTree';
34 import {getInspectorDataForViewTag} from './ReactNativeFiberInspector';
35
36 import ReactSharedInternals from 'shared/ReactSharedInternals';
@@ -28,9 +38,6 @@ import getComponentName from 'shared/getComponentName';
38 import warningWithoutStack from 'shared/warningWithoutStack';
39
40 const ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
31 -const findHostInstance = ReactFabricRenderer.findHostInstance;
32 -const findHostInstanceWithWarning =
33 - ReactFabricRenderer.findHostInstanceWithWarning;
41
42 function findNodeHandle(componentOrHandle: any): ?number {
43 if (__DEV__) {
@@ -84,10 +91,10 @@ function findNodeHandle(componentOrHandle: any): ?number {
91 return hostInstance._nativeTag;
92 }
93
87 -ReactGenericBatching.setBatchingImplementation(
88 - ReactFabricRenderer.batchedUpdates,
89 - ReactFabricRenderer.interactiveUpdates,
90 - ReactFabricRenderer.flushInteractiveUpdates,
94 +setBatchingImplementation(
95 + batchedUpdatesImpl,
96 + interactiveUpdates,
97 + flushInteractiveUpdates,
98 );
99
100 const roots = new Map();
@@ -103,19 +110,19 @@ const ReactFabric: ReactFabricType = {
110 if (!root) {
111 // TODO (bvaughn): If we decide to keep the wrapper component,
112 // We could create a wrapper for containerTag as well to reduce special casing.
106 - root = ReactFabricRenderer.createContainer(containerTag, false, false);
113 + root = createContainer(containerTag, false, false);
114 roots.set(containerTag, root);
115 }
109 - ReactFabricRenderer.updateContainer(element, root, null, callback);
116 + updateContainer(element, root, null, callback);
117
111 - return ReactFabricRenderer.getPublicRootInstance(root);
118 + return getPublicRootInstance(root);
119 },
120
121 unmountComponentAtNode(containerTag: number) {
122 const root = roots.get(containerTag);
123 if (root) {
124 // TODO: Is it safe to reset this now or should I wait since this unmount could be deferred?
118 - ReactFabricRenderer.updateContainer(null, root, null, () => {
125 + updateContainer(null, root, null, () => {
126 roots.delete(containerTag);
127 });
128 }
@@ -126,7 +133,7 @@ const ReactFabric: ReactFabricType = {
133 containerTag: number,
134 key: ?string = null,
135 ) {
129 - return ReactPortal.createPortal(children, containerTag, null, key);
136 + return createPortal(children, containerTag, null, key);
137 },
138
139 __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {
@@ -135,8 +142,8 @@ const ReactFabric: ReactFabricType = {
142 },
143 };
144
138 -ReactFabricRenderer.injectIntoDevTools({
139 - findFiberByHostInstance: ReactFabricComponentTree.getClosestInstanceFromNode,
145 +injectIntoDevTools({
146 + findFiberByHostInstance: getClosestInstanceFromNode,
147 getInspectorDataForViewTag: getInspectorDataForViewTag,
148 bundleType: __DEV__ ? 1 : 0,
149 version: ReactVersion,
packages/react-native-renderer/src/ReactFabricHostConfig.js
+18 -25
@@ -19,9 +19,14 @@ import {
19 mountSafeCallback_NOT_REALLY_SAFE,
20 warnForStyleProps,
21 } from './NativeMethodsMixinUtils';
22 -import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
23 -import * as ReactNativeFrameScheduling from './ReactNativeFrameScheduling';
24 -import * as ReactNativeViewConfigRegistry from 'ReactNativeViewConfigRegistry';
22 +import {create, diff} from './ReactNativeAttributePayload';
23 +import {
24 + now as ReactNativeFrameSchedulingNow,
25 + cancelDeferredCallback as ReactNativeFrameSchedulingCancelDeferredCallback,
26 + scheduleDeferredCallback as ReactNativeFrameSchedulingScheduleDeferredCallback,
27 + shouldYield as ReactNativeFrameSchedulingShouldYield,
28 +} from './ReactNativeFrameScheduling';
29 +import {get as getViewConfigForType} from 'ReactNativeViewConfigRegistry';
30
31 import deepFreezeAndThrowOnMutationInDev from 'deepFreezeAndThrowOnMutationInDev';
32 import invariant from 'shared/invariant';
@@ -138,10 +143,7 @@ class ReactFabricHostComponent {
143 warnForStyleProps(nativeProps, this.viewConfig.validAttributes);
144 }
145
141 - const updatePayload = ReactNativeAttributePayload.create(
142 - nativeProps,
143 - this.viewConfig.validAttributes,
144 - );
146 + const updatePayload = create(nativeProps, this.viewConfig.validAttributes);
147
148 // Avoid the overhead of bridge calls if there's no update.
149 // This is an expensive no-op for Android, and causes an unnecessary
@@ -179,7 +181,7 @@ export function createInstance(
181 const tag = nextReactTag;
182 nextReactTag += 2;
183
182 - const viewConfig = ReactNativeViewConfigRegistry.get(type);
184 + const viewConfig = getViewConfigForType(type);
185
186 if (__DEV__) {
187 for (const key in viewConfig.validAttributes) {
@@ -194,10 +196,7 @@ export function createInstance(
196 'Nesting of <View> within <Text> is not currently supported.',
197 );
198
197 - const updatePayload = ReactNativeAttributePayload.create(
198 - props,
199 - viewConfig.validAttributes,
200 - );
199 + const updatePayload = create(props, viewConfig.validAttributes);
200
201 const node = createNode(
202 tag, // reactTag
@@ -295,11 +294,7 @@ export function prepareUpdate(
294 hostContext: HostContext,
295 ): null | Object {
296 const viewConfig = instance.canonical.viewConfig;
298 - const updatePayload = ReactNativeAttributePayload.diff(
299 - oldProps,
300 - newProps,
301 - viewConfig.validAttributes,
302 - );
297 + const updatePayload = diff(oldProps, newProps, viewConfig.validAttributes);
298 // TODO: If the event handlers have changed, we need to update the current props
299 // in the commit phase but there is no host config hook to do it yet.
300 // So instead we hack it by updating it in the render phase.
@@ -327,12 +322,10 @@ export function shouldSetTextContent(type: string, props: Props): boolean {
322
323 // The Fabric renderer is secondary to the existing React Native renderer.
324 export const isPrimaryRenderer = false;
330 -export const now = ReactNativeFrameScheduling.now;
331 -export const scheduleDeferredCallback =
332 - ReactNativeFrameScheduling.scheduleDeferredCallback;
333 -export const cancelDeferredCallback =
334 - ReactNativeFrameScheduling.cancelDeferredCallback;
335 -export const shouldYield = ReactNativeFrameScheduling.shouldYield;
325 +export const now = ReactNativeFrameSchedulingNow;
326 +export const scheduleDeferredCallback = ReactNativeFrameSchedulingScheduleDeferredCallback;
327 +export const cancelDeferredCallback = ReactNativeFrameSchedulingCancelDeferredCallback;
328 +export const shouldYield = ReactNativeFrameSchedulingShouldYield;
329
330 export const scheduleTimeout = setTimeout;
331 export const cancelTimeout = clearTimeout;
@@ -383,7 +376,7 @@ export function cloneHiddenInstance(
376 ): Instance {
377 const viewConfig = instance.canonical.viewConfig;
378 const node = instance.node;
386 - const updatePayload = ReactNativeAttributePayload.create(
379 + const updatePayload = create(
380 {style: {display: 'none'}},
381 viewConfig.validAttributes,
382 );
@@ -401,7 +394,7 @@ export function cloneUnhiddenInstance(
394 ): Instance {
395 const viewConfig = instance.canonical.viewConfig;
396 const node = instance.node;
404 - const updatePayload = ReactNativeAttributePayload.diff(
397 + const updatePayload = diff(
398 {...props, style: [props.style, {display: 'none'}]},
399 props,
400 viewConfig.validAttributes,
packages/react-native-renderer/src/ReactFabricInjection.js
+10 -6
@@ -9,15 +9,19 @@
9
10 import './ReactNativeInjectionShared';
11
12 -import * as ReactFabricComponentTree from './ReactFabricComponentTree';
13 -import * as EventPluginUtils from 'events/EventPluginUtils';
12 +import {
13 + getFiberCurrentPropsFromNode,
14 + getInstanceFromNode,
15 + getNodeFromInstance,
16 +} from './ReactFabricComponentTree';
17 +import {setComponentTree} from 'events/EventPluginUtils';
18 import ReactFabricGlobalResponderHandler from './ReactFabricGlobalResponderHandler';
19 import ResponderEventPlugin from 'events/ResponderEventPlugin';
20
17 -EventPluginUtils.setComponentTree(
18 - ReactFabricComponentTree.getFiberCurrentPropsFromNode,
19 - ReactFabricComponentTree.getInstanceFromNode,
20 - ReactFabricComponentTree.getNodeFromInstance,
21 +setComponentTree(
22 + getFiberCurrentPropsFromNode,
23 + getInstanceFromNode,
24 + getNodeFromInstance,
25 );
26
27 ResponderEventPlugin.injection.injectGlobalResponderHandler(
packages/react-native-renderer/src/ReactNativeBridgeEventPlugin.js
+4 -6
@@ -13,15 +13,13 @@ import {
13 accumulateDirectDispatches,
14 } from 'events/EventPropagators';
15 import type {TopLevelType} from 'events/TopLevelEventTypes';
16 -import * as ReactNativeViewConfigRegistry from 'ReactNativeViewConfigRegistry';
17 -import SyntheticEvent from 'events/SyntheticEvent';
18 -import invariant from 'shared/invariant';
19 -
20 -const {
16 +import {
17 customBubblingEventTypes,
18 customDirectEventTypes,
19 eventTypes,
24 -} = ReactNativeViewConfigRegistry;
20 +} from 'ReactNativeViewConfigRegistry';
21 +import SyntheticEvent from 'events/SyntheticEvent';
22 +import invariant from 'shared/invariant';
23
24 const ReactNativeBridgeEventPlugin = {
25 eventTypes: eventTypes,
packages/react-native-renderer/src/ReactNativeComponent.js
+2 -5
@@ -21,7 +21,7 @@ import React from 'react';
21 import TextInputState from 'TextInputState';
22 import UIManager from 'UIManager';
23
24 -import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
24 +import {create} from './ReactNativeAttributePayload';
25 import {mountSafeCallback_NOT_REALLY_SAFE} from './NativeMethodsMixinUtils';
26
27 export default function(
@@ -156,10 +156,7 @@ export default function(
156 const viewConfig: ReactNativeBaseComponentViewConfig<> =
157 maybeInstance.viewConfig || maybeInstance.canonical.viewConfig;
158
159 - const updatePayload = ReactNativeAttributePayload.create(
160 - nativeProps,
161 - viewConfig.validAttributes,
162 - );
159 + const updatePayload = create(nativeProps, viewConfig.validAttributes);
160
161 // Avoid the overhead of bridge calls if there's no update.
162 // This is an expensive no-op for Android, and causes an unnecessary
packages/react-native-renderer/src/ReactNativeEventEmitter.js
+1 -1
@@ -87,7 +87,7 @@ const removeTouchesAtIndices = function(
87 * @param {TopLevelType} topLevelType Top level type of event.
88 * @param {?object} nativeEventParam Object passed from native.
89 */
90 -export function _receiveRootNodeIDEvent(
90 +function _receiveRootNodeIDEvent(
91 rootNodeID: number,
92 topLevelType: TopLevelType,
93 nativeEventParam: ?AnyNativeEvent,
packages/react-native-renderer/src/ReactNativeFiberHostComponent.js
+2 -5
@@ -20,7 +20,7 @@ import type {Instance} from './ReactNativeHostConfig';
20 import TextInputState from 'TextInputState';
21 import UIManager from 'UIManager';
22
23 -import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
23 +import {create} from './ReactNativeAttributePayload';
24 import {
25 mountSafeCallback_NOT_REALLY_SAFE,
26 warnForStyleProps,
@@ -84,10 +84,7 @@ class ReactNativeFiberHostComponent {
84 warnForStyleProps(nativeProps, this.viewConfig.validAttributes);
85 }
86
87 - const updatePayload = ReactNativeAttributePayload.create(
88 - nativeProps,
89 - this.viewConfig.validAttributes,
90 - );
87 + const updatePayload = create(nativeProps, this.viewConfig.validAttributes);
88
89 // Avoid the overhead of bridge calls if there's no update.
90 // This is an expensive no-op for Android, and causes an unnecessary
packages/react-native-renderer/src/ReactNativeHostConfig.js
+17 -21
@@ -15,15 +15,20 @@ import invariant from 'shared/invariant';
15 import UIManager from 'UIManager';
16 import deepFreezeAndThrowOnMutationInDev from 'deepFreezeAndThrowOnMutationInDev';
17
18 -import * as ReactNativeViewConfigRegistry from 'ReactNativeViewConfigRegistry';
19 -import * as ReactNativeAttributePayload from './ReactNativeAttributePayload';
18 +import {get as getViewConfigForType} from 'ReactNativeViewConfigRegistry';
19 +import {create, diff} from './ReactNativeAttributePayload';
20 import {
21 precacheFiberNode,
22 uncacheFiberNode,
23 updateFiberProps,
24 } from './ReactNativeComponentTree';
25 import ReactNativeFiberHostComponent from './ReactNativeFiberHostComponent';
26 -import * as ReactNativeFrameScheduling from './ReactNativeFrameScheduling';
26 +import {
27 + now as ReactNativeFrameSchedulingNow,
28 + cancelDeferredCallback as ReactNativeFrameSchedulingCancelDeferredCallback,
29 + scheduleDeferredCallback as ReactNativeFrameSchedulingScheduleDeferredCallback,
30 + shouldYield as ReactNativeFrameSchedulingShouldYield,
31 +} from './ReactNativeFrameScheduling';
32
33 export type Type = string;
34 export type Props = Object;
@@ -92,7 +97,7 @@ export function createInstance(
97 internalInstanceHandle: Object,
98 ): Instance {
99 const tag = allocateTag();
95 - const viewConfig = ReactNativeViewConfigRegistry.get(type);
100 + const viewConfig = getViewConfigForType(type);
101
102 if (__DEV__) {
103 for (const key in viewConfig.validAttributes) {
@@ -107,10 +112,7 @@ export function createInstance(
112 'Nesting of <View> within <Text> is not currently supported.',
113 );
114
110 - const updatePayload = ReactNativeAttributePayload.create(
111 - props,
112 - viewConfig.validAttributes,
113 - );
115 + const updatePayload = create(props, viewConfig.validAttributes);
116
117 UIManager.createView(
118 tag, // reactTag
@@ -232,13 +234,11 @@ export function resetAfterCommit(containerInfo: Container): void {
234 // Noop
235 }
236
235 -export const now = ReactNativeFrameScheduling.now;
237 +export const now = ReactNativeFrameSchedulingNow;
238 export const isPrimaryRenderer = true;
237 -export const scheduleDeferredCallback =
238 - ReactNativeFrameScheduling.scheduleDeferredCallback;
239 -export const cancelDeferredCallback =
240 - ReactNativeFrameScheduling.cancelDeferredCallback;
241 -export const shouldYield = ReactNativeFrameScheduling.shouldYield;
239 +export const scheduleDeferredCallback = ReactNativeFrameSchedulingScheduleDeferredCallback;
240 +export const cancelDeferredCallback = ReactNativeFrameSchedulingCancelDeferredCallback;
241 +export const shouldYield = ReactNativeFrameSchedulingShouldYield;
242
243 export const scheduleTimeout = setTimeout;
244 export const cancelTimeout = clearTimeout;
@@ -342,11 +342,7 @@ export function commitUpdate(
342
343 updateFiberProps(instance._nativeTag, newProps);
344
345 - const updatePayload = ReactNativeAttributePayload.diff(
346 - oldProps,
347 - newProps,
348 - viewConfig.validAttributes,
349 - );
345 + const updatePayload = diff(oldProps, newProps, viewConfig.validAttributes);
346
347 // Avoid the overhead of bridge calls if there's no update.
348 // This is an expensive no-op for Android, and causes an unnecessary
@@ -455,7 +451,7 @@ export function resetTextContent(instance: Instance): void {
451
452 export function hideInstance(instance: Instance): void {
453 const viewConfig = instance.viewConfig;
458 - const updatePayload = ReactNativeAttributePayload.create(
454 + const updatePayload = create(
455 {style: {display: 'none'}},
456 viewConfig.validAttributes,
457 );
@@ -472,7 +468,7 @@ export function hideTextInstance(textInstance: TextInstance): void {
468
469 export function unhideInstance(instance: Instance, props: Props): void {
470 const viewConfig = instance.viewConfig;
475 - const updatePayload = ReactNativeAttributePayload.diff(
471 + const updatePayload = diff(
472 {...props, style: [props.style, {display: 'none'}]},
473 props,
474 viewConfig.validAttributes,
packages/react-native-renderer/src/ReactNativeInjection.js
+15 -8
@@ -9,9 +9,13 @@
9
10 import './ReactNativeInjectionShared';
11
12 -import * as ReactNativeComponentTree from './ReactNativeComponentTree';
13 -import * as EventPluginUtils from 'events/EventPluginUtils';
14 -import * as ReactNativeEventEmitter from './ReactNativeEventEmitter';
12 +import {
13 + getFiberCurrentPropsFromNode,
14 + getInstanceFromNode,
15 + getNodeFromInstance,
16 +} from './ReactNativeComponentTree';
17 +import {setComponentTree} from 'events/EventPluginUtils';
18 +import {receiveEvent, receiveTouches} from './ReactNativeEventEmitter';
19 import ReactNativeGlobalResponderHandler from './ReactNativeGlobalResponderHandler';
20 import ResponderEventPlugin from 'events/ResponderEventPlugin';
21
@@ -21,12 +25,15 @@ import RCTEventEmitter from 'RCTEventEmitter';
25 /**
26 * Register the event emitter with the native bridge
27 */
24 -RCTEventEmitter.register(ReactNativeEventEmitter);
28 +RCTEventEmitter.register({
29 + receiveEvent,
30 + receiveTouches,
31 +});
32
26 -EventPluginUtils.setComponentTree(
27 - ReactNativeComponentTree.getFiberCurrentPropsFromNode,
28 - ReactNativeComponentTree.getInstanceFromNode,
29 - ReactNativeComponentTree.getNodeFromInstance,
33 +setComponentTree(
34 + getFiberCurrentPropsFromNode,
35 + getInstanceFromNode,
36 + getNodeFromInstance,
37 );
38
39 ResponderEventPlugin.injection.injectGlobalResponderHandler(
packages/react-native-renderer/src/ReactNativeInjectionShared.js
+3 -3
@@ -16,7 +16,7 @@
16 // Module provided by RN:
17 import 'InitializeCore';
18
19 -import * as EventPluginHub from 'events/EventPluginHub';
19 +import {injection as EventPluginHubInjection} from 'events/EventPluginHub';
20 import ResponderEventPlugin from 'events/ResponderEventPlugin';
21
22 import ReactNativeBridgeEventPlugin from './ReactNativeBridgeEventPlugin';
@@ -25,13 +25,13 @@ import ReactNativeEventPluginOrder from './ReactNativeEventPluginOrder';
25 /**
26 * Inject module for resolving DOM hierarchy and plugin ordering.
27 */
28 -EventPluginHub.injection.injectEventPluginOrder(ReactNativeEventPluginOrder);
28 +EventPluginHubInjection.injectEventPluginOrder(ReactNativeEventPluginOrder);
29
30 /**
31 * Some important event plugins included by default (without having to require
32 * them).
33 */
34 -EventPluginHub.injection.injectEventPluginsByName({
34 +EventPluginHubInjection.injectEventPluginsByName({
35 ResponderEventPlugin: ResponderEventPlugin,
36 ReactNativeBridgeEventPlugin: ReactNativeBridgeEventPlugin,
37 });
packages/react-native-renderer/src/ReactNativeRenderer.js
+30 -24
@@ -12,18 +12,31 @@ import type {ReactNodeList} from 'shared/ReactTypes';
12
13 import './ReactNativeInjection';
14
15 -import * as ReactNativeFiberRenderer from 'react-reconciler/inline.native';
15 +import {
16 + findHostInstance,
17 + findHostInstanceWithWarning,
18 + batchedUpdates as batchedUpdatesImpl,
19 + interactiveUpdates,
20 + flushInteractiveUpdates,
21 + createContainer,
22 + updateContainer,
23 + injectIntoDevTools,
24 + getPublicRootInstance,
25 +} from 'react-reconciler/inline.native';
26 // TODO: direct imports like some-package/src/* are bad. Fix me.
27 import {getStackByFiberInDevAndProd} from 'react-reconciler/src/ReactCurrentFiber';
18 -import * as ReactPortal from 'shared/ReactPortal';
19 -import * as ReactGenericBatching from 'events/ReactGenericBatching';
28 +import {createPortal} from 'shared/ReactPortal';
29 +import {
30 + setBatchingImplementation,
31 + batchedUpdates,
32 +} from 'events/ReactGenericBatching';
33 import ReactVersion from 'shared/ReactVersion';
34 // Module provided by RN:
35 import UIManager from 'UIManager';
36
37 import NativeMethodsMixin from './NativeMethodsMixin';
38 import ReactNativeComponent from './ReactNativeComponent';
26 -import * as ReactNativeComponentTree from './ReactNativeComponentTree';
39 +import {getClosestInstanceFromNode} from './ReactNativeComponentTree';
40 import {getInspectorDataForViewTag} from './ReactNativeFiberInspector';
41
42 import ReactSharedInternals from 'shared/ReactSharedInternals';
@@ -31,9 +44,6 @@ import getComponentName from 'shared/getComponentName';
44 import warningWithoutStack from 'shared/warningWithoutStack';
45
46 const ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
34 -const findHostInstance = ReactNativeFiberRenderer.findHostInstance;
35 -const findHostInstanceWithWarning =
36 - ReactNativeFiberRenderer.findHostInstanceWithWarning;
47
48 function findNodeHandle(componentOrHandle: any): ?number {
49 if (__DEV__) {
@@ -85,14 +95,14 @@ function findNodeHandle(componentOrHandle: any): ?number {
95 return hostInstance._nativeTag;
96 }
97
88 -ReactGenericBatching.setBatchingImplementation(
89 - ReactNativeFiberRenderer.batchedUpdates,
90 - ReactNativeFiberRenderer.interactiveUpdates,
91 - ReactNativeFiberRenderer.flushInteractiveUpdates,
98 +setBatchingImplementation(
99 + batchedUpdatesImpl,
100 + interactiveUpdates,
101 + flushInteractiveUpdates,
102 );
103
104 function computeComponentStackForErrorReporting(reactTag: number): string {
95 - let fiber = ReactNativeComponentTree.getClosestInstanceFromNode(reactTag);
105 + let fiber = getClosestInstanceFromNode(reactTag);
106 if (!fiber) {
107 return '';
108 }
@@ -112,23 +122,19 @@ const ReactNativeRenderer: ReactNativeType = {
122 if (!root) {
123 // TODO (bvaughn): If we decide to keep the wrapper component,
124 // We could create a wrapper for containerTag as well to reduce special casing.
115 - root = ReactNativeFiberRenderer.createContainer(
116 - containerTag,
117 - false,
118 - false,
119 - );
125 + root = createContainer(containerTag, false, false);
126 roots.set(containerTag, root);
127 }
122 - ReactNativeFiberRenderer.updateContainer(element, root, null, callback);
128 + updateContainer(element, root, null, callback);
129
124 - return ReactNativeFiberRenderer.getPublicRootInstance(root);
130 + return getPublicRootInstance(root);
131 },
132
133 unmountComponentAtNode(containerTag: number) {
134 const root = roots.get(containerTag);
135 if (root) {
136 // TODO: Is it safe to reset this now or should I wait since this unmount could be deferred?
131 - ReactNativeFiberRenderer.updateContainer(null, root, null, () => {
137 + updateContainer(null, root, null, () => {
138 roots.delete(containerTag);
139 });
140 }
@@ -146,10 +152,10 @@ const ReactNativeRenderer: ReactNativeType = {
152 containerTag: number,
153 key: ?string = null,
154 ) {
149 - return ReactPortal.createPortal(children, containerTag, null, key);
155 + return createPortal(children, containerTag, null, key);
156 },
157
152 - unstable_batchedUpdates: ReactGenericBatching.batchedUpdates,
158 + unstable_batchedUpdates: batchedUpdates,
159
160 __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {
161 // Used as a mixin in many createClass-based components
@@ -158,8 +164,8 @@ const ReactNativeRenderer: ReactNativeType = {
164 },
165 };
166
161 -ReactNativeFiberRenderer.injectIntoDevTools({
162 - findFiberByHostInstance: ReactNativeComponentTree.getClosestInstanceFromNode,
167 +injectIntoDevTools({
168 + findFiberByHostInstance: getClosestInstanceFromNode,
169 getInspectorDataForViewTag: getInspectorDataForViewTag,
170 bundleType: __DEV__ ? 1 : 0,
171 version: ReactVersion,
packages/react-noop-renderer/src/createReactNoop.js
+2 -2
@@ -18,7 +18,7 @@ import type {Fiber} from 'react-reconciler/src/ReactFiber';
18 import type {UpdateQueue} from 'react-reconciler/src/ReactUpdateQueue';
19 import type {ReactNodeList} from 'shared/ReactTypes';
20
21 -import * as ReactPortal from 'shared/ReactPortal';
21 +import {createPortal} from 'shared/ReactPortal';
22 import expect from 'expect';
23 import {REACT_FRAGMENT_TYPE, REACT_ELEMENT_TYPE} from 'shared/ReactSymbols';
24
@@ -656,7 +656,7 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
656 container: Container,
657 key: ?string = null,
658 ) {
659 - return ReactPortal.createPortal(children, container, null, key);
659 + return createPortal(children, container, null, key);
660 },
661
662 // Shortcut for testing a single root
packages/react-reconciler/src/ReactFiberBeginWork.js
+15 -11
@@ -56,7 +56,11 @@ import getComponentName from 'shared/getComponentName';
56 import ReactStrictModeWarnings from './ReactStrictModeWarnings';
57 import warning from 'shared/warning';
58 import warningWithoutStack from 'shared/warningWithoutStack';
59 -import * as ReactCurrentFiber from './ReactCurrentFiber';
59 +import {
60 + setCurrentPhase,
61 + getCurrentFiberOwnerNameInDevOrNull,
62 + getCurrentFiberStackInDev,
63 +} from './ReactCurrentFiber';
64 import {startWorkTimer, cancelWorkTimer} from './ReactDebugFiberPerf';
65
66 import {
@@ -215,9 +219,9 @@ function updateForwardRef(
219 prepareToUseHooks(current, workInProgress, renderExpirationTime);
220 if (__DEV__) {
221 ReactCurrentOwner.current = workInProgress;
218 - ReactCurrentFiber.setCurrentPhase('render');
222 + setCurrentPhase('render');
223 nextChildren = render(nextProps, ref);
220 - ReactCurrentFiber.setCurrentPhase(null);
224 + setCurrentPhase(null);
225 } else {
226 nextChildren = render(nextProps, ref);
227 }
@@ -409,9 +413,9 @@ function updateFunctionComponent(
413 prepareToUseHooks(current, workInProgress, renderExpirationTime);
414 if (__DEV__) {
415 ReactCurrentOwner.current = workInProgress;
412 - ReactCurrentFiber.setCurrentPhase('render');
416 + setCurrentPhase('render');
417 nextChildren = Component(nextProps, context);
414 - ReactCurrentFiber.setCurrentPhase(null);
418 + setCurrentPhase(null);
419 } else {
420 nextChildren = Component(nextProps, context);
421 }
@@ -548,7 +552,7 @@ function finishClassComponent(
552 }
553 } else {
554 if (__DEV__) {
551 - ReactCurrentFiber.setCurrentPhase('render');
555 + setCurrentPhase('render');
556 nextChildren = instance.render();
557 if (
558 debugRenderPhaseSideEffects ||
@@ -557,7 +561,7 @@ function finishClassComponent(
561 ) {
562 instance.render();
563 }
560 - ReactCurrentFiber.setCurrentPhase(null);
564 + setCurrentPhase(null);
565 } else {
566 nextChildren = instance.render();
567 }
@@ -1011,7 +1015,7 @@ function validateFunctionComponentInDev(workInProgress: Fiber, Component: any) {
1015 }
1016 if (workInProgress.ref !== null) {
1017 let info = '';
1014 - const ownerName = ReactCurrentFiber.getCurrentFiberOwnerNameInDevOrNull();
1018 + const ownerName = getCurrentFiberOwnerNameInDevOrNull();
1019 if (ownerName) {
1020 info += '\n\nCheck the render method of `' + ownerName + '`.';
1021 }
@@ -1378,7 +1382,7 @@ function updateContextProvider(
1382 newProps,
1383 'prop',
1384 'Context.Provider',
1381 - ReactCurrentFiber.getCurrentFiberStackInDev,
1385 + getCurrentFiberStackInDev,
1386 );
1387 }
1388 }
@@ -1469,9 +1473,9 @@ function updateContextConsumer(
1473 let newChildren;
1474 if (__DEV__) {
1475 ReactCurrentOwner.current = workInProgress;
1472 - ReactCurrentFiber.setCurrentPhase('render');
1476 + setCurrentPhase('render');
1477 newChildren = render(newValue);
1474 - ReactCurrentFiber.setCurrentPhase(null);
1478 + setCurrentPhase(null);
1479 } else {
1480 newChildren = render(newValue);
1481 }
packages/react-reconciler/src/ReactFiberClassComponent.js
+5 -5
@@ -19,7 +19,7 @@ import {
19 } from 'shared/ReactFeatureFlags';
20 import ReactStrictModeWarnings from './ReactStrictModeWarnings';
21 import {isMounted} from 'react-reconciler/reflection';
22 -import * as ReactInstanceMap from 'shared/ReactInstanceMap';
22 +import {get as getInstance, set as setInstance} from 'shared/ReactInstanceMap';
23 import ReactSharedInternals from 'shared/ReactSharedInternals';
24 import shallowEqual from 'shared/shallowEqual';
25 import getComponentName from 'shared/getComponentName';
@@ -188,7 +188,7 @@ export function applyDerivedStateFromProps(
188 const classComponentUpdater = {
189 isMounted,
190 enqueueSetState(inst, payload, callback) {
191 - const fiber = ReactInstanceMap.get(inst);
191 + const fiber = getInstance(inst);
192 const currentTime = requestCurrentTime();
193 const expirationTime = computeExpirationForFiber(currentTime, fiber);
194
@@ -206,7 +206,7 @@ const classComponentUpdater = {
206 scheduleWork(fiber, expirationTime);
207 },
208 enqueueReplaceState(inst, payload, callback) {
209 - const fiber = ReactInstanceMap.get(inst);
209 + const fiber = getInstance(inst);
210 const currentTime = requestCurrentTime();
211 const expirationTime = computeExpirationForFiber(currentTime, fiber);
212
@@ -226,7 +226,7 @@ const classComponentUpdater = {
226 scheduleWork(fiber, expirationTime);
227 },
228 enqueueForceUpdate(inst, callback) {
229 - const fiber = ReactInstanceMap.get(inst);
229 + const fiber = getInstance(inst);
230 const currentTime = requestCurrentTime();
231 const expirationTime = computeExpirationForFiber(currentTime, fiber);
232
@@ -504,7 +504,7 @@ function adoptClassInstance(workInProgress: Fiber, instance: any): void {
504 instance.updater = classComponentUpdater;
505 workInProgress.stateNode = instance;
506 // The instance needs access to the fiber so that it can schedule updates
507 - ReactInstanceMap.set(instance, workInProgress);
507 + setInstance(instance, workInProgress);
508 if (__DEV__) {
509 instance._reactInternalInstance = fakeInternalInstance;
510 }
packages/react-reconciler/src/ReactFiberContext.js
+5 -5
@@ -17,7 +17,7 @@ import invariant from 'shared/invariant';
17 import warningWithoutStack from 'shared/warningWithoutStack';
18 import checkPropTypes from 'prop-types/checkPropTypes';
19
20 -import * as ReactCurrentFiber from './ReactCurrentFiber';
20 +import {setCurrentPhase, getCurrentFiberStackInDev} from './ReactCurrentFiber';
21 import {startPhaseTimer, stopPhaseTimer} from './ReactDebugFiberPerf';
22 import {createCursor, push, pop} from './ReactFiberStack';
23
@@ -99,7 +99,7 @@ function getMaskedContext(
99 context,
100 'context',
101 name,
102 - ReactCurrentFiber.getCurrentFiberStackInDev,
102 + getCurrentFiberStackInDev,
103 );
104 }
105
@@ -177,13 +177,13 @@ function processChildContext(
177
178 let childContext;
179 if (__DEV__) {
180 - ReactCurrentFiber.setCurrentPhase('getChildContext');
180 + setCurrentPhase('getChildContext');
181 }
182 startPhaseTimer(fiber, 'getChildContext');
183 childContext = instance.getChildContext();
184 stopPhaseTimer();
185 if (__DEV__) {
186 - ReactCurrentFiber.setCurrentPhase(null);
186 + setCurrentPhase(null);
187 }
188 for (let contextKey in childContext) {
189 invariant(
@@ -205,7 +205,7 @@ function processChildContext(
205 // context from the parent component instance. The stack will be missing
206 // because it's outside of the reconciliation, and so the pointer has not
207 // been set. This is rare and doesn't matter. We'll also remove that API.
208 - ReactCurrentFiber.getCurrentFiberStackInDev,
208 + getCurrentFiberStackInDev,
209 );
210 }
211
packages/react-reconciler/src/ReactFiberReconciler.js
+14 -11
@@ -22,7 +22,7 @@ import {
22 findCurrentHostFiber,
23 findCurrentHostFiberWithNoPortals,
24 } from 'react-reconciler/reflection';
25 -import * as ReactInstanceMap from 'shared/ReactInstanceMap';
25 +import {get as getInstance} from 'shared/ReactInstanceMap';
26 import {HostComponent, ClassComponent} from 'shared/ReactWorkTags';
27 import getComponentName from 'shared/getComponentName';
28 import invariant from 'shared/invariant';
@@ -36,7 +36,7 @@ import {
36 isContextProvider as isLegacyContextProvider,
37 } from './ReactFiberContext';
38 import {createFiberRoot} from './ReactFiberRoot';
39 -import * as ReactFiberDevToolsHook from './ReactFiberDevToolsHook';
39 +import {injectInternals} from './ReactFiberDevToolsHook';
40 import {
41 computeUniqueAsyncExpiration,
42 requestCurrentTime,
@@ -56,8 +56,11 @@ import {
56 } from './ReactFiberScheduler';
57 import {createUpdate, enqueueUpdate} from './ReactUpdateQueue';
58 import ReactFiberInstrumentation from './ReactFiberInstrumentation';
59 -import * as ReactCurrentFiber from './ReactCurrentFiber';
60 -import {getStackByFiberInDevAndProd} from './ReactCurrentFiber';
59 +import {
60 + getStackByFiberInDevAndProd,
61 + phase as ReactCurrentFiberPhase,
62 + current as ReactCurrentFiberCurrent,
63 +} from './ReactCurrentFiber';
64 import {StrictMode} from './ReactTypeOfMode';
65
66 type OpaqueRoot = FiberRoot;
@@ -94,7 +97,7 @@ function getContextForSubtree(
97 return emptyContextObject;
98 }
99
97 - const fiber = ReactInstanceMap.get(parentComponent);
100 + const fiber = getInstance(parentComponent);
101 const parentContext = findCurrentUnmaskedContext(fiber);
102
103 if (fiber.tag === ClassComponent) {
@@ -115,8 +118,8 @@ function scheduleRootUpdate(
118 ) {
119 if (__DEV__) {
120 if (
118 - ReactCurrentFiber.phase === 'render' &&
119 - ReactCurrentFiber.current !== null &&
121 + ReactCurrentFiberPhase === 'render' &&
122 + ReactCurrentFiberCurrent !== null &&
123 !didWarnAboutNestedUpdates
124 ) {
125 didWarnAboutNestedUpdates = true;
@@ -126,7 +129,7 @@ function scheduleRootUpdate(
129 'triggering nested component updates from render is not allowed. ' +
130 'If necessary, trigger nested updates in componentDidUpdate.\n\n' +
131 'Check the render method of %s.',
129 - getComponentName(ReactCurrentFiber.current.type) || 'Unknown',
132 + getComponentName(ReactCurrentFiberCurrent.type) || 'Unknown',
133 );
134 }
135 }
@@ -187,7 +190,7 @@ export function updateContainerAtExpirationTime(
190 }
191
192 function findHostInstance(component: Object): PublicInstance | null {
190 - const fiber = ReactInstanceMap.get(component);
193 + const fiber = getInstance(component);
194 if (fiber === undefined) {
195 if (typeof component.render === 'function') {
196 invariant(false, 'Unable to find node on an unmounted component.');
@@ -211,7 +214,7 @@ function findHostInstanceWithWarning(
214 methodName: string,
215 ): PublicInstance | null {
216 if (__DEV__) {
214 - const fiber = ReactInstanceMap.get(component);
217 + const fiber = getInstance(component);
218 if (fiber === undefined) {
219 if (typeof component.render === 'function') {
220 invariant(false, 'Unable to find node on an unmounted component.');
@@ -338,7 +341,7 @@ export function findHostInstanceWithNoPortals(
341
342 export function injectIntoDevTools(devToolsConfig: DevToolsConfig): boolean {
343 const {findFiberByHostInstance} = devToolsConfig;
341 - return ReactFiberDevToolsHook.injectInternals({
344 + return injectInternals({
345 ...devToolsConfig,
346 findHostInstanceByFiber(fiber: Fiber): Instance | TextInstance | null {
347 const hostFiber = findCurrentHostFiber(fiber);
packages/react-reconciler/src/ReactFiberScheduler.js
+17 -12
@@ -68,7 +68,12 @@ import invariant from 'shared/invariant';
68 import warningWithoutStack from 'shared/warningWithoutStack';
69
70 import ReactFiberInstrumentation from './ReactFiberInstrumentation';
71 -import * as ReactCurrentFiber from './ReactCurrentFiber';
71 +import {
72 + getStackByFiberInDevAndProd,
73 + phase as ReactCurrentFiberPhase,
74 + resetCurrentFiber,
75 + setCurrentFiber,
76 +} from './ReactCurrentFiber';
77 import {
78 now,
79 scheduleDeferredCallback,
@@ -210,13 +215,13 @@ if (__DEV__) {
215 isClass
216 ? 'the componentWillUnmount method'
217 : 'a useEffect cleanup function',
213 - ReactCurrentFiber.getStackByFiberInDevAndProd(fiber),
218 + getStackByFiberInDevAndProd(fiber),
219 );
220 didWarnStateUpdateForUnmountedComponent[componentName] = true;
221 };
222
223 warnAboutInvalidUpdates = function(instance: React$Component<any>) {
219 - switch (ReactCurrentFiber.phase) {
224 + switch (ReactCurrentFiberPhase) {
225 case 'getChildContext':
226 if (didWarnSetStateChildContext) {
227 return;
@@ -392,7 +397,7 @@ function resetStack() {
397 function commitAllHostEffects() {
398 while (nextEffect !== null) {
399 if (__DEV__) {
395 - ReactCurrentFiber.setCurrentFiber(nextEffect);
400 + setCurrentFiber(nextEffect);
401 }
402 recordEffect();
403
@@ -451,14 +456,14 @@ function commitAllHostEffects() {
456 }
457
458 if (__DEV__) {
454 - ReactCurrentFiber.resetCurrentFiber();
459 + resetCurrentFiber();
460 }
461 }
462
463 function commitBeforeMutationLifecycles() {
464 while (nextEffect !== null) {
465 if (__DEV__) {
461 - ReactCurrentFiber.setCurrentFiber(nextEffect);
466 + setCurrentFiber(nextEffect);
467 }
468
469 const effectTag = nextEffect.effectTag;
@@ -472,7 +477,7 @@ function commitBeforeMutationLifecycles() {
477 }
478
479 if (__DEV__) {
475 - ReactCurrentFiber.resetCurrentFiber();
480 + resetCurrentFiber();
481 }
482 }
483
@@ -947,7 +952,7 @@ function completeUnitOfWork(workInProgress: Fiber): Fiber | null {
952 // progress.
953 const current = workInProgress.alternate;
954 if (__DEV__) {
950 - ReactCurrentFiber.setCurrentFiber(workInProgress);
955 + setCurrentFiber(workInProgress);
956 }
957
958 const returnFiber = workInProgress.return;
@@ -988,7 +993,7 @@ function completeUnitOfWork(workInProgress: Fiber): Fiber | null {
993 stopWorkTimer(workInProgress);
994 resetChildExpirationTime(workInProgress, nextRenderExpirationTime);
995 if (__DEV__) {
991 - ReactCurrentFiber.resetCurrentFiber();
996 + resetCurrentFiber();
997 }
998
999 if (nextUnitOfWork !== null) {
@@ -1076,7 +1081,7 @@ function completeUnitOfWork(workInProgress: Fiber): Fiber | null {
1081 }
1082
1083 if (__DEV__) {
1079 - ReactCurrentFiber.resetCurrentFiber();
1084 + resetCurrentFiber();
1085 }
1086
1087 if (next !== null) {
@@ -1132,7 +1137,7 @@ function performUnitOfWork(workInProgress: Fiber): Fiber | null {
1137 // See if beginning this work spawns more work.
1138 startWorkTimer(workInProgress);
1139 if (__DEV__) {
1135 - ReactCurrentFiber.setCurrentFiber(workInProgress);
1140 + setCurrentFiber(workInProgress);
1141 }
1142
1143 if (__DEV__ && replayFailedUnitOfWorkWithInvokeGuardedCallback) {
@@ -1161,7 +1166,7 @@ function performUnitOfWork(workInProgress: Fiber): Fiber | null {
1166 }
1167
1168 if (__DEV__) {
1164 - ReactCurrentFiber.resetCurrentFiber();
1169 + resetCurrentFiber();
1170 if (isReplayingFailedUnitOfWork) {
1171 // Currently replaying a failed unit of work. This should be unreachable,
1172 // because the render phase is meant to be idempotent, and it should
packages/react-reconciler/src/ReactFiberTreeReflection.js
+2 -2
@@ -12,7 +12,7 @@ import type {Fiber} from './ReactFiber';
12 import invariant from 'shared/invariant';
13 import warningWithoutStack from 'shared/warningWithoutStack';
14
15 -import * as ReactInstanceMap from 'shared/ReactInstanceMap';
15 +import {get as getInstance} from 'shared/ReactInstanceMap';
16 import ReactSharedInternals from 'shared/ReactSharedInternals';
17 import getComponentName from 'shared/getComponentName';
18 import {
@@ -82,7 +82,7 @@ export function isMounted(component: React$Component<any, any>): boolean {
82 }
83 }
84
85 - const fiber: ?Fiber = ReactInstanceMap.get(component);
85 + const fiber: ?Fiber = getInstance(component);
86 if (!fiber) {
87 return false;
88 }
packages/react-test-renderer/src/ReactTestHostConfig.js
+10 -7
@@ -8,7 +8,12 @@
8 */
9
10 import warning from 'shared/warning';
11 -import * as TestRendererScheduling from './ReactTestRendererScheduling';
11 +import {
12 + nowImplementation as TestRendererSchedulingNowImplementation,
13 + scheduleDeferredCallback as TestRendererSchedulingScheduleDeferredCallback,
14 + cancelDeferredCallback as TestRendererSchedulingCancelDeferredCallback,
15 + shouldYield as TestRendererSchedulingShouldYield,
16 +} from './ReactTestRendererScheduling';
17
18 export type Type = string;
19 export type Props = Object;
@@ -197,12 +202,10 @@ export function createTextInstance(
202 export const isPrimaryRenderer = false;
203 // This approach enables `now` to be mocked by tests,
204 // Even after the reconciler has initialized and read host config values.
200 -export const now = () => TestRendererScheduling.nowImplementation();
201 -export const scheduleDeferredCallback =
202 - TestRendererScheduling.scheduleDeferredCallback;
203 -export const cancelDeferredCallback =
204 - TestRendererScheduling.cancelDeferredCallback;
205 -export const shouldYield = TestRendererScheduling.shouldYield;
205 +export const now = () => TestRendererSchedulingNowImplementation();
206 +export const scheduleDeferredCallback = TestRendererSchedulingScheduleDeferredCallback;
207 +export const cancelDeferredCallback = TestRendererSchedulingCancelDeferredCallback;
208 +export const shouldYield = TestRendererSchedulingShouldYield;
209
210 export const scheduleTimeout = setTimeout;
211 export const cancelTimeout = clearTimeout;
packages/react-test-renderer/src/ReactTestRenderer.js
+30 -18
@@ -11,7 +11,13 @@ import type {Fiber} from 'react-reconciler/src/ReactFiber';
11 import type {FiberRoot} from 'react-reconciler/src/ReactFiberRoot';
12 import type {Instance, TextInstance} from './ReactTestHostConfig';
13
14 -import * as TestRenderer from 'react-reconciler/inline.test';
14 +import {
15 + getPublicRootInstance,
16 + createContainer,
17 + updateContainer,
18 + flushSync,
19 + injectIntoDevTools,
20 +} from 'react-reconciler/inline.test';
21 import {batchedUpdates} from 'events/ReactGenericBatching';
22 import {findCurrentFiberUsingSlowPath} from 'react-reconciler/reflection';
23 import {
@@ -34,8 +40,14 @@ import {
40 import invariant from 'shared/invariant';
41 import ReactVersion from 'shared/ReactVersion';
42
37 -import * as ReactTestHostConfig from './ReactTestHostConfig';
38 -import * as TestRendererScheduling from './ReactTestRendererScheduling';
43 +import {getPublicInstance} from './ReactTestHostConfig';
44 +import {
45 + flushAll,
46 + flushNumberOfYields,
47 + clearYields,
48 + setNowImplementation,
49 + yieldValue,
50 +} from './ReactTestRendererScheduling';
51
52 type TestRendererOptions = {
53 createNodeMock: (element: React$Element<any>) => any,
@@ -277,7 +289,7 @@ class ReactTestInstance {
289
290 get instance() {
291 if (this._fiber.tag === HostComponent) {
280 - return ReactTestHostConfig.getPublicInstance(this._fiber.stateNode);
292 + return getPublicInstance(this._fiber.stateNode);
293 } else {
294 return this._fiber.stateNode;
295 }
@@ -428,13 +440,13 @@ const ReactTestRendererFiber = {
440 createNodeMock,
441 tag: 'CONTAINER',
442 };
431 - let root: FiberRoot | null = TestRenderer.createContainer(
443 + let root: FiberRoot | null = createContainer(
444 container,
445 isConcurrent,
446 false,
447 );
448 invariant(root != null, 'something went wrong');
437 - TestRenderer.updateContainer(element, root, null, null);
449 + updateContainer(element, root, null, null);
450
451 const entry = {
452 root: undefined, // makes flow happy
@@ -475,13 +487,13 @@ const ReactTestRendererFiber = {
487 if (root == null || root.current == null) {
488 return;
489 }
478 - TestRenderer.updateContainer(newElement, root, null, null);
490 + updateContainer(newElement, root, null, null);
491 },
492 unmount() {
493 if (root == null || root.current == null) {
494 return;
495 }
484 - TestRenderer.updateContainer(null, root, null, null);
496 + updateContainer(null, root, null, null);
497 container = null;
498 root = null;
499 },
@@ -489,16 +501,16 @@ const ReactTestRendererFiber = {
501 if (root == null || root.current == null) {
502 return null;
503 }
492 - return TestRenderer.getPublicRootInstance(root);
504 + return getPublicRootInstance(root);
505 },
506
495 - unstable_flushAll: TestRendererScheduling.flushAll,
507 + unstable_flushAll: flushAll,
508 unstable_flushSync<T>(fn: () => T): T {
497 - TestRendererScheduling.clearYields();
498 - return TestRenderer.flushSync(fn);
509 + clearYields();
510 + return flushSync(fn);
511 },
500 - unstable_flushNumberOfYields: TestRendererScheduling.flushNumberOfYields,
501 - unstable_clearYields: TestRendererScheduling.clearYields,
512 + unstable_flushNumberOfYields: flushNumberOfYields,
513 + unstable_clearYields: clearYields,
514 };
515
516 Object.defineProperty(
@@ -529,14 +541,14 @@ const ReactTestRendererFiber = {
541 return entry;
542 },
543
532 - unstable_yield: TestRendererScheduling.yieldValue,
533 - unstable_clearYields: TestRendererScheduling.clearYields,
544 + unstable_yield: yieldValue,
545 + unstable_clearYields: clearYields,
546
547 /* eslint-disable camelcase */
548 unstable_batchedUpdates: batchedUpdates,
549 /* eslint-enable camelcase */
550
539 - unstable_setNowImplementation: TestRendererScheduling.setNowImplementation,
551 + unstable_setNowImplementation: setNowImplementation,
552 };
553
554 const fiberToWrapper = new WeakMap();
@@ -553,7 +565,7 @@ function wrapFiber(fiber: Fiber): ReactTestInstance {
565 }
566
567 // Enable ReactTestRenderer to be used to test DevTools integration.
556 -TestRenderer.injectIntoDevTools({
568 +injectIntoDevTools({
569 findFiberByHostInstance: (() => {
570 throw new Error('TestRenderer does not support findFiberByHostInstance()');
571 }: any),