@bundle-stats/utils 4.2.0-beta.1 → 4.2.0-beta.2
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/index.js +1 -9
- package/lib/config/index.js.map +1 -1
- package/lib/config/insights.js +7 -5
- package/lib/config/insights.js.map +1 -1
- package/lib/constants.js +27 -13
- package/lib/constants.js.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/jobs/create-job.js +23 -12
- package/lib/jobs/create-job.js.map +1 -1
- package/lib/jobs/create-jobs.js +13 -17
- package/lib/jobs/create-jobs.js.map +1 -1
- package/lib/jobs/create-summary.js +10 -11
- package/lib/jobs/create-summary.js.map +1 -1
- package/lib/jobs/index.js.map +1 -1
- package/lib/lighthouse/filter.js.map +1 -1
- package/lib/report/create.js +11 -16
- package/lib/report/create.js.map +1 -1
- package/lib/utils/component-links.js +3 -3
- package/lib/utils/metrics.js.map +1 -1
- package/lib/webpack/constants.js +12 -11
- package/lib/webpack/constants.js.map +1 -1
- package/lib/webpack/extract/assets-size-total-insight.js +5 -5
- package/lib/webpack/extract/assets-size-total-insight.js.map +1 -1
- package/lib/webpack/extract/assets-size.js +3 -4
- package/lib/webpack/extract/assets-size.js.map +1 -1
- package/lib/webpack/extract/modules-packages-duplicate.js +117 -41
- package/lib/webpack/extract/modules-packages-duplicate.js.map +1 -1
- package/lib/webpack/extract/modules-packages.js.map +1 -1
- package/lib/webpack/extract/modules.js +0 -2
- package/lib/webpack/extract/modules.js.map +1 -1
- package/lib/webpack/metrics.js +27 -25
- package/lib/webpack/metrics.js.map +1 -1
- package/lib/webpack/types.js +24 -0
- package/lib/webpack/types.js.map +1 -1
- package/lib-esm/config/index.js +0 -8
- package/lib-esm/config/index.js.map +1 -1
- package/lib-esm/config/insights.js +6 -4
- package/lib-esm/config/insights.js.map +1 -1
- package/lib-esm/constants.js +26 -12
- package/lib-esm/constants.js.map +1 -1
- package/lib-esm/index.js +1 -0
- package/lib-esm/index.js.map +1 -1
- package/lib-esm/jobs/create-job.js +24 -12
- package/lib-esm/jobs/create-job.js.map +1 -1
- package/lib-esm/jobs/create-jobs.js +13 -14
- package/lib-esm/jobs/create-jobs.js.map +1 -1
- package/lib-esm/jobs/create-summary.js +10 -11
- package/lib-esm/jobs/create-summary.js.map +1 -1
- package/lib-esm/jobs/index.js.map +1 -1
- package/lib-esm/lighthouse/filter.js.map +1 -1
- package/lib-esm/report/create.js +11 -16
- package/lib-esm/report/create.js.map +1 -1
- package/lib-esm/utils/component-links.js +2 -2
- package/lib-esm/utils/metrics.js.map +1 -1
- package/lib-esm/webpack/constants.js +12 -11
- package/lib-esm/webpack/constants.js.map +1 -1
- package/lib-esm/webpack/extract/assets-size-total-insight.js +6 -6
- package/lib-esm/webpack/extract/assets-size-total-insight.js.map +1 -1
- package/lib-esm/webpack/extract/assets-size.js +3 -4
- package/lib-esm/webpack/extract/assets-size.js.map +1 -1
- package/lib-esm/webpack/extract/modules-packages-duplicate.js +119 -41
- package/lib-esm/webpack/extract/modules-packages-duplicate.js.map +1 -1
- package/lib-esm/webpack/extract/modules-packages.js.map +1 -1
- package/lib-esm/webpack/extract/modules.js +0 -3
- package/lib-esm/webpack/extract/modules.js.map +1 -1
- package/lib-esm/webpack/metrics.js +27 -25
- package/lib-esm/webpack/metrics.js.map +1 -1
- package/lib-esm/webpack/types.js +23 -1
- package/lib-esm/webpack/types.js.map +1 -1
- package/package.json +13 -12
- package/src/config/index.js +0 -9
- package/src/config/insights.ts +5 -0
- package/src/constants.ts +82 -15
- package/src/index.js +1 -0
- package/src/jobs/create-job.ts +61 -0
- package/src/jobs/create-jobs.ts +28 -0
- package/src/jobs/create-summary.ts +22 -0
- package/src/jobs/{index.js → index.ts} +0 -0
- package/src/lighthouse/filter.js +8 -5
- package/src/report/create.ts +31 -24
- package/src/utils/component-links.ts +2 -2
- package/src/utils/metrics.js +8 -7
- package/src/webpack/constants.js +13 -11
- package/src/webpack/extract/assets-size-total-insight.js +6 -7
- package/src/webpack/extract/assets-size.js +29 -24
- package/src/webpack/extract/modules-packages-duplicate.ts +241 -0
- package/src/webpack/extract/modules-packages.ts +1 -1
- package/src/webpack/extract/modules.ts +1 -4
- package/src/webpack/metrics.js +27 -25
- package/src/webpack/types.ts +31 -7
- package/types/config/index.d.ts +0 -4
- package/types/config/insights.d.ts +5 -4
- package/types/constants.d.ts +68 -15
- package/types/index.d.ts +1 -0
- package/types/jobs/create-job.d.ts +2 -1
- package/types/jobs/create-jobs.d.ts +2 -1
- package/types/jobs/create-summary.d.ts +4 -1
- package/types/jobs/index.d.ts +2 -2
- package/types/lighthouse/filter.d.ts +1 -1
- package/types/report/add-row-metric-data.d.ts +10 -1
- package/types/report/create.d.ts +14 -12
- package/types/utils/component-links.d.ts +1 -1
- package/types/utils/metrics.d.ts +1 -1
- package/types/webpack/constants.d.ts +2 -1
- package/types/webpack/extract/assets-size-total-insight.d.ts +3 -2
- package/types/webpack/extract/modules-packages-duplicate.d.ts +9 -16
- package/types/webpack/extract/modules-packages.d.ts +1 -1
- package/types/webpack/types.d.ts +29 -8
- package/src/config/insights.js +0 -5
- package/src/jobs/create-job.js +0 -46
- package/src/jobs/create-jobs.js +0 -26
- package/src/jobs/create-summary.js +0 -16
- package/src/webpack/extract/modules-packages-duplicate.js +0 -102
|
@@ -1,73 +1,75 @@
|
|
|
1
1
|
import { METRIC_TYPE_FILE_SIZE, METRIC_TYPE_NUMERIC, METRIC_TYPE_PERCENTAGE, } from '../config/metrics';
|
|
2
|
+
import { FILE_TYPE_LABELS } from '../config/file-types';
|
|
3
|
+
import { Metric } from './types';
|
|
2
4
|
export const metrics = {
|
|
3
|
-
|
|
5
|
+
[Metric.BUNDLE_SIZE]: {
|
|
4
6
|
label: 'Bundle Size',
|
|
5
7
|
description: 'The total size of the assets produced by webpack',
|
|
6
8
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
7
9
|
type: METRIC_TYPE_FILE_SIZE,
|
|
8
10
|
},
|
|
9
|
-
|
|
11
|
+
[Metric.INITIAL_SIZE_JS]: {
|
|
10
12
|
label: 'Initial JS',
|
|
11
13
|
description: 'The total size of JavaScript initial chunks',
|
|
12
14
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
13
15
|
type: METRIC_TYPE_FILE_SIZE,
|
|
14
16
|
},
|
|
15
|
-
|
|
17
|
+
[Metric.INITIAL_SIZE_CSS]: {
|
|
16
18
|
label: 'Initial CSS',
|
|
17
19
|
description: 'The total size of CSS initial chunks',
|
|
18
20
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
19
21
|
type: METRIC_TYPE_FILE_SIZE,
|
|
20
22
|
},
|
|
21
|
-
|
|
23
|
+
[Metric.CACHE_INVALIDATION]: {
|
|
22
24
|
label: 'Cache Invalidation',
|
|
23
25
|
description: 'The ratio between the total changed assets and total assets size(Bundle Size)',
|
|
24
26
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
25
27
|
type: METRIC_TYPE_PERCENTAGE,
|
|
26
28
|
biggerIsBetter: false,
|
|
27
29
|
},
|
|
28
|
-
|
|
30
|
+
[Metric.CHUNK_COUNT]: {
|
|
29
31
|
label: 'Chunks',
|
|
30
32
|
description: 'The total number of chunks',
|
|
31
33
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
32
34
|
type: METRIC_TYPE_NUMERIC,
|
|
33
35
|
biggerIsBetter: false,
|
|
34
36
|
},
|
|
35
|
-
|
|
37
|
+
[Metric.ASSET_COUNT]: {
|
|
36
38
|
label: 'Assets',
|
|
37
39
|
description: 'Total number of assets',
|
|
38
40
|
url: 'https://relative-ci.com/documentation/metrics-and-data#assets',
|
|
39
41
|
type: METRIC_TYPE_NUMERIC,
|
|
40
42
|
biggerIsBetter: false,
|
|
41
43
|
},
|
|
42
|
-
|
|
44
|
+
[Metric.MODULE_COUNT]: {
|
|
43
45
|
label: 'Modules',
|
|
44
46
|
description: 'The total number of modules bundled by webpack',
|
|
45
47
|
url: 'https://relative-ci.com/documentation/metrics-and-data#modules-1',
|
|
46
48
|
type: METRIC_TYPE_NUMERIC,
|
|
47
49
|
biggerIsBetter: false,
|
|
48
50
|
},
|
|
49
|
-
|
|
51
|
+
[Metric.DUPLICATE_MODULES_COUNT]: {
|
|
50
52
|
label: 'Duplicate Modules',
|
|
51
53
|
description: 'The total number of modules that belong to more than one chunk',
|
|
52
54
|
url: 'https://relative-ci.com/documentation/metrics-and-data#modules-1',
|
|
53
55
|
type: METRIC_TYPE_NUMERIC,
|
|
54
56
|
biggerIsBetter: false,
|
|
55
57
|
},
|
|
56
|
-
|
|
58
|
+
[Metric.DUPLICATE_CODE]: {
|
|
57
59
|
label: 'Duplicate Code',
|
|
58
60
|
description: 'The percentage of total duplicate module size from the total module size',
|
|
59
61
|
url: 'https://relative-ci.com/documentation/metrics-and-data#modules-1',
|
|
60
62
|
type: METRIC_TYPE_PERCENTAGE,
|
|
61
63
|
biggerIsBetter: false,
|
|
62
64
|
},
|
|
63
|
-
|
|
65
|
+
[Metric.PACKAGE_COUNT]: {
|
|
64
66
|
label: 'Packages',
|
|
65
67
|
description: 'The total number of packages bundled by webpack',
|
|
66
68
|
url: 'https://relative-ci.com/documentation/metrics-and-data#packages',
|
|
67
69
|
type: METRIC_TYPE_NUMERIC,
|
|
68
70
|
biggerIsBetter: false,
|
|
69
71
|
},
|
|
70
|
-
|
|
72
|
+
[Metric.DUPLICATE_PACKAGES_COUNT]: {
|
|
71
73
|
label: 'Duplicate Packages',
|
|
72
74
|
description: 'The total number of duplicate packages',
|
|
73
75
|
url: 'https://relative-ci.com/documentation/metrics-and-data#packages',
|
|
@@ -75,32 +77,32 @@ export const metrics = {
|
|
|
75
77
|
biggerIsBetter: false,
|
|
76
78
|
},
|
|
77
79
|
sizes: {
|
|
78
|
-
|
|
79
|
-
label:
|
|
80
|
+
[Metric.TOTAL_SIZE_JS]: {
|
|
81
|
+
label: FILE_TYPE_LABELS.JS,
|
|
80
82
|
type: METRIC_TYPE_FILE_SIZE,
|
|
81
83
|
},
|
|
82
|
-
|
|
83
|
-
label:
|
|
84
|
+
[Metric.TOTAL_SIZE_CSS]: {
|
|
85
|
+
label: FILE_TYPE_LABELS.CSS,
|
|
84
86
|
type: METRIC_TYPE_FILE_SIZE,
|
|
85
87
|
},
|
|
86
|
-
|
|
87
|
-
label:
|
|
88
|
+
[Metric.TOTAL_SIZE_IMG]: {
|
|
89
|
+
label: FILE_TYPE_LABELS.IMG,
|
|
88
90
|
type: METRIC_TYPE_FILE_SIZE,
|
|
89
91
|
},
|
|
90
|
-
|
|
91
|
-
label:
|
|
92
|
+
[Metric.TOTAL_SIZE_MEDIA]: {
|
|
93
|
+
label: FILE_TYPE_LABELS.MEDIA,
|
|
92
94
|
type: METRIC_TYPE_FILE_SIZE,
|
|
93
95
|
},
|
|
94
|
-
|
|
95
|
-
label:
|
|
96
|
+
[Metric.TOTAL_SIZE_FONT]: {
|
|
97
|
+
label: FILE_TYPE_LABELS.FONT,
|
|
96
98
|
type: METRIC_TYPE_FILE_SIZE,
|
|
97
99
|
},
|
|
98
|
-
|
|
99
|
-
label:
|
|
100
|
+
[Metric.TOTAL_SIZE_HTML]: {
|
|
101
|
+
label: FILE_TYPE_LABELS.HTML,
|
|
100
102
|
type: METRIC_TYPE_FILE_SIZE,
|
|
101
103
|
},
|
|
102
|
-
|
|
103
|
-
label:
|
|
104
|
+
[Metric.TOTAL_SIZE_OTHER]: {
|
|
105
|
+
label: FILE_TYPE_LABELS.OTHER,
|
|
104
106
|
type: METRIC_TYPE_FILE_SIZE,
|
|
105
107
|
},
|
|
106
108
|
},
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/webpack/metrics.js"],"names":[],"mappings":"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"}
|
package/lib-esm/webpack/types.js
CHANGED
|
@@ -1,2 +1,24 @@
|
|
|
1
|
-
export
|
|
1
|
+
export const METRIC_TOTALS_SUFIX_ALL = 'ALL';
|
|
2
|
+
export const METRIC_TOTALS_PREFIX = 'totalSizeByType';
|
|
3
|
+
export var Metric;
|
|
4
|
+
(function (Metric) {
|
|
5
|
+
Metric["BUNDLE_SIZE"] = "totalSizeByTypeALL";
|
|
6
|
+
Metric["INITIAL_SIZE_JS"] = "totalInitialSizeJS";
|
|
7
|
+
Metric["INITIAL_SIZE_CSS"] = "totalInitialSizeCSS";
|
|
8
|
+
Metric["CACHE_INVALIDATION"] = "cacheInvalidation";
|
|
9
|
+
Metric["ASSET_COUNT"] = "assetCount";
|
|
10
|
+
Metric["CHUNK_COUNT"] = "chunkCount";
|
|
11
|
+
Metric["MODULE_COUNT"] = "moduleCount";
|
|
12
|
+
Metric["DUPLICATE_MODULES_COUNT"] = "duplicateModulesCount";
|
|
13
|
+
Metric["DUPLICATE_CODE"] = "duplicateCode";
|
|
14
|
+
Metric["PACKAGE_COUNT"] = "packageCount";
|
|
15
|
+
Metric["DUPLICATE_PACKAGES_COUNT"] = "duplicatePackagesCount";
|
|
16
|
+
Metric["TOTAL_SIZE_JS"] = "totalSizeByTypeJS";
|
|
17
|
+
Metric["TOTAL_SIZE_CSS"] = "totalSizeByTypeCSS";
|
|
18
|
+
Metric["TOTAL_SIZE_IMG"] = "totalSizeByTypeIMG";
|
|
19
|
+
Metric["TOTAL_SIZE_MEDIA"] = "totalSizeByTypeMEDIA";
|
|
20
|
+
Metric["TOTAL_SIZE_FONT"] = "totalSizeByTypeFONT";
|
|
21
|
+
Metric["TOTAL_SIZE_HTML"] = "totalSizeByTypeHTML";
|
|
22
|
+
Metric["TOTAL_SIZE_OTHER"] = "totalSizeByTypeOTHER";
|
|
23
|
+
})(Metric || (Metric = {}));
|
|
2
24
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/webpack/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/webpack/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAEtD,MAAM,CAAN,IAAY,MAmBX;AAnBD,WAAY,MAAM;IAChB,4CAAkC,CAAA;IAClC,gDAAsC,CAAA;IACtC,kDAAwC,CAAA;IACxC,kDAAwC,CAAA;IACxC,oCAA0B,CAAA;IAC1B,oCAA0B,CAAA;IAC1B,sCAA4B,CAAA;IAC5B,2DAAiD,CAAA;IACjD,0CAAgC,CAAA;IAChC,wCAA8B,CAAA;IAC9B,6DAAmD,CAAA;IACnD,6CAAmC,CAAA;IACnC,+CAAqC,CAAA;IACrC,+CAAqC,CAAA;IACrC,mDAAyC,CAAA;IACzC,iDAAuC,CAAA;IACvC,iDAAuC,CAAA;IACvC,mDAAyC,CAAA;AAC3C,CAAC,EAnBW,MAAM,KAAN,MAAM,QAmBjB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bundle-stats/utils",
|
|
3
|
-
"version": "4.2.0-beta.
|
|
3
|
+
"version": "4.2.0-beta.2",
|
|
4
4
|
"description": "BundleStats utils",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib-esm/index.js",
|
|
@@ -35,27 +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.2.0-beta.
|
|
39
|
-
"@bundle-stats/plugin-webpack-validate": "^4.2.0-beta.
|
|
40
|
-
"query-string": "
|
|
41
|
-
"serialize-query-params": "
|
|
38
|
+
"@bundle-stats/plugin-webpack-filter": "^4.2.0-beta.2",
|
|
39
|
+
"@bundle-stats/plugin-webpack-validate": "^4.2.0-beta.2",
|
|
40
|
+
"query-string": "7.1.3",
|
|
41
|
+
"serialize-query-params": "2.0.2",
|
|
42
|
+
"use-query-params": "2.1.2"
|
|
42
43
|
},
|
|
43
44
|
"devDependencies": {
|
|
44
|
-
"@types/jest": "29.
|
|
45
|
+
"@types/jest": "29.4.0",
|
|
45
46
|
"@types/lodash": "4.14.191",
|
|
46
|
-
"core-js": "3.
|
|
47
|
-
"jest": "29.
|
|
48
|
-
"jest-cli": "29.
|
|
47
|
+
"core-js": "3.27.2",
|
|
48
|
+
"jest": "29.4.0",
|
|
49
|
+
"jest-cli": "29.4.0",
|
|
49
50
|
"jest-date-mock": "1.0.8",
|
|
50
51
|
"lodash": "4.17.21",
|
|
51
52
|
"regenerator-runtime": "0.13.11",
|
|
52
|
-
"rimraf": "
|
|
53
|
-
"ts-jest": "29.0.
|
|
53
|
+
"rimraf": "4.1.2",
|
|
54
|
+
"ts-jest": "29.0.5",
|
|
54
55
|
"typescript": "4.9.4"
|
|
55
56
|
},
|
|
56
57
|
"peerDependencies": {
|
|
57
58
|
"core-js": "^3.0.0",
|
|
58
59
|
"lodash": "^4.0.0"
|
|
59
60
|
},
|
|
60
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "71463489365dbe443e44ffb6260701fc6e0aea1b"
|
|
61
62
|
}
|
package/src/config/index.js
CHANGED
|
@@ -6,12 +6,3 @@ export * from './delta';
|
|
|
6
6
|
|
|
7
7
|
export const PACKAGES_SEPARATOR = ':';
|
|
8
8
|
export const PACKAGE_ID_SEPARATOR = '~';
|
|
9
|
-
|
|
10
|
-
export const SOURCE_PATH_WEBPACK_STATS = 'webpack';
|
|
11
|
-
export const SOURCE_PATH_LIGHTHOUSE = 'lighthouse';
|
|
12
|
-
export const SOURCE_PATH_BROWSERTIME = 'browsertime';
|
|
13
|
-
export const SOURCE_PATHS = [
|
|
14
|
-
SOURCE_PATH_WEBPACK_STATS,
|
|
15
|
-
SOURCE_PATH_LIGHTHOUSE,
|
|
16
|
-
SOURCE_PATH_BROWSERTIME,
|
|
17
|
-
];
|
package/src/constants.ts
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
|
+
import { InsightType } from './config/insights';
|
|
2
|
+
|
|
3
|
+
export enum Source {
|
|
4
|
+
webpack = 'webpack',
|
|
5
|
+
lighthouse = 'lighthouse',
|
|
6
|
+
browsertime = 'browsertime',
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type SourceData = Record<string, unknown>;
|
|
10
|
+
|
|
1
11
|
export enum MetricTypeType {
|
|
2
|
-
'METRIC_TYPE_NUMERIC',
|
|
3
|
-
'METRIC_TYPE_SCORE',
|
|
4
|
-
'METRIC_TYPE_FILE_SIZE',
|
|
5
|
-
'METRIC_TYPE_DURATION',
|
|
6
|
-
'METRIC_TYPE_PERCENTAGE'
|
|
12
|
+
'METRIC_TYPE_NUMERIC' = 'METRIC_TYPE_NUMERIC',
|
|
13
|
+
'METRIC_TYPE_SCORE' = 'METRIC_TYPE_SCORE',
|
|
14
|
+
'METRIC_TYPE_FILE_SIZE' = 'METRIC_TYPE_FILE_SIZE',
|
|
15
|
+
'METRIC_TYPE_DURATION' = 'METRIC_TYPE_DURATION',
|
|
16
|
+
'METRIC_TYPE_PERCENTAGE' = 'METRIC_TYPE_PERCENTAGE',
|
|
7
17
|
}
|
|
8
18
|
|
|
9
19
|
export interface MetricTypeConfig {
|
|
@@ -18,13 +28,13 @@ export interface MetricType extends MetricTypeConfig {
|
|
|
18
28
|
}
|
|
19
29
|
|
|
20
30
|
export enum MetricRunInfoDeltaType {
|
|
21
|
-
'HIGH_NEGATIVE',
|
|
22
|
-
'NEGATIVE',
|
|
23
|
-
'LOW_NEGATIVE',
|
|
24
|
-
'NO_CHANGE',
|
|
25
|
-
'LOW_POSITIVE',
|
|
26
|
-
'POSITIVE',
|
|
27
|
-
'HIGH_POSITIVE',
|
|
31
|
+
'HIGH_NEGATIVE' = 'HIGH_NEGATIVE',
|
|
32
|
+
'NEGATIVE' = 'NEGATIVE',
|
|
33
|
+
'LOW_NEGATIVE' = 'LOW_NEGATIVE',
|
|
34
|
+
'NO_CHANGE' = 'NO_CHANGE',
|
|
35
|
+
'LOW_POSITIVE' = 'LOW_POSITIVE',
|
|
36
|
+
'POSITIVE' = 'POSITIVE',
|
|
37
|
+
'HIGH_POSITIVE' = 'HIGH_POSITIVE',
|
|
28
38
|
}
|
|
29
39
|
|
|
30
40
|
export interface MetricRun {
|
|
@@ -35,13 +45,70 @@ export interface MetricRunInfo {
|
|
|
35
45
|
value: number;
|
|
36
46
|
displayValue: string;
|
|
37
47
|
delta?: number;
|
|
48
|
+
deltaPercentage?: number;
|
|
49
|
+
deltaType?: MetricRunInfoDeltaType;
|
|
38
50
|
displayDelta?: string;
|
|
39
51
|
displayDeltaPercentage?: string;
|
|
40
|
-
deltaType?: MetricRunInfoDeltaType;
|
|
41
52
|
}
|
|
42
53
|
|
|
43
|
-
export
|
|
44
|
-
|
|
54
|
+
export type JobSection<T = object> = Record<Source, T>;
|
|
55
|
+
|
|
56
|
+
export enum JobSectionId {
|
|
57
|
+
meta = 'meta',
|
|
58
|
+
insights = 'insights',
|
|
59
|
+
summary = 'summary',
|
|
60
|
+
metrics = 'metrics',
|
|
61
|
+
rawData = 'rawData',
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface JobSummaryItem {
|
|
65
|
+
baseline: number;
|
|
66
|
+
current: number;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface JobInsight<T = object> {
|
|
70
|
+
type: InsightType;
|
|
71
|
+
data: T;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface JobInsightAssetsSizeTotalData {
|
|
75
|
+
text: string;
|
|
76
|
+
md: string;
|
|
77
|
+
info: MetricRunInfo;
|
|
78
|
+
}
|
|
79
|
+
export type JobInsightDuplicatePackagesData = Record<string, Array<string>>;
|
|
80
|
+
|
|
81
|
+
export interface JobInsightDuplicatePackagesV3Data {
|
|
82
|
+
text: string;
|
|
83
|
+
packages: Record<string, Array<string>>;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export type JobSummarySource = Record<string, JobSummaryItem>;
|
|
87
|
+
export type JobSummary = JobSection<JobSummarySource>;
|
|
88
|
+
|
|
89
|
+
export interface JobInsights {
|
|
90
|
+
[Source.webpack]: {
|
|
91
|
+
assetsSizeTotal: JobInsight<JobInsightAssetsSizeTotalData>;
|
|
92
|
+
duplicatePackages?: JobInsight<JobInsightDuplicatePackagesData>;
|
|
93
|
+
duplicatePackagesV3?: JobInsight<JobInsightDuplicatePackagesV3Data>;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export type JobMetricsSource = Record<string, MetricRun | Record<string, MetricRun>>;
|
|
98
|
+
export type JobMetrics = JobSection<JobMetricsSource>;
|
|
99
|
+
|
|
100
|
+
export interface JobData {
|
|
101
|
+
[JobSectionId.meta]?: JobSection;
|
|
102
|
+
[JobSectionId.insights]?: JobInsights;
|
|
103
|
+
[JobSectionId.summary]?: JobSummary;
|
|
104
|
+
[JobSectionId.metrics]?: JobMetrics;
|
|
105
|
+
[JobSectionId.rawData]?: JobSection;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface Job extends JobData {
|
|
109
|
+
internalBuildNumber: number;
|
|
110
|
+
// @TODO(v5): Remove or move to report
|
|
111
|
+
label: string;
|
|
45
112
|
}
|
|
46
113
|
|
|
47
114
|
export interface LighthouseSource {
|
package/src/index.js
CHANGED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import merge from 'lodash/merge';
|
|
2
|
+
|
|
3
|
+
import { createSummary } from './create-summary';
|
|
4
|
+
import * as webpack from '../webpack';
|
|
5
|
+
import * as lighthouse from '../lighthouse';
|
|
6
|
+
import * as browsertime from '../browsertime';
|
|
7
|
+
import { JobData, JobMetricsSource, Source, SourceData } from '../constants';
|
|
8
|
+
|
|
9
|
+
interface SourceResult {
|
|
10
|
+
meta: {};
|
|
11
|
+
insights: {};
|
|
12
|
+
metrics: JobMetricsSource;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface SourceModule {
|
|
16
|
+
SUMMARY_METRIC_PATHS: Array<string>;
|
|
17
|
+
extract: (rawData: any, balien: any) => any;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const SOURCE_MODULES: Record<string, SourceModule> = { webpack, lighthouse, browsertime };
|
|
21
|
+
|
|
22
|
+
export const createJob = (source: SourceData, baseline?: JobData): JobData =>
|
|
23
|
+
Object.values(Source).reduce((agg, sourcePath) => {
|
|
24
|
+
const rawData = source[sourcePath];
|
|
25
|
+
|
|
26
|
+
if (!rawData) {
|
|
27
|
+
return agg;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const sourceModule = SOURCE_MODULES[sourcePath];
|
|
31
|
+
|
|
32
|
+
if (!sourceModule) {
|
|
33
|
+
return agg;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const extractedData: SourceResult = sourceModule.extract(rawData, baseline);
|
|
37
|
+
|
|
38
|
+
const summary = createSummary(
|
|
39
|
+
SOURCE_MODULES[sourcePath].SUMMARY_METRIC_PATHS,
|
|
40
|
+
baseline?.metrics?.[sourcePath],
|
|
41
|
+
extractedData?.metrics,
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
return merge({}, agg, {
|
|
45
|
+
meta: {
|
|
46
|
+
[sourcePath]: extractedData.meta,
|
|
47
|
+
},
|
|
48
|
+
insights: {
|
|
49
|
+
[sourcePath]: extractedData.insights,
|
|
50
|
+
},
|
|
51
|
+
summary: {
|
|
52
|
+
[sourcePath]: summary,
|
|
53
|
+
},
|
|
54
|
+
metrics: {
|
|
55
|
+
[sourcePath]: extractedData.metrics,
|
|
56
|
+
},
|
|
57
|
+
rawData: {
|
|
58
|
+
[sourcePath]: rawData,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
}, {});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createJob } from './create-job';
|
|
2
|
+
import { Job, SourceData } from '../constants';
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Create jobs from sources ([current, ..., baseline])
|
|
6
|
+
*/
|
|
7
|
+
export const createJobs = (sources: Array<SourceData>): Array<Job> => {
|
|
8
|
+
const jobs = [] as Array<Job>;
|
|
9
|
+
|
|
10
|
+
for (let i = sources.length - 1; i >= 0; i -= 1) {
|
|
11
|
+
const source = sources[i];
|
|
12
|
+
const baseline = jobs.length > 0 ? jobs[jobs.length - 1] : undefined;
|
|
13
|
+
const jobData = createJob(source, baseline);
|
|
14
|
+
|
|
15
|
+
const internalBuildNumber = sources.length - i;
|
|
16
|
+
const label = `Job #${internalBuildNumber}`;
|
|
17
|
+
|
|
18
|
+
const job = {
|
|
19
|
+
...jobData,
|
|
20
|
+
internalBuildNumber,
|
|
21
|
+
label,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
jobs.unshift(job);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return jobs;
|
|
28
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import get from 'lodash/get';
|
|
2
|
+
|
|
3
|
+
import { JobMetricsSource, JobSummaryItem } from '../constants';
|
|
4
|
+
|
|
5
|
+
type JobSummary = Record<string, JobSummaryItem>;
|
|
6
|
+
|
|
7
|
+
export const createSummary = (
|
|
8
|
+
metricPaths: Array<string>,
|
|
9
|
+
baselineMetricsSource: JobMetricsSource | null | undefined,
|
|
10
|
+
currentMetricsSource: JobMetricsSource,
|
|
11
|
+
): JobSummary => {
|
|
12
|
+
const result: JobSummary = {};
|
|
13
|
+
|
|
14
|
+
metricPaths.forEach((metric) => {
|
|
15
|
+
result[metric] = {
|
|
16
|
+
baseline: get(baselineMetricsSource, `${metric}.value`, 0) as number,
|
|
17
|
+
current: get(currentMetricsSource, `${metric}.value`, 0) as number,
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return result;
|
|
22
|
+
};
|
|
File without changes
|
package/src/lighthouse/filter.js
CHANGED
|
@@ -4,7 +4,7 @@ import pick from 'lodash/pick';
|
|
|
4
4
|
* Filter Lightouse source file
|
|
5
5
|
*
|
|
6
6
|
* @param {Object} source
|
|
7
|
-
* @return {import('
|
|
7
|
+
* @return {import('../constants').LighthouseSource}
|
|
8
8
|
*/
|
|
9
9
|
export const filter = (source) => {
|
|
10
10
|
// filter meta data
|
|
@@ -20,10 +20,13 @@ export const filter = (source) => {
|
|
|
20
20
|
);
|
|
21
21
|
|
|
22
22
|
// filter audits
|
|
23
|
-
const audits = Object.entries(source.audits).reduce(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
const audits = Object.entries(source.audits).reduce(
|
|
24
|
+
(agg, [auditId, auditData]) => ({
|
|
25
|
+
...agg,
|
|
26
|
+
[auditId]: pick(auditData, ['score', 'numericValue']),
|
|
27
|
+
}),
|
|
28
|
+
{},
|
|
29
|
+
);
|
|
27
30
|
|
|
28
31
|
return {
|
|
29
32
|
...meta,
|
package/src/report/create.ts
CHANGED
|
@@ -1,45 +1,55 @@
|
|
|
1
1
|
import isEmpty from 'lodash/isEmpty';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { MetricRunInfo, Job, JobSummarySource, Source } from '../constants';
|
|
4
4
|
import { getGlobalMetricType, getMetricRunInfo } from '../utils/metrics';
|
|
5
5
|
import * as webpack from '../webpack';
|
|
6
6
|
/* @ts-ignore */
|
|
7
7
|
import { version } from '../../package.json';
|
|
8
8
|
|
|
9
|
-
interface
|
|
10
|
-
|
|
11
|
-
baseline: number;
|
|
9
|
+
interface ReportMetricRunInfo extends MetricRunInfo {
|
|
10
|
+
label: string;
|
|
12
11
|
}
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
type ReportSummary = Record<string, Array<ReportMetricRunInfo>>;
|
|
14
|
+
|
|
15
|
+
interface JobRun {
|
|
16
|
+
internalBuildNumber: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
interface Report {
|
|
20
|
+
createdAt: string;
|
|
21
|
+
version: string;
|
|
22
|
+
summary: ReportSummary;
|
|
23
|
+
runs: Array<JobRun>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const createReport = (jobs: Array<Job>): Report => {
|
|
15
27
|
const insights = jobs[0]?.insights;
|
|
16
28
|
|
|
17
|
-
|
|
18
|
-
|
|
29
|
+
// Add summary report data
|
|
30
|
+
const summary: Record<string, Array<ReportMetricRunInfo>> = {};
|
|
31
|
+
|
|
32
|
+
Object.values(Source).forEach((sourceId) => {
|
|
33
|
+
const sourceSummary = jobs[0]?.summary?.[sourceId] as JobSummarySource;
|
|
19
34
|
|
|
20
35
|
if (!sourceSummary) {
|
|
21
|
-
return
|
|
36
|
+
return;
|
|
22
37
|
}
|
|
23
38
|
|
|
24
|
-
const
|
|
39
|
+
const summaryEntries = Object.entries(sourceSummary).map(([metricId, summaryData]) => {
|
|
25
40
|
const metric = getGlobalMetricType(`${sourceId}.${metricId}`);
|
|
26
|
-
|
|
27
41
|
const { current = 0, baseline = 0 } = summaryData;
|
|
28
|
-
const
|
|
42
|
+
const data = getMetricRunInfo(metric, current, baseline);
|
|
29
43
|
|
|
30
|
-
return {
|
|
31
|
-
label: metric.label,
|
|
32
|
-
...info,
|
|
33
|
-
};
|
|
44
|
+
return Object.assign(data, { label: metric.label });
|
|
34
45
|
});
|
|
35
46
|
|
|
36
|
-
|
|
37
|
-
...agg,
|
|
38
|
-
[sourceId]: output,
|
|
39
|
-
};
|
|
47
|
+
summary[sourceId] = summaryEntries;
|
|
40
48
|
}, {});
|
|
41
49
|
|
|
42
|
-
|
|
50
|
+
const sectionsData = webpack.compare(jobs);
|
|
51
|
+
|
|
52
|
+
return Object.assign(sectionsData, {
|
|
43
53
|
createdAt: new Date().toISOString(),
|
|
44
54
|
version,
|
|
45
55
|
|
|
@@ -52,8 +62,5 @@ export const createReport = (jobs: Array<any>) => {
|
|
|
52
62
|
|
|
53
63
|
// Add insights if available
|
|
54
64
|
...(!isEmpty(insights) ? { insights } : {}),
|
|
55
|
-
|
|
56
|
-
// Add webpack sections comparisons
|
|
57
|
-
...webpack.compare(jobs),
|
|
58
|
-
};
|
|
65
|
+
});
|
|
59
66
|
};
|
|
@@ -221,7 +221,7 @@ export const getBundleModulesByChunk = (
|
|
|
221
221
|
},
|
|
222
222
|
});
|
|
223
223
|
|
|
224
|
-
export const
|
|
224
|
+
export const BUNDLE_PACKAGES_COUNT: ComponentLink = {
|
|
225
225
|
section: SECTIONS.PACKAGES,
|
|
226
226
|
title: I18N.COMPONENT_LINK_PACKAGES_COUNT,
|
|
227
227
|
params: {
|
|
@@ -303,6 +303,6 @@ export const METRIC_COMPONENT_LINKS = new Map([
|
|
|
303
303
|
['webpack.moduleCount', { link: BUNDLE_MODULES }],
|
|
304
304
|
['webpack.duplicateModulesCount', { link: BUNDLE_MODULES_DUPLICATE }],
|
|
305
305
|
['webpack.duplicateCode', { link: BUNDLE_MODULES_DUPLICATE }],
|
|
306
|
-
['webpack.packageCount', { link:
|
|
306
|
+
['webpack.packageCount', { link: BUNDLE_PACKAGES_COUNT }],
|
|
307
307
|
['webpack.duplicatePackagesCount', { link: BUNDLE_PACKAGES_DUPLICATE }],
|
|
308
308
|
]);
|