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();
}
}
Domain
Subdomains
Source
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