浏览代码

API change, refactoring, readme update, changelog file

sanex3339 8 年之前
父节点
当前提交
187d52c733

+ 9 - 0
CHANGELOG.md

@@ -0,0 +1,9 @@
+Change Log
+===
+
+v0.7.0-dev.0
+---
+* **Breaking API change:** now `obfuscate(sourceCode, options)` returns `ObfuscationResult` object instead `string`. `ObfuscationResult` object contains two public methods: `getObfuscatedCode()` and `getSourceMap()`.
+* CLI. Now any code can be obfuscated through CLI `javascript-obfuscator` command. See `README.md` for available options. 
+* New option `sourceMap` enables source map generation for obfuscated code.
+* New option `sourceMapMode` specify source map generation mode.

+ 8 - 17
readme.md → README.md

@@ -30,7 +30,7 @@ Here's an example of how to use it:
 ```javascript
 var JavaScriptObfuscator = require('javascript-obfuscator');
 
-var obfuscatedCode = JavaScriptObfuscator.obfuscate(
+var obfuscationResult = JavaScriptObfuscator.obfuscate(
     `
     (function(){
         var variable = 'abc';
@@ -42,7 +42,7 @@ var obfuscatedCode = JavaScriptObfuscator.obfuscate(
     }
 );
 
-console.log(obfuscatedCode);
+console.log(obfuscationResult.getObfuscatedCode());
 /*
 var _0xabf1 = [
     '\x61\x62\x63',
@@ -57,24 +57,15 @@ var _0xabf1 = [
 
 ### `obfuscate(sourceCode, options)`
 
-Returns `string` with obfuscated code.
+Returns `ObfuscationResult` object which contains two public methods:
 
-This is the main function that runs the Obfuscator. It takes two parameters, `sourceCode` and `options` – the source code and the opitons respectively:
+* `getObfuscatedCode()` - returns `string` with obfuscated code;
+* `getSourceMap()` - if `sourceMap` options is enable - returns `string` with source map or an empty string if `sourceMapMode` option is set as `inline`.
 
-* `sourceCode` (`string`, default: `null`) – any valid source code, passed as a string variable. JS Obfuscator will parse this string and apply a set of modificating functions to it, generating a string with the new (obfuscated) code and printing it to the console;
-* `options` (`Object`, default: `null`) – an object literal.
+Method takes two parameters, `sourceCode` and `options` – the source code and the opitons respectively:
 
-### `obfuscateWithSourceMap(sourceCode, options)`
-
-Same as `obfuscate(sourceCode, options)` but instead `string` with obfuscated code returns `ObfuscationResult` object which contains two properties:
-* `obfuscatedCode` - `string` with obfuscated code;
-* `sourceMap` - `string` with source map or an empty string if `sourceMapMode` option is set as `inline`.
-
-Parameters:
-
-* `sourceCode` (`string`, default: `null`) – any valid source code;
-* `options` (`Object`, default: `null`) – an object literal.
- See [options](#options).
+* `sourceCode` (`string`, default: `null`) – any valid source code, passed as a string;
+* `options` (`Object`, default: `null`) – an object with options.
 
 For available options see [options](#options).
 

+ 93 - 93
dist/index.js

@@ -79,7 +79,7 @@ module.exports =
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 19);
+/******/ 	return __webpack_require__(__webpack_require__.s = 20);
 /******/ })
 /************************************************************************/
 /******/ ([
@@ -93,7 +93,7 @@ var _createClass = function () { function defineProperties(target, props) { for
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
-var chance_1 = __webpack_require__(47);
+var chance_1 = __webpack_require__(48);
 var JSFuck_1 = __webpack_require__(9);
 
 var Utils = function () {
@@ -628,7 +628,7 @@ var _createClass = function () { function defineProperties(target, props) { for
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
-var JavaScriptObfuscatorCLI_1 = __webpack_require__(25);
+var JavaScriptObfuscatorCLI_1 = __webpack_require__(26);
 var JavaScriptObfuscatorInternal_1 = __webpack_require__(14);
 
 var JavaScriptObfuscator = function () {
@@ -641,15 +641,6 @@ var JavaScriptObfuscator = function () {
         value: function obfuscate(sourceCode) {
             var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
 
-            var javaScriptObfuscator = new JavaScriptObfuscatorInternal_1.JavaScriptObfuscatorInternal(sourceCode, options);
-            javaScriptObfuscator.obfuscate();
-            return javaScriptObfuscator.getObfuscationResult().obfuscatedCode;
-        }
-    }, {
-        key: "obfuscateWithSourceMap",
-        value: function obfuscateWithSourceMap(sourceCode) {
-            var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
-
             var javaScriptObfuscator = new JavaScriptObfuscatorInternal_1.JavaScriptObfuscatorInternal(sourceCode, options);
             javaScriptObfuscator.obfuscate();
             return javaScriptObfuscator.getObfuscationResult();
@@ -818,9 +809,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
 var esprima = __webpack_require__(17);
 var escodegen = __webpack_require__(10);
 var ObfuscationResult_1 = __webpack_require__(15);
-var Obfuscator_1 = __webpack_require__(20);
-var Options_1 = __webpack_require__(21);
-var SourceMapCorrector_1 = __webpack_require__(23);
+var Obfuscator_1 = __webpack_require__(21);
+var Options_1 = __webpack_require__(22);
+var SourceMapCorrector_1 = __webpack_require__(24);
 
 var JavaScriptObfuscatorInternal = function () {
     function JavaScriptObfuscatorInternal(sourceCode, customOptions) {
@@ -834,8 +825,7 @@ var JavaScriptObfuscatorInternal = function () {
     _createClass(JavaScriptObfuscatorInternal, [{
         key: 'getObfuscationResult',
         value: function getObfuscationResult() {
-            var obfuscationResult = new ObfuscationResult_1.ObfuscationResult(this.generatorOutput.code, this.generatorOutput.map);
-            return new SourceMapCorrector_1.SourceMapCorrector(obfuscationResult, this.sourceMapUrl, this.options.get('sourceMapMode')).correct();
+            return new SourceMapCorrector_1.SourceMapCorrector(new ObfuscationResult_1.ObfuscationResult(this.generatorOutput.code, this.generatorOutput.map), this.sourceMapUrl, this.options.get('sourceMapMode')).correct();
         }
     }, {
         key: 'obfuscate',
@@ -898,6 +888,16 @@ var ObfuscationResult = function () {
     }
 
     _createClass(ObfuscationResult, [{
+        key: "getObfuscatedCode",
+        value: function getObfuscatedCode() {
+            return this.obfuscatedCode;
+        }
+    }, {
+        key: "getSourceMap",
+        value: function getSourceMap() {
+            return this.sourceMap;
+        }
+    }, {
         key: "toString",
         value: function toString() {
             return this.obfuscatedCode;
@@ -943,10 +943,16 @@ module.exports = require("esprima");
 /* 18 */
 /***/ function(module, exports) {
 
-module.exports = require("babel-polyfill");
+module.exports = require("path");
 
 /***/ },
 /* 19 */
+/***/ function(module, exports) {
+
+module.exports = require("babel-polyfill");
+
+/***/ },
+/* 20 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -954,12 +960,12 @@ module.exports = require("babel-polyfill");
 
 var JavaScriptObfuscator_1 = __webpack_require__(8);
 if (!global._babelPolyfill) {
-    __webpack_require__(18);
+    __webpack_require__(19);
 }
 module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator;
 
 /***/ },
-/* 20 */
+/* 21 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -974,19 +980,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
 var estraverse = __webpack_require__(3);
 var AppendState_1 = __webpack_require__(2);
 var NodeType_1 = __webpack_require__(6);
-var CatchClauseObfuscator_1 = __webpack_require__(39);
-var ConsoleOutputNodesGroup_1 = __webpack_require__(35);
-var DebugProtectionNodesGroup_1 = __webpack_require__(36);
-var FunctionDeclarationObfuscator_1 = __webpack_require__(40);
-var FunctionObfuscator_1 = __webpack_require__(41);
-var LiteralObfuscator_1 = __webpack_require__(42);
-var MemberExpressionObfuscator_1 = __webpack_require__(43);
-var MethodDefinitionObfuscator_1 = __webpack_require__(44);
+var CatchClauseObfuscator_1 = __webpack_require__(40);
+var ConsoleOutputNodesGroup_1 = __webpack_require__(36);
+var DebugProtectionNodesGroup_1 = __webpack_require__(37);
+var FunctionDeclarationObfuscator_1 = __webpack_require__(41);
+var FunctionObfuscator_1 = __webpack_require__(42);
+var LiteralObfuscator_1 = __webpack_require__(43);
+var MemberExpressionObfuscator_1 = __webpack_require__(44);
+var MethodDefinitionObfuscator_1 = __webpack_require__(45);
 var NodeUtils_1 = __webpack_require__(1);
-var ObjectExpressionObfuscator_1 = __webpack_require__(45);
-var SelfDefendingNodesGroup_1 = __webpack_require__(37);
-var UnicodeArrayNodesGroup_1 = __webpack_require__(38);
-var VariableDeclarationObfuscator_1 = __webpack_require__(46);
+var ObjectExpressionObfuscator_1 = __webpack_require__(46);
+var SelfDefendingNodesGroup_1 = __webpack_require__(38);
+var UnicodeArrayNodesGroup_1 = __webpack_require__(39);
+var VariableDeclarationObfuscator_1 = __webpack_require__(47);
 
 var Obfuscator = function () {
     function Obfuscator(options) {
@@ -1055,7 +1061,7 @@ var Obfuscator = function () {
 exports.Obfuscator = Obfuscator;
 
 /***/ },
-/* 21 */
+/* 22 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1065,7 +1071,7 @@ var _createClass = function () { function defineProperties(target, props) { for
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
-var OptionsNormalizer_1 = __webpack_require__(22);
+var OptionsNormalizer_1 = __webpack_require__(23);
 var DefaultPreset_1 = __webpack_require__(16);
 
 var Options = function () {
@@ -1088,7 +1094,7 @@ var Options = function () {
 exports.Options = Options;
 
 /***/ },
-/* 22 */
+/* 23 */
 /***/ function(module, exports) {
 
 "use strict";
@@ -1178,7 +1184,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.unicodeArrayRule, Options
 exports.OptionsNormalizer = OptionsNormalizer;
 
 /***/ },
-/* 23 */
+/* 24 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1196,8 +1202,8 @@ var SourceMapCorrector = function () {
     function SourceMapCorrector(obfuscationResult, sourceMapUrl, sourceMapMode) {
         _classCallCheck(this, SourceMapCorrector);
 
-        this.obfuscatedCode = obfuscationResult.obfuscatedCode;
-        this.sourceMap = obfuscationResult.sourceMap;
+        this.obfuscatedCode = obfuscationResult.getObfuscatedCode();
+        this.sourceMap = obfuscationResult.getSourceMap();
         this.sourceMapUrl = sourceMapUrl;
         this.sourceMapMode = sourceMapMode;
     }
@@ -1244,7 +1250,7 @@ var SourceMapCorrector = function () {
 exports.SourceMapCorrector = SourceMapCorrector;
 
 /***/ },
-/* 24 */
+/* 25 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1254,9 +1260,9 @@ var _createClass = function () { function defineProperties(target, props) { for
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
-var fs = __webpack_require__(49);
-var mkdirp = __webpack_require__(50);
-var path = __webpack_require__(51);
+var fs = __webpack_require__(50);
+var mkdirp = __webpack_require__(51);
+var path = __webpack_require__(18);
 var Utils_1 = __webpack_require__(0);
 
 var CLIUtils = function () {
@@ -1331,7 +1337,7 @@ CLIUtils.encoding = 'utf8';
 exports.CLIUtils = CLIUtils;
 
 /***/ },
-/* 25 */
+/* 26 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1341,11 +1347,11 @@ var _createClass = function () { function defineProperties(target, props) { for
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
-var path = __webpack_require__(51);
-var commander_1 = __webpack_require__(48);
+var path = __webpack_require__(18);
+var commander_1 = __webpack_require__(49);
 var SourceMapMode_1 = __webpack_require__(11);
 var DefaultPreset_1 = __webpack_require__(16);
-var CLIUtils_1 = __webpack_require__(24);
+var CLIUtils_1 = __webpack_require__(25);
 var JavaScriptObfuscator_1 = __webpack_require__(8);
 var JavaScriptObfuscatorInternal_1 = __webpack_require__(14);
 var Utils_1 = __webpack_require__(0);
@@ -1419,7 +1425,7 @@ var JavaScriptObfuscatorCLI = function () {
     }, {
         key: 'processDataWithoutSourceMap',
         value: function processDataWithoutSourceMap(outputCodePath, options) {
-            var obfuscatedCode = JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(this.data, options);
+            var obfuscatedCode = JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(this.data, options).getObfuscatedCode();
             CLIUtils_1.CLIUtils.writeFile(outputCodePath, obfuscatedCode);
         }
     }, {
@@ -1433,9 +1439,9 @@ var JavaScriptObfuscatorCLI = function () {
                 javaScriptObfuscator.setSourceMapUrl(path.basename(outputSourceMapPath));
             }
             obfuscationResult = javaScriptObfuscator.getObfuscationResult();
-            CLIUtils_1.CLIUtils.writeFile(outputCodePath, obfuscationResult.obfuscatedCode);
-            if (obfuscationResult.sourceMap) {
-                CLIUtils_1.CLIUtils.writeFile(outputSourceMapPath, obfuscationResult.sourceMap);
+            CLIUtils_1.CLIUtils.writeFile(outputCodePath, obfuscationResult.getObfuscatedCode());
+            if (obfuscationResult.getSourceMap()) {
+                CLIUtils_1.CLIUtils.writeFile(outputSourceMapPath, obfuscationResult.getSourceMap());
             }
         }
     }], [{
@@ -1467,7 +1473,7 @@ var JavaScriptObfuscatorCLI = function () {
 exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI;
 
 /***/ },
-/* 26 */
+/* 27 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1521,7 +1527,7 @@ var ConsoleOutputDisableExpressionNode = function (_Node_1$Node) {
 exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode;
 
 /***/ },
-/* 27 */
+/* 28 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1570,7 +1576,7 @@ var DebugProtectionFunctionCallNode = function (_Node_1$Node) {
 exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode;
 
 /***/ },
-/* 28 */
+/* 29 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1619,7 +1625,7 @@ var DebugProtectionFunctionIntervalNode = function (_Node_1$Node) {
 exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode;
 
 /***/ },
-/* 29 */
+/* 30 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1679,7 +1685,7 @@ var DebugProtectionFunctionNode = function (_Node_1$Node) {
 exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode;
 
 /***/ },
-/* 30 */
+/* 31 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1735,7 +1741,7 @@ var SelfDefendingUnicodeNode = function (_Node_1$Node) {
     }, {
         key: "getNodeStructure",
         value: function getNodeStructure() {
-            return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate("\n                (function () {                                \n                    var func = function(){return " + Utils_1.Utils.stringToUnicode('dev') + ";},\n                        func2 = function () {\n                            return 'window';\n                        };\n                \n                    !Function(" + Utils_1.Utils.stringToUnicode("return/\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}/") + ")().test(func.toString()) ? Function(" + Utils_1.Utils.stringToUnicode("return/(\\\\[x|u](\\w){2,4})+/") + ")().test(func2.toString()) ? []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.False + "){}')() : []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.True + "){}')() : []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.False + "){}')();\n                })();\n            ", NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET));
+            return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate("\n                (function () {                                \n                    var func = function(){return " + Utils_1.Utils.stringToUnicode('dev') + ";},\n                        func2 = function () {\n                            return 'window';\n                        };\n                \n                    !Function(" + Utils_1.Utils.stringToUnicode("return/\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}/") + ")().test(func.toString()) ? Function(" + Utils_1.Utils.stringToUnicode("return/(\\\\[x|u](\\w){2,4})+/") + ")().test(func2.toString()) ? []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.False + "){}')() : []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.True + "){}')() : []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.False + "){}')();\n                })();\n            ", NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET).getObfuscatedCode());
         }
     }]);
 
@@ -1745,7 +1751,7 @@ var SelfDefendingUnicodeNode = function (_Node_1$Node) {
 exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode;
 
 /***/ },
-/* 31 */
+/* 32 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1813,7 +1819,7 @@ var UnicodeArrayCallsWrapper = function (_Node_1$Node) {
 exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper;
 
 /***/ },
-/* 32 */
+/* 33 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1877,7 +1883,7 @@ var UnicodeArrayDecodeNode = function (_Node_1$Node) {
             } else {
                 code = forLoopFunctionName + "();";
             }
-            return NodeUtils_1.NodeUtils.convertCodeToStructure("\n            (function () {\n                " + JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate("\n                    (function () {\n                        var object = []['filter']['constructor']('return this')();\n                        var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n            \n                        object.atob || (\n                            object.atob = function(input) {\n                                var str = String(input).replace(/=+$/, '');\n                                for (\n                                    var bc = 0, bs, buffer, idx = 0, output = '';\n                                    buffer = str.charAt(idx++);\n                                    ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n                                        bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n                                ) {\n                                    buffer = chars.indexOf(buffer);\n                                }\n                            return output;\n                        });\n                    })();\n                ", NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET) + "\n              \n                var " + forLoopFunctionName + " = function () {\n                    var " + tempArrayName + " = [];\n                    \n                    for (var " + indexVariableName + " in " + this.unicodeArrayName + ") {\n                        " + tempArrayName + "[" + Utils_1.Utils.stringToUnicode('push') + "](decodeURI(atob(" + this.unicodeArrayName + "[" + indexVariableName + "])));\n                    }\n                    \n                    " + this.unicodeArrayName + " = " + tempArrayName + ";\n                };\n                \n                " + code + "\n            })();\n        ");
+            return NodeUtils_1.NodeUtils.convertCodeToStructure("\n            (function () {\n                " + JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate("\n                    (function () {\n                        var object = []['filter']['constructor']('return this')();\n                        var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n            \n                        object.atob || (\n                            object.atob = function(input) {\n                                var str = String(input).replace(/=+$/, '');\n                                for (\n                                    var bc = 0, bs, buffer, idx = 0, output = '';\n                                    buffer = str.charAt(idx++);\n                                    ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n                                        bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n                                ) {\n                                    buffer = chars.indexOf(buffer);\n                                }\n                            return output;\n                        });\n                    })();\n                ", NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET).getObfuscatedCode() + "\n              \n                var " + forLoopFunctionName + " = function () {\n                    var " + tempArrayName + " = [];\n                    \n                    for (var " + indexVariableName + " in " + this.unicodeArrayName + ") {\n                        " + tempArrayName + "[" + Utils_1.Utils.stringToUnicode('push') + "](decodeURI(atob(" + this.unicodeArrayName + "[" + indexVariableName + "])));\n                    }\n                    \n                    " + this.unicodeArrayName + " = " + tempArrayName + ";\n                };\n                \n                " + code + "\n            })();\n        ");
         }
     }]);
 
@@ -1887,7 +1893,7 @@ var UnicodeArrayDecodeNode = function (_Node_1$Node) {
 exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode;
 
 /***/ },
-/* 33 */
+/* 34 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1969,7 +1975,7 @@ UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH = 4;
 exports.UnicodeArrayNode = UnicodeArrayNode;
 
 /***/ },
-/* 34 */
+/* 35 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2030,7 +2036,7 @@ var UnicodeArrayRotateFunctionNode = function (_Node_1$Node) {
                 timesArgumentName = Utils_1.Utils.getRandomVariableName(),
                 whileFunctionName = Utils_1.Utils.getRandomVariableName();
             if (this.options.get('selfDefending')) {
-                code = JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate("\n                (function () {\n                    var func = function(){return " + Utils_1.Utils.stringToUnicode('dev') + ";};\n                                        \n                    !Function(" + Utils_1.Utils.stringToUnicode("return/\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}/") + ")().test(func.toString()) ? []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.True + "){}')() : Function(" + Utils_1.Utils.stringToUnicode('a') + ", " + Utils_1.Utils.stringToUnicode('b') + ", " + Utils_1.Utils.stringToUnicode('a(++b)') + ")(" + whileFunctionName + ", " + timesName + ") ? []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.False + "){}')() : []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.False + "){}')();\n                })();\n            ", NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET);
+                code = JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate("\n                (function () {\n                    var func = function(){return " + Utils_1.Utils.stringToUnicode('dev') + ";};\n                                        \n                    !Function(" + Utils_1.Utils.stringToUnicode("return/\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}/") + ")().test(func.toString()) ? []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.True + "){}')() : Function(" + Utils_1.Utils.stringToUnicode('a') + ", " + Utils_1.Utils.stringToUnicode('b') + ", " + Utils_1.Utils.stringToUnicode('a(++b)') + ")(" + whileFunctionName + ", " + timesName + ") ? []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.False + "){}')() : []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(" + JSFuck_1.JSFuck.False + "){}')();\n                })();\n            ", NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET).getObfuscatedCode();
             } else {
                 code = whileFunctionName + "(++" + timesName + ")";
             }
@@ -2044,7 +2050,7 @@ var UnicodeArrayRotateFunctionNode = function (_Node_1$Node) {
 exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode;
 
 /***/ },
-/* 35 */
+/* 36 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2056,7 +2062,7 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
 
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
 
-var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(26);
+var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(27);
 var NodesGroup_1 = __webpack_require__(12);
 
 var ConsoleOutputNodesGroup = function (_NodesGroup_1$NodesGr) {
@@ -2080,7 +2086,7 @@ var ConsoleOutputNodesGroup = function (_NodesGroup_1$NodesGr) {
 exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup;
 
 /***/ },
-/* 36 */
+/* 37 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2092,9 +2098,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
 
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
 
-var DebugProtectionFunctionCallNode_1 = __webpack_require__(27);
-var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(28);
-var DebugProtectionFunctionNode_1 = __webpack_require__(29);
+var DebugProtectionFunctionCallNode_1 = __webpack_require__(28);
+var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(29);
+var DebugProtectionFunctionNode_1 = __webpack_require__(30);
 var NodesGroup_1 = __webpack_require__(12);
 var Utils_1 = __webpack_require__(0);
 
@@ -2124,7 +2130,7 @@ var DebugProtectionNodesGroup = function (_NodesGroup_1$NodesGr) {
 exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup;
 
 /***/ },
-/* 37 */
+/* 38 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2137,7 +2143,7 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
 
 var NodesGroup_1 = __webpack_require__(12);
-var SelfDefendingUnicodeNode_1 = __webpack_require__(30);
+var SelfDefendingUnicodeNode_1 = __webpack_require__(31);
 
 var SelfDefendingNodesGroup = function (_NodesGroup_1$NodesGr) {
     _inherits(SelfDefendingNodesGroup, _NodesGroup_1$NodesGr);
@@ -2160,7 +2166,7 @@ var SelfDefendingNodesGroup = function (_NodesGroup_1$NodesGr) {
 exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup;
 
 /***/ },
-/* 38 */
+/* 39 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2173,10 +2179,10 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
 
 var NodesGroup_1 = __webpack_require__(12);
-var UnicodeArrayCallsWrapper_1 = __webpack_require__(31);
-var UnicodeArrayDecodeNode_1 = __webpack_require__(32);
-var UnicodeArrayNode_1 = __webpack_require__(33);
-var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(34);
+var UnicodeArrayCallsWrapper_1 = __webpack_require__(32);
+var UnicodeArrayDecodeNode_1 = __webpack_require__(33);
+var UnicodeArrayNode_1 = __webpack_require__(34);
+var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(35);
 var Utils_1 = __webpack_require__(0);
 
 var UnicodeArrayNodesGroup = function (_NodesGroup_1$NodesGr) {
@@ -2221,7 +2227,7 @@ var UnicodeArrayNodesGroup = function (_NodesGroup_1$NodesGr) {
 exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup;
 
 /***/ },
-/* 39 */
+/* 40 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2292,7 +2298,7 @@ var CatchClauseObfuscator = function (_NodeObfuscator_1$Nod) {
 exports.CatchClauseObfuscator = CatchClauseObfuscator;
 
 /***/ },
