shaka-bundle-size 0.0.10 → 0.0.12

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 (72) hide show
  1. package/dist/BaselineStorage.d.ts +6 -2
  2. package/dist/BaselineStorage.d.ts.map +1 -1
  3. package/dist/BaselineStorage.js +6 -1
  4. package/dist/BaselineStorage.js.map +1 -1
  5. package/dist/SourceMapGenerator.d.ts.map +1 -1
  6. package/dist/SourceMapGenerator.js +3 -1
  7. package/dist/SourceMapGenerator.js.map +1 -1
  8. package/dist/WebpackStatsReader.js +1 -1
  9. package/dist/WebpackStatsReader.js.map +1 -1
  10. package/dist/__tests__/BaselineComparator.test.d.ts +2 -0
  11. package/dist/__tests__/BaselineComparator.test.d.ts.map +1 -0
  12. package/dist/__tests__/BaselineComparator.test.js +269 -0
  13. package/dist/__tests__/BaselineComparator.test.js.map +1 -0
  14. package/dist/__tests__/BaselineStorage.test.d.ts +2 -0
  15. package/dist/__tests__/BaselineStorage.test.d.ts.map +1 -0
  16. package/dist/__tests__/BaselineStorage.test.js +145 -0
  17. package/dist/__tests__/BaselineStorage.test.js.map +1 -0
  18. package/dist/__tests__/BaselineWriter.test.d.ts +2 -0
  19. package/dist/__tests__/BaselineWriter.test.d.ts.map +1 -0
  20. package/dist/__tests__/BaselineWriter.test.js +169 -0
  21. package/dist/__tests__/BaselineWriter.test.js.map +1 -0
  22. package/dist/__tests__/BundleSizeChecker.test.d.ts +2 -0
  23. package/dist/__tests__/BundleSizeChecker.test.d.ts.map +1 -0
  24. package/dist/__tests__/BundleSizeChecker.test.js +276 -0
  25. package/dist/__tests__/BundleSizeChecker.test.js.map +1 -0
  26. package/dist/__tests__/ExtendedStatsGenerator.test.d.ts +2 -0
  27. package/dist/__tests__/ExtendedStatsGenerator.test.d.ts.map +1 -0
  28. package/dist/__tests__/ExtendedStatsGenerator.test.js +118 -0
  29. package/dist/__tests__/ExtendedStatsGenerator.test.js.map +1 -0
  30. package/dist/__tests__/HtmlDiffGenerator.test.d.ts +2 -0
  31. package/dist/__tests__/HtmlDiffGenerator.test.d.ts.map +1 -0
  32. package/dist/__tests__/HtmlDiffGenerator.test.js +283 -0
  33. package/dist/__tests__/HtmlDiffGenerator.test.js.map +1 -0
  34. package/dist/__tests__/RegressionDetector.test.d.ts +2 -0
  35. package/dist/__tests__/RegressionDetector.test.d.ts.map +1 -0
  36. package/dist/__tests__/RegressionDetector.test.js +227 -0
  37. package/dist/__tests__/RegressionDetector.test.js.map +1 -0
  38. package/dist/__tests__/Reporter.test.d.ts +2 -0
  39. package/dist/__tests__/Reporter.test.d.ts.map +1 -0
  40. package/dist/__tests__/Reporter.test.js +359 -0
  41. package/dist/__tests__/Reporter.test.js.map +1 -0
  42. package/dist/__tests__/SizeCalculator.test.d.ts +2 -0
  43. package/dist/__tests__/SizeCalculator.test.d.ts.map +1 -0
  44. package/dist/__tests__/SizeCalculator.test.js +172 -0
  45. package/dist/__tests__/SizeCalculator.test.js.map +1 -0
  46. package/dist/__tests__/SourceMapGenerator.test.d.ts +2 -0
  47. package/dist/__tests__/SourceMapGenerator.test.d.ts.map +1 -0
  48. package/dist/__tests__/SourceMapGenerator.test.js +242 -0
  49. package/dist/__tests__/SourceMapGenerator.test.js.map +1 -0
  50. package/dist/__tests__/WebpackStatsReader.test.d.ts +2 -0
  51. package/dist/__tests__/WebpackStatsReader.test.d.ts.map +1 -0
  52. package/dist/__tests__/WebpackStatsReader.test.js +210 -0
  53. package/dist/__tests__/WebpackStatsReader.test.js.map +1 -0
  54. package/dist/__tests__/colors.test.d.ts +2 -0
  55. package/dist/__tests__/colors.test.d.ts.map +1 -0
  56. package/dist/__tests__/colors.test.js +54 -0
  57. package/dist/__tests__/colors.test.js.map +1 -0
  58. package/dist/__tests__/config.test.d.ts +2 -0
  59. package/dist/__tests__/config.test.d.ts.map +1 -0
  60. package/dist/__tests__/config.test.js +380 -0
  61. package/dist/__tests__/config.test.js.map +1 -0
  62. package/dist/cli.js +29 -16
  63. package/dist/cli.js.map +1 -1
  64. package/dist/config.d.ts +200 -33
  65. package/dist/config.d.ts.map +1 -1
  66. package/dist/config.js +93 -19
  67. package/dist/config.js.map +1 -1
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +6 -1
  71. package/dist/index.js.map +1 -1
  72. package/package.json +7 -2
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("fs"));
37
+ const path = __importStar(require("path"));
38
+ const SourceMapGenerator_1 = require("../SourceMapGenerator");
39
+ describe('SourceMapGenerator', () => {
40
+ const tmpBundlesDir = path.join(__dirname, 'tmp-smg-bundles');
41
+ const tmpBaselineDir = path.join(__dirname, 'tmp-smg-baseline');
42
+ beforeEach(() => {
43
+ fs.mkdirSync(tmpBundlesDir, { recursive: true });
44
+ fs.mkdirSync(tmpBaselineDir, { recursive: true });
45
+ });
46
+ afterEach(() => {
47
+ if (fs.existsSync(tmpBundlesDir))
48
+ fs.rmSync(tmpBundlesDir, { recursive: true });
49
+ if (fs.existsSync(tmpBaselineDir))
50
+ fs.rmSync(tmpBaselineDir, { recursive: true });
51
+ });
52
+ describe('UNCATEGORIZED_NAME', () => {
53
+ it('exports correct constant', () => {
54
+ expect(SourceMapGenerator_1.UNCATEGORIZED_NAME).toBe('uncategorized_chunks');
55
+ });
56
+ });
57
+ describe('formatLabel', () => {
58
+ it('replaces spaces with underscores', () => {
59
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
60
+ expect(gen.formatLabel('some module name')).toBe('some_module_name');
61
+ });
62
+ it('simplifies concatenated module labels', () => {
63
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
64
+ expect(gen.formatLabel('module + 3 modules (concatenated)')).toBe('module+concatenated_modules');
65
+ });
66
+ it('handles labels without special patterns', () => {
67
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
68
+ expect(gen.formatLabel('simple')).toBe('simple');
69
+ });
70
+ });
71
+ describe('formatSize', () => {
72
+ it('formats gzip size to KB string', () => {
73
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
74
+ expect(gen.formatSize(1024)).toBe(' 1.00 KB');
75
+ expect(gen.formatSize(2560)).toBe(' 2.50 KB');
76
+ });
77
+ it('returns empty string for undefined or 0', () => {
78
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
79
+ expect(gen.formatSize(undefined)).toBe('');
80
+ expect(gen.formatSize(0)).toBe('');
81
+ });
82
+ });
83
+ describe('buildParentsPath', () => {
84
+ it('returns bundlesDir prefix for empty parents', () => {
85
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: 'public/packs', baselineDir: tmpBaselineDir });
86
+ expect(gen.buildParentsPath([])).toBe('./public/packs/');
87
+ });
88
+ it('returns empty string for single parent', () => {
89
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
90
+ expect(gen.buildParentsPath(['root'])).toBe('');
91
+ });
92
+ it('builds path from parents (skipping first)', () => {
93
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
94
+ expect(gen.buildParentsPath(['root', 'child', 'grandchild'])).toBe('child/grandchild/');
95
+ });
96
+ });
97
+ describe('calculateChunksSize', () => {
98
+ it('sums gzip sizes from bundles dictionary', () => {
99
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
100
+ const dict = {
101
+ 'chunk1.js': { label: 'chunk1.js', gzipSize: 1024 },
102
+ 'chunk2.js': { label: 'chunk2.js', gzipSize: 2048 },
103
+ };
104
+ expect(gen.calculateChunksSize(['chunk1.js', 'chunk2.js'], dict)).toBe(3072);
105
+ });
106
+ it('handles missing bundles gracefully', () => {
107
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
108
+ const dict = {
109
+ 'chunk1.js': { label: 'chunk1.js', gzipSize: 1024 },
110
+ };
111
+ expect(gen.calculateChunksSize(['chunk1.js', 'missing.js'], dict)).toBe(1024);
112
+ });
113
+ });
114
+ describe('generateSeparator', () => {
115
+ it('creates separator string with default count', () => {
116
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
117
+ const sep = gen.generateSeparator();
118
+ const lines = sep.split('\n').filter(Boolean);
119
+ expect(lines).toHaveLength(20);
120
+ expect(lines[0]).toBe('='.repeat(200));
121
+ });
122
+ it('creates separator with custom count', () => {
123
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
124
+ const sep = gen.generateSeparator(3);
125
+ const lines = sep.split('\n').filter(Boolean);
126
+ expect(lines).toHaveLength(3);
127
+ });
128
+ });
129
+ describe('generateChunkGroup', () => {
130
+ it('generates loadable component section', () => {
131
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
132
+ const dict = {
133
+ 'app.js': { label: 'app.js', gzipSize: 10240 },
134
+ };
135
+ const output = gen.generateChunkGroup('AppComponent', ['app.js'], dict);
136
+ expect(output).toContain('Loadable Component: name=AppComponent');
137
+ expect(output).toContain('10.00 KB');
138
+ expect(output).toContain('chunksNumber=1');
139
+ });
140
+ it('lists chunks missing from extended stats with clarification', () => {
141
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: 'public/packs', baselineDir: tmpBaselineDir });
142
+ const dict = {
143
+ 'app.js': { label: 'app.js', gzipSize: 10240 },
144
+ };
145
+ const output = gen.generateChunkGroup('AppComponent', ['app.js', 'shared-runtime.js'], dict);
146
+ expect(output).toContain('chunksNumber=2');
147
+ expect(output).toContain('app.js');
148
+ expect(output).toContain('./public/packs/shared-runtime.js (no extended stats available)');
149
+ });
150
+ it('generates uncategorized section', () => {
151
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
152
+ const dict = {
153
+ 'runtime.js': { label: 'runtime.js', gzipSize: 512 },
154
+ };
155
+ const output = gen.generateChunkGroup('uncategorized_chunks', ['runtime.js'], dict);
156
+ expect(output).toContain('Uncategorized Chunks:');
157
+ });
158
+ });
159
+ describe('getOutputFilePath', () => {
160
+ it('joins baselineDir with filename', () => {
161
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: '/output' });
162
+ expect(gen.getOutputFilePath('map.txt')).toBe(path.join('/output', 'map.txt'));
163
+ });
164
+ });
165
+ describe('generateToFile', () => {
166
+ it('returns null when extended stats file does not exist', () => {
167
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
168
+ const result = gen.generateToFile('nonexistent.json', 'output.txt', [], []);
169
+ expect(result).toBeNull();
170
+ });
171
+ it('generates output file from extended stats', () => {
172
+ const extendedStats = [
173
+ {
174
+ label: 'app.js',
175
+ gzipSize: 5120,
176
+ groups: [
177
+ { label: 'src/App.tsx', gzipSize: 2048 },
178
+ { label: 'src/utils.ts', gzipSize: 1024 },
179
+ ],
180
+ },
181
+ ];
182
+ fs.writeFileSync(path.join(tmpBundlesDir, 'extended-stats.json'), JSON.stringify(extendedStats));
183
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
184
+ const groups = [
185
+ { name: 'App', assetNames: ['app.js'] },
186
+ ];
187
+ const result = gen.generateToFile('extended-stats.json', 'source_map.txt', groups, []);
188
+ expect(result).not.toBeNull();
189
+ expect(fs.existsSync(result)).toBe(true);
190
+ const content = fs.readFileSync(result, 'utf8');
191
+ expect(content).toContain('Loadable Component: name=App');
192
+ expect(content).toContain('# This file is generated automatically');
193
+ });
194
+ it('includes uncategorized chunks when present', () => {
195
+ const extendedStats = [
196
+ { label: 'app.js', gzipSize: 1024 },
197
+ { label: 'runtime.js', gzipSize: 512 },
198
+ ];
199
+ fs.writeFileSync(path.join(tmpBundlesDir, 'stats.json'), JSON.stringify(extendedStats));
200
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
201
+ const groups = [
202
+ { name: 'App', assetNames: ['app.js'] },
203
+ ];
204
+ const result = gen.generateToFile('stats.json', 'map.txt', groups, ['runtime.js']);
205
+ expect(result).not.toBeNull();
206
+ const content = fs.readFileSync(result, 'utf8');
207
+ expect(content).toContain('Uncategorized Chunks');
208
+ });
209
+ it('handles absolute path for extended stats', () => {
210
+ const extendedStats = [{ label: 'chunk.js', gzipSize: 256 }];
211
+ const absolutePath = path.join(tmpBundlesDir, 'abs-stats.json');
212
+ fs.writeFileSync(absolutePath, JSON.stringify(extendedStats));
213
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: tmpBundlesDir, baselineDir: tmpBaselineDir });
214
+ const result = gen.generateToFile(absolutePath, 'map.txt', [], []);
215
+ expect(result).not.toBeNull();
216
+ });
217
+ });
218
+ describe('writeSources', () => {
219
+ it('writes bundle label with size', () => {
220
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: 'bundles', baselineDir: tmpBaselineDir });
221
+ const bundle = { label: 'module.js', gzipSize: 2048 };
222
+ const lines = [];
223
+ gen.writeSources(bundle, [], lines);
224
+ expect(lines[0]).toContain('module.js');
225
+ expect(lines[0]).toContain('2.00 KB');
226
+ });
227
+ it('recursively writes nested groups', () => {
228
+ const gen = new SourceMapGenerator_1.SourceMapGenerator({ bundlesDir: 'bundles', baselineDir: tmpBaselineDir });
229
+ const bundle = {
230
+ label: 'parent',
231
+ gzipSize: 4096,
232
+ groups: [
233
+ { label: 'child', gzipSize: 1024 },
234
+ ],
235
+ };
236
+ const lines = [];
237
+ gen.writeSources(bundle, ['root'], lines);
238
+ expect(lines.length).toBeGreaterThanOrEqual(2);
239
+ });
240
+ });
241
+ });
242
+ //# sourceMappingURL=SourceMapGenerator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourceMapGenerator.test.js","sourceRoot":"","sources":["../../src/__tests__/SourceMapGenerator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=WebpackStatsReader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebpackStatsReader.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/WebpackStatsReader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("fs"));
37
+ const path = __importStar(require("path"));
38
+ const WebpackStatsReader_1 = require("../WebpackStatsReader");
39
+ describe('WebpackStatsReader', () => {
40
+ const tmpDir = path.join(__dirname, 'tmp-webpack-stats');
41
+ beforeEach(() => {
42
+ if (!fs.existsSync(tmpDir)) {
43
+ fs.mkdirSync(tmpDir, { recursive: true });
44
+ }
45
+ });
46
+ afterEach(() => {
47
+ if (fs.existsSync(tmpDir)) {
48
+ fs.rmSync(tmpDir, { recursive: true });
49
+ }
50
+ });
51
+ function writeStats(filename, stats) {
52
+ fs.writeFileSync(path.join(tmpDir, filename), JSON.stringify(stats));
53
+ }
54
+ describe('shouldIgnoreBundle', () => {
55
+ it('returns true for ignored bundles', () => {
56
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir, ignoredBundles: ['vendor'] });
57
+ expect(reader.shouldIgnoreBundle('vendor')).toBe(true);
58
+ });
59
+ it('returns false for non-ignored bundles', () => {
60
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir, ignoredBundles: ['vendor'] });
61
+ expect(reader.shouldIgnoreBundle('app')).toBe(false);
62
+ });
63
+ it('returns false when no ignoredBundles configured', () => {
64
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
65
+ expect(reader.shouldIgnoreBundle('anything')).toBe(false);
66
+ });
67
+ });
68
+ describe('extractAssetNames', () => {
69
+ it('returns asset names from chunk group', () => {
70
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
71
+ const chunkGroup = {
72
+ name: 'App',
73
+ assets: [{ name: 'app.js' }, { name: 'vendor.js' }],
74
+ };
75
+ expect(reader.extractAssetNames(chunkGroup)).toEqual(['app.js', 'vendor.js']);
76
+ });
77
+ it('throws when chunk group has no assets', () => {
78
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
79
+ const chunkGroup = { name: 'Empty', assets: [] };
80
+ expect(() => reader.extractAssetNames(chunkGroup)).toThrow('has no assets');
81
+ });
82
+ });
83
+ describe('readStats', () => {
84
+ it('reads and parses stats file correctly', () => {
85
+ const stats = {
86
+ namedChunkGroups: {
87
+ App: { name: 'App', assets: [{ name: 'app-chunk1.js' }, { name: 'app-chunk2.js' }] },
88
+ Header: { name: 'Header', assets: [{ name: 'header.js' }] },
89
+ },
90
+ chunks: [
91
+ { files: ['app-chunk1.js'] },
92
+ { files: ['app-chunk2.js'] },
93
+ { files: ['header.js'] },
94
+ { files: ['runtime.js'] },
95
+ ],
96
+ };
97
+ writeStats('loadable-stats.json', stats);
98
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
99
+ const result = reader.readStats('loadable-stats.json');
100
+ expect(result.namedChunkGroups).toHaveLength(2);
101
+ expect(result.namedChunkGroups[0].name).toBe('App');
102
+ expect(result.namedChunkGroups[0].assetNames).toEqual(['app-chunk1.js', 'app-chunk2.js']);
103
+ expect(result.namedChunkGroups[1].name).toBe('Header');
104
+ expect(result.allChunkFiles).toContain('runtime.js');
105
+ });
106
+ it('filters out ignored bundles', () => {
107
+ const stats = {
108
+ namedChunkGroups: {
109
+ App: { name: 'App', assets: [{ name: 'app.js' }] },
110
+ Vendor: { name: 'Vendor', assets: [{ name: 'vendor.js' }] },
111
+ },
112
+ chunks: [
113
+ { files: ['app.js'] },
114
+ { files: ['vendor.js'] },
115
+ ],
116
+ };
117
+ writeStats('loadable-stats.json', stats);
118
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir, ignoredBundles: ['Vendor'] });
119
+ const result = reader.readStats('loadable-stats.json');
120
+ expect(result.namedChunkGroups).toHaveLength(1);
121
+ expect(result.namedChunkGroups[0].name).toBe('App');
122
+ // Vendor files should be removed from allChunkFiles
123
+ expect(result.allChunkFiles.has('vendor.js')).toBe(false);
124
+ });
125
+ });
126
+ describe('collectAllChunkFiles', () => {
127
+ it('collects all files from all chunks', () => {
128
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
129
+ const stats = {
130
+ namedChunkGroups: {},
131
+ chunks: [
132
+ { files: ['a.js', 'b.js'] },
133
+ { files: ['c.js'] },
134
+ ],
135
+ };
136
+ const files = reader.collectAllChunkFiles(stats);
137
+ expect(files).toEqual(new Set(['a.js', 'b.js', 'c.js']));
138
+ });
139
+ it('deduplicates files across chunks', () => {
140
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
141
+ const stats = {
142
+ namedChunkGroups: {},
143
+ chunks: [
144
+ { files: ['shared.js', 'a.js'] },
145
+ { files: ['shared.js', 'b.js'] },
146
+ ],
147
+ };
148
+ const files = reader.collectAllChunkFiles(stats);
149
+ expect(files.size).toBe(3);
150
+ });
151
+ });
152
+ describe('findUncategorizedChunks', () => {
153
+ it('identifies chunks not in any named group', () => {
154
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
155
+ const allChunkFiles = new Set(['app.js', 'vendor.js', 'runtime.js']);
156
+ const namedChunkGroups = [
157
+ { name: 'App', assetNames: ['app.js'] },
158
+ ];
159
+ const uncategorized = reader.findUncategorizedChunks(allChunkFiles, namedChunkGroups);
160
+ expect(uncategorized).toContain('vendor.js');
161
+ expect(uncategorized).toContain('runtime.js');
162
+ expect(uncategorized).not.toContain('app.js');
163
+ });
164
+ it('returns empty array when all chunks are categorized', () => {
165
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
166
+ const allChunkFiles = new Set(['app.js']);
167
+ const namedChunkGroups = [
168
+ { name: 'App', assetNames: ['app.js'] },
169
+ ];
170
+ const uncategorized = reader.findUncategorizedChunks(allChunkFiles, namedChunkGroups);
171
+ expect(uncategorized).toEqual([]);
172
+ });
173
+ });
174
+ describe('readJsonFile', () => {
175
+ it('reads and parses a JSON file', () => {
176
+ const data = { key: 'value' };
177
+ fs.writeFileSync(path.join(tmpDir, 'test.json'), JSON.stringify(data));
178
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
179
+ const result = reader.readJsonFile('test.json');
180
+ expect(result).toEqual(data);
181
+ });
182
+ it('throws for non-existent file', () => {
183
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
184
+ expect(() => reader.readJsonFile('nonexistent.json')).toThrow();
185
+ });
186
+ it('throws for invalid JSON', () => {
187
+ fs.writeFileSync(path.join(tmpDir, 'invalid.json'), '{ invalid json }');
188
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
189
+ expect(() => reader.readJsonFile('invalid.json')).toThrow();
190
+ });
191
+ });
192
+ describe('malformed stats handling', () => {
193
+ it('throws when namedChunkGroups is missing', () => {
194
+ fs.writeFileSync(path.join(tmpDir, 'malformed.json'), JSON.stringify({ chunks: [{ files: ['a.js'] }] }));
195
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
196
+ expect(() => reader.readStats('malformed.json')).toThrow();
197
+ });
198
+ it('throws when chunks is missing', () => {
199
+ fs.writeFileSync(path.join(tmpDir, 'malformed.json'), JSON.stringify({ namedChunkGroups: {} }));
200
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
201
+ expect(() => reader.readStats('malformed.json')).toThrow();
202
+ });
203
+ it('throws when namedChunkGroups is null', () => {
204
+ fs.writeFileSync(path.join(tmpDir, 'malformed.json'), JSON.stringify({ namedChunkGroups: null, chunks: [] }));
205
+ const reader = new WebpackStatsReader_1.WebpackStatsReader({ bundlesDir: tmpDir });
206
+ expect(() => reader.readStats('malformed.json')).toThrow();
207
+ });
208
+ });
209
+ });
210
+ //# sourceMappingURL=WebpackStatsReader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebpackStatsReader.test.js","sourceRoot":"","sources":["../../src/__tests__/WebpackStatsReader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=colors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/colors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const colors_1 = require("../helpers/colors");
4
+ describe('ANSI', () => {
5
+ it('defines RESET code', () => {
6
+ expect(colors_1.ANSI.RESET).toBe('\x1b[0m');
7
+ });
8
+ it('defines RED code', () => {
9
+ expect(colors_1.ANSI.RED).toBe('\x1b[31m');
10
+ });
11
+ it('defines GREEN code', () => {
12
+ expect(colors_1.ANSI.GREEN).toBe('\x1b[32m');
13
+ });
14
+ it('defines BLUE code', () => {
15
+ expect(colors_1.ANSI.BLUE).toBe('\x1b[34m');
16
+ });
17
+ it('defines YELLOW code', () => {
18
+ expect(colors_1.ANSI.YELLOW).toBe('\x1b[33m');
19
+ });
20
+ it('defines BOLD code', () => {
21
+ expect(colors_1.ANSI.BOLD).toBe('\x1b[1m');
22
+ });
23
+ it('defines DIM code', () => {
24
+ expect(colors_1.ANSI.DIM).toBe('\x1b[2m');
25
+ });
26
+ });
27
+ describe('colorize', () => {
28
+ it('wraps text in red ANSI codes', () => {
29
+ expect(colors_1.colorize.red('hello')).toBe(`${colors_1.ANSI.RED}hello${colors_1.ANSI.RESET}`);
30
+ });
31
+ it('wraps text in green ANSI codes', () => {
32
+ expect(colors_1.colorize.green('hello')).toBe(`${colors_1.ANSI.GREEN}hello${colors_1.ANSI.RESET}`);
33
+ });
34
+ it('wraps text in blue ANSI codes', () => {
35
+ expect(colors_1.colorize.blue('hello')).toBe(`${colors_1.ANSI.BLUE}hello${colors_1.ANSI.RESET}`);
36
+ });
37
+ it('wraps text in yellow ANSI codes', () => {
38
+ expect(colors_1.colorize.yellow('hello')).toBe(`${colors_1.ANSI.YELLOW}hello${colors_1.ANSI.RESET}`);
39
+ });
40
+ it('wraps text in bold ANSI codes', () => {
41
+ expect(colors_1.colorize.bold('hello')).toBe(`${colors_1.ANSI.BOLD}hello${colors_1.ANSI.RESET}`);
42
+ });
43
+ it('wraps text in dim ANSI codes', () => {
44
+ expect(colors_1.colorize.dim('hello')).toBe(`${colors_1.ANSI.DIM}hello${colors_1.ANSI.RESET}`);
45
+ });
46
+ it('handles empty strings', () => {
47
+ expect(colors_1.colorize.red('')).toBe(`${colors_1.ANSI.RED}${colors_1.ANSI.RESET}`);
48
+ });
49
+ it('handles strings with existing ANSI codes', () => {
50
+ const nested = colors_1.colorize.red(colors_1.colorize.bold('hello'));
51
+ expect(nested).toBe(`${colors_1.ANSI.RED}${colors_1.ANSI.BOLD}hello${colors_1.ANSI.RESET}${colors_1.ANSI.RESET}`);
52
+ });
53
+ });
54
+ //# sourceMappingURL=colors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.test.js","sourceRoot":"","sources":["../../src/__tests__/colors.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":""}