# merge-estraverse-visitors

> merge multiple estraverse visitors into one

Latest version **2.0.0** (published 2020-05-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install merge-estraverse-visitors
pnpm add merge-estraverse-visitors
yarn add merge-estraverse-visitors
bun add merge-estraverse-visitors
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.0 |
| Published | 2020-05-18 |
| First published | 2016-06-28 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 9.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 4 |
| Author | Takuto Wada |
| Maintainers | twada |
| Keywords | ast, estraverse, estree |

## Links

- npm: https://www.npmjs.com/package/merge-estraverse-visitors
- Repository: https://github.com/twada/merge-estraverse-visitors
- Issues: https://github.com/twada/merge-estraverse-visitors/issues
- npm.io page: https://npm.io/package/merge-estraverse-visitors

## Dependencies (1)

- [estraverse](https://npm.io/package/estraverse.md) ^5.0.0

## Alternatives

- [update-check](https://npm.io/package/update-check.md) — 4.0M weekly downloads
- [react-native-onesignal](https://npm.io/package/react-native-onesignal.md) — 134.5K weekly downloads
- [react-redux-toastr](https://npm.io/package/react-redux-toastr.md) — 33.7K weekly downloads
- [@nocobase/plugin-notification-manager](https://npm.io/package/@nocobase/plugin-notification-manager.md) — 2.0K weekly downloads
- [react-simple-toasts](https://npm.io/package/react-simple-toasts.md) — 1.9K weekly downloads

## Recent versions

- 2.0.0 (latest) — 2020-05-18
- 1.0.0 — 2016-11-11
- 0.1.0 — 2016-06-28

## README

merge-estraverse-visitors
================================

Merge multiple visitors for estraverse into one

[![Build Status][travis-image]][travis-url]
[![NPM version][npm-image]][npm-url]
[![Code Style][style-image]][style-url]
[![License][license-image]][license-url]


API
---------------------------------------

`const mergedVisitor = mergeVisitors(arrayOfVisitors)`


INSTALL
---------------------------------------

```
npm install merge-estraverse-visitors
```


USAGE
---------------------------------------

For given code,

```js
function tenTimes (cb) {
  for (var i = 0; i < 10; i += 1) {
    cb();
  }
}
```

Merge multiple estraverse visitors into one then run against target AST.

```js
const visitor1 = {
  enter: function (currentNode, parentNode) {
    switch(currentNode.type) {
    case 'ForStatement':
      console.log('v1: going to skip ' + currentNode.type);
      this.skip();
      break;
    case 'CallExpression':
    case 'FunctionDeclaration':
      console.log('v1: entering ' + currentNode.type);
      break;
    }
    return undefined;
  },
  leave: function (currentNode, parentNode) {
    switch(currentNode.type) {
    case 'ForStatement':
    case 'CallExpression':
    case 'FunctionDeclaration':
      console.log('v1: leaving ' + currentNode.type);
      break;
    }
  }
};

const visitor2 = {
  enter: function (currentNode, parentNode) {
    switch(currentNode.type) {
    case 'ForStatement':
    case 'CallExpression':
    case 'FunctionDeclaration':
      console.log('v2: entering ' + currentNode.type);
      break;
    }
  },
  leave: function (currentNode, parentNode) {
    switch(currentNode.type) {
    case 'ForStatement':
    case 'CallExpression':
    case 'FunctionDeclaration':
      console.log('v2: leaving ' + currentNode.type);
      break;
    }
  }
};

const mergeVisitors = require('merge-estraverse-visitors');
const estraverse = require('estraverse');
const { parse } = require('acorn');
const ast = parse(code);
const mergedVisitor = mergeVisitors([ visitor1, visitor2 ])
estraverse.traverse(ast, mergedVisitor);
```

Results in:

```
v1: entering FunctionDeclaration
v2: entering FunctionDeclaration
v1: going to skip ForStatement
v2: entering ForStatement
v2: entering CallExpression
v2: leaving CallExpression
v2: leaving ForStatement
v1: leaving ForStatement
v2: leaving FunctionDeclaration
v1: leaving FunctionDeclaration
```


AUTHOR
---------------------------------------
* [Takuto Wada](https://github.com/twada)


SUPPORT POLICY
---------------------------------------

Supports Node under maintenance. In other words, we stop supporting old Node versions when [their maintenance ends](https://github.com/nodejs/Release). Any other environments are not supported officially (means that we do not test against them on CI service).


LICENSE
---------------------------------------
Licensed under the [MIT](http://twada.mit-license.org/2016-2020) license.


[travis-url]: https://travis-ci.org/twada/merge-estraverse-visitors
[travis-image]: https://secure.travis-ci.org/twada/merge-estraverse-visitors.svg?branch=master

[npm-url]: https://npmjs.org/package/merge-estraverse-visitors
[npm-image]: https://badge.fury.io/js/merge-estraverse-visitors.svg

[license-url]: http://twada.mit-license.org/2016-2020
[license-image]: https://img.shields.io/badge/license-MIT-brightgreen.svg

[style-url]: https://github.com/Flet/semistandard
[style-image]: https://img.shields.io/badge/code%20style-semistandard-brightgreen.svg

---
_Source: https://npm.io/package/merge-estraverse-visitors · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