-/* 40 */
+/* 41 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2369,7 +2375,7 @@ var FunctionDeclarationObfuscator = function (_NodeObfuscator_1$Nod) {
 exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator;
 
 /***/ },
-/* 41 */
+/* 42 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2446,7 +2452,7 @@ var FunctionObfuscator = function (_NodeObfuscator_1$Nod) {
 exports.FunctionObfuscator = FunctionObfuscator;
 
 /***/ },
-/* 42 */
+/* 43 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2511,7 +2517,7 @@ var LiteralObfuscator = function (_NodeObfuscator_1$Nod) {
 exports.LiteralObfuscator = LiteralObfuscator;
 
 /***/ },
-/* 43 */
+/* 44 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2595,7 +2601,7 @@ var MemberExpressionObfuscator = function (_NodeObfuscator_1$Nod) {
 exports.MemberExpressionObfuscator = MemberExpressionObfuscator;
 
 /***/ },
-/* 44 */
+/* 45 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2661,7 +2667,7 @@ var MethodDefinitionObfuscator = function (_NodeObfuscator_1$Nod) {
 exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator;
 
 /***/ },
-/* 45 */
+/* 46 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2744,7 +2750,7 @@ var ObjectExpressionObfuscator = function (_NodeObfuscator_1$Nod) {
 exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator;
 
 /***/ },
