bundle-stats 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.
package/README.md CHANGED
@@ -1,31 +1,33 @@
1
1
  <p align="center">
2
- <a href="https://relative-ci.com/tools/webpack-bundle-stats/demo-multiple-jobs.html" target="_blank"><img alt="BundleStats screenshot" width="768" src="https://raw.githubusercontent.com/relative-ci/bundle-stats/master/bundle-stats.png"/></a>
2
+ <a href="https://relative-ci.com/bundle-analyzer/bundle-stats/demo/bundle-analysis-comparison" target="_blank"><img alt="BundleStats screenshot" src="https://raw.githubusercontent.com/relative-ci/bundle-stats/master/bundle-stats.gif"/></a>
3
3
  </p>
4
4
  <p align="center">
5
- <strong>Demo:</strong>
6
- <a href="https://relative-ci.com/tools/webpack-bundle-stats/demo-multiple-jobs.html" target="_blank">Compare multiple builds</a>,
7
- <a href="https://relative-ci.com/tools/webpack-bundle-stats/demo-single-job.html" target="_blank">Single build</a>
5
+ Demos:
6
+ <a href="https://relative-ci.com/bundle-analyzer/bundle-stats/demo/bundle-analysis-comparison" target="_blank">Bundle analysis comparison</a> ·
7
+ <a href="https://relative-ci.com/bundle-analyzer/bundle-stats/demo/bundle-analysis" target="_blank">Bundle analysis</a>
8
8
  </p>
9
9
  <h1 align="center">BundleStats</h1>
10
10
  <p align="center">
11
- Analyze webpack stats(bundle size, assets, modules, packages) and compare the results between different builds.
11
+ Analyze bundle stats(bundle size, assets, modules, packages) and compare the results between different builds. Support for webpack, rspack, vite, rollup and rolldown.
12
12
  </p>
13
13
  <p align="center">
14
14
  <a href="https://www.npmjs.com/package/bundle-stats"><img src="https://img.shields.io/npm/v/bundle-stats.svg" /></a>
15
15
  <a href="https://www.npmjs.com/package/bundle-stats"><img src="https://img.shields.io/npm/dm/bundle-stats.svg" /></a>
16
16
  <img src="https://img.shields.io/node/v/bundle-stats.svg" alt="Node version" />
17
- <a href="https://github.com/relative-ci/bundle-stats/actions/workflows/build.yaml"><img alt="GitHub action" src="https://github.com/relative-ci/bundle-stats/actions/workflows/build.yaml/badge.svg" /></a>
17
+ <a href="https://github.com/relative-ci/bundle-stats/actions/workflows/ci.yml"><img alt="GitHub action" src="https://github.com/relative-ci/bundle-stats/actions/workflows/ci.yml/badge.svg" /></a>
18
+ <a href="https://socket.dev/npm/package/bundle-stats/overview"><img alt="Socket" src="https://socket.dev/api/badge/npm/package/bundle-stats" /></a>
18
19
  <a href="https://github.com/relative-ci/bundle-stats/actions/workflows/codeql.yml"><img alt="CodeQL" src="https://github.com/relative-ci/bundle-stats/actions/workflows/codeql.yml/badge.svg"/></a>
19
20
  </p>
20
21
  <p align="center">
21
22
  <a href="https://app.relative-ci.com/projects/V1bXuieJbYttHCS75L8G"><img src="https://badges.relative-ci.com/badges/V1bXuieJbYttHCS75L8G?branch=master" alt="RelativeCI"></a>
22
23
  </p>
23
24
  <p align="center">
