From c664b9bcf730b8d2749634faa3548f69398e8aa3 Mon Sep 17 00:00:00 2001 From: Sebastian Markbage Date: Mon, 9 Sep 2024 15:02:12 -0400 Subject: [PATCH] Remove the actual "renderer" from registerRenderer These internals are not needed. All we need is the onErrorOrWarning and getComponentStack helpers. --- .../src/__tests__/console-test.js | 1 - .../src/backend/console.js | 48 +++++-------------- .../src/backend/fiber/renderer.js | 2 +- .../src/backend/flight/renderer.js | 2 +- 4 files changed, 13 insertions(+), 40 deletions(-) diff --git a/packages/react-devtools-shared/src/__tests__/console-test.js b/packages/react-devtools-shared/src/__tests__/console-test.js index abb8127cffeb1..516762132e884 100644 --- a/packages/react-devtools-shared/src/__tests__/console-test.js +++ b/packages/react-devtools-shared/src/__tests__/console-test.js @@ -1093,7 +1093,6 @@ describe('console error', () => { inject(internals); Console.registerRenderer( - internals, () => { throw Error('foo'); }, diff --git a/packages/react-devtools-shared/src/backend/console.js b/packages/react-devtools-shared/src/backend/console.js index c8f9ac9143f8a..f1a2ee72f7009 100644 --- a/packages/react-devtools-shared/src/backend/console.js +++ b/packages/react-devtools-shared/src/backend/console.js @@ -7,14 +7,7 @@ * @flow */ -import type {Fiber} from 'react-reconciler/src/ReactInternalTypes'; -import type { - LegacyDispatcherRef, - CurrentDispatcherRef, - ReactRenderer, - WorkTagMap, - ConsolePatchSettings, -} from './types'; +import type {ConsolePatchSettings} from './types'; import { formatConsoleArguments, @@ -25,7 +18,6 @@ import { ANSI_STYLE_DIMMING_TEMPLATE, ANSI_STYLE_DIMMING_TEMPLATE_WITH_COMPONENT_STACK, } from 'react-devtools-shared/src/constants'; -import {getInternalReactConstants} from './fiber/renderer'; import {castBool, castBrowserTheme} from '../utils'; const OVERRIDE_CONSOLE_METHODS = ['error', 'trace', 'warn']; @@ -88,16 +80,10 @@ type GetComponentStack = ( topFrame: Error, ) => null | {enableOwnerStacks: boolean, componentStack: string}; -const injectedRenderers: Map< - ReactRenderer, - { - currentDispatcherRef: LegacyDispatcherRef | CurrentDispatcherRef, - getCurrentFiber: () => Fiber | null, - onErrorOrWarning: ?OnErrorOrWarning, - workTagMap: WorkTagMap, - getComponentStack: ?GetComponentStack, - }, -> = new Map(); +const injectedRenderers: Array<{ + onErrorOrWarning: ?OnErrorOrWarning, + getComponentStack: ?GetComponentStack, +}> = []; let targetConsole: Object = console; let targetConsoleMethods: {[string]: $FlowFixMe} = {}; @@ -125,25 +111,13 @@ export function dangerous_setTargetConsoleForTesting( // These internals will be used if the console is patched. // Injecting them separately allows the console to easily be patched or un-patched later (at runtime). export function registerRenderer( - renderer: ReactRenderer, onErrorOrWarning?: OnErrorOrWarning, getComponentStack?: GetComponentStack, ): void { - const {currentDispatcherRef, getCurrentFiber, version} = renderer; - - // currentDispatcherRef gets injected for v16.8+ to support hooks inspection. - // getCurrentFiber gets injected for v16.9+. - if (currentDispatcherRef != null && typeof getCurrentFiber === 'function') { - const {ReactTypeOfWork} = getInternalReactConstants(version); - - injectedRenderers.set(renderer, { - currentDispatcherRef, - getCurrentFiber, - workTagMap: ReactTypeOfWork, - onErrorOrWarning, - getComponentStack, - }); - } + injectedRenderers.push({ + onErrorOrWarning, + getComponentStack, + }); } const consoleSettingsRef: ConsolePatchSettings = { @@ -214,8 +188,8 @@ export function patch({ // Search for the first renderer that has a current Fiber. // We don't handle the edge case of stacks for more than one (e.g. interleaved renderers?) - // eslint-disable-next-line no-for-of-loops/no-for-of-loops - for (const renderer of injectedRenderers.values()) { + for (let i = 0; i < injectedRenderers.length; i++) { + const renderer = injectedRenderers[i]; const {getComponentStack, onErrorOrWarning} = renderer; try { if (shouldShowInlineWarningsAndErrors) { diff --git a/packages/react-devtools-shared/src/backend/fiber/renderer.js b/packages/react-devtools-shared/src/backend/fiber/renderer.js index 605431fc1c482..4500da6a35366 100644 --- a/packages/react-devtools-shared/src/backend/fiber/renderer.js +++ b/packages/react-devtools-shared/src/backend/fiber/renderer.js @@ -1201,7 +1201,7 @@ export function attach( // Patching the console enables DevTools to do a few useful things: // * Append component stacks to warnings and error messages // * Disable logging during re-renders to inspect hooks (see inspectHooksOfFiber) - registerRendererWithConsole(renderer, onErrorOrWarning, getComponentStack); + registerRendererWithConsole(onErrorOrWarning, getComponentStack); // The renderer interface can't read these preferences directly, // because it is stored in localStorage within the context of the extension. diff --git a/packages/react-devtools-shared/src/backend/flight/renderer.js b/packages/react-devtools-shared/src/backend/flight/renderer.js index 566ec6ed9c4e9..567279e737685 100644 --- a/packages/react-devtools-shared/src/backend/flight/renderer.js +++ b/packages/react-devtools-shared/src/backend/flight/renderer.js @@ -21,7 +21,7 @@ export function attach( global: Object, ): RendererInterface { patchConsoleUsingWindowValues(); - registerRendererWithConsole(renderer); + registerRendererWithConsole(); // TODO: Fill in the impl return { cleanup() {},