@moyuyc/visit-tree

Visit tree by pre or post DFS

Usage no npm install needed!

<script type="module">
  import moyuycVisitTree from 'https://cdn.skypack.dev/@moyuyc/visit-tree';
</script>

README

@moyuyc/visit-tree

Build status Test coverage NPM version NPM Downloads Prettier Conventional Commits

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 or git 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)' or git 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 🐟