A Traverser library for object.
MIT License
A Traverser library for object.
Install with npm:
npm install @deps/traverse
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
}
}
]
]
*/
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' ]
]);
See Releases page.
Install devDependencies and Run npm test
:
npm test
Pull requests and stars are always welcome.
For bugs and feature requests, please create an issue.
git checkout -b my-new-feature
git commit -am 'Add some feature'
git push origin my-new-feature
MIT azu
This module is based on estree-walker
.