esgraph

creates a control flow graph from an esprima abstract syntax tree

esgraph

creates a control flow graph from an esprima abstract syntax tree

$ npm install esgraph

The esgraph binary reads from stdin and outputs dot-format usable by graphviz. To create a png file showing the CFG of a js file:

$ cat $file | esgraph | dot -Tpng > output.png

var esgraph = require('esgraph');
 
var cfg = esgraph(esprima.parse(source, {range: true}));
// cfg[0] is the start node 
// cfg[1] is the end node 
// cfg[2] is an array of all nodes for easier iteration 
 
// each node has: 
node.astNode; // this is the original esprima AST node, either a statement or an expression 
node.prev; // an array of predecessor nodes 
node.next; // an array of all successor nodes 
 
// the successor nodes are also awailable by type: 
node.normal; // the next statement reached via normal flow 
node.true; // the next statement reached when `node.astNode` evaluates to true 
node.false; // the next statement reached when `node.astNode` evaluates to false 
node.exception; // the next statement reached when `node.astNode` throws 
 
 
var dot = esgraph.dot(cfg, {counter: startCount, source: source});
// returns the cfg printed in graphviz dot format. 
node.label // can be used to use a custom label for that node 
// otherwise `esgraph.dot` will print the nodes source when the ast is created 
// with {range: true} and {source: source} option is set 

LGPLv3