-
Notifications
You must be signed in to change notification settings - Fork 0
/
graph-builder.js
38 lines (35 loc) · 1 KB
/
graph-builder.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* @module graph builder
* @author k-makarov
*/
var Vinyl = require('vinyl'),
graphviz = require('graphviz');
var GraphBuilder = module.exports = function() {};
var addDependencies = function(module, graph) {
for (var i = module.dependencies.length - 1; i >= 0; i--) {
graph.addEdge(module.node, module.dependencies[i]);
}
};
/**
* build graph object in graphviz format and render .dot file
* @param {Object} options
* @return {Object} returns dotFile as Vinyl object and graph object in graphviz format
*/
GraphBuilder.prototype.build = function(options) {
options = options || {};
var graph = graphviz.digraph('ngGraph');
for (var i = options.modules.length - 1; i >= 0; i--) {
options.modules[i].node = graph.addNode(options.modules[i].title);
}
for (i = options.modules.length - 1; i >= 0; i--) {
addDependencies(options.modules[i], graph);
}
var data = {
dotFile: new Vinyl({
path: options.dot,
contents: new Buffer(graph.to_dot())
}),
graph: graph
};
return data;
};