/** * Copyright (c) 2016-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow */ import type {Fiber} from 'react-reconciler/src/ReactFiber'; import { IndeterminateComponent, FunctionalComponent, ClassComponent, HostComponent, } from './ReactTypeOfWork'; import describeComponentFrame from './describeComponentFrame'; import getComponentName from './getComponentName'; function describeFiber(fiber: Fiber): string { switch (fiber.tag) { case IndeterminateComponent: case FunctionalComponent: case ClassComponent: case HostComponent: const owner = fiber._debugOwner; const source = fiber._debugSource; const name = getComponentName(fiber); let ownerName = null; if (owner) { ownerName = getComponentName(owner); } return describeComponentFrame(name, source, ownerName); default: return ''; } } // This function can only be called with a work-in-progress fiber and // only during begin or complete phase. Do not call it under any other // circumstances. export function getStackAddendumByWorkInProgressFiber( workInProgress: Fiber, ): string { let info = ''; let node = workInProgress; do { info += describeFiber(node); // Otherwise this return pointer might point to the wrong tree: node = node.return; } while (node); return info; }