@@ -121,17 +121,46 @@ async function main() {
121121 const fileContents = await fs . readFile ( BUNDLE_METADATA_FILE ) ;
122122 const metadata = JSON . parse ( String ( fileContents ) ) as Metadata ;
123123
124+ console . info ( "Comparing bundle metadata to baseline..." ) ;
125+
126+ const filesInBaseline = new Set ( Object . keys ( baselineMetadata . outputs ) ) ;
127+ const filesInCurrent = new Set ( Object . keys ( metadata . outputs ) ) ;
128+
129+ const filesNotPresent = filesInBaseline . difference ( filesInCurrent ) ;
130+ if ( filesNotPresent . size > 0 ) {
131+ console . info ( `Found ${ filesNotPresent . size } file(s) which were removed:` ) ;
132+ for ( const removedFile of filesNotPresent ) {
133+ console . info ( ` - ${ removedFile } ` ) ;
134+ }
135+ }
136+
124137 for ( const [ outputFile , outputData ] of Object . entries (
125138 metadata . outputs ,
126139 ) . reverse ( ) ) {
127- console . info ( `${ outputFile } : ${ toMB ( outputData . bytes ) } ` ) ;
128-
129- for ( const [ inputName , inputData ] of Object . entries ( outputData . inputs ) ) {
130- // Ignore any inputs that make up less than 5% of the output.
131- const percentage = ( inputData . bytesInOutput / outputData . bytes ) * 100.0 ;
132- if ( percentage < 5.0 ) continue ;
133-
134- console . info ( ` ${ inputName } : ${ toMB ( inputData . bytesInOutput ) } ` ) ;
140+ const baselineOutputData = baselineMetadata . outputs [ outputFile ] ;
141+
142+ if ( baselineOutputData === undefined ) {
143+ console . info ( `${ outputFile } : New file (${ toMB ( outputData . bytes ) } )` ) ;
144+ } else {
145+ const percentageDifference =
146+ 100.0 - ( baselineOutputData . bytes / outputData . bytes ) * 100.0 ;
147+
148+ if ( Math . abs ( percentageDifference ) >= 5 ) {
149+ console . info (
150+ `${ outputFile } : ${ toMB ( outputData . bytes ) } (${ percentageDifference } %)` ,
151+ ) ;
152+
153+ for ( const [ inputName , inputData ] of Object . entries (
154+ outputData . inputs ,
155+ ) ) {
156+ // Ignore any inputs that make up less than 5% of the output.
157+ const percentage =
158+ ( inputData . bytesInOutput / outputData . bytes ) * 100.0 ;
159+ if ( percentage < 5.0 ) continue ;
160+
161+ console . info ( ` ${ inputName } : ${ toMB ( inputData . bytesInOutput ) } ` ) ;
162+ }
163+ }
135164 }
136165 }
137166}
0 commit comments