@rsdoctor/utils 0.0.0-next-20240620044732

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -0
  3. package/dist/cjs/build/envinfo.js +109 -0
  4. package/dist/cjs/build/file/cache.js +67 -0
  5. package/dist/cjs/build/file/index.js +44 -0
  6. package/dist/cjs/build/file/sharding.js +84 -0
  7. package/dist/cjs/build/index.js +50 -0
  8. package/dist/cjs/build/json.js +52 -0
  9. package/dist/cjs/build/process.js +49 -0
  10. package/dist/cjs/build/server.js +127 -0
  11. package/dist/cjs/common/alerts.js +49 -0
  12. package/dist/cjs/common/algorithm.js +60 -0
  13. package/dist/cjs/common/bundle.js +56 -0
  14. package/dist/cjs/common/crypto.js +53 -0
  15. package/dist/cjs/common/data/index.js +299 -0
  16. package/dist/cjs/common/graph/assets.js +322 -0
  17. package/dist/cjs/common/graph/chunk.js +67 -0
  18. package/dist/cjs/common/graph/dependency.js +40 -0
  19. package/dist/cjs/common/graph/entrypoints.js +30 -0
  20. package/dist/cjs/common/graph/index.js +30 -0
  21. package/dist/cjs/common/graph/modules.js +98 -0
  22. package/dist/cjs/common/index.js +80 -0
  23. package/dist/cjs/common/loader.js +261 -0
  24. package/dist/cjs/common/manifest.js +72 -0
  25. package/dist/cjs/common/package.js +97 -0
  26. package/dist/cjs/common/plugin.js +86 -0
  27. package/dist/cjs/common/resolver.js +82 -0
  28. package/dist/cjs/common/rspack.js +37 -0
  29. package/dist/cjs/common/summary.js +34 -0
  30. package/dist/cjs/common/time.js +91 -0
  31. package/dist/cjs/common/url.js +46 -0
  32. package/dist/cjs/error/error.js +236 -0
  33. package/dist/cjs/error/index.js +31 -0
  34. package/dist/cjs/error/transform.js +175 -0
  35. package/dist/cjs/error/utils.js +66 -0
  36. package/dist/cjs/index.js +41 -0
  37. package/dist/cjs/logger.js +51 -0
  38. package/dist/cjs/rule-utils/document/document.js +91 -0
  39. package/dist/cjs/rule-utils/document/index.js +26 -0
  40. package/dist/cjs/rule-utils/document/server.js +42 -0
  41. package/dist/cjs/rule-utils/document/types.js +16 -0
  42. package/dist/cjs/rule-utils/index.js +24 -0
  43. package/dist/cjs/rule-utils/parser/asserts.js +156 -0
  44. package/dist/cjs/rule-utils/parser/index.js +28 -0
  45. package/dist/cjs/rule-utils/parser/parser.js +92 -0
  46. package/dist/cjs/rule-utils/parser/types.js +33 -0
  47. package/dist/cjs/rule-utils/parser/utils.js +197 -0
  48. package/dist/esm/build/envinfo.js +75 -0
  49. package/dist/esm/build/file/cache.js +30 -0
  50. package/dist/esm/build/file/index.js +7 -0
  51. package/dist/esm/build/file/sharding.js +50 -0
  52. package/dist/esm/build/index.js +12 -0
  53. package/dist/esm/build/json.js +28 -0
  54. package/dist/esm/build/process.js +24 -0
  55. package/dist/esm/build/server.js +88 -0
  56. package/dist/esm/common/alerts.js +25 -0
  57. package/dist/esm/common/algorithm.js +33 -0
  58. package/dist/esm/common/bundle.js +30 -0
  59. package/dist/esm/common/crypto.js +28 -0
  60. package/dist/esm/common/data/index.js +265 -0
  61. package/dist/esm/common/graph/assets.js +286 -0
  62. package/dist/esm/common/graph/chunk.js +38 -0
  63. package/dist/esm/common/graph/dependency.js +14 -0
  64. package/dist/esm/common/graph/entrypoints.js +6 -0
  65. package/dist/esm/common/graph/index.js +5 -0
  66. package/dist/esm/common/graph/modules.js +70 -0
  67. package/dist/esm/common/index.js +32 -0
  68. package/dist/esm/common/loader.js +225 -0
  69. package/dist/esm/common/manifest.js +46 -0
  70. package/dist/esm/common/package.js +71 -0
  71. package/dist/esm/common/plugin.js +59 -0
  72. package/dist/esm/common/resolver.js +54 -0
  73. package/dist/esm/common/rspack.js +12 -0
  74. package/dist/esm/common/summary.js +10 -0
  75. package/dist/esm/common/time.js +64 -0
  76. package/dist/esm/common/url.js +20 -0
  77. package/dist/esm/error/error.js +202 -0
  78. package/dist/esm/error/index.js +5 -0
  79. package/dist/esm/error/transform.js +141 -0
  80. package/dist/esm/error/utils.js +40 -0
  81. package/dist/esm/index.js +6 -0
  82. package/dist/esm/logger.js +15 -0
  83. package/dist/esm/rule-utils/document/document.js +67 -0
  84. package/dist/esm/rule-utils/document/index.js +3 -0
  85. package/dist/esm/rule-utils/document/server.js +17 -0
  86. package/dist/esm/rule-utils/document/types.js +0 -0
  87. package/dist/esm/rule-utils/index.js +2 -0
  88. package/dist/esm/rule-utils/parser/asserts.js +132 -0
  89. package/dist/esm/rule-utils/parser/index.js +4 -0
  90. package/dist/esm/rule-utils/parser/parser.js +58 -0
  91. package/dist/esm/rule-utils/parser/types.js +9 -0
  92. package/dist/esm/rule-utils/parser/utils.js +164 -0
  93. package/dist/type/build/envinfo.d.ts +14 -0
  94. package/dist/type/build/envinfo.d.ts.map +1 -0
  95. package/dist/type/build/file/cache.d.ts +6 -0
  96. package/dist/type/build/file/cache.d.ts.map +1 -0
  97. package/dist/type/build/file/index.d.ts +4 -0
  98. package/dist/type/build/file/index.d.ts.map +1 -0
  99. package/dist/type/build/file/sharding.d.ts +23 -0
  100. package/dist/type/build/file/sharding.d.ts.map +1 -0
  101. package/dist/type/build/index.d.ts +6 -0
  102. package/dist/type/build/index.d.ts.map +1 -0
  103. package/dist/type/build/json.d.ts +2 -0
  104. package/dist/type/build/json.d.ts.map +1 -0
  105. package/dist/type/build/process.d.ts +4 -0
  106. package/dist/type/build/process.d.ts.map +1 -0
  107. package/dist/type/build/server.d.ts +16 -0
  108. package/dist/type/build/server.d.ts.map +1 -0
  109. package/dist/type/common/alerts.d.ts +3 -0
  110. package/dist/type/common/alerts.d.ts.map +1 -0
  111. package/dist/type/common/algorithm.d.ts +5 -0
  112. package/dist/type/common/algorithm.d.ts.map +1 -0
  113. package/dist/type/common/bundle.d.ts +4 -0
  114. package/dist/type/common/bundle.d.ts.map +1 -0
  115. package/dist/type/common/crypto.d.ts +3 -0
  116. package/dist/type/common/crypto.d.ts.map +1 -0
  117. package/dist/type/common/data/index.d.ts +11 -0
  118. package/dist/type/common/data/index.d.ts.map +1 -0
  119. package/dist/type/common/graph/assets.d.ts +53 -0
  120. package/dist/type/common/graph/assets.d.ts.map +1 -0
  121. package/dist/type/common/graph/chunk.d.ts +8 -0
  122. package/dist/type/common/graph/chunk.d.ts.map +1 -0
  123. package/dist/type/common/graph/dependency.d.ts +5 -0
  124. package/dist/type/common/graph/dependency.d.ts.map +1 -0
  125. package/dist/type/common/graph/entrypoints.d.ts +3 -0
  126. package/dist/type/common/graph/entrypoints.d.ts.map +1 -0
  127. package/dist/type/common/graph/index.d.ts +6 -0
  128. package/dist/type/common/graph/index.d.ts.map +1 -0
  129. package/dist/type/common/graph/modules.d.ts +10 -0
  130. package/dist/type/common/graph/modules.d.ts.map +1 -0
  131. package/dist/type/common/index.d.ts +16 -0
  132. package/dist/type/common/index.d.ts.map +1 -0
  133. package/dist/type/common/loader.d.ts +19 -0
  134. package/dist/type/common/loader.d.ts.map +1 -0
  135. package/dist/type/common/manifest.d.ts +5 -0
  136. package/dist/type/common/manifest.d.ts.map +1 -0
  137. package/dist/type/common/package.d.ts +8 -0
  138. package/dist/type/common/package.d.ts.map +1 -0
  139. package/dist/type/common/plugin.d.ts +6 -0
  140. package/dist/type/common/plugin.d.ts.map +1 -0
  141. package/dist/type/common/resolver.d.ts +7 -0
  142. package/dist/type/common/resolver.d.ts.map +1 -0
  143. package/dist/type/common/rspack.d.ts +8 -0
  144. package/dist/type/common/rspack.d.ts.map +1 -0
  145. package/dist/type/common/summary.d.ts +7 -0
  146. package/dist/type/common/summary.d.ts.map +1 -0
  147. package/dist/type/common/time.d.ts +5 -0
  148. package/dist/type/common/time.d.ts.map +1 -0
  149. package/dist/type/common/url.d.ts +4 -0
  150. package/dist/type/common/url.d.ts.map +1 -0
  151. package/dist/type/error/error.d.ts +36 -0
  152. package/dist/type/error/error.d.ts.map +1 -0
  153. package/dist/type/error/index.d.ts +3 -0
  154. package/dist/type/error/index.d.ts.map +1 -0
  155. package/dist/type/error/transform.d.ts +4 -0
  156. package/dist/type/error/transform.d.ts.map +1 -0
  157. package/dist/type/error/utils.d.ts +5 -0
  158. package/dist/type/error/utils.d.ts.map +1 -0
  159. package/dist/type/index.d.ts +3 -0
  160. package/dist/type/index.d.ts.map +1 -0
  161. package/dist/type/logger.d.ts +8 -0
  162. package/dist/type/logger.d.ts.map +1 -0
  163. package/dist/type/rule-utils/document/document.d.ts +17 -0
  164. package/dist/type/rule-utils/document/document.d.ts.map +1 -0
  165. package/dist/type/rule-utils/document/index.d.ts +4 -0
  166. package/dist/type/rule-utils/document/index.d.ts.map +1 -0
  167. package/dist/type/rule-utils/document/server.d.ts +5 -0
  168. package/dist/type/rule-utils/document/server.d.ts.map +1 -0
  169. package/dist/type/rule-utils/document/types.d.ts +32 -0
  170. package/dist/type/rule-utils/document/types.d.ts.map +1 -0
  171. package/dist/type/rule-utils/index.d.ts +3 -0
  172. package/dist/type/rule-utils/index.d.ts.map +1 -0
  173. package/dist/type/rule-utils/parser/asserts.d.ts +82 -0
  174. package/dist/type/rule-utils/parser/asserts.d.ts.map +1 -0
  175. package/dist/type/rule-utils/parser/index.d.ts +5 -0
  176. package/dist/type/rule-utils/parser/index.d.ts.map +1 -0
  177. package/dist/type/rule-utils/parser/parser.d.ts +119 -0
  178. package/dist/type/rule-utils/parser/parser.d.ts.map +1 -0
  179. package/dist/type/rule-utils/parser/types.d.ts +31 -0
  180. package/dist/type/rule-utils/parser/types.d.ts.map +1 -0
  181. package/dist/type/rule-utils/parser/utils.d.ts +31 -0
  182. package/dist/type/rule-utils/parser/utils.d.ts.map +1 -0
  183. package/package.json +111 -0
