Files
react-fiber-traverse/src/traverse.ts
T
bendtherules 3a7bf374bd Add basic traverseGenerator
Need to allow changing order
2019-08-02 00:12:21 +05:30

35 lines
801 B
TypeScript

// import { isNodeSimple } from './utils';
import { FiberNode } from "./mocked-types";
function traverse(node: FiberNode, fn: (node: FiberNode) => any) {
fn.call(null, node);
if (node.child !== null) {
traverse(node.child, fn);
}
if (node.sibling !== null) {
traverse(node.sibling, fn);
}
}
function* traverseGenerator(
node: FiberNode
// {
// order = "pre"
// }: { order: "in" | "pre" | "post" }
): IterableIterator<FiberNode> {
const { skipChild, skipSibling } = yield node;
if (!skipChild && node.child !== null) {
const nextNode = node.child;
yield* traverseGenerator(nextNode);
}
if (!skipSibling && node.sibling !== null) {
const nextNode = node.sibling;
yield* traverseGenerator(nextNode);
}
}
export { traverse, traverseGenerator };