Home / File/ describeFibers.js — react Source File

describeFibers.js — react Source File

Architecture documentation for describeFibers.js, a javascript file in the react codebase. 0 imports, 1 dependents.

File javascript BabelCompiler Optimization 1 dependents 4 functions

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

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