describeFibers.js — react Source File
Architecture documentation for describeFibers.js, a javascript file in the react codebase. 0 imports, 1 dependents.
Entity Profile
Dependency Diagram
graph LR b3c14156_2ff4_ff95_50ff_0e0cc950d343["describeFibers.js"] 5bd02a98_f81e_d049_4b30_df0a827f81d8["App.js"] 5bd02a98_f81e_d049_4b30_df0a827f81d8 --> b3c14156_2ff4_ff95_50ff_0e0cc950d343 style b3c14156_2ff4_ff95_50ff_0e0cc950d343 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
let nextFiberID = 1;
const fiberIDMap = new WeakMap();
function getFiberUniqueID(fiber) {
if (!fiberIDMap.has(fiber)) {
fiberIDMap.set(fiber, nextFiberID++);
}
return fiberIDMap.get(fiber);
}
function getFriendlyTag(tag) {
switch (tag) {
case 0:
return '[indeterminate]';
case 1:
return '[fn]';
case 2:
return '[class]';
case 3:
return '[root]';
case 4:
return '[portal]';
case 5:
return '[host]';
case 6:
return '[text]';
case 7:
return '[coroutine]';
case 8:
return '[handler]';
case 9:
return '[yield]';
case 10:
return '[frag]';
default:
throw new Error('Unknown tag.');
}
}
function getFriendlyEffect(flags) {
const effects = {
1: 'Performed Work',
2: 'Placement',
4: 'Update',
8: 'Deletion',
16: 'Content reset',
32: 'Callback',
64: 'Err',
128: 'Ref',
};
return Object.keys(effects)
.filter(flag => flag & flags)
.map(flag => effects[flag])
.join(' & ');
}
export default function describeFibers(rootFiber, workInProgress) {
let descriptions = {};
function acknowledgeFiber(fiber) {
if (!fiber) {
return null;
}
if (!fiber.return && fiber.tag !== 3) {
return null;
}
const id = getFiberUniqueID(fiber);
if (descriptions[id]) {
return id;
}
descriptions[id] = {};
Object.assign(descriptions[id], {
...fiber,
id: id,
tag: getFriendlyTag(fiber.tag),
flags: getFriendlyEffect(fiber.flags),
type: fiber.type && '<' + (fiber.type.name || fiber.type) + '>',
stateNode: `[${typeof fiber.stateNode}]`,
return: acknowledgeFiber(fiber.return),
child: acknowledgeFiber(fiber.child),
sibling: acknowledgeFiber(fiber.sibling),
nextEffect: acknowledgeFiber(fiber.nextEffect),
firstEffect: acknowledgeFiber(fiber.firstEffect),
lastEffect: acknowledgeFiber(fiber.lastEffect),
alternate: acknowledgeFiber(fiber.alternate),
});
return id;
}
const rootID = acknowledgeFiber(rootFiber);
const workInProgressID = acknowledgeFiber(workInProgress);
let currentIDs = new Set();
function markAsCurrent(id) {
currentIDs.add(id);
const fiber = descriptions[id];
if (fiber.sibling) {
markAsCurrent(fiber.sibling);
}
if (fiber.child) {
markAsCurrent(fiber.child);
}
}
markAsCurrent(rootID);
return {
descriptions,
rootID,
currentIDs: Array.from(currentIDs),
workInProgressID,
};
}
Domain
Subdomains
Imported By
Source
Frequently Asked Questions
What does describeFibers.js do?
describeFibers.js is a source file in the react codebase, written in javascript. It belongs to the BabelCompiler domain, Optimization subdomain.
What functions are defined in describeFibers.js?
describeFibers.js defines 4 function(s): describeFibers, getFiberUniqueID, getFriendlyEffect, getFriendlyTag.
What files import describeFibers.js?
describeFibers.js is imported by 1 file(s): App.js.
Where is describeFibers.js in the architecture?
describeFibers.js is located at fixtures/fiber-debugger/src/describeFibers.js (domain: BabelCompiler, subdomain: Optimization, directory: fixtures/fiber-debugger/src).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free