@@ -82,39 +82,58 @@ class SourceMapDevToolPlugin {
8282 compiler . hooks . compilation . tap ( "SourceMapDevToolPlugin" , ( compilation ) => {
8383 new SourceMapDevToolModuleOptionsPlugin ( options ) . apply ( compilation ) ;
8484
85- compilation . hooks . afterOptimizeChunkAssets . tap ( "SourceMapDevToolPlugin" , chunks => {
85+ compilation . hooks . afterOptimizeChunkAssets . tap ( {
86+ name : "SourceMapDevToolPlugin" ,
87+ context : true
88+ } , ( context , chunks ) => {
8689 const moduleToSourceNameMapping = new Map ( ) ;
87- const tasks = [ ] ;
90+ const reportProgress = ( context && context . reportProgress ) ? context . reportProgress : ( ) => { } ;
8891
92+ const files = [ ] ;
8993 chunks . forEach ( chunk => {
9094 chunk . files . forEach ( file => {
9195 if ( matchObject ( file ) ) {
92- const task = getTaskForFile ( file , chunk , options , compilation ) ;
93-
94- if ( task ) {
95- const modules = task . sourceMap . sources . map ( source => {
96- const module = compilation . findModule ( source ) ;
97- return module || source ;
98- } ) ;
99-
100- for ( let idx = 0 ; idx < modules . length ; idx ++ ) {
101- const module = modules [ idx ] ;
102- if ( ! moduleToSourceNameMapping . get ( module ) ) {
103- moduleToSourceNameMapping . set ( module , ModuleFilenameHelpers . createFilename ( module , {
104- moduleFilenameTemplate : moduleFilenameTemplate ,
105- namespace : namespace
106- } , requestShortener ) ) ;
107- }
108- }
109-
110- task . modules = modules ;
111-
112- tasks . push ( task ) ;
113- }
96+ files . push ( {
97+ file,
98+ chunk
99+ } ) ;
114100 }
115101 } ) ;
116102 } ) ;
117103
104+ reportProgress ( 0.0 ) ;
105+ const tasks = [ ] ;
106+ files . forEach ( ( {
107+ file,
108+ chunk
109+ } , idx ) => {
110+ reportProgress ( 0.5 * idx / files . length , file , "generate SourceMap" ) ;
111+ const task = getTaskForFile ( file , chunk , options , compilation ) ;
112+
113+ if ( task ) {
114+ const modules = task . sourceMap . sources . map ( source => {
115+ const module = compilation . findModule ( source ) ;
116+ return module || source ;
117+ } ) ;
118+
119+ for ( let idx = 0 ; idx < modules . length ; idx ++ ) {
120+ const module = modules [ idx ] ;
121+ if ( ! moduleToSourceNameMapping . get ( module ) ) {
122+ moduleToSourceNameMapping . set ( module , ModuleFilenameHelpers . createFilename ( module , {
123+ moduleFilenameTemplate : moduleFilenameTemplate ,
124+ namespace : namespace
125+ } , requestShortener ) ) ;
126+ }
127+ }
128+
129+ task . modules = modules ;
130+
131+ tasks . push ( task ) ;
132+ }
133+
134+ } ) ;
135+
136+ reportProgress ( 0.5 , "resolve sources" ) ;
118137 const usedNamesSet = new Set ( moduleToSourceNameMapping . values ( ) ) ;
119138 const conflictDetectionSet = new Set ( ) ;
120139
@@ -155,7 +174,8 @@ class SourceMapDevToolPlugin {
155174 moduleToSourceNameMapping . set ( module , sourceName ) ;
156175 usedNamesSet . add ( sourceName ) ;
157176 }
158- tasks . forEach ( task => {
177+ tasks . forEach ( ( task , index ) => {
178+ reportProgress ( 0.5 + 0.5 * index / tasks . length , task . file , "attach SourceMap" ) ;
159179 const chunk = task . chunk ;
160180 const file = task . file ;
161181 const asset = task . asset ;
@@ -208,6 +228,7 @@ class SourceMapDevToolPlugin {
208228 ) ;
209229 }
210230 } ) ;
231+ reportProgress ( 1.0 ) ;
211232 } ) ;
212233 } ) ;
213234 }
0 commit comments