Home / Function/ recursivelyTraverseItems() — react Function Reference

recursivelyTraverseItems() — react Function Reference

Architecture documentation for the recursivelyTraverseItems() function in AssertValidBlockNesting.ts from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  170cf454_aca5_0b9b_0991_4b81319b731b["recursivelyTraverseItems()"]
  5dff208f_71b7_72c1_b78a_03be9b621b2a["AssertValidBlockNesting.ts"]
  170cf454_aca5_0b9b_0991_4b81319b731b -->|defined in| 5dff208f_71b7_72c1_b78a_03be9b621b2a
  8df1c728_cbcd_34ab_bd90_969f45256d13["assertValidBlockNesting()"]
  8df1c728_cbcd_34ab_bd90_969f45256d13 -->|calls| 170cf454_aca5_0b9b_0991_4b81319b731b
  67879f67_c0fc_dc2d_b736_b9213153bc4a["buildReactiveScopeTerminalsHIR()"]
  67879f67_c0fc_dc2d_b736_b9213153bc4a -->|calls| 170cf454_aca5_0b9b_0991_4b81319b731b
  6990f5e1_932c_dac6_c479_5305e79dfcb9["rangePreOrderComparator()"]
  170cf454_aca5_0b9b_0991_4b81319b731b -->|calls| 6990f5e1_932c_dac6_c479_5305e79dfcb9
  style 170cf454_aca5_0b9b_0991_4b81319b731b fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/HIR/AssertValidBlockNesting.ts lines 113–152

export function recursivelyTraverseItems<T, TContext>(
  items: Array<T>,
  getRange: (val: T) => MutableRange,
  context: TContext,
  enter: (val: T, context: TContext) => void,
  exit: (val: T, context: TContext) => void,
): void {
  items.sort((a, b) => rangePreOrderComparator(getRange(a), getRange(b)));
  let activeItems: Array<T> = [];
  const ranges = items.map(getRange);
  for (let i = 0; i < items.length; i++) {
    const curr = items[i];
    const currRange = ranges[i];
    for (let i = activeItems.length - 1; i >= 0; i--) {
      const maybeParent = activeItems[i];
      const maybeParentRange = getRange(maybeParent);
      const disjoint = currRange.start >= maybeParentRange.end;
      const nested = currRange.end <= maybeParentRange.end;
      CompilerError.invariant(disjoint || nested, {
        reason: 'Invalid nesting in program blocks or scopes',
        description: `Items overlap but are not nested: ${maybeParentRange.start}:${maybeParentRange.end}(${currRange.start}:${currRange.end})`,
        loc: GeneratedSource,
      });
      if (disjoint) {
        exit(maybeParent, context);
        activeItems.length = i;
      } else {
        break;
      }
    }
    enter(curr, context);
    activeItems.push(curr);
  }

  let curr = activeItems.pop();
  while (curr != null) {
    exit(curr, context);
    curr = activeItems.pop();
  }
}

Subdomains

Frequently Asked Questions

What does recursivelyTraverseItems() do?
recursivelyTraverseItems() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/HIR/AssertValidBlockNesting.ts.
Where is recursivelyTraverseItems() defined?
recursivelyTraverseItems() is defined in compiler/packages/babel-plugin-react-compiler/src/HIR/AssertValidBlockNesting.ts at line 113.
What does recursivelyTraverseItems() call?
recursivelyTraverseItems() calls 1 function(s): rangePreOrderComparator.
What calls recursivelyTraverseItems()?
recursivelyTraverseItems() is called by 2 function(s): assertValidBlockNesting, buildReactiveScopeTerminalsHIR.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free