@@ -0,0 +1,265 @@
1
+ import { Rule, SDK } from "@rsdoctor/types";
2
+ import * as Loader from "../loader";
3
+ import * as Resolver from "../resolver";
4
+ import * as Plugin from "../plugin";
5
+ import * as Graph from "../graph";
6
+ import * as Alerts from "../alerts";
7
+ class APIDataLoader {
8
+ constructor(loader) {
9
+ this.loader = loader;
10
+ this.loadAPI = this.loadAPI.bind(this);
11
+ }
12
+ log(...args) {
13
+ console.log(`[${this.constructor.name}]`, ...args);
14
+ }
15
+ loadAPI(...args) {
16
+ const [api, body] = args;
17
+ switch (api) {
18
+ case SDK.ServerAPI.API.LoadDataByKey:
19
+ return this.loader.loadData(
20
+ body.key
21
+ );
22
+ case SDK.ServerAPI.API.GetProjectInfo:
23
+ return Promise.all([
24
+ this.loader.loadData("root"),
25
+ this.loader.loadData("pid"),
26
+ this.loader.loadData("hash"),
27
+ this.loader.loadData("summary"),
28
+ this.loader.loadData("configs"),
29
+ this.loader.loadData("envinfo"),
30
+ this.loader.loadData("errors")
31
+ ]).then(
32
+ ([root, pid, hash, summary, configs, envinfo, errors]) => ({ root, pid, hash, summary, configs, envinfo, errors })
33
+ );
34
+ case SDK.ServerAPI.API.GetClientRoutes:
35
+ return this.loader.loadManifest().then((res) => {
36
+ const { enableRoutes = [] } = res.client || {};
37
+ return enableRoutes;
38
+ });
39
+ case SDK.ServerAPI.API.GetLoaderNames:
40
+ return this.loader.loadData("loader").then((res) => {
41
+ return Loader.getLoaderNames(res || []);
42
+ });
43
+ case SDK.ServerAPI.API.GetLoaderChartData:
44
+ return this.loader.loadData("loader").then((res) => {
45
+ return Loader.getLoaderChartData(res || []);
46
+ });
47
+ case SDK.ServerAPI.API.GetLoaderFileTree:
48
+ return this.loader.loadData("loader").then((res) => {
49
+ return Loader.getLoaderFileTree(res || []);
50
+ });
51
+ case SDK.ServerAPI.API.GetLoaderFileDetails:
52
+ return this.loader.loadData("loader").then((res) => {
53
+ return Loader.getLoaderFileDetails(
54
+ body.path,
55
+ res || []
56
+ );
57
+ });
58
+ case SDK.ServerAPI.API.GetLoaderFolderStatistics:
59
+ return this.loader.loadData("loader").then((res) => {
60
+ return Loader.getLoaderFolderStatistics(
61
+ body.folder,
62
+ res || []
63
+ );
64
+ });
65
+ case SDK.ServerAPI.API.GetLoaderFileFirstInput:
66
+ return this.loader.loadData("loader").then((res) => {
67
+ return Loader.getLoaderFileFirstInput(
68
+ body.file,
69
+ res || []
70
+ );
71
+ });
72
+ case SDK.ServerAPI.API.GetLoaderFileInputAndOutput:
73
+ return this.loader.loadData("loader").then((res) => {
74
+ return Loader.getLoaderFileFirstInput(
75
+ body.file,
76
+ res || []
77
+ );
78
+ });
79
+ case SDK.ServerAPI.API.GetResolverFileTree:
80
+ return this.loader.loadData("resolver").then((res) => {
81
+ return Resolver.getResolverFileTree(res || []);
82
+ });
83
+ case SDK.ServerAPI.API.GetResolverFileDetails:
84
+ return Promise.all([
85
+ this.loader.loadData("resolver"),
86
+ this.loader.loadData("moduleGraph.modules"),
87
+ this.loader.loadData("moduleCodeMap")
88
+ ]).then((res) => {
89
+ const resolverData = res[0];
90
+ const modules = res[1];
91
+ const moduleCodeMap = res[2];
92
+ return Resolver.getResolverFileDetails(
93
+ body.filepath,
94
+ resolverData || [],
95
+ modules || [],
96
+ moduleCodeMap || {}
97
+ );
98
+ });
99
+ case SDK.ServerAPI.API.GetPluginSummary:
100
+ return this.loader.loadData("plugin").then((res) => {
101
+ return Plugin.getPluginSummary(res || {});
102
+ });
103
+ case SDK.ServerAPI.API.GetPluginData:
104
+ return this.loader.loadData("plugin").then((res) => {
105
+ const { hooks, tapNames } = body;
106
+ return Plugin.getPluginData(res || {}, hooks, tapNames);
107
+ });
108
+ case SDK.ServerAPI.API.GetAssetsSummary:
109
+ return this.loader.loadData("chunkGraph").then((res) => {
110
+ const { withFileContent = true } = body;
111
+ const { assets = [], chunks = [] } = res || {};
112
+ return Graph.getAssetsSummary(assets, chunks, {
113
+ withFileContent
114
+ });
115
+ });
116
+ case SDK.ServerAPI.API.GetAssetDetails:
117
+ return Promise.all([
118
+ this.loader.loadData("chunkGraph"),
119
+ this.loader.loadData("moduleGraph")
120
+ ]).then((res) => {
121
+ const { assetPath } = body;
122
+ const { assets = [], chunks = [] } = res[0] || {};
123
+ const { modules = [] } = res[1] || {};
124
+ return Graph.getAssetDetails(assetPath, assets, chunks, modules);
125
+ });
126
+ case SDK.ServerAPI.API.GetChunksByModuleId:
127
+ return Promise.all([
128
+ this.loader.loadData("chunkGraph"),
129
+ this.loader.loadData("moduleGraph")
130
+ ]).then((res) => {
131
+ const { moduleId } = body;
132
+ const { chunks = [] } = res[0] || {};
133
+ const { modules = [] } = res[1] || {};
134
+ return Graph.getChunksByModuleId(moduleId, modules, chunks);
135
+ });
136
+ case SDK.ServerAPI.API.GetModuleDetails:
137
+ return Promise.all([
138
+ this.loader.loadData("chunkGraph"),
139
+ this.loader.loadData("moduleGraph")
140
+ ]).then((res) => {
141
+ const { moduleId } = body;
142
+ const { modules = [], dependencies = [] } = res[1] || {};
143
+ return Graph.getModuleDetails(moduleId, modules, dependencies);
144
+ });
145
+ case SDK.ServerAPI.API.GetModulesByModuleIds:
146
+ return this.loader.loadData("moduleGraph").then((res) => {
147
+ const { moduleIds } = body;
148
+ const { modules = [] } = res || {};
149
+ return Graph.getModuleIdsByModulesIds(moduleIds, modules);
150
+ });
151
+ case SDK.ServerAPI.API.GetEntryPoints:
152
+ return Promise.all([this.loader.loadData("chunkGraph")]).then((res) => {
153
+ const [chunkGraph] = res;
154
+ const { entrypoints = [] } = chunkGraph || {};
155
+ return Graph.getEntryPoints(entrypoints);
156
+ });
157
+ case SDK.ServerAPI.API.GetModuleCodeByModuleId:
158
+ return this.loader.loadData("moduleCodeMap").then((moduleCodeMap) => {
159
+ const { moduleId } = body;
160
+ if (moduleCodeMap) {
161
+ return moduleCodeMap[moduleId];
162
+ }
163
+ return { source: "", transformed: "", parsedSource: "" };
164
+ });
165
+ case SDK.ServerAPI.API.GetModuleCodeByModuleIds:
166
+ return this.loader.loadData("moduleCodeMap").then((moduleCodeMap) => {
167
+ const { moduleIds } = body;
168
+ const _moduleCodeData = {};
169
+ if (moduleCodeMap) {
170
+ moduleIds.forEach((id) => {
171
+ _moduleCodeData[id] = moduleCodeMap[id];
172
+ });
173
+ return _moduleCodeData;
174
+ }
175
+ return [];
176
+ });
177
+ case SDK.ServerAPI.API.GetAllModuleGraph:
178
+ return this.loader.loadData("moduleGraph").then((moduleGraph) => {
179
+ return moduleGraph?.modules;
180
+ });
181
+ case SDK.ServerAPI.API.GetAllChunkGraph:
182
+ return this.loader.loadData("chunkGraph").then((chunkGraph) => {
183
+ return chunkGraph?.chunks;
184
+ });
185
+ case SDK.ServerAPI.API.GetPackageRelationAlertDetails:
186
+ return Promise.all([
187
+ this.loader.loadData("moduleGraph"),
188
+ this.loader.loadData("errors"),
189
+ this.loader.loadData("root"),
190
+ this.loader.loadData("moduleCodeMap")
191
+ ]).then((res) => {
192
+ const { id, target } = body;
193
+ const [moduleGraph, errors = [], root = "", moduleCodeMap] = res;
194
+ const { modules = [], dependencies = [] } = moduleGraph || {};
195
+ const { packages = [] } = errors.find((e) => e.id === id) || {};
196
+ const { dependencies: pkgDependencies = [] } = packages.find(
197
+ (e) => e.target.name === target.name && e.target.root === target.root && e.target.version === target.version
198
+ ) || {};
199
+ return Alerts.getPackageRelationAlertDetails(
200
+ modules,
201
+ dependencies,
202
+ root,
203
+ pkgDependencies,
204
+ moduleCodeMap || {}
205
+ );
206
+ });
207
+ case SDK.ServerAPI.API.GetOverlayAlerts:
208
+ return this.loader.loadData("errors").then((res) => {
209
+ return (res || []).filter(
210
+ (e) => e.code === Rule.RuleMessageCodeEnumerated.Overlay
211
+ );
212
+ });
213
+ case SDK.ServerAPI.API.BundleDiffManifest:
214
+ return this.loader.loadManifest();
215
+ case SDK.ServerAPI.API.GetBundleDiffSummary:
216
+ return Promise.all([
217
+ this.loader.loadManifest(),
218
+ this.loader.loadData("root"),
219
+ this.loader.loadData("hash"),
220
+ this.loader.loadData("errors"),
221
+ this.loader.loadData("chunkGraph"),
222
+ this.loader.loadData("moduleGraph"),
223
+ this.loader.loadData("moduleCodeMap"),
224
+ this.loader.loadData("packageGraph"),
225
+ this.loader.loadData("configs")
226
+ ]).then(
227
+ ([
228
+ _manifest,
229
+ root = "",
230
+ hash = "",
231
+ errors = {},
232
+ chunkGraph = {},
233
+ moduleGraph = {},
234
+ moduleCodeMap = {},
235
+ packageGraph = {},
236
+ configs = []
237
+ ]) => {
238
+ let outputFilename = "";
239
+ if (typeof configs[0]?.config?.output?.chunkFilename === "string") {
240
+ outputFilename = configs[0]?.config.output.chunkFilename;
241
+ }
242
+ return {
243
+ root,
244
+ hash,
245
+ errors,
246
+ chunkGraph,
247
+ moduleGraph,
248
+ packageGraph,
249
+ outputFilename,
250
+ moduleCodeMap
251
+ };
252
+ }
253
+ );
254
+ case SDK.ServerAPI.API.GetTileReportHtml:
255
+ return this.loader.loadData("otherReports").then((otherReports) => {
256
+ return otherReports?.tileReportHtml;
257
+ });
258
+ default:
259
+ throw new Error(`API not implement: "${api}"`);
260
+ }
261
+ }
262
+ }
263
+ export {
264
+ APIDataLoader
265
+ };
@@ -0,0 +1,286 @@
1
+ import { Client, Constants } from "@rsdoctor/types";
2
+ import { getChunksByAsset } from "./chunk";
3
+ import { getModulesByAsset } from "./modules";
4
+ const EXT = "js|css|html";
5
+ const hashPattern = /[a-z|A-Z|0-9]{4,32}/;
6
+ const hashSeparatorPattern = /[-|.]/;
7
+ const fileExtensionPattern = /(?:\.[a-z|A-Z|0-9]{2,}){1,}/;
8
+ const filenamePattern = new RegExp(
9
+ `(.*)${hashSeparatorPattern.source}${hashPattern.source}(${fileExtensionPattern.source})$`
10
+ );
11
+ function formatAssetName(assetName, fileConfig) {
12
+ const splitFilesList = fileConfig?.split(".");
13
+ let outputFileTailName = "";
14
+ let unHashedFileName = assetName;
15
+ if (splitFilesList?.length && splitFilesList.length >= 3 && splitFilesList[splitFilesList.length - 2]?.indexOf("[") < 0 && EXT.indexOf(splitFilesList[splitFilesList.length - 1]) > -1) {
16
+ outputFileTailName = splitFilesList[splitFilesList.length - 2];
17
+ const _regPattern = /(.*)(\.[a-f0-9]{4,32})([^.]*.[^.]+){2,}/g;
18
+ unHashedFileName = assetName.replace(_regPattern, "$1");
19
+ return `${unHashedFileName}.${outputFileTailName}.${assetName.substring(
20
+ assetName.lastIndexOf(".") + 1
21
+ )}`;
22
+ }
23
+ return assetName.replace(filenamePattern, "$1$2");
24
+ }
25
+ function isAssetMatchExtension(asset, ext) {
26
+ return asset.path.slice(-ext.length) === ext;
27
+ }
28
+ function isAssetMatchExtensions(asset, exts) {
29
+ if (!exts.length)
30
+ return false;
31
+ return exts.some((ext) => isAssetMatchExtension(asset, ext));
32
+ }
33
+ function filterAssetsByExtensions(assets, exts) {
34
+ if (typeof exts === "string")
35
+ return assets.filter((e) => isAssetMatchExtension(e, exts));
36
+ if (Array.isArray(exts)) {
37
+ return assets.filter((e) => isAssetMatchExtensions(e, exts));
38
+ }
39
+ return [];
40
+ }
41
+ function filterAssets(assets, filterOrExtensions) {
42
+ if (filterOrExtensions) {
43
+ if (typeof filterOrExtensions === "function") {
44
+ assets = assets.filter(filterOrExtensions);
45
+ } else {
46
+ assets = filterAssetsByExtensions(assets, filterOrExtensions);
47
+ }
48
+ }
49
+ return assets;
50
+ }
51
+ function getAssetsSizeInfo(assets, chunks, options = {}) {
52
+ const { withFileContent = true, filterOrExtensions } = options;
53
+ assets = assets.filter(
54
+ (e) => !isAssetMatchExtensions(e, Constants.MapExtensions)
55
+ );
56
+ if (filterOrExtensions) {
57
+ assets = filterAssets(assets, filterOrExtensions);
58
+ }
59
+ if (assets.length) {
60
+ return {
61
+ count: assets.length,
62
+ size: assets.reduce((t, c) => t + c.size, 0),
63
+ files: assets.map((e) => ({
64
+ path: e.path,
65
+ size: e.size,
66
+ initial: isInitialAsset(e, chunks),
67
+ content: withFileContent ? e.content : void 0
68
+ }))
69
+ };
70
+ }
71
+ return {
72
+ count: 0,
73
+ size: 0,
74
+ files: []
75
+ };
76
+ }
77
+ function isInitialAsset(asset, chunks) {
78
+ const cks = getChunksByAsset(asset, chunks);
79
+ return cks.some((e) => Boolean(e.initial));
80
+ }
81
+ function getInitialAssetsSizeInfo(assets, chunks, options = {}) {
82
+ if (options.filterOrExtensions) {
83
+ assets = filterAssets(assets, options.filterOrExtensions);
84
+ }
85
+ return getAssetsSizeInfo(assets, chunks, {
86
+ ...options,
87
+ filterOrExtensions: (asset) => isInitialAsset(asset, chunks)
88
+ });
89
+ }
90
+ function getAssetsDiffResult(baseline, current) {
91
+ return {
92
+ all: {
93
+ total: diffAssetsByExtensions(baseline, current)
94
+ },
95
+ js: {
96
+ total: diffAssetsByExtensions(baseline, current, Constants.JSExtension),
97
+ initial: diffAssetsByExtensions(
98
+ baseline,
99
+ current,
100
+ Constants.JSExtension,
101
+ true
102
+ )
103
+ },
104
+ css: {
105
+ total: diffAssetsByExtensions(baseline, current, Constants.CSSExtension),
106
+ initial: diffAssetsByExtensions(
107
+ baseline,
108
+ current,
109
+ Constants.CSSExtension,
110
+ true
111
+ )
112
+ },
113
+ imgs: {
114
+ total: diffAssetsByExtensions(baseline, current, Constants.ImgExtensions)
115
+ },
116
+ html: {
117
+ total: diffAssetsByExtensions(baseline, current, Constants.HtmlExtension)
118
+ },
119
+ media: {
120
+ total: diffAssetsByExtensions(
121
+ baseline,
122
+ current,
123
+ Constants.MediaExtensions
124
+ )
125
+ },
126
+ fonts: {
127
+ total: diffAssetsByExtensions(
128
+ baseline,
129
+ current,
130
+ Constants.FontExtensions
131
+ )
132
+ },
133
+ others: {
134
+ total: diffAssetsByExtensions(
135
+ baseline,
136
+ current,
137
+ (asset) => !isAssetMatchExtensions(
138
+ asset,
139
+ [
140
+ Constants.JSExtension,
141
+ Constants.CSSExtension,
142
+ Constants.HtmlExtension
143
+ ].concat(
144
+ Constants.ImgExtensions,
145
+ Constants.MediaExtensions,
146
+ Constants.FontExtensions,
147
+ Constants.MapExtensions
148
+ )
149
+ )
150
+ )
151
+ }
152
+ };
153
+ }
154
+ function diffSize(bSize, cSize) {
155
+ const isEqual = bSize === cSize;
156
+ const percent = isEqual ? 0 : bSize === 0 ? 100 : Math.abs(cSize - bSize) / bSize * 100;
157
+ const state = isEqual ? Client.RsdoctorClientDiffState.Equal : bSize > cSize ? Client.RsdoctorClientDiffState.Down : Client.RsdoctorClientDiffState.Up;
158
+ return { percent, state };
159
+ }
160
+ function diffAssetsByExtensions(baseline, current, filterOrExtensions, isInitial = false) {
161
+ const { size: bSize, count: bCount } = isInitial ? getInitialAssetsSizeInfo(baseline.assets, baseline.chunks, {
162
+ filterOrExtensions
163
+ }) : getAssetsSizeInfo(baseline.assets, baseline.chunks, {
164
+ filterOrExtensions
165
+ });
166
+ let cSize;
167
+ let cCount;
168
+ if (baseline === current) {
169
+ cSize = bSize;
170
+ cCount = bCount;
171
+ } else {
172
+ const { size, count } = isInitial ? getInitialAssetsSizeInfo(current.assets, current.chunks, {
173
+ filterOrExtensions
174
+ }) : getAssetsSizeInfo(current.assets, current.chunks, {
175
+ filterOrExtensions
176
+ });
177
+ cSize = size;
178
+ cCount = count;
179
+ }
180
+ const { percent, state } = diffSize(bSize, cSize);
181
+ return {
182
+ size: {
183
+ baseline: bSize,
184
+ current: cSize
185
+ },
186
+ count: {
187
+ baseline: bCount,
188
+ current: cCount
189
+ },
190
+ percent,
191
+ state
192
+ };
193
+ }
194
+ function getAssetsSummary(assets, chunks, options = {}) {
195
+ const jsOpt = {
196
+ ...options,
197
+ filterOrExtensions: Constants.JSExtension
198
+ };
199
+ const cssOpt = {
200
+ ...options,
201
+ filterOrExtensions: Constants.CSSExtension
202
+ };
203
+ const imgOpt = {
204
+ ...options,
205
+ filterOrExtensions: Constants.ImgExtensions
206
+ };
207
+ const htmlOpt = {
208
+ ...options,
209
+ filterOrExtensions: Constants.HtmlExtension
210
+ };
211
+ const mediaOpt = {
212
+ ...options,
213
+ filterOrExtensions: Constants.MediaExtensions
214
+ };
215
+ const fontOpt = {
216
+ ...options,
217
+ filterOrExtensions: Constants.FontExtensions
218
+ };
219
+ const otherOpt = {
220
+ ...options,
221
+ filterOrExtensions: (asset) => !isAssetMatchExtensions(
222
+ asset,
223
+ [
224
+ Constants.JSExtension,
225
+ Constants.CSSExtension,
226
+ Constants.HtmlExtension
227
+ ].concat(
228
+ Constants.ImgExtensions,
229
+ Constants.MediaExtensions,
230
+ Constants.FontExtensions,
231
+ Constants.MapExtensions
232
+ )
233
+ )
234
+ };
235
+ return {
236
+ all: {
237
+ total: getAssetsSizeInfo(assets, chunks, options)
238
+ },
239
+ js: {
240
+ total: getAssetsSizeInfo(assets, chunks, jsOpt),
241
+ initial: getInitialAssetsSizeInfo(assets, chunks, jsOpt)
242
+ },
243
+ css: {
244
+ total: getAssetsSizeInfo(assets, chunks, cssOpt),
245
+ initial: getInitialAssetsSizeInfo(assets, chunks, cssOpt)
246
+ },
247
+ imgs: {
248
+ total: getAssetsSizeInfo(assets, chunks, imgOpt)
249
+ },
250
+ html: {
251
+ total: getAssetsSizeInfo(assets, chunks, htmlOpt)
252
+ },
253
+ media: {
254
+ total: getAssetsSizeInfo(assets, chunks, mediaOpt)
255
+ },
256
+ fonts: {
257
+ total: getAssetsSizeInfo(assets, chunks, fontOpt)
258
+ },
259
+ others: {
260
+ total: getAssetsSizeInfo(assets, chunks, otherOpt)
261
+ }
262
+ };
263
+ }
264
+ function getAssetDetails(assetPath, assets, chunks, modules) {
265
+ const asset = assets.find((e) => e.path === assetPath);
266
+ return {
267
+ asset,
268
+ chunks: getChunksByAsset(asset, chunks),
269
+ modules: getModulesByAsset(asset, chunks, modules)
270
+ };
271
+ }
272
+ export {
273
+ diffAssetsByExtensions,
274
+ diffSize,
275
+ filterAssets,
276
+ filterAssetsByExtensions,
277
+ formatAssetName,
278
+ getAssetDetails,
279
+ getAssetsDiffResult,
280
+ getAssetsSizeInfo,
281
+ getAssetsSummary,
282
+ getInitialAssetsSizeInfo,
283
+ isAssetMatchExtension,
284
+ isAssetMatchExtensions,
285
+ isInitialAsset
286
+ };
@@ -0,0 +1,38 @@
1
+ function getChunkIdsByAsset(asset) {
2
+ if (asset.chunks) {
3
+ return asset.chunks;
4
+ }
5
+ return [];
6
+ }
7
+ function getChunksByModule(module, chunks) {
8
+ if (module.chunks.length) {
9
+ return getChunksByChunkIds(module.chunks, chunks);
10
+ }
11
+ return [];
12
+ }
13
+ function getChunkByChunkId(chunkId, chunks) {
14
+ return chunks.find((e) => e.id === chunkId);
15
+ }
16
+ function getChunksByChunkIds(chunkIds, chunks) {
17
+ if (chunkIds.length) {
18
+ return chunkIds.map((id) => getChunkByChunkId(id, chunks)).filter(Boolean);
19
+ }
20
+ return [];
21
+ }
22
+ function getChunksByAsset(asset, chunks) {
23
+ return getChunksByChunkIds(getChunkIdsByAsset(asset), chunks);
24
+ }
25
+ function getChunksByModuleId(id, modules, chunks) {
26
+ const mod = modules.find((e) => e.id === id);
27
+ if (!mod)
28
+ return [];
29
+ return getChunksByModule(mod, chunks);
30
+ }
31
+ export {
32
+ getChunkByChunkId,
33
+ getChunkIdsByAsset,
34
+ getChunksByAsset,
35
+ getChunksByChunkIds,
36
+ getChunksByModule,
37
+ getChunksByModuleId
38
+ };
@@ -0,0 +1,14 @@
1
+ function getDependencyByPackageData(dep, dependencies) {
2
+ return dependencies.find((item) => item.id === dep.dependencyId);
3
+ }
4
+ function getDependenciesByModule(module, dependencies) {
5
+ return module.dependencies.map((id) => dependencies.find((dep) => dep.id === id)).filter(Boolean);
6
+ }
7
+ function getDependencyByResolvedRequest(resolvedRequest, dependencies) {
8
+ return dependencies.find((e) => e.resolvedRequest === resolvedRequest);
9
+ }
10
+ export {
11
+ getDependenciesByModule,
12
+ getDependencyByPackageData,
13
+ getDependencyByResolvedRequest
14
+ };
@@ -0,0 +1,6 @@
1
+ function getEntryPoints(entrypoints) {
2
+ return entrypoints;
3
+ }
4
+ export {
5
+ getEntryPoints
6
+ };
@@ -0,0 +1,5 @@
1
+ export * from "./assets";
2
+ export * from "./chunk";
3
+ export * from "./modules";
4
+ export * from "./dependency";
5
+ export * from "./entrypoints";
@@ -0,0 +1,70 @@
1
+ import { getChunksByChunkIds, getChunkIdsByAsset } from "./chunk";
2
+ import {
3
+ getDependenciesByModule,
4
+ getDependencyByPackageData
5
+ } from "./dependency";
6
+ function getModulesByAsset(asset, chunks, modules) {
7
+ const ids = getChunkIdsByAsset(asset);
8
+ const cks = getChunksByChunkIds(ids, chunks);
9
+ const res = getModulesByChunks(cks, modules);
10
+ return res;
11
+ }
12
+ function getModuleIdsByChunk(chunk) {
13
+ const { modules = [] } = chunk;
14
+ return modules;
15
+ }
16
+ function getModuleIdsByModulesIds(moduleIds, modules) {
17
+ return moduleIds.map((id) => modules.find((m) => m.id === id)).filter(Boolean);
18
+ }
19
+ function getModulesByChunk(chunk, modules) {
20
+ const ids = getModuleIdsByChunk(chunk);
21
+ return ids.map((id) => modules.find((e) => e.id === id)).filter(Boolean);
22
+ }
23
+ function getModulesByChunks(chunks, modules) {
24
+ const res = [];
25
+ chunks.forEach((chunk) => {
26
+ getModulesByChunk(chunk, modules).forEach((md) => {
27
+ if (!res.filter((_m) => _m.id === md.id).length)
28
+ res.push(md);
29
+ });
30
+ });
31
+ return res;
32
+ }
33
+ function getModuleByDependency(dep, modules) {
34
+ return modules.find((item) => item.id === dep.module);
35
+ }
36
+ function filterModulesAndDependenciesByPackageDeps(deps, dependencies, modules) {
37
+ const _dependencies = [];
38
+ const _modules = [];
39
+ for (let i = 0; i < deps.length; i++) {
40
+ const dep = getDependencyByPackageData(deps[i], dependencies);
41
+ if (dep) {
42
+ _dependencies.push(dep);
43
+ const module = getModuleByDependency(dep, modules);
44
+ if (module) {
45
+ _modules.push(module);
46
+ }
47
+ }
48
+ }
49
+ return {
50
+ dependencies: _dependencies,
51
+ modules: _modules
52
+ };
53
+ }
54
+ function getModuleDetails(moduleId, modules, dependencies) {
55
+ const module = modules.find((e) => e.id === moduleId);
56
+ return {
57
+ module,
58
+ dependencies: getDependenciesByModule(module, dependencies)
59
+ };
60
+ }
61
+ export {
62
+ filterModulesAndDependenciesByPackageDeps,
63
+ getModuleByDependency,
64
+ getModuleDetails,
65
+ getModuleIdsByChunk,
66
+ getModuleIdsByModulesIds,
67
+ getModulesByAsset,
68
+ getModulesByChunk,
69
+ getModulesByChunks
70
+ };