Skip to content

Commit dc0d72f

Browse files
authored
Merge pull request #76 from sxwxs/master
Fix sourcemap generation
2 parents c8e72af + 8c0e119 commit dc0d72f

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

index.ts

+20-16
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)