packlyze 2.0.2 → 3.0.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
@@ -11,12 +11,20 @@ Advanced bundle analyzer with insights, recommendations, historical tracking, an
11
11
  ## 📊 Features
12
12
 
13
13
  - **Package Analysis**: Parse and analyze webpack, rollup, and esbuild stats files.
14
+ - **Package-Level Insights**: Group modules by npm package to identify heavy dependencies.
14
15
  - **Smart Recommendations**: Suggestions to optimize bundle size and structure.
15
16
  - **Tree-Shaking Detection**: Identify modules and patterns that block tree-shaking.
16
17
  - **Duplicate Detection**: Find and quantify duplicate modules with potential savings.
17
- - **Beautiful HTML Report**: Sleek, dark-themed, responsive report with high-level metrics and deep insights.
18
+ - **Chunk Analysis**: Analyze code-splitting efficiency and get optimization recommendations.
19
+ - **Unused Code Detection**: Identify potentially unused modules in your bundle.
20
+ - **Historical Tracking**: Track bundle size trends over time with `packlyze trends`.
21
+ - **Dependency Graph**: Generate Graphviz DOT files to visualize module dependencies.
22
+ - **Beautiful HTML Report**: Sleek, dark-themed, interactive report with search, filter, and sort.
18
23
  - **Baseline Comparison**: Compare current vs previous stats to see regressions and improvements.
24
+ - **Multiple Export Formats**: Export to HTML, CSV, or Markdown.
25
+ - **Config File Support**: Use `.packlyzerc` or `packlyze.config.json` for project defaults.
19
26
  - **CLI Tool**: Easy-to-use command-line interface with filters and CI-friendly thresholds.
27
+ - **Brotli Estimates**: Get Brotli compression size estimates (17% smaller than gzip).
20
28
  - **TypeScript Ready**: Full TypeScript support with type definitions.
21
29
 
22
30
  ## 🚀 Quick Start
@@ -201,6 +209,32 @@ packlyze analyze dist/stats.json \
201
209
  --no-html
