rollup-plugin-stats 1.1.0-beta.0 → 1.1.0

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
@@ -47,7 +47,8 @@ module.exports = {
47
47
 
48
48
  ### Options
49
49
 
50
- - `fileName` - the JSON filename relative to the build folder, default: `stats.json`
50
+ - `fileName` - the JSON filepath relative to the build folder or absolute(default: `stats.json`)
51
+ - `write` - format and write the stats to disk(default: `fs.write(filename, JSON.stringify(stats, null, 2))`)
51
52
  - `stats`
52
53
  - `source` - output asset/chunk/module source (default `false`)
53
54
  - `excludeAssets` - exclude matching assets: `string | RegExp | ((filepath: string) => boolean) | Array<string | RegExp | ((filepath: string) => boolean)>`
package/dist/index.cjs CHANGED
@@ -1,6 +1,11 @@
1
1
  'use strict';
2
2
 
3
+ var path = require('node:path');
4
+ var process = require('node:process');
5
+ var fs = require('node:fs/promises');
3
6
  var omit = require('lodash/omit.js');
7
+ var entries = require('lodash/entries.js');
8
+ var round = require('lodash/round.js');
4
9
 
5
10
  /**
6
11
  * Check if filepath should be excluded based on patterns
@@ -31,7 +36,7 @@ function checkExcludeFilepath(filepath, patterns) {
31
36
  function extractRollupStats(bundle, options = {}) {
32
37
  const { source = false, excludeAssets, excludeModules } = options;
33
38
  const output = {};
34
- Object.entries(bundle).forEach(([bundleEntryFilepath, bundleEntryStats]) => {
39
+ entries(bundle).forEach(([bundleEntryFilepath, bundleEntryStats]) => {
35
40
  // Skip extraction if the entry filepath matches the exclude assets pattern
36
41
  if (checkExcludeFilepath(bundleEntryFilepath, excludeAssets)) {
37
42
  return;
@@ -53,7 +58,7 @@ function extractRollupStats(bundle, options = {}) {
53
58
  }
54
59
  // Extract chunk modules stats
55
60
  const chunkModulesStats = {};
56
- Object.entries(chunkStats.modules).forEach(([bundleModuleFilepath, bundleModuleStats]) => {
61
+ entries(chunkStats.modules).forEach(([bundleModuleFilepath, bundleModuleStats]) => {
57
62
  // Skip module extraction if the filepath matches the exclude modules pattern
58
63
  if (checkExcludeFilepath(bundleModuleFilepath, excludeModules)) {
59
64
  return;
@@ -73,24 +78,71 @@ function extractRollupStats(bundle, options = {}) {
73
78
  return output;
74
79
  }
75
80
 
81
+ const FILE_SIZE = {
82
+ BYTE: {
83
+ symbol: 'B',
84
+ multiplier: 1,
85
+ },
86
+ KILO: {
87
+ symbol: 'KiB',
88
+ multiplier: 1024,
89
+ },
90
+ MEGA: {
91
+ symbol: 'MiB',
92
+ multiplier: 1024 * 1024,
93
+ },
94
+ };
95
+ function formatFileSize(value) {
96
+ let unit = FILE_SIZE.BYTE;
97
+ if (typeof value !== 'number') {
98
+ return `0${unit.symbol}`;
99
+ }
100
+ if (value < FILE_SIZE.KILO.multiplier) {
101
+ unit = FILE_SIZE.BYTE;
102
+ }
103
+ else if (value < FILE_SIZE.MEGA.multiplier) {
104
+ unit = FILE_SIZE.KILO;
105
+ }
106
+ else {
107
+ unit = FILE_SIZE.MEGA;
108
+ }
109
+ return `${round(value / unit.multiplier, 2)}${unit.symbol}`;
110
+ }
111
+
76
112
  const PLUGIN_NAME = 'rollupStats';
77
113
  const DEFAULT_FILE_NAME = 'stats.json';
78
- function defaultFormatOutput(stats) {
79
- return JSON.stringify(stats, null, 2);
80
- }
81
114
  function rollupStats(options = {}) {
82
- const { fileName, stats } = options;
115
+ const { fileName, stats: statsOptions, writer = rollupStatsWrite } = options;
83
116
  return {
84
117
  name: PLUGIN_NAME,
85
- generateBundle(_, bundle) {
86
- this.emitFile({
87
- type: 'asset',
88
- fileName: fileName || DEFAULT_FILE_NAME,
89
- source: defaultFormatOutput(extractRollupStats(bundle, stats)),
90
- });
118
+ async generateBundle(context, bundle) {
119
+ const resolvedFileName = fileName || DEFAULT_FILE_NAME;
120
+ const filepath = path.isAbsolute(resolvedFileName)
121
+ ? resolvedFileName
122
+ : path.join(context.dir || process.cwd(), resolvedFileName);
123
+ const stats = extractRollupStats(bundle, statsOptions);
124
+ try {
125
+ const res = await writer(filepath, stats);
126
+ const outputSize = Buffer.byteLength(res.content, 'utf-8');
127
+ this.info(`Stats saved to ${res.filepath} (${formatFileSize(outputSize)})`);
128
+ }
129
+ catch (error) {
130
+ // Log error, but do not throw to allow the compilation to continue
131
+ this.warn(error);
132
+ }
91
133
  },
92
134
  };
93
135
  }
136
+ async function rollupStatsWrite(filepath, stats) {
137
+ const content = JSON.stringify(stats, null, 2);
138
+ // Create base directory if it does not exist
139
+ await fs.mkdir(path.dirname(filepath), { recursive: true });
140
+ await fs.writeFile(filepath, content);
141
+ return {
142
+ filepath,
143
+ content,
144
+ };
145
+ }
94
146
 
95
147
  module.exports = rollupStats;
96
148
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils/check-exclude-filepath.ts","../src/extract.ts","../src/index.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/check-exclude-filepath.ts","../src/extract.ts","../src/utils/format-file-size.ts","../src/index.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,25 @@
1
- import { Plugin } from 'rollup';
2
- import { type StatsOptions } from './extract';
1
+ import type { Plugin } from 'rollup';
2
+ import { type Stats, type StatsOptions } from './extract';
3
+ export type RollupStatsWriteResponse = {
4
+ filepath: string;
5
+ content: string;
6
+ };
7
+ export type RollupStatsWrite = (filepath: string, stats: Stats) => RollupStatsWriteResponse;
3
8
  export type RollupStatsOptions = {
4
9
  /**
5
- * JSON file output fileName
6
- * default: stats.json
10
+ * Output filename relative to Rollup output directory or absolute
11
+ * @default: stats.json
7
12
  */
8
13
  fileName?: string;
14
+ /**
15
+ * Rollup stats options
16
+ */
9
17
  stats?: StatsOptions;
18
+ /**
19
+ * Custom file writer
20
+ * @default - fs.write(FILENAME, JSON.stringify(STATS, null, 2));
21
+ */
22
+ write?: RollupStatsWrite;
10
23
  };
