@bundle-stats/utils 4.2.2 → 4.2.3-beta.1

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 (188) hide show
  1. package/README.md +15 -10
  2. package/lib/browsertime/metrics.js +22 -22
  3. package/lib/browsertime/metrics.js.map +1 -1
  4. package/lib/config/component-links.js +7 -1
  5. package/lib/config/component-links.js.map +1 -1
  6. package/lib/config/file-types.js +3 -3
  7. package/lib/config/file-types.js.map +1 -1
  8. package/lib/config/index.js +1 -2
  9. package/lib/config/index.js.map +1 -1
  10. package/lib/config/metric-types.js +28 -0
  11. package/lib/config/metric-types.js.map +1 -0
  12. package/lib/constants.js +23 -22
  13. package/lib/constants.js.map +1 -1
  14. package/lib/i18n.js +15 -10
  15. package/lib/i18n.js.map +1 -1
  16. package/lib/jobs/create-job.js +17 -7
  17. package/lib/jobs/create-job.js.map +1 -1
  18. package/lib/jobs/create-jobs.js.map +1 -1
  19. package/lib/lighthouse/metrics.js +13 -13
  20. package/lib/lighthouse/metrics.js.map +1 -1
  21. package/lib/report/add-row-metric-data.js +4 -4
  22. package/lib/report/add-row-metric-data.js.map +1 -1
  23. package/lib/report/compare-metrics.js +4 -1
  24. package/lib/report/compare-metrics.js.map +1 -1
  25. package/lib/report/create.js +17 -7
  26. package/lib/report/create.js.map +1 -1
  27. package/lib/report/get-metric-changed.js.map +1 -1
  28. package/lib/report/index.js +1 -0
  29. package/lib/report/index.js.map +1 -1
  30. package/lib/report/merge-metrics-by-key.js +1 -1
  31. package/lib/report/merge-metrics-by-key.js.map +1 -1
  32. package/lib/utils/component-links.js +191 -27
  33. package/lib/utils/component-links.js.map +1 -1
  34. package/lib/utils/date.js.map +1 -1
  35. package/lib/utils/delta.js +35 -30
  36. package/lib/utils/delta.js.map +1 -1
  37. package/lib/utils/format.js +5 -6
  38. package/lib/utils/format.js.map +1 -1
  39. package/lib/utils/insights.js.map +1 -1
  40. package/lib/utils/metrics.js +49 -32
  41. package/lib/utils/metrics.js.map +1 -1
  42. package/lib/webpack/compare.js +16 -12
  43. package/lib/webpack/compare.js.map +1 -1
  44. package/lib/webpack/extract/assets.js +7 -1
  45. package/lib/webpack/extract/assets.js.map +1 -1
  46. package/lib/webpack/extract/meta.js.map +1 -1
  47. package/lib/webpack/extract/modules-packages-duplicate.js +13 -8
  48. package/lib/webpack/extract/modules-packages-duplicate.js.map +1 -1
  49. package/lib/webpack/extract/modules-packages-new-insight.js.map +1 -1
  50. package/lib/webpack/extract/modules-packages.js +8 -1
  51. package/lib/webpack/extract/modules-packages.js.map +1 -1
  52. package/lib/webpack/extract/modules.js +45 -20
  53. package/lib/webpack/extract/modules.js.map +1 -1
  54. package/lib/webpack/metrics.js +35 -34
  55. package/lib/webpack/metrics.js.map +1 -1
  56. package/lib/webpack/selectors.js +40 -3
  57. package/lib/webpack/selectors.js.map +1 -1
  58. package/lib/webpack/types.js +1 -1
  59. package/lib/webpack/types.js.map +1 -1
  60. package/lib/webpack/utils.js +37 -25
  61. package/lib/webpack/utils.js.map +1 -1
  62. package/lib-esm/browsertime/metrics.js +22 -22
  63. package/lib-esm/browsertime/metrics.js.map +1 -1
  64. package/lib-esm/config/component-links.js +6 -0
  65. package/lib-esm/config/component-links.js.map +1 -1
  66. package/lib-esm/config/file-types.js +3 -3
  67. package/lib-esm/config/file-types.js.map +1 -1
  68. package/lib-esm/config/index.js +1 -2
  69. package/lib-esm/config/index.js.map +1 -1
  70. package/lib-esm/config/metric-types.js +25 -0
  71. package/lib-esm/config/metric-types.js.map +1 -0
  72. package/lib-esm/constants.js +19 -18
  73. package/lib-esm/constants.js.map +1 -1
  74. package/lib-esm/i18n.js +15 -10
  75. package/lib-esm/i18n.js.map +1 -1
  76. package/lib-esm/jobs/create-job.js.map +1 -1
  77. package/lib-esm/jobs/create-jobs.js.map +1 -1
  78. package/lib-esm/lighthouse/metrics.js +13 -13
  79. package/lib-esm/lighthouse/metrics.js.map +1 -1
  80. package/lib-esm/report/add-row-metric-data.js +4 -4
  81. package/lib-esm/report/add-row-metric-data.js.map +1 -1
  82. package/lib-esm/report/compare-metrics.js +4 -1
  83. package/lib-esm/report/compare-metrics.js.map +1 -1
  84. package/lib-esm/report/create.js.map +1 -1
  85. package/lib-esm/report/get-metric-changed.js.map +1 -1
  86. package/lib-esm/report/index.js +1 -0
  87. package/lib-esm/report/index.js.map +1 -1
  88. package/lib-esm/report/merge-metrics-by-key.js +1 -1
  89. package/lib-esm/report/merge-metrics-by-key.js.map +1 -1
  90. package/lib-esm/utils/component-links.js +185 -27
  91. package/lib-esm/utils/component-links.js.map +1 -1
  92. package/lib-esm/utils/date.js.map +1 -1
  93. package/lib-esm/utils/delta.js +32 -26
  94. package/lib-esm/utils/delta.js.map +1 -1
  95. package/lib-esm/utils/format.js.map +1 -1
  96. package/lib-esm/utils/insights.js.map +1 -1
  97. package/lib-esm/utils/metrics.js +44 -27
  98. package/lib-esm/utils/metrics.js.map +1 -1
  99. package/lib-esm/webpack/compare.js +7 -5
  100. package/lib-esm/webpack/compare.js.map +1 -1
  101. package/lib-esm/webpack/extract/assets.js +7 -1
  102. package/lib-esm/webpack/extract/assets.js.map +1 -1
  103. package/lib-esm/webpack/extract/meta.js.map +1 -1
  104. package/lib-esm/webpack/extract/modules-packages-duplicate.js +13 -8
  105. package/lib-esm/webpack/extract/modules-packages-duplicate.js.map +1 -1
  106. package/lib-esm/webpack/extract/modules-packages-new-insight.js.map +1 -1
  107. package/lib-esm/webpack/extract/modules-packages.js +8 -1
  108. package/lib-esm/webpack/extract/modules-packages.js.map +1 -1
  109. package/lib-esm/webpack/extract/modules.js +45 -20
  110. package/lib-esm/webpack/extract/modules.js.map +1 -1
  111. package/lib-esm/webpack/metrics.js +35 -34
  112. package/lib-esm/webpack/metrics.js.map +1 -1
  113. package/lib-esm/webpack/selectors.js +35 -1
  114. package/lib-esm/webpack/selectors.js.map +1 -1
  115. package/lib-esm/webpack/utils.js +37 -25
  116. package/lib-esm/webpack/utils.js.map +1 -1
  117. package/package.json +20 -22
  118. package/src/browsertime/metrics.js +22 -22
  119. package/src/config/component-links.js +7 -0
  120. package/src/config/file-types.js +3 -3
  121. package/src/config/index.js +1 -2
  122. package/src/config/metric-types.ts +25 -0
  123. package/src/constants.ts +94 -34
  124. package/src/i18n.js +15 -10
  125. package/src/lighthouse/metrics.js +13 -15
  126. package/src/report/add-row-metric-data.ts +42 -38
  127. package/src/report/compare-metrics.ts +7 -4
  128. package/src/report/create.ts +1 -1
  129. package/src/report/index.js +1 -0
  130. package/src/report/merge-metrics-by-key.ts +7 -5
  131. package/src/report/types.ts +17 -0
  132. package/src/utils/component-links.ts +276 -35
  133. package/src/utils/delta.ts +98 -0
  134. package/src/utils/metrics.ts +88 -0
  135. package/src/webpack/compare.ts +62 -0
  136. package/src/webpack/extract/assets.ts +13 -7
  137. package/src/webpack/extract/modules-packages-duplicate.ts +23 -15
  138. package/src/webpack/extract/modules-packages.ts +74 -61
  139. package/src/webpack/extract/modules.ts +66 -33
  140. package/src/webpack/{metrics.js → metrics.ts} +41 -39
  141. package/src/webpack/selectors.js +82 -9
  142. package/src/webpack/types.ts +13 -4
  143. package/src/webpack/utils.ts +173 -0
  144. package/types/browsertime/compare.d.ts +1 -1
  145. package/types/browsertime/metrics.d.ts +63 -43
  146. package/types/config/component-links.d.ts +26 -18
  147. package/types/config/file-types.d.ts +17 -17
  148. package/types/config/index.d.ts +1 -2
  149. package/types/config/metric-types.d.ts +2 -0
  150. package/types/constants.d.ts +52 -29
  151. package/types/i18n.d.ts +19 -14
  152. package/types/lighthouse/compare.d.ts +1 -1
  153. package/types/lighthouse/filter.d.ts +1 -1
  154. package/types/lighthouse/metrics.d.ts +36 -28
  155. package/types/report/add-row-metric-data.d.ts +1 -16
  156. package/types/report/compare-metrics.d.ts +1 -1
  157. package/types/report/index.d.ts +1 -0
  158. package/types/report/merge-metrics-by-key.d.ts +1 -1
  159. package/types/report/types.d.ts +12 -0
  160. package/types/utils/component-links.d.ts +24 -8
  161. package/types/utils/delta.d.ts +4 -6
  162. package/types/utils/metrics.d.ts +4 -3
  163. package/types/webpack/compare.d.ts +11 -14
  164. package/types/webpack/constants.d.ts +1 -1
  165. package/types/webpack/extract/assets-size-total-insight.d.ts +2 -2
  166. package/types/webpack/extract/modules-packages-duplicate.d.ts +3 -3
  167. package/types/webpack/extract/modules.d.ts +1 -1
  168. package/types/webpack/metrics.d.ts +7 -153
  169. package/types/webpack/selectors.d.ts +21 -7
  170. package/types/webpack/types.d.ts +4 -4
  171. package/types/webpack/utils.d.ts +8 -8
  172. package/CHANGELOG.md +0 -333
  173. package/lib/config/delta.js +0 -13
  174. package/lib/config/delta.js.map +0 -1
  175. package/lib/config/metrics.js +0 -32
  176. package/lib/config/metrics.js.map +0 -1
  177. package/lib-esm/config/delta.js +0 -10
  178. package/lib-esm/config/delta.js.map +0 -1
  179. package/lib-esm/config/metrics.js +0 -29
  180. package/lib-esm/config/metrics.js.map +0 -1
  181. package/src/config/delta.js +0 -11
  182. package/src/config/metrics.js +0 -35
  183. package/src/utils/delta.js +0 -94
  184. package/src/utils/metrics.js +0 -92
  185. package/src/webpack/compare.js +0 -81
  186. package/src/webpack/utils.js +0 -155
  187. package/types/config/delta.d.ts +0 -9
  188. package/types/config/metrics.d.ts +0 -35
