@@ -45,6 +45,7 @@ type HookLogEntry = {
4545 stackError : Error ,
4646 value : mixed ,
4747 debugInfo : ReactDebugInfo | null ,
48+ wrapper : string | null ,
4849} ;
4950
5051let hookLog : Array < HookLogEntry > = [ ] ;
@@ -200,6 +201,7 @@ function use<T>(usable: Usable<T>): T {
200201 value : fulfilledValue ,
201202 debugInfo :
202203 thenable . _debugInfo === undefined ? null : thenable . _debugInfo ,
204+ wrapper : null ,
203205 } ) ;
204206 return fulfilledValue ;
205207 }
@@ -217,6 +219,7 @@ function use<T>(usable: Usable<T>): T {
217219 value : thenable ,
218220 debugInfo :
219221 thenable . _debugInfo === undefined ? null : thenable . _debugInfo ,
222+ wrapper : null ,
220223 } );
221224 throw SuspenseException;
222225 } else if ( usable . $$typeof === REACT_CONTEXT_TYPE ) {
@@ -229,6 +232,7 @@ function use<T>(usable: Usable<T>): T {
229232 stackError : new Error ( ) ,
230233 value,
231234 debugInfo : null ,
235+ wrapper : null ,
232236 } ) ;
233237
234238 return value ;
@@ -247,6 +251,7 @@ function useContext<T>(context: ReactContext<T>): T {
247251 stackError : new Error ( ) ,
248252 value : value ,
249253 debugInfo : null ,
254+ wrapper : null ,
250255 } ) ;
251256 return value ;
252257}
@@ -268,6 +273,7 @@ function useState<S>(
268273 stackError : new Error ( ) ,
269274 value : state ,
270275 debugInfo : null ,
276+ wrapper : null ,
271277 } ) ;
272278 return [ state , ( action : BasicStateAction < S > ) => { } ] ;
273279}
@@ -290,6 +296,7 @@ function useReducer<S, I, A>(
290296 stackError : new Error ( ) ,
291297 value : state ,
292298 debugInfo : null ,
299+ wrapper : null ,
293300 } ) ;
294301 return [ state , ( action : A ) => { } ] ;
295302}
@@ -303,6 +310,7 @@ function useRef<T>(initialValue: T): {current: T} {
303310 stackError : new Error ( ) ,
304311 value : ref . current ,
305312 debugInfo : null ,
313+ wrapper : null ,
306314 } ) ;
307315 return ref ;
308316}
@@ -315,6 +323,7 @@ function useCacheRefresh(): () => void {
315323 stackError : new Error ( ) ,
316324 value : hook !== null ? hook . memoizedState : function refresh ( ) { } ,
317325 debugInfo : null ,
326+ wrapper : null ,
318327 } ) ;
319328 return ( ) = > { } ;
320329}
@@ -330,6 +339,7 @@ function useLayoutEffect(
330339 stackError : new Error ( ) ,
331340 value : create ,
332341 debugInfo : null ,
342+ wrapper : null ,
333343 } ) ;
334344}
335345
@@ -344,6 +354,7 @@ function useInsertionEffect(
344354 stackError : new Error ( ) ,
345355 value : create ,
346356 debugInfo : null ,
357+ wrapper : null ,
347358 } ) ;
348359}
349360
@@ -358,6 +369,7 @@ function useEffect(
358369 stackError : new Error ( ) ,
359370 value : create ,
360371 debugInfo : null ,
372+ wrapper : null ,
361373 } ) ;
362374}
363375
@@ -381,6 +393,7 @@ function useImperativeHandle<T>(
381393 stackError : new Error ( ) ,
382394 value : instance ,
383395 debugInfo : null ,
396+ wrapper : null ,
384397 } );
385398}
386399
@@ -391,6 +404,7 @@ function useDebugValue(value: any, formatterFn: ?(value: any) => any) {
391404 stackError : new Error ( ) ,
392405 value : typeof formatterFn === 'function' ? formatterFn ( value ) : value ,
393406 debugInfo : null ,
407+ wrapper : null ,
394408 } ) ;
395409}
396410
@@ -402,6 +416,7 @@ function useCallback<T>(callback: T, inputs: Array<mixed> | void | null): T {
402416 stackError : new Error ( ) ,
403417 value : hook !== null ? hook . memoizedState [ 0 ] : callback ,
404418 debugInfo : null ,
419+ wrapper : null ,
405420 } ) ;
406421 return callback ;
407422}
@@ -418,6 +433,7 @@ function useMemo<T>(
418433 stackError : new Error ( ) ,
419434 value,
420435 debugInfo : null ,
436+ wrapper : null ,
421437 } ) ;
422438 return value ;
423439}
@@ -439,6 +455,7 @@ function useSyncExternalStore<T>(
439455 stackError : new Error ( ) ,
440456 value,
441457 debugInfo : null ,
458+ wrapper : null ,
442459 } ) ;
443460 return value ;
444461}
@@ -458,6 +475,7 @@ function useTransition(): [
458475 stackError : new Error ( ) ,
459476 value : undefined ,
460477 debugInfo : null ,
478+ wrapper : null ,
461479 } ) ;
462480 return [ false , callback => { } ] ;
463481}
@@ -470,6 +488,7 @@ function useDeferredValue<T>(value: T, initialValue?: T): T {
470488 stackError : new Error ( ) ,
471489 value : hook !== null ? hook . memoizedState : value ,
472490 debugInfo : null ,
491+ wrapper : null ,
473492 } ) ;
474493 return value ;
475494}
@@ -483,6 +502,7 @@ function useId(): string {
483502 stackError : new Error ( ) ,
484503 value : id ,
485504 debugInfo : null ,
505+ wrapper : null ,
486506 } ) ;
487507 return id ;
488508}
@@ -533,6 +553,7 @@ function useOptimistic<S, A>(
533553 stackError : new Error ( ) ,
534554 value : state ,
535555 debugInfo : null ,
556+ wrapper : null ,
536557 } ) ;
537558 return [ state , ( action : A ) => { } ] ;
538559}
@@ -591,6 +612,7 @@ function useFormState<S, P>(
591612 stackError : stackError ,
592613 value : value ,
593614 debugInfo : debugInfo ,
615+ wrapper : null ,
594616 } );
595617
596618 if (error !== null) {
@@ -618,6 +640,7 @@ function useHostTransitionStatus(): TransitionStatus {
618640 stackError : new Error ( ) ,
619641 value : status ,
620642 debugInfo : null ,
643+ wrapper : 'FormStatus' ,
621644 } ) ;
622645
623646 return status ;
@@ -788,8 +811,14 @@ function findPrimitiveIndex(hookStack: any, hook: HookLogEntry) {
788811 }
789812 if (
790813 i < hookStack . length - 1 &&
791- isReactWrapper ( hookStack [ i ] . functionName , hook . primitive )
814+ isReactWrapper (
815+ hookStack [ i ] . functionName ,
816+ hook . wrapper || hook . primitive ,
817+ )
792818 ) {
819+ if ( primitiveStack [ i ] . displayName !== null ) {
820+ primitiveStack [ i ] . displayName = hook . wrapper || hook . primitive ;
821+ }
793822 i ++ ;
794823 }
795824 return i ;
@@ -798,6 +827,11 @@ function findPrimitiveIndex(hookStack: any, hook: HookLogEntry) {
798827 return - 1 ;
799828}
800829
830+ // cache key dispatcher
831+ // displayName
832+ // cache key
833+ // wrapper -> wrappers e.g. `FormStatus`
834+
801835function parseTrimmedStack ( rootStack : any , hook : HookLogEntry ) {
802836 // Get the stack trace between the primitive hook function and
803837 // the root function call. I.e. the stack frames of custom hooks.
0 commit comments