@@ -17,6 +17,38 @@ 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+ modules : undefined
48+ } ;
49+ }
50+ }
51+
2052class SourceMapDevToolPlugin {
2153 constructor ( options ) {
2254 if ( arguments . length > 1 )
@@ -43,57 +75,41 @@ class SourceMapDevToolPlugin {
4375 const requestShortener = new RequestShortener ( compiler . context ) ;
4476 const options = this . options ;
4577 options . test = options . test || / \. ( j s | c s s ) ( $ | \? ) / i;
78+
79+ const matchObject = ModuleFilenameHelpers . matchObject . bind ( undefined , options ) ;
80+
4681 compiler . plugin ( "compilation" , compilation => {
4782 new SourceMapDevToolModuleOptionsPlugin ( options ) . apply ( compilation ) ;
83+
4884 compilation . plugin ( "after-optimize-chunk-assets" , function ( chunks ) {
4985 const moduleToSourceNameMapping = new Map ( ) ;
5086 const tasks = [ ] ;
87+
5188 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 ) ) ;
89+ chunk . files . forEach ( file => {
90+ if ( matchObject ( file ) ) {
91+ const task = getTaskForFile ( file , chunk , options , compilation ) ;
92+
93+ if ( task ) {
94+ const modules = task . sourceMap . sources . map ( source => {
95+ const module = compilation . findModule ( source ) ;
96+ return module || source ;
97+ } ) ;
98+
99+ for ( const module of modules ) {
100+ if ( ! moduleToSourceNameMapping . get ( module ) ) {
101+ moduleToSourceNameMapping . set ( module , ModuleFilenameHelpers . createFilename ( module , moduleFilenameTemplate , requestShortener ) ) ;
102+ }
103+ }
104+
105+ task . modules = modules ;
106+
107+ tasks . push ( task ) ;
89108 }
90109 }
91- task . modules = modules ;
92- return task ;
93- } ) . forEach ( task => {
94- tasks . push ( task ) ;
95110 } ) ;
96111 } ) ;
112+
97113 const usedNamesSet = new Set ( moduleToSourceNameMapping . values ( ) ) ;
98114 const conflictDetectionSet = new Set ( ) ;
99115
0 commit comments