UNPKG

1.21 kBJavaScriptView Raw
1// @flow strict-local
2
3import type {Asset, BundleGraph} from '@parcel/types';
4import nullthrows from 'nullthrows';
5
6export type BundleReport = {|
7 bundles: Array<{|
8 filePath: string,
9 size: number,
10 time: number,
11 largestAssets: Array<{filePath: string, size: number, time: number}>,
12 totalAssets: number
13 |}>
14|};
15
16export default function generateBundleReport(
17 bundleGraph: BundleGraph,
18 largestAssetCount: number = 10
19): BundleReport {
20 let bundles = [];
21 bundleGraph.traverseBundles(bundle => {
22 bundles.push(bundle);
23 });
24 bundles.sort((a, b) => b.stats.size - a.stats.size);
25
26 return {
27 bundles: bundles.map(bundle => {
28 let assets: Array<Asset> = [];
29 bundle.traverseAssets(asset => {
30 assets.push(asset);
31 });
32 assets.sort((a, b) => b.stats.size - a.stats.size);
33
34 return {
35 filePath: nullthrows(bundle.filePath),
36 size: bundle.stats.size,
37 time: bundle.stats.time,
38 largestAssets: assets.slice(0, largestAssetCount).map(asset => ({
39 filePath: asset.filePath,
40 size: asset.stats.size,
41 time: asset.stats.time
42 })),
43 totalAssets: assets.length
44 };
45 })
46 };
47}