@moyuyc/visit-tree
TypeScript icon, indicating that this package has built-in type declarations

4.0.3 • Public • Published

@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 🐟

Package Sidebar

Install

npm i @moyuyc/visit-tree

Weekly Downloads

23

Version

4.0.3

License

MIT

Unpacked Size

28.4 kB

Total Files

16

Last publish

Collaborators

  • moyuyc