@bundle-stats/utils 4.0.0-alpha.9 → 4.0.0-rc.4
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/report/create.js +2 -4
- package/lib/report/create.js.map +1 -1
- package/lib/webpack/extract/assets.js +27 -32
- package/lib/webpack/extract/assets.js.map +1 -1
- package/lib/webpack/extract/index.js +0 -2
- package/lib/webpack/extract/index.js.map +1 -1
- package/lib/webpack/extract/modules-packages-duplicate.js +1 -1
- package/lib/webpack/extract/modules-packages-duplicate.js.map +1 -1
- package/lib/webpack/extract/modules-packages.js +4 -5
- package/lib/webpack/extract/modules-packages.js.map +1 -1
- package/lib/webpack/extract/modules.js +9 -4
- package/lib/webpack/extract/modules.js.map +1 -1
- package/lib/webpack/index.js +1 -0
- package/lib/webpack/index.js.map +1 -1
- package/lib/webpack/metrics.js +11 -11
- package/lib/webpack/metrics.js.map +1 -1
- package/lib/webpack/types.js +3 -0
- package/lib/webpack/types.js.map +1 -0
- package/lib/webpack/utils.js +1 -1
- package/lib/webpack/utils.js.map +1 -1
- package/lib-esm/webpack/extract/assets.js +27 -31
- package/lib-esm/webpack/extract/assets.js.map +1 -1
- package/lib-esm/webpack/extract/index.js +0 -2
- package/lib-esm/webpack/extract/index.js.map +1 -1
- package/lib-esm/webpack/extract/modules-packages.js +3 -3
- package/lib-esm/webpack/extract/modules-packages.js.map +1 -1
- package/lib-esm/webpack/extract/modules.js +9 -4
- package/lib-esm/webpack/extract/modules.js.map +1 -1
- package/lib-esm/webpack/index.js +1 -0
- package/lib-esm/webpack/index.js.map +1 -1
- package/lib-esm/webpack/metrics.js +11 -11
- package/lib-esm/webpack/metrics.js.map +1 -1
- package/lib-esm/webpack/types.js +2 -0
- package/lib-esm/webpack/types.js.map +1 -0
- package/package.json +7 -7
- package/src/constants.ts +0 -24
- package/src/webpack/extract/assets.ts +39 -62
- package/src/webpack/extract/index.js +2 -7
- package/src/webpack/extract/modules-packages.ts +7 -7
- package/src/webpack/extract/modules.ts +14 -18
- package/src/webpack/index.js +1 -0
- package/src/webpack/metrics.js +11 -11
- package/src/webpack/types.ts +54 -0
- package/types/constants.d.ts +0 -20
- package/types/webpack/extract/assets.d.ts +3 -11
- package/types/webpack/extract/modules-packages.d.ts +2 -2
- package/types/webpack/extract/modules.d.ts +3 -2
- package/types/webpack/index.d.ts +1 -0
- package/types/webpack/types.d.ts +45 -0
- package/lib/webpack/extract/modules-count.js +0 -14
- package/lib/webpack/extract/modules-count.js.map +0 -1
- package/lib-esm/webpack/extract/modules-count.js +0 -7
- package/lib-esm/webpack/extract/modules-count.js.map +0 -1
- package/src/webpack/extract/modules-count.js +0 -8
- package/types/webpack/extract/modules-count.d.ts +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules-packages.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,YAAY,CAAC;AAC7B,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,QAAQ,GAAG,CAAC,IAAoB,EAAE,EAAE;IACxC,MAAM,GAAG,GAAmB,EAAE,CAAC;IAE/B,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACzC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAChB;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,UAAkB,EAAE,EAAE;IACjE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAGrD,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IAID,MAAM,KAAK,GAAG,QAAQ,CACpB,KAAK;SACF,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;QAEnB,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAEtD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,EAAE,CAAC;SACX;QAED,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5F,CAAC,CAAC;SACD,IAAI,EAAE,CACV,CAAC;IAGF,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;QAClB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAIzB,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEpE,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAClC,IAAI;QACJ,IAAI;KACL,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,
|
|
1
|
+
{"version":3,"file":"modules-packages.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules-packages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import isEmpty from 'lodash/isEmpty';
|
|
2
1
|
import round from 'lodash/round';
|
|
3
2
|
import { getModuleName, normalizeChunkId } from '../utils';
|
|
4
3
|
export const extractModules = (webpackStats) => {
|
|
5
|
-
const modulesSource =
|
|
4
|
+
const modulesSource = webpackStats === null || webpackStats === void 0 ? void 0 : webpackStats.modules;
|
|
6
5
|
if (!modulesSource) {
|
|
7
6
|
return {
|
|
8
7
|
metrics: {
|
|
9
8
|
duplicateCode: { value: 0 },
|
|
10
9
|
duplicateModulesCount: { value: 0 },
|
|
11
10
|
modules: {},
|
|
11
|
+
moduleCount: { value: 0 },
|
|
12
12
|
},
|
|
13
13
|
};
|
|
14
14
|
}
|
|
@@ -23,17 +23,19 @@ export const extractModules = (webpackStats) => {
|
|
|
23
23
|
})));
|
|
24
24
|
return agg;
|
|
25
25
|
}, []);
|
|
26
|
+
let moduleCount = 0;
|
|
26
27
|
let totalCodeSize = 0;
|
|
27
28
|
let duplicateCodeSize = 0;
|
|
28
29
|
let duplicateModulesCount = 0;
|
|
29
30
|
const modules = allModules.reduce((agg, moduleEntry) => {
|
|
30
|
-
const { name, size, chunks } = moduleEntry;
|
|
31
|
+
const { name, size = 0, chunks } = moduleEntry;
|
|
31
32
|
const normalizedName = getModuleName(name);
|
|
32
|
-
if (
|
|
33
|
+
if (!chunks || (chunks === null || chunks === void 0 ? void 0 : chunks.length) === 0) {
|
|
33
34
|
return agg;
|
|
34
35
|
}
|
|
35
36
|
const instances = chunks.length;
|
|
36
37
|
const duplicateInstances = instances - 1;
|
|
38
|
+
moduleCount += instances;
|
|
37
39
|
duplicateModulesCount += duplicateInstances;
|
|
38
40
|
duplicateCodeSize += duplicateInstances * size;
|
|
39
41
|
totalCodeSize += instances * size;
|
|
@@ -55,6 +57,9 @@ export const extractModules = (webpackStats) => {
|
|
|
55
57
|
duplicateModulesCount: {
|
|
56
58
|
value: duplicateModulesCount,
|
|
57
59
|
},
|
|
60
|
+
moduleCount: {
|
|
61
|
+
value: moduleCount,
|
|
62
|
+
},
|
|
58
63
|
},
|
|
59
64
|
};
|
|
60
65
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QAC3D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;YACxB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAEtB,OAAO,GAAG,CAAC;SACZ;QAGD,GAAG,GAAG,GAAG,CAAC,MAAM,CACd,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YAC/C,GAAG,kBAAkB;YAErB,MAAM,EAAE,WAAW,CAAC,MAAM;SAC3B,CAAC,CAAC,CACJ,CAAC;QAEF,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAA2C,CAAC,CAAC;IAEhD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAG9B,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QACrD,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;QAC/C,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAG3C,IAAI,CAAC,MAAM,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,MAAK,CAAC,EAAE;YACnC,OAAO,GAAG,CAAC;SACZ;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;QAChC,MAAM,kBAAkB,GAAG,SAAS,GAAG,CAAC,CAAC;QAEzC,WAAW,IAAI,SAAS,CAAC;QACzB,qBAAqB,IAAI,kBAAkB,CAAC;QAC5C,iBAAiB,IAAI,kBAAkB,GAAG,IAAI,CAAC;QAC/C,aAAa,IAAI,SAAS,GAAG,IAAI,CAAC;QAGlC,GAAG,CAAC,cAAc,CAAC,GAAG;YACpB,IAAI;YACJ,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACtC,UAAU,EAAE,OAAO,CAAC,kBAAkB,CAAC;SACxC,CAAC;QAEF,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAA4B,CAAC,CAAC;IAEjC,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,aAAa,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9F,OAAO;QACL,OAAO,EAAE;YACP,OAAO;YACP,aAAa,EAAE;gBACb,KAAK,EAAE,aAAa;aACrB;YACD,qBAAqB,EAAE;gBACrB,KAAK,EAAE,qBAAqB;aAC7B;YACD,WAAW,EAAE;gBACX,KAAK,EAAE,WAAW;aACnB;SACF;KACF,CAAC;AACJ,CAAC,CAAC"}
|
package/lib-esm/webpack/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webpack/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAE5E,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webpack/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAE5E,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
@@ -2,74 +2,74 @@ import { METRIC_TYPE_FILE_SIZE, METRIC_TYPE_NUMERIC, METRIC_TYPE_PERCENTAGE, } f
|
|
|
2
2
|
export const metrics = {
|
|
3
3
|
totalSizeByTypeALL: {
|
|
4
4
|
label: 'Bundle Size',
|
|
5
|
-
description: '
|
|
5
|
+
description: 'The total size of the assets produced by webpack',
|
|
6
6
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
7
7
|
type: METRIC_TYPE_FILE_SIZE,
|
|
8
8
|
},
|
|
9
9
|
totalInitialSizeJS: {
|
|
10
10
|
label: 'Initial JS',
|
|
11
|
-
description: '
|
|
11
|
+
description: 'The total size of JavaScript initial chunks',
|
|
12
12
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
13
13
|
type: METRIC_TYPE_FILE_SIZE,
|
|
14
14
|
},
|
|
15
15
|
totalInitialSizeCSS: {
|
|
16
16
|
label: 'Initial CSS',
|
|
17
|
-
description: '
|
|
17
|
+
description: 'The total size of CSS initial chunks',
|
|
18
18
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
19
19
|
type: METRIC_TYPE_FILE_SIZE,
|
|
20
20
|
},
|
|
21
21
|
cacheInvalidation: {
|
|
22
22
|
label: 'Cache Invalidation',
|
|
23
|
-
description: '
|
|
23
|
+
description: 'The ratio between the total changed assets and total assets size(Bundle Size)',
|
|
24
24
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
25
25
|
type: METRIC_TYPE_PERCENTAGE,
|
|
26
26
|
biggerIsBetter: false,
|
|
27
27
|
},
|
|
28
28
|
chunkCount: {
|
|
29
29
|
label: 'Chunks',
|
|
30
|
-
description: '
|
|
30
|
+
description: 'The total number of chunks',
|
|
31
31
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
32
32
|
type: METRIC_TYPE_NUMERIC,
|
|
33
33
|
biggerIsBetter: false,
|
|
34
34
|
},
|
|
35
35
|
assetCount: {
|
|
36
36
|
label: 'Assets',
|
|
37
|
-
description: 'Total number of assets
|
|
37
|
+
description: 'Total number of assets',
|
|
38
38
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
39
39
|
type: METRIC_TYPE_NUMERIC,
|
|
40
40
|
biggerIsBetter: false,
|
|
41
41
|
},
|
|
42
42
|
moduleCount: {
|
|
43
43
|
label: 'Modules',
|
|
44
|
-
description: '
|
|
44
|
+
description: 'The total number of modules bundled by webpack',
|
|
45
45
|
url: 'https://relative-ci.com/documentation/metrics-and-data#modules-1',
|
|
46
46
|
type: METRIC_TYPE_NUMERIC,
|
|
47
47
|
biggerIsBetter: false,
|
|
48
48
|
},
|
|
49
49
|
duplicateModulesCount: {
|
|
50
50
|
label: 'Duplicate Modules',
|
|
51
|
-
description: '
|
|
51
|
+
description: 'The total number of modules that belong to more than one chunk',
|
|
52
52
|
url: 'https://relative-ci.com/documentation/metrics-and-data#modules-1',
|
|
53
53
|
type: METRIC_TYPE_NUMERIC,
|
|
54
54
|
biggerIsBetter: false,
|
|
55
55
|
},
|
|
56
56
|
duplicateCode: {
|
|
57
57
|
label: 'Duplicate Code',
|
|
58
|
-
description: 'The percentage of total duplicate module size from the total module size
|
|
58
|
+
description: 'The percentage of total duplicate module size from the total module size',
|
|
59
59
|
url: 'https://relative-ci.com/documentation/metrics-and-data#modules-1',
|
|
60
60
|
type: METRIC_TYPE_PERCENTAGE,
|
|
61
61
|
biggerIsBetter: false,
|
|
62
62
|
},
|
|
63
63
|
packageCount: {
|
|
64
64
|
label: 'Packages',
|
|
65
|
-
description: '
|
|
65
|
+
description: 'The total number of packages bundled by webpack',
|
|
66
66
|
url: 'https://relative-ci.com/documentation/metrics-and-data#packages',
|
|
67
67
|
type: METRIC_TYPE_NUMERIC,
|
|
68
68
|
biggerIsBetter: false,
|
|
69
69
|
},
|
|
70
70
|
duplicatePackagesCount: {
|
|
71
71
|
label: 'Duplicate Packages',
|
|
72
|
-
description: '
|
|
72
|
+
description: 'The total number of duplicate packages',
|
|
73
73
|
url: 'https://relative-ci.com/documentation/metrics-and-data#packages',
|
|
74
74
|
type: METRIC_TYPE_NUMERIC,
|
|
75
75
|
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;AAE3B,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,kBAAkB,EAAE;QAClB,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;AAE3B,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,kBAAkB,EAAE;QAClB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,kDAAkD;QAC/D,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,qBAAqB;KAC5B;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,6CAA6C;QAC1D,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,qBAAqB;KAC5B;IACD,mBAAmB,EAAE;QACnB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,sCAAsC;QACnD,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,qBAAqB;KAC5B;IACD,iBAAiB,EAAE;QACjB,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,+EAA+E;QAC5F,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,sBAAsB;QAC5B,cAAc,EAAE,KAAK;KACtB;IACD,UAAU,EAAE;QACV,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,4BAA4B;QACzC,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,UAAU,EAAE;QACV,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,wBAAwB;QACrC,GAAG,EAAE,+DAA+D;QACpE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,WAAW,EAAE;QACX,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,gDAAgD;QAC7D,GAAG,EAAE,kEAAkE;QACvE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,qBAAqB,EAAE;QACrB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,gEAAgE;QAC7E,GAAG,EAAE,kEAAkE;QACvE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,aAAa,EAAE;QACb,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,0EAA0E;QACvF,GAAG,EAAE,kEAAkE;QACvE,IAAI,EAAE,sBAAsB;QAC5B,cAAc,EAAE,KAAK;KACtB;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,iDAAiD;QAC9D,GAAG,EAAE,iEAAiE;QACtE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,sBAAsB,EAAE;QACtB,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,wCAAwC;QACrD,GAAG,EAAE,iEAAiE;QACtE,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,KAAK;KACtB;IACD,KAAK,EAAE;QACL,iBAAiB,EAAE;YACjB,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,qBAAqB;SAC5B;QACD,kBAAkB,EAAE;YAClB,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,qBAAqB;SAC5B;QACD,kBAAkB,EAAE;YAClB,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,qBAAqB;SAC5B;QACD,oBAAoB,EAAE;YACpB,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,qBAAqB;SAC5B;QACD,mBAAmB,EAAE;YACnB,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,qBAAqB;SAC5B;QACD,mBAAmB,EAAE;YACnB,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,qBAAqB;SAC5B;QACD,oBAAoB,EAAE;YACpB,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,qBAAqB;SAC5B;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/webpack/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bundle-stats/utils",
|
|
3
|
-
"version": "4.0.0-
|
|
3
|
+
"version": "4.0.0-rc.4",
|
|
4
4
|
"description": "BundleStats utils",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib-esm/index.js",
|
|
@@ -35,18 +35,18 @@
|
|
|
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.0.0-
|
|
39
|
-
"@bundle-stats/plugin-webpack-validate": "^4.0.0-
|
|
38
|
+
"@bundle-stats/plugin-webpack-filter": "^4.0.0-rc.4",
|
|
39
|
+
"@bundle-stats/plugin-webpack-validate": "^4.0.0-rc.4",
|
|
40
40
|
"convert-units": "3.0.0-beta.4",
|
|
41
41
|
"query-string": "^7.1.0",
|
|
42
42
|
"serialize-query-params": "^1.3.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@types/jest": "28.1.
|
|
45
|
+
"@types/jest": "28.1.4",
|
|
46
46
|
"@types/lodash": "4.14.182",
|
|
47
|
-
"core-js": "3.23.
|
|
47
|
+
"core-js": "3.23.4",
|
|
48
48
|
"jest": "27.5.1",
|
|
49
|
-
"jest-cli": "28.1.
|
|
49
|
+
"jest-cli": "28.1.2",
|
|
50
50
|
"jest-date-mock": "1.0.8",
|
|
51
51
|
"lodash": "4.17.21",
|
|
52
52
|
"regenerator-runtime": "0.13.9",
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"core-js": "^3.0.0",
|
|
59
59
|
"lodash": "^4.0.0"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "17ca795598091c796a5a2f91da02bd985f7a6908"
|
|
62
62
|
}
|
package/src/constants.ts
CHANGED
|
@@ -44,30 +44,6 @@ export interface Metric {
|
|
|
44
44
|
value: number;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
export interface ModuleMetric extends Metric {
|
|
48
|
-
name: string;
|
|
49
|
-
chunkIds: Array<String>;
|
|
50
|
-
duplicated: boolean;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export interface PackageMetric extends Metric {
|
|
54
|
-
path: string;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export interface WebpackMetricsModules {
|
|
58
|
-
metrics: {
|
|
59
|
-
duplicateCode: MetricRun;
|
|
60
|
-
duplicateModulesCount: MetricRun;
|
|
61
|
-
modules: Record<string, ModuleMetric>;
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export interface WebpackMetricsPackages {
|
|
66
|
-
metrics: {
|
|
67
|
-
packages: Record<string, PackageMetric>;
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
|
|
71
47
|
export interface LighthouseSource {
|
|
72
48
|
lighthouseVersion: string;
|
|
73
49
|
fetchTime: string;
|
|
@@ -1,84 +1,61 @@
|
|
|
1
1
|
import isEmpty from 'lodash/isEmpty';
|
|
2
|
+
import { WebpackStatsFiltered } from '@bundle-stats/plugin-webpack-filter';
|
|
2
3
|
|
|
4
|
+
import { MetricsAssets, Assets } from '../types';
|
|
3
5
|
import { getAssetName, normalizeChunkId } from '../utils';
|
|
4
6
|
|
|
5
7
|
const IGNORE_PATTERN = /\.(map|LICENSE\.txt)$/;
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
9
|
+
export const extractAssets = (webpackStats: WebpackStatsFiltered): MetricsAssets => {
|
|
10
|
+
const webpackAssets = webpackStats.assets;
|
|
11
|
+
const webpackChunks = webpackStats.chunks;
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
13
|
+
let initialAssetNames: Array<string> = [];
|
|
14
|
+
let entryAssetNames: Array<string> = [];
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
type WebpackStatsEntrypoints = Record<string, WebpackStatsEntrypoint>;
|
|
22
|
-
|
|
23
|
-
interface WebpackStatsChunk {
|
|
24
|
-
id: string;
|
|
25
|
-
entry: boolean;
|
|
26
|
-
initial: boolean;
|
|
27
|
-
files: Array<string>;
|
|
28
|
-
names: Array<string>;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const extractAssets = (webpackStats: any) => {
|
|
32
|
-
const webpackAssets: Array<WebpackStatsAsset> = webpackStats?.assets || [];
|
|
33
|
-
const webpackChunks: Array<WebpackStatsChunk> = webpackStats?.chunks || [];
|
|
34
|
-
const webpackEntrypoints: WebpackStatsEntrypoints = webpackStats?.entrypoints || {};
|
|
35
|
-
|
|
36
|
-
const entrypointsAssets = Object.values(webpackEntrypoints)
|
|
37
|
-
.map(({ assets: items }) => items.map((item) => {
|
|
38
|
-
if (typeof item === 'object') {
|
|
39
|
-
return item.name;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return item;
|
|
43
|
-
}))
|
|
44
|
-
.flat();
|
|
16
|
+
webpackChunks?.forEach((webpackChunk) => {
|
|
17
|
+
if (webpackChunk.initial && webpackChunk.files && webpackChunk.files?.length > 0) {
|
|
18
|
+
initialAssetNames = initialAssetNames.concat(webpackChunk.files);
|
|
19
|
+
}
|
|
45
20
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
21
|
+
if (webpackChunk.entry && webpackChunk.files && webpackChunk.files?.length > 0) {
|
|
22
|
+
entryAssetNames = entryAssetNames.concat(webpackChunk.files);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
50
25
|
|
|
51
|
-
const normalizedChunks = webpackChunks
|
|
26
|
+
const normalizedChunks = webpackChunks?.map(({ id, names, files }) => ({
|
|
52
27
|
id: normalizeChunkId(id),
|
|
53
|
-
name: names
|
|
28
|
+
name: names?.join('+') || `chunk-${id}`,
|
|
54
29
|
files,
|
|
55
30
|
}));
|
|
56
31
|
|
|
57
|
-
const assets =
|
|
58
|
-
|
|
32
|
+
const assets =
|
|
33
|
+
webpackAssets?.reduce((agg, asset) => {
|
|
34
|
+
const baseName = asset?.name.split('?')[0];
|
|
59
35
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
36
|
+
if (IGNORE_PATTERN.test(baseName)) {
|
|
37
|
+
return agg;
|
|
38
|
+
}
|
|
63
39
|
|
|
64
|
-
|
|
65
|
-
|
|
40
|
+
// Check for the corresponding chunk
|
|
41
|
+
const assetChunk = normalizedChunks?.find((chunk) => chunk.files?.includes(asset.name));
|
|
66
42
|
|
|
67
|
-
|
|
68
|
-
|
|
43
|
+
const normalizedName = getAssetName(baseName);
|
|
44
|
+
const { size, name } = asset;
|
|
69
45
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
[normalizedName]
|
|
46
|
+
// Reassign for perf
|
|
47
|
+
// eslint-disable-next-line no-param-reassign
|
|
48
|
+
agg[normalizedName] = {
|
|
73
49
|
name: baseName,
|
|
74
|
-
value: size,
|
|
75
|
-
isEntry:
|
|
76
|
-
isInitial:
|
|
50
|
+
value: size || 0,
|
|
51
|
+
isEntry: entryAssetNames.includes(name),
|
|
52
|
+
isInitial: initialAssetNames.includes(name),
|
|
77
53
|
isChunk: Boolean(assetChunk),
|
|
78
|
-
...(assetChunk
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
54
|
+
...(assetChunk && { chunkId: assetChunk.id }),
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
return agg;
|
|
58
|
+
}, {} as Assets) || {};
|
|
82
59
|
|
|
83
60
|
return {
|
|
84
61
|
metrics: {
|
|
@@ -87,7 +64,7 @@ export const extractAssets = (webpackStats: any) => {
|
|
|
87
64
|
...(!isEmpty(normalizedChunks)
|
|
88
65
|
? {
|
|
89
66
|
meta: {
|
|
90
|
-
chunks: normalizedChunks
|
|
67
|
+
chunks: normalizedChunks?.map(({ id, name }) => ({ id, name })) || [],
|
|
91
68
|
},
|
|
92
69
|
}
|
|
93
70
|
: {}),
|
|
@@ -8,7 +8,6 @@ import { extractAssetsSize } from './assets-size';
|
|
|
8
8
|
import { extractAssetsSizeTotalInsight } from './assets-size-total-insight';
|
|
9
9
|
import { extractMeta } from './meta';
|
|
10
10
|
import { extractModules } from './modules';
|
|
11
|
-
import { extractModulesCount } from './modules-count';
|
|
12
11
|
import { extractModulesPackages } from './modules-packages';
|
|
13
12
|
import { extractModulesPackagesCount } from './modules-packages-count';
|
|
14
13
|
import { extractModulesPackagesDuplicate } from './modules-packages-duplicate';
|
|
@@ -22,14 +21,10 @@ const extractFns = [
|
|
|
22
21
|
extractAssetsSizeTotalInsight,
|
|
23
22
|
extractMeta,
|
|
24
23
|
extractModules,
|
|
25
|
-
extractModulesCount,
|
|
26
24
|
extractModulesPackages,
|
|
27
25
|
extractModulesPackagesCount,
|
|
28
26
|
extractModulesPackagesDuplicate,
|
|
29
27
|
];
|
|
30
28
|
|
|
31
|
-
export const extract = (webpackStats, baseline) =>
|
|
32
|
-
{},
|
|
33
|
-
agg,
|
|
34
|
-
extractFn(webpackStats, agg, baseline),
|
|
35
|
-
), {});
|
|
29
|
+
export const extract = (webpackStats, baseline) =>
|
|
30
|
+
extractFns.reduce((agg, extractFn) => merge({}, agg, extractFn(webpackStats, agg, baseline)), {});
|
|
@@ -3,7 +3,7 @@ import last from 'lodash/last';
|
|
|
3
3
|
import isEmpty from 'lodash/isEmpty';
|
|
4
4
|
|
|
5
5
|
import { PACKAGES_SEPARATOR, PACKAGE_ID_SEPARATOR } from '../../config';
|
|
6
|
-
import {
|
|
6
|
+
import { Package, MetricsModules, MetricsPackages } from '../types';
|
|
7
7
|
import { MODULE_PATH_PACKAGES, PACKAGE_PATH_NAME } from '../constants';
|
|
8
8
|
|
|
9
9
|
const uniqLast = (data: Array<unknown>) => {
|
|
@@ -66,9 +66,9 @@ export const getPackageMetaFromModulePath = (modulePath: string) => {
|
|
|
66
66
|
};
|
|
67
67
|
|
|
68
68
|
export const extractModulesPackages = (
|
|
69
|
-
|
|
70
|
-
currentExtractedData?:
|
|
71
|
-
):
|
|
69
|
+
_?: unknown,
|
|
70
|
+
currentExtractedData?: MetricsModules,
|
|
71
|
+
): MetricsPackages => {
|
|
72
72
|
const modules = Object.entries(currentExtractedData?.metrics?.modules || {});
|
|
73
73
|
|
|
74
74
|
const packages = modules.reduce((agg, [modulePath, { value }]) => {
|
|
@@ -105,7 +105,7 @@ export const extractModulesPackages = (
|
|
|
105
105
|
|
|
106
106
|
// Same package name, but different paths (eg: symlinks)
|
|
107
107
|
const existingPackageWithEqualPath = Object.entries(agg).find(
|
|
108
|
-
([
|
|
108
|
+
([__, packageData]) => packageData.path === packageMeta.path,
|
|
109
109
|
);
|
|
110
110
|
|
|
111
111
|
if (existingPackageWithEqualPath) {
|
|
@@ -125,7 +125,7 @@ export const extractModulesPackages = (
|
|
|
125
125
|
Object.keys(agg)
|
|
126
126
|
.map((id) => id.split('~'))
|
|
127
127
|
.filter(([id]) => id === packageMeta.id)
|
|
128
|
-
.map(([
|
|
128
|
+
.map(([__, index]) => parseInt(index, 10)),
|
|
129
129
|
) || 0;
|
|
130
130
|
|
|
131
131
|
const packageName = [packageMeta.id, lastIndex + 1].join(PACKAGE_ID_SEPARATOR);
|
|
@@ -138,7 +138,7 @@ export const extractModulesPackages = (
|
|
|
138
138
|
value,
|
|
139
139
|
},
|
|
140
140
|
};
|
|
141
|
-
}, {} as Record<string,
|
|
141
|
+
}, {} as Record<string, Package>);
|
|
142
142
|
|
|
143
143
|
return { metrics: { packages } };
|
|
144
144
|
};
|
|
@@ -1,24 +1,14 @@
|
|
|
1
|
-
import isEmpty from 'lodash/isEmpty';
|
|
2
1
|
import round from 'lodash/round';
|
|
2
|
+
import { WebpackStatsFiltered, WebpackStatsFilteredRootModule } from '@bundle-stats/plugin-webpack-filter';
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { Module, MetricsModules } from '../types';
|
|
5
5
|
import { getModuleName, normalizeChunkId } from '../utils';
|
|
6
6
|
|
|
7
|
-
interface WebpackModule {
|
|
8
|
-
name: string;
|
|
9
|
-
size: number;
|
|
10
|
-
chunks: Array<string | number>;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
interface WebpackModuleWithConcatenatedModules extends WebpackModule {
|
|
14
|
-
modules: Array<Pick<WebpackModule, 'name' | 'size'>>;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
7
|
/*
|
|
18
8
|
* Extract webpack modules array to an object with metrics
|
|
19
9
|
*/
|
|
20
|
-
export const extractModules = (webpackStats?:
|
|
21
|
-
const modulesSource
|
|
10
|
+
export const extractModules = (webpackStats?: WebpackStatsFiltered): MetricsModules => {
|
|
11
|
+
const modulesSource = webpackStats?.modules;
|
|
22
12
|
|
|
23
13
|
if (!modulesSource) {
|
|
24
14
|
return {
|
|
@@ -26,6 +16,7 @@ export const extractModules = (webpackStats?: any): WebpackMetricsModules => {
|
|
|
26
16
|
duplicateCode: { value: 0 },
|
|
27
17
|
duplicateModulesCount: { value: 0 },
|
|
28
18
|
modules: {},
|
|
19
|
+
moduleCount: { value: 0 },
|
|
29
20
|
},
|
|
30
21
|
};
|
|
31
22
|
}
|
|
@@ -48,25 +39,27 @@ export const extractModules = (webpackStats?: any): WebpackMetricsModules => {
|
|
|
48
39
|
);
|
|
49
40
|
|
|
50
41
|
return agg;
|
|
51
|
-
}, [] as Array<
|
|
42
|
+
}, [] as Array<WebpackStatsFilteredRootModule>);
|
|
52
43
|
|
|
44
|
+
let moduleCount = 0;
|
|
53
45
|
let totalCodeSize = 0;
|
|
54
46
|
let duplicateCodeSize = 0;
|
|
55
47
|
let duplicateModulesCount = 0;
|
|
56
48
|
|
|
57
49
|
// Normalize module entries
|
|
58
50
|
const modules = allModules.reduce((agg, moduleEntry) => {
|
|
59
|
-
const { name, size, chunks } = moduleEntry;
|
|
51
|
+
const { name, size = 0, chunks } = moduleEntry;
|
|
60
52
|
const normalizedName = getModuleName(name);
|
|
61
53
|
|
|
62
54
|
// skip modules that do not belong to any chunk
|
|
63
|
-
if (
|
|
55
|
+
if (!chunks || chunks?.length === 0) {
|
|
64
56
|
return agg;
|
|
65
57
|
}
|
|
66
58
|
|
|
67
59
|
const instances = chunks.length;
|
|
68
60
|
const duplicateInstances = instances - 1;
|
|
69
61
|
|
|
62
|
+
moduleCount += instances;
|
|
70
63
|
duplicateModulesCount += duplicateInstances;
|
|
71
64
|
duplicateCodeSize += duplicateInstances * size;
|
|
72
65
|
totalCodeSize += instances * size;
|
|
@@ -80,7 +73,7 @@ export const extractModules = (webpackStats?: any): WebpackMetricsModules => {
|
|
|
80
73
|
};
|
|
81
74
|
|
|
82
75
|
return agg;
|
|
83
|
-
}, {} as Record<string,
|
|
76
|
+
}, {} as Record<string, Module>);
|
|
84
77
|
|
|
85
78
|
const duplicateCode = totalCodeSize ? round((duplicateCodeSize / totalCodeSize) * 100, 2) : 0;
|
|
86
79
|
|
|
@@ -93,6 +86,9 @@ export const extractModules = (webpackStats?: any): WebpackMetricsModules => {
|
|
|
93
86
|
duplicateModulesCount: {
|
|
94
87
|
value: duplicateModulesCount,
|
|
95
88
|
},
|
|
89
|
+
moduleCount: {
|
|
90
|
+
value: moduleCount,
|
|
91
|
+
},
|
|
96
92
|
},
|
|
97
93
|
};
|
|
98
94
|
};
|
package/src/webpack/index.js
CHANGED