202
210
  ```
203
211
 
212
+ ### Historical tracking
213
+
214
+ Track bundle size over time:
215
+
216
+ ```bash
217
+ # Automatically saves to .packlyze/history.json after each analysis
218
+ packlyze analyze stats.json
219
+
220
+ # View trends
221
+ packlyze trends
222
+
223
+ # View more entries
224
+ packlyze trends --limit 20
225
+ ```
226
+
227
+ ### Dependency graph
228
+
229
+ Generate a dependency graph visualization:
230
+
231
+ ```bash
232
+ packlyze analyze stats.json --dependency-graph graph.dot
233
+
234
+ # Render with Graphviz
235
+ dot -Tsvg graph.dot -o graph.svg
236
+ ```
237
+
204
238
  ## 🎯 Use Cases
205
239
 
206
240
  Common scenarios where Packlyze is helpful:
@@ -2,8 +2,11 @@ import { AnalysisResult } from '../types.js';
2
2
  export declare class Packlyze {
3
3
  private statsData;
4
4
  private baseDir;
5
- constructor(statsPath: string);
5
+ private verboseLog?;
6
+ constructor(statsPath: string, verboseLog?: (message: string) => void);
7
+ private log;
6
8
  private loadStats;
9
+ private validateStats;
7
10
  analyze(): Promise<AnalysisResult>;
8
11
  private extractBundleStats;
9
12
  private getTotalSize;
@@ -12,7 +15,18 @@ export declare class Packlyze {
12
15
  private getInitialBundleSize;
13
16
  private generateRecommendations;
14
17
  private detectTreeshakingIssues;
18
+ /**
19
+ * Extract package name from module path.
20
+ * Handles node_modules paths like:
21
+ * - node_modules/lodash/index.js -> lodash
22
+ * - node_modules/@types/node/index.d.ts -> @types/node
23
+ * - node_modules/react-dom/client.js -> react-dom
24
+ */
25
+ private extractPackageName;
15
26
  private findDuplicates;
27
+ private analyzePackages;
28
+ private detectUnusedModules;
29
+ private analyzeChunks;
16
30
  private calculateMetrics;
17
31
  }
18
32
  //# sourceMappingURL=packlyze.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"packlyze.d.ts","sourceRoot":"","sources":["../../src/analyzer/packlyze.ts"],"names":[],"mappings":"AAEA,OAAO,EAOL,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,qBAAa,QAAQ;IACnB,OAAO,CAAC,SAAS,CAcV;IACP,OAAO,CAAC,OAAO,CAAS;gBAEZ,SAAS,EAAE,MAAM;IAQ7B,OAAO,CAAC,SAAS;IASX,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAiBxC,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,uBAAuB;IAkD/B,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,gBAAgB;CAkBzB"}
1
+ {"version":3,"file":"packlyze.d.ts","sourceRoot":"","sources":["../../src/analyzer/packlyze.ts"],"names":[],"mappings":"AAEA,OAAO,EAUL,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,qBAAa,QAAQ;IACnB,OAAO,CAAC,SAAS,CAcV;IACP,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAC,CAA4B;gBAEnC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;IASrE,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,aAAa;IA0Cf,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAuCxC,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,uBAAuB;IAkD/B,OAAO,CAAC,uBAAuB;IAY/B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,mBAAmB;IAkD3B,OAAO,CAAC,aAAa;IAgErB,OAAO,CAAC,gBAAgB;CAuBzB"}
@@ -7,45 +7,111 @@ exports.Packlyze = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  class Packlyze {
10
- constructor(statsPath) {
10
+ constructor(statsPath, verboseLog) {
11
11
  this.statsData = {};
12
+ this.verboseLog = verboseLog;
12
13
  if (!fs_1.default.existsSync(statsPath)) {
13
14
  throw new Error(`Stats file not found: ${statsPath}`);
14
15
  }
15
16
  this.baseDir = path_1.default.dirname(statsPath);
16
17
  this.loadStats(statsPath);
17
18
  }
19
+ log(message) {
20
+ if (this.verboseLog) {
21
+ this.verboseLog(message);
22
+ }
23
+ }
18
24
  loadStats(statsPath) {
25
+ this.log('Reading stats file...');
19
26
  const content = fs_1.default.readFileSync(statsPath, 'utf-8');
27
+ this.log(`Stats file size: ${(content.length / 1024).toFixed(2)} KB`);
20
28
  try {
29
+ this.log('Parsing JSON...');
21
30
  this.statsData = JSON.parse(content);
31
+ this.log('Validating stats structure...');
32
+ this.validateStats();
33
+ this.log(`Found ${this.statsData.modules?.length || 0} modules, ${this.statsData.chunks?.length || 0} chunks`);
22
34
  }
23
35
  catch (e) {
36
+ if (e instanceof Error && e.message.includes('Invalid stats')) {
37
+ throw e;
38
+ }
24
39
  throw new Error(`Invalid JSON in stats file: ${e}`);
25
40
  }
26
41
  }
42
+ validateStats() {
43
+ if (!this.statsData || typeof this.statsData !== 'object') {
44
+ throw new Error('Invalid stats: stats file must be a valid JSON object');
45
+ }
46
+ // Check for required structure (at least one of assets, modules, or chunks should exist)
47
+ const hasAssets = Array.isArray(this.statsData.assets);
48
+ const hasModules = Array.isArray(this.statsData.modules);
49
+ const hasChunks = Array.isArray(this.statsData.chunks);
50
+ if (!hasAssets && !hasModules && !hasChunks) {
51
+ throw new Error('Invalid stats: stats file must contain at least one of: assets, modules, or chunks arrays. ' +
52
+ 'Ensure you generated the stats file correctly (e.g., webpack --profile --json stats.json)');
53
+ }
54
+ // Validate modules if present
55
+ if (hasModules && Array.isArray(this.statsData.modules)) {
56
+ for (const module of this.statsData.modules) {
57
+ if (module && typeof module !== 'object') {
58
+ throw new Error('Invalid stats: all modules must be objects');
59
+ }
60
+ if (module && module.size !== undefined && (typeof module.size !== 'number' || module.size < 0)) {
61
+ throw new Error('Invalid stats: module sizes must be non-negative numbers');
62
+ }
63
+ }
64
+ }
65
+ // Validate assets if present
66
+ if (hasAssets && Array.isArray(this.statsData.assets)) {
67
+ for (const asset of this.statsData.assets) {
68
+ if (asset && typeof asset !== 'object') {
69
+ throw new Error('Invalid stats: all assets must be objects');
70
+ }
71
+ if (asset && asset.size !== undefined && (typeof asset.size !== 'number' || asset.size < 0)) {
72
+ throw new Error('Invalid stats: asset sizes must be non-negative numbers');
73
+ }
74
+ }
75
+ }
76
+ }
27
77
  async analyze() {
78
+ this.log('Extracting bundle statistics...');
28
79
  const bundleStats = this.extractBundleStats();
29
- const recommendations = this.generateRecommendations(bundleStats);
30
- const treeshakingIssues = this.detectTreeshakingIssues();
80
+ this.log('Analyzing packages...');
81
+ const packages = this.analyzePackages(bundleStats);
82
+ this.log('Detecting duplicate modules...');
31
83
  const duplicates = this.findDuplicates();
84
+ this.log('Detecting tree-shaking issues...');
85
+ const treeshakingIssues = this.detectTreeshakingIssues();
86
+ this.log('Generating recommendations...');
87
+ const recommendations = this.generateRecommendations(bundleStats);
88
+ this.log('Calculating metrics...');
32
89
  const metrics = this.calculateMetrics(bundleStats);
90
+ this.log('Analyzing chunks...');
91
+ const chunkAnalysis = this.analyzeChunks(bundleStats);
92
+ this.log('Detecting unused modules...');
93
+ const unusedModules = this.detectUnusedModules(bundleStats);
94
+ this.log('Analysis complete!');
33
95
  return {
34
96
  bundleStats,
35
97
  recommendations,
36
98
  treeshakingIssues,
37
99
  duplicates,
100
+ packages,
101
+ chunkAnalysis,
102
+ unusedModules,
38
103
  metrics,
39
104
  timestamp: new Date().toISOString()
40
105
  };
41
106
  }
42
107
  extractBundleStats() {
43
108
  const assets = this.statsData.assets || [];
109
+ const totalSize = this.getTotalSize();
44
110
  const modules = (this.statsData.modules || []).map((m) => ({
45
111
  name: m.name || 'unknown',
46
112
  size: m.size || 0,
47
113
  gzipSize: m.gzipSize,
48
- percentage: (m.size || 0) / this.getTotalSize() * 100,
114
+ percentage: totalSize > 0 ? ((m.size || 0) / totalSize) * 100 : 0,
49
115
  reasons: Array.isArray(m.reasons)
50
116
  ? m.reasons.map((r) => typeof r === 'string' ? r : r.moduleName ?? '')
51
117
  : []
@@ -138,35 +204,195 @@ class Packlyze {
138
204
  });
139
205
  return issues.slice(0, 10); // Limit to top 10
140
206
  }
207
+ /**
208
+ * Extract package name from module path.
209
+ * Handles node_modules paths like:
210
+ * - node_modules/lodash/index.js -> lodash
211
+ * - node_modules/@types/node/index.d.ts -> @types/node
212
+ * - node_modules/react-dom/client.js -> react-dom
213
+ */
214
+ extractPackageName(modulePath) {
215
+ if (!modulePath)
216
+ return null;
217
+ // Match node_modules packages
218
+ const nodeModulesMatch = modulePath.match(/node_modules[/\\](@[^/\\]+[/\\][^/\\]+|[^/\\]+)/);
219
+ if (nodeModulesMatch) {
220
+ return nodeModulesMatch[1].replace(/[/\\]/g, '/');
221
+ }
222
+ // For non-node_modules paths, use basename as fallback
223
+ // This helps catch duplicates in source code (e.g., utils/helper.js and components/helper.js)
224
+ return path_1.default.basename(modulePath);
225
+ }
141
226
  findDuplicates() {
142
- const moduleMap = new Map();
227
+ // Group by package name (for node_modules) or basename (for source files)
228
+ const packageMap = new Map();
143
229
  const duplicates = [];
144
230
  (this.statsData.modules || []).forEach((module) => {
145
- const baseName = path_1.default.basename(module.name || '');
146
- if (!moduleMap.has(baseName)) {
147
- moduleMap.set(baseName, []);
231
+ const moduleName = module.name || '';
232
+ const packageName = this.extractPackageName(moduleName) || 'unknown';
233
+ if (!packageMap.has(packageName)) {
234
+ packageMap.set(packageName, []);
148
235
  }
149
- moduleMap.get(baseName).push(module);
236
+ packageMap.get(packageName).push(module);
150
237
  });
151
- moduleMap.forEach((modules) => {
238
+ // Find actual duplicates (same package/module appearing multiple times)
239
+ packageMap.forEach((modules) => {
152
240
  if (modules.length > 1) {
153
- const totalSize = modules.reduce((s, m) => s + (m.size || 0), 0);
154
- const minSize = Math.min(...modules.map(m => m.size || 0));
155
- duplicates.push({
156
- names: modules.map(m => m.name),
157
- totalSize,
158
- savings: totalSize - minSize
159
- });
241
+ // Only consider it a duplicate if the modules have different full paths
242
+ // (same package imported from different locations)
243
+ const uniquePaths = new Set(modules.map(m => m.name));
244
+ if (uniquePaths.size > 1) {
245
+ const totalSize = modules.reduce((s, m) => s + (m.size || 0), 0);
246
+ const minSize = Math.min(...modules.map(m => m.size || 0));
247
+ duplicates.push({
248
+ names: modules.map(m => m.name),
249
+ totalSize,
250
+ savings: totalSize - minSize
251
+ });
252
+ }
160
253
  }
161
254
  });
162
255
  return duplicates.sort((a, b) => b.totalSize - a.totalSize).slice(0, 10);
163
256
  }
257
+ analyzePackages(stats) {
258
+ const packageMap = new Map();
259
+ const bundleTotalSize = stats.size;
260
+ stats.modules.forEach((module) => {
261
+ const packageName = this.extractPackageName(module.name);
262
+ if (!packageName)
263
+ return;
264
+ if (!packageMap.has(packageName)) {
265
+ packageMap.set(packageName, { modules: [], totalGzip: 0 });
266
+ }
267
+ const pkg = packageMap.get(packageName);
268
+ pkg.modules.push(module);
269
+ if (module.gzipSize) {
270
+ pkg.totalGzip += module.gzipSize;
271
+ }
272
+ });
273
+ const packages = [];
274
+ packageMap.forEach((pkg, name) => {
275
+ const packageTotalSize = pkg.modules.reduce((sum, m) => sum + m.size, 0);
276
+ packages.push({
277
+ name,
278
+ totalSize: packageTotalSize,
279
+ gzipSize: pkg.totalGzip > 0 ? pkg.totalGzip : undefined,
280
+ moduleCount: pkg.modules.length,
281
+ modules: pkg.modules.map(m => m.name),
282
+ percentage: bundleTotalSize > 0 ? (packageTotalSize / bundleTotalSize) * 100 : 0
283
+ });
284
+ });
285
+ return packages
286
+ .sort((a, b) => b.totalSize - a.totalSize)
287
+ .slice(0, 20); // Top 20 packages
288
+ }
289
+ detectUnusedModules(stats) {
290
+ const unused = [];
291
+ const importedModules = new Set();
292
+ // Build set of all modules that are imported by others
293
+ stats.modules.forEach(module => {
294
+ const reasons = Array.isArray(module.reasons) ? module.reasons : [];
295
+ reasons.forEach(reason => {
296
+ // Extract module name from reason (format varies by bundler)
297
+ if (typeof reason === 'string' && reason !== 'entry' && reason !== 'cjs require') {
298
+ // Try to extract module path from reason
299
+ const match = reason.match(/([^\s]+\.(js|ts|jsx|tsx))/);
300
+ if (match && match[1]) {
301
+ importedModules.add(match[1]);
302
+ }
303
+ }
304
+ });
305
+ });
306
+ // Find modules that are not entry points and not imported
307
+ stats.modules.forEach(module => {
308
+ const reasons = Array.isArray(module.reasons) ? module.reasons : [];
309
+ const isEntry = reasons.some(r => {
310
+ const reasonStr = typeof r === 'string' ? r : String(r);
311
+ return reasonStr === 'entry' || reasonStr.includes('entry');
312
+ });
313
+ const isImported = importedModules.has(module.name);
314
+ if (!isEntry && !isImported && (module.size || 0) > 0) {
315
+ // Additional check: module might be in a chunk but not actually used
316
+ const inChunk = stats.chunks.some(chunk => {
317
+ const chunkModules = Array.isArray(chunk.modules) ? chunk.modules : [];
318
+ return chunkModules.includes(module.name);
319
+ });
320
+ if (inChunk) {
321
+ unused.push({
322
+ name: module.name || 'unknown',
323
+ size: module.size || 0,
324
+ reason: 'Module in bundle but no clear import path detected'
325
+ });
326
+ }
327
+ }
328
+ });
329
+ return unused
330
+ .sort((a, b) => b.size - a.size)
331
+ .slice(0, 20); // Top 20 potentially unused modules
332
+ }
333
+ analyzeChunks(stats) {
334
+ const chunks = stats.chunks;
335
+ if (chunks.length === 0) {
336
+ return {
337
+ averageChunkSize: 0,
338
+ averageModulesPerChunk: 0,
339
+ largestChunk: { id: 0, name: 'N/A', size: 0, modules: [] },
340
+ smallestChunk: { id: 0, name: 'N/A', size: 0, modules: [] },
341
+ initialChunkSize: 0,
342
+ recommendations: []
343
+ };
344
+ }
345
+ const chunkSizes = chunks.map(c => c.size || 0);
346
+ const totalChunkSize = chunkSizes.reduce((a, b) => a + b, 0);
347
+ const averageChunkSize = chunks.length > 0 ? totalChunkSize / chunks.length : 0;
348
+ const modulesPerChunk = chunks.map(c => (c.modules && Array.isArray(c.modules)) ? c.modules.length : 0);
349
+ const totalModules = modulesPerChunk.reduce((a, b) => a + b, 0);
350
+ const averageModulesPerChunk = chunks.length > 0 ? totalModules / chunks.length : 0;
351
+ const sortedBySize = [...chunks].sort((a, b) => (b.size || 0) - (a.size || 0));
352
+ const largestChunk = sortedBySize[0] || { id: 0, name: 'N/A', size: 0, modules: [] };
353
+ const smallestChunk = sortedBySize[sortedBySize.length - 1] || { id: 0, name: 'N/A', size: 0, modules: [] };
354
+ const initialChunks = chunks.filter(c => {
355
+ // Try to identify initial chunks
356
+ const chunkInfo = stats.chunks.find(ch => ch.id === c.id);
357
+ return chunkInfo && 'initial' in chunkInfo && chunkInfo.initial === true;
358
+ });
359
+ const initialChunkSize = initialChunks.reduce((sum, c) => sum + (c.size || 0), 0);
360
+ const recommendations = [];
361
+ // Large chunks recommendation
362
+ if (averageChunkSize > 500000) {
363
+ recommendations.push(`Average chunk size is ${(averageChunkSize / 1024).toFixed(2)}KB - consider splitting large chunks`);
364
+ }
365
+ // Too many small chunks
366
+ if (chunks.length > 20 && averageChunkSize < 50000) {
367
+ recommendations.push(`Many small chunks (${chunks.length}) - consider combining related chunks`);
368
+ }
369
+ // Initial chunk too large
370
+ if (initialChunkSize > 500000) {
371
+ recommendations.push(`Initial chunk is ${(initialChunkSize / 1024).toFixed(2)}KB - implement code-splitting for better load times`);
372
+ }
373
+ // Chunk size imbalance
374
+ if (smallestChunk.size > 0 && largestChunk.size > smallestChunk.size * 10) {
375
+ recommendations.push(`Chunk size imbalance detected - largest chunk is ${(largestChunk.size / smallestChunk.size).toFixed(1)}x larger than smallest`);
376
+ }
377
+ return {
378
+ averageChunkSize,
379
+ averageModulesPerChunk,
380
+ largestChunk,
381
+ smallestChunk,
382
+ initialChunkSize,
383
+ recommendations
384
+ };
385
+ }
164
386
  calculateMetrics(stats) {
165
387
  const sizes = stats.modules.map(m => m.size);
166
388
  const averageSize = sizes.length > 0 ? sizes.reduce((a, b) => a + b, 0) / sizes.length : 0;
389
+ const gzipSize = stats.gzipSize || 0;
390
+ // Brotli is typically 15-20% smaller than gzip, estimate at 17% reduction
391
+ const brotliSize = gzipSize > 0 ? Math.round(gzipSize * 0.83) : undefined;
167
392
  return {
168
393
  totalSize: stats.size,
169
- totalGzipSize: stats.gzipSize || 0,
394
+ totalGzipSize: gzipSize,
395
+ totalBrotliSize: brotliSize,
170
396
  moduleCount: stats.modules.length,
171
397
  chunkCount: stats.chunks.length,
172
398
  largestModule: stats.modules[0] || {
@@ -1 +1 @@
1
- {"version":3,"file":"packlyze.js","sourceRoot":"","sources":["../../src/analyzer/packlyze.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"packlyze.js","sourceRoot":"","sources":["../../src/analyzer/packlyze.ts"],"names":[],"mappings":"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"}