UNPKG

fz-react-cli

Version:

A CLI tool for build modern web application and libraries

105 lines (89 loc) 3.65 kB
"use strict"; function ModuleStatsPlugin(options) { options = options || {}; this.options = {}; this.options.filename = options.filename || "moduleStats.js"; } ModuleStatsPlugin.prototype = { constructor: ModuleStatsPlugin, apply: function apply(compiler) { var self = this; compiler.plugin("emit", function (compilation, callback) { var stats = compilation.getStats().toJson(); var modules = stats.modules; var moduleName = ""; var rModuleName = ""; var rReferencesArray = []; var rReferencedByArray = []; var data = { results: [] }; var moduleDetails = {}; var references = ""; var referencedBy = ""; var normalizedData = ""; for (var i in modules) { moduleName = modules[i].name; if (moduleName.startsWith("./src") && !(moduleName.indexOf("index.js") > -1) && !moduleName.endsWith("css")) { rModuleName = moduleName.substring(moduleName.lastIndexOf("/") + 1, moduleName.lastIndexOf(".")); if (rModuleName.endsWith("docs")) { rModuleName = rModuleName.substring(0, rModuleName.lastIndexOf(".")); } if (modules[i].reasons.length > 0) { for (var l in modules[i].reasons) { referencedBy = modules[i].reasons[l].moduleName; if (!referencedBy.endsWith("index.js")) { var referencedby = referencedBy.substring(referencedBy.lastIndexOf("/") + 1, referencedBy.lastIndexOf(".")); if (referencedby.endsWith("docs")) { rReferencedByArray.push(referencedby.substring(0, referencedby.lastIndexOf("."))); } else { rReferencedByArray.push(referencedBy.substring(referencedBy.lastIndexOf("/") + 1, referencedBy.lastIndexOf("."))); } } } } for (var module in modules) { if (modules[module].name.startsWith("./src")) { for (var reason in modules[module].reasons) { if (moduleName === modules[module].reasons[reason].moduleName && !(modules[module].name.indexOf("css") > -1)) { if (!modules[module].name.endsWith("react.js") && !(modules[module].name.indexOf("react-dom") > -1) && !modules[module].name.endsWith(".png")) { references = modules[module].name; rReferencesArray.push(references.substring(references.lastIndexOf("/") + 1, references.lastIndexOf("."))); } } } } } rReferencesArray = rReferencesArray.filter(function (item, index, inputArray) { return inputArray.indexOf(item) == index; }); moduleDetails = { "name": rModuleName, "references": rReferencesArray, "referencedby": rReferencedByArray }; var dre = ""; data.results.push(moduleDetails); moduleDetails = {}; rReferencesArray = []; rReferencedByArray = []; referencedBy = ""; references = ""; data.results.forEach(function (mod) { dre += "'" + mod.name + "':" + JSON.stringify(mod) + ","; }); } } var dataResult = "{" + dre + "}"; var mResult = "var mdata = " + dataResult; compilation.assets[self.options.filename] = { source: function source() { return mResult; }, size: function size() { return mResult.length; } }; callback(); }); } }; module.exports = ModuleStatsPlugin;