Skip to content

Commit cdf504b

Browse files
committed
Expose injectIntoDevTools() to renderers
1 parent 40fbed5 commit cdf504b

File tree

5 files changed

+49
-24
lines changed

5 files changed

+49
-24
lines changed

packages/react-cs-renderer/src/ReactNativeCS.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import type {ReactNativeCSType} from './ReactNativeCSTypes';
1414
import {CSStatefulComponent} from 'CSStatefulComponent';
1515

1616
import ReactFiberReconciler from 'react-reconciler';
17-
import {injectInternals} from 'react-reconciler/src/ReactFiberDevToolsHook';
1817
import ReactVersion from 'shared/ReactVersion';
1918

2019
const emptyObject = {};
@@ -240,9 +239,7 @@ const ReactNativeCSFiberRenderer = ReactFiberReconciler({
240239
},
241240
});
242241

243-
injectInternals({
244-
findHostInstanceByFiber: ReactNativeCSFiberRenderer.findHostInstance,
245-
// This is an enum because we may add more (e.g. profiler build)
242+
ReactNativeCSFiberRenderer.injectIntoDevTools({
246243
bundleType: __DEV__ ? 1 : 0,
247244
version: ReactVersion,
248245
rendererPackageName: 'react-cs-renderer',

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ import './ReactDOMClientInjection';
1616
import ReactFiberReconciler from 'react-reconciler';
1717
// TODO: direct imports like some-package/src/* are bad. Fix me.
1818
import * as ReactPortal from 'react-reconciler/src/ReactPortal';
19-
// TODO: direct imports like some-package/src/* are bad. Fix me.
20-
import {injectInternals} from 'react-reconciler/src/ReactFiberDevToolsHook';
2119
import ExecutionEnvironment from 'fbjs/lib/ExecutionEnvironment';
2220
import * as ReactGenericBatching from 'events/ReactGenericBatching';
2321
import * as ReactControlledComponent from 'events/ReactControlledComponent';
@@ -955,10 +953,8 @@ if (ReactFeatureFlags.enableCreateRoot) {
955953
};
956954
}
957955

958-
const foundDevTools = injectInternals({
956+
const foundDevTools = DOMRenderer.injectIntoDevTools({
959957
findFiberByHostInstance: ReactDOMComponentTree.getClosestInstanceFromNode,
960-
findHostInstanceByFiber: DOMRenderer.findHostInstance,
961-
// This is an enum because we may add more (e.g. profiler build)
962958
bundleType: __DEV__ ? 1 : 0,
963959
version: ReactVersion,
964960
rendererPackageName: 'react-dom',

packages/react-native-renderer/src/ReactNativeRenderer.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import './ReactNativeInjection';
1616
import * as ReactFiberErrorLogger
1717
from 'react-reconciler/src/ReactFiberErrorLogger';
1818
import * as ReactPortal from 'react-reconciler/src/ReactPortal';
19-
import {injectInternals} from 'react-reconciler/src/ReactFiberDevToolsHook';
2019
import * as ReactGenericBatching from 'events/ReactGenericBatching';
2120
import TouchHistoryMath from 'events/TouchHistoryMath';
2221
import * as ReactGlobalSharedState from 'shared/ReactGlobalSharedState';
@@ -130,11 +129,9 @@ if (__DEV__) {
130129
);
131130
}
132131

133-
injectInternals({
132+
ReactNativeFiberRenderer.injectIntoDevTools({
134133
findFiberByHostInstance: ReactNativeComponentTree.getClosestInstanceFromNode,
135-
findHostInstanceByFiber: ReactNativeFiberRenderer.findHostInstance,
136134
getInspectorDataForViewTag: getInspectorDataForViewTag,
137-
// This is an enum because we may add more (e.g. profiler build)
138135
bundleType: __DEV__ ? 1 : 0,
139136
version: ReactVersion,
140137
rendererPackageName: 'react-native-renderer',

packages/react-reconciler/src/ReactFiberReconciler.js

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
processChildContext,
2929
} from './ReactFiberContext';
3030
import {createFiberRoot} from './ReactFiberRoot';
31+
import * as ReactFiberDevToolsHook from './ReactFiberDevToolsHook';
3132
import ReactFiberScheduler from './ReactFiberScheduler';
3233
import {insertUpdateIntoFiber} from './ReactFiberUpdateQueue';
3334
import ReactFiberInstrumentation from './ReactFiberInstrumentation';
@@ -211,6 +212,23 @@ type HydrationHostConfig<T, P, I, TI, C, CX, PL> = {
211212
): void,
212213
};
213214

215+
// 0 is PROD, 1 is DEV.
216+
// Might add PROFILE later.
217+
type BundleType = 0 | 1;
218+
219+
type DevToolsConfig<I, TI> = {|
220+
bundleType: BundleType,
221+
version: string,
222+
rendererPackageName: string,
223+
// Note: this actually *does* depend on Fiber internal fields.
224+
// Used by "inspect clicked DOM element" in React DevTools.
225+
findFiberByHostInstance?: (instance: I | TI) => Fiber,
226+
// Used by RN in-app inspector.
227+
// This API is unfortunately RN-specific.
228+
// TODO: Change it to accept Fiber instead and type it properly.
229+
getInspectorDataForViewTag?: (tag: number) => Object,
230+
|};
231+
214232
export type Reconciler<C, I, TI> = {
215233
createContainer(containerInfo: C, hydrate: boolean): OpaqueRoot,
216234
updateContainer(
@@ -223,6 +241,7 @@ export type Reconciler<C, I, TI> = {
223241
unbatchedUpdates<A>(fn: () => A): A,
224242
flushSync<A>(fn: () => A): A,
225243
deferredUpdates<A>(fn: () => A): A,
244+
injectIntoDevTools(config: DevToolsConfig<I, TI>): boolean,
226245

227246
// Used to extract the return value from the initial render. Legacy API.
228247
getPublicRootInstance(
@@ -327,6 +346,14 @@ export default function<T, P, I, TI, PI, C, CC, CX, PL>(
327346
scheduleWork(current, expirationTime);
328347
}
329348

349+
function findHostInstance(fiber: Fiber): PI | null {
350+
const hostFiber = findCurrentHostFiber(fiber);
351+
if (hostFiber === null) {
352+
return null;
353+
}
354+
return hostFiber.stateNode;
355+
}
356+
330357
return {
331358
createContainer(containerInfo: C, hydrate: boolean): OpaqueRoot {
332359
return createFiberRoot(containerInfo, hydrate);
@@ -386,13 +413,7 @@ export default function<T, P, I, TI, PI, C, CC, CX, PL>(
386413
}
387414
},
388415

389-
findHostInstance(fiber: Fiber): PI | null {
390-
const hostFiber = findCurrentHostFiber(fiber);
391-
if (hostFiber === null) {
392-
return null;
393-
}
394-
return hostFiber.stateNode;
395-
},
416+
findHostInstance,
396417

397418
findHostInstanceWithNoPortals(fiber: Fiber): PI | null {
398419
const hostFiber = findCurrentHostFiberWithNoPortals(fiber);
@@ -401,5 +422,22 @@ export default function<T, P, I, TI, PI, C, CC, CX, PL>(
401422
}
402423
return hostFiber.stateNode;
403424
},
425+
426+
injectIntoDevTools(config: DevToolsConfig<I, TI>): boolean {
427+
const {findFiberByHostInstance} = config;
428+
return ReactFiberDevToolsHook.injectInternals({
429+
...config,
430+
findHostInstanceByFiber(fiber: Fiber): I | TI | null {
431+
return findHostInstance(fiber);
432+
},
433+
findFiberByHostInstance(instance: I | TI): Fiber | null {
434+
if (!findFiberByHostInstance) {
435+
// Might not be implemented by the renderer.
436+
return null;
437+
}
438+
return findFiberByHostInstance(instance);
439+
},
440+
});
441+
},
404442
};
405443
}

packages/react-rt-renderer/src/ReactNativeRT.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import {
1717
showDialog,
1818
} from 'react-native-renderer/src/ReactNativeFiberErrorDialog';
1919
import * as ReactPortal from 'react-reconciler/src/ReactPortal';
20-
import {injectInternals} from 'react-reconciler/src/ReactFiberDevToolsHook';
2120
import * as ReactGenericBatching from 'events/ReactGenericBatching';
2221
import ReactVersion from 'shared/ReactVersion';
2322

@@ -83,11 +82,9 @@ const ReactNativeRTFiber: ReactNativeRTType = {
8382
flushSync: ReactNativeRTFiberRenderer.flushSync,
8483
};
8584

86-
injectInternals({
85+
ReactNativeRTFiberRenderer.injectIntoDevTools({
8786
findFiberByHostInstance: getFiberFromTag,
88-
findHostInstanceByFiber: ReactNativeRTFiberRenderer.findHostInstance,
8987
getInspectorDataForViewTag: ReactNativeRTFiberInspector.getInspectorDataForViewTag,
90-
// This is an enum because we may add more (e.g. profiler build)
9188
bundleType: __DEV__ ? 1 : 0,
9289
version: ReactVersion,
9390
rendererPackageName: 'react-rt-renderer',

0 commit comments

Comments
 (0)