UNPKG

electrode-electrify-react-component

Version:
91 lines (74 loc) 2.06 kB
"use strict"; /*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; };