Skip to content

Commit de80503

Browse files
committed
bugfix in source extraction
1 parent 646579e commit de80503

File tree

6 files changed

+53
-78
lines changed

6 files changed

+53
-78
lines changed

dist/index.d.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { Compiler } from 'webpack';
2-
import { IOptions as JavaScriptObfuscatorOptions } from 'javascript-obfuscator/src/interfaces/options/IOptions';
2+
import { TInputOptions as JavascriptObfuscatorOptions } from 'javascript-obfuscator/src/types/options/TInputOptions';
33
declare class WebpackObfuscator {
4-
options: Partial<JavaScriptObfuscatorOptions>;
4+
options: JavascriptObfuscatorOptions;
55
excludes: string[];
6-
constructor(options: Partial<JavaScriptObfuscatorOptions>, excludes?: string | string[]);
6+
constructor(options: JavascriptObfuscatorOptions, excludes?: string | string[]);
77
apply(compiler: Compiler): void;
88
private shouldExclude;
99
private extractSourceAndSourceMap;

dist/index.js

+30-32
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,33 @@
22
var __importDefault = (this && this.__importDefault) || function (mod) {
33
return (mod && mod.__esModule) ? mod : { "default": mod };
44
};
5-
var javascript_obfuscator_1 = require("javascript-obfuscator");
6-
var webpack_sources_1 = require("webpack-sources");
7-
var multimatch_1 = __importDefault(require("multimatch"));
8-
var transferSourceMap = require("multi-stage-sourcemap").transfer;
9-
var WebpackObfuscator = (function () {
10-
function WebpackObfuscator(options, excludes) {
5+
const javascript_obfuscator_1 = __importDefault(require("javascript-obfuscator"));
6+
const webpack_sources_1 = require("webpack-sources");
7+
const multimatch_1 = __importDefault(require("multimatch"));
8+
const transferSourceMap = require("multi-stage-sourcemap").transfer;
9+
class WebpackObfuscator {
10+
constructor(options, excludes) {
1111
this.options = options;
1212
this.excludes = [];
13-
this.options = options;
1413
this.excludes = this.excludes.concat(excludes || []);
1514
}
16-
WebpackObfuscator.prototype.apply = function (compiler) {
17-
var _this = this;
18-
var isDevServer = process.argv.find(function (v) { return v.includes('webpack-dev-server'); });
15+
apply(compiler) {
16+
const isDevServer = process.argv.find(v => v.includes('webpack-dev-server'));
1917
if (isDevServer) {
2018
console.info('JavascriptObfuscator is disabled on webpack-dev-server as the reloading scripts ', 'and the obfuscator can interfere with each other and break the build');
2119
return;
2220
}
23-
var pluginName = this.constructor.name;
24-
compiler.hooks.emit.tap(pluginName, function (compilation) {
25-
for (var fileName in compilation.assets) {
26-
if (fileName.toLowerCase().endsWith('.js') || _this.shouldExclude(fileName)) {
21+
const pluginName = this.constructor.name;
22+
compiler.hooks.emit.tap(pluginName, (compilation) => {
23+
for (const fileName in compilation.assets) {
24+
if (!fileName.toLowerCase().endsWith('.js') || this.shouldExclude(fileName)) {
2725
return;
2826
}
29-
var asset = compilation.assets[fileName];
30-
var _a = _this.extractSourceAndSourceMap(asset), inputSource = _a.inputSource, inputSourceMap = _a.inputSourceMap;
31-
var _b = _this.obfuscate(inputSource), obfuscatedSource = _b.obfuscatedSource, obfuscationSourceMap = _b.obfuscationSourceMap;
32-
if (_this.options.sourceMap && inputSourceMap) {
33-
var transferredSourceMap = transferSourceMap({
27+
const asset = compilation.assets[fileName];
28+
const { inputSource, inputSourceMap } = this.extractSourceAndSourceMap(asset);
29+
const { obfuscatedSource, obfuscationSourceMap } = this.obfuscate(inputSource);
30+
if (this.options.sourceMap && inputSourceMap) {
31+
const transferredSourceMap = transferSourceMap({
3432
fromSourceMap: obfuscationSourceMap,
3533
toSourceMap: inputSource
3634
});
@@ -41,29 +39,29 @@ var WebpackObfuscator = (function () {
4139
}
4240
}
4341
});
44-
};
45-
WebpackObfuscator.prototype.shouldExclude = function (filePath) {
42+
}
43+
shouldExclude(filePath) {
4644
return multimatch_1.default(filePath, this.excludes).length > 0;
47-
};
48-
WebpackObfuscator.prototype.extractSourceAndSourceMap = function (asset) {
45+
}
46+
extractSourceAndSourceMap(asset) {
4947
if (asset.sourceAndMap) {
50-
var _a = asset.sourceAndMap(), inputSource = _a.inputSource, inputSourceMap = _a.inputSourceMap;
51-
return { inputSource: inputSource, inputSourceMap: inputSourceMap };
48+
const { source, map } = asset.sourceAndMap();
49+
return { inputSource: source, inputSourceMap: map };
5250
}
5351
else {
5452
return {
5553
inputSource: asset.source(),
5654
inputSourceMap: asset.map()
5755
};
5856
}
59-
};
60-
WebpackObfuscator.prototype.obfuscate = function (javascript) {
61-
var obfuscationResult = javascript_obfuscator_1.JavaScriptObfuscator.obfuscate(javascript, this.options);
57+
}
58+
obfuscate(javascript) {
59+
console.log('js', javascript);
60+
const obfuscationResult = javascript_obfuscator_1.default.obfuscate(javascript, this.options);
6261
return {
63-
obfuscatedSource: obfuscationResult.toString(),
62+
obfuscatedSource: obfuscationResult.getObfuscatedCode(),
6463
obfuscationSourceMap: obfuscationResult.getSourceMap()
6564
};
66-
};
67-
return WebpackObfuscator;
68-
}());
65+
}
66+
}
6967
module.exports = WebpackObfuscator;

index.ts

+9-11
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
"use strict";
22

33
import { Compiler, compilation } from 'webpack';
4-
import { JavaScriptObfuscator } from 'javascript-obfuscator';
5-
import { IOptions as JavaScriptObfuscatorOptions } from 'javascript-obfuscator/src/interfaces/options/IOptions';
4+
import JavaScriptObfuscator from 'javascript-obfuscator';
65
import { RawSource, SourceMapSource } from 'webpack-sources';
76
import multimatch from 'multimatch';
87
import { RawSourceMap } from 'source-map';
8+
import { TInputOptions as JavascriptObfuscatorOptions } from 'javascript-obfuscator/src/types/options/TInputOptions';
99
const transferSourceMap = require("multi-stage-sourcemap").transfer;
1010

1111
class WebpackObfuscator {
1212

1313
public excludes: string[] = [];
1414

1515
constructor(
16-
public options: Partial<JavaScriptObfuscatorOptions>,
16+
public options: JavascriptObfuscatorOptions,
1717
excludes?: string | string[]
1818
) {
19-
this.options = options;
2019
this.excludes = this.excludes.concat(excludes || []);
2120
}
2221

@@ -28,14 +27,13 @@ class WebpackObfuscator {
2827
'and the obfuscator can interfere with each other and break the build');
2928
return;
3029
}
31-
30+
3231
const pluginName = this.constructor.name;
3332
compiler.hooks.emit.tap(pluginName, (compilation: compilation.Compilation) => {
3433
for (const fileName in compilation.assets) {
3534
if (!fileName.toLowerCase().endsWith('.js') || this.shouldExclude(fileName)) {
3635
return;
3736
}
38-
3937
const asset = compilation.assets[fileName]
4038
const { inputSource, inputSourceMap } = this.extractSourceAndSourceMap(asset);
4139
const { obfuscatedSource, obfuscationSourceMap } = this.obfuscate(inputSource);
@@ -66,8 +64,8 @@ class WebpackObfuscator {
6664

6765
private extractSourceAndSourceMap(asset: any): { inputSource: string, inputSourceMap: RawSourceMap } {
6866
if (asset.sourceAndMap) {
69-
const { inputSource, inputSourceMap } = asset.sourceAndMap();
70-
return { inputSource, inputSourceMap };
67+
const { source, map } = asset.sourceAndMap();
68+
return { inputSource: source, inputSourceMap: map };
7169
} else {
7270
return {
7371
inputSource: asset.source(),
@@ -77,14 +75,14 @@ class WebpackObfuscator {
7775
}
7876

7977
private obfuscate(javascript: string): { obfuscatedSource: string, obfuscationSourceMap: string } {
80-
//use any here, as the JavaScriptObfuscator seem to get this one wrong
81-
const obfuscationResult: any = JavaScriptObfuscator.obfuscate(
78+
console.log('js', javascript);
79+
const obfuscationResult = JavaScriptObfuscator.obfuscate(
8280
javascript,
8381
this.options
8482
);
8583

8684
return {
87-
obfuscatedSource: obfuscationResult.toString(),
85+
obfuscatedSource: obfuscationResult.getObfuscatedCode(),
8886
obfuscationSourceMap: obfuscationResult.getSourceMap()
8987
}
9088
}

package-lock.json

+8-28
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "webpack-obfuscator",
3-
"version": "0.18.0",
3+
"version": "0.18.1",
44
"description": "javascript-obfuscator plugin for Webpack",
55
"keywords": [
66
"obfuscator",
@@ -21,7 +21,6 @@
2121
"webpack-sources": "^1.3.0"
2222
},
2323
"devDependencies": {
24-
"@types/javascript-obfuscator": "0.0.5",
2524
"@types/multimatch": "^2.1.3",
2625
"@types/node": "8.0.47",
2726
"@types/webpack": "^4.4.34",
@@ -45,4 +44,4 @@
4544
"name": "Timofey Kachalov"
4645
},
4746
"license": "BSD-2-Clause"
48-
}
47+
}

tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"compilerOptions": {
3-
"target": "ES5",
3+
"target": "ES6",
44
"lib": ["ES6"],
55
"module": "commonjs",
66
"sourceMap": false,

0 commit comments

Comments
 (0)