Visit tree by pre or post DFS
npm install @moyuyc/visit-tree
# or use yarn
yarn add @moyuyc/visit-tree
const visitTree = require('@moyuyc/visit-tree')
// or sync
const { sync } = require('@moyuyc/visit-tree')
await visitTree(
{
value: 'root',
children: [
{
value: 'a'
}
]
},
async (node, ctx) => {},
{}
)
visitTree(tree, preWalk: (node, ctx: Context) => void, postWalk: (node, ctx: Context) => void, options: Options): Promise<void>
Assign children's path.
- Type:
string
- Default:
children
- Type: any
- Default:
null
It's same reference to options.state
.
The current node.
The current node's children.
Get the index of the current node.
Get the depth of the current node. The depth is the number of ancestors the current node has.
Get the parent of the current node.
Skip current node, children won't be visited.
walk(rootNode, (node, ctx) => {
if (node.name === 'skip') {
return ctx.skip()
}
})
Stop traversal now.
walk(rootNode, (node, ctx) => {
if (node.name === 'stop') {
return ctx.break()
}
})
walk(rootNode, (node, ctx) => {
if (node.name === 'replace-me') {
return ctx.replace({ name: 'new-me' })
}
})
walk(rootNode, (node, ctx) => {
if (node.name === 'remove-me') {
return ctx.remove()
}
})
walk(rootNode, (node, ctx) => {
if (node.name === 'insert-me') {
return ctx.insert({ name: 'abc' }, { name: '' })
}
})
Get the paths(index list) of the current node.
Get the parents(backward) of the current node.
Get the context of the current node's parent.
- Fork it!
- Create your new branch:
git checkout -b feature-new
orgit checkout -b fix-which-bug
- Start your magic work now
- Make sure npm test passes
- Commit your changes:
git commit -am 'feat: some description (close #123)'
orgit commit -am 'fix: some description (fix #123)'
- Push to the branch:
git push
- Submit a pull request :)
This library is written and maintained by imcuttle, moyuyc95@gmail.com.
MIT - imcuttle 🐟