@bundle-stats/utils 4.2.0-beta.1 → 4.2.0-beta.3

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 (116) hide show
  1. package/lib/config/index.js +1 -9
  2. package/lib/config/index.js.map +1 -1
  3. package/lib/config/insights.js +7 -5
  4. package/lib/config/insights.js.map +1 -1
  5. package/lib/constants.js +27 -13
  6. package/lib/constants.js.map +1 -1
  7. package/lib/index.js +1 -0
  8. package/lib/index.js.map +1 -1
  9. package/lib/jobs/create-job.js +23 -12
  10. package/lib/jobs/create-job.js.map +1 -1
  11. package/lib/jobs/create-jobs.js +13 -17
  12. package/lib/jobs/create-jobs.js.map +1 -1
  13. package/lib/jobs/create-summary.js +10 -11
  14. package/lib/jobs/create-summary.js.map +1 -1
  15. package/lib/jobs/index.js.map +1 -1
  16. package/lib/lighthouse/filter.js.map +1 -1
  17. package/lib/report/create.js +11 -16
  18. package/lib/report/create.js.map +1 -1
  19. package/lib/utils/component-links.js +15 -3
  20. package/lib/utils/component-links.js.map +1 -1
  21. package/lib/utils/metrics.js.map +1 -1
  22. package/lib/webpack/constants.js +12 -11
  23. package/lib/webpack/constants.js.map +1 -1
  24. package/lib/webpack/extract/assets-size-total-insight.js +5 -5
  25. package/lib/webpack/extract/assets-size-total-insight.js.map +1 -1
  26. package/lib/webpack/extract/assets-size.js +3 -4
  27. package/lib/webpack/extract/assets-size.js.map +1 -1
  28. package/lib/webpack/extract/modules-packages-duplicate.js +117 -41
  29. package/lib/webpack/extract/modules-packages-duplicate.js.map +1 -1
  30. package/lib/webpack/extract/modules-packages.js.map +1 -1
  31. package/lib/webpack/extract/modules.js +0 -2
  32. package/lib/webpack/extract/modules.js.map +1 -1
  33. package/lib/webpack/metrics.js +27 -25
  34. package/lib/webpack/metrics.js.map +1 -1
  35. package/lib/webpack/types.js +24 -0
  36. package/lib/webpack/types.js.map +1 -1
  37. package/lib-esm/config/index.js +0 -8
  38. package/lib-esm/config/index.js.map +1 -1
  39. package/lib-esm/config/insights.js +6 -4
  40. package/lib-esm/config/insights.js.map +1 -1
  41. package/lib-esm/constants.js +26 -12
  42. package/lib-esm/constants.js.map +1 -1
  43. package/lib-esm/index.js +1 -0
  44. package/lib-esm/index.js.map +1 -1
  45. package/lib-esm/jobs/create-job.js +24 -12
  46. package/lib-esm/jobs/create-job.js.map +1 -1
  47. package/lib-esm/jobs/create-jobs.js +13 -14
  48. package/lib-esm/jobs/create-jobs.js.map +1 -1
  49. package/lib-esm/jobs/create-summary.js +10 -11
  50. package/lib-esm/jobs/create-summary.js.map +1 -1
  51. package/lib-esm/jobs/index.js.map +1 -1
  52. package/lib-esm/lighthouse/filter.js.map +1 -1
  53. package/lib-esm/report/create.js +11 -16
  54. package/lib-esm/report/create.js.map +1 -1
  55. package/lib-esm/utils/component-links.js +14 -2
  56. package/lib-esm/utils/component-links.js.map +1 -1
  57. package/lib-esm/utils/metrics.js.map +1 -1
  58. package/lib-esm/webpack/constants.js +12 -11
  59. package/lib-esm/webpack/constants.js.map +1 -1
  60. package/lib-esm/webpack/extract/assets-size-total-insight.js +6 -6
  61. package/lib-esm/webpack/extract/assets-size-total-insight.js.map +1 -1
  62. package/lib-esm/webpack/extract/assets-size.js +3 -4
  63. package/lib-esm/webpack/extract/assets-size.js.map +1 -1
  64. package/lib-esm/webpack/extract/modules-packages-duplicate.js +119 -41
  65. package/lib-esm/webpack/extract/modules-packages-duplicate.js.map +1 -1
  66. package/lib-esm/webpack/extract/modules-packages.js.map +1 -1
  67. package/lib-esm/webpack/extract/modules.js +0 -3
  68. package/lib-esm/webpack/extract/modules.js.map +1 -1
  69. package/lib-esm/webpack/metrics.js +27 -25
  70. package/lib-esm/webpack/metrics.js.map +1 -1
  71. package/lib-esm/webpack/types.js +23 -1
  72. package/lib-esm/webpack/types.js.map +1 -1
  73. package/package.json +13 -12
  74. package/src/config/index.js +0 -9
  75. package/src/config/insights.ts +5 -0
  76. package/src/constants.ts +82 -15
  77. package/src/index.js +1 -0
  78. package/src/jobs/create-job.ts +61 -0
  79. package/src/jobs/create-jobs.ts +28 -0
  80. package/src/jobs/create-summary.ts +22 -0
  81. package/src/jobs/{index.js → index.ts} +0 -0
  82. package/src/lighthouse/filter.js +8 -5
  83. package/src/report/create.ts +31 -24
  84. package/src/utils/component-links.ts +15 -2
  85. package/src/utils/metrics.js +8 -7
  86. package/src/webpack/constants.js +13 -11
  87. package/src/webpack/extract/assets-size-total-insight.js +6 -7
  88. package/src/webpack/extract/assets-size.js +29 -24
  89. package/src/webpack/extract/modules-packages-duplicate.ts +241 -0
  90. package/src/webpack/extract/modules-packages.ts +1 -1
  91. package/src/webpack/extract/modules.ts +1 -4
  92. package/src/webpack/metrics.js +27 -25
  93. package/src/webpack/types.ts +31 -7
  94. package/types/config/index.d.ts +0 -4
  95. package/types/config/insights.d.ts +5 -4
  96. package/types/constants.d.ts +68 -15
  97. package/types/index.d.ts +1 -0
  98. package/types/jobs/create-job.d.ts +2 -1
  99. package/types/jobs/create-jobs.d.ts +2 -1
  100. package/types/jobs/create-summary.d.ts +4 -1
  101. package/types/jobs/index.d.ts +2 -2
  102. package/types/lighthouse/filter.d.ts +1 -1
  103. package/types/report/add-row-metric-data.d.ts +10 -1
  104. package/types/report/create.d.ts +14 -12
  105. package/types/utils/component-links.d.ts +2 -1
  106. package/types/utils/metrics.d.ts +1 -1
  107. package/types/webpack/constants.d.ts +2 -1
  108. package/types/webpack/extract/assets-size-total-insight.d.ts +3 -2
  109. package/types/webpack/extract/modules-packages-duplicate.d.ts +9 -16
  110. package/types/webpack/extract/modules-packages.d.ts +1 -1
  111. package/types/webpack/types.d.ts +29 -8
  112. package/src/config/insights.js +0 -5
  113. package/src/jobs/create-job.js +0 -46
  114. package/src/jobs/create-jobs.js +0 -26
  115. package/src/jobs/create-summary.js +0 -16
  116. package/src/webpack/extract/modules-packages-duplicate.js +0 -102
