react-admit-one
Version:
An admit-one ticket for your React components
34 lines (33 loc) • 1.17 kB
JavaScript
import getComponentName from './getDisplayName';
import { isForwardRefType } from './react-types';
function describeStackFrame(node) {
// skipping components that are neither function/class components, nor html
// elements, nor ref-forwarding components (admitOne uses forwardRef).
// This will likely be the case with Work instances
if (!node.type ||
(typeof node.type === 'object' && !isForwardRefType(node.type))) {
return '';
}
var name = getComponentName(node.type);
var owner = node._debugOwner, source = node._debugSource;
var info = '';
if (source) {
var path = source.fileName;
var fileName = path.replace(/^(.*)[\\/]/, '');
info = " (at " + fileName + ":" + source.lineNumber + ")";
}
else if (owner) {
var ownerName = getComponentName(owner.type);
info = " (created by " + ownerName + ")";
}
return "\n in " + name + info;
}
export default function captureComponentStack(element) {
var frames = '';
var node = element._owner;
while (node) {
frames += describeStackFrame(node);
node = node.return;
}
return frames;
}