-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrequireTree.js
113 lines (86 loc) · 2.59 KB
/
requireTree.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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
var fs = require('fs');
var precinct = require('precinct');
var cabinet = require('filing-cabinet');
var async = require('async');
function extractImports(file, callback) {
fs.readFile(file, function (err, str) {
if (err) return callback(err);
var deps = precinct(str.toString('utf8'));
/*
var deps = [];
var reg = /require\('(.*?)'\)/gi;
var results;
while (results = reg.exec(str.toString('utf8')))
deps.push(results[1]);
*/
callback(null, deps);
});
}
function resolve(name, fromfile) {
return cabinet({
partial: name,
directory: '.',
filename: fromfile,
});
}
function fileToTree(file, callback) {
extractImports(file, function (err, files) {
if (err) return callback(err);
if (files.length == 0) return callback(null, {});
var res = {};
async.map(
files,
function (f, ac) {
var newfile = resolve(f, file);
// ne scan pas l'arbre des libs standard / installée
if (newfile.indexOf('node_modules/') != -1 || newfile.substr(-3) != '.js') {
res[f] = {};
return ac();
}
// charge l'arbre des fichiers js
fileToTree(newfile, function (err, tree) {
if (err) return ac(err);
res[newfile] = tree;
ac();
});
},
function (err) {
if (err) return callback(err);
callback(null, res);
}
);
});
}
function requireTree(file, callback) {
file = require('path').resolve(file);
fileToTree(file, function (err, tree) {
if (err) return callback(err);
var res = {};
res[file] = tree;
callback(null, res);
});
}
function showTree(tree, prefix) {
prefix = prefix || '';
var s = '';
var nb = Object.keys(tree).length;
var i = 0;
for (var name in tree) {
i++;
if (nb == i && prefix) {
var index = prefix.length - 4;
prefix = prefix.substring(0, index) + '└' + prefix.substring(index + 1);
}
s += prefix + name + '\n';
var newprefix = '';
if (prefix) newprefix = prefix.substr(0, -4) + '│ ';
if (nb == i && prefix) newprefix = prefix.substr(0, -4) + ' ';
newprefix += '├── ';
s += showTree(tree[name], newprefix);
}
return s;
}
module.exports = {
requireTree,
showTree,
};