electrode-electrify-react-component
Version:
electrode-electrify-react-component
91 lines (74 loc) • 2.06 kB
JavaScript
;
/*eslint-disable no-magic-numbers*/
module.exports = function jsonTree(modules) {
var maxDepth = 1;
var rootSize = 0;
var root = {
children: [],
name: "root"
};
var getChild = function getChild(arr, name) {
for (var i = 0; i < arr.length; i++) {
if (arr[i].name === name) {
return arr[i];
}
}
};
var getFile = 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);
}
};
var dirsizes = function dirsizes(child) {
return child.size = "size" in child //eslint-disable-line no-return-assign
? child.size : child.children.reduce(function (size, child) {
//eslint-disable-line no-shadow
return size + ("size" in child ? child.size : dirsizes(child));
}, 0);
};
modules.forEach(function addToTree(module) {
//eslint-disable-line prefer-arrow-callback
var size = void 0;
if (module.source) {
size = module.source.length;
} else {
size = module.size;
}
rootSize += size;
var mod = {
id: module.id,
fullName: module.name,
size: size,
reasons: module.reasons
};
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;
root.size = rootSize;
return root;
};