@@ -18,7 +18,41 @@ const getSizeMetrics = (job) => {
18
18
  }), {});
19
19
  };
20
20
  const getAssetsMetrics = (job) => get(job, 'metrics.webpack.assets', {});
21
- const getModulesMetrics = (job) => get(job, 'metrics.webpack.modules', {});
21
+ export const getModulesMetrics = (job) => {
22
+ const modules = get(job, 'metrics.webpack.modules', {});
23
+ const result = {};
24
+ Object.entries(modules).forEach(([moduleId, moduleData]) => {
25
+ result[moduleId] = {
26
+ ...moduleData,
27
+ originalValue: moduleData.value,
28
+ };
29
+ });
30
+ return result;
31
+ };
32
+ export const getModulesDuplicateSizeMetrics = (job) => {
33
+ const modules = get(job, 'metrics.webpack.modules', {});
34
+ const result = {};
35
+ Object.entries(modules).forEach(([moduleId, moduleData]) => {
36
+ result[moduleId] = {
37
+ ...moduleData,
38
+ value: moduleData.value * (moduleData.chunkIds.length - 1),
39
+ originalValue: moduleData.value,
40
+ };
41
+ });
42
+ return result;
43
+ };
44
+ export const getModulesTotalSizeMetrics = (job) => {
45
+ const modules = get(job, 'metrics.webpack.modules', {});
46
+ const result = {};
47
+ Object.entries(modules).forEach(([moduleId, moduleData]) => {
48
+ result[moduleId] = {
49
+ ...moduleData,
50
+ value: moduleData.value * moduleData.chunkIds.length,
51
+ originalValue: moduleData.value,
52
+ };
53
+ });
54
+ return result;
55
+ };
22
56
  const getPackageMetrics = (job) => get(job, 'metrics.webpack.packages', {});