-/* 46 */
+/* 47 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -2837,35 +2843,29 @@ var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) {
 
 exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator;
 
-/***/ },
-/* 47 */
-/***/ function(module, exports) {
-
-module.exports = require("chance");
-
 /***/ },
 /* 48 */
 /***/ function(module, exports) {
 
-module.exports = require("commander");
+module.exports = require("chance");
 
 /***/ },
 /* 49 */
 /***/ function(module, exports) {
 
-module.exports = require("fs");
+module.exports = require("commander");
 
 /***/ },
 /* 50 */
 /***/ function(module, exports) {
 
-module.exports = require("mkdirp");
+module.exports = require("fs");
 
 /***/ },
 /* 51 */
 /***/ function(module, exports) {
 
-module.exports = require("path");
+module.exports = require("mkdirp");
 
 /***/ }
 /******/ ]);

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "javascript-obfuscator",
-  "version": "0.7.0-dev",
+  "version": "0.7.0-dev.0",
   "description": "JavaScript obfuscator",
   "keywords": [
     "obfuscator",

+ 1 - 14
src/JavaScriptObfuscator.ts

@@ -10,20 +10,7 @@ export class JavaScriptObfuscator {
      * @param options
      * @returns {string}
      */
-    public static obfuscate (sourceCode: string, options: IOptionsPreset = {}): string {
-        let javaScriptObfuscator: JavaScriptObfuscatorInternal = new JavaScriptObfuscatorInternal(sourceCode, options);
-
-        javaScriptObfuscator.obfuscate();
-
-        return javaScriptObfuscator.getObfuscationResult().obfuscatedCode;
-    }
-
-    /**
-     * @param sourceCode
-     * @param options
-     * @returns {string}
-     */
-    public static obfuscateWithSourceMap (sourceCode: string, options: IOptionsPreset = {}): IObfuscationResult {
+    public static obfuscate (sourceCode: string, options: IOptionsPreset = {}): IObfuscationResult {
         let javaScriptObfuscator: JavaScriptObfuscatorInternal = new JavaScriptObfuscatorInternal(sourceCode, options);
 
         javaScriptObfuscator.obfuscate();

+ 4 - 6
src/JavaScriptObfuscatorInternal.ts

@@ -83,13 +83,11 @@ export class JavaScriptObfuscatorInternal {
      * @returns {IObfuscationResult}
      */
     public getObfuscationResult (): IObfuscationResult {
-        let obfuscationResult: IObfuscationResult = new ObfuscationResult(
-            this.generatorOutput.code,
-            this.generatorOutput.map
-        );
-
         return new SourceMapCorrector(
-            obfuscationResult,
+            new ObfuscationResult(
+                this.generatorOutput.code,
+                this.generatorOutput.map
+            ),
             this.sourceMapUrl,
             this.options.get<TSourceMapMode>('sourceMapMode')
         ).correct();

+ 16 - 2
src/ObfuscationResult.ts

@@ -4,12 +4,12 @@ export class ObfuscationResult implements IObfuscationResult {
     /**
      * @type {string}
      */
-    public obfuscatedCode: string;
+    private obfuscatedCode: string;
 
     /**
      * @type {string}
      */
-    public sourceMap: string;
+    private sourceMap: string;
 
     /**
      * @param obfuscatedCode
@@ -20,6 +20,20 @@ export class ObfuscationResult implements IObfuscationResult {
         this.sourceMap = sourceMap;
     }
 
+    /**
+     * @returns {string}
+     */
+    public getObfuscatedCode (): string {
+        return this.obfuscatedCode;
+    }
+
+    /**
+     * @returns {string}
+     */
+    public getSourceMap (): string {
+        return this.sourceMap;
+    }
+
     /**
      * @returns {string}
      */

+ 7 - 3
src/SourceMapCorrector.ts

@@ -33,9 +33,13 @@ export class SourceMapCorrector {
      * @param sourceMapUrl
      * @param sourceMapMode
      */
-    constructor (obfuscationResult: IObfuscationResult, sourceMapUrl: string, sourceMapMode: TSourceMapMode) {
-        this.obfuscatedCode = obfuscationResult.obfuscatedCode;
-        this.sourceMap = obfuscationResult.sourceMap;
+    constructor (
+        obfuscationResult: IObfuscationResult,
+        sourceMapUrl: string,
+        sourceMapMode: TSourceMapMode
+    ) {
+        this.obfuscatedCode = obfuscationResult.getObfuscatedCode();
+        this.sourceMap = obfuscationResult.getSourceMap();
 
         this.sourceMapUrl = sourceMapUrl;
         this.sourceMapMode = sourceMapMode;

+ 4 - 4
src/cli/JavaScriptObfuscatorCLI.ts

@@ -170,7 +170,7 @@ export class JavaScriptObfuscatorCLI {
      * @param options
      */
     private processDataWithoutSourceMap (outputCodePath: string, options: IOptionsPreset): void {
-        let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(this.data, options);
+        let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(this.data, options).getObfuscatedCode();
 
         CLIUtils.writeFile(outputCodePath, obfuscatedCode);
     }
@@ -194,10 +194,10 @@ export class JavaScriptObfuscatorCLI {
 
         obfuscationResult = javaScriptObfuscator.getObfuscationResult();
 
-        CLIUtils.writeFile(outputCodePath, obfuscationResult.obfuscatedCode);
+        CLIUtils.writeFile(outputCodePath, obfuscationResult.getObfuscatedCode());
 
-        if (obfuscationResult.sourceMap) {
-            CLIUtils.writeFile(outputSourceMapPath, obfuscationResult.sourceMap);
+        if (obfuscationResult.getSourceMap()) {
+            CLIUtils.writeFile(outputSourceMapPath, obfuscationResult.getSourceMap());
         }
     }
 }

+ 1 - 1
src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts

@@ -49,7 +49,7 @@ export class SelfDefendingUnicodeNode extends Node {
                 
                     !Function(${Utils.stringToUnicode(`return/\\w+ *\\(\\) *{\\w+ *['|"].+['|"];? *}/`)})().test(func.toString()) ? Function(${Utils.stringToUnicode(`return/(\\\\[x|u](\\w){2,4})+/`)})().test(func2.toString()) ? []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(${JSFuck.False}){}')() : []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(${JSFuck.True}){}')() : []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(${JSFuck.False}){}')();
                 })();
-            `, NO_CUSTOM_NODES_PRESET)
+            `, NO_CUSTOM_NODES_PRESET).getObfuscatedCode()
         );
     }
 }

+ 1 - 1
src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts

@@ -106,7 +106,7 @@ export class UnicodeArrayDecodeNode extends Node {
                             return output;
                         });
                     })();
-                `, NO_CUSTOM_NODES_PRESET)}
+                `, NO_CUSTOM_NODES_PRESET).getObfuscatedCode()}
               
                 var ${forLoopFunctionName} = function () {
                     var ${tempArrayName} = [];

+ 1 - 1
src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts

@@ -88,7 +88,7 @@ export class UnicodeArrayRotateFunctionNode extends Node {
                                         
                     !Function(${Utils.stringToUnicode(`return/\\w+ *\\(\\) *{\\w+ *['|"].+['|"];? *}/`)})().test(func.toString()) ? []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(${JSFuck.True}){}')() : Function(${Utils.stringToUnicode('a')}, ${Utils.stringToUnicode('b')}, ${Utils.stringToUnicode('a(++b)')})(${whileFunctionName}, ${timesName}) ? []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(${JSFuck.False}){}')() : []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(${JSFuck.False}){}')();
                 })();
