UNPKG

3.65 kBJavaScriptView Raw
1"use strict";
2
3function ModuleStatsPlugin(options) {
4 options = options || {};
5 this.options = {};
6 this.options.filename = options.filename || "moduleStats.js";
7}
8
9ModuleStatsPlugin.prototype = {
10 constructor: ModuleStatsPlugin,
11
12 apply: function apply(compiler) {
13 var self = this;
14 compiler.plugin("emit", function (compilation, callback) {
15
16 var stats = compilation.getStats().toJson();
17
18 var modules = stats.modules;
19 var moduleName = "";
20 var rModuleName = "";
21 var rReferencesArray = [];
22 var rReferencedByArray = [];
23 var data = { results: [] };
24 var moduleDetails = {};
25 var references = "";
26 var referencedBy = "";
27 var normalizedData = "";
28
29 for (var i in modules) {
30 moduleName = modules[i].name;
31 if (moduleName.startsWith("./src") && !(moduleName.indexOf("index.js") > -1) && !moduleName.endsWith("css")) {
32 rModuleName = moduleName.substring(moduleName.lastIndexOf("/") + 1, moduleName.lastIndexOf("."));
33 if (rModuleName.endsWith("docs")) {
34 rModuleName = rModuleName.substring(0, rModuleName.lastIndexOf("."));
35 }
36
37 if (modules[i].reasons.length > 0) {
38 for (var l in modules[i].reasons) {
39 referencedBy = modules[i].reasons[l].moduleName;
40 if (!referencedBy.endsWith("index.js")) {
41 var referencedby = referencedBy.substring(referencedBy.lastIndexOf("/") + 1, referencedBy.lastIndexOf("."));
42 if (referencedby.endsWith("docs")) {
43 rReferencedByArray.push(referencedby.substring(0, referencedby.lastIndexOf(".")));
44 } else {
45 rReferencedByArray.push(referencedBy.substring(referencedBy.lastIndexOf("/") + 1, referencedBy.lastIndexOf(".")));
46 }
47 }
48 }
49 }
50
51 for (var module in modules) {
52 if (modules[module].name.startsWith("./src")) {
53 for (var reason in modules[module].reasons) {
54 if (moduleName === modules[module].reasons[reason].moduleName && !(modules[module].name.indexOf("css") > -1)) {
55 if (!modules[module].name.endsWith("react.js") && !(modules[module].name.indexOf("react-dom") > -1) && !modules[module].name.endsWith(".png")) {
56 references = modules[module].name;
57 rReferencesArray.push(references.substring(references.lastIndexOf("/") + 1, references.lastIndexOf(".")));
58 }
59 }
60 }
61 }
62 }
63
64 rReferencesArray = rReferencesArray.filter(function (item, index, inputArray) {
65 return inputArray.indexOf(item) == index;
66 });
67
68 moduleDetails = {
69 "name": rModuleName,
70 "references": rReferencesArray,
71 "referencedby": rReferencedByArray
72 };
73
74 var dre = "";
75
76 data.results.push(moduleDetails);
77 moduleDetails = {};
78 rReferencesArray = [];
79 rReferencedByArray = [];
80 referencedBy = "";
81 references = "";
82
83 data.results.forEach(function (mod) {
84 dre += "'" + mod.name + "':" + JSON.stringify(mod) + ",";
85 });
86 }
87 }
88
89 var dataResult = "{" + dre + "}";
90 var mResult = "var mdata = " + dataResult;
91
92 compilation.assets[self.options.filename] = {
93 source: function source() {
94 return mResult;
95 },
96 size: function size() {
97 return mResult.length;
98 }
99 };
100 callback();
101 });
102 }
103};
104
105module.exports = ModuleStatsPlugin;
\No newline at end of file