From 526d0f1475c9e07d862efb3dc780cf1d7f1f34c6 Mon Sep 17 00:00:00 2001 From: Nick Dima Date: Tue, 9 Aug 2016 16:03:30 +0200 Subject: [PATCH] add source map support --- index.js | 32 +++++++++++++++++++++++++++++--- index.ts | 36 ++++++++++++++++++++++++++++++------ package.json | 1 + 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/index.js b/index.js index 0e2cff7..4684576 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,5 @@ "use strict"; -var JavaScriptObfuscator = require('javascript-obfuscator'), multimatch = require('multimatch'), RawSource = require('webpack-core/lib/RawSource'); +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; var WebpackObfuscator = (function () { function WebpackObfuscator(options, excludes) { this.options = {}; @@ -24,8 +24,34 @@ var WebpackObfuscator = (function () { if (_this.shouldExclude(file, _this.excludes)) { return; } - var asset = compilation.assets[file], obfuscationResult = JavaScriptObfuscator.obfuscate(asset.source(), _this.options); - compilation.assets[file] = new RawSource(obfuscationResult.toString()); + var asset = compilation.assets[file]; + var input, inputSourceMap; + if (_this.options.sourceMap !== false) { + if (asset.sourceAndMap) { + var sourceAndMap = asset.sourceAndMap(); + inputSourceMap = sourceAndMap.map; + input = sourceAndMap.source; + } + else { + inputSourceMap = asset.map(); + input = asset.source(); + } + if (inputSourceMap) { + _this.options.sourceMap = true; + } + } + else { + input = asset.source(); + } + var obfuscationResult = JavaScriptObfuscator.obfuscate(input, _this.options); + if (_this.options.sourceMap) { + var obfuscationSourceMap = obfuscationResult.getSourceMap(); + var transferedSourceMap = transferSourceMap({ fromSourceMap: obfuscationSourceMap, toSourceMap: inputSourceMap }); + compilation.assets[file] = new SourceMapSource(obfuscationResult.toString(), file, JSON.parse(transferedSourceMap), asset.source(), inputSourceMap); + } + else { + compilation.assets[file] = new RawSource(obfuscationResult.toString()); + } }); callback(); }); diff --git a/index.ts b/index.ts index 2ef21a9..d80658c 100644 --- a/index.ts +++ b/index.ts @@ -2,7 +2,9 @@ let JavaScriptObfuscator = require('javascript-obfuscator'), multimatch: any = require('multimatch'), - RawSource: any = require('webpack-core/lib/RawSource'); + RawSource: any = require('webpack-core/lib/RawSource'), + SourceMapSource: any = require("webpack-core/lib/SourceMapSource"), + transferSourceMap = require("multi-stage-sourcemap").transfer; class WebpackObfuscator { public options: any = {}; @@ -41,14 +43,36 @@ class WebpackObfuscator { if (this.shouldExclude(file, this.excludes)) { return; } + let asset = compilation.assets[file]; + let input, inputSourceMap; + if (this.options.sourceMap !== false) { + if (asset.sourceAndMap) { + let sourceAndMap = asset.sourceAndMap(); + inputSourceMap = sourceAndMap.map; + input = sourceAndMap.source; + } else { + inputSourceMap = asset.map(); + input = asset.source(); + } + if (inputSourceMap) { + this.options.sourceMap = true; + } + } else { + input = asset.source(); + } - let asset = compilation.assets[file], - obfuscationResult: any = JavaScriptObfuscator.obfuscate( - asset.source(), + let obfuscationResult: any = JavaScriptObfuscator.obfuscate( + input, this.options ); - - compilation.assets[file] = new RawSource(obfuscationResult.toString()); + if (this.options.sourceMap) { + let obfuscationSourceMap: any = obfuscationResult.getSourceMap(); + let transferedSourceMap: any = transferSourceMap({fromSourceMap: obfuscationSourceMap, toSourceMap: inputSourceMap}); + compilation.assets[file] = new SourceMapSource(obfuscationResult.toString(), file, JSON.parse(transferedSourceMap), asset.source(), inputSourceMap); + } + else { + compilation.assets[file] = new RawSource(obfuscationResult.toString()); + } }); callback(); diff --git a/package.json b/package.json index 6c01945..c753f90 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "main": "index.js", "dependencies": { "javascript-obfuscator": "^0.7.0-dev.3", + "multi-stage-sourcemap": "^0.2.1", "multimatch": "^2.0.0", "webpack-core": "^0.6.8" },