-            `, NO_CUSTOM_NODES_PRESET);
+            `, NO_CUSTOM_NODES_PRESET).getObfuscatedCode();
         } else {
             code = `${whileFunctionName}(++${timesName})`;
         }

+ 11 - 2
src/interfaces/IObfuscationResult.d.ts

@@ -1,4 +1,13 @@
+import { IObfuscationResult } from "./IObfuscationResult";
+
 export interface IObfuscationResult {
-    obfuscatedCode: string;
-    sourceMap: string;
+    /**
+     * @return {string}
+     */
+    getObfuscatedCode (): string;
+
+    /**
+     * @return {string}
+     */
+    getSourceMap (): string;
 }

+ 1 - 1
test/dev/test.ts

@@ -62,7 +62,7 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
         disableConsoleOutput: false,
         encodeUnicodeLiterals: true
     }
-);
+).getObfuscatedCode();
 
 console.log(obfuscatedCode);
 console.log(eval(obfuscatedCode));

+ 26 - 78
test/functional-tests/JavaScriptObfuscator.spec.ts

@@ -7,86 +7,34 @@ import { NO_CUSTOM_NODES_PRESET } from "../../src/preset-options/NoCustomNodesPr
 const assert: Chai.AssertStatic = require('chai').assert;
 
 describe('JavaScriptObfuscator', () => {
-    describe('obfuscate (sourceCode: string, customOptions?: IOptionsPreset): string', () => {
-        it('should returns empty string if source code is empty', () => {
-            assert.isNotOk(JavaScriptObfuscator.obfuscate('', Object.assign({}, NO_CUSTOM_NODES_PRESET)));
-        });
-
-        it('should obfuscate simple code with variable inside global scope', () => {
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `var test = 1;`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
-                ),
-                /^var *test *= *0x\d+;$/
-            );
-        });
-
-        it('should obfuscate simple code with variable inside block-scope', () => {
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `(function () {var test = 1;})()`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
-                ),
-                /^\(function *\(\) *\{ *var *_0x[\w]+ *= *0x\d+; *\}(\(\)\)|\)\(\));?$/
-            );
-        });
-
-        it('should obfuscate simple code with literal variable value', () => {
-            let pattern: RegExp = /^var _0x(\w){4} *= *\['(\\[x|u]\d+)+'\]; *var *test *= *_0x(\w){4}\[0x0\];$/;
-
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `var test = 'abc';`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
-                        unicodeArray: true,
-                        unicodeArrayThreshold: 1
-                    })
-                ),
-                pattern
-            );
-
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `var test = 'абц';`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
-                        unicodeArray: true,
-                        unicodeArrayThreshold: 1
-                    })
-                ),
-                pattern
-            );
-        });
-    });
-
-    describe('obfuscateWithSourceMap (sourceCode: string, customOptions?: IOptionsPreset): string', () => {
+    describe('obfuscate (sourceCode: string, customOptions?: IOptionsPreset): IObfuscationResult', () => {
         describe('if `sourceMap` option is `false`', () => {
             it('should returns object with obfuscated code and empty source map', () => {
-                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscateWithSourceMap(
+                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
                     `var test = 1;`,
                     Object.assign({}, NO_CUSTOM_NODES_PRESET)
                 );
 
-                assert.isOk(obfuscationResult.obfuscatedCode);
-                assert.isNotOk(obfuscationResult.sourceMap);
+                assert.isOk(obfuscationResult.getObfuscatedCode());
+                assert.isNotOk(obfuscationResult.getSourceMap());
             });
         });
 
         describe('if `sourceMap` option is `true`', () => {
             it('should returns object with obfuscated code and source map', () => {
-                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscateWithSourceMap(
+                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
                     `var test = 1;`,
                     Object.assign({}, NO_CUSTOM_NODES_PRESET, {
                         sourceMap: true
                     })
                 );
 
-                assert.isOk(obfuscationResult.obfuscatedCode);
-                assert.isOk(JSON.parse(obfuscationResult.sourceMap).mappings);
+                assert.isOk(obfuscationResult.getObfuscatedCode());
+                assert.isOk(JSON.parse(obfuscationResult.getSourceMap()).mappings);
             });
 
             it('should returns object with obfuscated code with inline source map and empty `sourceMap` if `sourceMapMode` is `inline', () => {
-                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscateWithSourceMap(
+                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
                     `var test = 1;`,
                     Object.assign({}, NO_CUSTOM_NODES_PRESET, {
                         sourceMap: true,
@@ -94,54 +42,54 @@ describe('JavaScriptObfuscator', () => {
                     })
                 );
 
-                assert.isOk(obfuscationResult.obfuscatedCode);
+                assert.isOk(obfuscationResult.getObfuscatedCode());
                 assert.match(
-                    obfuscationResult.obfuscatedCode,
+                    obfuscationResult.getObfuscatedCode(),
                     /sourceMappingURL=data:application\/json;base64/
                 );
-                assert.isNotOk(obfuscationResult.sourceMap);
+                assert.isNotOk(obfuscationResult.getSourceMap());
             });
 
             it('should returns object with empty obfuscated code and source map with empty data if source code is empty', () => {
-                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscateWithSourceMap(
+                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
                     '',
                     Object.assign({}, NO_CUSTOM_NODES_PRESET, {
                         sourceMap: true
                     })
                 );
 
-                assert.isNotOk(obfuscationResult.obfuscatedCode);
-                assert.deepEqual(JSON.parse(obfuscationResult.sourceMap).names, []);
-                assert.deepEqual(JSON.parse(obfuscationResult.sourceMap).sources, []);
-                assert.isNotOk(JSON.parse(obfuscationResult.sourceMap).mappings);
+                assert.isNotOk(obfuscationResult.getObfuscatedCode());
+                assert.deepEqual(JSON.parse(obfuscationResult.getSourceMap()).names, []);
+                assert.deepEqual(JSON.parse(obfuscationResult.getSourceMap()).sources, []);
+                assert.isNotOk(JSON.parse(obfuscationResult.getSourceMap()).mappings);
             });
         });
 
         it('should returns empty string if source code is empty', () => {
             assert.isNotOk(
-                JavaScriptObfuscator.obfuscateWithSourceMap(
+                JavaScriptObfuscator.obfuscate(
                     '',
                     Object.assign({}, NO_CUSTOM_NODES_PRESET)
-                ).obfuscatedCode
+                ).getObfuscatedCode()
             );
         });
 
         it('should obfuscate simple code with variable inside global scope', () => {
             assert.match(
-                JavaScriptObfuscator.obfuscateWithSourceMap(
+                JavaScriptObfuscator.obfuscate(
                     `var test = 1;`,
                     Object.assign({}, NO_CUSTOM_NODES_PRESET)
-                ).obfuscatedCode,
+                ).getObfuscatedCode(),
                 /^var *test *= *0x\d+;$/
             );
         });
 
         it('should obfuscate simple code with variable inside block-scope', () => {
             assert.match(
-                JavaScriptObfuscator.obfuscateWithSourceMap(
+                JavaScriptObfuscator.obfuscate(
                     `(function () {var test = 1;})()`,
                     Object.assign({}, NO_CUSTOM_NODES_PRESET)
-                ).obfuscatedCode,
+                ).getObfuscatedCode(),
                 /^\(function *\(\) *\{ *var *_0x[\w]+ *= *0x\d+; *\}(\(\)\)|\)\(\));?$/
             );
         });
@@ -150,24 +98,24 @@ describe('JavaScriptObfuscator', () => {
             let pattern: RegExp = /^var _0x(\w){4} *= *\['(\\[x|u]\d+)+'\]; *var *test *= *_0x(\w){4}\[0x0\];$/;
 
             assert.match(
-                JavaScriptObfuscator.obfuscateWithSourceMap(
+                JavaScriptObfuscator.obfuscate(
                     `var test = 'abc';`,
                     Object.assign({}, NO_CUSTOM_NODES_PRESET, {
                         unicodeArray: true,
                         unicodeArrayThreshold: 1
                     })
-                ).obfuscatedCode,
+                ).getObfuscatedCode(),
                 pattern
             );
 
             assert.match(
-                JavaScriptObfuscator.obfuscateWithSourceMap(
+                JavaScriptObfuscator.obfuscate(
                     `var test = 'абц';`,
                     Object.assign({}, NO_CUSTOM_NODES_PRESET, {
                         unicodeArray: true,
                         unicodeArrayThreshold: 1
                     })
-                ).obfuscatedCode,
+                ).getObfuscatedCode(),
                 pattern
             );
         });

+ 5 - 2
test/functional-tests/JavaScriptObfuscatorInternal.spec.ts

@@ -27,8 +27,11 @@ describe('JavaScriptObfuscatorInternal', () => {
         });
 
         it('should link obfuscated code with source map', () => {
-            assert.match(obfuscationResult.obfuscatedCode, new RegExp(`sourceMappingURL=${sourceMapUrl}`));
-            assert.isOk(JSON.parse(obfuscationResult.sourceMap).mappings);
+            assert.match(
+                obfuscationResult.getObfuscatedCode(),
+                new RegExp(`sourceMappingURL=${sourceMapUrl}`))
+            ;
+            assert.isOk(JSON.parse(obfuscationResult.getSourceMap()).mappings);
         });
     });
 });

+ 0 - 0
test/unit-tests/ObfuscationResult.spec.ts → test/unit-tests/ObfuscationResultWrapper.spec.ts