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
+2 -1
View File
@@ -1,4 +1,4 @@
import traverse from "./traverse";
import { traverse, traverseGenerator } from "./traverse";
import {
findNodeByComponent,
findNodeByComponentRef,
@@ -7,6 +7,7 @@ import {
export {
traverse,
traverseGenerator,
findNodeByComponent,
findNodeByComponentRef,
findNodeByComponentName
+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 };