@@ -5,6 +5,7 @@ import path from 'node:path';
55import os from 'node:os' ;
66import { gzipSync } from 'node:zlib' ;
77import javascriptObfuscator from 'javascript-obfuscator' ;
8+ import remapping from '@jridgewell/remapping' ;
89
910import type { BundleList , Config , FormatSizeResult , ObfuscationResult , SizeResult } from '../type' ;
1011import { isBoolean , isFileNameExcluded , isObject } from './is' ;
@@ -105,6 +106,20 @@ export function getChunkName(id: string, manualChunks: string[]): string {
105106 return VENDOR_MODULES ;
106107}
107108
109+ export function composeSourcemaps ( map1 : Rollup . SourceMapInput | null , map2 : Rollup . SourceMapInput | null , log ?: ( msg : string ) => void ) : Rollup . SourceMapInput | null {
110+ if ( ! map1 ) return map2 ;
111+ if ( ! map2 ) return map1 ;
112+
113+ log ?.( 'composing source maps...' ) ;
114+
115+ const composed = remapping (
116+ [ map2 as remapping . SourceMapInput , map1 as remapping . SourceMapInput ] ,
117+ ( ) => null ,
118+ ) ;
119+
120+ return composed as Rollup . SourceMapInput ;
121+ }
122+
108123export class ObfuscatedFilesRegistry {
109124 private static instance : ObfuscatedFilesRegistry ;
110125 private obfuscatedFiles : Set < string > = new Set ( ) ;
@@ -167,17 +182,19 @@ export function obfuscateBundle(finalConfig: Config, fileName: string, bundleIte
167182 sourceMapFileName : `${ fileName } .map` ,
168183 }
169184 : finalConfig . options ;
170- const obfuscationResult = javascriptObfuscator . obfuscate ( bundleItem . code , fileSpecificOptions ) ;
185+ const obfuscated = javascriptObfuscator . obfuscate ( bundleItem . code , fileSpecificOptions ) ;
171186 _log . info ( `obfuscation complete for ${ fileName } .` ) ;
172187
173188 registry . markAsObfuscated ( fileName ) ;
174189 _log . info ( `added ${ fileName } to obfuscated files registry` ) ;
175190
176- const sourceMap = obfuscationResult . getSourceMap ( ) ;
177-
178191 return {
179- code : obfuscationResult . getObfuscatedCode ( ) ,
180- map : sourceMap ? JSON . parse ( sourceMap ) : null ,
192+ code : obfuscated . getObfuscatedCode ( ) ,
193+ map : composeSourcemaps (
194+ JSON . parse ( JSON . stringify ( bundleItem . map ) || 'null' ) , // strip methods
195+ JSON . parse ( obfuscated . getSourceMap ( ) || 'null' ) ,
196+ _log . info . bind ( _log ) ,
197+ ) ,
181198 } ;
182199}
183200
0 commit comments