@moyuyc/visit-tree
Visit tree by pre or post DFS
Installation
npm install @moyuyc/visit-tree
# or use yarn
yarn add @moyuyc/visit-tree
Usage
const visitTree = require('@moyuyc/visit-tree')
// or sync
const { sync } = require('@moyuyc/visit-tree')
await visitTree(
{
value: 'root',
children: [
{
value: 'a'
}
]
},
async (node, ctx) => {},
{}
)
API
visitTree(tree, preWalk: (node, ctx: Context) => void, options: Options): Promise<void>
visitTree(tree, preWalk: (node, ctx: Context) => void, postWalk: (node, ctx: Context) => void, options: Options): Promise<void>
Options
path
Assign children's path.
-
Type:
string
-
Default:
children
state
- Type: any
-
Default:
null
Context
state
It's same reference to options.state
.
node
The current node.
children
The current node's children.
index
Get the index of the current node.
depth
Get the depth of the current node. The depth is the number of ancestors the current node has.
parent
Get the parent of the current node.
skip
Skip current node, children won't be visited.
walk(rootNode, (node, ctx) => {
if (node.name === 'skip') {
return ctx.skip()
}
})
break
Stop traversal now.
walk(rootNode, (node, ctx) => {
if (node.name === 'stop') {
return ctx.break()
}
})
replace
walk(rootNode, (node, ctx) => {
if (node.name === 'replace-me') {
return ctx.replace({ name: 'new-me' })
}
})
remove
walk(rootNode, (node, ctx) => {
if (node.name === 'remove-me') {
return ctx.remove()
}
})
insert
walk(rootNode, (node, ctx) => {
if (node.name === 'insert-me') {
return ctx.insert({ name: 'abc' }, { name: '' })
}
})
paths
Get the paths(index list) of the current node.
parents
Get the parents(backward) of the current node.
parentCtx
Get the context of the current node's parent.
Contributing
- 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 :)
Authors
This library is written and maintained by imcuttle, moyuyc95@gmail.com.
License
MIT - imcuttle