@@ -27,8 +27,11 @@ SourceMapDevToolPlugin.prototype.apply = function(compiler) {
27
27
module . useSourceMap = true ;
28
28
} ) ;
29
29
compilation . plugin ( "after-optimize-chunk-assets" , function ( chunks ) {
30
+ var allModules = [ ] ;
31
+ var allModuleFilenames = [ ] ;
32
+ var tasks = [ ] ;
30
33
chunks . forEach ( function ( chunk ) {
31
- chunk . files . slice ( ) . forEach ( function ( file ) {
34
+ chunk . files . slice ( ) . map ( function ( file ) {
32
35
var asset = this . assets [ file ] ;
33
36
if ( asset . __SourceMapDevTool_Data ) {
34
37
var data = asset . __SourceMapDevTool_Data ;
@@ -39,53 +42,85 @@ SourceMapDevToolPlugin.prototype.apply = function(compiler) {
39
42
}
40
43
var sourceMap = asset . map ( ) ;
41
44
if ( sourceMap ) {
42
- var modules = sourceMap . sources . map ( function ( source ) {
43
- var module = compilation . findModule ( source ) ;
44
- return module || source ;
45
- } ) ;
46
- var moduleFilenames = modules . map ( function ( module ) {
47
- return ModuleFilenameHelpers . createFilename ( module , moduleFilenameTemplate , requestShortener ) ;
48
- } ) ;
49
- moduleFilenames = ModuleFilenameHelpers . replaceDuplicates ( moduleFilenames , function ( filename , i ) {
50
- return ModuleFilenameHelpers . createFilename ( modules [ i ] , fallbackModuleFilenameTemplate , requestShortener ) ;
51
- } ) ;
52
- moduleFilenames = ModuleFilenameHelpers . replaceDuplicates ( moduleFilenames , function ( filename , i , n ) {
53
- for ( var j = 0 ; j < n ; j ++ )
54
- filename += "*" ;
55
- return filename ;
56
- } ) ;
57
- sourceMap . sources = moduleFilenames ;
58
- if ( sourceMap . sourcesContent ) {
59
- sourceMap . sourcesContent = sourceMap . sourcesContent . map ( function ( content , i ) {
60
- return content + "\n\n\n" + ModuleFilenameHelpers . createFooter ( modules [ i ] , requestShortener ) ;
61
- } ) ;
62
- }
63
- sourceMap . sourceRoot = "" ;
64
- sourceMap . file = file ;
65
- asset . __SourceMapDevTool_Data = { } ;
66
- if ( sourceMapFilename ) {
67
- var filename = file , query = "" ;
68
- var idx = filename . indexOf ( "?" ) ;
69
- if ( idx >= 0 ) {
70
- query = filename . substr ( idx ) ;
71
- filename = filename . substr ( 0 , idx ) ;
72
- }
73
- var sourceMapFile = sourceMapFilename
74
- . replace ( Template . REGEXP_FILE , filename )
75
- . replace ( Template . REGEXP_QUERY , query )
76
- . replace ( Template . REGEXP_FILEBASE , basename ( filename ) )
77
- . replace ( Template . REGEXP_HASH , this . hash )
78
- . replace ( Template . REGEXP_ID , chunk . id ) ;
79
- var sourceMapUrl = path . relative ( path . dirname ( file ) , sourceMapFile ) . replace ( / \\ / g, "/" ) ;
80
- asset . __SourceMapDevTool_Data [ file ] = this . assets [ file ] = new ConcatSource ( asset , sourceMappingURLComment . replace ( / \[ u r l \] / g, sourceMapUrl ) ) ;
81
- asset . __SourceMapDevTool_Data [ sourceMapFile ] = this . assets [ sourceMapFile ] = new RawSource ( JSON . stringify ( sourceMap ) ) ;
82
- chunk . files . push ( sourceMapFile ) ;
83
- } else {
84
- asset . __SourceMapDevTool_Data [ file ] = this . assets [ file ] = new ConcatSource ( asset , sourceMappingURLComment . replace ( / \[ u r l \] / g, "data:application/json;base64," + new Buffer ( JSON . stringify ( sourceMap ) ) . toString ( "base64" ) ) ) ;
45
+ return {
46
+ chunk : chunk ,
47
+ file : file ,
48
+ asset : asset ,
49
+ sourceMap : sourceMap
85
50
}
86
51
}
52
+ } , this ) . filter ( Boolean ) . map ( function ( task ) {
53
+ var modules = task . sourceMap . sources . map ( function ( source ) {
54
+ var module = compilation . findModule ( source ) ;
55
+ return module || source ;
56
+ } ) ;
57
+ var moduleFilenames = modules . map ( function ( module ) {
58
+ return ModuleFilenameHelpers . createFilename ( module , moduleFilenameTemplate , requestShortener ) ;
59
+ } ) ;
60
+ task . modules = modules ;
61
+ task . moduleFilenames = moduleFilenames ;
62
+ return task ;
63
+ } , this ) . forEach ( function ( task ) {
64
+ allModules = allModules . concat ( task . modules ) ;
65
+ allModuleFilenames = allModuleFilenames . concat ( task . moduleFilenames ) ;
66
+ tasks . push ( task ) ;
87
67
} , this ) ;
88
68
} , this ) ;
69
+ allModuleFilenames = ModuleFilenameHelpers . replaceDuplicates ( allModuleFilenames , function ( filename , i ) {
70
+ return ModuleFilenameHelpers . createFilename ( allModules [ i ] , fallbackModuleFilenameTemplate , requestShortener ) ;
71
+ } , function ( ai , bi ) {
72
+ var a = allModules [ ai ] ;
73
+ var b = allModules [ bi ] ;
74
+ a = typeof a === "string" ? a : a . identifier ( ) ;
75
+ b = typeof b === "string" ? b : b . identifier ( ) ;
76
+ return a . length - b . length ;
77
+ } ) ;
78
+ allModuleFilenames = ModuleFilenameHelpers . replaceDuplicates ( allModuleFilenames , function ( filename , i , n ) {
79
+ for ( var j = 0 ; j < n ; j ++ )
80
+ filename += "*" ;
81
+ return filename ;
82
+ } ) ;
83
+ tasks . forEach ( function ( task ) {
84
+ task . moduleFilenames = allModuleFilenames . slice ( 0 , task . moduleFilenames . length ) ;
85
+ allModuleFilenames = allModuleFilenames . slice ( task . moduleFilenames . length ) ;
86
+ } , this ) ;
87
+ tasks . forEach ( function ( task ) {
88
+ var chunk = task . chunk ;
89
+ var file = task . file ;
90
+ var asset = task . asset ;
91
+ var sourceMap = task . sourceMap ;
92
+ var moduleFilenames = task . moduleFilenames ;
93
+ var modules = task . modules ;
94
+ sourceMap . sources = moduleFilenames ;
95
+ if ( sourceMap . sourcesContent ) {
96
+ sourceMap . sourcesContent = sourceMap . sourcesContent . map ( function ( content , i ) {
97
+ return content + "\n\n\n" + ModuleFilenameHelpers . createFooter ( modules [ i ] , requestShortener ) ;
98
+ } ) ;
99
+ }
100
+ sourceMap . sourceRoot = "" ;
101
+ sourceMap . file = file ;
102
+ asset . __SourceMapDevTool_Data = { } ;
103
+ if ( sourceMapFilename ) {
104
+ var filename = file , query = "" ;
105
+ var idx = filename . indexOf ( "?" ) ;
106
+ if ( idx >= 0 ) {
107
+ query = filename . substr ( idx ) ;
108
+ filename = filename . substr ( 0 , idx ) ;
109
+ }
110
+ var sourceMapFile = sourceMapFilename
111
+ . replace ( Template . REGEXP_FILE , filename )
112
+ . replace ( Template . REGEXP_QUERY , query )
113
+ . replace ( Template . REGEXP_FILEBASE , basename ( filename ) )
114
+ . replace ( Template . REGEXP_HASH , this . hash )
115
+ . replace ( Template . REGEXP_ID , chunk . id ) ;
116
+ var sourceMapUrl = path . relative ( path . dirname ( file ) , sourceMapFile ) . replace ( / \\ / g, "/" ) ;
117
+ asset . __SourceMapDevTool_Data [ file ] = this . assets [ file ] = new ConcatSource ( asset , sourceMappingURLComment . replace ( / \[ u r l \] / g, sourceMapUrl ) ) ;
118
+ asset . __SourceMapDevTool_Data [ sourceMapFile ] = this . assets [ sourceMapFile ] = new RawSource ( JSON . stringify ( sourceMap ) ) ;
119
+ chunk . files . push ( sourceMapFile ) ;
120
+ } else {
121
+ asset . __SourceMapDevTool_Data [ file ] = this . assets [ file ] = new ConcatSource ( asset , sourceMappingURLComment . replace ( / \[ u r l \] / g, "data:application/json;base64," + new Buffer ( JSON . stringify ( sourceMap ) ) . toString ( "base64" ) ) ) ;
122
+ }
123
+ } , this ) ;
89
124
} ) ;
90
125
} ) ;
91
126
} ;
0 commit comments