11import { DebugIdGenerator , SourceMapUploader , SourceProcessor } from '@backtrace/sourcemap-tools' ;
22import path from 'path' ;
33import webpack , { WebpackPluginInstance } from 'webpack' ;
4+ import { statsPrinter } from './helpers/statsPrinter' ;
5+ import { AssetStats } from './models/AssetStats' ;
46import { BacktracePluginOptions } from './models/BacktracePluginOptions' ;
57
68export class BacktracePlugin implements WebpackPluginInstance {
@@ -15,6 +17,8 @@ export class BacktracePlugin implements WebpackPluginInstance {
1517 }
1618
1719 public apply ( compiler : webpack . Compiler ) {
20+ const assetStats = new Map < string , AssetStats > ( ) ;
21+
1822 compiler . hooks . afterEmit . tapPromise ( BacktracePlugin . name , async ( compilation ) => {
1923 const logger = compilation . getLogger ( BacktracePlugin . name ) ;
2024 if ( ! compilation . outputOptions . path ) {
@@ -48,33 +52,47 @@ export class BacktracePlugin implements WebpackPluginInstance {
4852 logger . log ( `received ${ entries . length } files for processing` ) ;
4953
5054 for ( const [ asset , sourcePath , sourceMapPath ] of entries ) {
55+ const stats : AssetStats = { } ;
56+ assetStats . set ( asset , stats ) ;
57+
5158 let debugId : string ;
5259
5360 logger . time ( `[${ asset } ] process source and sourcemap` ) ;
5461 try {
5562 debugId = await this . _sourceProcessor . processSourceAndSourceMapFiles ( sourcePath , sourceMapPath ) ;
63+ stats . debugId = debugId ;
64+ stats . processSource = true ;
65+ logger . timeEnd ( `[${ asset } ] process source and sourcemap` ) ;
5666 } catch ( err ) {
5767 logger . error ( `[${ asset } ] process source and sourcemap failed:` , err ) ;
68+ stats . processSource = err instanceof Error ? err : new Error ( 'Unknown error.' ) ;
5869 continue ;
5970 } finally {
6071 logger . timeEnd ( `[${ asset } ] process source and sourcemap` ) ;
6172 }
6273
6374 if ( ! this . _sourceMapUploader ) {
64- logger . info ( `[${ asset } ] file processed` ) ;
75+ logger . log ( `[${ asset } ] file processed` ) ;
6576 continue ;
6677 }
6778
6879 logger . time ( `[${ asset } ] upload sourcemap` ) ;
6980 try {
70- await this . _sourceMapUploader . upload ( sourceMapPath , debugId ) ;
71- logger . info ( `[${ asset } ] file processed and sourcemap uploaded` ) ;
81+ const result = await this . _sourceMapUploader . upload ( sourceMapPath , debugId ) ;
82+ stats . sourceMapUpload = result ;
83+ logger . log ( `[${ asset } ] file processed and sourcemap uploaded` ) ;
7284 } catch ( err ) {
7385 logger . error ( `[${ asset } ] upload sourcemap failed:` , err ) ;
86+ stats . sourceMapUpload = err instanceof Error ? err : new Error ( 'Unknown error.' ) ;
7487 } finally {
7588 logger . timeEnd ( `[${ asset } ] upload sourcemap` ) ;
7689 }
7790 }
91+
92+ const printer = statsPrinter ( compilation . getLogger ( BacktracePlugin . name ) ) ;
93+ for ( const [ key , stats ] of assetStats ) {
94+ printer ( key , stats ) ;
95+ }
7896 } ) ;
7997 }
8098}
0 commit comments