Skip to content

Commit a0012e9

Browse files
authored
Merge pull request #6 from nickdima/sourcemaps
add source map support
2 parents ff74dcc + 526d0f1 commit a0012e9

File tree

3 files changed

+60
-9
lines changed

3 files changed

+60
-9
lines changed

index.js

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"use strict";
2-
var JavaScriptObfuscator = require('javascript-obfuscator'), multimatch = require('multimatch'), RawSource = require('webpack-core/lib/RawSource');
2+
var JavaScriptObfuscator = require('javascript-obfuscator'), multimatch = require('multimatch'), RawSource = require('webpack-core/lib/RawSource'), SourceMapSource = require("webpack-core/lib/SourceMapSource"), transferSourceMap = require("multi-stage-sourcemap").transfer;
33
var WebpackObfuscator = (function () {
44
function WebpackObfuscator(options, excludes) {
55
this.options = {};
@@ -24,8 +24,34 @@ var WebpackObfuscator = (function () {
2424
if (_this.shouldExclude(file, _this.excludes)) {
2525
return;
2626
}
27-
var asset = compilation.assets[file], obfuscationResult = JavaScriptObfuscator.obfuscate(asset.source(), _this.options);
28-
compilation.assets[file] = new RawSource(obfuscationResult.toString());
27+
var asset = compilation.assets[file];
28+
var input, inputSourceMap;
29+
if (_this.options.sourceMap !== false) {
30+
if (asset.sourceAndMap) {
31+
var sourceAndMap = asset.sourceAndMap();
32+
inputSourceMap = sourceAndMap.map;
33+
input = sourceAndMap.source;
34+
}
35+
else {
36+
inputSourceMap = asset.map();
37+
input = asset.source();
38+
}
39+
if (inputSourceMap) {
40+
_this.options.sourceMap = true;
41+
}
42+
}
43+
else {
44+
input = asset.source();
45+
}
46+
var obfuscationResult = JavaScriptObfuscator.obfuscate(input, _this.options);
47+
if (_this.options.sourceMap) {
48+
var obfuscationSourceMap = obfuscationResult.getSourceMap();
49+
var transferedSourceMap = transferSourceMap({ fromSourceMap: obfuscationSourceMap, toSourceMap: inputSourceMap });
50+
compilation.assets[file] = new SourceMapSource(obfuscationResult.toString(), file, JSON.parse(transferedSourceMap), asset.source(), inputSourceMap);
51+
}
52+
else {
53+
compilation.assets[file] = new RawSource(obfuscationResult.toString());
54+
}
2955
});
3056
callback();
3157
});

index.ts

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
let JavaScriptObfuscator = require('javascript-obfuscator'),
44
multimatch: any = require('multimatch'),
5-
RawSource: any = require('webpack-core/lib/RawSource');
5+
RawSource: any = require('webpack-core/lib/RawSource'),
6+
SourceMapSource: any = require("webpack-core/lib/SourceMapSource"),
7+
transferSourceMap = require("multi-stage-sourcemap").transfer;
68

79
class WebpackObfuscator {
810
public options: any = {};
@@ -41,14 +43,36 @@ class WebpackObfuscator {
4143
if (this.shouldExclude(file, this.excludes)) {
4244
return;
4345
}
46+
let asset = compilation.assets[file];
47+
let input, inputSourceMap;
48+
if (this.options.sourceMap !== false) {
49+
if (asset.sourceAndMap) {
50+
let sourceAndMap = asset.sourceAndMap();
51+
inputSourceMap = sourceAndMap.map;
52+
input = sourceAndMap.source;
53+
} else {
54+
inputSourceMap = asset.map();
55+
input = asset.source();
56+
}
57+
if (inputSourceMap) {
58+
this.options.sourceMap = true;
59+
}
60+
} else {
61+
input = asset.source();
62+
}
4463

45-
let asset = compilation.assets[file],
46-
obfuscationResult: any = JavaScriptObfuscator.obfuscate(
47-
asset.source(),
64+
let obfuscationResult: any = JavaScriptObfuscator.obfuscate(
65+
input,
4866
this.options
4967
);
50-
51-
compilation.assets[file] = new RawSource(obfuscationResult.toString());
68+
if (this.options.sourceMap) {
69+
let obfuscationSourceMap: any = obfuscationResult.getSourceMap();
70+
let transferedSourceMap: any = transferSourceMap({fromSourceMap: obfuscationSourceMap, toSourceMap: inputSourceMap});
71+
compilation.assets[file] = new SourceMapSource(obfuscationResult.toString(), file, JSON.parse(transferedSourceMap), asset.source(), inputSourceMap);
72+
}
73+
else {
74+
compilation.assets[file] = new RawSource(obfuscationResult.toString());
75+
}
5276
});
5377

5478
callback();

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"main": "index.js",
1616
"dependencies": {
1717
"javascript-obfuscator": "^0.7.0-dev.3",
18+
"multi-stage-sourcemap": "^0.2.1",
1819
"multimatch": "^2.0.0",
1920
"webpack-core": "^0.6.8"
2021
},

0 commit comments

Comments
 (0)