Skip to content

Commit 4cb7bba

Browse files
committed
chore[react-devtools]: extract getDispatcherRef into a separate module
1 parent 67fb2a4 commit 4cb7bba

File tree

3 files changed

+48
-30
lines changed

3 files changed

+48
-30
lines changed

packages/react-devtools-shared/src/backend/console.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ import {
2525
ANSI_STYLE_DIMMING_TEMPLATE,
2626
ANSI_STYLE_DIMMING_TEMPLATE_WITH_COMPONENT_STACK,
2727
} from 'react-devtools-shared/src/constants';
28-
import {getInternalReactConstants, getDispatcherRef} from './fiber/renderer';
28+
import getDispatcherRef from 'react-devtools-shared/src/backend/fiber/getDispatcherRef';
29+
import {getInternalReactConstants} from './fiber/renderer';
2930
import {
3031
getStackByFiberInDevAndProd,
3132
getOwnerStackByFiberInDev,
@@ -227,9 +228,13 @@ export function patch({
227228
// Search for the first renderer that has a current Fiber.
228229
// We don't handle the edge case of stacks for more than one (e.g. interleaved renderers?)
229230
// eslint-disable-next-line no-for-of-loops/no-for-of-loops
230-
for (const renderer of injectedRenderers.values()) {
231+
for (const [
232+
renderer,
233+
injectedRendererInterface,
234+
] of injectedRenderers.entries()) {
231235
const currentDispatcherRef = getDispatcherRef(renderer);
232-
const {getCurrentFiber, onErrorOrWarning, workTagMap} = renderer;
236+
const {getCurrentFiber, onErrorOrWarning, workTagMap} =
237+
injectedRendererInterface;
233238
const current: ?Fiber = getCurrentFiber();
234239
if (current != null) {
235240
try {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*
7+
* @flow
8+
*/
9+
import type {
10+
CurrentDispatcherRef,
11+
ReactRenderer,
12+
} from 'react-devtools-shared/src/backend/types';
13+
14+
// Do not add / import anything to this file.
15+
// This function is used from multiple places, including hook.
16+
17+
export default function getDispatcherRef(
18+
renderer: ReactRenderer,
19+
): void | CurrentDispatcherRef {
20+
if (renderer.currentDispatcherRef === undefined) {
21+
return undefined;
22+
}
23+
const injectedRef = renderer.currentDispatcherRef;
24+
if (
25+
typeof injectedRef.H === 'undefined' &&
26+
typeof injectedRef.current !== 'undefined'
27+
) {
28+
// We got a legacy dispatcher injected, let's create a wrapper proxy to translate.
29+
return {
30+
get H() {
31+
return (injectedRef: any).current;
32+
},
33+
set H(value) {
34+
(injectedRef: any).current = value;
35+
},
36+
};
37+
}
38+
return (injectedRef: any);
39+
}

packages/react-devtools-shared/src/backend/fiber/renderer.js

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,6 @@ import type {
122122
RendererInterface,
123123
SerializedElement,
124124
WorkTagMap,
125-
CurrentDispatcherRef,
126-
LegacyDispatcherRef,
127125
} from '../types';
128126
import type {
129127
ComponentFilter,
@@ -133,6 +131,7 @@ import type {
133131
import type {Source} from 'react-devtools-shared/src/shared/types';
134132
import {getStackByFiberInDevAndProd} from './DevToolsFiberComponentStack';
135133
import getWorkTagMap from 'react-devtools-shared/src/backend/fiber/getWorkTagMap';
134+
import getDispatcherRef from 'react-devtools-shared/src/backend/fiber/getDispatcherRef';
136135

137136
// Kinds
138137
const FIBER_INSTANCE = 0;
@@ -204,31 +203,6 @@ type ReactPriorityLevelsType = {
204203
NoPriority: number,
205204
};
206205

207-
export function getDispatcherRef(renderer: {
208-
+currentDispatcherRef?: LegacyDispatcherRef | CurrentDispatcherRef,
209-
...
210-
}): void | CurrentDispatcherRef {
211-
if (renderer.currentDispatcherRef === undefined) {
212-
return undefined;
213-
}
214-
const injectedRef = renderer.currentDispatcherRef;
215-
if (
216-
typeof injectedRef.H === 'undefined' &&
217-
typeof injectedRef.current !== 'undefined'
218-
) {
219-
// We got a legacy dispatcher injected, let's create a wrapper proxy to translate.
220-
return {
221-
get H() {
222-
return (injectedRef: any).current;
223-
},
224-
set H(value) {
225-
(injectedRef: any).current = value;
226-
},
227-
};
228-
}
229-
return (injectedRef: any);
230-
}
231-
232206
function getFiberFlags(fiber: Fiber): number {
233207
// The name of this field changed from "effectTag" to "flags"
234208
return fiber.flags !== undefined ? fiber.flags : (fiber: any).effectTag;

0 commit comments

Comments
 (0)