(fiber: Fiber, childFiber: null | Fiber)
| 35 | import {formatOwnerStack} from 'shared/ReactOwnerStackFrames'; |
| 36 | |
| 37 | function describeFiber(fiber: Fiber, childFiber: null | Fiber): string { |
| 38 | switch (fiber.tag) { |
| 39 | case HostHoistable: |
| 40 | case HostSingleton: |
| 41 | case HostComponent: |
| 42 | return describeBuiltInComponentFrame(fiber.type); |
| 43 | case LazyComponent: |
| 44 | // TODO: When we support Thenables as component types we should rename this. |
| 45 | return describeBuiltInComponentFrame('Lazy'); |
| 46 | case SuspenseComponent: |
| 47 | if (fiber.child !== childFiber && childFiber !== null) { |
| 48 | // If we came from the second Fiber then we're in the Suspense Fallback. |
| 49 | return describeBuiltInComponentFrame('Suspense Fallback'); |
| 50 | } |
| 51 | return describeBuiltInComponentFrame('Suspense'); |
| 52 | case SuspenseListComponent: |
| 53 | return describeBuiltInComponentFrame('SuspenseList'); |
| 54 | case FunctionComponent: |
| 55 | case SimpleMemoComponent: |
| 56 | return describeFunctionComponentFrame(fiber.type); |
| 57 | case ForwardRef: |
| 58 | return describeFunctionComponentFrame(fiber.type.render); |
| 59 | case ClassComponent: |
| 60 | return describeClassComponentFrame(fiber.type); |
| 61 | case ActivityComponent: |
| 62 | return describeBuiltInComponentFrame('Activity'); |
| 63 | case ViewTransitionComponent: |
| 64 | if (enableViewTransition) { |
| 65 | return describeBuiltInComponentFrame('ViewTransition'); |
| 66 | } |
| 67 | // Fallthrough |
| 68 | default: |
| 69 | return ''; |
| 70 | } |
| 71 | } |
| 72 | |
| 73 | export function getStackByFiberInDevAndProd(workInProgress: Fiber): string { |
| 74 | try { |
no test coverage detected