@samitouri / QOS-React / commits / 74ea0c73a2

Remove enableGetInspectorDataForInstanceInProduction flag (#32033)

## Summary Callers for this method has been removed in https://github.com/facebook/react-native/commit/65bda542320a85f4627d7957e1c6f45c2776298d, so these methods no longer need to be conditionally exported and the feature flag can be removed. ## How did you test this change? Flow fabric/native

Pieter De Baets committed Jan 9, 2025 at 15:51 UTC 74ea0c73a26d1c61609c1f2fa2e4ee3c8d432bcb
10 files changed +61 -87
packages/react-native-renderer/src/ReactFabric.js
-4
@@ -29,7 +29,6 @@ import {
29 import {createPortal as createPortalImpl} from 'react-reconciler/src/ReactPortal';
30 import {setBatchingImplementation} from './legacy-events/ReactGenericBatching';
31
32 -import {getInspectorDataForInstance} from './ReactNativeFiberInspector';
32 import {LegacyRoot, ConcurrentRoot} from 'react-reconciler/src/ReactRootTags';
33 import {
34 findHostInstance_DEPRECATED,
@@ -188,9 +187,6 @@ export {
187 unmountComponentAtNode,
188 stopSurface,
189 createPortal,
191 - // This export is typically undefined in production builds.
192 - // See the "enableGetInspectorDataForInstanceInProduction" flag.
193 - getInspectorDataForInstance,
190 // The public instance has a reference to the internal instance handle.
191 // This method allows it to acess the most recent shadow node for
192 // the instance (it's only accessible through it).
packages/react-native-renderer/src/ReactNativeFiberInspector.js
+61 -71
@@ -21,7 +21,6 @@ import {
21 UIManager,
22 getNodeFromPublicInstance,
23 } from 'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface';
24 -import {enableGetInspectorDataForInstanceInProduction} from 'shared/ReactFeatureFlags';
24 import {getClosestInstanceFromNode} from './ReactNativeComponentTree';
25 import {
26 getNodeFromInternalInstanceHandle,
@@ -29,39 +28,40 @@ import {
28 } from './ReactNativePublicCompat';
29 import {getStackByFiberInDevAndProd} from 'react-reconciler/src/ReactFiberComponentStack';
30
32 -const emptyObject = {};
31 +let getInspectorDataForInstance: (
32 + closestInstance: Fiber | null,
33 +) => InspectorData;
34 +
35 if (__DEV__) {
34 - Object.freeze(emptyObject);
35 -}
36 + const emptyObject = Object.freeze({});
37
37 -// $FlowFixMe[missing-local-annot]
38 -function createHierarchy(fiberHierarchy) {
39 - return fiberHierarchy.map(fiber => ({
40 - name: getComponentNameFromType(fiber.type),
41 - getInspectorData: () => {
42 - return {
43 - props: getHostProps(fiber),
44 - measure: callback => {
45 - // If this is Fabric, we'll find a shadow node and use that to measure.
46 - const hostFiber = findCurrentHostFiber(fiber);
47 - const node =
48 - hostFiber != null &&
49 - hostFiber.stateNode !== null &&
50 - hostFiber.stateNode.node;
38 + // $FlowFixMe[missing-local-annot]
39 + const createHierarchy = function (fiberHierarchy) {
40 + return fiberHierarchy.map(fiber => ({
41 + name: getComponentNameFromType(fiber.type),
42 + getInspectorData: () => {
43 + return {
44 + props: getHostProps(fiber),
45 + measure: callback => {
46 + // If this is Fabric, we'll find a shadow node and use that to measure.
47 + const hostFiber = findCurrentHostFiber(fiber);
48 + const node =
49 + hostFiber != null &&
50 + hostFiber.stateNode !== null &&
51 + hostFiber.stateNode.node;
52
52 - if (node) {
53 - nativeFabricUIManager.measure(node, callback);
54 - } else {
55 - return UIManager.measure(getHostNode(fiber), callback);
56 - }
57 - },
58 - };
59 - },
60 - }));
61 -}
53 + if (node) {
54 + nativeFabricUIManager.measure(node, callback);
55 + } else {
56 + return UIManager.measure(getHostNode(fiber), callback);
57 + }
58 + },
59 + };
60 + },
61 + }));
62 + };
63
63 -function getHostNode(fiber: Fiber | null) {
64 - if (__DEV__ || enableGetInspectorDataForInstanceInProduction) {
64 + const getHostNode = function (fiber: Fiber | null) {
65 let hostNode;
66 // look for children first for the hostNode
67 // as composite fibers do not have a hostNode
@@ -75,22 +75,19 @@ function getHostNode(fiber: Fiber | null) {
75 fiber = fiber.child;
76 }
77 return null;
78 - }
79 -}
78 + };
79
81 -// $FlowFixMe[missing-local-annot]
82 -function getHostProps(fiber) {
83 - const host = findCurrentHostFiber(fiber);
84 - if (host) {
85 - return host.memoizedProps || emptyObject;
86 - }
87 - return emptyObject;
88 -}
80 + const getHostProps = function (fiber: Fiber) {
81 + const host = findCurrentHostFiber(fiber);
82 + if (host) {
83 + return host.memoizedProps || emptyObject;
84 + }
85 + return emptyObject;
86 + };
87
90 -function getInspectorDataForInstance(
91 - closestInstance: Fiber | null,
92 -): InspectorData {
93 - if (__DEV__ || enableGetInspectorDataForInstanceInProduction) {
88 + getInspectorDataForInstance = function (
89 + closestInstance: Fiber | null,
90 + ): InspectorData {
91 // Handle case where user clicks outside of ReactNative
92 if (!closestInstance) {
93 return {
@@ -125,36 +122,30 @@ function getInspectorDataForInstance(
122 selectedIndex,
123 componentStack,
124 };
128 - }
125 + };
126
130 - throw new Error(
131 - 'getInspectorDataForInstance() is not available in production',
132 - );
133 -}
134 -
135 -function getOwnerHierarchy(instance: Fiber) {
136 - const hierarchy: Array<$FlowFixMe> = [];
137 - traverseOwnerTreeUp(hierarchy, instance);
138 - return hierarchy;
139 -}
127 + const getOwnerHierarchy = function (instance: Fiber) {
128 + const hierarchy: Array<$FlowFixMe> = [];
129 + traverseOwnerTreeUp(hierarchy, instance);
130 + return hierarchy;
131 + };
132
141 -// $FlowFixMe[missing-local-annot]
142 -function lastNonHostInstance(hierarchy) {
143 - for (let i = hierarchy.length - 1; i > 1; i--) {
144 - const instance = hierarchy[i];
133 + // $FlowFixMe[missing-local-annot]
134 + const lastNonHostInstance = function (hierarchy) {
135 + for (let i = hierarchy.length - 1; i > 1; i--) {
136 + const instance = hierarchy[i];
137
146 - if (instance.tag !== HostComponent) {
147 - return instance;
138 + if (instance.tag !== HostComponent) {
139 + return instance;
140 + }
141 }
149 - }
150 - return hierarchy[0];
151 -}
142 + return hierarchy[0];
143 + };
144
153 -function traverseOwnerTreeUp(
154 - hierarchy: Array<$FlowFixMe>,
155 - instance: Fiber,
156 -): void {
157 - if (__DEV__ || enableGetInspectorDataForInstanceInProduction) {
145 + const traverseOwnerTreeUp = function (
146 + hierarchy: Array<$FlowFixMe>,
147 + instance: Fiber,
148 + ): void {
149 hierarchy.unshift(instance);
150 const owner = instance._debugOwner;
151 if (owner != null && typeof owner.tag === 'number') {
@@ -162,13 +153,12 @@ function traverseOwnerTreeUp(
153 } else {
154 // TODO: Traverse Server Components owners.
155 }
165 - }
156 + };
157 }
158
159 function getInspectorDataForViewTag(viewTag: number): InspectorData {
160 if (__DEV__) {
161 const closestInstance = getClosestInstanceFromNode(viewTag);
171 -
162 return getInspectorDataForInstance(closestInstance);
163 } else {
164 throw new Error(
packages/react-native-renderer/src/ReactNativeRenderer.js
-4
@@ -34,7 +34,6 @@ import {
34 // Modules provided by RN:
35 import {UIManager} from 'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface';
36
37 -import {getInspectorDataForInstance} from './ReactNativeFiberInspector';
37 import {LegacyRoot} from 'react-reconciler/src/ReactRootTags';
38 import {
39 findHostInstance_DEPRECATED,
@@ -206,9 +205,6 @@ export {
205 unmountComponentAtNodeAndRemoveContainer,
206 createPortal,
207 batchedUpdates as unstable_batchedUpdates,
209 - // This export is typically undefined in production builds.
210 - // See the "enableGetInspectorDataForInstanceInProduction" flag.
211 - getInspectorDataForInstance,
208 // DEV-only:
209 isChildPublicInstance,
210 };
packages/shared/ReactFeatureFlags.js
-2
@@ -260,6 +260,4 @@ export const enableAsyncDebugInfo = __EXPERIMENTAL__;
260 export const enableUpdaterTracking = __PROFILE__;
261
262 // Internal only.
263 -export const enableGetInspectorDataForInstanceInProduction = false;
264 -
263 export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
packages/shared/forks/ReactFeatureFlags.native-fb.js
-1
@@ -48,7 +48,6 @@ export const enableCreateEventHandleAPI = false;
48 export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
49 export const enableMoveBefore = true;
50 export const enableFizzExternalRuntime = true;
51 -export const enableGetInspectorDataForInstanceInProduction = true;
51 export const enableHalt = false;
52 export const enableInfiniteRenderLoopDetection = false;
53 export const enableLegacyCache = false;
packages/shared/forks/ReactFeatureFlags.native-oss.js
-1
@@ -33,7 +33,6 @@ export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
33 export const enableFabricCompleteRootInCommitPhase = false;
34 export const enableMoveBefore = true;
35 export const enableFizzExternalRuntime = true;
36 -export const enableGetInspectorDataForInstanceInProduction = false;
36 export const enableHalt = false;
37 export const enableHiddenSubtreeInsertionEffectCleanup = false;
38 export const enableInfiniteRenderLoopDetection = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.js
-1
@@ -36,7 +36,6 @@ export const enableUseEffectEventHook = false;
36 export const favorSafetyOverHydrationPerf = true;
37 export const enableLegacyFBSupport = false;
38 export const enableMoveBefore = false;
39 -export const enableGetInspectorDataForInstanceInProduction = false;
39 export const enableFabricCompleteRootInCommitPhase = false;
40 export const enableHiddenSubtreeInsertionEffectCleanup = false;
41 export const enableHydrationLaneScheduling = true;
packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js
-1
@@ -27,7 +27,6 @@ export const enableCreateEventHandleAPI = false;
27 export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
28 export const enableMoveBefore = false;
29 export const enableFizzExternalRuntime = true;
30 -export const enableGetInspectorDataForInstanceInProduction = false;
30 export const enableHalt = false;
31 export const enableInfiniteRenderLoopDetection = false;
32 export const enableHiddenSubtreeInsertionEffectCleanup = true;
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
-1
@@ -38,7 +38,6 @@ export const enableUseEffectEventHook = false;
38 export const favorSafetyOverHydrationPerf = true;
39 export const enableLegacyFBSupport = false;
40 export const enableMoveBefore = false;
41 -export const enableGetInspectorDataForInstanceInProduction = false;
41 export const enableRenderableContext = false;
42 export const enableFabricCompleteRootInCommitPhase = false;
43 export const enableHiddenSubtreeInsertionEffectCleanup = true;
packages/shared/forks/ReactFeatureFlags.www.js
-1
@@ -69,7 +69,6 @@ export const enableSchedulingProfiler: boolean =
69 __PROFILE__ && dynamicFeatureFlags.enableSchedulingProfiler;
70
71 export const disableLegacyContext = __EXPERIMENTAL__;
72 -export const enableGetInspectorDataForInstanceInProduction = false;
72
73 export const enableLegacyCache = true;
74