diff --git a/src/index.ts b/src/index.ts index 9f19d97..eb231a0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -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 diff --git a/src/traverse.ts b/src/traverse.ts index 976f70f..6371dc4 100644 --- a/src/traverse.ts +++ b/src/traverse.ts @@ -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; \ No newline at end of file +function* traverseGenerator( + node: FiberNode + // { + // order = "pre" + // }: { order: "in" | "pre" | "post" } +): IterableIterator { + 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 }; diff --git a/tsconfig.json b/tsconfig.json index 99337f0..50185f4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,4 @@ -{ + { "extends": "./tsconfig.base.json", "exclude": ["node_modules"], "include": ["scripts", "src", "test"], @@ -6,6 +6,7 @@ "allowJs": true, "declaration": false, "declarationDir": null, - "module": "commonjs" + "module": "commonjs", + "target": "es6", } }