diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..dcc1cedb --- /dev/null +++ b/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. \ No newline at end of file diff --git a/readme.md b/README.md similarity index 89% rename from readme.md rename to README.md index d037a04b..f8da4799 100644 --- a/readme.md +++ b/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). diff --git a/dist/index.js b/dist/index.js index 05d89aad..a4df83a7 100644 --- a/dist/index.js +++ b/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"; @@ -2838,35 +2844,29 @@ var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 47 */ +/* 48 */ /***/ function(module, exports) { module.exports = require("chance"); /***/ }, -/* 48 */ +/* 49 */ /***/ function(module, exports) { module.exports = require("commander"); /***/ }, -/* 49 */ +/* 50 */ /***/ function(module, exports) { module.exports = require("fs"); /***/ }, -/* 50 */ +/* 51 */ /***/ function(module, exports) { module.exports = require("mkdirp"); -/***/ }, -/* 51 */ -/***/ function(module, exports) { - -module.exports = require("path"); - /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/package.json b/package.json index d87ce333..cc3516e1 100644 --- a/package.json +++ b/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", diff --git a/src/JavaScriptObfuscator.ts b/src/JavaScriptObfuscator.ts index e529b9a0..f81f3a4d 100644 --- a/src/JavaScriptObfuscator.ts +++ b/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(); diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index 0118af21..c1aef134 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/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('sourceMapMode') ).correct(); diff --git a/src/ObfuscationResult.ts b/src/ObfuscationResult.ts index 13f71a10..86859809 100644 --- a/src/ObfuscationResult.ts +++ b/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} */ diff --git a/src/SourceMapCorrector.ts b/src/SourceMapCorrector.ts index 94af1274..f2ed091c 100644 --- a/src/SourceMapCorrector.ts +++ b/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; diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index 642caf54..ce167000 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/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()); } } } diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index 18a72faf..0bc9be25 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/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() ); } } diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts index 484da968..98aaa92a 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts +++ b/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} = []; diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts index a68e14f0..29d8c32c 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts +++ b/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})`; } diff --git a/src/interfaces/IObfuscationResult.d.ts b/src/interfaces/IObfuscationResult.d.ts index 1a60e6ce..943c8e80 100644 --- a/src/interfaces/IObfuscationResult.d.ts +++ b/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; } diff --git a/test/dev/test.ts b/test/dev/test.ts index 9c08920a..b3cd2f79 100644 --- a/test/dev/test.ts +++ b/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)); diff --git a/test/functional-tests/JavaScriptObfuscator.spec.ts b/test/functional-tests/JavaScriptObfuscator.spec.ts index 4636e80f..4f589a34 100644 --- a/test/functional-tests/JavaScriptObfuscator.spec.ts +++ b/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 ); }); diff --git a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts b/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts index 5a5e0d6f..5df61fbb 100644 --- a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts +++ b/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); }); }); }); diff --git a/test/unit-tests/ObfuscationResult.spec.ts b/test/unit-tests/ObfuscationResultWrapper.spec.ts similarity index 100% rename from test/unit-tests/ObfuscationResult.spec.ts rename to test/unit-tests/ObfuscationResultWrapper.spec.ts