@@ -6,8 +6,7 @@ import { bold, dim, green } from 'ansis'
6
6
import Debug from 'debug'
7
7
import { formatBytes } from '../utils/format'
8
8
import { noop } from '../utils/general'
9
- import { logger } from '../utils/logger'
10
- import { prettyFormat } from '../utils/package'
9
+ import { logger , prettyFormat , prettyName } from '../utils/logger'
11
10
import type { OutputAsset , OutputChunk , Plugin } from 'rolldown'
12
11
13
12
const debug = Debug ( 'tsdown:report' )
@@ -24,8 +23,8 @@ interface SizeInfo {
24
23
gzip : number
25
24
brotli : number
26
25
rawText : string
27
- gzipText : string
28
- brotliText : string
26
+ gzipText ? : string
27
+ brotliText ? : string
29
28
}
30
29
31
30
export interface ReportOptions {
@@ -48,6 +47,8 @@ export function ReportPlugin(
48
47
options : ReportOptions ,
49
48
cwd : string ,
50
49
cjsDts ?: boolean ,
50
+ name ?: string ,
51
+ isMultiFormat ?: boolean ,
51
52
) : Plugin {
52
53
return {
53
54
name : 'tsdown:report' ,
@@ -74,17 +75,21 @@ export function ReportPlugin(
74
75
...sizes . map ( ( size ) => size . rawText . length ) ,
75
76
)
76
77
const gzipTextLength = Math . max (
77
- ...sizes . map ( ( size ) => size . gzipText . length ) ,
78
+ ...sizes . map ( ( size ) =>
79
+ size . gzipText == null ? 0 : size . gzipText . length ,
80
+ ) ,
78
81
)
79
82
const brotliTextLength = Math . max (
80
- ...sizes . map ( ( size ) => size . brotliText . length ) ,
83
+ ...sizes . map ( ( size ) =>
84
+ size . brotliText == null ? 0 : size . brotliText . length ,
85
+ ) ,
81
86
)
82
87
83
88
let totalRaw = 0
84
89
for ( const size of sizes ) {
85
90
size . rawText = size . rawText . padStart ( rawTextLength )
86
- size . gzipText = size . gzipText . padStart ( gzipTextLength )
87
- size . brotliText = size . brotliText . padStart ( brotliTextLength )
91
+ size . gzipText = size . gzipText ? .padStart ( gzipTextLength )
92
+ size . brotliText = size . brotliText ? .padStart ( brotliTextLength )
88
93
totalRaw += size . raw
89
94
}
90
95
@@ -98,23 +103,33 @@ export function ReportPlugin(
98
103
return b . raw - a . raw
99
104
} )
100
105
101
- const formatLabel = prettyFormat ( cjsDts ? 'cjs' : outputOptions . format )
106
+ const nameLabel = prettyName ( name )
107
+ const formatLabel =
108
+ isMultiFormat && prettyFormat ( cjsDts ? 'cjs' : outputOptions . format )
102
109
103
110
for ( const size of sizes ) {
104
111
const filenameColor = size . dts ? green : noop
105
112
106
113
logger . info (
114
+ nameLabel ,
107
115
formatLabel ,
108
116
dim ( `${ outDir } /` ) +
109
117
filenameColor ( ( size . isEntry ? bold : noop ) ( size . filename ) ) ,
110
118
` ` . repeat ( filenameLength - size . filename . length ) ,
111
- dim `${ size . rawText } │ gzip: ${ size . gzipText } ` ,
112
- options . brotli ? dim ` │ brotli: ${ size . brotliText } ` : '' ,
119
+ dim ( size . rawText ) ,
120
+ size . gzipText && dim `│ gzip: ${ size . gzipText } ` ,
121
+ options . brotli &&
122
+ size . brotliText &&
123
+ dim `│ brotli: ${ size . brotliText } ` ,
113
124
)
114
125
}
115
126
116
127
const totalSizeText = formatBytes ( totalRaw )
117
- logger . info ( formatLabel , `${ sizes . length } files, total: ${ totalSizeText } ` )
128
+ logger . info (
129
+ nameLabel ,
130
+ formatLabel ,
131
+ `${ sizes . length } files, total: ${ totalSizeText } ` ,
132
+ )
118
133
} ,
119
134
}
120
135
}
@@ -149,7 +164,7 @@ async function calcSize(
149
164
dts : RE_DTS . test ( chunk . fileName ) ,
150
165
isEntry : chunk . type === 'chunk' && chunk . isEntry ,
151
166
raw,
152
- rawText : formatBytes ( raw ) ,
167
+ rawText : formatBytes ( raw ) ! ,
153
168
gzip,
154
169
gzipText : formatBytes ( gzip ) ,
155
170
brotli,
0 commit comments