23
57
  export const selectors = {
24
58
  [SECTION_WEBPACK_STATS]: getStatsMetrics,
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../src/webpack/selectors.js"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,YAAY,CAAC;AAC7B,OAAO,IAAI,MAAM,aAAa,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAYnD,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,EAAE;IAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IAGjD,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5D,GAAG,GAAG;QACN,CAAC,WAAW,GAAG,EAAE,CAAC,EAAE,KAAK;KAC1B,CAAC,EAAE,EAAE,CAAC,CAAC;AACV,CAAC,CAAC;AAaF,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,EAAE;IAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC;IAGtD,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1D,GAAG,GAAG;QACN,CAAC,iBAAiB,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC;KACvC,CAAC,EAAE,EAAE,CAAC,CAAC;AACV,CAAC,CAAC;AAaF,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;AAazE,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAC;AAa3E,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,CAAC,qBAAqB,CAAC,EAAE,eAAe;IACxC,CAAC,qBAAqB,CAAC,EAAE,cAAc;IACvC,CAAC,sBAAsB,CAAC,EAAE,gBAAgB;IAC1C,CAAC,uBAAuB,CAAC,EAAE,iBAAiB;IAC5C,CAAC,wBAAwB,CAAC,EAAE,iBAAiB;CAC9C,CAAC"}
1
+ {"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../src/webpack/selectors.js"],"names":[],"mappings":"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"}
@@ -1,43 +1,54 @@
1
- import last from 'lodash/last';
2
- import map from 'lodash/map';
3
1
  import round from 'lodash/round';
4
2
  import { PACKAGES_SEPARATOR, PACKAGE_ID_SEPARATOR } from '../config';
5
3
  import { createGetMetricType } from '../utils/metrics';
6
4
  import { metrics } from './metrics';
