d2-ui
Version:
102 lines (81 loc) • 2.47 kB
JavaScript
//import UglifyJS from '../uglifyjs';
//import 'imports?this=>window!../uglifyjs';
;
Object.defineProperty(exports, '__esModule', {
value: true
});
exports['default'] = buildHierarchy;
function buildHierarchy(json) {
var modules = json.modules;
var maxDepth = 1;
var root = {
children: [],
name: 'root'
};
modules.forEach(function addToTree(module) {
var size;
//if (module.source) {
//size = module.source.length;
/*
var toplevel_ast = window.UglifyJS.parse(module.source);
toplevel_ast.figure_out_scope();
var compressor = window.UglifyJS.Compressor();
var compressed_ast = toplevel_ast.transform(compressor);
compressed_ast.figure_out_scope();
compressed_ast.compute_char_frequency();
compressed_ast.mangle_names();
var code = compressed_ast.print_to_string();
size = code.length;*/
//} else {
size = module.size;
//}
var mod = {
id: module.id,
fullName: module.name,
size: size,
reasons: module.reasons
};
//source: module.source
var depth = mod.fullName.split('/').length - 1;
if (depth > maxDepth) {
maxDepth = depth;
}
var fileName = mod.fullName;
var beginning = mod.fullName.slice(0, 2);
if (beginning === './') {
fileName = fileName.slice(2);
}
getFile(mod, fileName, root);
});
root.maxDepth = maxDepth;
return root;
}
function getFile(module, fileName, parentTree) {
var charIndex = fileName.indexOf('/');
if (charIndex !== -1) {
var folder = fileName.slice(0, charIndex);
if (folder === '~') {
folder = 'node_modules';
}
var childFolder = getChild(parentTree.children, folder);
if (!childFolder) {
childFolder = {
name: folder,
children: []
};
parentTree.children.push(childFolder);
}
getFile(module, fileName.slice(charIndex + 1), childFolder);
} else {
module.name = fileName;
parentTree.children.push(module);
}
}
function getChild(arr, name) {
for (var i = 0; i < arr.length; i++) {
if (arr[i].name === name) {
return arr[i];
}
}
}
module.exports = exports['default'];