1 | "use strict";
|
2 |
|
3 | const path = require('path');
|
4 |
|
5 | const prettifyTime = require('./prettifyTime');
|
6 |
|
7 | const logger = require('@parcel/logger');
|
8 |
|
9 | const filesize = require('filesize');
|
10 |
|
11 | const LARGE_BUNDLE_SIZE = 1024 * 1024;
|
12 | const DEFAULT_NUM_LARGE_ASSETS = 10;
|
13 | const COLUMNS = [{
|
14 | align: 'left'
|
15 | },
|
16 | {
|
17 | align: 'right'
|
18 | },
|
19 | {
|
20 | align: 'right'
|
21 |
|
22 | }];
|
23 |
|
24 | function bundleReport(mainBundle, detailed = false) {
|
25 |
|
26 | let bundles = Array.from(iterateBundles(mainBundle)).sort((a, b) => b.totalSize - a.totalSize);
|
27 | let rows = [];
|
28 | var _iteratorNormalCompletion = true;
|
29 | var _didIteratorError = false;
|
30 | var _iteratorError = undefined;
|
31 |
|
32 | try {
|
33 | for (var _iterator = bundles[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
34 | let bundle = _step.value;
|
35 |
|
36 | rows.push([formatFilename(bundle.name, logger.chalk.cyan.bold), logger.chalk.bold(prettifySize(bundle.totalSize, bundle.totalSize > LARGE_BUNDLE_SIZE)), logger.chalk.green.bold(prettifyTime(bundle.bundleTime))]);
|
37 |
|
38 | if (detailed && bundle.assets.size > 1) {
|
39 | let assets = Array.from(bundle.assets).filter(a => a.type === bundle.type).sort((a, b) => b.bundledSize - a.bundledSize);
|
40 |
|
41 | let largestAssets = (() => {
|
42 | if (detailed === 'all') {
|
43 | return assets;
|
44 | }
|
45 |
|
46 | return assets.slice(0, isNaN(detailed) || typeof detailed === 'boolean' ? DEFAULT_NUM_LARGE_ASSETS : parseInt(detailed, 10));
|
47 | })();
|
48 |
|
49 | var _iteratorNormalCompletion2 = true;
|
50 | var _didIteratorError2 = false;
|
51 | var _iteratorError2 = undefined;
|
52 |
|
53 | try {
|
54 | for (var _iterator2 = largestAssets[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
55 | let asset = _step2.value;
|
56 |
|
57 | rows.push([(asset == assets[assets.length - 1] ? '└── ' : '├── ') + formatFilename(asset.name, logger.chalk.reset), logger.chalk.dim(prettifySize(asset.bundledSize)), logger.chalk.dim(logger.chalk.green(prettifyTime(asset.buildTime)))]);
|
58 | }
|
59 |
|
60 | } catch (err) {
|
61 | _didIteratorError2 = true;
|
62 | _iteratorError2 = err;
|
63 | } finally {
|
64 | try {
|
65 | if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
66 | _iterator2.return();
|
67 | }
|
68 | } finally {
|
69 | if (_didIteratorError2) {
|
70 | throw _iteratorError2;
|
71 | }
|
72 | }
|
73 | }
|
74 |
|
75 | if (assets.length > largestAssets.length) {
|
76 | rows.push(['└── ' + logger.chalk.dim(`+ ${assets.length - largestAssets.length} more assets`)]);
|
77 | }
|
78 |
|
79 |
|
80 | if (bundle !== bundles[bundles.length - 1]) {
|
81 | rows.push([]);
|
82 | }
|
83 | }
|
84 | }
|
85 |
|
86 | } catch (err) {
|
87 | _didIteratorError = true;
|
88 | _iteratorError = err;
|
89 | } finally {
|
90 | try {
|
91 | if (!_iteratorNormalCompletion && _iterator.return != null) {
|
92 | _iterator.return();
|
93 | }
|
94 | } finally {
|
95 | if (_didIteratorError) {
|
96 | throw _iteratorError;
|
97 | }
|
98 | }
|
99 | }
|
100 |
|
101 | logger.log('');
|
102 | logger.table(COLUMNS, rows);
|
103 | }
|
104 |
|
105 | module.exports = bundleReport;
|
106 |
|
107 | function* iterateBundles(bundle) {
|
108 | if (!bundle.isEmpty) {
|
109 | yield bundle;
|
110 | }
|
111 |
|
112 | var _iteratorNormalCompletion3 = true;
|
113 | var _didIteratorError3 = false;
|
114 | var _iteratorError3 = undefined;
|
115 |
|
116 | try {
|
117 | for (var _iterator3 = bundle.childBundles[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
118 | let child = _step3.value;
|
119 | yield* iterateBundles(child);
|
120 | }
|
121 | } catch (err) {
|
122 | _didIteratorError3 = true;
|
123 | _iteratorError3 = err;
|
124 | } finally {
|
125 | try {
|
126 | if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
127 | _iterator3.return();
|
128 | }
|
129 | } finally {
|
130 | if (_didIteratorError3) {
|
131 | throw _iteratorError3;
|
132 | }
|
133 | }
|
134 | }
|
135 | }
|
136 |
|
137 | function prettifySize(size, isLarge) {
|
138 | let res = filesize(size);
|
139 |
|
140 | if (isLarge) {
|
141 | return logger.chalk.yellow(logger.emoji.warning + ' ' + res);
|
142 | }
|
143 |
|
144 | return logger.chalk.magenta(res);
|
145 | }
|
146 |
|
147 | function formatFilename(filename, color = logger.chalk.reset) {
|
148 | let dir = path.relative(process.cwd(), path.dirname(filename));
|
149 | return logger.chalk.dim(dir + (dir ? path.sep : '')) + color(path.basename(filename));
|
150 | } |
\ | No newline at end of file |