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, options: Options): Promise<void>
visitTree(tree, preWalk: (node, ctx: Context) => void, postWalk: (node, ctx: Context) => void, options: Options): Promise<void>
path
Assign children's path.
string
children
state
null
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.
git checkout -b feature-new
or git checkout -b fix-which-bug
git commit -am 'feat: some description (close #123)'
or git commit -am 'fix: some description (fix #123)'
git push
This library is written and maintained by imcuttle, [email protected].
MIT - imcuttle 🐟