24
- - <a href="https://relative-ci.com/tools/webpack-bundle-stats/demo-multiple-jobs.html#/"><strong>Bundle size</strong> and totals by file type(css, js, img, etc)</a><br />
25
- - <a href="https://relative-ci.com/tools/webpack-bundle-stats/demo-multiple-jobs.html#/"><strong>Cache invalidation</strong>, Initial JS/CSS and other bundle specific metrics</a><br />
26
- - <a href="https://relative-ci.com/tools/webpack-bundle-stats/demo-multiple-jobs.html#/assets"><strong>Assets</strong> report (entrypoint, initial, types, changed, delta)</a><br />
27
- - <a href="https://relative-ci.com/tools/webpack-bundle-stats/demo-multiple-jobs.html#/modules"><strong>Modules</strong> report (changed, delta, chunks, duplicate count and percentage)</a><br />
28
- - <a href="https://relative-ci.com/tools/webpack-bundle-stats/demo-multiple-jobs.html#/packages"><strong>Packages</strong> report (count, duplicate, changed, delta)</a><br />
25
+ - <a href="https://relative-ci.com/bundle-analyzer/bundle-stats/demo/bundle-analysis-comparison#/"><strong>Bundle size</strong> and <strong>totals by file</strong> type(css, js, img, etc)</a><br />
26
+ - <a href="https://relative-ci.com/bundle-analyzer/bundle-stats/demo/bundle-analysis-comparison#/">Insights: <strong>duplicate packages</strong>, <strong>new packages</strong></a><br />
27
+ - <a href="https://relative-ci.com/bundle-analyzer/bundle-stats/demo/bundle-analysis-comparison#/"><strong>Initial JS/CSS</strong>, <strong>Cache invalidation</strong>, and other bundle metrics</a><br />
28
+ - <a href="https://relative-ci.com/bundle-analyzer/bundle-stats/demo/bundle-analysis-comparison#/assets"><strong>Assets</strong> report (entrypoint, initial, types, changed, delta)</a><br />
29
+ - <a href="https://relative-ci.com/bundle-analyzer/bundle-stats/demo/bundle-analysis-comparison#/modules"><strong>Modules</strong> report (changed, delta, chunks, duplicate count and percentage)</a><br />
30
+ - <a href="https://relative-ci.com/bundle-analyzer/bundle-stats/demo/bundle-analysis-comparison#/packages"><strong>Packages</strong> report (count, duplicate, changed, delta)</a><br />
29
31
  :star: <strong>Side by side comparison</strong> for multiple builds
30
32
  </p>
31
33
 
@@ -62,28 +64,35 @@ or
62
64
  yarn add --dev bundle-stats
63
65
  ```
64
66
 
65
- ## Webpack configuration
67
+ ## Output webpack stats
66
68
 
67
- The CLI is consuming the Webpack stats json. The following [stats options](https://webpack.js.org/configuration/stats) are required:
69
+ The CLI is consuming the Webpack stats JSON file. The following [webpack stats options](https://webpack.js.org/configuration/stats) are needed:
68
70
 
69
71
  ```js
70
72
  {
71
73
  stats: {
74
+ // required
72
75
  assets: true,
73
76
  chunks: true,
74
77
  modules: true,
78
+ // optional
75
79
  builtAt: true,
76
80
  hash: true
77
81
  }
78
82
  }
79
83
  ```
80
84
 
81
- You can output the stats json file using [webpack-cli](https://www.npmjs.com/package/webpack-cli):
85
+ [How to configure webpack for better debugging and monitoring](https://relative-ci.com/documentation/guides/webpack-config)
86
+
87
+ You can output the webpack stats JSON file using [webpack-cli](https://www.npmjs.com/package/webpack-cli) `--json` option:
82
88
 
83
89
  ```shell
84
90
  npx webpack --mode production --json artifacts/webpack-stats.json
85
91
  ```
86
92
 
93
+ - [How to output webpack stats JSON file using webpack-cli](https://relative-ci.com/documentation/guides/webpack-stats/webpack-cli)
94
+ - [How to output webpack stats JSON file using webpack-stats-plugin](https://relative-ci.com/documentation/guides/webpack-stats/webpack-stats-plugin)
95
+
87
96
  ## Usage
88
97
 
89
98
  ```shell
@@ -91,17 +100,19 @@ $ bundle-stats -h
91
100
  Usage: bundle-stats OPTIONS [WEBPACK_STATS_FILE]...
92
101
 
93
102
  Options:
94
- --compare Use local saved stats for comparison [boolean] [default: true]
95
- --baseline Save current stats as baseline [boolean] [default: false]
96
-
97
- --html Save HTML report [boolean] [default: true]
98
- --json Save JSON data [boolean] [default: false]
99
-
100
- --demo Generate demo reports [default: false]
101
-
102
- -d, --out-dir Output directory [default: "./dist"]
103
- -h, --help Show help [boolean]
104
- -v, --version Show version number [boolean]
103
+ --demo Generate demo reports [boolean] [default: false]
104
+ --compare Use local saved stats for comparison
105
+ [boolean] [default: true]
106
+ --baseline Save current stats as baseline
107
+ [boolean] [default: false]
108
+ --baseline-filepath Baseline filepath, default:
109
+ node_modules/.cache/bundle-stats/baseline.json
110
+ [string]
111
+ --html Save HTML report [boolean] [default: true]
112
+ --json Save JSON data [boolean] [default: false]
113
+ -d, --out-dir Output directory [string]
114
+ -h, --help Show help [boolean]
115
+ -v, --version Show version number [boolean]
105
116
  ```
106
117
 
107
118
  ```shell
