JSPM

typhonjs-ast-walker

0.2.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 21257
  • Score
    100M100P100Q168711F
  • License MPL-2.0

Provides a simple Javascript AST traversal utility that traverses all nodes / children regardless of type.

Package Exports

  • typhonjs-ast-walker
  • typhonjs-ast-walker/dist/ASTWalker
  • typhonjs-ast-walker/src/ASTWalker

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (typhonjs-ast-walker) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

typhonjs-ast-walker

NPM Documentation Code Style License Gitter

Build Status Coverage Dependency Status

Provides a simple Javascript AST traversal utility that traverses all nodes / children regardless of type.

A single method traverse takes an AST object or array of nodes and a callback object which may contain two methods enterNode and exitNode which are invoked with the current node and the parent node respectively when entering and exiting a given node during traversal.

enterNode may return a array of strings which provide a set of children keys to ignore or null to skip traversing children keys entirely.

To install typhonjs-ast-walker provide this entry in package.json:

{
  ...
  "dependencies": {
    "typhonjs-ast-walker": "^0.2.0"
  }
}

A simple example follows:

import walker from 'typhonjs-ast-walker';

const ast = .... // An AST tree.

walker.traverse(ast,
{
   enterNode: (node, parent) =>
   {
      console.log(`walker - enterNode: ${node.type}`);

      // Optional return statement to ignore specific children keys.
      // return node.type === 'ClassBody' ? ['body'] : undefined;

      // Optional return statement to ignore specific children keys or skip traversal entirely.
      // return node.type === 'ClassBody' ? null : undefined;
   },
   
   exitNode: (node, parent) =>
   {
      console.log(`walker - exitNode: ${node.type}`);
   }
});
 

Support for typhonjs-plugin-manager is also available and when loading typhonjs-ast-walker as a plugin it will automatically register event bindings on the plugin eventbus with these event categories:

ast:walker:traverse - invokes traverse of the default walker.

Example typhonjs-plugin-manager usage:

import PluginManager    from 'typhonjs-plugin-manager';
import eventbus         from 'backbone-esnext-eventbus';

const pluginManager = new PluginManager({ eventbus });

pluginManager.add({ name: typhonjs-ast-walker });

// This will automatically wire up typhonjs-ast-walker to the eventbus. 

eventbus.trigger('ast:walker:traverse, ast, 
{
   enterNode: (node, parent) =>
   {
      console.log(`walker - enterNode: ${node.type}`);
   },
   
   exitNode: (node, parent) =>
   {
      console.log(`walker - exitNode: ${node.type}`);
   }
});