Add basic traverseGenerator

Need to allow changing order
This commit is contained in:
2019-08-02 00:12:21 +05:30
parent 007aa2b86b
commit 3a7bf374bd
3 changed files with 27 additions and 6 deletions
+22 -3
View File
@@ -1,5 +1,5 @@
// import { isNodeSimple } from './utils';
import {FiberNode} from './mocked-types';
import { FiberNode } from "./mocked-types";
function traverse(node: FiberNode, fn: (node: FiberNode) => any) {
fn.call(null, node);
@@ -10,6 +10,25 @@ function traverse(node: FiberNode, fn: (node: FiberNode) => any) {
if (node.sibling !== null) {
traverse(node.sibling, fn);
}
};
}
export default traverse;
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 };