@deps/traverse
TypeScript icon, indicating that this package has built-in type declarations

1.0.2 • Public • Published

@deps/traverse

A Traverser library for object.

Features

  • Enter/Leave
  • Support any type of node
  • No Dependencies
  • Written by TypeScript

Install

Install with npm:

npm install @deps/traverse

Usage

import { createTraverser } from "@deps/traverse";
const traverser = createTraverser();
const object = {
    "depth": 1,
    "child": {
        "depth": 2
    }
};
const results = [];
const traverseResult = traverser.visit(actualContent, {
    enter({ node }) {
        results.push(["enter", node]);
    },
    leave({ node }) {
        results.push(["leave", node]);
    }
});
console.log(traverseResult === object); // => true
console.log(results);
/*
[
    [
        "enter",
        {
            "depth": 1,
            "child": {
                "depth": 2
            }
        }
    ],
    [
        "enter",
        {
            "depth": 2
        }
    ],
    [
        "leave",
        {
            "depth": 2
        }
    ],
    [
        "leave",
        {
            "depth": 1,
            "child": {
                "depth": 2
            }
        }
    ]
]
*/

Options

export declare type createTraverserOptions = {
    /**
     * Define what is Node?
     * If the predicate function return true, the traverse recognize the value is a Node.
     * Any object is a Node by default.
     * Default: () => true
     */
    nodePredicate?: TraverserNodePredicate;
};
import { createTraverser } from "@deps/traverse";
const traverser = createTraverser({
    nodePredicate(node){
        // Node should have "type" property
        return "type" in node;
    }
});
const AST = {
 "type": "Program",
 "body": [
   {
     "type": "VariableDeclaration",
     "declarations": [
       {
         "type": "VariableDeclarator",
         "id": {
           "type": "Identifier",
           "name": "a"
         },
         "init": {
           "type": "Literal",
           "value": 1,
           "raw": "1"
         }
       }
     ],
     "kind": "var"
   }
 ],
 "sourceType": "module"
};

const results = [];
traverser.visit(AST, {
    enter({ node }) {
        results.push(["enter", node.type]);
    },
    leave({ node }) {
        results.push(["leave", node.type]);
    }
});

assert.deepStrictEqual(results, [
    [ 'enter', 'Program' ],
    [ 'enter', 'VariableDeclaration' ],
    [ 'enter', 'VariableDeclarator' ],
    [ 'enter', 'Identifier' ],
    [ 'leave', 'Identifier' ],
    [ 'enter', 'Literal' ],
    [ 'leave', 'Literal' ],
    [ 'leave', 'VariableDeclarator' ],
    [ 'leave', 'VariableDeclaration' ],
    [ 'leave', 'Program' ]
]);

Changelog

See Releases page.

Running tests

Install devDependencies and Run npm test:

npm test

Contributing

Pull requests and stars are always welcome.

For bugs and feature requests, please create an issue.

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

Author

License

MIT © azu

This module is based on estree-walker.

Package Sidebar

Install

npm i @deps/traverse

Weekly Downloads

360

Version

1.0.2

License

MIT

Unpacked Size

20.9 kB

Total Files

11

Last publish

Collaborators

  • azu