@bundle-stats/utils 4.3.0-beta.3 → 4.3.0-rc.0
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.
- package/lib/config/metrics.js.map +1 -1
- package/lib/i18n.js +3 -0
- package/lib/i18n.js.map +1 -1
- package/lib/utils/component-links.js +30 -3
- package/lib/utils/component-links.js.map +1 -1
- package/lib/utils/index.js +1 -0
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/insights.js +54 -0
- package/lib/utils/insights.js.map +1 -0
- package/lib/webpack/extract/modules-packages-duplicate.js +21 -9
- package/lib/webpack/extract/modules-packages-duplicate.js.map +1 -1
- package/lib/webpack/extract/modules.js +45 -20
- package/lib/webpack/extract/modules.js.map +1 -1
- package/lib/webpack/metrics.js +5 -5
- package/lib/webpack/metrics.js.map +1 -1
- package/lib-esm/config/metrics.js +1 -1
- package/lib-esm/config/metrics.js.map +1 -1
- package/lib-esm/i18n.js +3 -0
- package/lib-esm/i18n.js.map +1 -1
- package/lib-esm/utils/component-links.js +28 -2
- package/lib-esm/utils/component-links.js.map +1 -1
- package/lib-esm/utils/index.js +1 -0
- package/lib-esm/utils/index.js.map +1 -1
- package/lib-esm/utils/insights.js +47 -0
- package/lib-esm/utils/insights.js.map +1 -0
- package/lib-esm/webpack/extract/modules-packages-duplicate.js +21 -9
- package/lib-esm/webpack/extract/modules-packages-duplicate.js.map +1 -1
- package/lib-esm/webpack/extract/modules.js +45 -20
- package/lib-esm/webpack/extract/modules.js.map +1 -1
- package/lib-esm/webpack/metrics.js +5 -5
- package/lib-esm/webpack/metrics.js.map +1 -1
- package/package.json +13 -13
- package/src/config/metrics.js +2 -6
- package/src/constants.ts +5 -0
- package/src/i18n.js +3 -0
- package/src/utils/component-links.ts +33 -2
- package/src/utils/index.js +1 -0
- package/src/utils/insights.ts +82 -0
- package/src/webpack/extract/modules-packages-duplicate.ts +31 -16
- package/src/webpack/extract/modules.ts +61 -31
- package/src/webpack/metrics.js +5 -5
- package/src/webpack/types.ts +2 -2
- package/types/browsertime/metrics.d.ts +1 -1
- package/types/config/metrics.d.ts +1 -30
- package/types/constants.d.ts +4 -0
- package/types/i18n.d.ts +3 -0
- package/types/lighthouse/metrics.d.ts +4 -4
- package/types/utils/component-links.d.ts +3 -1
- package/types/utils/index.d.ts +1 -0
- package/types/utils/insights.d.ts +9 -0
- package/types/webpack/constants.d.ts +1 -1
- package/types/webpack/extract/assets-size-total-insight.d.ts +1 -1
- package/types/webpack/extract/modules-packages-duplicate.d.ts +3 -3
- package/types/webpack/metrics.d.ts +3 -3
- package/types/webpack/types.d.ts +2 -2
- package/tsconfig.lib.json +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.js"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.js"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import isEmpty from 'lodash/isEmpty';
|
|
2
|
+
import { InsightType } from '../constants';
|
|
3
|
+
import { BUNDLE_PACKAGES_DUPLICATE, BUNDLE_PACKAGES_CHANGED, BUNDLE_PACKAGES_DUPLICATE_CHANGED, } from './component-links';
|
|
4
|
+
export const getInsightList = (insights) => {
|
|
5
|
+
const { duplicatePackages, newPackages } = insights;
|
|
6
|
+
const insightsByLevel = {
|
|
7
|
+
[InsightType.ERROR]: [],
|
|
8
|
+
[InsightType.WARNING]: [],
|
|
9
|
+
[InsightType.INFO]: [],
|
|
10
|
+
};
|
|
11
|
+
if (duplicatePackages) {
|
|
12
|
+
insightsByLevel[duplicatePackages.type].push({
|
|
13
|
+
name: 'duplicatePackages',
|
|
14
|
+
insight: duplicatePackages,
|
|
15
|
+
link: duplicatePackages.type === InsightType.WARNING
|
|
16
|
+
? BUNDLE_PACKAGES_DUPLICATE
|
|
17
|
+
: BUNDLE_PACKAGES_DUPLICATE_CHANGED,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
if (newPackages) {
|
|
21
|
+
insightsByLevel[newPackages.type].push({
|
|
22
|
+
name: 'newPackages',
|
|
23
|
+
insight: newPackages,
|
|
24
|
+
link: BUNDLE_PACKAGES_CHANGED,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return [
|
|
28
|
+
...(insightsByLevel[InsightType.ERROR] || []),
|
|
29
|
+
...(insightsByLevel[InsightType.WARNING] || []),
|
|
30
|
+
...(insightsByLevel[InsightType.INFO] || []),
|
|
31
|
+
];
|
|
32
|
+
};
|
|
33
|
+
export const getChangedInsights = (normalizedInsights) => {
|
|
34
|
+
var _a;
|
|
35
|
+
const res = {};
|
|
36
|
+
if (((_a = normalizedInsights.duplicatePackages) === null || _a === void 0 ? void 0 : _a.type) === InsightType.ERROR) {
|
|
37
|
+
res.duplicatePackages = normalizedInsights.duplicatePackages;
|
|
38
|
+
}
|
|
39
|
+
if (normalizedInsights.newPackages) {
|
|
40
|
+
res.newPackages = normalizedInsights.newPackages;
|
|
41
|
+
}
|
|
42
|
+
if (isEmpty(res)) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return res;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=insights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insights.js","sourceRoot":"","sources":["../../src/utils/insights.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,WAAW,EAA+B,MAAM,cAAc,CAAC;AACxE,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,iCAAiC,GAClC,MAAM,mBAAmB,CAAC;AAoB3B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAyB,EAA0B,EAAE;IAClF,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;IAEpD,MAAM,eAAe,GAAgD;QACnE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE;QACvB,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;QACzB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE;KACvB,CAAC;IAEF,IAAI,iBAAiB,EAAE;QACrB,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAC3C,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,iBAAiB;YAC1B,IAAI,EACF,iBAAiB,CAAC,IAAI,KAAK,WAAW,CAAC,OAAO;gBAC5C,CAAC,CAAC,yBAAyB;gBAC3B,CAAC,CAAC,iCAAiC;SACxC,CAAC,CAAC;KACJ;IAED,IAAI,WAAW,EAAE;QACf,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YACrC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,uBAAuB;SAC9B,CAAC,CAAC;KACJ;IAED,OAAO;QACL,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7C,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/C,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KAC7C,CAAC;AACJ,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,kBAAmC,EAA0B,EAAE;;IAChG,MAAM,GAAG,GAAoB,EAAE,CAAC;IAEhC,IAAI,CAAA,MAAA,kBAAkB,CAAC,iBAAiB,0CAAE,IAAI,MAAK,WAAW,CAAC,KAAK,EAAE;QACpE,GAAG,CAAC,iBAAiB,GAAG,kBAAkB,CAAC,iBAAiB,CAAC;KAC9D;IAED,IAAI,kBAAkB,CAAC,WAAW,EAAE;QAClC,GAAG,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;KAClD;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QAChB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import isEmpty from 'lodash/isEmpty';
|
|
1
2
|
import map from 'lodash/map';
|
|
2
3
|
import orderBy from 'lodash/orderBy';
|
|
3
4
|
import sum from 'lodash/sum';
|
|
@@ -38,14 +39,14 @@ export const getDuplicatePackagesInsight = (duplicatePackagesMap, baselineDuplic
|
|
|
38
39
|
const duplicateInstancesCount = duplicateInstances.length;
|
|
39
40
|
const newDuplicateInstancesCount = newDuplicateInstances.length;
|
|
40
41
|
const removedDuplicateInstancesCount = removedDuplicateInstances.length;
|
|
41
|
-
let text;
|
|
42
|
-
let insightType;
|
|
42
|
+
let text = '';
|
|
43
|
+
let insightType = null;
|
|
43
44
|
if (newDuplicateInstancesCount > 0 && removedDuplicateInstancesCount > 0) {
|
|
44
45
|
const item = newDuplicateInstancesCount > 1 || removedDuplicateInstancesCount > 1 ? 'packages' : 'package';
|
|
45
46
|
text = `Bundle introduced ${newDuplicateInstancesCount} and removed ${removedDuplicateInstancesCount} duplicate ${item}`;
|
|
46
47
|
insightType = InsightType.ERROR;
|
|
47
48
|
}
|
|
48
|
-
else if (newDuplicateInstancesCount > 0 && baselineDuplicatePackagesMap) {
|
|
49
|
+
else if (newDuplicateInstancesCount > 0 && !isEmpty(baselineDuplicatePackagesMap)) {
|
|
49
50
|
const item = newDuplicateInstancesCount > 1 ? 'packages' : 'package';
|
|
50
51
|
text = `Bundle introduced ${newDuplicateInstancesCount} duplicate ${item}`;
|
|
51
52
|
insightType = InsightType.ERROR;
|
|
@@ -55,6 +56,12 @@ export const getDuplicatePackagesInsight = (duplicatePackagesMap, baselineDuplic
|
|
|
55
56
|
text = `Bundle contains ${newDuplicateInstancesCount} duplicate ${item}`;
|
|
56
57
|
insightType = InsightType.WARNING;
|
|
57
58
|
}
|
|
59
|
+
else if (removedDuplicateInstancesCount > 0 && duplicateInstancesCount > 0) {
|
|
60
|
+
const itemRemoved = removedDuplicateInstancesCount > 1 ? 'packages' : 'package';
|
|
61
|
+
const itemRemaining = duplicateInstancesCount > 1 ? 'packages' : 'package';
|
|
62
|
+
text = `Bundle removed ${removedDuplicateInstancesCount} duplicate ${itemRemoved}, ${duplicateInstancesCount} duplicate ${itemRemaining} remaining`;
|
|
63
|
+
insightType = InsightType.WARNING;
|
|
64
|
+
}
|
|
58
65
|
else if (removedDuplicateInstancesCount > 0) {
|
|
59
66
|
const item = removedDuplicateInstancesCount > 1 ? 'packages' : 'package';
|
|
60
67
|
text = `Bundle removed ${removedDuplicateInstancesCount} duplicate ${item}`;
|
|
@@ -68,8 +75,9 @@ export const getDuplicatePackagesInsight = (duplicatePackagesMap, baselineDuplic
|
|
|
68
75
|
insightType = InsightType.WARNING;
|
|
69
76
|
}
|
|
70
77
|
else {
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
}
|
|
79
|
+
if (!text || !insightType) {
|
|
80
|
+
return null;
|
|
73
81
|
}
|
|
74
82
|
return {
|
|
75
83
|
type: insightType,
|
|
@@ -110,11 +118,14 @@ export const extractModulesPackagesDuplicate = (_, currentExtractedData, baselin
|
|
|
110
118
|
const baselineDuplicatePackages = ((_e = (_d = (_c = (_b = baselineJob === null || baselineJob === void 0 ? void 0 : baselineJob.insights) === null || _b === void 0 ? void 0 : _b.webpack) === null || _c === void 0 ? void 0 : _c.duplicatePackagesV3) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.packages) ||
|
|
111
119
|
((_h = (_g = (_f = baselineJob === null || baselineJob === void 0 ? void 0 : baselineJob.insights) === null || _f === void 0 ? void 0 : _f.webpack) === null || _g === void 0 ? void 0 : _g.duplicatePackages) === null || _h === void 0 ? void 0 : _h.data) ||
|
|
112
120
|
{};
|
|
121
|
+
const noDuplicatesDuplicatePackagesV3 = getDuplicatePackagesInsight({}, baselineDuplicatePackages);
|
|
113
122
|
if (!count) {
|
|
114
123
|
return {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
124
|
+
...(noDuplicatesDuplicatePackagesV3 && {
|
|
125
|
+
insights: {
|
|
126
|
+
duplicatePackagesV3: noDuplicatesDuplicatePackagesV3,
|
|
127
|
+
},
|
|
128
|
+
}),
|
|
118
129
|
metrics: {
|
|
119
130
|
duplicatePackagesCount: {
|
|
120
131
|
value: count,
|
|
@@ -136,13 +147,14 @@ export const extractModulesPackagesDuplicate = (_, currentExtractedData, baselin
|
|
|
136
147
|
}
|
|
137
148
|
duplicatePackagesData[packageName] = packageData.children.map(({ id }) => id);
|
|
138
149
|
});
|
|
150
|
+
const duplicatePackagesV3 = getDuplicatePackagesInsight(duplicatePackagesData, baselineDuplicatePackages);
|
|
139
151
|
return {
|
|
140
152
|
insights: {
|
|
141
153
|
duplicatePackages: {
|
|
142
154
|
type: InsightType.WARNING,
|
|
143
155
|
data: duplicatePackagesData,
|
|
144
156
|
},
|
|
145
|
-
duplicatePackagesV3
|
|
157
|
+
...(duplicatePackagesV3 && { duplicatePackagesV3 }),
|
|
146
158
|
},
|
|
147
159
|
metrics: {
|
|
148
160
|
duplicatePackagesCount: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules-packages-duplicate.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages-duplicate.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,YAAY,CAAC;AAC7B,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,GAAG,MAAM,YAAY,CAAC;AAE7B,OAAO,EACL,WAAW,GAOZ,MAAM,iBAAiB,CAAC;AAwBzB,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,oBAAmD,EACnD,4BAA4D,
|
|
1
|
+
{"version":3,"file":"modules-packages-duplicate.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages-duplicate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import round from 'lodash/round';
|
|
2
|
+
import union from 'lodash/union';
|
|
2
3
|
import { getModuleName, normalizeChunkId } from '../utils';
|
|
3
4
|
export const extractModules = (webpackStats) => {
|
|
4
5
|
const modulesSource = webpackStats === null || webpackStats === void 0 ? void 0 : webpackStats.modules;
|
|
@@ -12,40 +13,64 @@ export const extractModules = (webpackStats) => {
|
|
|
12
13
|
},
|
|
13
14
|
};
|
|
14
15
|
}
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return
|
|
16
|
+
const modulesByName = new Map();
|
|
17
|
+
modulesSource.forEach((rootModule) => {
|
|
18
|
+
if (!rootModule.chunks || rootModule.chunks.length === 0) {
|
|
19
|
+
return;
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
if (rootModule.modules) {
|
|
22
|
+
rootModule.modules.forEach((concatenatedModule) => {
|
|
23
|
+
const concatenatedModuleName = getModuleName(concatenatedModule.name);
|
|
24
|
+
const existingModule = modulesByName.get(concatenatedModuleName);
|
|
25
|
+
if (existingModule) {
|
|
26
|
+
modulesByName.set(concatenatedModuleName, {
|
|
27
|
+
...existingModule,
|
|
28
|
+
chunks: union(existingModule.chunks, rootModule.chunks),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
modulesByName.set(concatenatedModuleName, {
|
|
33
|
+
...concatenatedModule,
|
|
34
|
+
chunks: rootModule.chunks,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const normalizedName = getModuleName(rootModule.name);
|
|
41
|
+
const savedRootModule = modulesByName.get(normalizedName);
|
|
42
|
+
if (savedRootModule) {
|
|
43
|
+
modulesByName.set(normalizedName, {
|
|
44
|
+
...savedRootModule,
|
|
45
|
+
chunks: union(savedRootModule.chunks, rootModule.chunks),
|
|
46
|
+
size: rootModule.size,
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
modulesByName.set(normalizedName, rootModule);
|
|
51
|
+
});
|
|
52
|
+
const modules = {};
|
|
26
53
|
let moduleCount = 0;
|
|
27
54
|
let totalCodeSize = 0;
|
|
28
55
|
let duplicateCodeSize = 0;
|
|
29
56
|
let duplicateModulesCount = 0;
|
|
30
|
-
|
|
57
|
+
modulesByName.forEach((moduleEntry, normalizedName) => {
|
|
31
58
|
const { name, size = 0, chunks } = moduleEntry;
|
|
32
|
-
const normalizedName = getModuleName(name);
|
|
33
|
-
if (!chunks || (chunks === null || chunks === void 0 ? void 0 : chunks.length) === 0) {
|
|
34
|
-
return agg;
|
|
35
|
-
}
|
|
36
59
|
const instances = chunks.length;
|
|
37
60
|
const duplicateInstances = instances - 1;
|
|
61
|
+
const duplicated = duplicateInstances > 0;
|
|
38
62
|
moduleCount += instances;
|
|
39
|
-
duplicateModulesCount += duplicateInstances;
|
|
40
|
-
duplicateCodeSize += duplicateInstances * size;
|
|
41
63
|
totalCodeSize += instances * size;
|
|
42
|
-
|
|
64
|
+
if (duplicated) {
|
|
65
|
+
duplicateModulesCount += duplicateInstances;
|
|
66
|
+
duplicateCodeSize += duplicateInstances * size;
|
|
67
|
+
}
|
|
68
|
+
modules[normalizedName] = {
|
|
43
69
|
name,
|
|
44
70
|
value: size,
|
|
45
71
|
chunkIds: chunks.map(normalizeChunkId),
|
|
46
|
-
duplicated
|
|
72
|
+
...(duplicated && { duplicated }),
|
|
47
73
|
};
|
|
48
|
-
return agg;
|
|
49
74
|
}, {});
|
|
50
75
|
const duplicateCode = totalCodeSize ? round((duplicateCodeSize / totalCodeSize) * 100, 2) : 0;
|
|
51
76
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAC;AAIjC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAK3D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,YAAmC,EAAkB,EAAE;IACpF,MAAM,aAAa,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,CAAC;IAE5C,IAAI,CAAC,aAAa,EAAE;QAClB,OAAO;YACL,OAAO,EAAE;gBACP,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;gBAC3B,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;gBACnC,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;aAC1B;SACF,CAAC;KACH;IAGD,MAAM,
|
|
1
|
+
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { Metric } from './types';
|
|
|
4
4
|
export const metrics = {
|
|
5
5
|
[Metric.BUNDLE_SIZE]: {
|
|
6
6
|
label: 'Bundle Size',
|
|
7
|
-
description: 'The total size of the assets
|
|
7
|
+
description: 'The total size of the assets processed by the bundler',
|
|
8
8
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
9
9
|
type: METRIC_TYPE_FILE_SIZE,
|
|
10
10
|
},
|
|
@@ -43,14 +43,14 @@ export const metrics = {
|
|
|
43
43
|
},
|
|
44
44
|
[Metric.MODULE_COUNT]: {
|
|
45
45
|
label: 'Modules',
|
|
46
|
-
description: 'The total number of
|
|
46
|
+
description: 'The total number of bundled modules',
|
|
47
47
|
url: 'https://relative-ci.com/documentation/metrics-and-data#modules-1',
|
|
48
48
|
type: METRIC_TYPE_NUMERIC,
|
|
49
49
|
biggerIsBetter: false,
|
|
50
50
|
},
|
|
51
51
|
[Metric.DUPLICATE_MODULES_COUNT]: {
|
|
52
52
|
label: 'Duplicate Modules',
|
|
53
|
-
description: 'The total number of
|
|
53
|
+
description: 'The total number of module instances bundled into multiple chunks',
|
|
54
54
|
url: 'https://relative-ci.com/documentation/metrics-and-data#modules-1',
|
|
55
55
|
type: METRIC_TYPE_NUMERIC,
|
|
56
56
|
biggerIsBetter: false,
|
|
@@ -64,14 +64,14 @@ export const metrics = {
|
|
|
64
64
|
},
|
|
65
65
|
[Metric.PACKAGE_COUNT]: {
|
|
66
66
|
label: 'Packages',
|
|
67
|
-
description: 'The total number of
|
|
67
|
+
description: 'The total number of bundled packages',
|
|
68
68
|
url: 'https://relative-ci.com/documentation/metrics-and-data#packages',
|
|
69
69
|
type: METRIC_TYPE_NUMERIC,
|
|
70
70
|
biggerIsBetter: false,
|
|
71
71
|
},
|
|
72
72
|
[Metric.DUPLICATE_PACKAGES_COUNT]: {
|
|
73
73
|
label: 'Duplicate Packages',
|
|
74
|
-
description: 'The total number of duplicate
|
|
74
|
+
description: 'The total number of bundled duplicate package instances',
|
|
75
75
|
url: 'https://relative-ci.com/documentation/metrics-and-data#packages',
|
|
76
76
|
type: METRIC_TYPE_NUMERIC,
|
|
77
77
|
biggerIsBetter: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/webpack/metrics.js"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;QACpB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/webpack/metrics.js"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;QACpB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,uDAAuD;QACpE,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,qBAAqB;KAC5B;IACD,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE;QACxB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,6CAA6C;QAC1D,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,qBAAqB;KAC5B;IACD,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;QACzB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,sCAAsC;QACnD,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,qBAAqB;KAC5B;IACD,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE;QAC3B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,+EAA+E;QAC5F,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,sBAAsB;QAC5B,cAAc,EAAE,KAAK;KACtB;IACD,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;QACpB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,4BAA4B;QACzC,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;QACpB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,wBAAwB;QACrC,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;QACrB,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,qCAAqC;QAClD,GAAG,EAAE,kEAAkE;QACvE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAAE;QAChC,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,mEAAmE;QAChF,GAAG,EAAE,kEAAkE;QACvE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;QACvB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,0EAA0E;QACvF,GAAG,EAAE,kEAAkE;QACvE,IAAI,EAAE,sBAAsB;QAC5B,cAAc,EAAE,KAAK;KACtB;IACD,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;QACtB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,sCAAsC;QACnD,GAAG,EAAE,iEAAiE;QACtE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,CAAC,MAAM,CAAC,wBAAwB,CAAC,EAAE;QACjC,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,yDAAyD;QACtE,GAAG,EAAE,iEAAiE;QACtE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,KAAK,EAAE;QACL,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;YACtB,KAAK,EAAE,gBAAgB,CAAC,EAAE;YAC1B,IAAI,EAAE,qBAAqB;SAC5B;QACD,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;YACvB,KAAK,EAAE,gBAAgB,CAAC,GAAG;YAC3B,IAAI,EAAE,qBAAqB;SAC5B;QACD,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;YACvB,KAAK,EAAE,gBAAgB,CAAC,GAAG;YAC3B,IAAI,EAAE,qBAAqB;SAC5B;QACD,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;YACzB,KAAK,EAAE,gBAAgB,CAAC,KAAK;YAC7B,IAAI,EAAE,qBAAqB;SAC5B;QACD,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE;YACxB,KAAK,EAAE,gBAAgB,CAAC,IAAI;YAC5B,IAAI,EAAE,qBAAqB;SAC5B;QACD,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE;YACxB,KAAK,EAAE,gBAAgB,CAAC,IAAI;YAC5B,IAAI,EAAE,qBAAqB;SAC5B;QACD,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;YACzB,KAAK,EAAE,gBAAgB,CAAC,KAAK;YAC7B,IAAI,EAAE,qBAAqB;SAC5B;KACF;CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bundle-stats/utils",
|
|
3
|
-
"version": "4.3.0-
|
|
3
|
+
"version": "4.3.0-rc.0",
|
|
4
4
|
"description": "BundleStats utils",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib-esm/index.js",
|
|
@@ -35,28 +35,28 @@
|
|
|
35
35
|
},
|
|
36
36
|
"homepage": "https://github.com/relative-ci/bundle-stats/blob/master/packages/utils#readme",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@bundle-stats/plugin-webpack-filter": "^4.3.0-
|
|
39
|
-
"@bundle-stats/plugin-webpack-validate": "^4.3.0-
|
|
38
|
+
"@bundle-stats/plugin-webpack-filter": "^4.3.0-rc.0",
|
|
39
|
+
"@bundle-stats/plugin-webpack-validate": "^4.3.0-rc.0",
|
|
40
40
|
"query-string": "7.1.3",
|
|
41
41
|
"serialize-query-params": "2.0.2",
|
|
42
|
-
"use-query-params": "2.2.
|
|
42
|
+
"use-query-params": "2.2.1"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@types/jest": "29.
|
|
46
|
-
"@types/lodash": "4.14.
|
|
47
|
-
"core-js": "3.
|
|
48
|
-
"jest": "29.
|
|
49
|
-
"jest-cli": "29.
|
|
45
|
+
"@types/jest": "29.5.0",
|
|
46
|
+
"@types/lodash": "4.14.192",
|
|
47
|
+
"core-js": "3.30.0",
|
|
48
|
+
"jest": "29.5.0",
|
|
49
|
+
"jest-cli": "29.5.0",
|
|
50
50
|
"jest-date-mock": "1.0.8",
|
|
51
51
|
"lodash": "4.17.21",
|
|
52
52
|
"regenerator-runtime": "0.13.11",
|
|
53
|
-
"rimraf": "4.1
|
|
54
|
-
"ts-jest": "29.0
|
|
55
|
-
"typescript": "
|
|
53
|
+
"rimraf": "4.4.1",
|
|
54
|
+
"ts-jest": "29.1.0",
|
|
55
|
+
"typescript": "5.0.3"
|
|
56
56
|
},
|
|
57
57
|
"peerDependencies": {
|
|
58
58
|
"core-js": "^3.0.0",
|
|
59
59
|
"lodash": "^4.0.0"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "c46d2890ca972917edea0c6db51cab92303e8e27"
|
|
62
62
|
}
|
package/src/config/metrics.js
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
formatNumber,
|
|
3
|
-
formatDuration,
|
|
4
|
-
formatFileSize,
|
|
5
|
-
formatPercentage,
|
|
6
|
-
} from '../utils/format';
|
|
1
|
+
import { formatNumber, formatDuration, formatFileSize, formatPercentage } from '../utils/format';
|
|
7
2
|
|
|
8
3
|
export const METRIC_TYPE_FILE_SIZE = 'METRIC_TYPE_FILE_SIZE';
|
|
9
4
|
export const METRIC_TYPE_DURATION = 'METRIC_TYPE_DURATION';
|
|
@@ -11,6 +6,7 @@ export const METRIC_TYPE_NUMERIC = 'METRIC_TYPE_NUMERIC';
|
|
|
11
6
|
export const METRIC_TYPE_SCORE = 'METRIC_TYPE_SCORE';
|
|
12
7
|
export const METRIC_TYPE_PERCENTAGE = 'METRIC_TYPE_PERCENTAGE';
|
|
13
8
|
|
|
9
|
+
/** @type {Record<string, import('../constants').MetricType>} */
|
|
14
10
|
export const METRIC_TYPES = {
|
|
15
11
|
[METRIC_TYPE_NUMERIC]: {
|
|
16
12
|
biggerIsBetter: false,
|
package/src/constants.ts
CHANGED
|
@@ -101,6 +101,11 @@ export interface JobInsights {
|
|
|
101
101
|
};
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
export interface JobInsightsInfo {
|
|
105
|
+
duplicatePackages?: JobInsights['webpack']['duplicatePackagesV3'];
|
|
106
|
+
newPackages?: JobInsights['webpack']['newPackages'];
|
|
107
|
+
}
|
|
108
|
+
|
|
104
109
|
export type JobMetricsSource = Record<string, MetricRun | Record<string, MetricRun>>;
|
|
105
110
|
export type JobMetrics = JobSection<JobMetricsSource>;
|
|
106
111
|
|
package/src/i18n.js
CHANGED
|
@@ -9,7 +9,10 @@ export default {
|
|
|
9
9
|
COMPONENT_LINK_MODULES_DUPLICATE: 'View duplicate modules',
|
|
10
10
|
COMPONENT_LINK_CHUNK_MODULES: 'View chunk modules',
|
|
11
11
|
COMPONENT_LINK_PACKAGES_COUNT: 'View all packages',
|
|
12
|
+
COMPONENT_LINK_PACKAGES_CHANGED: 'View all changed packages',
|
|
12
13
|
COMPONENT_LINK_PACKAGES_DUPLICATE: 'View all duplicate packages',
|
|
14
|
+
COMPONENT_LINK_PACKAGES_DUPLICATE_CHANGED: 'View all changed duplicate packages',
|
|
13
15
|
COMPONENT_LINK_VIEW_PACKAGE: 'View package',
|
|
14
16
|
COMPONENT_LINK_BUNDLE_ASSETS_BY_FILE_TYPE: ({ label }) => `View all ${label} assets`,
|
|
17
|
+
COMPONENT_LINK_BUNDLE_ASSETS_BY_ENTRY_TYPE: (assetType) => `View all ${assetType} assets`,
|
|
15
18
|
};
|
|
@@ -185,6 +185,24 @@ export const BUNDLE_MODULES_DUPLICATE: ComponentLink = {
|
|
|
185
185
|
},
|
|
186
186
|
};
|
|
187
187
|
|
|
188
|
+
export const getBundleAssetsByEntryType = (
|
|
189
|
+
assetType: 'entry' | 'initial' | 'chunk',
|
|
190
|
+
): ComponentLink => ({
|
|
191
|
+
section: SECTIONS.ASSETS,
|
|
192
|
+
title: I18N.COMPONENT_LINK_BUNDLE_ASSETS_BY_ENTRY_TYPE(assetType),
|
|
193
|
+
params: {
|
|
194
|
+
[COMPONENT.BUNDLE_ASSETS]: {
|
|
195
|
+
filters: {
|
|
196
|
+
[ASSET_FILTERS.CHANGED]: false,
|
|
197
|
+
...getAssetEntryTypeFilters(false),
|
|
198
|
+
[`${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.ENTRY}`]: assetType === 'entry',
|
|
199
|
+
[`${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.INITIAL}`]: assetType === 'initial',
|
|
200
|
+
[`${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.CHUNK}`]: assetType === 'chunk',
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
|
|
188
206
|
export const getBundleModulesBySearch = (search: string): ComponentLink => ({
|
|
189
207
|
section: SECTIONS.MODULES,
|
|
190
208
|
title: I18N.COMPONENT_LINK_MODULES,
|
|
@@ -234,6 +252,19 @@ export const BUNDLE_PACKAGES_COUNT: ComponentLink = {
|
|
|
234
252
|
},
|
|
235
253
|
};
|
|
236
254
|
|
|
255
|
+
export const BUNDLE_PACKAGES_CHANGED: ComponentLink = {
|
|
256
|
+
section: SECTIONS.PACKAGES,
|
|
257
|
+
title: I18N.COMPONENT_LINK_PACKAGES_CHANGED,
|
|
258
|
+
params: {
|
|
259
|
+
[COMPONENT.BUNDLE_PACKAGES]: {
|
|
260
|
+
filters: {
|
|
261
|
+
// Keep a filter to allow the merge and skip default
|
|
262
|
+
[PACKAGE_FILTERS.CHANGED]: true,
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
|
|
237
268
|
export const BUNDLE_PACKAGES_DUPLICATE: ComponentLink = {
|
|
238
269
|
section: SECTIONS.PACKAGES,
|
|
239
270
|
title: I18N.COMPONENT_LINK_PACKAGES_DUPLICATE,
|
|
@@ -246,9 +277,9 @@ export const BUNDLE_PACKAGES_DUPLICATE: ComponentLink = {
|
|
|
246
277
|
},
|
|
247
278
|
};
|
|
248
279
|
|
|
249
|
-
export const
|
|
280
|
+
export const BUNDLE_PACKAGES_DUPLICATE_CHANGED: ComponentLink = {
|
|
250
281
|
section: SECTIONS.PACKAGES,
|
|
251
|
-
title: I18N.
|
|
282
|
+
title: I18N.COMPONENT_LINK_PACKAGES_DUPLICATE_CHANGED,
|
|
252
283
|
params: {
|
|
253
284
|
[COMPONENT.BUNDLE_PACKAGES]: {
|
|
254
285
|
filters: {
|
package/src/utils/index.js
CHANGED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import isEmpty from 'lodash/isEmpty';
|
|
2
|
+
|
|
3
|
+
import { InsightType, JobInsight, JobInsightsInfo } from '../constants';
|
|
4
|
+
import {
|
|
5
|
+
BUNDLE_PACKAGES_DUPLICATE,
|
|
6
|
+
BUNDLE_PACKAGES_CHANGED,
|
|
7
|
+
BUNDLE_PACKAGES_DUPLICATE_CHANGED,
|
|
8
|
+
} from './component-links';
|
|
9
|
+
|
|
10
|
+
interface InsightListItem {
|
|
11
|
+
/**
|
|
12
|
+
* Inight name
|
|
13
|
+
*/
|
|
14
|
+
name: string;
|
|
15
|
+
/**
|
|
16
|
+
* Insight data
|
|
17
|
+
*/
|
|
18
|
+
insight: JobInsight;
|
|
19
|
+
/**
|
|
20
|
+
* Custom link props
|
|
21
|
+
*/
|
|
22
|
+
link: any;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Get the insigh list ordered by level type
|
|
27
|
+
*/
|
|
28
|
+
export const getInsightList = (insights: JobInsightsInfo): Array<InsightListItem> => {
|
|
29
|
+
const { duplicatePackages, newPackages } = insights;
|
|
30
|
+
|
|
31
|
+
const insightsByLevel: Record<InsightType, Array<InsightListItem>> = {
|
|
32
|
+
[InsightType.ERROR]: [],
|
|
33
|
+
[InsightType.WARNING]: [],
|
|
34
|
+
[InsightType.INFO]: [],
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
if (duplicatePackages) {
|
|
38
|
+
insightsByLevel[duplicatePackages.type].push({
|
|
39
|
+
name: 'duplicatePackages',
|
|
40
|
+
insight: duplicatePackages,
|
|
41
|
+
link:
|
|
42
|
+
duplicatePackages.type === InsightType.WARNING
|
|
43
|
+
? BUNDLE_PACKAGES_DUPLICATE
|
|
44
|
+
: BUNDLE_PACKAGES_DUPLICATE_CHANGED,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (newPackages) {
|
|
49
|
+
insightsByLevel[newPackages.type].push({
|
|
50
|
+
name: 'newPackages',
|
|
51
|
+
insight: newPackages,
|
|
52
|
+
link: BUNDLE_PACKAGES_CHANGED,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return [
|
|
57
|
+
...(insightsByLevel[InsightType.ERROR] || []),
|
|
58
|
+
...(insightsByLevel[InsightType.WARNING] || []),
|
|
59
|
+
...(insightsByLevel[InsightType.INFO] || []),
|
|
60
|
+
];
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Show only the insights that are introduced by a change
|
|
65
|
+
*/
|
|
66
|
+
export const getChangedInsights = (normalizedInsights: JobInsightsInfo): JobInsightsInfo | null => {
|
|
67
|
+
const res: JobInsightsInfo = {};
|
|
68
|
+
|
|
69
|
+
if (normalizedInsights.duplicatePackages?.type === InsightType.ERROR) {
|
|
70
|
+
res.duplicatePackages = normalizedInsights.duplicatePackages;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (normalizedInsights.newPackages) {
|
|
74
|
+
res.newPackages = normalizedInsights.newPackages;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (isEmpty(res)) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return res;
|
|
82
|
+
};
|