@@ -195,17 +206,17 @@ The option can be disabled using `--no-compare` option.
195
206
 
196
207
  ### :cyclone: [relative-ci.com](https://relative-ci.com?utm_medium=bundle-stats-cli)
197
208
 
198
- #### In-depth webpack bundle analysis and monitoring
209
+ #### Optimize your web app's performance with automated bundle stats analysis and monitoring.
199
210
 
200
- RelativeCI automates webpack bundle analysis, monitoring, and alerting so you can identify and fix bundle regressions before shipping to production:
211
+ - :crystal_ball: In-depth bundle stats analysis for every build
212
+ - :chart_with_upwards_trend: Monitor bundle stats changes and identify opportunities for optimizations
213
+ - :bell: [Rule based automated review flow](https://relative-ci.com/documentation/setup/configure/integrations/github-commit-status-review?utm_medium=bundle-stats-cli), or get notified via [GitHub Pull Request comments](https://relative-ci.com/documentation/setup/configure/integrations/github-pull-request-comment?utm_medium=bundle-stats-cli), [GitHub check reports](https://relative-ci.com/documentation/setup/configure/integrations/github-check-report?utm_medium=bundle-stats-cli) and [Slack messages](https://relative-ci.com/documentation/setup/configure/integrations/slack-notification?utm_medium=bundle-stats-cli)
214
+ - :wrench: Support for **webpack** and beta support for **Vite**/**Rollup**
215
+ - :hammer: Support for all major CI services(CircleCI, GitHub Actions, Gitlab CI, Jenkins, Travis CI)
216
+ - :nut_and_bolt: Support for **npm**, **yarn** and **pnpm**; support for monorepos
217
+ - :two_hearts: **Always free** for **Open Source**
201
218
 
202
- - :crystal_ball: Analyze webpack bundle stats on every build
203
- - :chart_with_upwards_trend: Monitor webpack bundle stats changes and identify tendencies over extended periods
204
- - :bell: Get notified via GitHub Checks, GitHub Pull Request comments, and Slack notifications
205
- - :hammer: Support for all major CI services (CircleCI, GitHub Actions, Gitlab CI, Jenkins, Travis CI)
206
- - :two_hearts: Always free for Open Source
207
-
208
- [Try for free](https://relative-ci.com?utm_medium=bundle-stats-cli)
219
+ [:rocket: Get started](https://relative-ci.com?utm_medium=bundle-stats-cli)
209
220
 
210
221
  ### :first_quarter_moon: [relative-ci/compare](https://compare.relative-ci.com)
211
222
 
@@ -224,7 +235,7 @@ Github Action that generates [bundle-stats](https://github.com/relative-ci/bundl
224
235
 
225
236
  [![npm](https://img.shields.io/npm/v/bundle-stats-webpack-plugin)](https://www.npmjs.com/package/bundle-stats-webpack-plugin) [![npm](https://img.shields.io/npm/dm/bundle-stats-webpack-plugin)](https://www.npmjs.com/package/bundle-stats-webpack-plugin)
226
237
 
227
- Webpack plugin to generate bundle stats report.
238
+ Webpack plugin to generate bundle stats report for webpack/rspack.
228
239
 
229
240
  ### [`gatsby-plugin-bundle-stats`](https://github.com/relative-ci/bundle-stats/tree/master/packages/gatsby-plugin)
230
241
 
@@ -237,3 +248,9 @@ Webpack plugin to generate bundle stats report.
237
248
  [![npm](https://img.shields.io/npm/v/next-plugin-bundle-stats)](https://www.npmjs.com/package/next-plugin-bundle-stats) [![npm](https://img.shields.io/npm/dm/next-plugin-bundle-stats)](https://www.npmjs.com/package/next-plugin-bundle-stats)
238
249
 
239
250
  [Next.js](https://nextjs.org) plugin for [bundle-stats](https://github.com/relative-ci/bundle-stats/tree/master/packages/webpack-plugin).
251
+
252
+ ### [`rollup-plugin-bundle-stats`](https://github.com/relative-ci/bundle-stats/tree/master/packages/rollup-plugin)
253
+
254
+ [![npm](https://img.shields.io/npm/v/rollup-plugin-bundle-stats)](https://www.npmjs.com/package/rollup-plugin-bundle-stats) [![npm](https://img.shields.io/npm/dm/rollup-plugin-bundle-stats)](https://www.npmjs.com/package/rollup-plugin-bundle-stats)
255
+
256
+ Rollup plugin to generate bundle stats report for vite/rolldown/rollup.
@@ -42,11 +42,11 @@
42
42
  "size": 1356
43
43
  },
44
44
  {
45
- "name": "main.75d52d9.js",
45
+ "name": "assets/js/main.75d52d9.js",
46
46
  "size": 215291
47
47
  },
48
48
  {
49
- "name": "main.e7aed2d.css",
49
+ "name": "assets/css/main.e7aed2d.css",
50
50
  "size": 17402
51
51
  },
52
52
  {
@@ -54,7 +54,7 @@
54
54
  "size": 5934
55
55
  },
56
56
  {
57
- "name": "relative-ci-logo.svg",
57
+ "name": "assets/images/relative-ci-logo.svg",
58
58
  "size": 2092
59
59
  },
60
60
  {
@@ -66,11 +66,11 @@
66
66
  "size": 380
67
67
  },
68
68
  {
69
- "name": "vendors.176a5f6.js",
69
+ "name": "assets/js/vendors.176a5f6.js",
70
70
  "size": 1823712
71
71
  },
72
72
  {
73
- "name": "vendors.8b6bb4f.css",
73
+ "name": "assets/css/vendors.8b6bb4f.css",
74
74
  "size": 48381
75
75
  }
76
76
  ],
@@ -80,10 +80,10 @@
80
80
  "entry": true,
81
81
  "initial": true,
82
82
  "files": [
83
- "main.e7aed2d.css",
84
- "main.75d52d9.js",
85
- "main.e7aed2d.css.map",
86
- "main.75d52d9.js.map"
83
+ "assets/css/main.e7aed2d.css",
84
+ "assets/js/main.75d52d9.js",
85
+ "assets/css/main.e7aed2d.css.map",
86
+ "assets/js/main.75d52d9.js.map"
87
87
  ],
88
88
  "names": [
89
89
  "main"
@@ -94,10 +94,10 @@
94
94
  "entry": true,
95
95
  "initial": true,
96
96
  "files": [
97
- "vendors.8b6bb4f.css",
98
- "vendors.176a5f6.js",
99
- "vendors.8b6bb4f.css.map",
100
- "vendors.176a5f6.js.map"
97
+ "assets/css/vendors.8b6bb4f.css",
98
+ "assets/js/vendors.176a5f6.js",
99
+ "assets/css/vendors.8b6bb4f.css.map",
100
+ "assets/js/vendors.176a5f6.js.map"
101
101
  ],
102
102
  "names": [
103
103
  "vendors"
@@ -4345,7 +4345,7 @@
4345
4345
  ]
4346
4346
  },
4347
4347
  {
4348
- "name": "./src/_web/data/open-source-projects.js",
4348
+ "name": "./src/common/data/open-source-projects.js",
4349
4349
  "size": 710,
4350
4350
  "chunks": [
4351
4351
  0
@@ -10664,7 +10664,7 @@
10664
10664
  ]
10665
10665
  },
10666
10666
  {
10667
- "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/_web/src/components/layout/footer/footer.module.css",
10667
+ "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/common/src/components/layout/footer/footer.module.css",
10668
10668
  "size": 1115,
10669
10669
  "chunks": [
10670
10670
  0
@@ -11028,7 +11028,7 @@
11028
11028
  ]
11029
11029
  },
11030
11030
  {
11031
- "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/_web/src/components/pricing/pricing.module.css",
11031
+ "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/common/src/components/profile/profile.module.css",
11032
11032
  "size": 1381,
11033
11033
  "chunks": [
11034
11034
  0
@@ -11077,7 +11077,7 @@
11077
11077
  ]
11078
11078
  },
11079
11079
  {
11080
- "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/_web/src/components/ui-stack.module.css",
11080
+ "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/common/src/components/ui-stack.module.css",
11081
11081
  "size": 191,
11082
11082
  "chunks": [
11083
11083
  0
@@ -42,27 +42,27 @@
42
42
  "size": 1356
43
43
  },
44
44
  {
45
- "name": "login.3fc183e.css",
45
+ "name": "assets/chunks/login.3fc183e.css",
46
46
  "size": 154
47
47
  },
48
48
  {
49
- "name": "login.49220d2.js",
49
+ "name": "assets/chunks/login.49220d2.js",
50
50
  "size": 762
51
51
  },
52
52
  {
53
- "name": "login~signup.00bcc36.css",
53
+ "name": "assets/chunks/login~signup.00bcc36.css",
54
54
  "size": 242
55
55
  },
56
56
  {
57
- "name": "login~signup.7fe771f.js",
57
+ "name": "assets/chunks/login~signup.7fe771f.js",
58
58
  "size": 275986
59
59
  },
60
60
  {
61
- "name": "main.12dd8b1.css",
61
+ "name": "assets/css/main.12dd8b1.css",
62
62
  "size": 10193
63
63
  },
64
64
  {
65
- "name": "main.a0929a4.js",
65
+ "name": "assets/js/main.a0929a4.js",
66
66
  "size": 139281
67
67
  },
68
68
  {
@@ -70,15 +70,15 @@
70
70
  "size": 5934
71
71
  },
72
72
  {
73
- "name": "project.6f85cd9.css",
73
+ "name": "assets/chunks/project.6f85cd9.css",
74
74
  "size": 6603
75
75
  },
76
76
  {
77
- "name": "project.deaf2dc.js",
77
+ "name": "assets/chunks/project.deaf2dc.js",
78
78
  "size": 438041
79
79
  },
80
80
  {
81
- "name": "relative-ci-logo.svg",
81
+ "name": "assets/images/relative-ci-logo.svg",
82
82
  "size": 2092
83
83
  },
84
84
  {
@@ -86,11 +86,11 @@
86
86
  "size": 29
87
87
  },
88
88
  {
89
- "name": "signup.83e1afe.js",
89
+ "name": "assets/chunks/signup.83e1afe.js",
90
90
  "size": 1009
91
91
  },
92
92
  {
93
- "name": "signup.9ab12e1.css",
93
+ "name": "assets/chunks/signup.9ab12e1.css",
94
94
  "size": 226
95
95
  },
96
96
  {
@@ -98,11 +98,11 @@
98
98
  "size": 380
99
99
  },
100
100
  {
101
- "name": "vendors.278dc2f.js",
101
+ "name": "assets/js/vendors.278dc2f.js",
102
102
  "size": 1126364
103
103
  },
104
104
  {
105
- "name": "vendors.5024abb.css",
105
+ "name": "assets/css/vendors.5024abb.css",
106
106
  "size": 38673
107
107
  }
108
108
  ],
@@ -112,10 +112,10 @@
112
112
  "entry": false,
113
113
  "initial": false,
114
114
  "files": [
115
- "login~signup.00bcc36.css",
116
- "login~signup.7fe771f.js",
117
- "login~signup.00bcc36.css.map",
118
- "login~signup.7fe771f.js.map"
115
+ "assets/chunks/login~signup.00bcc36.css",
116
+ "assets/chunks/login~signup.7fe771f.js",
117
+ "assets/chunks/login~signup.00bcc36.css.map",
118
+ "assets/chunks/login~signup.7fe771f.js.map"
119
119
  ],
120
120
  "names": [
121
121
  "login~signup"
@@ -126,10 +126,10 @@
126
126
  "entry": false,
127
127
  "initial": false,
128
128
  "files": [
129
- "login.3fc183e.css",
130
- "login.49220d2.js",
131
- "login.3fc183e.css.map",
132
- "login.49220d2.js.map"
129
+ "assets/chunks/login.3fc183e.css",
130
+ "assets/chunks/login.49220d2.js",
131
+ "assets/chunks/login.3fc183e.css.map",
132
+ "assets/chunks/login.49220d2.js.map"
133
133
  ],
134
134
  "names": [
135
135
  "login"
@@ -140,10 +140,10 @@
140
140
  "entry": true,
141
141
  "initial": true,
142
142
  "files": [
143
- "main.12dd8b1.css",
144
- "main.a0929a4.js",
145
- "main.12dd8b1.css.map",
146
- "main.a0929a4.js.map"
143
+ "assets/css/main.12dd8b1.css",
144
+ "assets/js/main.a0929a4.js",
145
+ "assets/css/main.12dd8b1.css.map",
146
+ "assets/js/main.a0929a4.js.map"
147
147
  ],
148
148
  "names": [
149
149
  "main"
@@ -154,10 +154,10 @@
154
154
  "entry": false,
155
155
  "initial": false,
156
156
  "files": [
157
- "project.6f85cd9.css",
158
- "project.deaf2dc.js",
159
- "project.6f85cd9.css.map",
160
- "project.deaf2dc.js.map"
157
+ "assets/chunks/project.6f85cd9.css",
158
+ "assets/chunks/project.deaf2dc.js",
159
+ "assets/chunks/project.6f85cd9.css.map",
160
+ "assets/chunks/project.deaf2dc.js.map"
161
161
  ],
162
162
  "names": [
163
163
  "project"
@@ -168,10 +168,10 @@
168
168
  "entry": false,
169
169
  "initial": false,
170
170
  "files": [
171
- "signup.9ab12e1.css",
172
- "signup.83e1afe.js",
173
- "signup.9ab12e1.css.map",
174
- "signup.83e1afe.js.map"
171
+ "assets/chunks/signup.9ab12e1.css",
172
+ "assets/chunks/signup.83e1afe.js",
173
+ "assets/chunks/signup.9ab12e1.css.map",
174
+ "assets/chunks/signup.83e1afe.js.map"
175
175
  ],
176
176
  "names": [
177
177
  "signup"
@@ -182,10 +182,10 @@
182
182
  "entry": true,
183
183
  "initial": true,
184
184
  "files": [
185
- "vendors.5024abb.css",
186
- "vendors.278dc2f.js",
187
- "vendors.5024abb.css.map",
188
- "vendors.278dc2f.js.map"
185
+ "assets/css/vendors.5024abb.css",
186
+ "assets/js/vendors.278dc2f.js",
187
+ "assets/css/vendors.5024abb.css.map",
188
+ "assets/js/vendors.278dc2f.js.map"
189
189
  ],
190
190
  "names": [
191
191
  "vendors"
@@ -3654,7 +3654,7 @@
3654
3654
  ]
3655
3655
  },
3656
3656
  {
3657
- "name": "./src/_web/data/open-source-projects.js",
3657
+ "name": "./src/common/data/open-source-projects.js",
3658
3658
  "size": 710,
3659
3659
  "chunks": [
3660
3660
  2
@@ -10125,7 +10125,7 @@
10125
10125
  ]
10126
10126
  },
10127
10127
  {
10128
- "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/_web/src/components/layout/footer/footer.module.css",
10128
+ "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/common/src/components/layout/footer/footer.module.css",
10129
10129
  "size": 1115,
10130
10130
  "chunks": [
10131
10131
  2
@@ -10615,7 +10615,7 @@
10615
10615
  ]
10616
10616
  },
10617
10617
  {
10618
- "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/_web/src/components/pricing/pricing.module.css",
10618
+ "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/common/src/components/profile/profile.module.css",
10619
10619
  "size": 1381,
10620
10620
  "chunks": [
10621
10621
  2
@@ -10657,7 +10657,7 @@
10657
10657
  ]
10658
10658
  },
10659
10659
  {
10660
- "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/_web/src/components/ui-stack.module.css",
10660
+ "name": "css ./node_modules/css-loader/dist/cjs.js??ref--6-0!./node_modules/postcss-loader/dist/cjs.js??ref--6-1!./src/common/src/components/ui-stack.module.css",
10661
10661
  "size": 191,
10662
10662
  "chunks": [
10663
10663
  2
package/lib/cli.js CHANGED
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = cli;
6
7
  const path_1 = __importDefault(require("path"));
7
8
  const yargs_1 = __importDefault(require("yargs"));
8
9
  const update_notifier_1 = __importDefault(require("update-notifier"));
@@ -23,8 +24,8 @@ async function cli(pkg) {
23
24
  json: true,
24
25
  outDir: DEFAULT_OUTPUT_DIR,
25
26
  artifactFilepaths: [
26
- path_1.default.resolve(__dirname, '../__fixtures__/webpack-stats-current.json'),
27
- path_1.default.resolve(__dirname, '../__fixtures__/webpack-stats-baseline.json'),
27
+ path_1.default.resolve(__dirname, '../__fixtures__/webpack-stats.current.json'),
28
+ path_1.default.resolve(__dirname, '../__fixtures__/webpack-stats.baseline.json'),
28
29
  ],
29
30
  });
30
31
  return;
@@ -46,6 +47,11 @@ async function cli(pkg) {
46
47
  description: 'Save current stats as baseline',
47
48
  type: 'boolean',
48
49
  default: false,
50
+ })
51
+ .option('baseline-filepath', {
52
+ description: 'Baseline filepath, default: node_modules/.cache/bundle-stats/baseline.json',
53
+ type: 'string',
54
+ default: undefined,
49
55
  })
50
56
  .option('html', {
51
57
  description: 'Save HTML report',
@@ -68,13 +74,13 @@ async function cli(pkg) {
68
74
  .help()
69
75
  .parseSync();
70
76
  await (0, run_1.default)({
71
- baseline: args.baseline,
77
+ outDir: args.outDir,
72
78
  compare: args.compare,
79
+ baseline: args.baseline,
80
+ baselineFilepath: args.baselineFilepath,
73
81
  html: args.html,
74
82
  json: args.json,
75
- outDir: args.outDir,
76
83
  artifactFilepaths: args._,
77
84
  });
78
85
  }
79
- exports.default = cli;
80
86
  //# sourceMappingURL=cli.js.map
package/lib/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,kDAA0B;AAE1B,sEAA6C;AAE7C,gDAAwB;AAExB,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AACpC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE5B,KAAK,UAAU,GAAG,CAAC,GAAW;IAE3C,MAAM,QAAQ,GAAG,IAAA,yBAAc,EAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,CAAC;IAE1E,IAAI,QAAQ,CAAC,MAAM,EAAE;QACnB,QAAQ,CAAC,MAAM,EAAE,CAAC;KACnB;IAGD,MAAM,EAAE,IAAI,EAAE,GAAG,eAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;IAE1F,IAAI,IAAI,EAAE;QACR,MAAM,IAAA,aAAG,EAAC;YACR,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,kBAAkB;YAC1B,iBAAiB,EAAE;gBACjB,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,4CAA4C,CAAC;gBACrE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,6CAA6C,CAAC;aACvE;SACF,CAAC,CAAC;QAEH,OAAO;KACR;IAED,MAAM,IAAI,GAAG,eAAK;SACf,KAAK,CAAC,mCAAmC,CAAC;SAC1C,aAAa,CAAC,CAAC,EAAE,sCAAsC,CAAC;SACxD,MAAM,CAAC,SAAS,EAAE;QACjB,WAAW,EAAE,kBAAkB;QAC/B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,kBAAkB;KAC5B,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;KACd,CAAC;SACD,MAAM,CAAC,UAAU,EAAE;QAClB,WAAW,EAAE,gCAAgC;QAC7C,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,WAAW,EAAE,kBAAkB;QAC/B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;KACd,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,WAAW,EAAE,gBAAgB;QAC7B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,WAAW,EAAE,uBAAuB;QACpC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC;SACrB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;SAClB,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC;SACrB,IAAI,EAAE;SACN,SAAS,EAAE,CAAC;IAEf,MAAM,IAAA,aAAG,EAAC;QACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,iBAAiB,EAAE,IAAI,CAAC,CAAkB;KAC3C,CAAC,CAAC;AACL,CAAC;AA1ED,sBA0EC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/lib/run.js CHANGED
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = run;
6
7
  const path_1 = __importDefault(require("path"));
7
8
  const fs_extra_1 = require("fs-extra");
8
9
  const listr2_1 = require("listr2");
@@ -15,25 +16,24 @@ const plugin_webpack_validate_1 = __importDefault(require("@bundle-stats/plugin-
15
16
  const cli_utils_1 = require("@bundle-stats/cli-utils");
16
17
  const locales_json_1 = __importDefault(require("./locales.json"));
17
18
  const REPORT_INFO_COLORS = {
18
- [utils_1.DELTA_TYPE_HIGH_NEGATIVE]: 'red',
19
- [utils_1.DELTA_TYPE_NEGATIVE]: 'red',
20
- [utils_1.DELTA_TYPE_LOW_NEGATIVE]: 'yellow',
21
- [utils_1.DELTA_TYPE_NO_CHANGE]: 'gray',
22
- [utils_1.DELTA_TYPE_LOW_POSITIVE]: 'green',
23
- [utils_1.DELTA_TYPE_POSITIVE]: 'green',
24
- [utils_1.DELTA_TYPE_HIGH_POSITIVE]: 'green',
25
- };
26
- const getReportInfoBorderColor = (reportInfo) => {
27
- const { deltaType } = reportInfo.info;
28
- return REPORT_INFO_COLORS[deltaType];
19
+ CHANGE: 'blue',
20
+ HIGH_NEGATIVE: 'red',
21
+ NEGATIVE: 'red',
22
+ LOW_NEGATIVE: 'yellow',
23
+ NO_CHANGE: 'gray',
24
+ LOW_POSITIVE: 'green',
25
+ POSITIVE: 'green',
26
+ HIGH_POSITIVE: 'green',
29
27
  };
30
28
  async function run(options) {
31
- const { baseline, compare, html, json, outDir, artifactFilepaths } = options;
29
+ const { baseline, baselineFilepath, compare, html, json, outDir, artifactFilepaths } = options;
30
+ const baselineAbsolutePath = (0, cli_utils_1.getBaselinePath)(process.cwd(), outDir, baselineFilepath);
31
+ const baselinePath = (0, cli_utils_1.getBaselineRelativePath)(process.cwd(), '', baselineAbsolutePath);
32
32
  const tasks = new listr2_1.Listr([
33
33
  {
34
34
  title: 'Read Webpack stats files',
35
35
  task: async (ctx) => {
36
- const sources = await Promise.all(artifactFilepaths.map((filepath) => (0, fs_extra_1.readJSON)(filepath)));
36
+ const sources = await Promise.all(artifactFilepaths.map((filepath) => (0, cli_utils_1.readJSONStream)(filepath)));
37
37
  sources.forEach((source, index) => {
38
38
  const invalid = (0, plugin_webpack_validate_1.default)(source);
39
39
  if (invalid) {
@@ -46,8 +46,7 @@ async function run(options) {
46
46
  {
47
47
  title: 'Read baseline data',
48
48
  task: async (ctx, task) => {
49
- const baselineFilepath = path_1.default.relative(process.cwd(), (0, cli_utils_1.getBaselineStatsFilepath)());
50
- task.title = `${task.title} (${baselineFilepath})`;
49
+ task.title = `${task.title} (${baselinePath})`;
51
50
  ctx.sources = ctx.sources.concat([{ webpack: (0, plugin_webpack_filter_1.default)(ctx.baselineStats) }]);
52
51
  },
53
52
  skip: async (ctx) => {
@@ -59,11 +58,11 @@ async function run(options) {
59
58
  }
60
59
  let baselineStats = {};
61
60
  try {
62
- baselineStats = await (0, cli_utils_1.readBaseline)();
61
+ baselineStats = await (0, cli_utils_1.readBaseline)(baselineAbsolutePath);
63
62
  ctx.baselineStats = baselineStats;
64
63
  }
65
64
  catch (err) {
66
- return cli_utils_1.TEXT.CLI_BASELINE_MISSING_WARN;
65
+ return cli_utils_1.TEXT.BASELINE_MISSING;
67
66
  }
68
67
  return false;
69
68
  },
@@ -73,9 +72,8 @@ async function run(options) {
73
72
  task: (ctx, task) => {
74
73
  const stats = (0, lodash_1.get)(ctx, 'sources[0]webpack');
75
74
  const filteredWebpackStats = (0, plugin_webpack_filter_1.default)(stats);
76
- const baselineFilepath = path_1.default.relative(process.cwd(), (0, cli_utils_1.getBaselineStatsFilepath)());
77
- return (0, cli_utils_1.writeBaseline)(filteredWebpackStats).then(() => {
78
- task.title = `${task.title} (${baselineFilepath})`;
75
+ return (0, cli_utils_1.writeBaseline)(filteredWebpackStats, baselineAbsolutePath).then(() => {
76
+ task.title = `${task.title} (${baselinePath})`;
79
77
  });
80
78
  },
81
79
  skip: () => !baseline && cli_utils_1.TEXT.CLI_NO_BASELINE,
@@ -114,15 +112,16 @@ async function run(options) {
114
112
  }
115
113
  const { output, report } = result;
116
114
  const reportInfo = (0, cli_utils_1.getReportInfo)(report);
117
- if (reportInfo) {
115
+ if (reportInfo?.text) {
118
116
  const infoBox = (0, boxen_1.default)(reportInfo.text, {
119
117
  padding: 1,
120
- borderColor: getReportInfoBorderColor(reportInfo),
118
+ borderColor: reportInfo.info?.deltaType
119
+ ? REPORT_INFO_COLORS[reportInfo.info.deltaType]
120
+ : REPORT_INFO_COLORS.NO_CHANGE,
121
121
  });
122
122
  console.log(`\n${infoBox}`);
123
123
  }
124
124
  console.log('\nArtifacts:');
125
125
  output?.map((reportPath) => console.log(`- ${reportPath}`));
126
126
  }
127
- exports.default = run;
128
127
  //# sourceMappingURL=run.js.map