https://github.com/imcuttle/visit-tree
Visit tree by pre or post DFS
https://github.com/imcuttle/visit-tree
Last synced: about 1 year ago
JSON representation
Visit tree by pre or post DFS
- Host: GitHub
- URL: https://github.com/imcuttle/visit-tree
- Owner: imcuttle
- License: mit
- Created: 2019-02-03T12:09:08.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-02-28T07:52:19.000Z (over 3 years ago)
- Last Synced: 2025-03-23T02:34:06.538Z (about 1 year ago)
- Language: JavaScript
- Size: 825 KB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 20
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: License
Awesome Lists containing this project
README
# @moyuyc/visit-tree
[](https://travis-ci.org/imcuttle/visit-tree)
[](https://codecov.io/github/imcuttle/visit-tree?branch=master)
[](https://www.npmjs.com/package/@moyuyc/visit-tree)
[](https://www.npmjs.com/package/@moyuyc/visit-tree)
[](https://prettier.io/)
[](https://conventionalcommits.org)
> Visit tree by pre or post DFS
## Installation
```bash
npm install @moyuyc/visit-tree
# or use yarn
yarn add @moyuyc/visit-tree
```
## Usage
```javascript
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`**
### **`visitTree(tree, preWalk: (node, ctx: Context) => void, postWalk: (node, ctx: Context) => void, options: Options): Promise`**
### 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.
```javascript
walk(rootNode, (node, ctx) => {
if (node.name === 'skip') {
return ctx.skip()
}
})
```
#### `break`
Stop traversal now.
```javascript
walk(rootNode, (node, ctx) => {
if (node.name === 'stop') {
return ctx.break()
}
})
```
#### `replace`
```javascript
walk(rootNode, (node, ctx) => {
if (node.name === 'replace-me') {
return ctx.replace({ name: 'new-me' })
}
})
```
#### `remove`
```javascript
walk(rootNode, (node, ctx) => {
if (node.name === 'remove-me') {
return ctx.remove()
}
})
```
#### `insert`
```javascript
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](https://github.com/imcuttle) 🐟