7
- const HASH_PATTERN = '[a-f|0-9]{5,32}';
8
- const HASH_SEPARATOR_PATTERN = '[-|.]';
9
- const EXTENSION_PATTERN = /(?:\.[a-z|0-9]{2,}){1,}/;
5
+ const HEX_HASH_PATTERN = '[a-f0-9]{5,32}';
6
+ const HEX_HASH_SEPARATOR_PATTERN = '[-_.~]';
7
+ const BASE64URL_HASH_PATTERN = '[A-Za-z0-9_-]{4,}';
8
+ const BASE64URL_SEPARATOR_PATTERN = '[.~]';
9
+ const EXTENSION_PATTERN = /(?:\.[a-z0-9]{2,}){1,}/;
10
10
  const PATTERNS = [
11
- `(.*)${HASH_SEPARATOR_PATTERN}${HASH_PATTERN}(${EXTENSION_PATTERN.source})$`,
12
- `(static)/${HASH_PATTERN}(.*${EXTENSION_PATTERN.source})$`,
13
- ].map((pattern) => new RegExp(pattern));
11
+ {
12
+ pattern: new RegExp(`(.*)${HEX_HASH_SEPARATOR_PATTERN}${HEX_HASH_PATTERN}(${EXTENSION_PATTERN.source})$`),
13
+ replace: '$1$2',
14
+ },
15
+ {
16
+ pattern: new RegExp(`(.*)${BASE64URL_SEPARATOR_PATTERN}${BASE64URL_HASH_PATTERN}(${EXTENSION_PATTERN.source})$`),
17
+ replace: '$1$2',
18
+ },
19
+ {
20
+ pattern: new RegExp(`(static)/${HEX_HASH_PATTERN}(.*${EXTENSION_PATTERN.source})$`),
21
+ replace: '$1$2',
22
+ },
23
+ {
24
+ pattern: new RegExp(`(static)/${BASE64URL_HASH_PATTERN}/(_.*${EXTENSION_PATTERN.source})$`),
25
+ replace: '$1/[hash]/$2',
26
+ },
27
+ ];
14
28
  const NO_BASENAME = /(^|.*\/)\..*$/;
