@@ -15,7 +15,7 @@ const shakenPct = (n, o) => Math.max((100 - ((n / o) * 100)).toFixed(2), 0)
1515const match = ( str , check ) => str . indexOf ( check ) !== - 1
1616
1717export const analyze = ( bundle , opts = { } , format = false ) => {
18- let { root, limit, filter, hideDeps } = opts
18+ let { root, limit, filter, hideDeps, showExports } = opts
1919 root = root || ( process && process . cwd ? process . cwd ( ) : null )
2020 let deps = { }
2121 let bundleSize = 0
@@ -25,7 +25,14 @@ export const analyze = (bundle, opts = {}, format = false) => {
2525
2626 return new Promise ( ( resolve , reject ) => {
2727 let modules = bundleModules . map ( ( m , i ) => {
28- let { id, originalLength : origSize , renderedLength, code } = m
28+ let {
29+ id,
30+ originalLength : origSize ,
31+ renderedLength,
32+ code,
33+ usedExports,
34+ unusedExports
35+ } = m
2936 id = id . replace ( root , '' )
3037 let size = renderedLength
3138 if ( ! size && size !== 0 ) size = code ? Buffer . byteLength ( code , 'utf8' ) : 0
@@ -41,7 +48,7 @@ export const analyze = (bundle, opts = {}, format = false) => {
4148 deps [ d ] . push ( id )
4249 } )
4350
44- return { id, size, origSize}
51+ return { id, size, origSize, usedExports , unusedExports }
4552 } ) . filter ( ( m ) => m )
4653
4754 modules . sort ( ( a , b ) => b . size - a . size )
@@ -77,11 +84,22 @@ export const analyze = (bundle, opts = {}, format = false) => {
7784 `original size: ${ buf } ${ formatBytes ( m . origSize || 'unknown' ) } \n` +
7885 `code reduction: ${ buf } ${ m . reduction } %\n` +
7986 `dependents: ${ buf } ${ m . dependents . length } \n`
87+
8088 if ( ! hideDeps ) {
8189 m . dependents . forEach ( ( d ) => {
8290 formatted += `${ tab } -${ buf } ${ d . replace ( root , '' ) } \n`
8391 } )
8492 }
93+ if ( showExports && m . usedExports && m . unusedExports ) {
94+ formatted += `used exports: ${ buf } ${ m . usedExports . length } \n`
95+ m . usedExports . forEach ( ( e ) => {
96+ formatted += `${ tab } -${ buf } ${ e } \n`
97+ } )
98+ formatted += `unused exports: ${ buf } ${ m . unusedExports . length } \n`
99+ m . unusedExports . forEach ( ( e ) => {
100+ formatted += `${ tab } -${ buf } ${ e } \n`
101+ } )
102+ }
85103 formatted += `${ borderX } `
86104 } )
87105
@@ -107,6 +125,8 @@ export const plugin = (opts = {}) => {
107125 modules . forEach ( ( m ) => {
108126 let bm = bundle . modules [ m . id ]
109127 bm . id = bm . id || m . id
128+ bm . usedExports = bm . renderedExports || m . renderedExports
129+ bm . unusedExports = bm . removedExports || m . removedExports
110130 bm . dependencies = m . dependencies || [ ]
111131 } )
112132 modules = Object . keys ( bundle . modules ) . map ( ( k ) => bundle . modules [ k ] )
0 commit comments