@@ -82,39 +82,58 @@ class SourceMapDevToolPlugin {
82
82
compiler . hooks . compilation . tap ( "SourceMapDevToolPlugin" , ( compilation ) => {
83
83
new SourceMapDevToolModuleOptionsPlugin ( options ) . apply ( compilation ) ;
84
84
85
- compilation . hooks . afterOptimizeChunkAssets . tap ( "SourceMapDevToolPlugin" , chunks => {
85
+ compilation . hooks . afterOptimizeChunkAssets . tap ( {
86
+ name : "SourceMapDevToolPlugin" ,
87
+ context : true
88
+ } , ( context , chunks ) => {
86
89
const moduleToSourceNameMapping = new Map ( ) ;
87
- const tasks = [ ] ;
90
+ const reportProgress = ( context && context . reportProgress ) ? context . reportProgress : ( ) => { } ;
88
91
92
+ const files = [ ] ;
89
93
chunks . forEach ( chunk => {
90
94
chunk . files . forEach ( file => {
91
95
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
+ } ) ;
114
100
}
115
101
} ) ;
116
102
} ) ;
117
103
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" ) ;
118
137
const usedNamesSet = new Set ( moduleToSourceNameMapping . values ( ) ) ;
119
138
const conflictDetectionSet = new Set ( ) ;
120
139
@@ -155,7 +174,8 @@ class SourceMapDevToolPlugin {
155
174
moduleToSourceNameMapping . set ( module , sourceName ) ;
156
175
usedNamesSet . add ( sourceName ) ;
157
176
}
158
- tasks . forEach ( task => {
177
+ tasks . forEach ( ( task , index ) => {
178
+ reportProgress ( 0.5 + 0.5 * index / tasks . length , task . file , "attach SourceMap" ) ;
159
179
const chunk = task . chunk ;
160
180
const file = task . file ;
161
181
const asset = task . asset ;
@@ -208,6 +228,7 @@ class SourceMapDevToolPlugin {
208
228
) ;
209
229
}
210
230
} ) ;
231
+ reportProgress ( 1.0 ) ;
211
232
} ) ;
212
233
} ) ;
213
234
}
0 commit comments