15
- export const getAssetName = (assetFilepath) => {
16
- if (!assetFilepath) {
29
+ export const getAssetName = (statsAssetPath) => {
30
+ if (!statsAssetPath) {
17
31
  return '';
18
32
  }
19
- let result;
20
- for (let i = 0; i < PATTERNS.length && !result; i += 1) {
21
- const pattern = PATTERNS[i];
22
- const extracted = assetFilepath.replace(pattern, '$1$2');
23
- if (extracted && extracted !== assetFilepath && !NO_BASENAME.test(extracted)) {
24
- result = extracted;
33
+ for (let i = 0; i < PATTERNS.length; i += 1) {
34
+ const { pattern, replace } = PATTERNS[i];
35
+ const extracted = statsAssetPath.replace(pattern, replace);
36
+ if (extracted && extracted !== statsAssetPath && !NO_BASENAME.test(extracted)) {
37
+ return extracted;
25
38
  }
26
39
  }
27
- if (!result) {
28
- return assetFilepath;
29
- }
30
- return result;
40
+ return statsAssetPath;
31
41
  };
32
42
  const NAME_WITH_LOADERS = /!/;
33
- const NAME_WITH_MODULES = /\s\+\s\d*\smodules$/;
43
+ const NAME_WITH_MODULES = /\s?\+\s?\d*\s?modules$/;
34
44
  const INVALID_CSS_PREFIX = /^css\s.*node_modules(?!\/)/;
35
45
  export const getModuleName = (name) => {
36
46
  if (!name) {
37
47
  return '';
38
48
  }
39
49
  if (NAME_WITH_LOADERS.test(name)) {
40
- const normalizedName = last(name.split(NAME_WITH_LOADERS));
50
+ const segments = name.split(NAME_WITH_LOADERS);
51
+ const normalizedName = segments[segments.length - 1];
41
52
  if (normalizedName === null || normalizedName === void 0 ? void 0 : normalizedName.trim()) {
42
53
  return normalizedName;
43
54
  }
@@ -68,16 +79,17 @@ export const calculateCacheInvalidation = (rows) => {
68
79
  return round((invalidated / cached) * 100, 2);
69
80
  };
70
81
  export const getMetricAdded = (runs) => {
71
- const [current, baseline] = map(runs, 'value');
82
+ const [current, baseline] = (runs === null || runs === void 0 ? void 0 : runs.map((run) => run === null || run === void 0 ? void 0 : run.value)) || [];
72
83
  return Boolean(current !== null && !baseline);
73
84
  };
74
85
  export const getMetricDeleted = (runs) => {
75
- const [current, baseline] = map(runs, 'value');
86
+ const [current, baseline] = (runs === null || runs === void 0 ? void 0 : runs.map((run) => run === null || run === void 0 ? void 0 : run.value)) || [];
76
87
  return Boolean(baseline !== null && !current);
77
88
  };
78
89
  export const getMetricType = createGetMetricType(metrics);
79
90
  export const getPackagePublicName = (packageId) => {
80
- const name = last(packageId.split(PACKAGES_SEPARATOR));
91
+ const packageNames = packageId.split(PACKAGES_SEPARATOR);
92
+ const name = packageNames[packageNames.length - 1];
81
93
  return name.split(PACKAGE_ID_SEPARATOR)[0];
82
94
  };
83
95
  export const normalizeChunkId = (chunkId) => chunkId.toString();
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/webpack/utils.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/webpack/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/utils",
3
- "version": "4.2.2",
3
+ "version": "4.2.3-beta.1",
4
4
  "description": "BundleStats utils",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -14,16 +14,16 @@
14
14
  },
15
15
  "scripts": {
16
16
  "build": "npm run build-lib && npm run build-esm",
17
- "build-lib": "npx rimraf ./lib && ../../node_modules/.bin/tsc --rootDir ./src --project tsconfig.lib.json --outDir ./lib",
18
- "build-esm": "npx rimraf ./lib-esm ./types && ../../node_modules/.bin/tsc --rootDir ./src --project tsconfig.esm.json --outDir ./lib-esm",
19
- "lint": "../../node_modules/.bin/eslint . --ext .js,.ts --resolve-plugins-relative-to ../../",
17
+ "build-lib": "rimraf ./lib && tsc --rootDir ./src --project tsconfig.lib.json --outDir ./lib",
18
+ "build-esm": "rimraf ./lib-esm ./types && tsc --rootDir ./src --project tsconfig.esm.json --outDir ./lib-esm",
19
+ "lint": "eslint",
20
20
  "test": "TZ=UTC jest src --maxWorkers=4"
21
21
  },
22
22
  "keywords": [],
23
23
  "author": {
24
24
  "name": "Viorel Cojocaru",
25
- "email": "vio@beanon.com",
26
- "url": "https://beanon.com"
25
+ "email": "vio@relative-ci.com",
26
+ "url": "https://relative-ci.com"
27
27
  },
28
28
  "license": "MIT",
29
29
  "repository": {
@@ -35,28 +35,26 @@
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.2",
39
- "@bundle-stats/plugin-webpack-validate": "^4.2.2",
40
- "query-string": "7.1.3",
41
- "serialize-query-params": "2.0.2",
42
- "use-query-params": "2.2.0"
38
+ "@bundle-stats/plugin-webpack-filter": "4.2.3-beta.1",
39
+ "@bundle-stats/plugin-webpack-validate": "4.2.3-beta.1",
40
+ "serialize-query-params": "2.0.2"
43
41
  },
44
42
  "devDependencies": {
45
- "@types/jest": "29.4.0",
46
- "@types/lodash": "4.14.191",
47
- "core-js": "3.28.0",
48
- "jest": "29.4.3",
49
- "jest-cli": "29.4.3",
50
- "jest-date-mock": "1.0.8",
43
+ "@types/jest": "29.5.14",
44
+ "@types/lodash": "4.17.18",
45
+ "core-js": "3.43.0",
46
+ "jest": "29.7.0",
47
+ "jest-cli": "29.7.0",
48
+ "jest-date-mock": "1.0.10",
51
49
  "lodash": "4.17.21",
52
- "regenerator-runtime": "0.13.11",
53
- "rimraf": "4.1.2",
54
- "ts-jest": "29.0.5",
55
- "typescript": "4.9.5"
50
+ "regenerator-runtime": "0.14.1",
51
+ "rimraf": "6.0.1",
52
+ "ts-jest": "29.4.0",
53
+ "typescript": "5.8.3"
56
54
  },
57
55
  "peerDependencies": {
58
56
  "core-js": "^3.0.0",
59
57
  "lodash": "^4.0.0"
60
58
  },
61
- "gitHead": "ee8246cd2e7b42961dd44f261e92b7433dbb8090"
59
+ "gitHead": "18734a4f1ce353ca150d7e0a40212f44a90c621e"
62
60
  }
@@ -1,88 +1,88 @@
1
- import { METRIC_TYPE_DURATION } from '../config/metrics';
1
+ import { MetricTypes } from '../constants';
2
2
 
3
3
  export const metrics = {
4
4
  firstPaint: {
5
5
  label: 'First Paint',
6
- type: METRIC_TYPE_DURATION,
6
+ type: MetricTypes.Duration,
7
7
  },
8
8
  fullyLoaded: {
9
9
  label: 'Fully Loaded',
10
- type: METRIC_TYPE_DURATION,
10
+ type: MetricTypes.Duration,
11
11
  },
12
12
  backEndTime: {
13
13
  label: 'BackEnd Time',
14
- type: METRIC_TYPE_DURATION,
14
+ type: MetricTypes.Duration,
15
15
  },
16
16
  domContentLoadedTime: {
17
17
  label: 'DOM Content Loaded Time',
18
- type: METRIC_TYPE_DURATION,
18
+ type: MetricTypes.Duration,
19
19
  },
20
20
  domInteractiveTime: {
21
21
  label: 'DOM Interactive Time',
22
- type: METRIC_TYPE_DURATION,
22
+ type: MetricTypes.Duration,
23
23
  },
24
24
  domainLookupTime: {
25
25
  label: 'Domain Lookup Time',
26
- type: METRIC_TYPE_DURATION,
26
+ type: MetricTypes.Duration,
27
27
  },
28
28
  frontEndTime: {
29
29
  label: 'FrontEnd Time',
30
- type: METRIC_TYPE_DURATION,
30
+ type: MetricTypes.Duration,
31
31
  },
32
32
  pageDownloadTime: {
33
33
  label: 'Page Download Time',
34
- type: METRIC_TYPE_DURATION,
34
+ type: MetricTypes.Duration,
35
35
  },
36
36
  pageLoadTime: {
37
37
  label: 'Page Load Time',
38
- type: METRIC_TYPE_DURATION,
38
+ type: MetricTypes.Duration,
39
39
  },
40
40
  redirectionTime: {
41
41
  label: 'Redirection Time',
42
- type: METRIC_TYPE_DURATION,
42
+ type: MetricTypes.Duration,
43
43
  },
44
44
  serverConnectionTime: {
45
45
  label: 'Server Connection Time',
46
- type: METRIC_TYPE_DURATION,
46
+ type: MetricTypes.Duration,
47
47
  },
48
48
  serverResponseTime: {
49
49
  label: 'Server Response Time',
50
- type: METRIC_TYPE_DURATION,
50
+ type: MetricTypes.Duration,
51
51
  },
52
52
  firstContentfulPaint: {
53
53
  label: 'First Contentful Paint',
54
- type: METRIC_TYPE_DURATION,
54
+ type: MetricTypes.Duration,
55
55
  },
56
56
  rumSpeedIndex: {
57
57
  label: 'RUM Speed Index',
58
- type: METRIC_TYPE_DURATION,
58
+ type: MetricTypes.Duration,
59
59
  },
60
60
  firstVisualChange: {
61
61
  label: 'First Visual Change',
62
- type: METRIC_TYPE_DURATION,
62
+ type: MetricTypes.Duration,
63
63
  },
64
64
  lastVisualChange: {
65
65
  label: 'Last Visual Change',
66
- type: METRIC_TYPE_DURATION,
66
+ type: MetricTypes.Duration,
67
67
  },
68
68
  perceptualSpeedIndex: {
69
69
  label: 'Perceptual SpeedIndex',
70
- type: METRIC_TYPE_DURATION,
70
+ type: MetricTypes.Duration,
71
71
  },
72
72
  speedIndex: {
73
73
  label: 'Speed Index',
74
- type: METRIC_TYPE_DURATION,
74
+ type: MetricTypes.Duration,
75
75
  },
76
76
  visualComplete85: {
77
77
  label: 'Visual Complete 85',
78
- type: METRIC_TYPE_DURATION,
78
+ type: MetricTypes.Duration,
79
79
  },
80
80
  visualComplete95: {
81
81
  label: 'Visual Complete 95',
82
- type: METRIC_TYPE_DURATION,
82
+ type: MetricTypes.Duration,
83
83
  },
84
84
  visualComplete99: {
85
85
  label: 'Visual Complete 99',
86
- type: METRIC_TYPE_DURATION,
86
+ type: MetricTypes.Duration,
87
87
  },
88
88
  };
@@ -1,4 +1,5 @@
1
1
  export const ASSET_ENTRY_TYPE = 'et';
2
+ export const ASSET_CHUNK = 'c';
2
3
  export const ASSET_FILE_TYPE = 'ft';
3
4
  export const MODULE_CHUNK = 'c';
4
5
  export const MODULE_FILE_TYPE = 'mft';
@@ -17,6 +18,7 @@ export const MODULE_FILTERS = {
17
18
  DUPLICATED: 'md',
18
19
  FIRST_PARTY: 'fp',
19
20
  THIRD_PARTY: 'tp',
21
+ METRIC: 'metric',
20
22
  };
21
23
 
22
24
  export const PACKAGE_FILTERS = {
@@ -36,3 +38,8 @@ export const COMPONENT = {
36
38
  BUNDLE_MODULES: 'bm',
37
39
  BUNDLE_PACKAGES: 'bp',
38
40
  };
41
+
42
+ export const MODULE_SOURCE_TYPE_LABELS = {
43
+ FIRST_PARTY: 'First party',
44
+ THIRD_PARTY: 'Third party',
45
+ };
@@ -9,7 +9,7 @@ export const FILE_TYPE_OTHER = 'OTHER';
9
9
 
10
10
  export const FILE_TYPE_PATTERNS = {
11
11
  [FILE_TYPE_CSS]: /\.css$/,
12
- [FILE_TYPE_JS]: /\.js$/,
12
+ [FILE_TYPE_JS]: /\.(js|cjs|mjs)$/,
13
13
  [FILE_TYPE_IMG]: /\.(a?png|jpe?g|webp|gif|svg|ico|avif)$/,
14
14
  [FILE_TYPE_MEDIA]: /\.(mp4|mp3|m4a|aac|mov|webm|wav|ogg)$/,
15
15
  [FILE_TYPE_FONT]: /\.(woff|woff2|ttf|otf|eot)$/,
@@ -34,14 +34,14 @@ export const FILE_TYPES = [...Object.keys(FILE_TYPE_PATTERNS), FILE_TYPE_OTHER];
34
34
  */
35
35
  export const MODULE_SOURCE_PATTERNS = {
36
36
  [FILE_TYPE_CSS]: /\.(css|styl|sass|scss|less)$/,
37
- [FILE_TYPE_JS]: /\.(jsx?|tsx?|mjs)$/,
37
+ [FILE_TYPE_JS]: /\.(jsx?|tsx?|cjs|mjs)$/,
38
38
  };
39
39
 
40
40
  export const MODULE_SOURCE_FILE_TYPES = [...Object.keys(MODULE_SOURCE_PATTERNS), FILE_TYPE_OTHER];
41
41
 
42
42
  export const MODULE_DESTINATION_PATTERNS = {
43
43
  [FILE_TYPE_CSS]: /\.css$/,
44
- [FILE_TYPE_JS]: /\.(js|mjs)$/,
44
+ [FILE_TYPE_JS]: /\.(js|cjs|mjs)$/,
45
45
  };
46
46
 
47
47
  export const MODULE_DESTINATION_FILE_TYPES = Object.keys(MODULE_DESTINATION_PATTERNS);
@@ -1,7 +1,6 @@
1
1
  export * from './component-links';
2
2
  export * from './file-types';
3
- export * from './metrics';
4
- export * from './delta';
3
+ export * from './metric-types';
5
4
 
6
5
  export const PACKAGES_SEPARATOR = ':';
7
6
  export const PACKAGE_ID_SEPARATOR = '~';
@@ -0,0 +1,25 @@
1
+ import { formatNumber, formatDuration, formatFileSize, formatPercentage } from '../utils/format';
2
+ import { MetricTypes, MetricTypeConfig } from '../constants';
3
+
4
+ export const METRIC_TYPE_CONFIGS: Record<MetricTypes, MetricTypeConfig> = {
5
+ [MetricTypes.Numeric]: {
6
+ biggerIsBetter: false,
7
+ formatter: formatNumber,
8
+ },
9
+ [MetricTypes.Score]: {
10
+ biggerIsBetter: true,
11
+ formatter: formatNumber,
12
+ },
13
+ [MetricTypes.Duration]: {
14
+ biggerIsBetter: false,
15
+ formatter: formatDuration,
16
+ },
17
+ [MetricTypes.FileSize]: {
18
+ biggerIsBetter: false,
19
+ formatter: formatFileSize,
20
+ },
21
+ [MetricTypes.Percentage]: {
22
+ biggerIsBetter: true,
23
+ formatter: formatPercentage,
24
+ },
25
+ };
package/src/constants.ts CHANGED
@@ -12,47 +12,92 @@ export enum InsightType {
12
12
  WARNING = 'warning',
13
13
  }
14
14
 
15
- export enum MetricTypeType {
16
- METRIC_TYPE_NUMERIC = 'METRIC_TYPE_NUMERIC',
17
- METRIC_TYPE_SCORE = 'METRIC_TYPE_SCORE',
18
- METRIC_TYPE_FILE_SIZE = 'METRIC_TYPE_FILE_SIZE',
19
- METRIC_TYPE_DURATION = 'METRIC_TYPE_DURATION',
20
- METRIC_TYPE_PERCENTAGE = 'METRIC_TYPE_PERCENTAGE',
15
+ /**
16
+ * Generic metric type names
17
+ */
18
+ export enum MetricTypes {
19
+ Numeric = 'METRIC_TYPE_NUMERIC',
20
+ Score = 'METRIC_TYPE_SCORE',
21
+ FileSize = 'METRIC_TYPE_FILE_SIZE',
22
+ Duration = 'METRIC_TYPE_DURATION',
23
+ Percentage = 'METRIC_TYPE_PERCENTAGE',
21
24
  }
22
25
 
26
+ /**
27
+ * Metric type base configuration
28
+ */
23
29
  export interface MetricTypeConfig {
24
- label: string;
25
- description: string;
26
- type: MetricTypeType;
30
+ /**
31
+ * Increased values are regressions, decreased values are improvements
32
+ */
33
+ biggerIsBetter?: boolean | null;
34
+ /**
35
+ * Value formatter
36
+ */
37
+ formatter: (value: number | null) => string;
27
38
  }
28
39
 
29
- export interface MetricType extends MetricTypeConfig {
30
- formatter: Function;
31
- biggerIsBetter: boolean;
40
+ /**
41
+ * Source metric configuration
42
+ */
43
+ export interface MetricConfig {
44
+ label: string;
45
+ type: MetricTypes;
46
+ description?: string;
47
+ /**
48
+ * Documentation URL
49
+ */
50
+ url?: string;
51
+ /**
52
+ * Positive delta values are regressions and negative delta values are improvements
53
+ * overrides MetricTypeConfig['biggerIsBetter']
54
+ */
55
+ biggerIsBetter?: MetricTypeConfig['biggerIsBetter'];
56
+ /**
57
+ * Do not show the delta
58
+ */
59
+ skipDelta?: boolean;
32
60
  }
33
61
 
34
- export enum MetricRunInfoDeltaType {
35
- 'HIGH_NEGATIVE' = 'HIGH_NEGATIVE',
36
- 'NEGATIVE' = 'NEGATIVE',
37
- 'LOW_NEGATIVE' = 'LOW_NEGATIVE',
38
- 'NO_CHANGE' = 'NO_CHANGE',
39
- 'LOW_POSITIVE' = 'LOW_POSITIVE',
40
- 'POSITIVE' = 'POSITIVE',
41
- 'HIGH_POSITIVE' = 'HIGH_POSITIVE',
62
+ export type Metric = MetricTypeConfig & MetricConfig;
63
+
64
+ export enum DeltaType {
65
+ HIGH_NEGATIVE = 'HIGH_NEGATIVE',
66
+ NEGATIVE = 'NEGATIVE',
67
+ LOW_NEGATIVE = 'LOW_NEGATIVE',
68
+ NO_CHANGE = 'NO_CHANGE',
69
+ CHANGE = 'CHANGE',
70
+ LOW_POSITIVE = 'LOW_POSITIVE',
71
+ POSITIVE = 'POSITIVE',
72
+ HIGH_POSITIVE = 'HIGH_POSITIVE',
42
73
  }
43
74
 
75
+ export type MetricRunInfoDeltaType = `${DeltaType}`;
76
+
77
+ /**
78
+ * Metric data for a job/run
79
+ */
44
80
  export interface MetricRun {
45
81
  value: number;
46
82
  }
47
83
 
48
- export interface MetricRunInfo {
84
+ export interface MetricRunDelta {
85
+ delta: number;
86
+ deltaPercentage: number;
87
+ }
88
+
89
+ export interface MetricRunInfoBaseline {
49
90
  value: number;
50
91
  displayValue: string;
51
- delta?: number;
52
- deltaPercentage?: number;
53
- deltaType?: MetricRunInfoDeltaType;
54
- displayDelta?: string;
55
- displayDeltaPercentage?: string;
92
+ }
93
+
94
+ export interface MetricRunInfo extends MetricRunInfoBaseline {
95
+ delta: number;
96
+ deltaPercentage: number;
97
+ deltaType: MetricRunInfoDeltaType;
98
+ displayDelta: string;
99
+ displayDeltaPercentage: string;
100
+ regression?: boolean | null;
56
101
  }
57
102
 
58
103
  export type JobSection<T = object> = Record<Source, T>;
@@ -65,6 +110,20 @@ export enum JobSectionId {
65
110
  rawData = 'rawData',
66
111
  }
67
112
 
113
+ export interface WebpackChunk {
114
+ id: string;
115
+ name: string;
116
+ }
117
+
118
+ export interface JobMeta {
119
+ [Source.webpack]: {
120
+ /**
121
+ * Webpack chunks data
122
+ */
123
+ chunks?: Array<WebpackChunk>;
124
+ };
125
+ }
126
+
68
127
  export interface JobSummaryItem {
69
128
  baseline: number;
70
129
  current: number;
@@ -77,6 +136,7 @@ export interface JobInsight<T = object> {
77
136
 
78
137
  export interface JobInsightAssetsSizeTotalData {
79
138
  md: string;
139
+ text: string;
80
140
  info: MetricRunInfo;
81
141
  }
82
142
  export type JobInsightDuplicatePackagesData = Record<string, Array<string>>;
@@ -110,7 +170,7 @@ export type JobMetricsSource = Record<string, MetricRun | Record<string, MetricR
110
170
  export type JobMetrics = JobSection<JobMetricsSource>;
111
171
 
112
172
  export interface JobData {
113
- [JobSectionId.meta]?: JobSection;
173
+ [JobSectionId.meta]?: JobMeta;
114
174
  [JobSectionId.insights]?: JobInsights;
115
175
  [JobSectionId.summary]?: JobSummary;
116
176
  [JobSectionId.metrics]?: JobMetrics;
@@ -160,10 +220,10 @@ export interface BrowsertimeSource {
160
220
  info?: {
161
221
  browsertime: {
162
222
  version: string;
163
- }
223
+ };
164
224
  timestamp: string;
165
225
  url: string;
166
- }
226
+ };
167
227
  statistics?: {
168
228
  timings: {
169
229
  firstPaint: BrowsertimeSourceMetric;
@@ -179,12 +239,12 @@ export interface BrowsertimeSource {
179
239
  redirectionTime: BrowsertimeSourceMetric;
180
240
  serverConnectionTime: BrowsertimeSourceMetric;
181
241
  serverResponseTime: BrowsertimeSourceMetric;
182
- }
242
+ };
183
243
  paintTiming: {
184
244
  'first-contentful-paint': BrowsertimeSourceMetric;
185
- }
245
+ };
186
246
  rumSpeedIndex: BrowsertimeSourceMetric;
187
- }
247
+ };
188
248
  visualmetrics: {
189
249
  FirstVisualChange: BrowsertimeSourceMetric;
190
250
  LastVisualChange: BrowsertimeSourceMetric;
@@ -193,8 +253,8 @@ export interface BrowsertimeSource {
193
253
  VisualComplete85: BrowsertimeSourceMetric;
194
254
  VisualComplete95: BrowsertimeSourceMetric;
195
255
  VisualComplete99: BrowsertimeSourceMetric;
196
- }
197
- }
256
+ };
257
+ };
198
258
  }
199
259
 
200
260
  export interface BrowsertimeMetrics {