11/* eslint-disable max-lines */
22/* eslint-disable @typescript-eslint/no-unsafe-function-type */
3- import { type MyReactFiberNode , type MyReactFiberNodeDev , type MyReactHookNode , type MyReactHookNodeDev } from "@my-react/react-reconciler" ;
43import {
54 Consumer ,
65 Context ,
@@ -25,12 +24,12 @@ import {
2524} from "@my-react/react-shared" ;
2625
2726import { getNode } from "./data" ;
28- import { inspectHooksOfFiber , type HooksTree } from "./hook" ;
27+ import { inspectHooksOfFiber } from "./hook" ;
2928import { disableLogs , reenableLogs } from "./log" ;
3029import { getPlainNodeByFiber } from "./tree" ;
3130import { NODE_TYPE } from "./type" ;
3231
33- import type { DevToolRenderPlatform } from "./instance " ;
32+ import type { DispatcherType , HooksTree } from "./hook " ;
3433import type { HOOKTree , PlainNode } from "./plain" ;
3534import type { DevToolRenderDispatch } from "./setup" ;
3635import type {
@@ -45,15 +44,17 @@ import type {
4544 lazy ,
4645 memo ,
4746} from "@my-react/react" ;
47+ import type {
48+ MyReactFiberNode ,
49+ MyReactHookNode ,
50+ MyReactFiberNodeDev ,
51+ MyReactFiberRoot ,
52+ MyReactHookNodeDev ,
53+ CustomRenderDispatch ,
54+ } from "@my-react/react-reconciler" ;
4855
4956export const typeKeys : number [ ] = [ ] ;
5057
51- let platform : DevToolRenderPlatform | null = null ;
52-
53- export const setPlatform = ( p : DevToolRenderPlatform ) => {
54- platform = p ;
55- } ;
56-
5758// SEE https://github.com/facebook/react/blob/main/compiler/packages/react-compiler-runtime/src/index.ts
5859const reactCompilerSymbol = Symbol . for ( "react.memo_cache_sentinel" ) ;
5960
@@ -443,6 +444,23 @@ const parseHooksTreeToHOOKTree = (node: HooksTree, d: number): HOOKTree[] => {
443444 } ) ;
444445} ;
445446
447+ const getDispatch = ( fiber : MyReactFiberNode ) => {
448+ let dispatch : DevToolRenderDispatch | undefined ;
449+
450+ while ( fiber ) {
451+ const typedFiber = fiber as unknown as MyReactFiberRoot ;
452+
453+ if ( typedFiber . renderDispatch ) {
454+ dispatch = typedFiber . renderDispatch ;
455+
456+ break ;
457+ }
458+ fiber = fiber . parent ;
459+ }
460+
461+ return dispatch ;
462+ } ;
463+
446464const getHookNormal = ( fiber : MyReactFiberNodeDev ) => {
447465 const final : HOOKTree [ ] = [ ] ;
448466
@@ -469,24 +487,25 @@ const getHookNormal = (fiber: MyReactFiberNodeDev) => {
469487} ;
470488
471489// disable all log
472- const getHookStack = ( fiber : MyReactFiberNodeDev ) => {
490+ const getHookStack = ( fiber : MyReactFiberNodeDev , dispatch : CustomRenderDispatch ) => {
473491 const final : HOOKTree [ ] = [ ] ;
474492
475493 if ( ! fiber . hookList ) return final ;
476494
477495 disableLogs ( ) ;
478496
479- const hookTree = inspectHooksOfFiber ( fiber , platform . dispatcher ) ;
497+ const hookTree = inspectHooksOfFiber ( fiber , dispatch . dispatcher as { current : DispatcherType } ) ;
480498
481499 reenableLogs ( ) ;
482500
483501 return parseHooksTreeToHOOKTree ( hookTree , 0 ) ;
484502} ;
485503
486504export const getHook = ( fiber : MyReactFiberNodeDev ) => {
487- if ( platform && platform . dispatcher ) {
505+ const dispatch = getDispatch ( fiber ) ;
506+ if ( dispatch && dispatch . dispatcher ) {
488507 try {
489- return getHookStack ( fiber ) ;
508+ return getHookStack ( fiber , dispatch ) ;
490509 } catch ( e ) {
491510 console . error ( e ) ;
492511 return getHookNormal ( fiber ) ;
0 commit comments