@@ -135,17 +135,48 @@ async function main() {
135135 const fileContents = await fs . readFile ( BUNDLE_METADATA_FILE ) ;
136136 const metadata = JSON . parse ( String ( fileContents ) ) as Metadata ;
137137
138+ console . info ( "Comparing bundle metadata to baseline..." ) ;
139+
140+ const filesInBaseline = new Set ( Object . keys ( baselineMetadata . outputs ) ) ;
141+ const filesInCurrent = new Set ( Object . keys ( metadata . outputs ) ) ;
142+
143+ const filesNotPresent = filesInBaseline . difference ( filesInCurrent ) ;
144+ if ( filesNotPresent . size > 0 ) {
145+ console . info ( `Found ${ filesNotPresent . size } file(s) which were removed:` ) ;
146+ for ( const removedFile of filesNotPresent ) {
147+ console . info ( ` - ${ removedFile } ` ) ;
148+ }
149+ }
150+
138151 for ( const [ outputFile , outputData ] of Object . entries (
139152 metadata . outputs ,
140153 ) . reverse ( ) ) {
141- console . info ( `${ outputFile } : ${ toMB ( outputData . bytes ) } ` ) ;
142-
143- for ( const [ inputName , inputData ] of Object . entries ( outputData . inputs ) ) {
144- // Ignore any inputs that make up less than 5% of the output.
145- const percentage = ( inputData . bytesInOutput / outputData . bytes ) * 100.0 ;
146- if ( percentage < 5.0 ) continue ;
147-
148- console . info ( ` ${ inputName } : ${ toMB ( inputData . bytesInOutput ) } ` ) ;
154+ const baselineOutputData = baselineMetadata . outputs [ outputFile ] ;
155+
156+ if ( baselineOutputData === undefined ) {
157+ console . info ( `${ outputFile } : New file (${ toMB ( outputData . bytes ) } )` ) ;
158+ } else {
159+ const percentageDifference =
160+ ( ( outputData . bytes - baselineOutputData . bytes ) /
161+ baselineOutputData . bytes ) *
162+ 100.0 ;
163+
164+ if ( Math . abs ( percentageDifference ) >= 5 ) {
165+ console . info (
166+ `${ outputFile } : ${ toMB ( outputData . bytes ) } (${ percentageDifference . toFixed ( 2 ) } %)` ,
167+ ) ;
168+
169+ for ( const [ inputName , inputData ] of Object . entries (
170+ outputData . inputs ,
171+ ) ) {
172+ // Ignore any inputs that make up less than 5% of the output.
173+ const percentage =
174+ ( inputData . bytesInOutput / outputData . bytes ) * 100.0 ;
175+ if ( percentage < 5.0 ) continue ;
176+
177+ console . info ( ` ${ inputName } : ${ toMB ( inputData . bytesInOutput ) } ` ) ;
178+ }
179+ }
149180 }
150181 }
151182}
0 commit comments