11
24
  declare function rollupStats(options?: RollupStatsOptions): Plugin;
12
25
  export default rollupStats;
package/dist/index.mjs CHANGED
@@ -1,4 +1,9 @@
1
+ import path from 'node:path';
2
+ import process from 'node:process';
3
+ import fs from 'node:fs/promises';
1
4
  import omit from 'lodash/omit.js';
5
+ import entries from 'lodash/entries.js';
6
+ import round from 'lodash/round.js';
2
7
 
3
8
  /**
4
9
  * Check if filepath should be excluded based on patterns
@@ -29,7 +34,7 @@ function checkExcludeFilepath(filepath, patterns) {
29
34
  function extractRollupStats(bundle, options = {}) {
30
35
  const { source = false, excludeAssets, excludeModules } = options;
31
36
  const output = {};
32
- Object.entries(bundle).forEach(([bundleEntryFilepath, bundleEntryStats]) => {
37
+ entries(bundle).forEach(([bundleEntryFilepath, bundleEntryStats]) => {
33
38
  // Skip extraction if the entry filepath matches the exclude assets pattern
34
39
  if (checkExcludeFilepath(bundleEntryFilepath, excludeAssets)) {
35
40
  return;
@@ -51,7 +56,7 @@ function extractRollupStats(bundle, options = {}) {
51
56
  }
52
57
  // Extract chunk modules stats
53
58
  const chunkModulesStats = {};
54
- Object.entries(chunkStats.modules).forEach(([bundleModuleFilepath, bundleModuleStats]) => {
59
+ entries(chunkStats.modules).forEach(([bundleModuleFilepath, bundleModuleStats]) => {
55
60
  // Skip module extraction if the filepath matches the exclude modules pattern
56
61
  if (checkExcludeFilepath(bundleModuleFilepath, excludeModules)) {
57
62
  return;
@@ -71,24 +76,71 @@ function extractRollupStats(bundle, options = {}) {
71
76
  return output;
72
77
  }
73
78
 
79
+ const FILE_SIZE = {
80
+ BYTE: {
81
+ symbol: 'B',
82
+ multiplier: 1,
83
+ },
84
+ KILO: {
85
+ symbol: 'KiB',
86
+ multiplier: 1024,
87
+ },
88
+ MEGA: {
89
+ symbol: 'MiB',
90
+ multiplier: 1024 * 1024,
91
+ },
92
+ };
93
+ function formatFileSize(value) {
94
+ let unit = FILE_SIZE.BYTE;
95
+ if (typeof value !== 'number') {
96
+ return `0${unit.symbol}`;
97
+ }
98
+ if (value < FILE_SIZE.KILO.multiplier) {
99
+ unit = FILE_SIZE.BYTE;
100
+ }
101
+ else if (value < FILE_SIZE.MEGA.multiplier) {
102
+ unit = FILE_SIZE.KILO;
103
+ }
104
+ else {
105
+ unit = FILE_SIZE.MEGA;
106
+ }
107
+ return `${round(value / unit.multiplier, 2)}${unit.symbol}`;
108
+ }
109
+
74
110
  const PLUGIN_NAME = 'rollupStats';
75
111
  const DEFAULT_FILE_NAME = 'stats.json';
76
- function defaultFormatOutput(stats) {
77
- return JSON.stringify(stats, null, 2);
78
- }
79
112
  function rollupStats(options = {}) {
80
- const { fileName, stats } = options;
113
+ const { fileName, stats: statsOptions, writer = rollupStatsWrite } = options;
81
114
  return {
82
115
  name: PLUGIN_NAME,
83
- generateBundle(_, bundle) {
84
- this.emitFile({
85
- type: 'asset',
86
- fileName: fileName || DEFAULT_FILE_NAME,
87
- source: defaultFormatOutput(extractRollupStats(bundle, stats)),
88
- });
116
+ async generateBundle(context, bundle) {
117
+ const resolvedFileName = fileName || DEFAULT_FILE_NAME;
118
+ const filepath = path.isAbsolute(resolvedFileName)
119
+ ? resolvedFileName
120
+ : path.join(context.dir || process.cwd(), resolvedFileName);
121
+ const stats = extractRollupStats(bundle, statsOptions);
122
+ try {
123
+ const res = await writer(filepath, stats);
124
+ const outputSize = Buffer.byteLength(res.content, 'utf-8');
125
+ this.info(`Stats saved to ${res.filepath} (${formatFileSize(outputSize)})`);
126
+ }
127
+ catch (error) {
128
+ // Log error, but do not throw to allow the compilation to continue
129
+ this.warn(error);
130
+ }
89
131
  },
90
132
  };
91
133
  }
134
+ async function rollupStatsWrite(filepath, stats) {
135
+ const content = JSON.stringify(stats, null, 2);
136
+ // Create base directory if it does not exist
137
+ await fs.mkdir(path.dirname(filepath), { recursive: true });
138
+ await fs.writeFile(filepath, content);
139
+ return {
140
+ filepath,
141
+ content,
142
+ };
143
+ }
92
144
 
93
145
  export { rollupStats as default };
94
146
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/utils/check-exclude-filepath.ts","../src/extract.ts","../src/index.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/utils/check-exclude-filepath.ts","../src/extract.ts","../src/utils/format-file-size.ts","../src/index.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function formatFileSize(value?: number | null): string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rollup-plugin-stats",
3
3
  "description": "Output Rollup stats",
4
- "version": "1.1.0-beta.0",
4
+ "version": "1.1.0",
5
5
  "license": "MIT",
6
6
  "private": false,
7
7
  "author": {
@@ -50,20 +50,21 @@
50
50
  },
51
51
  "devDependencies": {
52
52
  "@eslint/js": "^9.17.0",
53
- "@release-it/conventional-changelog": "9.0.3",
53
+ "@release-it/conventional-changelog": "9.0.4",
54
54
  "@rollup/plugin-typescript": "^12.1.2",
55
55
  "@tsconfig/node18": "^18.2.4",
56
56
  "@types/lodash": "^4.17.13",
57
- "@types/node": "^18.19.68",
57
+ "@types/node": "^22.10.2",
58
58
  "dotenv": "^16.4.7",
59
59
  "eslint": "^9.17.0",
60
60
  "globals": "^15.14.0",
61
61
  "husky": "^8.0.3",
62
+ "memfs": "^4.15.1",
62
63
  "prettier": "^3.4.2",
63
- "release-it": "17.10.0",
64
+ "release-it": "17.11.0",
64
65
  "rollup": "^4.29.1",
65
66
  "typescript": "^5.7.2",
66
- "typescript-eslint": "^8.18.1",
67
+ "typescript-eslint": "^8.18.2",
67
68
  "vitest": "^2.1.8"
68
69
  },
69
70
  "dependencies": {