@@ -1 +1 @@
1
- {"version":3,"file":"modules.js","sourceRoot":"","sources":["../../../src/webpack/extract/modules.ts"],"names":[],"mappings":"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"}
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"}
@@ -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
- totalSizeByTypeALL: {
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
- totalInitialSizeJS: {
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
- totalInitialSizeCSS: {
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
- cacheInvalidation: {
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
- chunkCount: {
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
- assetCount: {
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
- moduleCount: {
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
- duplicateModulesCount: {
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
- duplicateCode: {
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
- packageCount: {
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
- duplicatePackagesCount: {
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
- totalSizeByTypeJS: {
79
- label: 'JS',
80
+ [Metric.TOTAL_SIZE_JS]: {
81
+ label: FILE_TYPE_LABELS.JS,
80
82
  type: METRIC_TYPE_FILE_SIZE,
81
83
  },
82
- totalSizeByTypeCSS: {
83
- label: 'CSS',
84
+ [Metric.TOTAL_SIZE_CSS]: {
85
+ label: FILE_TYPE_LABELS.CSS,
84
86
  type: METRIC_TYPE_FILE_SIZE,
85
87
  },
86
- totalSizeByTypeIMG: {
87
- label: 'IMG',
88
+ [Metric.TOTAL_SIZE_IMG]: {
89
+ label: FILE_TYPE_LABELS.IMG,
88
90
  type: METRIC_TYPE_FILE_SIZE,
89
91
  },
90
- totalSizeByTypeMEDIA: {
91
- label: 'Media',
92
+ [Metric.TOTAL_SIZE_MEDIA]: {
93
+ label: FILE_TYPE_LABELS.MEDIA,
92
94
  type: METRIC_TYPE_FILE_SIZE,
93
95
  },
94
- totalSizeByTypeFONT: {
95
- label: 'Fonts',
96
+ [Metric.TOTAL_SIZE_FONT]: {
97
+ label: FILE_TYPE_LABELS.FONT,
96
98
  type: METRIC_TYPE_FILE_SIZE,
97
99
  },
98
- totalSizeByTypeHTML: {
99
- label: 'HTML',
100
+ [Metric.TOTAL_SIZE_HTML]: {
101
+ label: FILE_TYPE_LABELS.HTML,
100
102
  type: METRIC_TYPE_FILE_SIZE,
101
103
  },
102
- totalSizeByTypeOTHER: {
103
- label: 'Other',
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;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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/webpack/metrics.js"],"names":[],"mappings":"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"}
@@ -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.1",
3
+ "version": "4.2.0-beta.3",
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.1",
39
- "@bundle-stats/plugin-webpack-validate": "^4.2.0-beta.1",
40
- "query-string": "^7.1.0",
41
- "serialize-query-params": "^2.0.1"
38
+ "@bundle-stats/plugin-webpack-filter": "^4.2.0-beta.3",
39
+ "@bundle-stats/plugin-webpack-validate": "^4.2.0-beta.3",
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.2.4",
45
+ "@types/jest": "29.4.0",
45
46
  "@types/lodash": "4.14.191",
46
- "core-js": "3.26.1",
47
- "jest": "29.3.1",
48
- "jest-cli": "29.3.1",
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": "3.0.2",
53
- "ts-jest": "29.0.3",
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": "c69fdcf2c8b40118710b49cfa973e820e4880242"
61
+ "gitHead": "f3ba19946987a5a954991f02ed0ddfe2ac8ad972"
61
62
  }
@@ -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
- ];
@@ -0,0 +1,5 @@
1
+ export enum InsightType {
2
+ ERROR = 'ERROR',
3
+ INFO = 'INFO',
4
+ WARNING = 'WARNING',
5
+ }
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 interface Metric {
44
- value: number;
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
@@ -1,6 +1,7 @@
1
1
  export * from './browsertime';
2
2
  export * from './config';
3
3
  // export * as I18N from './i18n';
4
+ export * from './constants';
4
5
  export * from './jobs';
5
6
  export * from './report';
6
7
  export * from './utils';
@@ -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
@@ -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('../../types').LighthouseSource}
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((agg, [auditId, auditData]) => ({
24
- ...agg,
25
- [auditId]: pick(auditData, ['score', 'numericValue']),
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,
@@ -1,45 +1,55 @@
1
1
  import isEmpty from 'lodash/isEmpty';
2
2
 
3
- import { SOURCE_PATHS } from '../config';
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 JobSummary {
10
- current: number;
11
- baseline: number;
9
+ interface ReportMetricRunInfo extends MetricRunInfo {
10
+ label: string;
12
11
  }
13
12
 
14
- export const createReport = (jobs: Array<any>) => {
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
- const summary = SOURCE_PATHS.reduce((agg, sourceId) => {
18
- const sourceSummary = jobs[0]?.summary?.[sourceId] as JobSummary;
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 agg;
36
+ return;
22
37
  }
23
38
 
24
- const output = Object.entries(sourceSummary).map(([metricId, summaryData]) => {
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 info = getMetricRunInfo(metric, current, baseline);
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
- return {
37
- ...agg,
38
- [sourceId]: output,
39
- };
47
+ summary[sourceId] = summaryEntries;
40
48
  }, {});
41
49
 
42
- return {
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 BUNLDE_PACKAGES_COUNT: ComponentLink = {
224
+ export const BUNDLE_PACKAGES_COUNT: ComponentLink = {
225
225
  section: SECTIONS.PACKAGES,
226
226
  title: I18N.COMPONENT_LINK_PACKAGES_COUNT,
227
227
  params: {
@@ -246,6 +246,19 @@ export const BUNDLE_PACKAGES_DUPLICATE: ComponentLink = {
246
246
  },
247
247
  };
248
248
 
249
+ export const BUNDLE_PACKAGES_DUPLICATE_NEW: ComponentLink = {
250
+ section: SECTIONS.PACKAGES,
251
+ title: I18N.COMPONENT_LINK_PACKAGES_DUPLICATE,
252
+ params: {
253
+ [COMPONENT.BUNDLE_PACKAGES]: {
254
+ filters: {
255
+ [PACKAGE_FILTERS.CHANGED]: true,
256
+ [PACKAGE_FILTERS.DUPLICATE]: true,
257
+ },
258
+ },
259
+ },
260
+ };
261
+
249
262
  export const getBundleAssetsFileTypeComponentLink = (
250
263
  fileType: string,
251
264
  label: string,
@@ -303,6 +316,6 @@ export const METRIC_COMPONENT_LINKS = new Map([
303
316
  ['webpack.moduleCount', { link: BUNDLE_MODULES }],
304
317
  ['webpack.duplicateModulesCount', { link: BUNDLE_MODULES_DUPLICATE }],
305
318
  ['webpack.duplicateCode', { link: BUNDLE_MODULES_DUPLICATE }],
306
- ['webpack.packageCount', { link: BUNLDE_PACKAGES_COUNT }],
319
+ ['webpack.packageCount', { link: BUNDLE_PACKAGES_COUNT }],
307
320
  ['webpack.duplicatePackagesCount', { link: BUNDLE_PACKAGES_DUPLICATE }],
308
321
  ]);