@@ -35,32 +35,34 @@ class WebpackObfuscator {
3535
3636 compiler . hooks . emit . tap ( pluginName , ( compilation : compilation . Compilation ) => {
3737 let identifiersPrefixCounter : number = 0 ;
38-
38+ let sourcemap_output : { [ index : string ] : string } = { } ;
3939 compilation . chunks . forEach ( chunk => {
4040 chunk . files . forEach ( ( fileName : string ) => {
41+ if ( this . options . sourceMap && fileName . toLowerCase ( ) . endsWith ( '.map' ) ) {
42+ let src_name = fileName . toLowerCase ( ) . substr ( 0 , fileName . length - 4 ) ;
43+ if ( ! this . shouldExclude ( src_name ) ) {
44+ const transferredSourceMap = transferSourceMap ( {
45+ fromSourceMap : sourcemap_output [ src_name ] ,
46+ toSourceMap : compilation . assets [ fileName ] . source ( )
47+ } ) ;
48+ let final_sourcemap = JSON . parse ( transferredSourceMap ) ;
49+ final_sourcemap [ 'sourcesContent' ] = JSON . parse ( compilation . assets [ fileName ] . source ( ) ) [ 'sourcesContent' ] ;
50+ compilation . assets [ fileName ] = new RawSource ( JSON . stringify ( final_sourcemap ) ) ;
51+ }
52+ return ;
53+ }
4154 if ( ! fileName . toLowerCase ( ) . endsWith ( '.js' ) || this . shouldExclude ( fileName ) ) {
4255 return ;
4356 }
4457 const asset = compilation . assets [ fileName ]
4558 const { inputSource, inputSourceMap } = this . extractSourceAndSourceMap ( asset ) ;
46- const { obfuscatedSource, obfuscationSourceMap } = this . obfuscate ( inputSource , identifiersPrefixCounter ) ;
59+ const { obfuscatedSource, obfuscationSourceMap } = this . obfuscate ( inputSource , fileName , identifiersPrefixCounter ) ;
4760
4861 if ( this . options . sourceMap && inputSourceMap ) {
49- const transferredSourceMap = transferSourceMap ( {
50- fromSourceMap : obfuscationSourceMap ,
51- toSourceMap : inputSourceMap
52- } ) ;
53-
54- compilation . assets [ fileName ] = new SourceMapSource (
55- obfuscatedSource ,
56- fileName ,
57- transferredSourceMap ,
58- inputSource ,
59- inputSourceMap
60- ) ;
61- } else {
62- compilation . assets [ fileName ] = new RawSource ( obfuscatedSource ) ;
62+ sourcemap_output [ fileName ] = obfuscationSourceMap ;
6363 }
64+ compilation . assets [ fileName ] = new RawSource ( obfuscatedSource ) ;
65+
6466
6567 identifiersPrefixCounter ++ ;
6668 } ) ;
@@ -86,12 +88,14 @@ class WebpackObfuscator {
8688
8789 private obfuscate (
8890 javascript : string ,
91+ fileName : string ,
8992 identifiersPrefixCounter : number
9093 ) : { obfuscatedSource : string , obfuscationSourceMap : string } {
9194 const obfuscationResult = JavaScriptObfuscator . obfuscate (
9295 javascript ,
9396 {
9497 identifiersPrefix : `${ WebpackObfuscator . baseIdentifiersPrefix } ${ identifiersPrefixCounter } ` ,
98+ sourceMapFileName : fileName + '.map' ,
9599 ...this . options
96100 }
97101 ) ;
0 commit comments