@@ -17,6 +17,37 @@ const basename = (name) => {
1717 return name . substr ( name . lastIndexOf ( "/" ) + 1 ) ;
1818} ;
1919
20+ function getTaskForFile ( file , chunk , options , compilation ) {
21+ const asset = compilation . assets [ file ] ;
22+ if ( asset . __SourceMapDevToolFile === file && asset . __SourceMapDevToolData ) {
23+ const data = asset . __SourceMapDevToolData ;
24+ for ( const cachedFile in data ) {
25+ compilation . assets [ cachedFile ] = data [ cachedFile ] ;
26+ if ( cachedFile !== file )
27+ chunk . files . push ( cachedFile ) ;
28+ }
29+ return ;
30+ }
31+ let source , sourceMap ;
32+ if ( asset . sourceAndMap ) {
33+ const sourceAndMap = asset . sourceAndMap ( options ) ;
34+ sourceMap = sourceAndMap . map ;
35+ source = sourceAndMap . source ;
36+ } else {
37+ sourceMap = asset . map ( options ) ;
38+ source = asset . source ( ) ;
39+ }
40+ if ( sourceMap ) {
41+ return {
42+ chunk,
43+ file,
44+ asset,
45+ source,
46+ sourceMap
47+ } ;
48+ }
49+ }
50+
2051class SourceMapDevToolPlugin {
2152 constructor ( options ) {
2253 if ( arguments . length > 1 )
@@ -43,57 +74,43 @@ class SourceMapDevToolPlugin {
4374 const requestShortener = new RequestShortener ( compiler . context ) ;
4475 const options = this . options ;
4576 options . test = options . test || / \. ( j s | c s s ) ( $ | \? ) / i;
77+
78+ const matchObject = ModuleFilenameHelpers . matchObject . bind ( undefined , options ) ;
79+
4680 compiler . plugin ( "compilation" , compilation => {
4781 new SourceMapDevToolModuleOptionsPlugin ( options ) . apply ( compilation ) ;
82+
4883 compilation . plugin ( "after-optimize-chunk-assets" , function ( chunks ) {
4984 const moduleToSourceNameMapping = new Map ( ) ;
50- const tasks = [ ] ;
85+ let tasks = [ ] ;
86+
5187 chunks . forEach ( function ( chunk ) {
52- chunk . files . filter ( ModuleFilenameHelpers . matchObject . bind ( undefined , options ) ) . map ( function ( file ) {
53- const asset = compilation . assets [ file ] ;
54- if ( asset . __SourceMapDevToolFile === file && asset . __SourceMapDevToolData ) {
55- const data = asset . __SourceMapDevToolData ;
56- for ( const cachedFile in data ) {
57- compilation . assets [ cachedFile ] = data [ cachedFile ] ;
58- if ( cachedFile !== file )
59- chunk . files . push ( cachedFile ) ;
60- }
61- return ;
62- }
63- let source , sourceMap ;
64- if ( asset . sourceAndMap ) {
65- const sourceAndMap = asset . sourceAndMap ( options ) ;
66- sourceMap = sourceAndMap . map ;
67- source = sourceAndMap . source ;
68- } else {
69- sourceMap = asset . map ( options ) ;
70- source = asset . source ( ) ;
71- }
72- if ( sourceMap ) {
73- return {
74- chunk,
75- file,
76- asset,
77- source,
78- sourceMap
79- } ;
80- }
81- } ) . filter ( Boolean ) . map ( task => {
82- const modules = task . sourceMap . sources . map ( source => {
83- const module = compilation . findModule ( source ) ;
84- return module || source ;
85- } ) ;
86- for ( const module of modules ) {
87- if ( ! moduleToSourceNameMapping . get ( module ) ) {
88- moduleToSourceNameMapping . set ( module , ModuleFilenameHelpers . createFilename ( module , moduleFilenameTemplate , requestShortener ) ) ;
88+ tasks = chunk . files . reduce ( ( queue , file ) => {
89+ if ( matchObject ( file ) ) {
90+ const task = getTaskForFile ( file , chunk , options , compilation ) ;
91+
92+ if ( task ) {
93+ const modules = task . sourceMap . sources . map ( source => {
94+ const module = compilation . findModule ( source ) ;
95+ return module || source ;
96+ } ) ;
97+
98+ for ( const module of modules ) {
99+ if ( ! moduleToSourceNameMapping . get ( module ) ) {
100+ moduleToSourceNameMapping . set ( module , ModuleFilenameHelpers . createFilename ( module , moduleFilenameTemplate , requestShortener ) ) ;
101+ }
102+ }
103+
104+ task . modules = modules ;
105+
106+ queue . push ( task ) ;
89107 }
90108 }
91- task . modules = modules ;
92- return task ;
93- } ) . forEach ( task => {
94- tasks . push ( task ) ;
95- } ) ;
109+
110+ return queue ;
111+ } , tasks ) ;
96112 } ) ;
113+
97114 const usedNamesSet = new Set ( moduleToSourceNameMapping . values ( ) ) ;
98115 const conflictDetectionSet = new Set ( ) ;
99116
0 commit comments