diff --git a/.babelrc b/.babelrc index 8b6f24f8..620b013f 100644 --- a/.babelrc +++ b/.babelrc @@ -2,5 +2,12 @@ "generatorOpts": { "retainFunctionParens": true }, - "presets": ["es2015"] + "presets": ["es2015"], + "plugins": [ + ["transform-runtime", { + "helpers": true, + "polyfill": true, + "regenerator": false + }] + ] } \ No newline at end of file diff --git a/README.md b/README.md index 1ab0343b..d02e70ca 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ var _0xabf1 = [ Returns `ObfuscationResult` object which contains two public methods: * `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`. +* `getSourceMap()` - if [`sourceMap`](#sourcemap) option is enabled - returns `string` with source map or an empty string if [`sourceMapMode`](#sourcemapmode) option is set as `inline`. Calling `toString()` for `ObfuscationResult` object will return `string` with obfuscated code. @@ -171,7 +171,7 @@ Compact code output on one line. ### `controlFlowFlattening` Type: `boolean` Default: `false` -Enables code control flow flattening. Control flow flattening is a structure transformation of the source code that hindering the comprehension of the program. +Enables code control flow flattening. Control flow flattening is a structure transformation of the source code that hinders program comprehension. Example: ```ts @@ -210,6 +210,15 @@ Example: }()); ``` +### `controlFlowFlatteningThreshold` +Type: `number` Default: `0.75` Min: `0` Max: `1` + +The probability that the [`controlFlowFlattening`](#controlflowflattening) transformation will be applied to the node. + +This setting is especially useful for large code size because large amount of control flow transformations can slow down your code and increase code size. + +`controlFlowFlatteningThreshold: 0` equals to `controlFlowFlattening: false`. + ### `debugProtection` Type: `boolean` Default: `false` @@ -225,7 +234,7 @@ Type: `boolean` Default: `false` ##### :warning: Can freeze your browser! Use at own risk. -If checked, an interval is used to force the debug mode on the Console tab, making it harder to use other features of the Developer Tools. Works if `debugProtection` is enabled. +If checked, an interval is used to force the debug mode on the Console tab, making it harder to use other features of the Developer Tools. Works if [`debugProtection`](#debugprotection) is enabled. ### `disableConsoleOutput` Type: `boolean` Default: `true` @@ -258,7 +267,7 @@ Example: ### `rotateStringArray` Type: `boolean` Default: `true` -##### :warning: `stringArray` must be enabled +##### :warning: [`stringArray`](#stringarray) must be enabled Shift the `stringArray` array by a fixed and random (generated at the code obfuscation) places. This makes it harder to match the order of the removed strings to their original place. @@ -275,7 +284,7 @@ If seed is `0` - random generator will work without seed. Type: `boolean` Default: `false` ##### :warning: Don't change obfuscated code in any way after obfuscation with this option, because any change like uglifying of code can trigger self defending and code wont work anymore! -##### :warning: this option forcibly set `compact` value to `true` +##### :warning: This option forcibly sets `compact` value to `true` This option makes the output code resilient against formatting and variable renaming. If one tries to use a JavaScript beautifier on the obfuscated code, the code won't work anymore, making it harder to understand and modify it. @@ -284,12 +293,12 @@ Type: `boolean` Default: `false` Enables source map generation for obfuscated code. -Source maps can be useful to help you debug your obfuscated Java Script source code. If you want or need to debug in production, you can upload the separate source map file to a secret location and then point your browser there. +Source maps can be useful to help you debug your obfuscated JavaScript source code. If you want or need to debug in production, you can upload the separate source map file to a secret location and then point your browser there. ### `sourceMapBaseUrl` Type: `string` Default: `` -Sets base url to the source map import url when `sourceMapMode: 'separate'`. +Sets base url to the source map import url when [`sourceMapMode: 'separate'`](#sourcemapmode). CLI example: ``` @@ -321,12 +330,12 @@ Type: `string` Default: `separate` Specifies source map generation mode: * `inline` - emit a single file with source maps instead of having a separate file; -* `separate` - generates corresponding '.map' file with source map. If obfuscator run through CLI - adds link to source map file to the end of file with obfuscated code `//# sourceMappingUrl=file.js.map`. +* `separate` - generates corresponding '.map' file with source map. In case you run obfuscator through CLI - adds link to source map file to the end of file with obfuscated code `//# sourceMappingUrl=file.js.map`. ### `stringArray` Type: `boolean` Default: `true` -Removes string literals and place them in a special array. For instance the string `"Hello World"` in `var m = "Hello World";` will be replaced with something like `var m = _0x12c456[0x1];` +Removes string literals and place them in a special array. For instance, the string `"Hello World"` in `var m = "Hello World";` will be replaced with something like `var m = _0x12c456[0x1];` ### `stringArrayEncoding` Type: `boolean|string` Default: `false` @@ -335,7 +344,7 @@ Type: `boolean|string` Default: `false` This option can slightly slow down your script. -Encode all string literals of the `stringArray` using `base64` or `rc4` and inserts a special code that used to decode it back at runtime. +Encode all string literals of the [`stringArray`](#stringarray) using `base64` or `rc4` and inserts a special code that used to decode it back at runtime. Available values: * `true` (`boolean`): encode `stringArray` values using `base64` @@ -346,11 +355,11 @@ Available values: ### `stringArrayThreshold` Type: `number` Default: `0.8` Min: `0` Max: `1` -##### :warning: `stringArray` option must be enabled +##### :warning: [`stringArray`](#stringarray) option must be enabled You can use this setting to adjust the probability (from 0 to 1) that a string literal will be inserted into the `stringArray`. -This setting is useful with large code size because repeatdely calls to the `stringArray` array can slightly slow down your code. +This setting is especially useful for large code size because it repeatedly calls to the `string array` and can slow down your code. `stringArrayThreshold: 0` equals to `stringArray: false`. @@ -359,7 +368,7 @@ Type: `boolean` Default: `true` Allows to enable/disable string conversion to unicode escape sequence. -Unicode escape sequence greatly increases code size. Recommend to disable this option when using `stringArrayEncoding` (especially with `rc4` encoding). +Unicode escape sequence increases code size greatly. It is recommended to disable this option when using [`stringArrayEncoding`](#stringarrayencoding) (especially with `rc4` encoding). ## License Copyright (C) 2016 [Timofey Kachalov](http://github.com/sanex3339). @@ -382,4 +391,4 @@ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 2de5ec4b..55e5284a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -88,162 +88,32 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 122); +/******/ return __webpack_require__(__webpack_require__.s = 144); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports) { -module.exports = require("inversify"); +module.exports = require("babel-runtime/helpers/classCallCheck"); /***/ }, /* 1 */ /***/ function(module, exports) { -"use strict"; -"use strict"; - -exports.ServiceIdentifiers = { - 'Factory': Symbol('Factory'), - 'Factory': Symbol('Factory'), - 'Factory': Symbol('Factory'), - 'Factory': Symbol('Factory'), - 'Factory': Symbol('Factory'), - 'Factory': Symbol('Factory'), - 'Factory': Symbol('Factory'), - 'Factory>': Symbol('Factory>'), - ICalleeDataExtractor: Symbol('ICalleeDataExtractor'), - ICustomNode: Symbol('ICustomNode'), - ICustomNodeGroup: Symbol('ICustomNodeGroup'), - IControlFlowReplacer: Symbol('IControlFlowReplacer'), - IJavaScriptObfuscator: Symbol('IJavaScriptObfuscator'), - INodeTransformer: Symbol('INodeTransformer'), - IObfuscationEventEmitter: Symbol('IObfuscationEventEmitter'), - IObfuscationResult: Symbol('IObfuscationResult'), - IObfuscator: Symbol('IObfuscator'), - IOptions: Symbol('IOptions'), - IReplacer: Symbol('IReplacer'), - ISourceMapCorrector: Symbol('ISourceMapCorrector'), - IStackTraceAnalyzer: Symbol('IStackTraceAnalyzer'), - 'IStorage': Symbol('IStorage'), - 'IStorage': Symbol('IStorage') -}; +module.exports = require("babel-runtime/helpers/createClass"); /***/ }, /* 2 */ -/***/ function(module, exports, __webpack_require__) { +/***/ function(module, exports) { -"use strict"; -"use strict"; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var chance_1 = __webpack_require__(114); -var Utils_1 = __webpack_require__(4); - -var RandomGeneratorUtils = function () { - function RandomGeneratorUtils() { - _classCallCheck(this, RandomGeneratorUtils); - } - - _createClass(RandomGeneratorUtils, null, [{ - key: 'getRandomFloat', - value: function getRandomFloat(min, max) { - return RandomGeneratorUtils.randomGenerator.floating({ - min: min, - max: max, - fixed: 7 - }); - } - }, { - key: 'getRandomGenerator', - value: function getRandomGenerator() { - var randomGenerator = RandomGeneratorUtils.randomGenerator; - if (!randomGenerator) { - throw new Error('`randomGenerator` static property is undefined'); - } - return RandomGeneratorUtils.randomGenerator; - } - }, { - key: 'getRandomInteger', - value: function getRandomInteger(min, max) { - return RandomGeneratorUtils.randomGenerator.integer({ - min: min, - max: max - }); - } - }, { - key: 'getRandomVariableName', - value: function getRandomVariableName() { - var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 6; - - var rangeMinInteger = 10000, - rangeMaxInteger = 99999999; - return '_' + Utils_1.Utils.hexadecimalPrefix + Utils_1.Utils.decToHex(RandomGeneratorUtils.getRandomInteger(rangeMinInteger, rangeMaxInteger)).substr(0, length); - } - }, { - key: 'setRandomGeneratorSeed', - value: function setRandomGeneratorSeed(randomGeneratorSeed) { - RandomGeneratorUtils.randomGenerator = new chance_1.Chance(randomGeneratorSeed); - } - }]); - - return RandomGeneratorUtils; -}(); - -RandomGeneratorUtils.randomGeneratorPool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; -RandomGeneratorUtils.randomGeneratorPoolWithNumbers = RandomGeneratorUtils.randomGeneratorPool + '0123456789'; -RandomGeneratorUtils.randomGenerator = new chance_1.Chance(); -exports.RandomGeneratorUtils = RandomGeneratorUtils; +module.exports = require("inversify"); /***/ }, /* 3 */ /***/ function(module, exports) { -"use strict"; -"use strict"; - -function initializable() { - var initializeMethodKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'initialize'; - - var decoratorName = Object.keys(this)[0]; - return function (target, propertyKey) { - var initializeMethod = target[initializeMethodKey]; - if (!initializeMethod || typeof initializeMethod !== 'function') { - throw new Error('`' + initializeMethodKey + '` method with initialization logic not found. `@' + decoratorName + '` decorator requires `' + initializeMethodKey + '` method'); - } - var methodDescriptor = Object.getOwnPropertyDescriptor(target, initializeMethodKey) || { - configurable: true, - enumerable: true - }; - var originalMethod = methodDescriptor.value; - methodDescriptor.value = function () { - originalMethod.apply(this, arguments); - if (this[propertyKey]) {} - }; - Object.defineProperty(target, initializeMethodKey, methodDescriptor); - var metadataPropertyKey = '_' + propertyKey; - var propertyDescriptor = Object.getOwnPropertyDescriptor(target, metadataPropertyKey) || { - configurable: true, - enumerable: true - }; - propertyDescriptor.get = function () { - if (this[metadataPropertyKey] === undefined) { - throw new Error('Property `' + propertyKey + '` is not initialized! Initialize it first!'); - } - return this[metadataPropertyKey]; - }; - propertyDescriptor.set = function (newVal) { - this[metadataPropertyKey] = newVal; - }; - Object.defineProperty(target, propertyKey, propertyDescriptor); - return propertyDescriptor; - }; -} -exports.initializable = initializable; +module.exports = require("tslib"); /***/ }, /* 4 */ @@ -252,36 +122,397 @@ exports.initializable = initializable; "use strict"; "use strict"; -var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); +var _symbol = __webpack_require__(134); -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _symbol2 = _interopRequireDefault(_symbol); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var JSFuck_1 = __webpack_require__(27); -var isEqual = __webpack_require__(119); +exports.ServiceIdentifiers = { + 'Factory': (0, _symbol2.default)('Factory'), + 'Factory': (0, _symbol2.default)('Factory'), + 'Factory': (0, _symbol2.default)('Factory'), + 'Factory': (0, _symbol2.default)('Factory'), + 'Factory': (0, _symbol2.default)('Factory'), + 'Factory': (0, _symbol2.default)('Factory'), + 'Factory': (0, _symbol2.default)('Factory'), + 'Factory>': (0, _symbol2.default)('Factory>'), + ICalleeDataExtractor: (0, _symbol2.default)('ICalleeDataExtractor'), + ICustomNode: (0, _symbol2.default)('ICustomNode'), + ICustomNodeGroup: (0, _symbol2.default)('ICustomNodeGroup'), + IControlFlowReplacer: (0, _symbol2.default)('IControlFlowReplacer'), + IJavaScriptObfuscator: (0, _symbol2.default)('IJavaScriptObfuscator'), + INodeTransformer: (0, _symbol2.default)('INodeTransformer'), + IObfuscationEventEmitter: (0, _symbol2.default)('IObfuscationEventEmitter'), + IObfuscationResult: (0, _symbol2.default)('IObfuscationResult'), + IObfuscator: (0, _symbol2.default)('IObfuscator'), + IOptions: (0, _symbol2.default)('IOptions'), + IObfuscatorReplacer: (0, _symbol2.default)('IObfuscatorReplacer'), + ISourceMapCorrector: (0, _symbol2.default)('ISourceMapCorrector'), + IStackTraceAnalyzer: (0, _symbol2.default)('IStackTraceAnalyzer'), + 'IStorage': (0, _symbol2.default)('IStorage'), + 'IStorage': (0, _symbol2.default)('IStorage'), + 'IStorage': (0, _symbol2.default)('IStorage') +}; + +/***/ }, +/* 5 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/core-js/object/get-prototype-of"); + +/***/ }, +/* 6 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/helpers/inherits"); + +/***/ }, +/* 7 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/helpers/possibleConstructorReturn"); + +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var chance_1 = __webpack_require__(47); +var Utils_1 = __webpack_require__(11); + +var RandomGeneratorUtils = function () { + function RandomGeneratorUtils() { + (0, _classCallCheck3.default)(this, RandomGeneratorUtils); + } + + (0, _createClass3.default)(RandomGeneratorUtils, null, [{ + key: "getRandomFloat", + value: function getRandomFloat(min, max) { + return RandomGeneratorUtils.getRandomGenerator().floating({ + min: min, + max: max, + fixed: 7 + }); + } + }, { + key: "getRandomGenerator", + value: function getRandomGenerator() { + var randomGenerator = RandomGeneratorUtils.randomGenerator; + if (!randomGenerator) { + throw new Error("`randomGenerator` static property is undefined"); + } + return RandomGeneratorUtils.randomGenerator; + } + }, { + key: "getRandomInteger", + value: function getRandomInteger(min, max) { + return RandomGeneratorUtils.getRandomGenerator().integer({ + min: min, + max: max + }); + } + }, { + key: "getRandomString", + value: function getRandomString(length) { + var pool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RandomGeneratorUtils.randomGeneratorPool; + + return RandomGeneratorUtils.getRandomGenerator().string({ length: length, pool: pool }); + } + }, { + key: "getRandomVariableName", + value: function getRandomVariableName() { + var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 6; + var withPrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + var prefix = withPrefix ? "_" + Utils_1.Utils.hexadecimalPrefix : ''; + var rangeMinInteger = 10000; + var rangeMaxInteger = 99999999; + return "" + prefix + Utils_1.Utils.decToHex(RandomGeneratorUtils.getRandomInteger(rangeMinInteger, rangeMaxInteger)).substr(0, length); + } + }, { + key: "setRandomGenerator", + value: function setRandomGenerator(randomGenerator) { + RandomGeneratorUtils.randomGenerator = randomGenerator; + } + }]); + return RandomGeneratorUtils; +}(); + +RandomGeneratorUtils.randomGeneratorPool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; +RandomGeneratorUtils.randomGeneratorPoolWithNumbers = RandomGeneratorUtils.randomGeneratorPool + "0123456789"; +RandomGeneratorUtils.randomGenerator = new chance_1.Chance(); +exports.RandomGeneratorUtils = RandomGeneratorUtils; + +/***/ }, +/* 9 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _defineProperty = __webpack_require__(132); + +var _defineProperty2 = _interopRequireDefault(_defineProperty); + +var _getOwnPropertyDescriptor = __webpack_require__(133); + +var _getOwnPropertyDescriptor2 = _interopRequireDefault(_getOwnPropertyDescriptor); + +var _keys = __webpack_require__(45); + +var _keys2 = _interopRequireDefault(_keys); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +function initializable() { + var initializeMethodKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'initialize'; + + var decoratorName = (0, _keys2.default)(this)[0]; + return function (target, propertyKey) { + var descriptor = { + configurable: true, + enumerable: true + }; + var initializeMethod = target[initializeMethodKey]; + if (!initializeMethod || typeof initializeMethod !== 'function') { + throw new Error("`" + initializeMethodKey + "` method with initialization logic not found. `@" + decoratorName + "` decorator requires `" + initializeMethodKey + "` method"); + } + var metadataPropertyKey = "_" + propertyKey; + var propertyDescriptor = (0, _getOwnPropertyDescriptor2.default)(target, metadataPropertyKey) || descriptor; + var methodDescriptor = (0, _getOwnPropertyDescriptor2.default)(target, initializeMethodKey) || descriptor; + var originalMethod = methodDescriptor.value; + (0, _defineProperty2.default)(target, propertyKey, tslib_1.__assign({}, propertyDescriptor, { get: function get() { + if (this[metadataPropertyKey] === undefined) { + throw new Error("Property `" + propertyKey + "` is not initialized! Initialize it first!"); + } + return this[metadataPropertyKey]; + }, set: function set(newVal) { + this[metadataPropertyKey] = newVal; + } })); + (0, _defineProperty2.default)(target, initializeMethodKey, tslib_1.__assign({}, methodDescriptor, { value: function value() { + originalMethod.apply(this, arguments); + if (this[propertyKey]) {} + } })); + return propertyDescriptor; + }; +} +exports.initializable = initializable; + +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var NodeType_1 = __webpack_require__(17); + +var Node = function () { + function Node() { + (0, _classCallCheck3.default)(this, Node); + } + + (0, _createClass3.default)(Node, null, [{ + key: "getProgramNode", + value: function getProgramNode(bodyNode) { + return { + 'type': NodeType_1.NodeType.Program, + 'body': bodyNode, + 'sourceType': 'script', + 'obfuscated': false + }; + } + }, { + key: "isArrowFunctionExpressionNode", + value: function isArrowFunctionExpressionNode(node) { + return node.type === NodeType_1.NodeType.ArrowFunctionExpression; + } + }, { + key: "isBlockStatementNode", + value: function isBlockStatementNode(node) { + return node.type === NodeType_1.NodeType.BlockStatement; + } + }, { + key: "isBreakStatementNode", + value: function isBreakStatementNode(node) { + return node.type === NodeType_1.NodeType.BreakStatement; + } + }, { + key: "isCallExpressionNode", + value: function isCallExpressionNode(node) { + return node.type === NodeType_1.NodeType.CallExpression; + } + }, { + key: "isContinueStatementNode", + value: function isContinueStatementNode(node) { + return node.type === NodeType_1.NodeType.ContinueStatement; + } + }, { + key: "isExpressionStatementNode", + value: function isExpressionStatementNode(node) { + return node.type === NodeType_1.NodeType.ExpressionStatement; + } + }, { + key: "isFunctionDeclarationNode", + value: function isFunctionDeclarationNode(node) { + return node.type === NodeType_1.NodeType.FunctionDeclaration; + } + }, { + key: "isFunctionExpressionNode", + value: function isFunctionExpressionNode(node) { + return node.type === NodeType_1.NodeType.FunctionExpression; + } + }, { + key: "isIdentifierNode", + value: function isIdentifierNode(node) { + return node.type === NodeType_1.NodeType.Identifier; + } + }, { + key: "isIfStatementNode", + value: function isIfStatementNode(node) { + return node.type === NodeType_1.NodeType.IfStatement; + } + }, { + key: "isLabelIdentifierNode", + value: function isLabelIdentifierNode(node, parentNode) { + var parentNodeIsLabeledStatementNode = Node.isLabeledStatementNode(parentNode) && parentNode.label === node; + var parentNodeIsContinueStatementNode = Node.isContinueStatementNode(parentNode) && parentNode.label === node; + var parentNodeIsBreakStatementNode = Node.isBreakStatementNode(parentNode) && parentNode.label === node; + return parentNodeIsLabeledStatementNode || parentNodeIsContinueStatementNode || parentNodeIsBreakStatementNode; + } + }, { + key: "isLabeledStatementNode", + value: function isLabeledStatementNode(node) { + return node.type === NodeType_1.NodeType.LabeledStatement; + } + }, { + key: "isLiteralNode", + value: function isLiteralNode(node) { + return node.type === NodeType_1.NodeType.Literal; + } + }, { + key: "isMemberExpressionNode", + value: function isMemberExpressionNode(node) { + return node.type === NodeType_1.NodeType.MemberExpression; + } + }, { + key: "isObjectExpressionNode", + value: function isObjectExpressionNode(node) { + return node.type === NodeType_1.NodeType.ObjectExpression; + } + }, { + key: "isProgramNode", + value: function isProgramNode(node) { + return node.type === NodeType_1.NodeType.Program; + } + }, { + key: "isPropertyNode", + value: function isPropertyNode(node) { + return node.type === NodeType_1.NodeType.Property; + } + }, { + key: "isReplaceableIdentifierNode", + value: function isReplaceableIdentifierNode(node, parentNode) { + if (!Node.isIdentifierNode(node)) { + return false; + } + var parentNodeIsPropertyNode = Node.isPropertyNode(parentNode) && parentNode.key === node; + var parentNodeIsMemberExpressionNode = Node.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node; + return !parentNodeIsPropertyNode && !parentNodeIsMemberExpressionNode && !Node.isLabelIdentifierNode(node, parentNode); + } + }, { + key: "isVariableDeclarationNode", + value: function isVariableDeclarationNode(node) { + return node.type === NodeType_1.NodeType.VariableDeclaration; + } + }, { + key: "isVariableDeclaratorNode", + value: function isVariableDeclaratorNode(node) { + return node.type === NodeType_1.NodeType.VariableDeclarator; + } + }, { + key: "isNodeHasBlockStatement", + value: function isNodeHasBlockStatement(node) { + return node.hasOwnProperty('body') && Array.isArray(node.body); + } + }]); + return Node; +}(); + +exports.Node = Node; + +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _from = __webpack_require__(26); + +var _from2 = _interopRequireDefault(_from); + +var _slicedToArray2 = __webpack_require__(35); + +var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); + +var _getIterator2 = __webpack_require__(22); + +var _getIterator3 = _interopRequireDefault(_getIterator2); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _ = __webpack_require__(49); +var JSFuck_1 = __webpack_require__(37); var Utils = function () { function Utils() { - _classCallCheck(this, Utils); + (0, _classCallCheck3.default)(this, Utils); } - _createClass(Utils, null, [{ - key: 'arrayContains', - value: function arrayContains(array, searchElement) { - return array.indexOf(searchElement) >= 0; - } - }, { - key: 'arrayRotate', + (0, _createClass3.default)(Utils, null, [{ + key: "arrayRotate", value: function arrayRotate(array, times) { if (!array.length) { - throw new ReferenceError('Cannot rotate empty array.'); + throw new ReferenceError("Cannot rotate empty array."); } if (times <= 0) { return array; } - var newArray = array, - temp = void 0; + var newArray = array; + var temp = void 0; while (times--) { temp = newArray.pop(); newArray.unshift(temp); @@ -289,13 +520,13 @@ var Utils = function () { return newArray; } }, { - key: 'decToHex', + key: "decToHex", value: function decToHex(dec) { var radix = 16; return Number(dec).toString(radix); } }, { - key: 'extractDomainFromUrl', + key: "extractDomainFromUrl", value: function extractDomainFromUrl(url) { var domain = void 0; if (url.indexOf('://') > -1 || url.indexOf('//') === 0) { @@ -307,24 +538,24 @@ var Utils = function () { return domain; } }, { - key: 'isInteger', - value: function isInteger(number) { + key: "isCeilNumber", + value: function isCeilNumber(number) { return number % 1 === 0; } }, { - key: 'mapGetFirstKeyOf', + key: "mapGetFirstKeyOf", value: function mapGetFirstKeyOf(map, value) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { - for (var _iterator = map[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var _step$value = _slicedToArray(_step.value, 2), + for (var _iterator = (0, _getIterator3.default)(map), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var _step$value = (0, _slicedToArray3.default)(_step.value, 2), key = _step$value[0], storageValue = _step$value[1]; - if (isEqual(value, storageValue)) { + if (_.isEqual(value, storageValue)) { return key; } } @@ -346,37 +577,36 @@ var Utils = function () { return null; } }, { - key: 'strEnumify', + key: "strEnumify", value: function strEnumify(obj) { return obj; } }, { - key: 'stringToJSFuck', + key: "stringToJSFuck", value: function stringToJSFuck(string) { - return Array.from(string).map(function (character) { + return (0, _from2.default)(string).map(function (character) { return JSFuck_1.JSFuck[character] || character; }).join(' + '); } }, { - key: 'stringToUnicodeEscapeSequence', + key: "stringToUnicodeEscapeSequence", value: function stringToUnicodeEscapeSequence(string) { var radix = 16; + var regexp = new RegExp('[\x00-\x7F]'); var prefix = void 0, - regexp = new RegExp('[\x00-\x7F]'), template = void 0; - return '' + string.replace(/[\s\S]/g, function (escape) { + return "" + string.replace(/[\s\S]/g, function (escape) { if (regexp.test(escape)) { prefix = '\\x'; template = '0'.repeat(2); } else { - prefix = '\\u'; + prefix = "\\u"; template = '0'.repeat(4); } - return '' + prefix + (template + escape.charCodeAt(0).toString(radix)).slice(-template.length); + return "" + prefix + (template + escape.charCodeAt(0).toString(radix)).slice(-template.length); }); } }]); - return Utils; }(); @@ -384,194 +614,51 @@ Utils.hexadecimalPrefix = '0x'; exports.Utils = Utils; /***/ }, -/* 5 */ -/***/ function(module, exports, __webpack_require__) { +/* 12 */ +/***/ function(module, exports) { -"use strict"; -"use strict"; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var NodeType_1 = __webpack_require__(9); - -var Node = function () { - function Node() { - _classCallCheck(this, Node); - } - - _createClass(Node, null, [{ - key: 'getProgramNode', - value: function getProgramNode(bodyNode) { - return { - 'type': NodeType_1.NodeType.Program, - 'body': bodyNode, - 'sourceType': 'script', - 'obfuscated': false - }; - } - }, { - key: 'isArrowFunctionExpressionNode', - value: function isArrowFunctionExpressionNode(node) { - return node.type === NodeType_1.NodeType.ArrowFunctionExpression; - } - }, { - key: 'isBlockStatementNode', - value: function isBlockStatementNode(node) { - return node.type === NodeType_1.NodeType.BlockStatement; - } - }, { - key: 'isBreakStatementNode', - value: function isBreakStatementNode(node) { - return node.type === NodeType_1.NodeType.BreakStatement; - } - }, { - key: 'isCallExpressionNode', - value: function isCallExpressionNode(node) { - return node.type === NodeType_1.NodeType.CallExpression; - } - }, { - key: 'isContinueStatementNode', - value: function isContinueStatementNode(node) { - return node.type === NodeType_1.NodeType.ContinueStatement; - } - }, { - key: 'isExpressionStatementNode', - value: function isExpressionStatementNode(node) { - return node.type === NodeType_1.NodeType.ExpressionStatement; - } - }, { - key: 'isFunctionDeclarationNode', - value: function isFunctionDeclarationNode(node) { - return node.type === NodeType_1.NodeType.FunctionDeclaration; - } - }, { - key: 'isFunctionExpressionNode', - value: function isFunctionExpressionNode(node) { - return node.type === NodeType_1.NodeType.FunctionExpression; - } - }, { - key: 'isIdentifierNode', - value: function isIdentifierNode(node) { - return node.type === NodeType_1.NodeType.Identifier; - } - }, { - key: 'isLabelIdentifierNode', - value: function isLabelIdentifierNode(node, parentNode) { - var parentNodeIsLabeledStatementNode = Node.isLabeledStatementNode(parentNode) && parentNode.label === node; - var parentNodeIsContinueStatementNode = Node.isContinueStatementNode(parentNode) && parentNode.label === node; - var parentNodeIsBreakStatementNode = Node.isBreakStatementNode(parentNode) && parentNode.label === node; - return parentNodeIsLabeledStatementNode || parentNodeIsContinueStatementNode || parentNodeIsBreakStatementNode; - } - }, { - key: 'isLabeledStatementNode', - value: function isLabeledStatementNode(node) { - return node.type === NodeType_1.NodeType.LabeledStatement; - } - }, { - key: 'isLiteralNode', - value: function isLiteralNode(node) { - return node.type === NodeType_1.NodeType.Literal; - } - }, { - key: 'isMemberExpressionNode', - value: function isMemberExpressionNode(node) { - return node.type === NodeType_1.NodeType.MemberExpression; - } - }, { - key: 'isObjectExpressionNode', - value: function isObjectExpressionNode(node) { - return node.type === NodeType_1.NodeType.ObjectExpression; - } - }, { - key: 'isProgramNode', - value: function isProgramNode(node) { - return node.type === NodeType_1.NodeType.Program; - } - }, { - key: 'isPropertyNode', - value: function isPropertyNode(node) { - return node.type === NodeType_1.NodeType.Property; - } - }, { - key: 'isReplaceableIdentifierNode', - value: function isReplaceableIdentifierNode(node, parentNode) { - if (!Node.isIdentifierNode(node)) { - return false; - } - var parentNodeIsPropertyNode = Node.isPropertyNode(parentNode) && parentNode.key === node; - var parentNodeIsMemberExpressionNode = Node.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node; - return !parentNodeIsPropertyNode && !parentNodeIsMemberExpressionNode && !Node.isLabelIdentifierNode(node, parentNode); - } - }, { - key: 'isVariableDeclarationNode', - value: function isVariableDeclarationNode(node) { - return node.type === NodeType_1.NodeType.VariableDeclaration; - } - }, { - key: 'isVariableDeclaratorNode', - value: function isVariableDeclaratorNode(node) { - return node.type === NodeType_1.NodeType.VariableDeclarator; - } - }, { - key: 'isNodeHasBlockStatement', - value: function isNodeHasBlockStatement(node) { - return node.hasOwnProperty('body') && Array.isArray(node.body); - } - }]); - - return Node; -}(); - -exports.Node = Node; +module.exports = require("babel-runtime/core-js/map"); /***/ }, -/* 6 */ +/* 13 */ /***/ function(module, exports) { module.exports = require("estraverse"); /***/ }, -/* 7 */ +/* 14 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var NodeUtils_1 = __webpack_require__(10); +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var NodeUtils_1 = __webpack_require__(15); var AbstractCustomNode = function () { function AbstractCustomNode(options) { - _classCallCheck(this, AbstractCustomNode); + (0, _classCallCheck3.default)(this, AbstractCustomNode); this.options = options; } - _createClass(AbstractCustomNode, [{ + (0, _createClass3.default)(AbstractCustomNode, [{ + key: "getCode", + value: function getCode() { + return NodeUtils_1.NodeUtils.convertStructureToCode(this.getNode()); + } + }, { key: "getNode", value: function getNode() { return this.getNodeStructure(); @@ -579,29 +666,221 @@ var AbstractCustomNode = function () { }, { key: "getNodeStructure", value: function getNodeStructure() { - return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getCode()); + return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getTemplate()); } }]); - return AbstractCustomNode; }(); -AbstractCustomNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], AbstractCustomNode); +AbstractCustomNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractCustomNode); exports.AbstractCustomNode = AbstractCustomNode; /***/ }, -/* 8 */ -/***/ function(module, exports) { - -module.exports = require("string-template"); - -/***/ }, -/* 9 */ +/* 15 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var Utils_1 = __webpack_require__(4); +var _getIterator2 = __webpack_require__(22); + +var _getIterator3 = _interopRequireDefault(_getIterator2); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var escodegen = __webpack_require__(27); +var esprima = __webpack_require__(48); +var estraverse = __webpack_require__(13); +var NodeType_1 = __webpack_require__(17); +var Node_1 = __webpack_require__(10); + +var NodeUtils = function () { + function NodeUtils() { + (0, _classCallCheck3.default)(this, NodeUtils); + } + + (0, _createClass3.default)(NodeUtils, null, [{ + key: "addXVerbatimPropertyToLiterals", + value: function addXVerbatimPropertyToLiterals(node) { + NodeUtils.typedReplace(node, NodeType_1.NodeType.Literal, { + leave: function leave(node) { + node['x-verbatim-property'] = { + content: node.raw, + precedence: escodegen.Precedence.Primary + }; + } + }); + } + }, { + key: "convertCodeToStructure", + value: function convertCodeToStructure(code) { + var structure = esprima.parse(code); + NodeUtils.addXVerbatimPropertyToLiterals(structure); + NodeUtils.parentize(structure); + return structure.body; + } + }, { + key: "convertStructureToCode", + value: function convertStructureToCode(structure) { + var code = ''; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator3.default)(structure), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var node = _step.value; + + code += escodegen.generate(node, { + sourceMapWithCode: true + }).code; + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return code; + } + }, { + key: "getBlockStatementNodeByIndex", + value: function getBlockStatementNodeByIndex(node) { + var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + + if (Node_1.Node.isNodeHasBlockStatement(node)) { + if (node.body[index] === undefined) { + throw new ReferenceError("Wrong index `" + index + "`. Block-statement body length is `" + node.body.length + "`"); + } + return node.body[index]; + } + throw new TypeError('The specified node have no a block-statement'); + } + }, { + key: "getBlockScopesOfNode", + value: function getBlockScopesOfNode(node) { + var blockScopes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + var parentNode = node.parentNode; + if (!parentNode) { + throw new ReferenceError('`parentNode` property of given node is `undefined`'); + } + if (Node_1.Node.isBlockStatementNode(parentNode)) { + if (!parentNode.parentNode) { + throw new ReferenceError('`parentNode` property of `parentNode` of given node is `undefined`'); + } + if (!NodeUtils.nodesWithBlockScope.includes(parentNode.parentNode.type)) { + return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes); + } + blockScopes.push(parentNode); + return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes); + } + if (!Node_1.Node.isProgramNode(parentNode)) { + return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes); + } + blockScopes.push(parentNode); + return blockScopes; + } + }, { + key: "getNodeBlockScopeDepth", + value: function getNodeBlockScopeDepth(node) { + var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + + var parentNode = node.parentNode; + if (!parentNode) { + throw new ReferenceError('`parentNode` property of given node is `undefined`'); + } + if (Node_1.Node.isProgramNode(parentNode)) { + return depth; + } + if (Node_1.Node.isBlockStatementNode(node) && NodeUtils.nodesWithBlockScope.includes(parentNode.type)) { + return NodeUtils.getNodeBlockScopeDepth(parentNode, ++depth); + } + return NodeUtils.getNodeBlockScopeDepth(parentNode, depth); + } + }, { + key: "parentize", + value: function parentize(node) { + var isRootNode = true; + estraverse.replace(node, { + enter: function enter(node, parentNode) { + var value = void 0; + if (isRootNode) { + if (node.type === NodeType_1.NodeType.Program) { + value = node; + } else { + value = Node_1.Node.getProgramNode([node]); + value.parentNode = value; + } + isRootNode = false; + } else { + value = parentNode || node; + } + node.parentNode = value; + node.obfuscated = false; + } + }); + } + }, { + key: "typedReplace", + value: function typedReplace(node, nodeType, visitor) { + NodeUtils.typedTraverse(node, nodeType, visitor, 'replace'); + } + }, { + key: "typedTraverse", + value: function typedTraverse(node, nodeType, visitor) { + var traverseType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'traverse'; + + estraverse[traverseType](node, { + enter: function enter(node, parentNode) { + if (node.type === nodeType && visitor.enter) { + return visitor.enter(node, parentNode); + } + }, + leave: function leave(node, parentNode) { + if (node.type === nodeType && visitor.leave) { + return visitor.leave(node, parentNode); + } + } + }); + } + }]); + return NodeUtils; +}(); + +NodeUtils.nodesWithBlockScope = [NodeType_1.NodeType.ArrowFunctionExpression, NodeType_1.NodeType.FunctionDeclaration, NodeType_1.NodeType.FunctionExpression, NodeType_1.NodeType.MethodDefinition, NodeType_1.NodeType.Program]; +exports.NodeUtils = NodeUtils; + +/***/ }, +/* 16 */ +/***/ function(module, exports) { + +module.exports = require("string-template"); + +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var Utils_1 = __webpack_require__(11); exports.NodeType = Utils_1.Utils.strEnumify({ ArrayExpression: 'ArrayExpression', ArrowFunctionExpression: 'ArrowFunctionExpression', @@ -627,6 +906,8 @@ exports.NodeType = Utils_1.Utils.strEnumify({ Program: 'Program', Property: 'Property', ReturnStatement: 'ReturnStatement', + SwitchCase: 'SwitchCase', + SwitchStatement: 'SwitchStatement', TryStatement: 'TryStatement', UnaryExpression: 'UnaryExpression', UpdateExpression: 'UpdateExpression', @@ -636,201 +917,52 @@ exports.NodeType = Utils_1.Utils.strEnumify({ }); /***/ }, -/* 10 */ +/* 18 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var escodegen = __webpack_require__(17); -var esprima = __webpack_require__(33); -var estraverse = __webpack_require__(6); -var NodeType_1 = __webpack_require__(9); -var Node_1 = __webpack_require__(5); -var Utils_1 = __webpack_require__(4); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var NodeUtils = function () { - function NodeUtils() { - _classCallCheck(this, NodeUtils); - } - - _createClass(NodeUtils, null, [{ - key: 'addXVerbatimPropertyToLiterals', - value: function addXVerbatimPropertyToLiterals(node) { - NodeUtils.typedReplace(node, NodeType_1.NodeType.Literal, { - leave: function leave(node) { - node['x-verbatim-property'] = { - content: node.raw, - precedence: escodegen.Precedence.Primary - }; - } - }); - } - }, { - key: 'convertCodeToStructure', - value: function convertCodeToStructure(code) { - var structure = esprima.parse(code); - NodeUtils.addXVerbatimPropertyToLiterals(structure); - NodeUtils.parentize(structure); - return structure.body; - } - }, { - key: 'getBlockStatementNodeByIndex', - value: function getBlockStatementNodeByIndex(node) { - var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - if (Node_1.Node.isNodeHasBlockStatement(node)) { - if (node.body[index] === undefined) { - throw new ReferenceError('Wrong index `' + index + '`. Block-statement body length is `' + node.body.length + '`'); - } - return node.body[index]; - } - throw new TypeError('The specified node have no a block-statement'); - } - }, { - key: 'getBlockScopeOfNode', - value: function getBlockScopeOfNode(node) { - var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - var parentNode = node.parentNode; - if (!parentNode) { - throw new ReferenceError('`parentNode` property of given node is `undefined`'); - } - if (Node_1.Node.isBlockStatementNode(parentNode)) { - if (!parentNode.parentNode) { - throw new ReferenceError('`parentNode` property of `parentNode` of given node is `undefined`'); - } - if (!Utils_1.Utils.arrayContains(NodeUtils.nodesWithBlockScope, parentNode.parentNode.type)) { - return NodeUtils.getBlockScopeOfNode(parentNode, depth); - } else if (depth > 0) { - return NodeUtils.getBlockScopeOfNode(parentNode, --depth); - } - return parentNode; - } - if (Node_1.Node.isProgramNode(parentNode)) { - return parentNode; - } - return NodeUtils.getBlockScopeOfNode(parentNode); - } - }, { - key: 'getNodeBlockScopeDepth', - value: function getNodeBlockScopeDepth(node) { - var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - var parentNode = node.parentNode; - if (!parentNode) { - throw new ReferenceError('`parentNode` property of given node is `undefined`'); - } - if (Node_1.Node.isProgramNode(parentNode)) { - return depth; - } - if (Node_1.Node.isBlockStatementNode(node) && Utils_1.Utils.arrayContains(NodeUtils.nodesWithBlockScope, parentNode.type)) { - return NodeUtils.getNodeBlockScopeDepth(parentNode, ++depth); - } - return NodeUtils.getNodeBlockScopeDepth(parentNode, depth); - } - }, { - key: 'parentize', - value: function parentize(node) { - var isRootNode = true; - estraverse.replace(node, { - enter: function enter(node, parentNode) { - var value = void 0; - if (isRootNode) { - if (node.type === NodeType_1.NodeType.Program) { - value = node; - } else { - value = Node_1.Node.getProgramNode([node]); - value.parentNode = value; - } - isRootNode = false; - } else { - value = parentNode || node; - } - node.parentNode = value; - node.obfuscated = false; - } - }); - } - }, { - key: 'typedReplace', - value: function typedReplace(node, nodeType, visitor) { - NodeUtils.typedTraverse(node, nodeType, visitor, 'replace'); - } - }, { - key: 'typedTraverse', - value: function typedTraverse(node, nodeType, visitor) { - var traverseType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'traverse'; - - estraverse[traverseType](node, { - enter: function enter(node, parentNode) { - if (node.type === nodeType && visitor.enter) { - visitor.enter(node, parentNode); - } - }, - leave: function leave(node, parentNode) { - if (node.type === nodeType && visitor.leave) { - visitor.leave(node, parentNode); - } - } - }); - } - }]); - - return NodeUtils; -}(); - -NodeUtils.nodesWithBlockScope = [NodeType_1.NodeType.ArrowFunctionExpression, NodeType_1.NodeType.FunctionDeclaration, NodeType_1.NodeType.FunctionExpression, NodeType_1.NodeType.MethodDefinition, NodeType_1.NodeType.Program]; -exports.NodeUtils = NodeUtils; - -/***/ }, -/* 11 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); var AbstractNodeTransformer = function AbstractNodeTransformer(options) { - _classCallCheck(this, AbstractNodeTransformer); + (0, _classCallCheck3.default)(this, AbstractNodeTransformer); this.options = options; }; -AbstractNodeTransformer = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], AbstractNodeTransformer); +AbstractNodeTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractNodeTransformer); exports.AbstractNodeTransformer = AbstractNodeTransformer; /***/ }, -/* 12 */ +/* 19 */ /***/ function(module, exports) { "use strict"; "use strict"; +var NodeObfuscatorsReplacers; +(function (NodeObfuscatorsReplacers) { + NodeObfuscatorsReplacers[NodeObfuscatorsReplacers["BooleanReplacer"] = 0] = "BooleanReplacer"; + NodeObfuscatorsReplacers[NodeObfuscatorsReplacers["IdentifierReplacer"] = 1] = "IdentifierReplacer"; + NodeObfuscatorsReplacers[NodeObfuscatorsReplacers["NumberLiteralReplacer"] = 2] = "NumberLiteralReplacer"; + NodeObfuscatorsReplacers[NodeObfuscatorsReplacers["StringLiteralReplacer"] = 3] = "StringLiteralReplacer"; +})(NodeObfuscatorsReplacers = exports.NodeObfuscatorsReplacers || (exports.NodeObfuscatorsReplacers = {})); + +/***/ }, +/* 20 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +var CustomNodes; (function (CustomNodes) { CustomNodes[CustomNodes["BinaryExpressionFunctionNode"] = 0] = "BinaryExpressionFunctionNode"; CustomNodes[CustomNodes["ControlFlowStorageCallNode"] = 1] = "ControlFlowStorageCallNode"; @@ -845,26 +977,10 @@ exports.AbstractNodeTransformer = AbstractNodeTransformer; CustomNodes[CustomNodes["StringArrayCallsWrapper"] = 10] = "StringArrayCallsWrapper"; CustomNodes[CustomNodes["StringArrayNode"] = 11] = "StringArrayNode"; CustomNodes[CustomNodes["StringArrayRotateFunctionNode"] = 12] = "StringArrayRotateFunctionNode"; -})(exports.CustomNodes || (exports.CustomNodes = {})); -var CustomNodes = exports.CustomNodes; +})(CustomNodes = exports.CustomNodes || (exports.CustomNodes = {})); /***/ }, -/* 13 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -(function (NodeObfuscatorsReplacers) { - NodeObfuscatorsReplacers[NodeObfuscatorsReplacers["BooleanReplacer"] = 0] = "BooleanReplacer"; - NodeObfuscatorsReplacers[NodeObfuscatorsReplacers["IdentifierReplacer"] = 1] = "IdentifierReplacer"; - NodeObfuscatorsReplacers[NodeObfuscatorsReplacers["NumberLiteralReplacer"] = 2] = "NumberLiteralReplacer"; - NodeObfuscatorsReplacers[NodeObfuscatorsReplacers["StringLiteralReplacer"] = 3] = "StringLiteralReplacer"; -})(exports.NodeObfuscatorsReplacers || (exports.NodeObfuscatorsReplacers = {})); -var NodeObfuscatorsReplacers = exports.NodeObfuscatorsReplacers; - -/***/ }, -/* 14 */ +/* 21 */ /***/ function(module, exports) { "use strict"; @@ -876,35 +992,53 @@ exports.ObfuscationEvents = { }; /***/ }, -/* 15 */ +/* 22 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/core-js/get-iterator"); + +/***/ }, +/* 23 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -__webpack_require__(121); +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +__webpack_require__(142); if (!global._babelPolyfill) { - __webpack_require__(113); + __webpack_require__(131); } -var InversifyContainerFacade_1 = __webpack_require__(41); -var JavaScriptObfuscatorCLI_1 = __webpack_require__(40); -var ServiceIdentifiers_1 = __webpack_require__(1); +var ServiceIdentifiers_1 = __webpack_require__(4); +var chance_1 = __webpack_require__(47); +var InversifyContainerFacade_1 = __webpack_require__(57); +var JavaScriptObfuscatorCLI_1 = __webpack_require__(56); +var RandomGeneratorUtils_1 = __webpack_require__(8); var JavaScriptObfuscator = function () { function JavaScriptObfuscator() { - _classCallCheck(this, JavaScriptObfuscator); + (0, _classCallCheck3.default)(this, JavaScriptObfuscator); } - _createClass(JavaScriptObfuscator, null, [{ + (0, _createClass3.default)(JavaScriptObfuscator, null, [{ key: "obfuscate", value: function obfuscate(sourceCode) { var inputOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var inversifyContainerFacade = new InversifyContainerFacade_1.InversifyContainerFacade(inputOptions); + var options = inversifyContainerFacade.get(ServiceIdentifiers_1.ServiceIdentifiers.IOptions); + if (options.seed !== 0) { + RandomGeneratorUtils_1.RandomGeneratorUtils.setRandomGenerator(new chance_1.Chance(options.seed)); + } var javaScriptObfuscator = inversifyContainerFacade.get(ServiceIdentifiers_1.ServiceIdentifiers.IJavaScriptObfuscator); return javaScriptObfuscator.obfuscate(sourceCode); } @@ -914,43 +1048,54 @@ var JavaScriptObfuscator = function () { new JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI(argv).run(); } }]); - return JavaScriptObfuscator; }(); exports.JavaScriptObfuscator = JavaScriptObfuscator; /***/ }, -/* 16 */ +/* 24 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getIterator2 = __webpack_require__(22); -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } +var _getIterator3 = _interopRequireDefault(_getIterator2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _toConsumableArray2 = __webpack_require__(36); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var RandomGeneratorUtils_1 = __webpack_require__(8); var NodeAppender = function () { function NodeAppender() { - _classCallCheck(this, NodeAppender); + (0, _classCallCheck3.default)(this, NodeAppender); } - _createClass(NodeAppender, null, [{ - key: 'appendNode', + (0, _createClass3.default)(NodeAppender, null, [{ + key: "appendNode", value: function appendNode(blockScopeNode, nodeBodyStatements) { if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { nodeBodyStatements = []; } nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); - blockScopeNode.body = [].concat(_toConsumableArray(blockScopeNode.body), _toConsumableArray(nodeBodyStatements)); + blockScopeNode.body = [].concat((0, _toConsumableArray3.default)(blockScopeNode.body), (0, _toConsumableArray3.default)(nodeBodyStatements)); } }, { - key: 'appendNodeToOptimalBlockScope', + key: "appendNodeToOptimalBlockScope", value: function appendNodeToOptimalBlockScope(blockScopeStackTraceData, blockScopeNode, nodeBodyStatements) { var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; @@ -963,13 +1108,13 @@ var NodeAppender = function () { NodeAppender.prependNode(targetBlockScope, nodeBodyStatements); } }, { - key: 'getOptimalBlockScope', + key: "getOptimalBlockScope", value: function getOptimalBlockScope(blockScopeTraceData, index) { var deep = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Infinity; var firstCall = blockScopeTraceData[index]; if (deep <= 0) { - throw new Error('Invalid `deep` argument value. Value should be bigger then 0.'); + throw new Error("Invalid `deep` argument value. Value should be bigger then 0."); } if (deep > 1 && firstCall.stackTrace.length) { return NodeAppender.getOptimalBlockScope(firstCall.stackTrace, 0, --deep); @@ -978,37 +1123,37 @@ var NodeAppender = function () { } } }, { - key: 'getRandomStackTraceIndex', + key: "getRandomStackTraceIndex", value: function getRandomStackTraceIndex(stackTraceRootLength) { return RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomInteger(0, Math.max(0, Math.round(stackTraceRootLength - 1))); } }, { - key: 'insertNodeAtIndex', + key: "insertNodeAtIndex", value: function insertNodeAtIndex(blockScopeNode, nodeBodyStatements, index) { if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { nodeBodyStatements = []; } nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); - blockScopeNode.body = [].concat(_toConsumableArray(blockScopeNode.body.slice(0, index)), _toConsumableArray(nodeBodyStatements), _toConsumableArray(blockScopeNode.body.slice(index))); + blockScopeNode.body = [].concat((0, _toConsumableArray3.default)(blockScopeNode.body.slice(0, index)), (0, _toConsumableArray3.default)(nodeBodyStatements), (0, _toConsumableArray3.default)(blockScopeNode.body.slice(index))); } }, { - key: 'prependNode', + key: "prependNode", value: function prependNode(blockScopeNode, nodeBodyStatements) { if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { nodeBodyStatements = []; } nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); - blockScopeNode.body = [].concat(_toConsumableArray(nodeBodyStatements), _toConsumableArray(blockScopeNode.body)); + blockScopeNode.body = [].concat((0, _toConsumableArray3.default)(nodeBodyStatements), (0, _toConsumableArray3.default)(blockScopeNode.body)); } }, { - key: 'parentizeBodyStatementsBeforeAppend', + key: "parentizeBodyStatementsBeforeAppend", value: function parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { - for (var _iterator = nodeBodyStatements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + for (var _iterator = (0, _getIterator3.default)(nodeBodyStatements), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var statement = _step.value; statement.parentNode = blockScopeNode; @@ -1031,64 +1176,46 @@ var NodeAppender = function () { return nodeBodyStatements; } }, { - key: 'validateBodyStatements', + key: "validateBodyStatements", value: function validateBodyStatements(nodeBodyStatements) { return nodeBodyStatements.every(function (statementNode) { return !!statementNode && statementNode.hasOwnProperty('type'); }); } }]); - return NodeAppender; }(); exports.NodeAppender = NodeAppender; /***/ }, -/* 17 */ -/***/ function(module, exports) { - -module.exports = require("escodegen"); - -/***/ }, -/* 18 */ +/* 25 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); var AbstractCustomNodeGroup = function () { function AbstractCustomNodeGroup(options) { - _classCallCheck(this, AbstractCustomNodeGroup); + (0, _classCallCheck3.default)(this, AbstractCustomNodeGroup); this.options = options; } - _createClass(AbstractCustomNodeGroup, [{ + (0, _createClass3.default)(AbstractCustomNodeGroup, [{ key: "getAppendEvent", value: function getAppendEvent() { return this.appendEvent; @@ -1108,14 +1235,25 @@ var AbstractCustomNodeGroup = function () { callback(customNode); } }]); - return AbstractCustomNodeGroup; }(); -AbstractCustomNodeGroup = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], AbstractCustomNodeGroup); +AbstractCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractCustomNodeGroup); exports.AbstractCustomNodeGroup = AbstractCustomNodeGroup; /***/ }, -/* 19 */ +/* 26 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/core-js/array/from"); + +/***/ }, +/* 27 */ +/***/ function(module, exports) { + +module.exports = require("escodegen"); + +/***/ }, +/* 28 */ /***/ function(module, exports) { "use strict"; @@ -1127,53 +1265,47 @@ exports.SourceMapMode = { }; /***/ }, -/* 20 */ +/* 29 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _classCallCheck2 = __webpack_require__(0); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); var AbstractReplacer = function AbstractReplacer(options) { - _classCallCheck(this, AbstractReplacer); + (0, _classCallCheck3.default)(this, AbstractReplacer); this.options = options; }; -AbstractReplacer = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], AbstractReplacer); +AbstractReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractReplacer); exports.AbstractReplacer = AbstractReplacer; /***/ }, -/* 21 */ +/* 30 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var SourceMapMode_1 = __webpack_require__(19); -exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ +var _freeze = __webpack_require__(44); + +var _freeze2 = _interopRequireDefault(_freeze); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var SourceMapMode_1 = __webpack_require__(28); +exports.NO_CUSTOM_NODES_PRESET = (0, _freeze2.default)({ compact: true, controlFlowFlattening: false, + controlFlowFlatteningThreshold: 0, debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: false, @@ -1193,7 +1325,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ }); /***/ }, -/* 22 */ +/* 31 */ /***/ function(module, exports) { "use strict"; @@ -1205,76 +1337,58 @@ exports.StringArrayEncoding = { }; /***/ }, -/* 23 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -(function (CustomNodeGroups) { - CustomNodeGroups[CustomNodeGroups["ConsoleOutputCustomNodeGroup"] = 0] = "ConsoleOutputCustomNodeGroup"; - CustomNodeGroups[CustomNodeGroups["DebugProtectionCustomNodeGroup"] = 1] = "DebugProtectionCustomNodeGroup"; - CustomNodeGroups[CustomNodeGroups["DomainLockCustomNodeGroup"] = 2] = "DomainLockCustomNodeGroup"; - CustomNodeGroups[CustomNodeGroups["SelfDefendingCustomNodeGroup"] = 3] = "SelfDefendingCustomNodeGroup"; - CustomNodeGroups[CustomNodeGroups["StringArrayCustomNodeGroup"] = 4] = "StringArrayCustomNodeGroup"; -})(exports.CustomNodeGroups || (exports.CustomNodeGroups = {})); -var CustomNodeGroups = exports.CustomNodeGroups; - -/***/ }, -/* 24 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _classCallCheck2 = __webpack_require__(0); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var inversify_1 = __webpack_require__(0); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); var AbstractCalleeDataExtractor = function AbstractCalleeDataExtractor() { - _classCallCheck(this, AbstractCalleeDataExtractor); + (0, _classCallCheck3.default)(this, AbstractCalleeDataExtractor); }; -AbstractCalleeDataExtractor = __decorate([inversify_1.injectable(), __metadata('design:paramtypes', [])], AbstractCalleeDataExtractor); +AbstractCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], AbstractCalleeDataExtractor); exports.AbstractCalleeDataExtractor = AbstractCalleeDataExtractor; /***/ }, -/* 25 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var RandomGeneratorUtils_1 = __webpack_require__(2); -var Utils_1 = __webpack_require__(4); +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var RandomGeneratorUtils_1 = __webpack_require__(8); +var Utils_1 = __webpack_require__(11); var CryptUtils = function () { function CryptUtils() { - _classCallCheck(this, CryptUtils); + (0, _classCallCheck3.default)(this, CryptUtils); } - _createClass(CryptUtils, null, [{ - key: 'btoa', + (0, _createClass3.default)(CryptUtils, null, [{ + key: "btoa", value: function btoa(string) { var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; var output = ''; string = encodeURIComponent(string).replace(/%([0-9A-F]{2})/g, function (match, p1) { - return String.fromCharCode(parseInt('' + Utils_1.Utils.hexadecimalPrefix + p1)); + return String.fromCharCode(parseInt("" + Utils_1.Utils.hexadecimalPrefix + p1)); }); for (var block, charCode, idx = 0, map = chars; string.charAt(idx | 0) || (map = '=', idx % 1); output += map.charAt(63 & block >> 8 - idx % 1 * 8)) { charCode = string.charCodeAt(idx += 3 / 4); @@ -1286,7 +1400,7 @@ var CryptUtils = function () { return output; } }, { - key: 'hideString', + key: "hideString", value: function hideString(str, length) { var escapeRegExp = function escapeRegExp(s) { return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); @@ -1304,18 +1418,18 @@ var CryptUtils = function () { } return result; }; - var randomString = RandomGeneratorUtils_1.RandomGeneratorUtils.randomGenerator.string({ + var randomString = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().string({ length: length, pool: RandomGeneratorUtils_1.RandomGeneratorUtils.randomGeneratorPool }); var randomStringDiff = randomString.replace(new RegExp('[' + escapeRegExp(str) + ']', 'g'), ''); var randomStringDiffArray = randomStringDiff.split(''); - RandomGeneratorUtils_1.RandomGeneratorUtils.randomGenerator.shuffle(randomStringDiffArray); + RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().shuffle(randomStringDiffArray); randomStringDiff = randomStringDiffArray.join(''); return [randomMerge(str, randomStringDiff), randomStringDiff]; } }, { - key: 'rc4', + key: "rc4", value: function rc4(string, key) { var s = [], j = 0, @@ -1343,101 +1457,31 @@ var CryptUtils = function () { return result; } }]); - return CryptUtils; }(); exports.CryptUtils = CryptUtils; /***/ }, -/* 26 */ -/***/ function(module, exports, __webpack_require__) { +/* 34 */ +/***/ function(module, exports) { -"use strict"; -"use strict"; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -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 __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var Initializable_1 = __webpack_require__(3); -var StringArrayTemplate_1 = __webpack_require__(110); -var AbstractCustomNode_1 = __webpack_require__(7); -var StringArrayNode = function (_AbstractCustomNode_) { - _inherits(StringArrayNode, _AbstractCustomNode_); - - function StringArrayNode(options) { - _classCallCheck(this, StringArrayNode); - - return _possibleConstructorReturn(this, (StringArrayNode.__proto__ || Object.getPrototypeOf(StringArrayNode)).call(this, options)); - } - - _createClass(StringArrayNode, [{ - key: "initialize", - value: function initialize(stringArray, stringArrayName, stringArrayRotateValue) { - this.stringArray = stringArray; - this.stringArrayName = stringArrayName; - this.stringArrayRotateValue = stringArrayRotateValue; - } - }, { - key: "getCode", - value: function getCode() { - return format(StringArrayTemplate_1.StringArrayTemplate(), { - stringArrayName: this.stringArrayName, - stringArray: this.stringArray.toString() - }); - } - }, { - key: "getNodeData", - value: function getNodeData() { - return this.stringArray; - } - }, { - key: "getNode", - value: function getNode() { - this.stringArray.rotateArray(this.stringArrayRotateValue); - return _get(StringArrayNode.prototype.__proto__ || Object.getPrototypeOf(StringArrayNode.prototype), "getNode", this).call(this); - } - }]); - - return StringArrayNode; -}(AbstractCustomNode_1.AbstractCustomNode); -StringArrayNode.ARRAY_RANDOM_LENGTH = 4; -__decorate([Initializable_1.initializable(), __metadata('design:type', Object)], StringArrayNode.prototype, "stringArray", void 0); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], StringArrayNode.prototype, "stringArrayName", void 0); -__decorate([Initializable_1.initializable(), __metadata('design:type', Number)], StringArrayNode.prototype, "stringArrayRotateValue", void 0); -StringArrayNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], StringArrayNode); -exports.StringArrayNode = StringArrayNode; +module.exports = require("babel-runtime/core-js/object/assign"); /***/ }, -/* 27 */ +/* 35 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/helpers/slicedToArray"); + +/***/ }, +/* 36 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/helpers/toConsumableArray"); + +/***/ }, +/* 37 */ /***/ function(module, exports) { "use strict"; @@ -1501,21 +1545,37 @@ exports.JSFuck = { }; /***/ }, -/* 28 */ +/* 38 */ /***/ function(module, exports) { "use strict"; "use strict"; +var CalleeDataExtractors; (function (CalleeDataExtractors) { CalleeDataExtractors[CalleeDataExtractors["FunctionDeclarationCalleeDataExtractor"] = 0] = "FunctionDeclarationCalleeDataExtractor"; CalleeDataExtractors[CalleeDataExtractors["FunctionExpressionCalleeDataExtractor"] = 1] = "FunctionExpressionCalleeDataExtractor"; CalleeDataExtractors[CalleeDataExtractors["ObjectExpressionCalleeDataExtractor"] = 2] = "ObjectExpressionCalleeDataExtractor"; -})(exports.CalleeDataExtractors || (exports.CalleeDataExtractors = {})); -var CalleeDataExtractors = exports.CalleeDataExtractors; +})(CalleeDataExtractors = exports.CalleeDataExtractors || (exports.CalleeDataExtractors = {})); /***/ }, -/* 29 */ +/* 39 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +var CustomNodeGroups; +(function (CustomNodeGroups) { + CustomNodeGroups[CustomNodeGroups["ConsoleOutputCustomNodeGroup"] = 0] = "ConsoleOutputCustomNodeGroup"; + CustomNodeGroups[CustomNodeGroups["DebugProtectionCustomNodeGroup"] = 1] = "DebugProtectionCustomNodeGroup"; + CustomNodeGroups[CustomNodeGroups["DomainLockCustomNodeGroup"] = 2] = "DomainLockCustomNodeGroup"; + CustomNodeGroups[CustomNodeGroups["SelfDefendingCustomNodeGroup"] = 3] = "SelfDefendingCustomNodeGroup"; + CustomNodeGroups[CustomNodeGroups["StringArrayCustomNodeGroup"] = 4] = "StringArrayCustomNodeGroup"; +})(CustomNodeGroups = exports.CustomNodeGroups || (exports.CustomNodeGroups = {})); + +/***/ }, +/* 40 */ /***/ function(module, exports) { "use strict"; @@ -1527,12 +1587,13 @@ var NodeControlFlowReplacers; })(NodeControlFlowReplacers = exports.NodeControlFlowReplacers || (exports.NodeControlFlowReplacers = {})); /***/ }, -/* 30 */ +/* 41 */ /***/ function(module, exports) { "use strict"; "use strict"; +var NodeTransformers; (function (NodeTransformers) { NodeTransformers[NodeTransformers["FunctionControlFlowTransformer"] = 0] = "FunctionControlFlowTransformer"; NodeTransformers[NodeTransformers["CatchClauseObfuscator"] = 1] = "CatchClauseObfuscator"; @@ -1544,20 +1605,26 @@ var NodeControlFlowReplacers; NodeTransformers[NodeTransformers["MethodDefinitionObfuscator"] = 7] = "MethodDefinitionObfuscator"; NodeTransformers[NodeTransformers["ObjectExpressionObfuscator"] = 8] = "ObjectExpressionObfuscator"; NodeTransformers[NodeTransformers["VariableDeclarationObfuscator"] = 9] = "VariableDeclarationObfuscator"; -})(exports.NodeTransformers || (exports.NodeTransformers = {})); -var NodeTransformers = exports.NodeTransformers; +})(NodeTransformers = exports.NodeTransformers || (exports.NodeTransformers = {})); /***/ }, -/* 31 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var SourceMapMode_1 = __webpack_require__(19); -exports.DEFAULT_PRESET = Object.freeze({ +var _freeze = __webpack_require__(44); + +var _freeze2 = _interopRequireDefault(_freeze); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var SourceMapMode_1 = __webpack_require__(28); +exports.DEFAULT_PRESET = (0, _freeze2.default)({ compact: true, controlFlowFlattening: false, + controlFlowFlatteningThreshold: 0.75, debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: true, @@ -1577,38 +1644,45 @@ exports.DEFAULT_PRESET = Object.freeze({ }); /***/ }, -/* 32 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _toConsumableArray2 = __webpack_require__(36); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _map = __webpack_require__(12); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var inversify_1 = __webpack_require__(0); -var Initializable_1 = __webpack_require__(3); -var Utils_1 = __webpack_require__(4); +var _map2 = _interopRequireDefault(_map); + +var _from = __webpack_require__(26); + +var _from2 = _interopRequireDefault(_from); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var Initializable_1 = __webpack_require__(9); +var RandomGeneratorUtils_1 = __webpack_require__(8); +var Utils_1 = __webpack_require__(11); var MapStorage = function () { function MapStorage() { - _classCallCheck(this, MapStorage); + (0, _classCallCheck3.default)(this, MapStorage); } - _createClass(MapStorage, [{ + (0, _createClass3.default)(MapStorage, [{ key: "get", value: function get(key) { var value = this.storage.get(key); @@ -1625,17 +1699,33 @@ var MapStorage = function () { }, { key: "getLength", value: function getLength() { - return Array.from(this.storage).length; + return (0, _from2.default)(this.storage).length; } }, { key: "getStorage", value: function getStorage() { return this.storage; } + }, { + key: "getStorageId", + value: function getStorageId() { + return this.storageId; + } }, { key: "initialize", value: function initialize() { - this.storage = new Map(); + this.storage = new _map2.default(); + this.storageId = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomString(6); + } + }, { + key: "mergeWith", + value: function mergeWith(storage) { + var mergeId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + this.storage = new _map2.default([].concat((0, _toConsumableArray3.default)(this.storage), (0, _toConsumableArray3.default)(storage.getStorage()))); + if (mergeId) { + this.storageId = storage.getStorageId(); + } } }, { key: "set", @@ -1643,81 +1733,90 @@ var MapStorage = function () { this.storage.set(key, value); } }]); - return MapStorage; }(); -__decorate([Initializable_1.initializable(), __metadata('design:type', Map)], MapStorage.prototype, "storage", void 0); -MapStorage = __decorate([inversify_1.injectable(), __metadata('design:paramtypes', [])], MapStorage); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], MapStorage.prototype, "storageId", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", _map2.default)], MapStorage.prototype, "storage", void 0); +MapStorage = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], MapStorage); exports.MapStorage = MapStorage; /***/ }, -/* 33 */ +/* 44 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/core-js/object/freeze"); + +/***/ }, +/* 45 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/core-js/object/keys"); + +/***/ }, +/* 46 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/helpers/get"); + +/***/ }, +/* 47 */ +/***/ function(module, exports) { + +module.exports = require("chance"); + +/***/ }, +/* 48 */ /***/ function(module, exports) { module.exports = require("esprima"); /***/ }, -/* 34 */ +/* 49 */ +/***/ function(module, exports) { + +module.exports = require("lodash"); + +/***/ }, +/* 50 */ /***/ function(module, exports) { module.exports = require("path"); /***/ }, -/* 35 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _createClass2 = __webpack_require__(1); -var __assign = undefined && undefined.__assign || Object.assign || function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) { - if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - } - return t; -}; -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var esprima = __webpack_require__(33); -var escodegen = __webpack_require__(17); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var esprima = __webpack_require__(48); +var escodegen = __webpack_require__(27); var JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal_1 = function () { function JavaScriptObfuscatorInternal(obfuscator, sourceMapCorrector, options) { - _classCallCheck(this, JavaScriptObfuscatorInternal); + (0, _classCallCheck3.default)(this, JavaScriptObfuscatorInternal); this.obfuscator = obfuscator; this.sourceMapCorrector = sourceMapCorrector; this.options = options; } - _createClass(JavaScriptObfuscatorInternal, [{ + (0, _createClass3.default)(JavaScriptObfuscatorInternal, [{ key: "generateCode", value: function generateCode(sourceCode, astTree) { - var escodegenParams = __assign({}, JavaScriptObfuscatorInternal_1.escodegenParams); + var escodegenParams = tslib_1.__assign({}, JavaScriptObfuscatorInternal_1.escodegenParams); if (this.options.sourceMap) { escodegenParams.sourceMap = 'sourceMap'; escodegenParams.sourceContent = sourceCode; @@ -1737,16 +1836,12 @@ var JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal_1 = function () }, { key: "obfuscate", value: function obfuscate(sourceCode) { - if (this.options.seed !== 0) { - RandomGeneratorUtils_1.RandomGeneratorUtils.setRandomGeneratorSeed(this.options.seed); - } var astTree = esprima.parse(sourceCode, JavaScriptObfuscatorInternal_1.esprimaParams); var obfuscatedAstTree = this.obfuscator.obfuscateAstTree(astTree); var generatorOutput = this.generateCode(sourceCode, obfuscatedAstTree); return this.getObfuscationResult(generatorOutput); } }]); - return JavaScriptObfuscatorInternal; }(); JavaScriptObfuscatorInternal.escodegenParams = { @@ -1756,42 +1851,36 @@ JavaScriptObfuscatorInternal.escodegenParams = { JavaScriptObfuscatorInternal.esprimaParams = { loc: true }; -JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscator)), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ISourceMapCorrector)), __param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata("design:paramtypes", [Object, Object, Object])], JavaScriptObfuscatorInternal); +JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ISourceMapCorrector)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object, Object])], JavaScriptObfuscatorInternal); exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; var JavaScriptObfuscatorInternal_1; /***/ }, -/* 36 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var inversify_1 = __webpack_require__(0); -var Initializable_1 = __webpack_require__(3); +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var Initializable_1 = __webpack_require__(9); var ObfuscationResult = function () { function ObfuscationResult() { - _classCallCheck(this, ObfuscationResult); + (0, _classCallCheck3.default)(this, ObfuscationResult); } - _createClass(ObfuscationResult, [{ + (0, _createClass3.default)(ObfuscationResult, [{ key: "initialize", value: function initialize(obfuscatedCode, sourceMap) { this.obfuscatedCode = obfuscatedCode; @@ -1813,57 +1902,51 @@ var ObfuscationResult = function () { return this.obfuscatedCode; } }]); - return ObfuscationResult; }(); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], ObfuscationResult.prototype, "obfuscatedCode", void 0); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], ObfuscationResult.prototype, "sourceMap", void 0); -ObfuscationResult = __decorate([inversify_1.injectable(), __metadata('design:paramtypes', [])], ObfuscationResult); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ObfuscationResult.prototype, "obfuscatedCode", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ObfuscationResult.prototype, "sourceMap", void 0); +ObfuscationResult = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], ObfuscationResult); exports.ObfuscationResult = ObfuscationResult; /***/ }, -/* 37 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _map = __webpack_require__(12); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _map2 = _interopRequireDefault(_map); -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +var _defineProperty2 = __webpack_require__(135); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _defineProperty3 = _interopRequireDefault(_defineProperty2); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(6); -var NodeTransformers_1 = __webpack_require__(30); -var NodeType_1 = __webpack_require__(9); -var ObfuscationEvents_1 = __webpack_require__(14); -var VisitorDirection_1 = __webpack_require__(65); -var Node_1 = __webpack_require__(5); -var NodeUtils_1 = __webpack_require__(10); -var Obfuscator_1 = function () { +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var estraverse = __webpack_require__(13); +var NodeTransformers_1 = __webpack_require__(41); +var NodeType_1 = __webpack_require__(17); +var ObfuscationEvents_1 = __webpack_require__(21); +var VisitorDirection_1 = __webpack_require__(82); +var Node_1 = __webpack_require__(10); +var NodeUtils_1 = __webpack_require__(15); +var Obfuscator = Obfuscator_1 = function () { function Obfuscator(stackTraceAnalyzer, obfuscationEventEmitter, customNodeGroupStorage, nodeTransformersFactory, options) { - _classCallCheck(this, Obfuscator); + (0, _classCallCheck3.default)(this, Obfuscator); this.stackTraceAnalyzer = stackTraceAnalyzer; this.obfuscationEventEmitter = obfuscationEventEmitter; @@ -1872,7 +1955,7 @@ var Obfuscator_1 = function () { this.options = options; } - _createClass(Obfuscator, [{ + (0, _createClass3.default)(Obfuscator, [{ key: "obfuscateAstTree", value: function obfuscateAstTree(astTree) { var _this = this; @@ -1897,7 +1980,7 @@ var Obfuscator_1 = function () { }, { key: "transformAstTree", value: function transformAstTree(astTree, direction, nodeTransformersConcreteFactory) { - estraverse.traverse(astTree, _defineProperty({}, direction, function (node, parentNode) { + estraverse.traverse(astTree, (0, _defineProperty3.default)({}, direction, function (node, parentNode) { var nodeTransformers = nodeTransformersConcreteFactory(node.type); nodeTransformers.forEach(function (nodeTransformer) { nodeTransformer.transformNode(node, parentNode); @@ -1905,57 +1988,45 @@ var Obfuscator_1 = function () { })); } }]); - return Obfuscator; }(); -var Obfuscator = Obfuscator_1; -Obfuscator.nodeControlFlowTransformersMap = new Map([[NodeType_1.NodeType.FunctionDeclaration, [NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer]], [NodeType_1.NodeType.FunctionExpression, [NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer]]]); -Obfuscator.nodeObfuscatorsMap = new Map([[NodeType_1.NodeType.ArrowFunctionExpression, [NodeTransformers_1.NodeTransformers.FunctionObfuscator]], [NodeType_1.NodeType.ClassDeclaration, [NodeTransformers_1.NodeTransformers.FunctionDeclarationObfuscator]], [NodeType_1.NodeType.CatchClause, [NodeTransformers_1.NodeTransformers.CatchClauseObfuscator]], [NodeType_1.NodeType.FunctionDeclaration, [NodeTransformers_1.NodeTransformers.FunctionDeclarationObfuscator, NodeTransformers_1.NodeTransformers.FunctionObfuscator]], [NodeType_1.NodeType.FunctionExpression, [NodeTransformers_1.NodeTransformers.FunctionObfuscator]], [NodeType_1.NodeType.MemberExpression, [NodeTransformers_1.NodeTransformers.MemberExpressionObfuscator]], [NodeType_1.NodeType.MethodDefinition, [NodeTransformers_1.NodeTransformers.MethodDefinitionObfuscator]], [NodeType_1.NodeType.ObjectExpression, [NodeTransformers_1.NodeTransformers.ObjectExpressionObfuscator]], [NodeType_1.NodeType.VariableDeclaration, [NodeTransformers_1.NodeTransformers.VariableDeclarationObfuscator]], [NodeType_1.NodeType.LabeledStatement, [NodeTransformers_1.NodeTransformers.LabeledStatementObfuscator]], [NodeType_1.NodeType.Literal, [NodeTransformers_1.NodeTransformers.LiteralObfuscator]]]); -Obfuscator = Obfuscator_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IStackTraceAnalyzer)), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), __param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(4, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object, Object, Function, Object])], Obfuscator); +Obfuscator.nodeControlFlowTransformersMap = new _map2.default([[NodeType_1.NodeType.FunctionDeclaration, [NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer]], [NodeType_1.NodeType.FunctionExpression, [NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer]]]); +Obfuscator.nodeObfuscatorsMap = new _map2.default([[NodeType_1.NodeType.ArrowFunctionExpression, [NodeTransformers_1.NodeTransformers.FunctionObfuscator]], [NodeType_1.NodeType.ClassDeclaration, [NodeTransformers_1.NodeTransformers.FunctionDeclarationObfuscator]], [NodeType_1.NodeType.CatchClause, [NodeTransformers_1.NodeTransformers.CatchClauseObfuscator]], [NodeType_1.NodeType.FunctionDeclaration, [NodeTransformers_1.NodeTransformers.FunctionDeclarationObfuscator, NodeTransformers_1.NodeTransformers.FunctionObfuscator]], [NodeType_1.NodeType.FunctionExpression, [NodeTransformers_1.NodeTransformers.FunctionObfuscator]], [NodeType_1.NodeType.MemberExpression, [NodeTransformers_1.NodeTransformers.MemberExpressionObfuscator]], [NodeType_1.NodeType.MethodDefinition, [NodeTransformers_1.NodeTransformers.MethodDefinitionObfuscator]], [NodeType_1.NodeType.ObjectExpression, [NodeTransformers_1.NodeTransformers.ObjectExpressionObfuscator]], [NodeType_1.NodeType.VariableDeclaration, [NodeTransformers_1.NodeTransformers.VariableDeclarationObfuscator]], [NodeType_1.NodeType.LabeledStatement, [NodeTransformers_1.NodeTransformers.LabeledStatementObfuscator]], [NodeType_1.NodeType.Literal, [NodeTransformers_1.NodeTransformers.LiteralObfuscator]]]); +Obfuscator = Obfuscator_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IStackTraceAnalyzer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(4, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object, Object, Function, Object])], Obfuscator); exports.Obfuscator = Obfuscator; +var Obfuscator_1; /***/ }, -/* 38 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var SourceMapMode_1 = __webpack_require__(19); -var CryptUtils_1 = __webpack_require__(25); +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var SourceMapMode_1 = __webpack_require__(28); +var CryptUtils_1 = __webpack_require__(33); var SourceMapCorrector = function () { function SourceMapCorrector(obfuscationResultFactory, options) { - _classCallCheck(this, SourceMapCorrector); + (0, _classCallCheck3.default)(this, SourceMapCorrector); this.obfuscationResultFactory = obfuscationResultFactory; this.options = options; } - _createClass(SourceMapCorrector, [{ + (0, _createClass3.default)(SourceMapCorrector, [{ key: "correct", value: function correct(obfuscatedCode, sourceMap) { return this.obfuscationResultFactory(this.correctObfuscatedCode(obfuscatedCode, sourceMap), sourceMap); @@ -1983,65 +2054,69 @@ var SourceMapCorrector = function () { return obfuscatedCode + "\n" + sourceMappingUrl; } }]); - return SourceMapCorrector; }(); -SourceMapCorrector = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object])], SourceMapCorrector); +SourceMapCorrector = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], SourceMapCorrector); exports.SourceMapCorrector = SourceMapCorrector; /***/ }, -/* 39 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var fs = __webpack_require__(118); -var mkdirp = __webpack_require__(120); -var path = __webpack_require__(34); -var Utils_1 = __webpack_require__(4); +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var fs = __webpack_require__(140); +var mkdirp = __webpack_require__(141); +var path = __webpack_require__(50); var CLIUtils = function () { function CLIUtils() { - _classCallCheck(this, CLIUtils); + (0, _classCallCheck3.default)(this, CLIUtils); } - _createClass(CLIUtils, null, [{ - key: 'getOutputCodePath', + (0, _createClass3.default)(CLIUtils, null, [{ + key: "getOutputCodePath", value: function getOutputCodePath(outputPath, inputPath) { if (outputPath) { return outputPath; } return inputPath.split('.').map(function (value, index) { - return index === 0 ? value + '-obfuscated' : value; + return index === 0 ? value + "-obfuscated" : value; }).join('.'); } }, { - key: 'getOutputSourceMapPath', + key: "getOutputSourceMapPath", value: function getOutputSourceMapPath(outputCodePath) { var sourceMapFileName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; if (sourceMapFileName) { - outputCodePath = outputCodePath.substr(0, outputCodePath.lastIndexOf('/')) + '/' + sourceMapFileName; + outputCodePath = outputCodePath.substr(0, outputCodePath.lastIndexOf('/')) + "/" + sourceMapFileName; } if (!/\.js\.map$/.test(outputCodePath)) { - outputCodePath = outputCodePath.split('.')[0] + '.js.map'; + outputCodePath = outputCodePath.split('.')[0] + ".js.map"; } else if (/\.js$/.test(outputCodePath)) { outputCodePath += '.map'; } return outputCodePath; } }, { - key: 'getPackageConfig', + key: "getPackageConfig", value: function getPackageConfig() { return JSON.parse(fs.readFileSync(path.join(path.dirname(fs.realpathSync(process.argv[1])), '../package.json'), CLIUtils.encoding)); } }, { - key: 'isFilePath', + key: "isFilePath", value: function isFilePath(filePath) { try { return fs.statSync(filePath).isFile(); @@ -2050,22 +2125,22 @@ var CLIUtils = function () { } } }, { - key: 'readFile', + key: "readFile", value: function readFile(inputPath) { return fs.readFileSync(inputPath, CLIUtils.encoding); } }, { - key: 'validateInputPath', + key: "validateInputPath", value: function validateInputPath(inputPath) { if (!CLIUtils.isFilePath(inputPath)) { - throw new ReferenceError('Given input path must be a valid file path'); + throw new ReferenceError("Given input path must be a valid file path"); } - if (!Utils_1.Utils.arrayContains(CLIUtils.availableInputExtensions, path.extname(inputPath))) { - throw new ReferenceError('Input file must have .js extension'); + if (!CLIUtils.availableInputExtensions.includes(path.extname(inputPath))) { + throw new ReferenceError("Input file must have .js extension"); } } }, { - key: 'writeFile', + key: "writeFile", value: function writeFile(outputPath, data) { mkdirp.sync(path.dirname(outputPath)); fs.writeFileSync(outputPath, data, { @@ -2073,7 +2148,6 @@ var CLIUtils = function () { }); } }]); - return CLIUtils; }(); @@ -2082,48 +2156,49 @@ CLIUtils.encoding = 'utf8'; exports.CLIUtils = CLIUtils; /***/ }, -/* 40 */ +/* 56 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _keys = __webpack_require__(45); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _keys2 = _interopRequireDefault(_keys); -var __assign = undefined && undefined.__assign || Object.assign || function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) { - if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - } - return t; -}; -var commander = __webpack_require__(116); -var path = __webpack_require__(34); -var SourceMapMode_1 = __webpack_require__(19); -var StringArrayEncoding_1 = __webpack_require__(22); -var DefaultPreset_1 = __webpack_require__(31); -var CLIUtils_1 = __webpack_require__(39); -var JavaScriptObfuscator_1 = __webpack_require__(15); -var Utils_1 = __webpack_require__(4); +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var commander = __webpack_require__(138); +var path = __webpack_require__(50); +var SourceMapMode_1 = __webpack_require__(28); +var StringArrayEncoding_1 = __webpack_require__(31); +var Default_1 = __webpack_require__(42); +var CLIUtils_1 = __webpack_require__(55); +var JavaScriptObfuscator_1 = __webpack_require__(23); var JavaScriptObfuscatorCLI = function () { function JavaScriptObfuscatorCLI(argv) { - _classCallCheck(this, JavaScriptObfuscatorCLI); + (0, _classCallCheck3.default)(this, JavaScriptObfuscatorCLI); this.data = ''; this.rawArguments = argv; this.arguments = this.rawArguments.slice(2); } - _createClass(JavaScriptObfuscatorCLI, [{ + (0, _createClass3.default)(JavaScriptObfuscatorCLI, [{ key: "run", value: function run() { this.configureCommands(); - if (!this.arguments.length || Utils_1.Utils.arrayContains(this.arguments, '--help')) { + if (!this.arguments.length || this.arguments.includes('--help')) { this.commands.outputHelp(); return; } @@ -2136,22 +2211,22 @@ var JavaScriptObfuscatorCLI = function () { key: "buildOptions", value: function buildOptions() { var inputOptions = {}; - var availableOptions = Object.keys(DefaultPreset_1.DEFAULT_PRESET); + var availableOptions = (0, _keys2.default)(Default_1.DEFAULT_PRESET); for (var option in this.commands) { if (!this.commands.hasOwnProperty(option)) { continue; } - if (!Utils_1.Utils.arrayContains(availableOptions, option)) { + if (!availableOptions.includes(option)) { continue; } inputOptions[option] = this.commands[option]; } - return __assign({}, DefaultPreset_1.DEFAULT_PRESET, inputOptions); + return tslib_1.__assign({}, Default_1.DEFAULT_PRESET, inputOptions); } }, { key: "configureCommands", value: function configureCommands() { - this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--controlFlowFlattening ', 'Enables control flow flattening', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { + this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--controlFlowFlattening ', 'Enables control flow flattening', JavaScriptObfuscatorCLI.parseBoolean).option('--controlFlowFlatteningThreshold ', 'The probability that the control flow flattening transformation will be applied to the node', parseFloat).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); }).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); @@ -2209,7 +2284,7 @@ var JavaScriptObfuscatorCLI = function () { }, { key: "parseSourceMapMode", value: function parseSourceMapMode(value) { - var availableMode = Object.keys(SourceMapMode_1.SourceMapMode).some(function (key) { + var availableMode = (0, _keys2.default)(SourceMapMode_1.SourceMapMode).some(function (key) { return SourceMapMode_1.SourceMapMode[key] === value; }); if (!availableMode) { @@ -2232,41 +2307,46 @@ var JavaScriptObfuscatorCLI = function () { } } }]); - return JavaScriptObfuscatorCLI; }(); exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; /***/ }, -/* 41 */ +/* 57 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var CustomNodesModule_1 = __webpack_require__(42); -var NodeControlFlowTransformersModule_1 = __webpack_require__(43); -var NodeObfuscatorsModule_1 = __webpack_require__(44); -var NodeTransformersModule_1 = __webpack_require__(45); -var StackTraceAnalyzerModule_1 = __webpack_require__(46); -var StoragesModule_1 = __webpack_require__(47); -var JavaScriptObfuscatorInternal_1 = __webpack_require__(35); -var ObfuscationEventEmitter_1 = __webpack_require__(66); -var ObfuscationResult_1 = __webpack_require__(36); -var Obfuscator_1 = __webpack_require__(37); -var Options_1 = __webpack_require__(83); -var SourceMapCorrector_1 = __webpack_require__(38); +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var CustomNodesModule_1 = __webpack_require__(58); +var NodeControlFlowTransformersModule_1 = __webpack_require__(59); +var NodeObfuscatorsModule_1 = __webpack_require__(60); +var NodeTransformersModule_1 = __webpack_require__(61); +var StackTraceAnalyzerModule_1 = __webpack_require__(62); +var StoragesModule_1 = __webpack_require__(63); +var JavaScriptObfuscatorInternal_1 = __webpack_require__(51); +var ObfuscationEventEmitter_1 = __webpack_require__(83); +var ObfuscationResult_1 = __webpack_require__(52); +var Obfuscator_1 = __webpack_require__(53); +var Options_1 = __webpack_require__(100); +var SourceMapCorrector_1 = __webpack_require__(54); var InversifyContainerFacade = function () { function InversifyContainerFacade(options) { - _classCallCheck(this, InversifyContainerFacade); + (0, _classCallCheck3.default)(this, InversifyContainerFacade); this.container = new inversify_1.Container(); this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.IOptions).toDynamicValue(function () { @@ -2292,7 +2372,7 @@ var InversifyContainerFacade = function () { this.container.load(NodeObfuscatorsModule_1.nodeObfuscatorsModule); } - _createClass(InversifyContainerFacade, [{ + (0, _createClass3.default)(InversifyContainerFacade, [{ key: "get", value: function get(serviceIdentifier) { return this.container.get(serviceIdentifier); @@ -2303,41 +2383,40 @@ var InversifyContainerFacade = function () { return this.container.getNamed(serviceIdentifier, named); } }]); - return InversifyContainerFacade; }(); exports.InversifyContainerFacade = InversifyContainerFacade; /***/ }, -/* 42 */ +/* 58 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var CustomNodes_1 = __webpack_require__(12); -var CustomNodeGroups_1 = __webpack_require__(23); -var ConsoleOutputCustomNodeGroup_1 = __webpack_require__(49); -var DebugProtectionCustomNodeGroup_1 = __webpack_require__(56); -var DomainLockCustomNodeGroup_1 = __webpack_require__(58); -var SelfDefendingCustomNodeGroup_1 = __webpack_require__(61); -var StringArrayCustomNodeGroup_1 = __webpack_require__(64); -var BinaryExpressionFunctionNode_1 = __webpack_require__(50); -var ControlFlowStorageCallNode_1 = __webpack_require__(51); -var ControlFlowStorageNode_1 = __webpack_require__(52); -var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(48); -var DebugProtectionFunctionCallNode_1 = __webpack_require__(53); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(54); -var DebugProtectionFunctionNode_1 = __webpack_require__(55); -var DomainLockNode_1 = __webpack_require__(57); -var NodeCallsControllerFunctionNode_1 = __webpack_require__(59); -var SelfDefendingUnicodeNode_1 = __webpack_require__(60); -var StringArrayCallsWrapper_1 = __webpack_require__(62); -var StringArrayNode_1 = __webpack_require__(26); -var StringArrayRotateFunctionNode_1 = __webpack_require__(63); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var CustomNodes_1 = __webpack_require__(20); +var CustomNodeGroups_1 = __webpack_require__(39); +var ConsoleOutputCustomNodeGroup_1 = __webpack_require__(65); +var DebugProtectionCustomNodeGroup_1 = __webpack_require__(72); +var DomainLockCustomNodeGroup_1 = __webpack_require__(74); +var SelfDefendingCustomNodeGroup_1 = __webpack_require__(77); +var StringArrayCustomNodeGroup_1 = __webpack_require__(81); +var BinaryExpressionFunctionNode_1 = __webpack_require__(66); +var ControlFlowStorageCallNode_1 = __webpack_require__(67); +var ControlFlowStorageNode_1 = __webpack_require__(68); +var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(64); +var DebugProtectionFunctionCallNode_1 = __webpack_require__(69); +var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(70); +var DebugProtectionFunctionNode_1 = __webpack_require__(71); +var DomainLockNode_1 = __webpack_require__(73); +var NodeCallsControllerFunctionNode_1 = __webpack_require__(75); +var SelfDefendingUnicodeNode_1 = __webpack_require__(76); +var StringArrayCallsWrapper_1 = __webpack_require__(78); +var StringArrayNode_1 = __webpack_require__(79); +var StringArrayRotateFunctionNode_1 = __webpack_require__(80); exports.customNodesModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(BinaryExpressionFunctionNode_1.BinaryExpressionFunctionNode).whenTargetNamed(CustomNodes_1.CustomNodes.BinaryExpressionFunctionNode); bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(ControlFlowStorageCallNode_1.ControlFlowStorageCallNode).whenTargetNamed(CustomNodes_1.CustomNodes.ControlFlowStorageCallNode); @@ -2370,20 +2449,26 @@ exports.customNodesModule = new inversify_1.ContainerModule(function (bind) { }); /***/ }, -/* 43 */ +/* 59 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var NodeControlFlowReplacers_1 = __webpack_require__(29); -var BinaryExpressionControlFlowReplacer_1 = __webpack_require__(69); +var _map = __webpack_require__(12); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var NodeControlFlowReplacers_1 = __webpack_require__(40); +var BinaryExpressionControlFlowReplacer_1 = __webpack_require__(86); exports.nodeControlFlowTransformersModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.IControlFlowReplacer).to(BinaryExpressionControlFlowReplacer_1.BinaryExpressionControlFlowReplacer).whenTargetNamed(NodeControlFlowReplacers_1.NodeControlFlowReplacers.BinaryExpressionControlFlowReplacer); bind(ServiceIdentifiers_1.ServiceIdentifiers['Factory']).toFactory(function (context) { - var cache = new Map(); + var cache = new _map2.default(); return function (replacerName) { if (cache.has(replacerName)) { return cache.get(replacerName); @@ -2396,31 +2481,37 @@ exports.nodeControlFlowTransformersModule = new inversify_1.ContainerModule(func }); /***/ }, -/* 44 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var NodeObfuscatorsReplacers_1 = __webpack_require__(13); -var BooleanLiteralReplacer_1 = __webpack_require__(79); -var IdentifierReplacer_1 = __webpack_require__(80); -var NumberLiteralReplacer_1 = __webpack_require__(81); -var StringLiteralReplacer_1 = __webpack_require__(82); +var _map = __webpack_require__(12); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var NodeObfuscatorsReplacers_1 = __webpack_require__(19); +var BooleanLiteralReplacer_1 = __webpack_require__(96); +var IdentifierReplacer_1 = __webpack_require__(97); +var NumberLiteralReplacer_1 = __webpack_require__(98); +var StringLiteralReplacer_1 = __webpack_require__(99); exports.nodeObfuscatorsModule = new inversify_1.ContainerModule(function (bind) { - bind(ServiceIdentifiers_1.ServiceIdentifiers.IReplacer).to(BooleanLiteralReplacer_1.BooleanLiteralReplacer).whenTargetNamed(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.BooleanReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IReplacer).to(IdentifierReplacer_1.IdentifierReplacer).whenTargetNamed(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.IdentifierReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IReplacer).to(NumberLiteralReplacer_1.NumberLiteralReplacer).whenTargetNamed(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.NumberLiteralReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IReplacer).to(StringLiteralReplacer_1.StringLiteralReplacer).whenTargetNamed(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.StringLiteralReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers['Factory']).toFactory(function (context) { - var cache = new Map(); + bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatorReplacer).to(BooleanLiteralReplacer_1.BooleanLiteralReplacer).whenTargetNamed(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.BooleanReplacer); + bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatorReplacer).to(IdentifierReplacer_1.IdentifierReplacer).whenTargetNamed(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.IdentifierReplacer); + bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatorReplacer).to(NumberLiteralReplacer_1.NumberLiteralReplacer).whenTargetNamed(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.NumberLiteralReplacer); + bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatorReplacer).to(StringLiteralReplacer_1.StringLiteralReplacer).whenTargetNamed(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.StringLiteralReplacer); + bind(ServiceIdentifiers_1.ServiceIdentifiers['Factory']).toFactory(function (context) { + var cache = new _map2.default(); return function (replacerName) { if (cache.has(replacerName)) { return cache.get(replacerName); } - var obfuscationReplacer = context.container.getNamed(ServiceIdentifiers_1.ServiceIdentifiers.IReplacer, replacerName); + var obfuscationReplacer = context.container.getNamed(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatorReplacer, replacerName); cache.set(replacerName, obfuscationReplacer); return obfuscationReplacer; }; @@ -2428,25 +2519,31 @@ exports.nodeObfuscatorsModule = new inversify_1.ContainerModule(function (bind) }); /***/ }, -/* 45 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var NodeTransformers_1 = __webpack_require__(30); -var FunctionControlFlowTransformer_1 = __webpack_require__(67); -var CatchClauseObfuscator_1 = __webpack_require__(70); -var FunctionDeclarationObfuscator_1 = __webpack_require__(71); -var FunctionObfuscator_1 = __webpack_require__(72); -var LabeledStatementObfuscator_1 = __webpack_require__(73); -var LiteralObfuscator_1 = __webpack_require__(74); -var MemberExpressionObfuscator_1 = __webpack_require__(75); -var MethodDefinitionObfuscator_1 = __webpack_require__(76); -var ObjectExpressionObfuscator_1 = __webpack_require__(77); -var VariableDeclarationObfuscator_1 = __webpack_require__(78); +var _map = __webpack_require__(12); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var NodeTransformers_1 = __webpack_require__(41); +var FunctionControlFlowTransformer_1 = __webpack_require__(84); +var CatchClauseObfuscator_1 = __webpack_require__(87); +var FunctionDeclarationObfuscator_1 = __webpack_require__(88); +var FunctionObfuscator_1 = __webpack_require__(89); +var LabeledStatementObfuscator_1 = __webpack_require__(90); +var LiteralObfuscator_1 = __webpack_require__(91); +var MemberExpressionObfuscator_1 = __webpack_require__(92); +var MethodDefinitionObfuscator_1 = __webpack_require__(93); +var ObjectExpressionObfuscator_1 = __webpack_require__(94); +var VariableDeclarationObfuscator_1 = __webpack_require__(95); exports.nodeTransformersModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(FunctionControlFlowTransformer_1.FunctionControlFlowTransformer).whenTargetNamed(NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer); bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(CatchClauseObfuscator_1.CatchClauseObfuscator).whenTargetNamed(NodeTransformers_1.NodeTransformers.CatchClauseObfuscator); @@ -2459,7 +2556,7 @@ exports.nodeTransformersModule = new inversify_1.ContainerModule(function (bind) bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(ObjectExpressionObfuscator_1.ObjectExpressionObfuscator).whenTargetNamed(NodeTransformers_1.NodeTransformers.ObjectExpressionObfuscator); bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(VariableDeclarationObfuscator_1.VariableDeclarationObfuscator).whenTargetNamed(NodeTransformers_1.NodeTransformers.VariableDeclarationObfuscator); bind(ServiceIdentifiers_1.ServiceIdentifiers['Factory']).toFactory(function (context) { - var cache = new Map(); + var cache = new _map2.default(); return function (nodeTransformersMap) { return function (nodeType) { var nodeTransformers = nodeTransformersMap.get(nodeType) || []; @@ -2481,26 +2578,32 @@ exports.nodeTransformersModule = new inversify_1.ContainerModule(function (bind) }); /***/ }, -/* 46 */ +/* 62 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var CalleeDataExtractors_1 = __webpack_require__(28); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(87); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(88); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(89); -var StackTraceAnalyzer_1 = __webpack_require__(86); +var _map = __webpack_require__(12); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var CalleeDataExtractors_1 = __webpack_require__(38); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(104); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(105); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(106); +var StackTraceAnalyzer_1 = __webpack_require__(103); exports.stackTraceAnalyzerModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.IStackTraceAnalyzer).to(StackTraceAnalyzer_1.StackTraceAnalyzer).inSingletonScope(); bind(ServiceIdentifiers_1.ServiceIdentifiers.ICalleeDataExtractor).to(FunctionDeclarationCalleeDataExtractor_1.FunctionDeclarationCalleeDataExtractor).whenTargetNamed(CalleeDataExtractors_1.CalleeDataExtractors.FunctionDeclarationCalleeDataExtractor); bind(ServiceIdentifiers_1.ServiceIdentifiers.ICalleeDataExtractor).to(FunctionExpressionCalleeDataExtractor_1.FunctionExpressionCalleeDataExtractor).whenTargetNamed(CalleeDataExtractors_1.CalleeDataExtractors.FunctionExpressionCalleeDataExtractor); bind(ServiceIdentifiers_1.ServiceIdentifiers.ICalleeDataExtractor).to(ObjectExpressionCalleeDataExtractor_1.ObjectExpressionCalleeDataExtractor).whenTargetNamed(CalleeDataExtractors_1.CalleeDataExtractors.ObjectExpressionCalleeDataExtractor); bind(ServiceIdentifiers_1.ServiceIdentifiers['Factory']).toFactory(function (context) { - var cache = new Map(); + var cache = new _map2.default(); return function (calleeDataExtractorName) { if (cache.has(calleeDataExtractorName)) { return cache.get(calleeDataExtractorName); @@ -2513,19 +2616,21 @@ exports.stackTraceAnalyzerModule = new inversify_1.ContainerModule(function (bin }); /***/ }, -/* 47 */ +/* 63 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ControlFlowStorage_1 = __webpack_require__(91); -var CustomNodeGroupStorage_1 = __webpack_require__(92); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var ControlFlowStorage_1 = __webpack_require__(108); +var CustomNodeGroupStorage_1 = __webpack_require__(109); +var StringArrayStorage_1 = __webpack_require__(110); exports.storagesModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers['IStorage']).to(CustomNodeGroupStorage_1.CustomNodeGroupStorage).inSingletonScope(); bind(ServiceIdentifiers_1.ServiceIdentifiers['IStorage']).to(ControlFlowStorage_1.ControlFlowStorage); + bind(ServiceIdentifiers_1.ServiceIdentifiers['IStorage']).to(StringArrayStorage_1.StringArrayStorage).inSingletonScope(); bind(ServiceIdentifiers_1.ServiceIdentifiers['Factory>']).toFactory(function (context) { return function () { return context.container.get(ServiceIdentifiers_1.ServiceIdentifiers['IStorage']); @@ -2534,123 +2639,119 @@ exports.storagesModule = new inversify_1.ContainerModule(function (bind) { }); /***/ }, -/* 48 */ +/* 64 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(97); -var Initializable_1 = __webpack_require__(3); -var AbstractCustomNode_1 = __webpack_require__(7); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(114); +var Initializable_1 = __webpack_require__(9); +var AbstractCustomNode_1 = __webpack_require__(14); +var RandomGeneratorUtils_1 = __webpack_require__(8); var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { - _inherits(ConsoleOutputDisableExpressionNode, _AbstractCustomNode_); + (0, _inherits3.default)(ConsoleOutputDisableExpressionNode, _AbstractCustomNode_); function ConsoleOutputDisableExpressionNode(options) { - _classCallCheck(this, ConsoleOutputDisableExpressionNode); - - return _possibleConstructorReturn(this, (ConsoleOutputDisableExpressionNode.__proto__ || Object.getPrototypeOf(ConsoleOutputDisableExpressionNode)).call(this, options)); + (0, _classCallCheck3.default)(this, ConsoleOutputDisableExpressionNode); + return (0, _possibleConstructorReturn3.default)(this, (ConsoleOutputDisableExpressionNode.__proto__ || (0, _getPrototypeOf2.default)(ConsoleOutputDisableExpressionNode)).call(this, options)); } - _createClass(ConsoleOutputDisableExpressionNode, [{ + (0, _createClass3.default)(ConsoleOutputDisableExpressionNode, [{ key: "initialize", value: function initialize(callsControllerFunctionName) { this.callsControllerFunctionName = callsControllerFunctionName; } }, { - key: "getCode", - value: function getCode() { + key: "getTemplate", + value: function getTemplate() { return format(ConsoleOutputDisableExpressionTemplate_1.ConsoleOutputDisableExpressionTemplate(), { consoleLogDisableFunctionName: RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomVariableName(), singleNodeCallControllerFunctionName: this.callsControllerFunctionName }); } }]); - return ConsoleOutputDisableExpressionNode; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], ConsoleOutputDisableExpressionNode.prototype, "callsControllerFunctionName", void 0); -ConsoleOutputDisableExpressionNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], ConsoleOutputDisableExpressionNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ConsoleOutputDisableExpressionNode.prototype, "callsControllerFunctionName", void 0); +ConsoleOutputDisableExpressionNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], ConsoleOutputDisableExpressionNode); exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; /***/ }, -/* 49 */ +/* 65 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _map = __webpack_require__(12); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _map2 = _interopRequireDefault(_map); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var CustomNodes_1 = __webpack_require__(12); -var ObfuscationEvents_1 = __webpack_require__(14); -var AbstractCustomNodeGroup_1 = __webpack_require__(18); -var NodeAppender_1 = __webpack_require__(16); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var Initializable_1 = __webpack_require__(9); +var CustomNodes_1 = __webpack_require__(20); +var ObfuscationEvents_1 = __webpack_require__(21); +var AbstractCustomNodeGroup_1 = __webpack_require__(25); +var NodeAppender_1 = __webpack_require__(24); +var RandomGeneratorUtils_1 = __webpack_require__(8); var ConsoleOutputCustomNodeGroup = function (_AbstractCustomNodeGr) { - _inherits(ConsoleOutputCustomNodeGroup, _AbstractCustomNodeGr); + (0, _inherits3.default)(ConsoleOutputCustomNodeGroup, _AbstractCustomNodeGr); function ConsoleOutputCustomNodeGroup(customNodeFactory, obfuscationEventEmitter, options) { - _classCallCheck(this, ConsoleOutputCustomNodeGroup); + (0, _classCallCheck3.default)(this, ConsoleOutputCustomNodeGroup); - var _this = _possibleConstructorReturn(this, (ConsoleOutputCustomNodeGroup.__proto__ || Object.getPrototypeOf(ConsoleOutputCustomNodeGroup)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (ConsoleOutputCustomNodeGroup.__proto__ || (0, _getPrototypeOf2.default)(ConsoleOutputCustomNodeGroup)).call(this, options)); _this.appendEvent = ObfuscationEvents_1.ObfuscationEvents.BeforeObfuscation; _this.customNodeFactory = customNodeFactory; @@ -2658,7 +2759,7 @@ var ConsoleOutputCustomNodeGroup = function (_AbstractCustomNodeGr) { return _this; } - _createClass(ConsoleOutputCustomNodeGroup, [{ + (0, _createClass3.default)(ConsoleOutputCustomNodeGroup, [{ key: "appendCustomNodes", value: function appendCustomNodes(blockScopeNode, stackTraceData) { var randomStackTraceIndex = NodeAppender_1.NodeAppender.getRandomStackTraceIndex(stackTraceData.length); @@ -2678,7 +2779,7 @@ var ConsoleOutputCustomNodeGroup = function (_AbstractCustomNodeGr) { }, { key: "initialize", value: function initialize() { - this.customNodes = new Map(); + this.customNodes = new _map2.default(); if (!this.options.disableConsoleOutput) { return; } @@ -2691,132 +2792,122 @@ var ConsoleOutputCustomNodeGroup = function (_AbstractCustomNodeGr) { this.customNodes.set(CustomNodes_1.CustomNodes.NodeCallsControllerFunctionNode, nodeCallsControllerFunctionNode); } }]); - return ConsoleOutputCustomNodeGroup; }(AbstractCustomNodeGroup_1.AbstractCustomNodeGroup); -__decorate([Initializable_1.initializable(), __metadata('design:type', Map)], ConsoleOutputCustomNodeGroup.prototype, "customNodes", void 0); -ConsoleOutputCustomNodeGroup = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), __param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object, Object])], ConsoleOutputCustomNodeGroup); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", _map2.default)], ConsoleOutputCustomNodeGroup.prototype, "customNodes", void 0); +ConsoleOutputCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], ConsoleOutputCustomNodeGroup); exports.ConsoleOutputCustomNodeGroup = ConsoleOutputCustomNodeGroup; /***/ }, -/* 50 */ +/* 66 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var Initializable_1 = __webpack_require__(3); -var BinaryExpressionFunctionTemplate_1 = __webpack_require__(98); -var AbstractCustomNode_1 = __webpack_require__(7); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var Initializable_1 = __webpack_require__(9); +var BinaryExpressionFunctionTemplate_1 = __webpack_require__(115); +var AbstractCustomNode_1 = __webpack_require__(14); +var RandomGeneratorUtils_1 = __webpack_require__(8); var BinaryExpressionFunctionNode = function (_AbstractCustomNode_) { - _inherits(BinaryExpressionFunctionNode, _AbstractCustomNode_); + (0, _inherits3.default)(BinaryExpressionFunctionNode, _AbstractCustomNode_); function BinaryExpressionFunctionNode(options) { - _classCallCheck(this, BinaryExpressionFunctionNode); - - return _possibleConstructorReturn(this, (BinaryExpressionFunctionNode.__proto__ || Object.getPrototypeOf(BinaryExpressionFunctionNode)).call(this, options)); + (0, _classCallCheck3.default)(this, BinaryExpressionFunctionNode); + return (0, _possibleConstructorReturn3.default)(this, (BinaryExpressionFunctionNode.__proto__ || (0, _getPrototypeOf2.default)(BinaryExpressionFunctionNode)).call(this, options)); } - _createClass(BinaryExpressionFunctionNode, [{ + (0, _createClass3.default)(BinaryExpressionFunctionNode, [{ key: "initialize", value: function initialize(operator) { this.operator = operator; } }, { - key: "getCode", - value: function getCode() { + key: "getTemplate", + value: function getTemplate() { return format(BinaryExpressionFunctionTemplate_1.BinaryExpressionFunctionTemplate(), { functionName: RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomVariableName(1), operator: this.operator }); } }]); - return BinaryExpressionFunctionNode; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], BinaryExpressionFunctionNode.prototype, "operator", void 0); -BinaryExpressionFunctionNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], BinaryExpressionFunctionNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], BinaryExpressionFunctionNode.prototype, "operator", void 0); +BinaryExpressionFunctionNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], BinaryExpressionFunctionNode); exports.BinaryExpressionFunctionNode = BinaryExpressionFunctionNode; /***/ }, -/* 51 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var Initializable_1 = __webpack_require__(3); -var ControlFlowStorageCallTemplate_1 = __webpack_require__(99); -var AbstractCustomNode_1 = __webpack_require__(7); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var Initializable_1 = __webpack_require__(9); +var ControlFlowStorageCallTemplate_1 = __webpack_require__(116); +var AbstractCustomNode_1 = __webpack_require__(14); var ControlFlowStorageCallNode = function (_AbstractCustomNode_) { - _inherits(ControlFlowStorageCallNode, _AbstractCustomNode_); + (0, _inherits3.default)(ControlFlowStorageCallNode, _AbstractCustomNode_); function ControlFlowStorageCallNode(options) { - _classCallCheck(this, ControlFlowStorageCallNode); - - return _possibleConstructorReturn(this, (ControlFlowStorageCallNode.__proto__ || Object.getPrototypeOf(ControlFlowStorageCallNode)).call(this, options)); + (0, _classCallCheck3.default)(this, ControlFlowStorageCallNode); + return (0, _possibleConstructorReturn3.default)(this, (ControlFlowStorageCallNode.__proto__ || (0, _getPrototypeOf2.default)(ControlFlowStorageCallNode)).call(this, options)); } - _createClass(ControlFlowStorageCallNode, [{ + (0, _createClass3.default)(ControlFlowStorageCallNode, [{ key: "initialize", value: function initialize(controlFlowStorageName, controlFlowStorageKey, leftValue, rightValue) { this.controlFlowStorageName = controlFlowStorageName; @@ -2825,8 +2916,8 @@ var ControlFlowStorageCallNode = function (_AbstractCustomNode_) { this.rightValue = rightValue; } }, { - key: "getCode", - value: function getCode() { + key: "getTemplate", + value: function getTemplate() { return format(ControlFlowStorageCallTemplate_1.ControlFlowStorageCallTemplate(), { controlFlowStorageKey: this.controlFlowStorageKey, controlFlowStorageName: this.controlFlowStorageName, @@ -2835,339 +2926,317 @@ var ControlFlowStorageCallNode = function (_AbstractCustomNode_) { }); } }]); - return ControlFlowStorageCallNode; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], ControlFlowStorageCallNode.prototype, "controlFlowStorageKey", void 0); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], ControlFlowStorageCallNode.prototype, "controlFlowStorageName", void 0); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], ControlFlowStorageCallNode.prototype, "leftValue", void 0); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], ControlFlowStorageCallNode.prototype, "rightValue", void 0); -ControlFlowStorageCallNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], ControlFlowStorageCallNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ControlFlowStorageCallNode.prototype, "controlFlowStorageKey", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ControlFlowStorageCallNode.prototype, "controlFlowStorageName", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ControlFlowStorageCallNode.prototype, "leftValue", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ControlFlowStorageCallNode.prototype, "rightValue", void 0); +ControlFlowStorageCallNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], ControlFlowStorageCallNode); exports.ControlFlowStorageCallNode = ControlFlowStorageCallNode; /***/ }, -/* 52 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var Initializable_1 = __webpack_require__(3); -var ControlFlowStorageTemplate_1 = __webpack_require__(100); -var AbstractCustomNode_1 = __webpack_require__(7); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var Initializable_1 = __webpack_require__(9); +var ControlFlowStorageTemplate_1 = __webpack_require__(117); +var AbstractCustomNode_1 = __webpack_require__(14); var ControlFlowStorageNode = function (_AbstractCustomNode_) { - _inherits(ControlFlowStorageNode, _AbstractCustomNode_); + (0, _inherits3.default)(ControlFlowStorageNode, _AbstractCustomNode_); function ControlFlowStorageNode(options) { - _classCallCheck(this, ControlFlowStorageNode); - - return _possibleConstructorReturn(this, (ControlFlowStorageNode.__proto__ || Object.getPrototypeOf(ControlFlowStorageNode)).call(this, options)); + (0, _classCallCheck3.default)(this, ControlFlowStorageNode); + return (0, _possibleConstructorReturn3.default)(this, (ControlFlowStorageNode.__proto__ || (0, _getPrototypeOf2.default)(ControlFlowStorageNode)).call(this, options)); } - _createClass(ControlFlowStorageNode, [{ + (0, _createClass3.default)(ControlFlowStorageNode, [{ key: "initialize", - value: function initialize(controlFlowStorage, controlFlowStorageName) { + value: function initialize(controlFlowStorage) { this.controlFlowStorage = controlFlowStorage; - this.controlFlowStorageName = controlFlowStorageName; } }, { - key: "getCode", - value: function getCode() { + key: "getTemplate", + value: function getTemplate() { return format(ControlFlowStorageTemplate_1.ControlFlowStorageTemplate(), { controlFlowStorage: this.controlFlowStorage.toString(), - controlFlowStorageName: this.controlFlowStorageName + controlFlowStorageName: this.controlFlowStorage.getStorageId() }); } }]); - return ControlFlowStorageNode; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata('design:type', Object)], ControlFlowStorageNode.prototype, "controlFlowStorage", void 0); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], ControlFlowStorageNode.prototype, "controlFlowStorageName", void 0); -ControlFlowStorageNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], ControlFlowStorageNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], ControlFlowStorageNode.prototype, "controlFlowStorage", void 0); +ControlFlowStorageNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], ControlFlowStorageNode); exports.ControlFlowStorageNode = ControlFlowStorageNode; /***/ }, -/* 53 */ +/* 69 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var Initializable_1 = __webpack_require__(3); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(101); -var AbstractCustomNode_1 = __webpack_require__(7); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var Initializable_1 = __webpack_require__(9); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(118); +var AbstractCustomNode_1 = __webpack_require__(14); var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { - _inherits(DebugProtectionFunctionCallNode, _AbstractCustomNode_); + (0, _inherits3.default)(DebugProtectionFunctionCallNode, _AbstractCustomNode_); function DebugProtectionFunctionCallNode(options) { - _classCallCheck(this, DebugProtectionFunctionCallNode); - - return _possibleConstructorReturn(this, (DebugProtectionFunctionCallNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionCallNode)).call(this, options)); + (0, _classCallCheck3.default)(this, DebugProtectionFunctionCallNode); + return (0, _possibleConstructorReturn3.default)(this, (DebugProtectionFunctionCallNode.__proto__ || (0, _getPrototypeOf2.default)(DebugProtectionFunctionCallNode)).call(this, options)); } - _createClass(DebugProtectionFunctionCallNode, [{ + (0, _createClass3.default)(DebugProtectionFunctionCallNode, [{ key: "initialize", value: function initialize(debugProtectionFunctionName) { this.debugProtectionFunctionName = debugProtectionFunctionName; } }, { - key: "getCode", - value: function getCode() { + key: "getTemplate", + value: function getTemplate() { return format(DebufProtectionFunctionCallTemplate_1.DebugProtectionFunctionCallTemplate(), { debugProtectionFunctionName: this.debugProtectionFunctionName }); } }]); - return DebugProtectionFunctionCallNode; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], DebugProtectionFunctionCallNode.prototype, "debugProtectionFunctionName", void 0); -DebugProtectionFunctionCallNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], DebugProtectionFunctionCallNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], DebugProtectionFunctionCallNode.prototype, "debugProtectionFunctionName", void 0); +DebugProtectionFunctionCallNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], DebugProtectionFunctionCallNode); exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; /***/ }, -/* 54 */ +/* 70 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var Initializable_1 = __webpack_require__(3); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(102); -var AbstractCustomNode_1 = __webpack_require__(7); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var Initializable_1 = __webpack_require__(9); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(119); +var AbstractCustomNode_1 = __webpack_require__(14); var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { - _inherits(DebugProtectionFunctionIntervalNode, _AbstractCustomNode_); + (0, _inherits3.default)(DebugProtectionFunctionIntervalNode, _AbstractCustomNode_); function DebugProtectionFunctionIntervalNode(options) { - _classCallCheck(this, DebugProtectionFunctionIntervalNode); - - return _possibleConstructorReturn(this, (DebugProtectionFunctionIntervalNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionIntervalNode)).call(this, options)); + (0, _classCallCheck3.default)(this, DebugProtectionFunctionIntervalNode); + return (0, _possibleConstructorReturn3.default)(this, (DebugProtectionFunctionIntervalNode.__proto__ || (0, _getPrototypeOf2.default)(DebugProtectionFunctionIntervalNode)).call(this, options)); } - _createClass(DebugProtectionFunctionIntervalNode, [{ + (0, _createClass3.default)(DebugProtectionFunctionIntervalNode, [{ key: "initialize", value: function initialize(debugProtectionFunctionName) { this.debugProtectionFunctionName = debugProtectionFunctionName; } }, { - key: "getCode", - value: function getCode() { + key: "getTemplate", + value: function getTemplate() { return format(DebugProtectionFunctionIntervalTemplate_1.DebugProtectionFunctionIntervalTemplate(), { debugProtectionFunctionName: this.debugProtectionFunctionName }); } }]); - return DebugProtectionFunctionIntervalNode; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], DebugProtectionFunctionIntervalNode.prototype, "debugProtectionFunctionName", void 0); -DebugProtectionFunctionIntervalNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], DebugProtectionFunctionIntervalNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], DebugProtectionFunctionIntervalNode.prototype, "debugProtectionFunctionName", void 0); +DebugProtectionFunctionIntervalNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], DebugProtectionFunctionIntervalNode); exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; /***/ }, -/* 55 */ +/* 71 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var Initializable_1 = __webpack_require__(3); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(103); -var AbstractCustomNode_1 = __webpack_require__(7); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var Initializable_1 = __webpack_require__(9); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(120); +var AbstractCustomNode_1 = __webpack_require__(14); var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { - _inherits(DebugProtectionFunctionNode, _AbstractCustomNode_); + (0, _inherits3.default)(DebugProtectionFunctionNode, _AbstractCustomNode_); function DebugProtectionFunctionNode(options) { - _classCallCheck(this, DebugProtectionFunctionNode); - - return _possibleConstructorReturn(this, (DebugProtectionFunctionNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionNode)).call(this, options)); + (0, _classCallCheck3.default)(this, DebugProtectionFunctionNode); + return (0, _possibleConstructorReturn3.default)(this, (DebugProtectionFunctionNode.__proto__ || (0, _getPrototypeOf2.default)(DebugProtectionFunctionNode)).call(this, options)); } - _createClass(DebugProtectionFunctionNode, [{ + (0, _createClass3.default)(DebugProtectionFunctionNode, [{ key: "initialize", value: function initialize(debugProtectionFunctionName) { this.debugProtectionFunctionName = debugProtectionFunctionName; } }, { - key: "getCode", - value: function getCode() { + key: "getTemplate", + value: function getTemplate() { return format(DebugProtectionFunctionTemplate_1.DebugProtectionFunctionTemplate(), { debugProtectionFunctionName: this.debugProtectionFunctionName }); } }]); - return DebugProtectionFunctionNode; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], DebugProtectionFunctionNode.prototype, "debugProtectionFunctionName", void 0); -DebugProtectionFunctionNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], DebugProtectionFunctionNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], DebugProtectionFunctionNode.prototype, "debugProtectionFunctionName", void 0); +DebugProtectionFunctionNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], DebugProtectionFunctionNode); exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; /***/ }, -/* 56 */ +/* 72 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _map = __webpack_require__(12); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _map2 = _interopRequireDefault(_map); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var CustomNodes_1 = __webpack_require__(12); -var ObfuscationEvents_1 = __webpack_require__(14); -var AbstractCustomNodeGroup_1 = __webpack_require__(18); -var NodeAppender_1 = __webpack_require__(16); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var Initializable_1 = __webpack_require__(9); +var CustomNodes_1 = __webpack_require__(20); +var ObfuscationEvents_1 = __webpack_require__(21); +var AbstractCustomNodeGroup_1 = __webpack_require__(25); +var NodeAppender_1 = __webpack_require__(24); +var RandomGeneratorUtils_1 = __webpack_require__(8); var DebugProtectionCustomNodeGroup = function (_AbstractCustomNodeGr) { - _inherits(DebugProtectionCustomNodeGroup, _AbstractCustomNodeGr); + (0, _inherits3.default)(DebugProtectionCustomNodeGroup, _AbstractCustomNodeGr); function DebugProtectionCustomNodeGroup(customNodeFactory, obfuscationEventEmitter, options) { - _classCallCheck(this, DebugProtectionCustomNodeGroup); + (0, _classCallCheck3.default)(this, DebugProtectionCustomNodeGroup); - var _this = _possibleConstructorReturn(this, (DebugProtectionCustomNodeGroup.__proto__ || Object.getPrototypeOf(DebugProtectionCustomNodeGroup)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (DebugProtectionCustomNodeGroup.__proto__ || (0, _getPrototypeOf2.default)(DebugProtectionCustomNodeGroup)).call(this, options)); _this.appendEvent = ObfuscationEvents_1.ObfuscationEvents.BeforeObfuscation; _this.customNodeFactory = customNodeFactory; @@ -3175,7 +3244,7 @@ var DebugProtectionCustomNodeGroup = function (_AbstractCustomNodeGr) { return _this; } - _createClass(DebugProtectionCustomNodeGroup, [{ + (0, _createClass3.default)(DebugProtectionCustomNodeGroup, [{ key: "appendCustomNodes", value: function appendCustomNodes(blockScopeNode, stackTraceData) { this.appendCustomNodeIfExist(CustomNodes_1.CustomNodes.DebugProtectionFunctionNode, function (customNode) { @@ -3193,7 +3262,7 @@ var DebugProtectionCustomNodeGroup = function (_AbstractCustomNodeGr) { }, { key: "initialize", value: function initialize() { - this.customNodes = new Map(); + this.customNodes = new _map2.default(); if (!this.options.debugProtection) { return; } @@ -3211,76 +3280,73 @@ var DebugProtectionCustomNodeGroup = function (_AbstractCustomNodeGr) { } } }]); - return DebugProtectionCustomNodeGroup; }(AbstractCustomNodeGroup_1.AbstractCustomNodeGroup); -__decorate([Initializable_1.initializable(), __metadata('design:type', Map)], DebugProtectionCustomNodeGroup.prototype, "customNodes", void 0); -DebugProtectionCustomNodeGroup = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), __param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object, Object])], DebugProtectionCustomNodeGroup); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", _map2.default)], DebugProtectionCustomNodeGroup.prototype, "customNodes", void 0); +DebugProtectionCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], DebugProtectionCustomNodeGroup); exports.DebugProtectionCustomNodeGroup = DebugProtectionCustomNodeGroup; /***/ }, -/* 57 */ +/* 73 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); +var _slicedToArray2 = __webpack_require__(35); -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf = __webpack_require__(5); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck2 = __webpack_require__(0); -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 _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var Initializable_1 = __webpack_require__(3); -var DomainLockNodeTemplate_1 = __webpack_require__(104); -var AbstractCustomNode_1 = __webpack_require__(7); -var CryptUtils_1 = __webpack_require__(25); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var Initializable_1 = __webpack_require__(9); +var DomainLockNodeTemplate_1 = __webpack_require__(121); +var AbstractCustomNode_1 = __webpack_require__(14); +var CryptUtils_1 = __webpack_require__(33); +var RandomGeneratorUtils_1 = __webpack_require__(8); var DomainLockNode = function (_AbstractCustomNode_) { - _inherits(DomainLockNode, _AbstractCustomNode_); + (0, _inherits3.default)(DomainLockNode, _AbstractCustomNode_); function DomainLockNode(options) { - _classCallCheck(this, DomainLockNode); - - return _possibleConstructorReturn(this, (DomainLockNode.__proto__ || Object.getPrototypeOf(DomainLockNode)).call(this, options)); + (0, _classCallCheck3.default)(this, DomainLockNode); + return (0, _possibleConstructorReturn3.default)(this, (DomainLockNode.__proto__ || (0, _getPrototypeOf2.default)(DomainLockNode)).call(this, options)); } - _createClass(DomainLockNode, [{ + (0, _createClass3.default)(DomainLockNode, [{ key: "initialize", value: function initialize(callsControllerFunctionName) { this.callsControllerFunctionName = callsControllerFunctionName; } }, { - key: "getCode", - value: function getCode() { + key: "getTemplate", + value: function getTemplate() { var domainsString = this.options.domainLock.join(';'), _CryptUtils_1$CryptUt = CryptUtils_1.CryptUtils.hideString(domainsString, domainsString.length * 3), - _CryptUtils_1$CryptUt2 = _slicedToArray(_CryptUtils_1$CryptUt, 2), + _CryptUtils_1$CryptUt2 = (0, _slicedToArray3.default)(_CryptUtils_1$CryptUt, 2), hiddenDomainsString = _CryptUtils_1$CryptUt2[0], diff = _CryptUtils_1$CryptUt2[1]; return format(DomainLockNodeTemplate_1.DomainLockNodeTemplate(), { @@ -3291,61 +3357,61 @@ var DomainLockNode = function (_AbstractCustomNode_) { }); } }]); - return DomainLockNode; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata('design:type', String)], DomainLockNode.prototype, "callsControllerFunctionName", void 0); -DomainLockNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], DomainLockNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], DomainLockNode.prototype, "callsControllerFunctionName", void 0); +DomainLockNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], DomainLockNode); exports.DomainLockNode = DomainLockNode; /***/ }, -/* 58 */ +/* 74 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _map = __webpack_require__(12); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _map2 = _interopRequireDefault(_map); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var CustomNodes_1 = __webpack_require__(12); -var ObfuscationEvents_1 = __webpack_require__(14); -var AbstractCustomNodeGroup_1 = __webpack_require__(18); -var NodeAppender_1 = __webpack_require__(16); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var Initializable_1 = __webpack_require__(9); +var CustomNodes_1 = __webpack_require__(20); +var ObfuscationEvents_1 = __webpack_require__(21); +var AbstractCustomNodeGroup_1 = __webpack_require__(25); +var NodeAppender_1 = __webpack_require__(24); +var RandomGeneratorUtils_1 = __webpack_require__(8); var DomainLockCustomNodeGroup = function (_AbstractCustomNodeGr) { - _inherits(DomainLockCustomNodeGroup, _AbstractCustomNodeGr); + (0, _inherits3.default)(DomainLockCustomNodeGroup, _AbstractCustomNodeGr); function DomainLockCustomNodeGroup(customNodeFactory, obfuscationEventEmitter, options) { - _classCallCheck(this, DomainLockCustomNodeGroup); + (0, _classCallCheck3.default)(this, DomainLockCustomNodeGroup); - var _this = _possibleConstructorReturn(this, (DomainLockCustomNodeGroup.__proto__ || Object.getPrototypeOf(DomainLockCustomNodeGroup)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (DomainLockCustomNodeGroup.__proto__ || (0, _getPrototypeOf2.default)(DomainLockCustomNodeGroup)).call(this, options)); _this.appendEvent = ObfuscationEvents_1.ObfuscationEvents.BeforeObfuscation; _this.customNodeFactory = customNodeFactory; @@ -3353,7 +3419,7 @@ var DomainLockCustomNodeGroup = function (_AbstractCustomNodeGr) { return _this; } - _createClass(DomainLockCustomNodeGroup, [{ + (0, _createClass3.default)(DomainLockCustomNodeGroup, [{ key: "appendCustomNodes", value: function appendCustomNodes(blockScopeNode, stackTraceData) { var randomStackTraceIndex = NodeAppender_1.NodeAppender.getRandomStackTraceIndex(stackTraceData.length); @@ -3373,7 +3439,7 @@ var DomainLockCustomNodeGroup = function (_AbstractCustomNodeGr) { }, { key: "initialize", value: function initialize() { - this.customNodes = new Map(); + this.customNodes = new _map2.default(); if (!this.options.domainLock.length) { return; } @@ -3386,229 +3452,201 @@ var DomainLockCustomNodeGroup = function (_AbstractCustomNodeGr) { this.customNodes.set(CustomNodes_1.CustomNodes.NodeCallsControllerFunctionNode, nodeCallsControllerFunctionNode); } }]); - return DomainLockCustomNodeGroup; }(AbstractCustomNodeGroup_1.AbstractCustomNodeGroup); -__decorate([Initializable_1.initializable(), __metadata('design:type', Map)], DomainLockCustomNodeGroup.prototype, "customNodes", void 0); -DomainLockCustomNodeGroup = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), __param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object, Object])], DomainLockCustomNodeGroup); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", _map2.default)], DomainLockCustomNodeGroup.prototype, "customNodes", void 0); +DomainLockCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], DomainLockCustomNodeGroup); exports.DomainLockCustomNodeGroup = DomainLockCustomNodeGroup; /***/ }, -/* 59 */ +/* 75 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __assign = undefined && undefined.__assign || Object.assign || function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) { - if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - } - return t; -}; -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var ObfuscationEvents_1 = __webpack_require__(14); -var Initializable_1 = __webpack_require__(3); -var SingleNodeCallControllerTemplate_1 = __webpack_require__(96); -var NoCustomNodesPreset_1 = __webpack_require__(21); -var AbstractCustomNode_1 = __webpack_require__(7); -var JavaScriptObfuscator_1 = __webpack_require__(15); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var ObfuscationEvents_1 = __webpack_require__(21); +var Initializable_1 = __webpack_require__(9); +var SingleNodeCallControllerTemplate_1 = __webpack_require__(113); +var NoCustomNodes_1 = __webpack_require__(30); +var AbstractCustomNode_1 = __webpack_require__(14); +var JavaScriptObfuscator_1 = __webpack_require__(23); var NodeCallsControllerFunctionNode = function (_AbstractCustomNode_) { - _inherits(NodeCallsControllerFunctionNode, _AbstractCustomNode_); + (0, _inherits3.default)(NodeCallsControllerFunctionNode, _AbstractCustomNode_); function NodeCallsControllerFunctionNode(options) { - _classCallCheck(this, NodeCallsControllerFunctionNode); - - return _possibleConstructorReturn(this, (NodeCallsControllerFunctionNode.__proto__ || Object.getPrototypeOf(NodeCallsControllerFunctionNode)).call(this, options)); + (0, _classCallCheck3.default)(this, NodeCallsControllerFunctionNode); + return (0, _possibleConstructorReturn3.default)(this, (NodeCallsControllerFunctionNode.__proto__ || (0, _getPrototypeOf2.default)(NodeCallsControllerFunctionNode)).call(this, options)); } - _createClass(NodeCallsControllerFunctionNode, [{ + (0, _createClass3.default)(NodeCallsControllerFunctionNode, [{ key: "initialize", value: function initialize(appendEvent, callsControllerFunctionName) { this.appendEvent = appendEvent; this.callsControllerFunctionName = callsControllerFunctionName; } }, { - key: "getCode", - value: function getCode() { + key: "getTemplate", + value: function getTemplate() { if (this.appendEvent === ObfuscationEvents_1.ObfuscationEvents.AfterObfuscation) { return JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(format(SingleNodeCallControllerTemplate_1.SingleNodeCallControllerTemplate(), { singleNodeCallControllerFunctionName: this.callsControllerFunctionName - }), __assign({}, NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET, { seed: this.options.seed })).getObfuscatedCode(); + }), tslib_1.__assign({}, NoCustomNodes_1.NO_CUSTOM_NODES_PRESET, { seed: this.options.seed })).getObfuscatedCode(); } return format(SingleNodeCallControllerTemplate_1.SingleNodeCallControllerTemplate(), { singleNodeCallControllerFunctionName: this.callsControllerFunctionName }); } }]); - return NodeCallsControllerFunctionNode; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata("design:type", String)], NodeCallsControllerFunctionNode.prototype, "appendEvent", void 0); -__decorate([Initializable_1.initializable(), __metadata("design:type", String)], NodeCallsControllerFunctionNode.prototype, "callsControllerFunctionName", void 0); -NodeCallsControllerFunctionNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata("design:paramtypes", [Object])], NodeCallsControllerFunctionNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], NodeCallsControllerFunctionNode.prototype, "appendEvent", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], NodeCallsControllerFunctionNode.prototype, "callsControllerFunctionName", void 0); +NodeCallsControllerFunctionNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], NodeCallsControllerFunctionNode); exports.NodeCallsControllerFunctionNode = NodeCallsControllerFunctionNode; /***/ }, -/* 60 */ +/* 76 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __assign = undefined && undefined.__assign || Object.assign || function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) { - if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - } - return t; -}; -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var Initializable_1 = __webpack_require__(3); -var NoCustomNodesPreset_1 = __webpack_require__(21); -var SelfDefendingTemplate_1 = __webpack_require__(105); -var AbstractCustomNode_1 = __webpack_require__(7); -var JavaScriptObfuscator_1 = __webpack_require__(15); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var Initializable_1 = __webpack_require__(9); +var NoCustomNodes_1 = __webpack_require__(30); +var SelfDefendingTemplate_1 = __webpack_require__(122); +var AbstractCustomNode_1 = __webpack_require__(14); +var JavaScriptObfuscator_1 = __webpack_require__(23); +var RandomGeneratorUtils_1 = __webpack_require__(8); var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { - _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); + (0, _inherits3.default)(SelfDefendingUnicodeNode, _AbstractCustomNode_); function SelfDefendingUnicodeNode(options) { - _classCallCheck(this, SelfDefendingUnicodeNode); - - return _possibleConstructorReturn(this, (SelfDefendingUnicodeNode.__proto__ || Object.getPrototypeOf(SelfDefendingUnicodeNode)).call(this, options)); + (0, _classCallCheck3.default)(this, SelfDefendingUnicodeNode); + return (0, _possibleConstructorReturn3.default)(this, (SelfDefendingUnicodeNode.__proto__ || (0, _getPrototypeOf2.default)(SelfDefendingUnicodeNode)).call(this, options)); } - _createClass(SelfDefendingUnicodeNode, [{ + (0, _createClass3.default)(SelfDefendingUnicodeNode, [{ key: "initialize", value: function initialize(callsControllerFunctionName) { this.callsControllerFunctionName = callsControllerFunctionName; } }, { - key: "getCode", - value: function getCode() { + key: "getTemplate", + value: function getTemplate() { return JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(format(SelfDefendingTemplate_1.SelfDefendingTemplate(), { selfDefendingFunctionName: RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomVariableName(), singleNodeCallControllerFunctionName: this.callsControllerFunctionName - }), __assign({}, NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET, { seed: this.options.seed })).getObfuscatedCode(); + }), tslib_1.__assign({}, NoCustomNodes_1.NO_CUSTOM_NODES_PRESET, { seed: this.options.seed })).getObfuscatedCode(); } }]); - return SelfDefendingUnicodeNode; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata("design:type", String)], SelfDefendingUnicodeNode.prototype, "callsControllerFunctionName", void 0); -SelfDefendingUnicodeNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata("design:paramtypes", [Object])], SelfDefendingUnicodeNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], SelfDefendingUnicodeNode.prototype, "callsControllerFunctionName", void 0); +SelfDefendingUnicodeNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], SelfDefendingUnicodeNode); exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 61 */ +/* 77 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _map = __webpack_require__(12); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _map2 = _interopRequireDefault(_map); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var CustomNodes_1 = __webpack_require__(12); -var ObfuscationEvents_1 = __webpack_require__(14); -var AbstractCustomNodeGroup_1 = __webpack_require__(18); -var NodeAppender_1 = __webpack_require__(16); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var Initializable_1 = __webpack_require__(9); +var CustomNodes_1 = __webpack_require__(20); +var ObfuscationEvents_1 = __webpack_require__(21); +var AbstractCustomNodeGroup_1 = __webpack_require__(25); +var NodeAppender_1 = __webpack_require__(24); +var RandomGeneratorUtils_1 = __webpack_require__(8); var SelfDefendingCustomNodeGroup = function (_AbstractCustomNodeGr) { - _inherits(SelfDefendingCustomNodeGroup, _AbstractCustomNodeGr); + (0, _inherits3.default)(SelfDefendingCustomNodeGroup, _AbstractCustomNodeGr); function SelfDefendingCustomNodeGroup(customNodeFactory, obfuscationEventEmitter, options) { - _classCallCheck(this, SelfDefendingCustomNodeGroup); + (0, _classCallCheck3.default)(this, SelfDefendingCustomNodeGroup); - var _this = _possibleConstructorReturn(this, (SelfDefendingCustomNodeGroup.__proto__ || Object.getPrototypeOf(SelfDefendingCustomNodeGroup)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (SelfDefendingCustomNodeGroup.__proto__ || (0, _getPrototypeOf2.default)(SelfDefendingCustomNodeGroup)).call(this, options)); _this.appendEvent = ObfuscationEvents_1.ObfuscationEvents.AfterObfuscation; _this.customNodeFactory = customNodeFactory; @@ -3616,7 +3654,7 @@ var SelfDefendingCustomNodeGroup = function (_AbstractCustomNodeGr) { return _this; } - _createClass(SelfDefendingCustomNodeGroup, [{ + (0, _createClass3.default)(SelfDefendingCustomNodeGroup, [{ key: "appendCustomNodes", value: function appendCustomNodes(blockScopeNode, stackTraceData) { var randomStackTraceIndex = NodeAppender_1.NodeAppender.getRandomStackTraceIndex(stackTraceData.length); @@ -3636,7 +3674,7 @@ var SelfDefendingCustomNodeGroup = function (_AbstractCustomNodeGr) { }, { key: "initialize", value: function initialize() { - this.customNodes = new Map(); + this.customNodes = new _map2.default(); if (!this.options.selfDefending) { return; } @@ -3649,100 +3687,71 @@ var SelfDefendingCustomNodeGroup = function (_AbstractCustomNodeGr) { this.customNodes.set(CustomNodes_1.CustomNodes.NodeCallsControllerFunctionNode, nodeCallsControllerFunctionNode); } }]); - return SelfDefendingCustomNodeGroup; }(AbstractCustomNodeGroup_1.AbstractCustomNodeGroup); -__decorate([Initializable_1.initializable(), __metadata('design:type', Map)], SelfDefendingCustomNodeGroup.prototype, "customNodes", void 0); -SelfDefendingCustomNodeGroup = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), __param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object, Object])], SelfDefendingCustomNodeGroup); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", _map2.default)], SelfDefendingCustomNodeGroup.prototype, "customNodes", void 0); +SelfDefendingCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], SelfDefendingCustomNodeGroup); exports.SelfDefendingCustomNodeGroup = SelfDefendingCustomNodeGroup; /***/ }, -/* 62 */ +/* 78 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __assign = undefined && undefined.__assign || Object.assign || function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) { - if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - } - return t; -}; -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var StringArrayEncoding_1 = __webpack_require__(22); -var Initializable_1 = __webpack_require__(3); -var NoCustomNodesPreset_1 = __webpack_require__(21); -var AtobTemplate_1 = __webpack_require__(94); -var Rc4Template_1 = __webpack_require__(95); -var SelfDefendingTemplate_1 = __webpack_require__(106); -var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(107); -var StringArrayCallsWrapperTemplate_1 = __webpack_require__(108); -var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(109); -var AbstractCustomNode_1 = __webpack_require__(7); -var JavaScriptObfuscator_1 = __webpack_require__(15); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var StringArrayEncoding_1 = __webpack_require__(31); +var Initializable_1 = __webpack_require__(9); +var NoCustomNodes_1 = __webpack_require__(30); +var AtobTemplate_1 = __webpack_require__(111); +var Rc4Template_1 = __webpack_require__(112); +var SelfDefendingTemplate_1 = __webpack_require__(123); +var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(124); +var StringArrayCallsWrapperTemplate_1 = __webpack_require__(125); +var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(126); +var AbstractCustomNode_1 = __webpack_require__(14); +var JavaScriptObfuscator_1 = __webpack_require__(23); var StringArrayCallsWrapper = function (_AbstractCustomNode_) { - _inherits(StringArrayCallsWrapper, _AbstractCustomNode_); + (0, _inherits3.default)(StringArrayCallsWrapper, _AbstractCustomNode_); function StringArrayCallsWrapper(options) { - _classCallCheck(this, StringArrayCallsWrapper); - - return _possibleConstructorReturn(this, (StringArrayCallsWrapper.__proto__ || Object.getPrototypeOf(StringArrayCallsWrapper)).call(this, options)); + (0, _classCallCheck3.default)(this, StringArrayCallsWrapper); + return (0, _possibleConstructorReturn3.default)(this, (StringArrayCallsWrapper.__proto__ || (0, _getPrototypeOf2.default)(StringArrayCallsWrapper)).call(this, options)); } - _createClass(StringArrayCallsWrapper, [{ + (0, _createClass3.default)(StringArrayCallsWrapper, [{ key: "initialize", - value: function initialize(stringArray, stringArrayName, stringArrayCallsWrapperName) { - this.stringArray = stringArray; + value: function initialize(stringArrayStorage, stringArrayName, stringArrayCallsWrapperName) { + this.stringArrayStorage = stringArrayStorage; this.stringArrayName = stringArrayName; this.stringArrayCallsWrapperName = stringArrayCallsWrapperName; } - }, { - key: "getCode", - value: function getCode() { - var decodeNodeTemplate = this.getDecodeStringArrayTemplate(); - return JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(format(StringArrayCallsWrapperTemplate_1.StringArrayCallsWrapperTemplate(), { - decodeNodeTemplate: decodeNodeTemplate, - stringArrayCallsWrapperName: this.stringArrayCallsWrapperName, - stringArrayName: this.stringArrayName - }), __assign({}, NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET, { seed: this.options.seed })).getObfuscatedCode(); - } - }, { - key: "getNodeIdentifier", - value: function getNodeIdentifier() { - return this.stringArrayCallsWrapperName; - } }, { key: "getDecodeStringArrayTemplate", value: function getDecodeStringArrayTemplate() { @@ -3773,88 +3782,162 @@ var StringArrayCallsWrapper = function (_AbstractCustomNode_) { } return decodeStringArrayTemplate; } + }, { + key: "getTemplate", + value: function getTemplate() { + var decodeNodeTemplate = this.getDecodeStringArrayTemplate(); + return JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(format(StringArrayCallsWrapperTemplate_1.StringArrayCallsWrapperTemplate(), { + decodeNodeTemplate: decodeNodeTemplate, + stringArrayCallsWrapperName: this.stringArrayCallsWrapperName, + stringArrayName: this.stringArrayName + }), tslib_1.__assign({}, NoCustomNodes_1.NO_CUSTOM_NODES_PRESET, { seed: this.options.seed })).getObfuscatedCode(); + } }]); - return StringArrayCallsWrapper; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata("design:type", Object)], StringArrayCallsWrapper.prototype, "stringArray", void 0); -__decorate([Initializable_1.initializable(), __metadata("design:type", String)], StringArrayCallsWrapper.prototype, "stringArrayCallsWrapperName", void 0); -__decorate([Initializable_1.initializable(), __metadata("design:type", String)], StringArrayCallsWrapper.prototype, "stringArrayName", void 0); -StringArrayCallsWrapper = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata("design:paramtypes", [Object])], StringArrayCallsWrapper); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], StringArrayCallsWrapper.prototype, "stringArrayStorage", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], StringArrayCallsWrapper.prototype, "stringArrayName", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], StringArrayCallsWrapper.prototype, "stringArrayCallsWrapperName", void 0); +StringArrayCallsWrapper = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], StringArrayCallsWrapper); exports.StringArrayCallsWrapper = StringArrayCallsWrapper; /***/ }, -/* 63 */ +/* 79 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __assign = undefined && undefined.__assign || Object.assign || function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) { - if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - } - return t; -}; -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(8); -var Initializable_1 = __webpack_require__(3); -var NoCustomNodesPreset_1 = __webpack_require__(21); -var SelfDefendingTemplate_1 = __webpack_require__(111); -var StringArrayRotateFunctionTemplate_1 = __webpack_require__(112); -var AbstractCustomNode_1 = __webpack_require__(7); -var JavaScriptObfuscator_1 = __webpack_require__(15); -var RandomGeneratorUtils_1 = __webpack_require__(2); -var Utils_1 = __webpack_require__(4); -var StringArrayRotateFunctionNode = function (_AbstractCustomNode_) { - _inherits(StringArrayRotateFunctionNode, _AbstractCustomNode_); +var _createClass3 = _interopRequireDefault(_createClass2); - function StringArrayRotateFunctionNode(options) { - _classCallCheck(this, StringArrayRotateFunctionNode); +var _possibleConstructorReturn2 = __webpack_require__(7); - return _possibleConstructorReturn(this, (StringArrayRotateFunctionNode.__proto__ || Object.getPrototypeOf(StringArrayRotateFunctionNode)).call(this, options)); +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _get2 = __webpack_require__(46); + +var _get3 = _interopRequireDefault(_get2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var Initializable_1 = __webpack_require__(9); +var StringArrayTemplate_1 = __webpack_require__(127); +var AbstractCustomNode_1 = __webpack_require__(14); +var StringArrayNode = function (_AbstractCustomNode_) { + (0, _inherits3.default)(StringArrayNode, _AbstractCustomNode_); + + function StringArrayNode(options) { + (0, _classCallCheck3.default)(this, StringArrayNode); + return (0, _possibleConstructorReturn3.default)(this, (StringArrayNode.__proto__ || (0, _getPrototypeOf2.default)(StringArrayNode)).call(this, options)); } - _createClass(StringArrayRotateFunctionNode, [{ + (0, _createClass3.default)(StringArrayNode, [{ key: "initialize", - value: function initialize(stringArray, stringArrayName, stringArrayRotateValue) { - this.stringArray = stringArray; + value: function initialize(stringArrayStorage, stringArrayName, stringArrayRotateValue) { + this.stringArrayStorage = stringArrayStorage; this.stringArrayName = stringArrayName; this.stringArrayRotateValue = stringArrayRotateValue; } }, { - key: "getCode", - value: function getCode() { + key: "getNode", + value: function getNode() { + this.stringArrayStorage.rotateArray(this.stringArrayRotateValue); + return (0, _get3.default)(StringArrayNode.prototype.__proto__ || (0, _getPrototypeOf2.default)(StringArrayNode.prototype), "getNode", this).call(this); + } + }, { + key: "getTemplate", + value: function getTemplate() { + return format(StringArrayTemplate_1.StringArrayTemplate(), { + stringArrayName: this.stringArrayName, + stringArray: this.stringArrayStorage.toString() + }); + } + }]); + return StringArrayNode; +}(AbstractCustomNode_1.AbstractCustomNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], StringArrayNode.prototype, "stringArrayStorage", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], StringArrayNode.prototype, "stringArrayName", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Number)], StringArrayNode.prototype, "stringArrayRotateValue", void 0); +StringArrayNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], StringArrayNode); +exports.StringArrayNode = StringArrayNode; + +/***/ }, +/* 80 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _getPrototypeOf = __webpack_require__(5); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var format = __webpack_require__(16); +var Initializable_1 = __webpack_require__(9); +var NoCustomNodes_1 = __webpack_require__(30); +var SelfDefendingTemplate_1 = __webpack_require__(128); +var StringArrayRotateFunctionTemplate_1 = __webpack_require__(129); +var AbstractCustomNode_1 = __webpack_require__(14); +var JavaScriptObfuscator_1 = __webpack_require__(23); +var RandomGeneratorUtils_1 = __webpack_require__(8); +var Utils_1 = __webpack_require__(11); +var StringArrayRotateFunctionNode = function (_AbstractCustomNode_) { + (0, _inherits3.default)(StringArrayRotateFunctionNode, _AbstractCustomNode_); + + function StringArrayRotateFunctionNode(options) { + (0, _classCallCheck3.default)(this, StringArrayRotateFunctionNode); + return (0, _possibleConstructorReturn3.default)(this, (StringArrayRotateFunctionNode.__proto__ || (0, _getPrototypeOf2.default)(StringArrayRotateFunctionNode)).call(this, options)); + } + + (0, _createClass3.default)(StringArrayRotateFunctionNode, [{ + key: "initialize", + value: function initialize(stringArrayStorage, stringArrayName, stringArrayRotateValue) { + this.stringArrayStorage = stringArrayStorage; + this.stringArrayName = stringArrayName; + this.stringArrayRotateValue = stringArrayRotateValue; + } + }, { + key: "getTemplate", + value: function getTemplate() { var code = '', timesName = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomVariableName(), whileFunctionName = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomVariableName(); @@ -3872,79 +3955,83 @@ var StringArrayRotateFunctionNode = function (_AbstractCustomNode_) { stringArrayName: this.stringArrayName, stringArrayRotateValue: Utils_1.Utils.decToHex(this.stringArrayRotateValue), whileFunctionName: whileFunctionName - }), __assign({}, NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET, { seed: this.options.seed })).getObfuscatedCode(); + }), tslib_1.__assign({}, NoCustomNodes_1.NO_CUSTOM_NODES_PRESET, { seed: this.options.seed })).getObfuscatedCode(); } }]); - return StringArrayRotateFunctionNode; }(AbstractCustomNode_1.AbstractCustomNode); -__decorate([Initializable_1.initializable(), __metadata("design:type", Object)], StringArrayRotateFunctionNode.prototype, "stringArray", void 0); -__decorate([Initializable_1.initializable(), __metadata("design:type", String)], StringArrayRotateFunctionNode.prototype, "stringArrayName", void 0); -__decorate([Initializable_1.initializable(), __metadata("design:type", Number)], StringArrayRotateFunctionNode.prototype, "stringArrayRotateValue", void 0); -StringArrayRotateFunctionNode = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata("design:paramtypes", [Object])], StringArrayRotateFunctionNode); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], StringArrayRotateFunctionNode.prototype, "stringArrayStorage", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], StringArrayRotateFunctionNode.prototype, "stringArrayName", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Number)], StringArrayRotateFunctionNode.prototype, "stringArrayRotateValue", void 0); +StringArrayRotateFunctionNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], StringArrayRotateFunctionNode); exports.StringArrayRotateFunctionNode = StringArrayRotateFunctionNode; /***/ }, -/* 64 */ +/* 81 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _from = __webpack_require__(26); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _from2 = _interopRequireDefault(_from); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _map = __webpack_require__(12); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _map2 = _interopRequireDefault(_map); -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 _getPrototypeOf = __webpack_require__(5); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var CustomNodes_1 = __webpack_require__(12); -var ObfuscationEvents_1 = __webpack_require__(14); -var StringArrayNode_1 = __webpack_require__(26); -var AbstractCustomNodeGroup_1 = __webpack_require__(18); -var NodeAppender_1 = __webpack_require__(16); -var RandomGeneratorUtils_1 = __webpack_require__(2); -var StringArrayStorage_1 = __webpack_require__(93); +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var Initializable_1 = __webpack_require__(9); +var CustomNodes_1 = __webpack_require__(20); +var ObfuscationEvents_1 = __webpack_require__(21); +var AbstractCustomNodeGroup_1 = __webpack_require__(25); +var NodeAppender_1 = __webpack_require__(24); +var RandomGeneratorUtils_1 = __webpack_require__(8); +var Utils_1 = __webpack_require__(11); var StringArrayCustomNodeGroup = function (_AbstractCustomNodeGr) { - _inherits(StringArrayCustomNodeGroup, _AbstractCustomNodeGr); + (0, _inherits3.default)(StringArrayCustomNodeGroup, _AbstractCustomNodeGr); - function StringArrayCustomNodeGroup(customNodeFactory, obfuscationEventEmitter, options) { - _classCallCheck(this, StringArrayCustomNodeGroup); + function StringArrayCustomNodeGroup(customNodeFactory, obfuscationEventEmitter, stringArrayStorage, options) { + (0, _classCallCheck3.default)(this, StringArrayCustomNodeGroup); - var _this = _possibleConstructorReturn(this, (StringArrayCustomNodeGroup.__proto__ || Object.getPrototypeOf(StringArrayCustomNodeGroup)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (StringArrayCustomNodeGroup.__proto__ || (0, _getPrototypeOf2.default)(StringArrayCustomNodeGroup)).call(this, options)); _this.appendEvent = ObfuscationEvents_1.ObfuscationEvents.AfterObfuscation; _this.customNodeFactory = customNodeFactory; _this.obfuscationEventEmitter = obfuscationEventEmitter; + _this.stringArrayStorage = stringArrayStorage; return _this; } - _createClass(StringArrayCustomNodeGroup, [{ + (0, _createClass3.default)(StringArrayCustomNodeGroup, [{ key: "appendCustomNodes", value: function appendCustomNodes(blockScopeNode, stackTraceData) { - if (!this.stringArray.getLength()) { + if (!this.stringArrayStorage.getLength()) { return; } this.appendCustomNodeIfExist(CustomNodes_1.CustomNodes.StringArrayNode, function (customNode) { @@ -3960,25 +4047,26 @@ var StringArrayCustomNodeGroup = function (_AbstractCustomNodeGr) { }, { key: "initialize", value: function initialize() { - this.customNodes = new Map(); - this.stringArray = new StringArrayStorage_1.StringArrayStorage(); + this.customNodes = new _map2.default(); if (!this.options.stringArray) { return; } var stringArrayNode = this.customNodeFactory(CustomNodes_1.CustomNodes.StringArrayNode); var stringArrayCallsWrapper = this.customNodeFactory(CustomNodes_1.CustomNodes.StringArrayCallsWrapper); var stringArrayRotateFunctionNode = this.customNodeFactory(CustomNodes_1.CustomNodes.StringArrayRotateFunctionNode); - var stringArrayName = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomVariableName(StringArrayNode_1.StringArrayNode.ARRAY_RANDOM_LENGTH); - var stringArrayCallsWrapperName = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomVariableName(StringArrayNode_1.StringArrayNode.ARRAY_RANDOM_LENGTH); + var stringArrayStorageId = this.stringArrayStorage.getStorageId(); + var reversedStorageId = (0, _from2.default)(stringArrayStorageId).reverse().join(''); + var stringArrayName = "_" + Utils_1.Utils.hexadecimalPrefix + stringArrayStorageId; + var stringArrayCallsWrapperName = "_" + Utils_1.Utils.hexadecimalPrefix + reversedStorageId; var stringArrayRotateValue = void 0; if (this.options.rotateStringArray) { stringArrayRotateValue = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomInteger(100, 500); } else { stringArrayRotateValue = 0; } - stringArrayNode.initialize(this.stringArray, stringArrayName, stringArrayRotateValue); - stringArrayCallsWrapper.initialize(this.stringArray, stringArrayName, stringArrayCallsWrapperName); - stringArrayRotateFunctionNode.initialize(this.stringArray, stringArrayName, stringArrayRotateValue); + stringArrayNode.initialize(this.stringArrayStorage, stringArrayName, stringArrayRotateValue); + stringArrayCallsWrapper.initialize(this.stringArrayStorage, stringArrayName, stringArrayCallsWrapperName); + stringArrayRotateFunctionNode.initialize(this.stringArrayStorage, stringArrayName, stringArrayRotateValue); this.customNodes.set(CustomNodes_1.CustomNodes.StringArrayNode, stringArrayNode); this.customNodes.set(CustomNodes_1.CustomNodes.StringArrayCallsWrapper, stringArrayCallsWrapper); if (this.options.rotateStringArray) { @@ -3986,128 +4074,135 @@ var StringArrayCustomNodeGroup = function (_AbstractCustomNodeGr) { } } }]); - return StringArrayCustomNodeGroup; }(AbstractCustomNodeGroup_1.AbstractCustomNodeGroup); -__decorate([Initializable_1.initializable(), __metadata('design:type', Map)], StringArrayCustomNodeGroup.prototype, "customNodes", void 0); -__decorate([Initializable_1.initializable(), __metadata('design:type', Object)], StringArrayCustomNodeGroup.prototype, "stringArray", void 0); -StringArrayCustomNodeGroup = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), __param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object, Object])], StringArrayCustomNodeGroup); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", _map2.default)], StringArrayCustomNodeGroup.prototype, "customNodes", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], StringArrayCustomNodeGroup.prototype, "stringArrayStorage", void 0); +StringArrayCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object, Object])], StringArrayCustomNodeGroup); exports.StringArrayCustomNodeGroup = StringArrayCustomNodeGroup; /***/ }, -/* 65 */ +/* 82 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var Utils_1 = __webpack_require__(4); +var Utils_1 = __webpack_require__(11); exports.VisitorDirection = Utils_1.Utils.strEnumify({ enter: 'enter', leave: 'leave' }); /***/ }, -/* 66 */ +/* 83 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf = __webpack_require__(5); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck2 = __webpack_require__(0); -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 _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var inversify_1 = __webpack_require__(0); -var events_1 = __webpack_require__(117); +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var events_1 = __webpack_require__(139); inversify_1.decorate(inversify_1.injectable(), events_1.EventEmitter); var ObfuscationEventEmitter = function (_events_1$EventEmitte) { - _inherits(ObfuscationEventEmitter, _events_1$EventEmitte); + (0, _inherits3.default)(ObfuscationEventEmitter, _events_1$EventEmitte); function ObfuscationEventEmitter() { - _classCallCheck(this, ObfuscationEventEmitter); - - return _possibleConstructorReturn(this, (ObfuscationEventEmitter.__proto__ || Object.getPrototypeOf(ObfuscationEventEmitter)).apply(this, arguments)); + (0, _classCallCheck3.default)(this, ObfuscationEventEmitter); + return (0, _possibleConstructorReturn3.default)(this, (ObfuscationEventEmitter.__proto__ || (0, _getPrototypeOf2.default)(ObfuscationEventEmitter)).apply(this, arguments)); } return ObfuscationEventEmitter; }(events_1.EventEmitter); -ObfuscationEventEmitter = __decorate([inversify_1.injectable(), __metadata('design:paramtypes', [])], ObfuscationEventEmitter); +ObfuscationEventEmitter = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], ObfuscationEventEmitter); exports.ObfuscationEventEmitter = ObfuscationEventEmitter; /***/ }, -/* 67 */ +/* 84 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getIterator2 = __webpack_require__(22); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getIterator3 = _interopRequireDefault(_getIterator2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _map = __webpack_require__(12); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _map2 = _interopRequireDefault(_map); -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 _getPrototypeOf = __webpack_require__(5); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(6); -var CustomNodes_1 = __webpack_require__(12); -var NodeType_1 = __webpack_require__(9); -var AbstractNodeTransformer_1 = __webpack_require__(11); -var Node_1 = __webpack_require__(5); -var NodeAppender_1 = __webpack_require__(16); -var NodeControlFlowReplacers_1 = __webpack_require__(29); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var estraverse = __webpack_require__(13); +var _ = __webpack_require__(49); +var CustomNodes_1 = __webpack_require__(20); +var NodeType_1 = __webpack_require__(17); +var AbstractNodeTransformer_1 = __webpack_require__(18); +var Node_1 = __webpack_require__(10); +var NodeAppender_1 = __webpack_require__(24); +var NodeControlFlowReplacers_1 = __webpack_require__(40); +var NodeUtils_1 = __webpack_require__(15); +var RandomGeneratorUtils_1 = __webpack_require__(8); var FunctionControlFlowTransformer = FunctionControlFlowTransformer_1 = function (_AbstractNodeTransfor) { - _inherits(FunctionControlFlowTransformer, _AbstractNodeTransfor); + (0, _inherits3.default)(FunctionControlFlowTransformer, _AbstractNodeTransfor); function FunctionControlFlowTransformer(controlFlowStorageFactory, controlFlowReplacerFactory, customNodeFactory, options) { - _classCallCheck(this, FunctionControlFlowTransformer); + (0, _classCallCheck3.default)(this, FunctionControlFlowTransformer); - var _this = _possibleConstructorReturn(this, (FunctionControlFlowTransformer.__proto__ || Object.getPrototypeOf(FunctionControlFlowTransformer)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (FunctionControlFlowTransformer.__proto__ || (0, _getPrototypeOf2.default)(FunctionControlFlowTransformer)).call(this, options)); + _this.controlFlowData = new _map2.default(); + _this.controlFlowNodesList = []; _this.controlFlowStorageFactory = controlFlowStorageFactory; _this.controlFlowReplacerFactory = controlFlowReplacerFactory; _this.customNodeFactory = customNodeFactory; return _this; } - _createClass(FunctionControlFlowTransformer, [{ + (0, _createClass3.default)(FunctionControlFlowTransformer, [{ key: "transformNode", value: function transformNode(functionNode) { this.changeFunctionBodyControlFlow(functionNode); @@ -4121,450 +4216,479 @@ var FunctionControlFlowTransformer = FunctionControlFlowTransformer_1 = function return; } var controlFlowStorage = this.controlFlowStorageFactory(); - var controlFlowStorageCustomNodeName = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomVariableName(6); + var hostNode = FunctionControlFlowTransformer_1.getHostNode(functionNode); + if (!this.controlFlowData.has(hostNode)) { + this.controlFlowData.set(hostNode, controlFlowStorage); + } else { + hostNode.body = FunctionControlFlowTransformer_1.removeOldControlFlowNodeFromHostNodeBody(hostNode.body, this.controlFlowNodesList); + var hostControlFlowStorage = this.controlFlowData.get(hostNode); + controlFlowStorage.mergeWith(hostControlFlowStorage, true); + this.controlFlowData.set(hostNode, controlFlowStorage); + } estraverse.replace(functionNode.body, { enter: function enter(node, parentNode) { + if (RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomFloat(0, 1) > _this2.options.controlFlowFlatteningThreshold) { + return; + } var controlFlowReplacerName = FunctionControlFlowTransformer_1.controlFlowReplacersMap.get(node.type); if (controlFlowReplacerName === undefined) { return; } - var controlFlowStorageCallCustomNode = _this2.controlFlowReplacerFactory(controlFlowReplacerName).replace(node, parentNode, controlFlowStorage, controlFlowStorageCustomNodeName); - if (!controlFlowStorageCallCustomNode) { - return; - } - var statementNode = controlFlowStorageCallCustomNode.getNode()[0]; - if (!statementNode || !Node_1.Node.isExpressionStatementNode(statementNode)) { - throw new Error("`controlFlowStorageCallCustomNode.getNode()` should returns array with `ExpressionStatement` node"); - } - return statementNode.expression; + return tslib_1.__assign({}, _this2.controlFlowReplacerFactory(controlFlowReplacerName).replace(node, parentNode, controlFlowStorage), { parentNode: parentNode }); } }); if (!controlFlowStorage.getLength()) { return; } var controlFlowStorageCustomNode = this.customNodeFactory(CustomNodes_1.CustomNodes.ControlFlowStorageNode); - controlFlowStorageCustomNode.initialize(controlFlowStorage, controlFlowStorageCustomNodeName); - NodeAppender_1.NodeAppender.prependNode(functionNode.body, controlFlowStorageCustomNode.getNode()); + controlFlowStorageCustomNode.initialize(controlFlowStorage); + var controlFlowStorageNode = controlFlowStorageCustomNode.getNode(); + this.controlFlowNodesList.push(controlFlowStorageNode); + NodeAppender_1.NodeAppender.prependNode(hostNode, controlFlowStorageNode); + } + }], [{ + key: "getHostNode", + value: function getHostNode(functionNode) { + var blockScopesOfNode = NodeUtils_1.NodeUtils.getBlockScopesOfNode(functionNode); + if (blockScopesOfNode.length === 1) { + return functionNode.body; + } else { + blockScopesOfNode.pop(); + } + if (blockScopesOfNode.length > FunctionControlFlowTransformer_1.hostNodeSearchMinDepth) { + blockScopesOfNode.splice(0, FunctionControlFlowTransformer_1.hostNodeSearchMinDepth); + } + if (blockScopesOfNode.length > FunctionControlFlowTransformer_1.hostNodeSearchMaxDepth) { + blockScopesOfNode.length = FunctionControlFlowTransformer_1.hostNodeSearchMaxDepth; + } + return RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().pickone(blockScopesOfNode); + } + }, { + key: "removeOldControlFlowNodeFromHostNodeBody", + value: function removeOldControlFlowNodeFromHostNodeBody(hostNodeBody, controlFlowNodesList) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator3.default)(controlFlowNodesList), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var controlFlowNode = _step.value; + + var firstIndexOfNode = hostNodeBody.indexOf(controlFlowNode[0]); + if (firstIndexOfNode === -1) { + continue; + } + return _.difference(hostNodeBody, controlFlowNode); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return hostNodeBody; } }]); - return FunctionControlFlowTransformer; }(AbstractNodeTransformer_1.AbstractNodeTransformer); -FunctionControlFlowTransformer.controlFlowReplacersMap = new Map([[NodeType_1.NodeType.BinaryExpression, NodeControlFlowReplacers_1.NodeControlFlowReplacers.BinaryExpressionControlFlowReplacer]]); -FunctionControlFlowTransformer = FunctionControlFlowTransformer_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory>'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata("design:paramtypes", [Function, Function, Function, Object])], FunctionControlFlowTransformer); +FunctionControlFlowTransformer.controlFlowReplacersMap = new _map2.default([[NodeType_1.NodeType.BinaryExpression, NodeControlFlowReplacers_1.NodeControlFlowReplacers.BinaryExpressionControlFlowReplacer]]); +FunctionControlFlowTransformer.hostNodeSearchMinDepth = 2; +FunctionControlFlowTransformer.hostNodeSearchMaxDepth = 10; +FunctionControlFlowTransformer = FunctionControlFlowTransformer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory>'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Function, Function, Object])], FunctionControlFlowTransformer); exports.FunctionControlFlowTransformer = FunctionControlFlowTransformer; var FunctionControlFlowTransformer_1; /***/ }, -/* 68 */ +/* 85 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var AbstractControlFlowReplacer = function AbstractControlFlowReplacer(options) { + (0, _classCallCheck3.default)(this, AbstractControlFlowReplacer); + + this.options = options; }; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var RandomGeneratorUtils_1 = __webpack_require__(2); -var AbstractControlFlowReplacer = function () { - function AbstractControlFlowReplacer(options) { - _classCallCheck(this, AbstractControlFlowReplacer); - - this.options = options; - } - - _createClass(AbstractControlFlowReplacer, null, [{ - key: "getStorageKey", - value: function getStorageKey() { - return RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().string({ - length: 3, - pool: RandomGeneratorUtils_1.RandomGeneratorUtils.randomGeneratorPool - }); - } - }]); - - return AbstractControlFlowReplacer; -}(); -AbstractControlFlowReplacer = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], AbstractControlFlowReplacer); +AbstractControlFlowReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractControlFlowReplacer); exports.AbstractControlFlowReplacer = AbstractControlFlowReplacer; /***/ }, -/* 69 */ +/* 86 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _map = __webpack_require__(12); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _map2 = _interopRequireDefault(_map); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var escodegen = __webpack_require__(17); -var CustomNodes_1 = __webpack_require__(12); -var AbstractControlFlowReplacer_1 = __webpack_require__(68); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var CustomNodes_1 = __webpack_require__(20); +var AbstractControlFlowReplacer_1 = __webpack_require__(85); +var Node_1 = __webpack_require__(10); +var NodeUtils_1 = __webpack_require__(15); +var RandomGeneratorUtils_1 = __webpack_require__(8); var BinaryExpressionControlFlowReplacer = BinaryExpressionControlFlowReplacer_1 = function (_AbstractControlFlowR) { - _inherits(BinaryExpressionControlFlowReplacer, _AbstractControlFlowR); + (0, _inherits3.default)(BinaryExpressionControlFlowReplacer, _AbstractControlFlowR); function BinaryExpressionControlFlowReplacer(customNodeFactory, options) { - _classCallCheck(this, BinaryExpressionControlFlowReplacer); + (0, _classCallCheck3.default)(this, BinaryExpressionControlFlowReplacer); - var _this = _possibleConstructorReturn(this, (BinaryExpressionControlFlowReplacer.__proto__ || Object.getPrototypeOf(BinaryExpressionControlFlowReplacer)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (BinaryExpressionControlFlowReplacer.__proto__ || (0, _getPrototypeOf2.default)(BinaryExpressionControlFlowReplacer)).call(this, options)); + _this.binaryOperatorsDataByControlFlowStorageId = new _map2.default(); _this.customNodeFactory = customNodeFactory; return _this; } - _createClass(BinaryExpressionControlFlowReplacer, [{ + (0, _createClass3.default)(BinaryExpressionControlFlowReplacer, [{ key: "replace", - value: function replace(binaryExpressionNode, parentNode, controlFlowStorage, controlFlowStorageCustomNodeName) { - var key = AbstractControlFlowReplacer_1.AbstractControlFlowReplacer.getStorageKey(); - var binaryExpressionFunctionNode = this.customNodeFactory(CustomNodes_1.CustomNodes.BinaryExpressionFunctionNode); - var controlFlowStorageCallNode = this.customNodeFactory(CustomNodes_1.CustomNodes.ControlFlowStorageCallNode); - binaryExpressionFunctionNode.initialize(binaryExpressionNode.operator); - controlFlowStorageCallNode.initialize(controlFlowStorageCustomNodeName, key, BinaryExpressionControlFlowReplacer_1.getExpressionValue(binaryExpressionNode.left), BinaryExpressionControlFlowReplacer_1.getExpressionValue(binaryExpressionNode.right)); - controlFlowStorage.set(key, binaryExpressionFunctionNode); - return controlFlowStorageCallNode; + value: function replace(binaryExpressionNode, parentNode, controlFlowStorage) { + var controlFlowStorageId = controlFlowStorage.getStorageId(); + var controlFlowStorageCallCustomNode = this.customNodeFactory(CustomNodes_1.CustomNodes.ControlFlowStorageCallNode); + var storageKeysByBinaryOperator = BinaryExpressionControlFlowReplacer_1.getStorageKeysByBinaryOperatorForCurrentStorage(this.binaryOperatorsDataByControlFlowStorageId, controlFlowStorageId); + var storageKeysForCurrentOperator = storageKeysByBinaryOperator.get(binaryExpressionNode.operator); + var storageKey = void 0; + if (RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomFloat(0, 1) > BinaryExpressionControlFlowReplacer_1.useExistingOperatorKeyThreshold && storageKeysForCurrentOperator && storageKeysForCurrentOperator.length) { + storageKey = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().pickone(storageKeysForCurrentOperator); + } else { + var binaryExpressionFunctionCustomNode = this.customNodeFactory(CustomNodes_1.CustomNodes.BinaryExpressionFunctionNode); + binaryExpressionFunctionCustomNode.initialize(binaryExpressionNode.operator); + storageKey = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomString(3); + storageKeysByBinaryOperator.set(binaryExpressionNode.operator, [storageKey]); + this.binaryOperatorsDataByControlFlowStorageId.set(controlFlowStorageId, storageKeysByBinaryOperator); + controlFlowStorage.set(storageKey, binaryExpressionFunctionCustomNode); + } + controlFlowStorageCallCustomNode.initialize(controlFlowStorageId, storageKey, NodeUtils_1.NodeUtils.convertStructureToCode([binaryExpressionNode.left]), NodeUtils_1.NodeUtils.convertStructureToCode([binaryExpressionNode.right])); + var statementNode = controlFlowStorageCallCustomNode.getNode()[0]; + if (!statementNode || !Node_1.Node.isExpressionStatementNode(statementNode)) { + throw new Error("`controlFlowStorageCallNode.getNode()[0]` should returns array with `ExpressionStatement` node"); + } + return statementNode.expression; } }], [{ - key: "getExpressionValue", - value: function getExpressionValue(expressionNode) { - return escodegen.generate(expressionNode, { - sourceMapWithCode: true - }).code; + key: "getStorageKeysByBinaryOperatorForCurrentStorage", + value: function getStorageKeysByBinaryOperatorForCurrentStorage(binaryOperatorsDataByControlFlowStorageId, controlFlowStorageId) { + var storageKeysByBinaryOperator = void 0; + if (binaryOperatorsDataByControlFlowStorageId.has(controlFlowStorageId)) { + storageKeysByBinaryOperator = binaryOperatorsDataByControlFlowStorageId.get(controlFlowStorageId); + } else { + storageKeysByBinaryOperator = new _map2.default(); + } + return storageKeysByBinaryOperator; } }]); - return BinaryExpressionControlFlowReplacer; }(AbstractControlFlowReplacer_1.AbstractControlFlowReplacer); -BinaryExpressionControlFlowReplacer = BinaryExpressionControlFlowReplacer_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata("design:paramtypes", [Function, Object])], BinaryExpressionControlFlowReplacer); +BinaryExpressionControlFlowReplacer.useExistingOperatorKeyThreshold = 0.5; +BinaryExpressionControlFlowReplacer = BinaryExpressionControlFlowReplacer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], BinaryExpressionControlFlowReplacer); exports.BinaryExpressionControlFlowReplacer = BinaryExpressionControlFlowReplacer; var BinaryExpressionControlFlowReplacer_1; /***/ }, -/* 70 */ +/* 87 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(6); -var NodeObfuscatorsReplacers_1 = __webpack_require__(13); -var NodeType_1 = __webpack_require__(9); -var AbstractNodeTransformer_1 = __webpack_require__(11); -var Node_1 = __webpack_require__(5); -var NodeUtils_1 = __webpack_require__(10); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var estraverse = __webpack_require__(13); +var NodeObfuscatorsReplacers_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(17); +var AbstractNodeTransformer_1 = __webpack_require__(18); +var Node_1 = __webpack_require__(10); +var NodeUtils_1 = __webpack_require__(15); +var RandomGeneratorUtils_1 = __webpack_require__(8); var CatchClauseObfuscator = function (_AbstractNodeTransfor) { - _inherits(CatchClauseObfuscator, _AbstractNodeTransfor); + (0, _inherits3.default)(CatchClauseObfuscator, _AbstractNodeTransfor); function CatchClauseObfuscator(replacersFactory, options) { - _classCallCheck(this, CatchClauseObfuscator); + (0, _classCallCheck3.default)(this, CatchClauseObfuscator); - var _this = _possibleConstructorReturn(this, (CatchClauseObfuscator.__proto__ || Object.getPrototypeOf(CatchClauseObfuscator)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (CatchClauseObfuscator.__proto__ || (0, _getPrototypeOf2.default)(CatchClauseObfuscator)).call(this, options)); _this.identifierReplacer = replacersFactory(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.IdentifierReplacer); return _this; } - _createClass(CatchClauseObfuscator, [{ + (0, _createClass3.default)(CatchClauseObfuscator, [{ key: "transformNode", value: function transformNode(catchClauseNode) { - this.identifierReplacer.setPrefix(RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().string({ - length: 5, - pool: RandomGeneratorUtils_1.RandomGeneratorUtils.randomGeneratorPool - })); - this.storeCatchClauseParam(catchClauseNode); - this.replaceCatchClauseParam(catchClauseNode); + var nodeIdentifier = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomString(7); + this.storeCatchClauseParam(catchClauseNode, nodeIdentifier); + this.replaceCatchClauseParam(catchClauseNode, nodeIdentifier); } }, { key: "storeCatchClauseParam", - value: function storeCatchClauseParam(catchClauseNode) { + value: function storeCatchClauseParam(catchClauseNode, nodeIdentifier) { var _this2 = this; NodeUtils_1.NodeUtils.typedTraverse(catchClauseNode.param, NodeType_1.NodeType.Identifier, { enter: function enter(node) { - return _this2.identifierReplacer.storeNames(node.name); + return _this2.identifierReplacer.storeNames(node.name, nodeIdentifier); } }); } }, { key: "replaceCatchClauseParam", - value: function replaceCatchClauseParam(catchClauseNode) { + value: function replaceCatchClauseParam(catchClauseNode, nodeIdentifier) { var _this3 = this; estraverse.replace(catchClauseNode, { enter: function enter(node, parentNode) { if (Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) { - node.name = _this3.identifierReplacer.replace(node.name); + node.name = _this3.identifierReplacer.replace(node.name, nodeIdentifier); } } }); } }]); - return CatchClauseObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); -CatchClauseObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object])], CatchClauseObfuscator); +CatchClauseObfuscator = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], CatchClauseObfuscator); exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 71 */ +/* 88 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(6); -var NodeObfuscatorsReplacers_1 = __webpack_require__(13); -var NodeType_1 = __webpack_require__(9); -var AbstractNodeTransformer_1 = __webpack_require__(11); -var Node_1 = __webpack_require__(5); -var NodeUtils_1 = __webpack_require__(10); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var estraverse = __webpack_require__(13); +var NodeObfuscatorsReplacers_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(17); +var AbstractNodeTransformer_1 = __webpack_require__(18); +var Node_1 = __webpack_require__(10); +var NodeUtils_1 = __webpack_require__(15); +var RandomGeneratorUtils_1 = __webpack_require__(8); var FunctionDeclarationObfuscator = function (_AbstractNodeTransfor) { - _inherits(FunctionDeclarationObfuscator, _AbstractNodeTransfor); + (0, _inherits3.default)(FunctionDeclarationObfuscator, _AbstractNodeTransfor); function FunctionDeclarationObfuscator(nodeObfuscatorsReplacersFactory, options) { - _classCallCheck(this, FunctionDeclarationObfuscator); + (0, _classCallCheck3.default)(this, FunctionDeclarationObfuscator); - var _this = _possibleConstructorReturn(this, (FunctionDeclarationObfuscator.__proto__ || Object.getPrototypeOf(FunctionDeclarationObfuscator)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (FunctionDeclarationObfuscator.__proto__ || (0, _getPrototypeOf2.default)(FunctionDeclarationObfuscator)).call(this, options)); _this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.IdentifierReplacer); return _this; } - _createClass(FunctionDeclarationObfuscator, [{ + (0, _createClass3.default)(FunctionDeclarationObfuscator, [{ key: "transformNode", value: function transformNode(functionDeclarationNode, parentNode) { - this.identifierReplacer.setPrefix(RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().string({ - length: 5, - pool: RandomGeneratorUtils_1.RandomGeneratorUtils.randomGeneratorPool - })); - var blockScopeOfFunctionDeclarationNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(functionDeclarationNode); + var nodeIdentifier = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomString(7); + var blockScopeOfFunctionDeclarationNode = NodeUtils_1.NodeUtils.getBlockScopesOfNode(functionDeclarationNode)[0]; if (blockScopeOfFunctionDeclarationNode.type === NodeType_1.NodeType.Program) { return; } - this.storeFunctionName(functionDeclarationNode); - this.replaceFunctionName(blockScopeOfFunctionDeclarationNode); + this.storeFunctionName(functionDeclarationNode, nodeIdentifier); + this.replaceFunctionName(blockScopeOfFunctionDeclarationNode, nodeIdentifier); } }, { key: "storeFunctionName", - value: function storeFunctionName(functionDeclarationNode) { + value: function storeFunctionName(functionDeclarationNode, nodeIdentifier) { var _this2 = this; NodeUtils_1.NodeUtils.typedTraverse(functionDeclarationNode.id, NodeType_1.NodeType.Identifier, { enter: function enter(node) { - return _this2.identifierReplacer.storeNames(node.name); + return _this2.identifierReplacer.storeNames(node.name, nodeIdentifier); } }); } }, { key: "replaceFunctionName", - value: function replaceFunctionName(scopeNode) { + value: function replaceFunctionName(scopeNode, nodeIdentifier) { var _this3 = this; estraverse.replace(scopeNode, { enter: function enter(node, parentNode) { if (Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) { - node.name = _this3.identifierReplacer.replace(node.name); + node.name = _this3.identifierReplacer.replace(node.name, nodeIdentifier); } } }); } }]); - return FunctionDeclarationObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); -FunctionDeclarationObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object])], FunctionDeclarationObfuscator); +FunctionDeclarationObfuscator = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], FunctionDeclarationObfuscator); exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 72 */ +/* 89 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(6); -var NodeObfuscatorsReplacers_1 = __webpack_require__(13); -var NodeType_1 = __webpack_require__(9); -var AbstractNodeTransformer_1 = __webpack_require__(11); -var Node_1 = __webpack_require__(5); -var NodeUtils_1 = __webpack_require__(10); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var estraverse = __webpack_require__(13); +var NodeObfuscatorsReplacers_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(17); +var AbstractNodeTransformer_1 = __webpack_require__(18); +var Node_1 = __webpack_require__(10); +var NodeUtils_1 = __webpack_require__(15); +var RandomGeneratorUtils_1 = __webpack_require__(8); var FunctionObfuscator = function (_AbstractNodeTransfor) { - _inherits(FunctionObfuscator, _AbstractNodeTransfor); + (0, _inherits3.default)(FunctionObfuscator, _AbstractNodeTransfor); function FunctionObfuscator(nodeObfuscatorsReplacersFactory, options) { - _classCallCheck(this, FunctionObfuscator); + (0, _classCallCheck3.default)(this, FunctionObfuscator); - var _this = _possibleConstructorReturn(this, (FunctionObfuscator.__proto__ || Object.getPrototypeOf(FunctionObfuscator)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (FunctionObfuscator.__proto__ || (0, _getPrototypeOf2.default)(FunctionObfuscator)).call(this, options)); _this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.IdentifierReplacer); return _this; } - _createClass(FunctionObfuscator, [{ + (0, _createClass3.default)(FunctionObfuscator, [{ key: "transformNode", value: function transformNode(functionNode) { - this.identifierReplacer.setPrefix(RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().string({ - length: 5, - pool: RandomGeneratorUtils_1.RandomGeneratorUtils.randomGeneratorPool - })); - this.storeFunctionParams(functionNode); - this.replaceFunctionParams(functionNode); + var nodeIdentifier = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomString(7); + this.storeFunctionParams(functionNode, nodeIdentifier); + this.replaceFunctionParams(functionNode, nodeIdentifier); } }, { key: "storeFunctionParams", - value: function storeFunctionParams(functionNode) { + value: function storeFunctionParams(functionNode, nodeIdentifier) { var _this2 = this; functionNode.params.forEach(function (paramsNode) { NodeUtils_1.NodeUtils.typedTraverse(paramsNode, NodeType_1.NodeType.Identifier, { enter: function enter(node) { - return _this2.identifierReplacer.storeNames(node.name); + return _this2.identifierReplacer.storeNames(node.name, nodeIdentifier); } }); }); } }, { key: "replaceFunctionParams", - value: function replaceFunctionParams(functionNode) { + value: function replaceFunctionParams(functionNode, nodeIdentifier) { var _this3 = this; var traverseVisitor = { enter: function enter(node, parentNode) { if (Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) { - var newNodeName = _this3.identifierReplacer.replace(node.name); + var newNodeName = _this3.identifierReplacer.replace(node.name, nodeIdentifier); if (node.name !== newNodeName) { node.name = newNodeName; node.obfuscated = true; @@ -4578,166 +4702,159 @@ var FunctionObfuscator = function (_AbstractNodeTransfor) { estraverse.replace(functionNode.body, traverseVisitor); } }]); - return FunctionObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); -FunctionObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object])], FunctionObfuscator); +FunctionObfuscator = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], FunctionObfuscator); exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 73 */ +/* 90 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(6); -var NodeObfuscatorsReplacers_1 = __webpack_require__(13); -var NodeType_1 = __webpack_require__(9); -var AbstractNodeTransformer_1 = __webpack_require__(11); -var Node_1 = __webpack_require__(5); -var NodeUtils_1 = __webpack_require__(10); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var estraverse = __webpack_require__(13); +var NodeObfuscatorsReplacers_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(17); +var AbstractNodeTransformer_1 = __webpack_require__(18); +var Node_1 = __webpack_require__(10); +var NodeUtils_1 = __webpack_require__(15); +var RandomGeneratorUtils_1 = __webpack_require__(8); var LabeledStatementObfuscator = function (_AbstractNodeTransfor) { - _inherits(LabeledStatementObfuscator, _AbstractNodeTransfor); + (0, _inherits3.default)(LabeledStatementObfuscator, _AbstractNodeTransfor); function LabeledStatementObfuscator(nodeObfuscatorsReplacersFactory, options) { - _classCallCheck(this, LabeledStatementObfuscator); + (0, _classCallCheck3.default)(this, LabeledStatementObfuscator); - var _this = _possibleConstructorReturn(this, (LabeledStatementObfuscator.__proto__ || Object.getPrototypeOf(LabeledStatementObfuscator)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (LabeledStatementObfuscator.__proto__ || (0, _getPrototypeOf2.default)(LabeledStatementObfuscator)).call(this, options)); _this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.IdentifierReplacer); return _this; } - _createClass(LabeledStatementObfuscator, [{ + (0, _createClass3.default)(LabeledStatementObfuscator, [{ key: "transformNode", value: function transformNode(labeledStatementNode) { - this.identifierReplacer.setPrefix(RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().string({ - length: 5, - pool: RandomGeneratorUtils_1.RandomGeneratorUtils.randomGeneratorPool - })); - this.storeLabeledStatementName(labeledStatementNode); - this.replaceLabeledStatementName(labeledStatementNode); + var nodeIdentifier = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomString(7); + this.storeLabeledStatementName(labeledStatementNode, nodeIdentifier); + this.replaceLabeledStatementName(labeledStatementNode, nodeIdentifier); } }, { key: "storeLabeledStatementName", - value: function storeLabeledStatementName(labeledStatementNode) { + value: function storeLabeledStatementName(labeledStatementNode, nodeIdentifier) { var _this2 = this; NodeUtils_1.NodeUtils.typedTraverse(labeledStatementNode.label, NodeType_1.NodeType.Identifier, { enter: function enter(node) { - return _this2.identifierReplacer.storeNames(node.name); + return _this2.identifierReplacer.storeNames(node.name, nodeIdentifier); } }); } }, { key: "replaceLabeledStatementName", - value: function replaceLabeledStatementName(labeledStatementNode) { + value: function replaceLabeledStatementName(labeledStatementNode, nodeIdentifier) { var _this3 = this; estraverse.replace(labeledStatementNode, { enter: function enter(node, parentNode) { if (Node_1.Node.isLabelIdentifierNode(node, parentNode)) { - node.name = _this3.identifierReplacer.replace(node.name); + node.name = _this3.identifierReplacer.replace(node.name, nodeIdentifier); } } }); } }]); - return LabeledStatementObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); -LabeledStatementObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object])], LabeledStatementObfuscator); +LabeledStatementObfuscator = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], LabeledStatementObfuscator); exports.LabeledStatementObfuscator = LabeledStatementObfuscator; /***/ }, -/* 74 */ +/* 91 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof2 = __webpack_require__(136); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _typeof3 = _interopRequireDefault(_typeof2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var escodegen = __webpack_require__(17); -var NodeObfuscatorsReplacers_1 = __webpack_require__(13); -var AbstractNodeTransformer_1 = __webpack_require__(11); -var Node_1 = __webpack_require__(5); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var escodegen = __webpack_require__(27); +var NodeObfuscatorsReplacers_1 = __webpack_require__(19); +var AbstractNodeTransformer_1 = __webpack_require__(18); +var Node_1 = __webpack_require__(10); var LiteralObfuscator = function (_AbstractNodeTransfor) { - _inherits(LiteralObfuscator, _AbstractNodeTransfor); + (0, _inherits3.default)(LiteralObfuscator, _AbstractNodeTransfor); function LiteralObfuscator(replacersFactory, options) { - _classCallCheck(this, LiteralObfuscator); + (0, _classCallCheck3.default)(this, LiteralObfuscator); - var _this = _possibleConstructorReturn(this, (LiteralObfuscator.__proto__ || Object.getPrototypeOf(LiteralObfuscator)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (LiteralObfuscator.__proto__ || (0, _getPrototypeOf2.default)(LiteralObfuscator)).call(this, options)); _this.replacersFactory = replacersFactory; return _this; } - _createClass(LiteralObfuscator, [{ + (0, _createClass3.default)(LiteralObfuscator, [{ key: "transformNode", value: function transformNode(literalNode, parentNode) { if (Node_1.Node.isPropertyNode(parentNode) && parentNode.key === literalNode) { return; } var content = void 0; - switch (_typeof(literalNode.value)) { + switch ((0, _typeof3.default)(literalNode.value)) { case 'boolean': content = this.replacersFactory(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.BooleanReplacer).replace(literalNode.value); break; @@ -4756,66 +4873,66 @@ var LiteralObfuscator = function (_AbstractNodeTransfor) { }; } }]); - return LiteralObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); -LiteralObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object])], LiteralObfuscator); +LiteralObfuscator = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], LiteralObfuscator); exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 75 */ +/* 92 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _assign = __webpack_require__(34); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _assign2 = _interopRequireDefault(_assign); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var escodegen = __webpack_require__(17); -var estraverse = __webpack_require__(6); -var NodeObfuscatorsReplacers_1 = __webpack_require__(13); -var NodeType_1 = __webpack_require__(9); -var AbstractNodeTransformer_1 = __webpack_require__(11); -var Node_1 = __webpack_require__(5); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var escodegen = __webpack_require__(27); +var estraverse = __webpack_require__(13); +var NodeObfuscatorsReplacers_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(17); +var AbstractNodeTransformer_1 = __webpack_require__(18); +var Node_1 = __webpack_require__(10); var MemberExpressionObfuscator = function (_AbstractNodeTransfor) { - _inherits(MemberExpressionObfuscator, _AbstractNodeTransfor); + (0, _inherits3.default)(MemberExpressionObfuscator, _AbstractNodeTransfor); function MemberExpressionObfuscator(replacersFactory, options) { - _classCallCheck(this, MemberExpressionObfuscator); + (0, _classCallCheck3.default)(this, MemberExpressionObfuscator); - var _this = _possibleConstructorReturn(this, (MemberExpressionObfuscator.__proto__ || Object.getPrototypeOf(MemberExpressionObfuscator)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (MemberExpressionObfuscator.__proto__ || (0, _getPrototypeOf2.default)(MemberExpressionObfuscator)).call(this, options)); _this.stringLiteralReplacer = replacersFactory(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.StringLiteralReplacer); return _this; } - _createClass(MemberExpressionObfuscator, [{ + (0, _createClass3.default)(MemberExpressionObfuscator, [{ key: "transformNode", value: function transformNode(memberExpressionNode) { var _this2 = this; @@ -4850,7 +4967,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeTransfor) { value: nodeValue }; delete node.name; - Object.assign(node, literalNode); + (0, _assign2.default)(node, literalNode); } }, { key: "obfuscateLiteralProperty", @@ -4863,65 +4980,60 @@ var MemberExpressionObfuscator = function (_AbstractNodeTransfor) { } } }]); - return MemberExpressionObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); -MemberExpressionObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object])], MemberExpressionObfuscator); +MemberExpressionObfuscator = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], MemberExpressionObfuscator); exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 76 */ +/* 93 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(6); -var NodeObfuscatorsReplacers_1 = __webpack_require__(13); -var AbstractNodeTransformer_1 = __webpack_require__(11); -var Node_1 = __webpack_require__(5); -var Utils_1 = __webpack_require__(4); -var MethodDefinitionObfuscator_1 = function (_AbstractNodeTransfor) { - _inherits(MethodDefinitionObfuscator, _AbstractNodeTransfor); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var estraverse = __webpack_require__(13); +var NodeObfuscatorsReplacers_1 = __webpack_require__(19); +var AbstractNodeTransformer_1 = __webpack_require__(18); +var Node_1 = __webpack_require__(10); +var MethodDefinitionObfuscator = MethodDefinitionObfuscator_1 = function (_AbstractNodeTransfor) { + (0, _inherits3.default)(MethodDefinitionObfuscator, _AbstractNodeTransfor); function MethodDefinitionObfuscator(replacersFactory, options) { - _classCallCheck(this, MethodDefinitionObfuscator); + (0, _classCallCheck3.default)(this, MethodDefinitionObfuscator); - var _this = _possibleConstructorReturn(this, (MethodDefinitionObfuscator.__proto__ || Object.getPrototypeOf(MethodDefinitionObfuscator)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (MethodDefinitionObfuscator.__proto__ || (0, _getPrototypeOf2.default)(MethodDefinitionObfuscator)).call(this, options)); _this.stringLiteralReplacer = replacersFactory(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.StringLiteralReplacer); return _this; } - _createClass(MethodDefinitionObfuscator, [{ + (0, _createClass3.default)(MethodDefinitionObfuscator, [{ key: "transformNode", value: function transformNode(methodDefinitionNode, parentNode) { this.replaceMethodName(methodDefinitionNode); @@ -4933,7 +5045,7 @@ var MethodDefinitionObfuscator_1 = function (_AbstractNodeTransfor) { estraverse.replace(methodDefinitionNode.key, { enter: function enter(node) { - if (Node_1.Node.isIdentifierNode(node) && !Utils_1.Utils.arrayContains(MethodDefinitionObfuscator_1.ignoredNames, node.name) && methodDefinitionNode.computed === false) { + if (Node_1.Node.isIdentifierNode(node) && !MethodDefinitionObfuscator_1.ignoredNames.includes(node.name) && methodDefinitionNode.computed === false) { methodDefinitionNode.computed = true; node.name = _this2.stringLiteralReplacer.replace(node.name); return; @@ -4943,65 +5055,64 @@ var MethodDefinitionObfuscator_1 = function (_AbstractNodeTransfor) { }); } }]); - return MethodDefinitionObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); -var MethodDefinitionObfuscator = MethodDefinitionObfuscator_1; MethodDefinitionObfuscator.ignoredNames = ['constructor']; -MethodDefinitionObfuscator = MethodDefinitionObfuscator_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object])], MethodDefinitionObfuscator); +MethodDefinitionObfuscator = MethodDefinitionObfuscator_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], MethodDefinitionObfuscator); exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; +var MethodDefinitionObfuscator_1; /***/ }, -/* 77 */ +/* 94 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _assign = __webpack_require__(34); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _assign2 = _interopRequireDefault(_assign); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var escodegen = __webpack_require__(17); -var estraverse = __webpack_require__(6); -var NodeType_1 = __webpack_require__(9); -var AbstractNodeTransformer_1 = __webpack_require__(11); -var Node_1 = __webpack_require__(5); -var Utils_1 = __webpack_require__(4); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var escodegen = __webpack_require__(27); +var estraverse = __webpack_require__(13); +var NodeType_1 = __webpack_require__(17); +var AbstractNodeTransformer_1 = __webpack_require__(18); +var Node_1 = __webpack_require__(10); +var Utils_1 = __webpack_require__(11); var ObjectExpressionObfuscator = function (_AbstractNodeTransfor) { - _inherits(ObjectExpressionObfuscator, _AbstractNodeTransfor); + (0, _inherits3.default)(ObjectExpressionObfuscator, _AbstractNodeTransfor); function ObjectExpressionObfuscator(options) { - _classCallCheck(this, ObjectExpressionObfuscator); - - return _possibleConstructorReturn(this, (ObjectExpressionObfuscator.__proto__ || Object.getPrototypeOf(ObjectExpressionObfuscator)).call(this, options)); + (0, _classCallCheck3.default)(this, ObjectExpressionObfuscator); + return (0, _possibleConstructorReturn3.default)(this, (ObjectExpressionObfuscator.__proto__ || (0, _getPrototypeOf2.default)(ObjectExpressionObfuscator)).call(this, options)); } - _createClass(ObjectExpressionObfuscator, [{ + (0, _createClass3.default)(ObjectExpressionObfuscator, [{ key: "transformNode", value: function transformNode(objectExpressionNode) { var _this2 = this; @@ -5047,246 +5158,226 @@ var ObjectExpressionObfuscator = function (_AbstractNodeTransfor) { value: nodeValue }; delete node.name; - Object.assign(node, literalNode); + (0, _assign2.default)(node, literalNode); } }]); - return ObjectExpressionObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); -ObjectExpressionObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], ObjectExpressionObfuscator); +ObjectExpressionObfuscator = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], ObjectExpressionObfuscator); exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 78 */ +/* 95 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(6); -var NodeObfuscatorsReplacers_1 = __webpack_require__(13); -var NodeType_1 = __webpack_require__(9); -var AbstractNodeTransformer_1 = __webpack_require__(11); -var Node_1 = __webpack_require__(5); -var NodeUtils_1 = __webpack_require__(10); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var estraverse = __webpack_require__(13); +var NodeObfuscatorsReplacers_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(17); +var AbstractNodeTransformer_1 = __webpack_require__(18); +var Node_1 = __webpack_require__(10); +var NodeUtils_1 = __webpack_require__(15); +var RandomGeneratorUtils_1 = __webpack_require__(8); var VariableDeclarationObfuscator = function (_AbstractNodeTransfor) { - _inherits(VariableDeclarationObfuscator, _AbstractNodeTransfor); + (0, _inherits3.default)(VariableDeclarationObfuscator, _AbstractNodeTransfor); function VariableDeclarationObfuscator(replacersFactory, options) { - _classCallCheck(this, VariableDeclarationObfuscator); + (0, _classCallCheck3.default)(this, VariableDeclarationObfuscator); - var _this = _possibleConstructorReturn(this, (VariableDeclarationObfuscator.__proto__ || Object.getPrototypeOf(VariableDeclarationObfuscator)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (VariableDeclarationObfuscator.__proto__ || (0, _getPrototypeOf2.default)(VariableDeclarationObfuscator)).call(this, options)); _this.identifierReplacer = replacersFactory(NodeObfuscatorsReplacers_1.NodeObfuscatorsReplacers.IdentifierReplacer); return _this; } - _createClass(VariableDeclarationObfuscator, [{ + (0, _createClass3.default)(VariableDeclarationObfuscator, [{ key: "transformNode", value: function transformNode(variableDeclarationNode, parentNode) { - this.identifierReplacer.setPrefix(RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().string({ - length: 5, - pool: RandomGeneratorUtils_1.RandomGeneratorUtils.randomGeneratorPool - })); - var blockScopeOfVariableDeclarationNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(variableDeclarationNode); + var blockScopeOfVariableDeclarationNode = NodeUtils_1.NodeUtils.getBlockScopesOfNode(variableDeclarationNode)[0]; if (blockScopeOfVariableDeclarationNode.type === NodeType_1.NodeType.Program) { return; } + var nodeIdentifier = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomString(7); var scopeNode = variableDeclarationNode.kind === 'var' ? blockScopeOfVariableDeclarationNode : parentNode; - this.storeVariableNames(variableDeclarationNode); - this.replaceVariableNames(scopeNode); + this.storeVariableNames(variableDeclarationNode, nodeIdentifier); + this.replaceVariableNames(scopeNode, nodeIdentifier); } }, { key: "storeVariableNames", - value: function storeVariableNames(variableDeclarationNode) { + value: function storeVariableNames(variableDeclarationNode, nodeIdentifier) { var _this2 = this; variableDeclarationNode.declarations.forEach(function (declarationNode) { NodeUtils_1.NodeUtils.typedTraverse(declarationNode.id, NodeType_1.NodeType.Identifier, { enter: function enter(node) { - return _this2.identifierReplacer.storeNames(node.name); + return _this2.identifierReplacer.storeNames(node.name, nodeIdentifier); } }); }); } }, { key: "replaceVariableNames", - value: function replaceVariableNames(scopeNode) { + value: function replaceVariableNames(scopeNode, nodeIdentifier) { var _this3 = this; estraverse.replace(scopeNode, { enter: function enter(node, parentNode) { if (!node.obfuscated && Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) { - node.name = _this3.identifierReplacer.replace(node.name); + node.name = _this3.identifierReplacer.replace(node.name, nodeIdentifier); } } }); } }]); - return VariableDeclarationObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); -VariableDeclarationObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object])], VariableDeclarationObfuscator); +VariableDeclarationObfuscator = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], VariableDeclarationObfuscator); exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 79 */ +/* 96 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var JSFuck_1 = __webpack_require__(27); -var AbstractReplacer_1 = __webpack_require__(20); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var JSFuck_1 = __webpack_require__(37); +var AbstractReplacer_1 = __webpack_require__(29); var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { - _inherits(BooleanLiteralReplacer, _AbstractReplacer_1$A); + (0, _inherits3.default)(BooleanLiteralReplacer, _AbstractReplacer_1$A); function BooleanLiteralReplacer(options) { - _classCallCheck(this, BooleanLiteralReplacer); - - return _possibleConstructorReturn(this, (BooleanLiteralReplacer.__proto__ || Object.getPrototypeOf(BooleanLiteralReplacer)).call(this, options)); + (0, _classCallCheck3.default)(this, BooleanLiteralReplacer); + return (0, _possibleConstructorReturn3.default)(this, (BooleanLiteralReplacer.__proto__ || (0, _getPrototypeOf2.default)(BooleanLiteralReplacer)).call(this, options)); } - _createClass(BooleanLiteralReplacer, [{ + (0, _createClass3.default)(BooleanLiteralReplacer, [{ key: "replace", value: function replace(nodeValue) { return nodeValue ? JSFuck_1.JSFuck.True : JSFuck_1.JSFuck.False; } }]); - return BooleanLiteralReplacer; }(AbstractReplacer_1.AbstractReplacer); -BooleanLiteralReplacer = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], BooleanLiteralReplacer); +BooleanLiteralReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], BooleanLiteralReplacer); exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 80 */ +/* 97 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _map = __webpack_require__(12); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _map2 = _interopRequireDefault(_map); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractReplacer_1 = __webpack_require__(20); -var RandomGeneratorUtils_1 = __webpack_require__(2); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var AbstractReplacer_1 = __webpack_require__(29); +var RandomGeneratorUtils_1 = __webpack_require__(8); var IdentifierReplacer = function (_AbstractReplacer_1$A) { - _inherits(IdentifierReplacer, _AbstractReplacer_1$A); + (0, _inherits3.default)(IdentifierReplacer, _AbstractReplacer_1$A); function IdentifierReplacer(options) { - _classCallCheck(this, IdentifierReplacer); + (0, _classCallCheck3.default)(this, IdentifierReplacer); - var _this = _possibleConstructorReturn(this, (IdentifierReplacer.__proto__ || Object.getPrototypeOf(IdentifierReplacer)).call(this, options)); + var _this = (0, _possibleConstructorReturn3.default)(this, (IdentifierReplacer.__proto__ || (0, _getPrototypeOf2.default)(IdentifierReplacer)).call(this, options)); - _this.namesMap = new Map(); + _this.namesMap = new _map2.default(); return _this; } - _createClass(IdentifierReplacer, [{ + (0, _createClass3.default)(IdentifierReplacer, [{ key: "replace", - value: function replace(nodeValue) { - var obfuscatedIdentifierName = this.namesMap.get(nodeValue + "-" + this.uniquePrefix); + value: function replace(nodeValue, nodeIdentifier) { + var obfuscatedIdentifierName = this.namesMap.get(nodeValue + "-" + nodeIdentifier); if (!obfuscatedIdentifierName) { return nodeValue; } return obfuscatedIdentifierName; } - }, { - key: "setPrefix", - value: function setPrefix(uniquePrefix) { - this.uniquePrefix = uniquePrefix; - } }, { key: "storeNames", - value: function storeNames(nodeName) { - if (!this.uniquePrefix) { - throw new Error('`uniquePrefix` is `undefined`. Set it before `storeNames`'); - } + value: function storeNames(nodeName, nodeIdentifier) { if (!this.isReservedName(nodeName)) { - this.namesMap.set(nodeName + "-" + this.uniquePrefix, RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomVariableName()); + this.namesMap.set(nodeName + "-" + nodeIdentifier, RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomVariableName()); } } }, { @@ -5297,128 +5388,122 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { }); } }]); - return IdentifierReplacer; }(AbstractReplacer_1.AbstractReplacer); -IdentifierReplacer = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], IdentifierReplacer); +IdentifierReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], IdentifierReplacer); exports.IdentifierReplacer = IdentifierReplacer; /***/ }, -/* 81 */ +/* 98 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractReplacer_1 = __webpack_require__(20); -var Utils_1 = __webpack_require__(4); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var AbstractReplacer_1 = __webpack_require__(29); +var Utils_1 = __webpack_require__(11); var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { - _inherits(NumberLiteralReplacer, _AbstractReplacer_1$A); + (0, _inherits3.default)(NumberLiteralReplacer, _AbstractReplacer_1$A); function NumberLiteralReplacer(options) { - _classCallCheck(this, NumberLiteralReplacer); - - return _possibleConstructorReturn(this, (NumberLiteralReplacer.__proto__ || Object.getPrototypeOf(NumberLiteralReplacer)).call(this, options)); + (0, _classCallCheck3.default)(this, NumberLiteralReplacer); + return (0, _possibleConstructorReturn3.default)(this, (NumberLiteralReplacer.__proto__ || (0, _getPrototypeOf2.default)(NumberLiteralReplacer)).call(this, options)); } - _createClass(NumberLiteralReplacer, [{ + (0, _createClass3.default)(NumberLiteralReplacer, [{ key: "replace", value: function replace(nodeValue) { - if (!Utils_1.Utils.isInteger(nodeValue)) { + if (!Utils_1.Utils.isCeilNumber(nodeValue)) { return String(nodeValue); } return "" + Utils_1.Utils.hexadecimalPrefix + Utils_1.Utils.decToHex(nodeValue); } }]); - return NumberLiteralReplacer; }(AbstractReplacer_1.AbstractReplacer); -NumberLiteralReplacer = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], NumberLiteralReplacer); +NumberLiteralReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], NumberLiteralReplacer); exports.NumberLiteralReplacer = NumberLiteralReplacer; /***/ }, -/* 82 */ +/* 99 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _from = __webpack_require__(26); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _from2 = _interopRequireDefault(_from); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var StringArrayEncoding_1 = __webpack_require__(22); -var AbstractReplacer_1 = __webpack_require__(20); -var CryptUtils_1 = __webpack_require__(25); -var CustomNodes_1 = __webpack_require__(12); -var CustomNodeGroups_1 = __webpack_require__(23); -var RandomGeneratorUtils_1 = __webpack_require__(2); -var Utils_1 = __webpack_require__(4); -var StringLiteralReplacer_1 = function (_AbstractReplacer_1$A) { - _inherits(StringLiteralReplacer, _AbstractReplacer_1$A); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - function StringLiteralReplacer(customNodeGroupStorage, options) { - _classCallCheck(this, StringLiteralReplacer); +var _createClass2 = __webpack_require__(1); - var _this = _possibleConstructorReturn(this, (StringLiteralReplacer.__proto__ || Object.getPrototypeOf(StringLiteralReplacer)).call(this, options)); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var StringArrayEncoding_1 = __webpack_require__(31); +var AbstractReplacer_1 = __webpack_require__(29); +var CryptUtils_1 = __webpack_require__(33); +var RandomGeneratorUtils_1 = __webpack_require__(8); +var Utils_1 = __webpack_require__(11); +var StringLiteralReplacer = StringLiteralReplacer_1 = function (_AbstractReplacer_1$A) { + (0, _inherits3.default)(StringLiteralReplacer, _AbstractReplacer_1$A); + + function StringLiteralReplacer(customNodeGroupStorage, stringArrayStorage, options) { + (0, _classCallCheck3.default)(this, StringLiteralReplacer); + + var _this = (0, _possibleConstructorReturn3.default)(this, (StringLiteralReplacer.__proto__ || (0, _getPrototypeOf2.default)(StringLiteralReplacer)).call(this, options)); _this.customNodeGroupStorage = customNodeGroupStorage; + _this.stringArrayStorage = stringArrayStorage; return _this; } - _createClass(StringLiteralReplacer, [{ + (0, _createClass3.default)(StringLiteralReplacer, [{ key: "replace", value: function replace(nodeValue) { var replaceWithStringArrayFlag = nodeValue.length >= StringLiteralReplacer_1.minimumLengthForStringArray && RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomFloat(0, 1) <= this.options.stringArrayThreshold; @@ -5430,8 +5515,6 @@ var StringLiteralReplacer_1 = function (_AbstractReplacer_1$A) { }, { key: "replaceStringLiteralWithStringArrayCall", value: function replaceStringLiteralWithStringArrayCall(value) { - var stringArrayCustomNodeGroupNodes = this.customNodeGroupStorage.get(CustomNodeGroups_1.CustomNodeGroups.StringArrayCustomNodeGroup).getCustomNodes(); - var stringArrayNode = stringArrayCustomNodeGroupNodes.get(CustomNodes_1.CustomNodes.StringArrayNode); var rc4Key = ''; switch (this.options.stringArrayEncoding) { case StringArrayEncoding_1.StringArrayEncoding.base64: @@ -5445,144 +5528,142 @@ var StringLiteralReplacer_1 = function (_AbstractReplacer_1$A) { if (this.options.unicodeEscapeSequence) { value = Utils_1.Utils.stringToUnicodeEscapeSequence(value); } - var stringArray = stringArrayNode.getNodeData(); - var indexOfExistingValue = stringArray.getKeyOf(value); + var indexOfExistingValue = this.stringArrayStorage.getKeyOf(value); var indexOfValue = void 0; if (indexOfExistingValue >= 0) { indexOfValue = indexOfExistingValue; } else { - indexOfValue = stringArray.getLength(); - stringArray.set(null, value); + indexOfValue = this.stringArrayStorage.getLength(); + this.stringArrayStorage.set(null, value); } - var stringArrayCallsWrapper = stringArrayCustomNodeGroupNodes.get(CustomNodes_1.CustomNodes.StringArrayCallsWrapper); + var reversedStringArrayId = (0, _from2.default)(this.stringArrayStorage.getStorageId()).reverse().join(''); + var stringArrayStorageCallsWrapperName = "_" + Utils_1.Utils.hexadecimalPrefix + reversedStringArrayId; var hexadecimalIndex = "" + Utils_1.Utils.hexadecimalPrefix + Utils_1.Utils.decToHex(indexOfValue); if (this.options.stringArrayEncoding === StringArrayEncoding_1.StringArrayEncoding.rc4) { - return stringArrayCallsWrapper.getNodeIdentifier() + "('" + hexadecimalIndex + "', '" + Utils_1.Utils.stringToUnicodeEscapeSequence(rc4Key) + "')"; + return stringArrayStorageCallsWrapperName + "('" + hexadecimalIndex + "', '" + Utils_1.Utils.stringToUnicodeEscapeSequence(rc4Key) + "')"; } - return stringArrayCallsWrapper.getNodeIdentifier() + "('" + hexadecimalIndex + "')"; + return stringArrayStorageCallsWrapperName + "('" + hexadecimalIndex + "')"; } }]); - return StringLiteralReplacer; }(AbstractReplacer_1.AbstractReplacer); -var StringLiteralReplacer = StringLiteralReplacer_1; StringLiteralReplacer.minimumLengthForStringArray = 3; StringLiteralReplacer.rc4Keys = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().n(function () { return RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomGenerator().string({ length: 4 }); }, 50); -StringLiteralReplacer = StringLiteralReplacer_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], StringLiteralReplacer); +StringLiteralReplacer = StringLiteralReplacer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object, Object])], StringLiteralReplacer); exports.StringLiteralReplacer = StringLiteralReplacer; +var StringLiteralReplacer_1; /***/ }, -/* 83 */ +/* 100 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _assign = __webpack_require__(34); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _assign2 = _interopRequireDefault(_assign); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var inversify_1 = __webpack_require__(0); -var class_validator_1 = __webpack_require__(115); -var DefaultPreset_1 = __webpack_require__(31); -var OptionsNormalizer_1 = __webpack_require__(84); -var ValidationErrorsFormatter_1 = __webpack_require__(85); +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var class_validator_1 = __webpack_require__(137); +var Default_1 = __webpack_require__(42); +var OptionsNormalizer_1 = __webpack_require__(101); +var ValidationErrorsFormatter_1 = __webpack_require__(102); var Options = Options_1 = function Options(inputOptions) { - _classCallCheck(this, Options); + (0, _classCallCheck3.default)(this, Options); - Object.assign(this, DefaultPreset_1.DEFAULT_PRESET, inputOptions); + (0, _assign2.default)(this, Default_1.DEFAULT_PRESET, inputOptions); var errors = class_validator_1.validateSync(this, Options_1.validatorOptions); if (errors.length) { throw new ReferenceError("Validation failed. errors:\n" + ValidationErrorsFormatter_1.ValidationErrorsFormatter.format(errors)); } - Object.assign(this, OptionsNormalizer_1.OptionsNormalizer.normalizeOptions(this)); + (0, _assign2.default)(this, OptionsNormalizer_1.OptionsNormalizer.normalizeOptions(this)); }; Options.validatorOptions = { validationError: { target: false } }; -__decorate([class_validator_1.IsBoolean(), __metadata("design:type", Boolean)], Options.prototype, "compact", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata("design:type", Boolean)], Options.prototype, "controlFlowFlattening", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata("design:type", Boolean)], Options.prototype, "debugProtection", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata("design:type", Boolean)], Options.prototype, "debugProtectionInterval", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata("design:type", Boolean)], Options.prototype, "disableConsoleOutput", void 0); -__decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ +tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "compact", void 0); +tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "controlFlowFlattening", void 0); +tslib_1.__decorate([class_validator_1.IsNumber(), class_validator_1.Min(0), class_validator_1.Max(1), tslib_1.__metadata("design:type", Number)], Options.prototype, "controlFlowFlatteningThreshold", void 0); +tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "debugProtection", void 0); +tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "debugProtectionInterval", void 0); +tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "disableConsoleOutput", void 0); +tslib_1.__decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true -}), __metadata("design:type", Array)], Options.prototype, "domainLock", void 0); -__decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ +}), tslib_1.__metadata("design:type", Array)], Options.prototype, "domainLock", void 0); +tslib_1.__decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true -}), __metadata("design:type", Array)], Options.prototype, "reservedNames", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata("design:type", Boolean)], Options.prototype, "rotateStringArray", void 0); -__decorate([class_validator_1.IsNumber(), __metadata("design:type", Number)], Options.prototype, "seed", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata("design:type", Boolean)], Options.prototype, "selfDefending", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata("design:type", Boolean)], Options.prototype, "sourceMap", void 0); -__decorate([class_validator_1.IsString(), class_validator_1.ValidateIf(function (options) { +}), tslib_1.__metadata("design:type", Array)], Options.prototype, "reservedNames", void 0); +tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "rotateStringArray", void 0); +tslib_1.__decorate([class_validator_1.IsNumber(), tslib_1.__metadata("design:type", Number)], Options.prototype, "seed", void 0); +tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "selfDefending", void 0); +tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "sourceMap", void 0); +tslib_1.__decorate([class_validator_1.IsString(), class_validator_1.ValidateIf(function (options) { return Boolean(options.sourceMapBaseUrl); }), class_validator_1.IsUrl({ require_protocol: true, require_valid_protocol: true -}), __metadata("design:type", String)], Options.prototype, "sourceMapBaseUrl", void 0); -__decorate([class_validator_1.IsString(), __metadata("design:type", String)], Options.prototype, "sourceMapFileName", void 0); -__decorate([class_validator_1.IsIn(['inline', 'separate']), __metadata("design:type", String)], Options.prototype, "sourceMapMode", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata("design:type", Boolean)], Options.prototype, "stringArray", void 0); -__decorate([class_validator_1.IsIn([true, false, 'base64', 'rc4']), __metadata("design:type", Object)], Options.prototype, "stringArrayEncoding", void 0); -__decorate([class_validator_1.IsNumber(), class_validator_1.Min(0), class_validator_1.Max(1), __metadata("design:type", Number)], Options.prototype, "stringArrayThreshold", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata("design:type", Boolean)], Options.prototype, "unicodeEscapeSequence", void 0); -Options = Options_1 = __decorate([inversify_1.injectable(), __metadata("design:paramtypes", [Object])], Options); +}), tslib_1.__metadata("design:type", String)], Options.prototype, "sourceMapBaseUrl", void 0); +tslib_1.__decorate([class_validator_1.IsString(), tslib_1.__metadata("design:type", String)], Options.prototype, "sourceMapFileName", void 0); +tslib_1.__decorate([class_validator_1.IsIn(['inline', 'separate']), tslib_1.__metadata("design:type", String)], Options.prototype, "sourceMapMode", void 0); +tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "stringArray", void 0); +tslib_1.__decorate([class_validator_1.IsIn([true, false, 'base64', 'rc4']), tslib_1.__metadata("design:type", Object)], Options.prototype, "stringArrayEncoding", void 0); +tslib_1.__decorate([class_validator_1.IsNumber(), class_validator_1.Min(0), class_validator_1.Max(1), tslib_1.__metadata("design:type", Number)], Options.prototype, "stringArrayThreshold", void 0); +tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "unicodeEscapeSequence", void 0); +Options = Options_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [Object])], Options); exports.Options = Options; var Options_1; /***/ }, -/* 84 */ +/* 101 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getIterator2 = __webpack_require__(22); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getIterator3 = _interopRequireDefault(_getIterator2); -var __assign = undefined && undefined.__assign || Object.assign || function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) { - if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - } - return t; -}; -var Utils_1 = __webpack_require__(4); +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var Utils_1 = __webpack_require__(11); var OptionsNormalizer = function () { function OptionsNormalizer() { - _classCallCheck(this, OptionsNormalizer); + (0, _classCallCheck3.default)(this, OptionsNormalizer); } - _createClass(OptionsNormalizer, null, [{ + (0, _createClass3.default)(OptionsNormalizer, null, [{ key: "normalizeOptions", value: function normalizeOptions(options) { - var normalizedOptions = __assign({}, options); + var normalizedOptions = tslib_1.__assign({}, options); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { - for (var _iterator = OptionsNormalizer.normalizerRules[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + for (var _iterator = (0, _getIterator3.default)(OptionsNormalizer.normalizerRules), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var normalizerRule = _step.value; normalizedOptions = normalizerRule(normalizedOptions); @@ -5604,6 +5685,14 @@ var OptionsNormalizer = function () { return normalizedOptions; } + }, { + key: "controlFlowFlatteningThresholdRule", + value: function controlFlowFlatteningThresholdRule(options) { + if (options.controlFlowFlatteningThreshold === 0) { + options = tslib_1.__assign({}, options, OptionsNormalizer.DISABLED_CONTROL_FLOW_FLATTENING_OPTIONS); + } + return options; + } }, { key: "domainLockRule", value: function domainLockRule(options) { @@ -5614,7 +5703,7 @@ var OptionsNormalizer = function () { var _iteratorError2 = undefined; try { - for (var _iterator2 = options.domainLock[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + for (var _iterator2 = (0, _getIterator3.default)(options.domainLock), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var domain = _step2.value; normalizedDomains.push(Utils_1.Utils.extractDomainFromUrl(domain)); @@ -5634,7 +5723,7 @@ var OptionsNormalizer = function () { } } - options = __assign({}, options, { domainLock: normalizedDomains }); + options = tslib_1.__assign({}, options, { domainLock: normalizedDomains }); } return options; } @@ -5642,7 +5731,7 @@ var OptionsNormalizer = function () { key: "selfDefendingRule", value: function selfDefendingRule(options) { if (options.selfDefending) { - options = __assign({}, options, OptionsNormalizer.SELF_DEFENDING_OPTIONS); + options = tslib_1.__assign({}, options, OptionsNormalizer.SELF_DEFENDING_OPTIONS); } return options; } @@ -5653,11 +5742,11 @@ var OptionsNormalizer = function () { sourceMapBaseUrl = _options.sourceMapBaseUrl; if (!options.sourceMapFileName) { - options = __assign({}, options, { sourceMapBaseUrl: '' }); + options = tslib_1.__assign({}, options, { sourceMapBaseUrl: '' }); return options; } if (sourceMapBaseUrl && !sourceMapBaseUrl.endsWith('/')) { - options = __assign({}, options, { sourceMapBaseUrl: sourceMapBaseUrl + "/" }); + options = tslib_1.__assign({}, options, { sourceMapBaseUrl: sourceMapBaseUrl + "/" }); } return options; } @@ -5669,7 +5758,7 @@ var OptionsNormalizer = function () { if (sourceMapFileName) { sourceMapFileName = sourceMapFileName.replace(/^\/+/, '').split('.')[0]; - options = __assign({}, options, { sourceMapFileName: sourceMapFileName + ".js.map" }); + options = tslib_1.__assign({}, options, { sourceMapFileName: sourceMapFileName + ".js.map" }); } return options; } @@ -5677,7 +5766,7 @@ var OptionsNormalizer = function () { key: "stringArrayRule", value: function stringArrayRule(options) { if (!options.stringArray) { - options = __assign({}, options, OptionsNormalizer.DISABLED_UNICODE_ARRAY_OPTIONS); + options = tslib_1.__assign({}, options, OptionsNormalizer.DISABLED_STRING_ARRAY_OPTIONS); } return options; } @@ -5685,7 +5774,7 @@ var OptionsNormalizer = function () { key: "stringArrayEncodingRule", value: function stringArrayEncodingRule(options) { if (options.stringArrayEncoding === true) { - options = __assign({}, options, OptionsNormalizer.UNICODE_ARRAY_ENCODING_OPTIONS); + options = tslib_1.__assign({}, options, OptionsNormalizer.STRING_ARRAY_ENCODING_OPTIONS); } return options; } @@ -5693,16 +5782,19 @@ var OptionsNormalizer = function () { key: "stringArrayThresholdRule", value: function stringArrayThresholdRule(options) { if (options.stringArrayThreshold === 0) { - options = __assign({}, options, OptionsNormalizer.DISABLED_UNICODE_ARRAY_OPTIONS); + options = tslib_1.__assign({}, options, OptionsNormalizer.DISABLED_STRING_ARRAY_OPTIONS); } return options; } }]); - return OptionsNormalizer; }(); -OptionsNormalizer.DISABLED_UNICODE_ARRAY_OPTIONS = { +OptionsNormalizer.DISABLED_CONTROL_FLOW_FLATTENING_OPTIONS = { + controlFlowFlattening: false, + controlFlowFlatteningThreshold: 0 +}; +OptionsNormalizer.DISABLED_STRING_ARRAY_OPTIONS = { rotateStringArray: false, stringArray: false, stringArrayEncoding: false, @@ -5712,29 +5804,39 @@ OptionsNormalizer.SELF_DEFENDING_OPTIONS = { compact: true, selfDefending: true }; -OptionsNormalizer.UNICODE_ARRAY_ENCODING_OPTIONS = { +OptionsNormalizer.STRING_ARRAY_ENCODING_OPTIONS = { stringArrayEncoding: 'base64' }; -OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNormalizer.selfDefendingRule, OptionsNormalizer.sourceMapBaseUrlRule, OptionsNormalizer.sourceMapFileNameRule, OptionsNormalizer.stringArrayRule, OptionsNormalizer.stringArrayEncodingRule, OptionsNormalizer.stringArrayThresholdRule]; +OptionsNormalizer.normalizerRules = [OptionsNormalizer.controlFlowFlatteningThresholdRule, OptionsNormalizer.domainLockRule, OptionsNormalizer.selfDefendingRule, OptionsNormalizer.sourceMapBaseUrlRule, OptionsNormalizer.sourceMapFileNameRule, OptionsNormalizer.stringArrayRule, OptionsNormalizer.stringArrayEncodingRule, OptionsNormalizer.stringArrayThresholdRule]; exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 85 */ -/***/ function(module, exports) { +/* 102 */ +/***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getIterator2 = __webpack_require__(22); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getIterator3 = _interopRequireDefault(_getIterator2); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ValidationErrorsFormatter = function () { function ValidationErrorsFormatter() { - _classCallCheck(this, ValidationErrorsFormatter); + (0, _classCallCheck3.default)(this, ValidationErrorsFormatter); } - _createClass(ValidationErrorsFormatter, null, [{ + (0, _createClass3.default)(ValidationErrorsFormatter, null, [{ key: "format", value: function format(validationErrors) { var errorsArray = []; @@ -5743,7 +5845,7 @@ var ValidationErrorsFormatter = function () { var _iteratorError = undefined; try { - for (var _iterator = validationErrors[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + for (var _iterator = (0, _getIterator3.default)(validationErrors), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var error = _step.value; errorsArray.push(ValidationErrorsFormatter.formatError(error)); @@ -5779,64 +5881,43 @@ var ValidationErrorsFormatter = function () { return errorString; } }]); - return ValidationErrorsFormatter; }(); exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 86 */ +/* 103 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _classCallCheck2 = __webpack_require__(0); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _createClass2 = __webpack_require__(1); -var __assign = undefined && undefined.__assign || Object.assign || function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) { - if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - } - return t; -}; -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(6); -var CalleeDataExtractors_1 = __webpack_require__(28); -var Node_1 = __webpack_require__(5); -var NodeUtils_1 = __webpack_require__(10); +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var estraverse = __webpack_require__(13); +var CalleeDataExtractors_1 = __webpack_require__(38); +var Node_1 = __webpack_require__(10); +var NodeUtils_1 = __webpack_require__(15); var StackTraceAnalyzer = StackTraceAnalyzer_1 = function () { function StackTraceAnalyzer(calleeDataExtractorsFactory) { - _classCallCheck(this, StackTraceAnalyzer); + (0, _classCallCheck3.default)(this, StackTraceAnalyzer); this.calleeDataExtractorsFactory = calleeDataExtractorsFactory; } - _createClass(StackTraceAnalyzer, [{ + (0, _createClass3.default)(StackTraceAnalyzer, [{ key: "analyze", value: function analyze(blockScopeBody) { return this.analyzeRecursive(blockScopeBody); @@ -5857,7 +5938,7 @@ var StackTraceAnalyzer = StackTraceAnalyzer_1 = function () { var blockScopeBodyNode = blockScopeBody[index]; estraverse.traverse(blockScopeBodyNode, { enter: function enter(node) { - if (!Node_1.Node.isCallExpressionNode(node) || blockScopeBodyNode.parentNode !== NodeUtils_1.NodeUtils.getBlockScopeOfNode(node)) { + if (!Node_1.Node.isCallExpressionNode(node) || blockScopeBodyNode.parentNode !== NodeUtils_1.NodeUtils.getBlockScopesOfNode(node)[0]) { return; } _this.analyzeCallExpressionNode(stackTraceData, blockScopeBody, node); @@ -5882,7 +5963,7 @@ var StackTraceAnalyzer = StackTraceAnalyzer_1 = function () { if (!calleeData) { return; } - stackTraceData.push(__assign({}, calleeData, { stackTrace: _this2.analyzeRecursive(calleeData.callee.body) })); + stackTraceData.push(tslib_1.__assign({}, calleeData, { stackTrace: _this2.analyzeRecursive(calleeData.callee.body) })); }); } }], [{ @@ -5900,64 +5981,64 @@ var StackTraceAnalyzer = StackTraceAnalyzer_1 = function () { return limitIndex; } }]); - return StackTraceAnalyzer; }(); StackTraceAnalyzer.calleeDataExtractorsList = [CalleeDataExtractors_1.CalleeDataExtractors.FunctionDeclarationCalleeDataExtractor, CalleeDataExtractors_1.CalleeDataExtractors.FunctionExpressionCalleeDataExtractor, CalleeDataExtractors_1.CalleeDataExtractors.ObjectExpressionCalleeDataExtractor]; StackTraceAnalyzer.limitThresholdActivationLength = 25; StackTraceAnalyzer.limitThreshold = 0.002; -StackTraceAnalyzer = StackTraceAnalyzer_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __metadata("design:paramtypes", [Function])], StackTraceAnalyzer); +StackTraceAnalyzer = StackTraceAnalyzer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__metadata("design:paramtypes", [Function])], StackTraceAnalyzer); exports.StackTraceAnalyzer = StackTraceAnalyzer; var StackTraceAnalyzer_1; /***/ }, -/* 87 */ +/* 104 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var inversify_1 = __webpack_require__(0); -var estraverse = __webpack_require__(6); -var AbstractCalleeDataExtractor_1 = __webpack_require__(24); -var Node_1 = __webpack_require__(5); -var NodeUtils_1 = __webpack_require__(10); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var estraverse = __webpack_require__(13); +var AbstractCalleeDataExtractor_1 = __webpack_require__(32); +var Node_1 = __webpack_require__(10); +var NodeUtils_1 = __webpack_require__(15); var FunctionDeclarationCalleeDataExtractor = function (_AbstractCalleeDataEx) { - _inherits(FunctionDeclarationCalleeDataExtractor, _AbstractCalleeDataEx); + (0, _inherits3.default)(FunctionDeclarationCalleeDataExtractor, _AbstractCalleeDataEx); function FunctionDeclarationCalleeDataExtractor() { - _classCallCheck(this, FunctionDeclarationCalleeDataExtractor); - - return _possibleConstructorReturn(this, (FunctionDeclarationCalleeDataExtractor.__proto__ || Object.getPrototypeOf(FunctionDeclarationCalleeDataExtractor)).apply(this, arguments)); + (0, _classCallCheck3.default)(this, FunctionDeclarationCalleeDataExtractor); + return (0, _possibleConstructorReturn3.default)(this, (FunctionDeclarationCalleeDataExtractor.__proto__ || (0, _getPrototypeOf2.default)(FunctionDeclarationCalleeDataExtractor)).apply(this, arguments)); } - _createClass(FunctionDeclarationCalleeDataExtractor, [{ + (0, _createClass3.default)(FunctionDeclarationCalleeDataExtractor, [{ key: "extract", value: function extract(blockScopeBody, callee) { var calleeBlockStatement = null; if (Node_1.Node.isIdentifierNode(callee)) { - calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), callee.name); + calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopesOfNode(blockScopeBody[0])[0], callee.name); } if (!calleeBlockStatement) { return null; @@ -5982,60 +6063,60 @@ var FunctionDeclarationCalleeDataExtractor = function (_AbstractCalleeDataEx) { return calleeBlockStatement; } }]); - return FunctionDeclarationCalleeDataExtractor; }(AbstractCalleeDataExtractor_1.AbstractCalleeDataExtractor); -FunctionDeclarationCalleeDataExtractor = __decorate([inversify_1.injectable(), __metadata('design:paramtypes', [])], FunctionDeclarationCalleeDataExtractor); +FunctionDeclarationCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], FunctionDeclarationCalleeDataExtractor); exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; /***/ }, -/* 88 */ +/* 105 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -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 _createClass2 = __webpack_require__(1); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var inversify_1 = __webpack_require__(0); -var estraverse = __webpack_require__(6); -var AbstractCalleeDataExtractor_1 = __webpack_require__(24); -var Node_1 = __webpack_require__(5); -var NodeUtils_1 = __webpack_require__(10); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var estraverse = __webpack_require__(13); +var AbstractCalleeDataExtractor_1 = __webpack_require__(32); +var Node_1 = __webpack_require__(10); +var NodeUtils_1 = __webpack_require__(15); var FunctionExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { - _inherits(FunctionExpressionCalleeDataExtractor, _AbstractCalleeDataEx); + (0, _inherits3.default)(FunctionExpressionCalleeDataExtractor, _AbstractCalleeDataEx); function FunctionExpressionCalleeDataExtractor() { - _classCallCheck(this, FunctionExpressionCalleeDataExtractor); - - return _possibleConstructorReturn(this, (FunctionExpressionCalleeDataExtractor.__proto__ || Object.getPrototypeOf(FunctionExpressionCalleeDataExtractor)).apply(this, arguments)); + (0, _classCallCheck3.default)(this, FunctionExpressionCalleeDataExtractor); + return (0, _possibleConstructorReturn3.default)(this, (FunctionExpressionCalleeDataExtractor.__proto__ || (0, _getPrototypeOf2.default)(FunctionExpressionCalleeDataExtractor)).apply(this, arguments)); } - _createClass(FunctionExpressionCalleeDataExtractor, [{ + (0, _createClass3.default)(FunctionExpressionCalleeDataExtractor, [{ key: "extract", value: function extract(blockScopeBody, callee) { var calleeBlockStatement = null; if (Node_1.Node.isIdentifierNode(callee)) { - calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), callee.name); + calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopesOfNode(blockScopeBody[0])[0], callee.name); } if (Node_1.Node.isFunctionExpressionNode(callee)) { calleeBlockStatement = callee.body; @@ -6063,55 +6144,59 @@ var FunctionExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { return calleeBlockStatement; } }]); - return FunctionExpressionCalleeDataExtractor; }(AbstractCalleeDataExtractor_1.AbstractCalleeDataExtractor); -FunctionExpressionCalleeDataExtractor = __decorate([inversify_1.injectable(), __metadata('design:paramtypes', [])], FunctionExpressionCalleeDataExtractor); +FunctionExpressionCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], FunctionExpressionCalleeDataExtractor); exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; /***/ }, -/* 89 */ +/* 106 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getIterator2 = __webpack_require__(22); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _getIterator3 = _interopRequireDefault(_getIterator2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var inversify_1 = __webpack_require__(0); -var estraverse = __webpack_require__(6); -var Node_1 = __webpack_require__(5); -var NodeUtils_1 = __webpack_require__(10); -var AbstractCalleeDataExtractor_1 = __webpack_require__(24); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var estraverse = __webpack_require__(13); +var Node_1 = __webpack_require__(10); +var NodeUtils_1 = __webpack_require__(15); +var AbstractCalleeDataExtractor_1 = __webpack_require__(32); var ObjectExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { - _inherits(ObjectExpressionCalleeDataExtractor, _AbstractCalleeDataEx); + (0, _inherits3.default)(ObjectExpressionCalleeDataExtractor, _AbstractCalleeDataEx); function ObjectExpressionCalleeDataExtractor() { - _classCallCheck(this, ObjectExpressionCalleeDataExtractor); - - return _possibleConstructorReturn(this, (ObjectExpressionCalleeDataExtractor.__proto__ || Object.getPrototypeOf(ObjectExpressionCalleeDataExtractor)).apply(this, arguments)); + (0, _classCallCheck3.default)(this, ObjectExpressionCalleeDataExtractor); + return (0, _possibleConstructorReturn3.default)(this, (ObjectExpressionCalleeDataExtractor.__proto__ || (0, _getPrototypeOf2.default)(ObjectExpressionCalleeDataExtractor)).apply(this, arguments)); } - _createClass(ObjectExpressionCalleeDataExtractor, [{ + (0, _createClass3.default)(ObjectExpressionCalleeDataExtractor, [{ key: "extract", value: function extract(blockScopeBody, callee) { var calleeBlockStatement = null, @@ -6122,7 +6207,7 @@ var ObjectExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { return null; } functionExpressionName = objectMembersCallsChain[objectMembersCallsChain.length - 1]; - calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), objectMembersCallsChain); + calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopesOfNode(blockScopeBody[0])[0], objectMembersCallsChain); } if (!calleeBlockStatement) { return null; @@ -6181,7 +6266,7 @@ var ObjectExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { var _iteratorError = undefined; try { - for (var _iterator = objectExpressionProperties[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + for (var _iterator = (0, _getIterator3.default)(objectExpressionProperties), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var propertyNode = _step.value; var isTargetPropertyNodeWithIdentifierKey = Node_1.Node.isIdentifierNode(propertyNode.key) && propertyNode.key.name === nextItemInCallsChain; @@ -6214,44 +6299,42 @@ var ObjectExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { return null; } }]); - return ObjectExpressionCalleeDataExtractor; }(AbstractCalleeDataExtractor_1.AbstractCalleeDataExtractor); -ObjectExpressionCalleeDataExtractor = __decorate([inversify_1.injectable(), __metadata('design:paramtypes', [])], ObjectExpressionCalleeDataExtractor); +ObjectExpressionCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], ObjectExpressionCalleeDataExtractor); exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; /***/ }, -/* 90 */ +/* 107 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _toConsumableArray2 = __webpack_require__(36); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var Initializable_1 = __webpack_require__(3); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var Initializable_1 = __webpack_require__(9); +var RandomGeneratorUtils_1 = __webpack_require__(8); var ArrayStorage = function () { function ArrayStorage() { - _classCallCheck(this, ArrayStorage); + (0, _classCallCheck3.default)(this, ArrayStorage); } - _createClass(ArrayStorage, [{ + (0, _createClass3.default)(ArrayStorage, [{ key: "get", value: function get(key) { var value = this.storage[key]; @@ -6275,10 +6358,26 @@ var ArrayStorage = function () { value: function getStorage() { return this.storage; } + }, { + key: "getStorageId", + value: function getStorageId() { + return this.storageId; + } }, { key: "initialize", value: function initialize() { this.storage = []; + this.storageId = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomString(6); + } + }, { + key: "mergeWith", + value: function mergeWith(storage) { + var mergeId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + this.storage = [].concat((0, _toConsumableArray3.default)(this.storage), (0, _toConsumableArray3.default)(storage.getStorage())); + if (mergeId) { + this.storageId = storage.getStorageId(); + } } }, { key: "set", @@ -6286,107 +6385,128 @@ var ArrayStorage = function () { this.storage.push(value); } }]); - return ArrayStorage; }(); - -__decorate([Initializable_1.initializable(), __metadata('design:type', Array)], ArrayStorage.prototype, "storage", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ArrayStorage.prototype, "storageId", void 0); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Array)], ArrayStorage.prototype, "storage", void 0); +ArrayStorage = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], ArrayStorage); exports.ArrayStorage = ArrayStorage; /***/ }, -/* 91 */ +/* 108 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); +var _slicedToArray2 = __webpack_require__(35); -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _from = __webpack_require__(26); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _from2 = _interopRequireDefault(_from); -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 _getPrototypeOf = __webpack_require__(5); -var MapStorage_1 = __webpack_require__(32); +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var MapStorage_1 = __webpack_require__(43); var ControlFlowStorage = function (_MapStorage_1$MapStor) { - _inherits(ControlFlowStorage, _MapStorage_1$MapStor); + (0, _inherits3.default)(ControlFlowStorage, _MapStorage_1$MapStor); function ControlFlowStorage() { - _classCallCheck(this, ControlFlowStorage); + (0, _classCallCheck3.default)(this, ControlFlowStorage); - var _this = _possibleConstructorReturn(this, (ControlFlowStorage.__proto__ || Object.getPrototypeOf(ControlFlowStorage)).call(this)); + var _this = (0, _possibleConstructorReturn3.default)(this, (ControlFlowStorage.__proto__ || (0, _getPrototypeOf2.default)(ControlFlowStorage)).call(this)); _this.initialize(); return _this; } - _createClass(ControlFlowStorage, [{ - key: 'toString', + (0, _createClass3.default)(ControlFlowStorage, [{ + key: "toString", value: function toString() { - return Array.from(this.storage).reduce(function (controlFlowStorageItems, _ref) { - var _ref2 = _slicedToArray(_ref, 2), + return (0, _from2.default)(this.storage).reduce(function (controlFlowStorageItems, _ref) { + var _ref2 = (0, _slicedToArray3.default)(_ref, 2), key = _ref2[0], value = _ref2[1]; - controlFlowStorageItems.push(key + ': ' + value.getCode()); + controlFlowStorageItems.push(key + ": " + value.getCode()); return controlFlowStorageItems; }, []).join(','); } }]); - return ControlFlowStorage; }(MapStorage_1.MapStorage); exports.ControlFlowStorage = ControlFlowStorage; /***/ }, -/* 92 */ +/* 109 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _map = __webpack_require__(12); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _map2 = _interopRequireDefault(_map); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf = __webpack_require__(5); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -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 _classCallCheck2 = __webpack_require__(0); -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = undefined && undefined.__param || function (paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; -}; -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var CustomNodeGroups_1 = __webpack_require__(23); -var MapStorage_1 = __webpack_require__(32); -var CustomNodeGroupStorage_1 = function (_MapStorage_1$MapStor) { - _inherits(CustomNodeGroupStorage, _MapStorage_1$MapStor); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var CustomNodeGroups_1 = __webpack_require__(39); +var MapStorage_1 = __webpack_require__(43); +var RandomGeneratorUtils_1 = __webpack_require__(8); +var CustomNodeGroupStorage = CustomNodeGroupStorage_1 = function (_MapStorage_1$MapStor) { + (0, _inherits3.default)(CustomNodeGroupStorage, _MapStorage_1$MapStor); function CustomNodeGroupStorage(customNodeGroupFactory, options) { - _classCallCheck(this, CustomNodeGroupStorage); + (0, _classCallCheck3.default)(this, CustomNodeGroupStorage); - var _this = _possibleConstructorReturn(this, (CustomNodeGroupStorage.__proto__ || Object.getPrototypeOf(CustomNodeGroupStorage)).call(this)); + var _this = (0, _possibleConstructorReturn3.default)(this, (CustomNodeGroupStorage.__proto__ || (0, _getPrototypeOf2.default)(CustomNodeGroupStorage)).call(this)); _this.customNodeGroupFactory = customNodeGroupFactory; _this.options = options; @@ -6394,12 +6514,13 @@ var CustomNodeGroupStorage_1 = function (_MapStorage_1$MapStor) { return _this; } - _createClass(CustomNodeGroupStorage, [{ + (0, _createClass3.default)(CustomNodeGroupStorage, [{ key: "initialize", value: function initialize() { var _this2 = this; - this.storage = new Map(); + this.storage = new _map2.default(); + this.storageId = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomString(6); CustomNodeGroupStorage_1.customNodeGroupsList.forEach(function (customNodeGroupName) { var customNodeGroup = _this2.customNodeGroupFactory(customNodeGroupName); if (!customNodeGroup) { @@ -6409,65 +6530,93 @@ var CustomNodeGroupStorage_1 = function (_MapStorage_1$MapStor) { }); } }]); - return CustomNodeGroupStorage; }(MapStorage_1.MapStorage); -var CustomNodeGroupStorage = CustomNodeGroupStorage_1; CustomNodeGroupStorage.customNodeGroupsList = [CustomNodeGroups_1.CustomNodeGroups.ConsoleOutputCustomNodeGroup, CustomNodeGroups_1.CustomNodeGroups.DebugProtectionCustomNodeGroup, CustomNodeGroups_1.CustomNodeGroups.DomainLockCustomNodeGroup, CustomNodeGroups_1.CustomNodeGroups.SelfDefendingCustomNodeGroup, CustomNodeGroups_1.CustomNodeGroups.StringArrayCustomNodeGroup]; -CustomNodeGroupStorage = CustomNodeGroupStorage_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Function, Object])], CustomNodeGroupStorage); +CustomNodeGroupStorage = CustomNodeGroupStorage_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], CustomNodeGroupStorage); exports.CustomNodeGroupStorage = CustomNodeGroupStorage; +var CustomNodeGroupStorage_1; /***/ }, -/* 93 */ +/* 110 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _getPrototypeOf = __webpack_require__(5); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _classCallCheck2 = __webpack_require__(0); -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 _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var ArrayStorage_1 = __webpack_require__(90); -var Utils_1 = __webpack_require__(4); +var _createClass2 = __webpack_require__(1); +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _get2 = __webpack_require__(46); + +var _get3 = _interopRequireDefault(_get2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ArrayStorage_1 = __webpack_require__(107); +var RandomGeneratorUtils_1 = __webpack_require__(8); +var Utils_1 = __webpack_require__(11); var StringArrayStorage = function (_ArrayStorage_1$Array) { - _inherits(StringArrayStorage, _ArrayStorage_1$Array); + (0, _inherits3.default)(StringArrayStorage, _ArrayStorage_1$Array); function StringArrayStorage() { - _classCallCheck(this, StringArrayStorage); + (0, _classCallCheck3.default)(this, StringArrayStorage); - var _this = _possibleConstructorReturn(this, (StringArrayStorage.__proto__ || Object.getPrototypeOf(StringArrayStorage)).call(this)); + var _this = (0, _possibleConstructorReturn3.default)(this, (StringArrayStorage.__proto__ || (0, _getPrototypeOf2.default)(StringArrayStorage)).call(this)); _this.initialize(); return _this; } - _createClass(StringArrayStorage, [{ - key: 'rotateArray', + (0, _createClass3.default)(StringArrayStorage, [{ + key: "initialize", + value: function initialize() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + (0, _get3.default)(StringArrayStorage.prototype.__proto__ || (0, _getPrototypeOf2.default)(StringArrayStorage.prototype), "initialize", this).call(this, args); + this.storageId = RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomVariableName(4, false); + } + }, { + key: "rotateArray", value: function rotateArray(rotationValue) { this.storage = Utils_1.Utils.arrayRotate(this.storage, rotationValue); } }, { - key: 'toString', + key: "toString", value: function toString() { return this.storage.map(function (value) { - return '\'' + value + '\''; + return "'" + value + "'"; }).toString(); } }]); - return StringArrayStorage; }(ArrayStorage_1.ArrayStorage); - +StringArrayStorage = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], StringArrayStorage); exports.StringArrayStorage = StringArrayStorage; /***/ }, -/* 94 */ +/* 111 */ /***/ function(module, exports) { "use strict"; @@ -6479,7 +6628,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 95 */ +/* 112 */ /***/ function(module, exports) { "use strict"; @@ -6491,7 +6640,7 @@ function Rc4Template() { exports.Rc4Template = Rc4Template; /***/ }, -/* 96 */ +/* 113 */ /***/ function(module, exports) { "use strict"; @@ -6503,7 +6652,7 @@ function SingleNodeCallControllerTemplate() { exports.SingleNodeCallControllerTemplate = SingleNodeCallControllerTemplate; /***/ }, -/* 97 */ +/* 114 */ /***/ function(module, exports) { "use strict"; @@ -6515,7 +6664,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 98 */ +/* 115 */ /***/ function(module, exports) { "use strict"; @@ -6527,7 +6676,7 @@ function BinaryExpressionFunctionTemplate() { exports.BinaryExpressionFunctionTemplate = BinaryExpressionFunctionTemplate; /***/ }, -/* 99 */ +/* 116 */ /***/ function(module, exports) { "use strict"; @@ -6539,7 +6688,7 @@ function ControlFlowStorageCallTemplate() { exports.ControlFlowStorageCallTemplate = ControlFlowStorageCallTemplate; /***/ }, -/* 100 */ +/* 117 */ /***/ function(module, exports) { "use strict"; @@ -6551,7 +6700,7 @@ function ControlFlowStorageTemplate() { exports.ControlFlowStorageTemplate = ControlFlowStorageTemplate; /***/ }, -/* 101 */ +/* 118 */ /***/ function(module, exports) { "use strict"; @@ -6563,7 +6712,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 102 */ +/* 119 */ /***/ function(module, exports) { "use strict"; @@ -6575,7 +6724,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 103 */ +/* 120 */ /***/ function(module, exports) { "use strict"; @@ -6587,7 +6736,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 104 */ +/* 121 */ /***/ function(module, exports) { "use strict"; @@ -6599,33 +6748,33 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 105 */ +/* 122 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var Utils_1 = __webpack_require__(4); +var Utils_1 = __webpack_require__(11); function SelfDefendingTemplate() { return "\n var {selfDefendingFunctionName} = {singleNodeCallControllerFunctionName}(this, function () {\n var func1 = function(){return 'dev';},\n func2 = function () {\n return 'window';\n };\n \n var test1 = function () {\n var regExp = new RegExp('" + Utils_1.Utils.stringToUnicodeEscapeSequence("\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}") + "');\n \n return !regExp.test(func1.toString());\n };\n \n var test2 = function () {\n var regExp = new RegExp('" + Utils_1.Utils.stringToUnicodeEscapeSequence("(\\\\[x|u](\\w){2,4})+") + "');\n \n return regExp.test(func2.toString());\n };\n \n var recursiveFunc1 = function (string) {\n var i = ~-1 >> 1 + 255 % 0;\n \n if (string.indexOf('i' === i)) {\n recursiveFunc2(string)\n }\n };\n \n var recursiveFunc2 = function (string) {\n var i = ~-4 >> 1 + 255 % 0;\n \n if (string.indexOf((true+\"\")[3]) !== i) {\n recursiveFunc1(string)\n }\n };\n \n if (!test1()) {\n if (!test2()) {\n recursiveFunc1('ind\u0435xOf');\n } else {\n recursiveFunc1('indexOf');\n }\n } else {\n recursiveFunc1('ind\u0435xOf');\n }\n })\n \n {selfDefendingFunctionName}();\n "; } exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 106 */ +/* 123 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var Utils_1 = __webpack_require__(4); +var Utils_1 = __webpack_require__(11); function SelfDefendingTemplate() { return "\n var StatesClass = function (rc4Bytes) {\n this.rc4Bytes = rc4Bytes;\n this.states = [1, 0, 0];\n this.newState = function(){return 'newState';};\n this.firstState = '" + Utils_1.Utils.stringToUnicodeEscapeSequence("\\w+ *\\(\\) *{\\w+ *") + "';\n this.secondState = '" + Utils_1.Utils.stringToUnicodeEscapeSequence("['|\"].+['|\"];? *}") + "';\n };\n \n StatesClass.prototype.checkState = function () {\n var regExp = new RegExp(this.firstState + this.secondState);\n\n return this.runState(regExp.test(this.newState.toString()) ? --this.states[1] : --this.states[0]);\n };\n \n StatesClass.prototype.runState = function (stateResult) {\n if (!Boolean(~stateResult)) {\n return stateResult;\n }\n \n return this.getState(this.rc4Bytes);\n };\n\n StatesClass.prototype.getState = function (rc4Bytes) {\n for (var i = 0, len = this.states.length; i < len; i++) {\n this.states.push(Math.round(Math.random()));\n len = this.states.length;\n }\n \n return rc4Bytes(this.states[0]);\n };\n\n new StatesClass({stringArrayCallsWrapperName}).checkState();\n "; } exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 107 */ +/* 124 */ /***/ function(module, exports) { "use strict"; @@ -6637,7 +6786,7 @@ function StringArrayBase64DecodeNodeTemplate() { exports.StringArrayBase64DecodeNodeTemplate = StringArrayBase64DecodeNodeTemplate; /***/ }, -/* 108 */ +/* 125 */ /***/ function(module, exports) { "use strict"; @@ -6649,7 +6798,7 @@ function StringArrayCallsWrapperTemplate() { exports.StringArrayCallsWrapperTemplate = StringArrayCallsWrapperTemplate; /***/ }, -/* 109 */ +/* 126 */ /***/ function(module, exports) { "use strict"; @@ -6661,7 +6810,7 @@ function StringArrayRc4DecodeNodeTemplate() { exports.StringArrayRc4DecodeNodeTemplate = StringArrayRc4DecodeNodeTemplate; /***/ }, -/* 110 */ +/* 127 */ /***/ function(module, exports) { "use strict"; @@ -6673,20 +6822,20 @@ function StringArrayTemplate() { exports.StringArrayTemplate = StringArrayTemplate; /***/ }, -/* 111 */ +/* 128 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var Utils_1 = __webpack_require__(4); +var Utils_1 = __webpack_require__(11); function SelfDefendingTemplate() { return "\n var selfDefendingFunc = function () { \n var object = {\n data: {\n key: 'cookie',\n value: 'timeout'\n },\n setCookie: function (options, name, value, document) {\n document = document || {};\n \n var updatedCookie = name + \"=\" + value;\n\n var i = 0;\n \n for (var i = 0, len = options.length; i < len; i++) { \n var propName = options[i];\n \n updatedCookie += \"; \" + propName;\n \n var propValue = options[propName];\n \n options.push(propValue);\n len = options.length;\n \n if (propValue !== true) {\n updatedCookie += \"=\" + propValue;\n }\n }\n\n document['cookie'] = updatedCookie;\n },\n removeCookie: function(){return 'dev';},\n getCookie: function (document, name) { \n document = document || function (value) { return value };\n var matches = document(new RegExp(\n \"(?:^|; )\" + name.replace(/([.$?*|{}()[]\\/+^])/g, '\\$1') + \"=([^;]*)\"\n ));\n \n var func = function (param1, param2) {\n param1(++param2);\n };\n \n func({whileFunctionName}, {timesName});\n \n return matches ? decodeURIComponent(matches[1]) : undefined;\n }\n };\n \n var test1 = function () {\n var regExp = new RegExp('" + Utils_1.Utils.stringToUnicodeEscapeSequence("\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}") + "');\n \n return regExp.test(object.removeCookie.toString());\n };\n \n object['updateCookie'] = test1;\n \n var cookie = '';\n var result = object['updateCookie']();\n \n if (!result) {\n object['setCookie'](['*'], 'counter', 1);\n } else if (result) {\n cookie = object['getCookie'](null, 'counter'); \n } else {\n object['removeCookie']();\n }\n };\n \n selfDefendingFunc();\n "; } exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 112 */ +/* 129 */ /***/ function(module, exports) { "use strict"; @@ -6698,67 +6847,87 @@ function StringArrayRotateFunctionTemplate() { exports.StringArrayRotateFunctionTemplate = StringArrayRotateFunctionTemplate; /***/ }, -/* 113 */ +/* 130 */, +/* 131 */ /***/ function(module, exports) { module.exports = require("babel-polyfill"); /***/ }, -/* 114 */ +/* 132 */ /***/ function(module, exports) { -module.exports = require("chance"); +module.exports = require("babel-runtime/core-js/object/define-property"); /***/ }, -/* 115 */ +/* 133 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/core-js/object/get-own-property-descriptor"); + +/***/ }, +/* 134 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/core-js/symbol"); + +/***/ }, +/* 135 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/helpers/defineProperty"); + +/***/ }, +/* 136 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/helpers/typeof"); + +/***/ }, +/* 137 */ /***/ function(module, exports) { module.exports = require("class-validator"); /***/ }, -/* 116 */ +/* 138 */ /***/ function(module, exports) { module.exports = require("commander"); /***/ }, -/* 117 */ +/* 139 */ /***/ function(module, exports) { module.exports = require("events"); /***/ }, -/* 118 */ +/* 140 */ /***/ function(module, exports) { module.exports = require("fs"); /***/ }, -/* 119 */ -/***/ function(module, exports) { - -module.exports = require("is-equal"); - -/***/ }, -/* 120 */ +/* 141 */ /***/ function(module, exports) { module.exports = require("mkdirp"); /***/ }, -/* 121 */ +/* 142 */ /***/ function(module, exports) { module.exports = require("reflect-metadata"); /***/ }, -/* 122 */ +/* 143 */, +/* 144 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var JavaScriptObfuscator_1 = __webpack_require__(15); +var JavaScriptObfuscator_1 = __webpack_require__(23); module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; /***/ } diff --git a/package.json b/package.json index 536dc0a9..1c5848b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "0.9.0-dev.1", + "version": "0.9.0-dev.2", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", @@ -20,19 +20,21 @@ "javascript-obfuscator": "./bin/javascript-obfuscator.js" }, "dependencies": { - "babel-polyfill": "6.20.0", + "babel-polyfill": "^6.20.0", + "babel-runtime": "^6.20.0", "chance": "1.0.4", "class-validator": "0.6.6", "commander": "2.9.0", "escodegen": "1.8.1", "esprima": "3.1.2", "estraverse": "4.2.0", - "inversify": "^3.0.0-rc.1", - "is-equal": "^1.5.3", + "inversify": "^3.0.0-rc.2", + "lodash": "^4.17.2", "mkdirp": "0.5.1", "reflect-metadata": "^0.1.8", "source-map-support": "0.4.6", - "string-template": "^1.0.0" + "string-template": "^1.0.0", + "tslib": "^1.2.0" }, "devDependencies": { "@types/chai": "3.4.34", @@ -43,22 +45,24 @@ "@types/estraverse": "0.0.6", "@types/estree": "0.0.34", "@types/joi": "9.0.33", + "@types/lodash": "^4.14.43", "@types/mkdirp": "0.3.29", "@types/mocha": "2.2.33", - "@types/node": "6.0.51", - "@types/sinon": "1.16.32", - "@types/string-template": "^1.0.2", - "awesome-typescript-loader": "^3.0.0-beta.9", + "@types/node": "6.0.52", + "@types/sinon": "1.16.33", + "@types/string-template": "1.0.2", + "awesome-typescript-loader": "3.0.0-beta.17", "babel-cli": "6.18.0", - "babel-loader": "6.2.9", + "babel-loader": "6.2.10", + "babel-plugin-transform-runtime": "^6.15.0", "babel-preset-es2015": "6.18.0", "chai": "3.5.0", "coveralls": "2.11.15", "istanbul": "1.1.0-alpha.1", "mocha": "3.2.0", "sinon": "2.0.0-pre.3", - "ts-node": "1.7.0", - "tslint": "4.0.2", + "ts-node": "1.7.2", + "tslint": "4.1.1", "typescript": "2.1.4", "webpack": "2.1.0-beta.27", "webpack-node-externals": "1.5.4" diff --git a/src/JavaScriptObfuscator.ts b/src/JavaScriptObfuscator.ts index 843d0837..1573d541 100644 --- a/src/JavaScriptObfuscator.ts +++ b/src/JavaScriptObfuscator.ts @@ -4,15 +4,20 @@ if (!(global)._babelPolyfill) { require('babel-polyfill'); } +import { ServiceIdentifiers } from './container/ServiceIdentifiers'; + +import { Chance } from 'chance'; + import { TInputOptions } from './types/options/TInputOptions'; import { IInversifyContainerFacade } from './interfaces/container/IInversifyContainerFacade'; import { IJavaScriptObfuscator } from './interfaces/IJavaScriptObfsucator'; import { IObfuscationResult } from './interfaces/IObfuscationResult'; +import { IOptions } from './interfaces/options/IOptions'; import { InversifyContainerFacade } from './container/InversifyContainerFacade'; import { JavaScriptObfuscatorCLI } from './cli/JavaScriptObfuscatorCLI'; -import { ServiceIdentifiers } from './container/ServiceIdentifiers'; +import { RandomGeneratorUtils } from './utils/RandomGeneratorUtils'; export class JavaScriptObfuscator { /** @@ -22,6 +27,12 @@ export class JavaScriptObfuscator { */ public static obfuscate (sourceCode: string, inputOptions: TInputOptions = {}): IObfuscationResult { const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade(inputOptions); + const options: IOptions = inversifyContainerFacade.get(ServiceIdentifiers.IOptions); + + if (options.seed !== 0) { + RandomGeneratorUtils.setRandomGenerator(new Chance(options.seed)); + } + const javaScriptObfuscator: IJavaScriptObfuscator = inversifyContainerFacade .get(ServiceIdentifiers.IJavaScriptObfuscator); diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index c0f59cf6..13c332d8 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/src/JavaScriptObfuscatorInternal.ts @@ -5,15 +5,13 @@ import * as esprima from 'esprima'; import * as escodegen from 'escodegen'; import * as ESTree from 'estree'; +import { IGeneratorOutput } from './interfaces/IGeneratorOutput'; import { IJavaScriptObfuscator } from './interfaces/IJavaScriptObfsucator'; import { IObfuscationResult } from './interfaces/IObfuscationResult'; import { IObfuscator } from './interfaces/IObfuscator'; -import { IGeneratorOutput } from './interfaces/IGeneratorOutput'; import { IOptions } from './interfaces/options/IOptions'; import { ISourceMapCorrector } from './interfaces/ISourceMapCorrector'; -import { RandomGeneratorUtils } from './utils/RandomGeneratorUtils'; - @injectable() export class JavaScriptObfuscatorInternal implements IJavaScriptObfuscator { /** @@ -102,10 +100,6 @@ export class JavaScriptObfuscatorInternal implements IJavaScriptObfuscator { * @returns {IObfuscationResult} */ public obfuscate (sourceCode: string): IObfuscationResult { - if (this.options.seed !== 0) { - RandomGeneratorUtils.setRandomGeneratorSeed(this.options.seed); - } - // parse AST tree const astTree: ESTree.Program = esprima.parse(sourceCode, JavaScriptObfuscatorInternal.esprimaParams); diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index 5f8842d7..aaad46ed 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -29,7 +29,7 @@ export class Obfuscator implements IObfuscator { /** * @type {Map} */ - private static readonly nodeControlFlowTransformersMap: Map = new Map ([ + private static readonly nodeControlFlowTransformersMap: Map = new Map([ [NodeType.FunctionDeclaration, [NodeTransformers.FunctionControlFlowTransformer]], [NodeType.FunctionExpression, [NodeTransformers.FunctionControlFlowTransformer]] ]); @@ -37,7 +37,7 @@ export class Obfuscator implements IObfuscator { /** * @type {Map} */ - private static readonly nodeObfuscatorsMap: Map = new Map ([ + private static readonly nodeObfuscatorsMap: Map = new Map([ [NodeType.ArrowFunctionExpression, [NodeTransformers.FunctionObfuscator]], [NodeType.ClassDeclaration, [NodeTransformers.FunctionDeclarationObfuscator]], [NodeType.CatchClause, [NodeTransformers.CatchClauseObfuscator]], diff --git a/src/cli/CLIUtils.ts b/src/cli/CLIUtils.ts index 149f1098..c5a013c4 100644 --- a/src/cli/CLIUtils.ts +++ b/src/cli/CLIUtils.ts @@ -4,8 +4,6 @@ import * as path from 'path'; import { IPackageConfig } from '../interfaces/IPackageConfig'; -import { Utils } from '../utils/Utils'; - export class CLIUtils { /** * @type {string[]} @@ -102,7 +100,7 @@ export class CLIUtils { throw new ReferenceError(`Given input path must be a valid file path`); } - if (!Utils.arrayContains(CLIUtils.availableInputExtensions, path.extname(inputPath))) { + if (!CLIUtils.availableInputExtensions.includes(path.extname(inputPath))) { throw new ReferenceError(`Input file must have .js extension`); } } diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index 43e27102..b146b5d7 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -9,11 +9,10 @@ import { IObfuscationResult } from '../interfaces/IObfuscationResult'; import { SourceMapMode } from '../enums/SourceMapMode'; import { StringArrayEncoding } from '../enums/StringArrayEncoding'; -import { DEFAULT_PRESET } from '../preset-options/DefaultPreset'; +import { DEFAULT_PRESET } from '../options/presets/Default'; import { CLIUtils } from './CLIUtils'; import { JavaScriptObfuscator } from '../JavaScriptObfuscator'; -import { Utils } from '../utils/Utils'; export class JavaScriptObfuscatorCLI { /** @@ -104,7 +103,7 @@ export class JavaScriptObfuscatorCLI { public run (): void { this.configureCommands(); - if (!this.arguments.length || Utils.arrayContains(this.arguments, '--help')) { + if (!this.arguments.length || this.arguments.includes('--help')) { this.commands.outputHelp(); return; @@ -129,7 +128,7 @@ export class JavaScriptObfuscatorCLI { continue; } - if (!Utils.arrayContains(availableOptions, option)) { + if (!availableOptions.includes(option)) { continue; } @@ -160,6 +159,11 @@ export class JavaScriptObfuscatorCLI { 'Enables control flow flattening', JavaScriptObfuscatorCLI.parseBoolean ) + .option( + '--controlFlowFlatteningThreshold ', + 'The probability that the control flow flattening transformation will be applied to the node', + parseFloat + ) .option( '--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', diff --git a/src/container/ServiceIdentifiers.ts b/src/container/ServiceIdentifiers.ts index 8444f373..8eef25ac 100644 --- a/src/container/ServiceIdentifiers.ts +++ b/src/container/ServiceIdentifiers.ts @@ -5,7 +5,7 @@ export const ServiceIdentifiers: any = { 'Factory': Symbol('Factory'), 'Factory': Symbol('Factory'), 'Factory': Symbol('Factory'), - 'Factory': Symbol('Factory'), + 'Factory': Symbol('Factory'), 'Factory>': Symbol('Factory>'), ICalleeDataExtractor: Symbol('ICalleeDataExtractor'), ICustomNode: Symbol('ICustomNode'), @@ -17,9 +17,10 @@ export const ServiceIdentifiers: any = { IObfuscationResult: Symbol('IObfuscationResult'), IObfuscator: Symbol('IObfuscator'), IOptions: Symbol('IOptions'), - IReplacer: Symbol('IReplacer'), + IObfuscatorReplacer: Symbol('IObfuscatorReplacer'), ISourceMapCorrector: Symbol('ISourceMapCorrector'), IStackTraceAnalyzer: Symbol('IStackTraceAnalyzer'), 'IStorage': Symbol('IStorage'), - 'IStorage': Symbol('IStorage') + 'IStorage': Symbol('IStorage'), + 'IStorage': Symbol('IStorage') }; diff --git a/src/container/modules/node-transformers/NodeControlFlowTransformersModule.ts b/src/container/modules/node-transformers/NodeControlFlowTransformersModule.ts index 54ab5c27..a4c175aa 100644 --- a/src/container/modules/node-transformers/NodeControlFlowTransformersModule.ts +++ b/src/container/modules/node-transformers/NodeControlFlowTransformersModule.ts @@ -14,7 +14,7 @@ export const nodeControlFlowTransformersModule: interfaces.ContainerModule = new bind(ServiceIdentifiers['Factory']) .toFactory((context: interfaces.Context) => { - const cache: Map = new Map (); + const cache: Map = new Map(); return (replacerName: NodeControlFlowReplacers) => { if (cache.has(replacerName)) { diff --git a/src/container/modules/node-transformers/NodeObfuscatorsModule.ts b/src/container/modules/node-transformers/NodeObfuscatorsModule.ts index aaab99af..ab921f8f 100644 --- a/src/container/modules/node-transformers/NodeObfuscatorsModule.ts +++ b/src/container/modules/node-transformers/NodeObfuscatorsModule.ts @@ -1,7 +1,7 @@ import { ContainerModule, interfaces } from 'inversify'; import { ServiceIdentifiers } from '../../ServiceIdentifiers'; -import { IReplacer } from '../../../interfaces/node-transformers/IReplacer'; +import { IObfuscatorReplacer } from '../../../interfaces/node-transformers/IObfuscatorReplacer'; import { NodeObfuscatorsReplacers } from '../../../enums/container/NodeObfuscatorsReplacers'; @@ -11,33 +11,33 @@ import { NumberLiteralReplacer } from '../../../node-transformers/node-obfuscato import { StringLiteralReplacer } from '../../../node-transformers/node-obfuscators/replacers/StringLiteralReplacer'; export const nodeObfuscatorsModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { - bind(ServiceIdentifiers.IReplacer) + bind(ServiceIdentifiers.IObfuscatorReplacer) .to(BooleanLiteralReplacer) .whenTargetNamed(NodeObfuscatorsReplacers.BooleanReplacer); - bind(ServiceIdentifiers.IReplacer) + bind(ServiceIdentifiers.IObfuscatorReplacer) .to(IdentifierReplacer) .whenTargetNamed(NodeObfuscatorsReplacers.IdentifierReplacer); - bind(ServiceIdentifiers.IReplacer) + bind(ServiceIdentifiers.IObfuscatorReplacer) .to(NumberLiteralReplacer) .whenTargetNamed(NodeObfuscatorsReplacers.NumberLiteralReplacer); - bind(ServiceIdentifiers.IReplacer) + bind(ServiceIdentifiers.IObfuscatorReplacer) .to(StringLiteralReplacer) .whenTargetNamed(NodeObfuscatorsReplacers.StringLiteralReplacer); - bind(ServiceIdentifiers['Factory']) - .toFactory((context: interfaces.Context) => { - const cache: Map = new Map (); + bind(ServiceIdentifiers['Factory']) + .toFactory((context: interfaces.Context) => { + const cache: Map = new Map(); return (replacerName: NodeObfuscatorsReplacers) => { if (cache.has(replacerName)) { - return cache.get(replacerName); + return cache.get(replacerName); } - const obfuscationReplacer: IReplacer = context.container.getNamed( - ServiceIdentifiers.IReplacer, + const obfuscationReplacer: IObfuscatorReplacer = context.container.getNamed( + ServiceIdentifiers.IObfuscatorReplacer, replacerName ); diff --git a/src/container/modules/node-transformers/NodeTransformersModule.ts b/src/container/modules/node-transformers/NodeTransformersModule.ts index 6e200c76..f45d3db9 100644 --- a/src/container/modules/node-transformers/NodeTransformersModule.ts +++ b/src/container/modules/node-transformers/NodeTransformersModule.ts @@ -63,7 +63,7 @@ export const nodeTransformersModule: interfaces.ContainerModule = new ContainerM // node transformers factory bind(ServiceIdentifiers['Factory']) .toFactory((context: interfaces.Context) => { - const cache: Map = new Map (); + const cache: Map = new Map(); return (nodeTransformersMap: Map) => (nodeType: string) => { const nodeTransformers: NodeTransformers[] = nodeTransformersMap.get(nodeType) || []; diff --git a/src/container/modules/stack-trace-analyzer/StackTraceAnalyzerModule.ts b/src/container/modules/stack-trace-analyzer/StackTraceAnalyzerModule.ts index d09b8009..8d2f52c7 100644 --- a/src/container/modules/stack-trace-analyzer/StackTraceAnalyzerModule.ts +++ b/src/container/modules/stack-trace-analyzer/StackTraceAnalyzerModule.ts @@ -32,7 +32,7 @@ export const stackTraceAnalyzerModule: interfaces.ContainerModule = new Containe // node transformers factory bind(ServiceIdentifiers['Factory']) .toFactory((context: interfaces.Context) => { - const cache: Map = new Map (); + const cache: Map = new Map(); return (calleeDataExtractorName: CalleeDataExtractors) => { if (cache.has(calleeDataExtractorName)) { diff --git a/src/container/modules/storages/StoragesModule.ts b/src/container/modules/storages/StoragesModule.ts index f1787925..00b4f469 100644 --- a/src/container/modules/storages/StoragesModule.ts +++ b/src/container/modules/storages/StoragesModule.ts @@ -7,6 +7,7 @@ import { IStorage } from '../../../interfaces/storages/IStorage'; import { ControlFlowStorage } from '../../../storages/control-flow/ControlFlowStorage'; import { CustomNodeGroupStorage } from '../../../storages/custom-node-group/CustomNodeGroupStorage'; +import { StringArrayStorage } from '../../../storages/string-array/StringArrayStorage'; export const storagesModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { // storages @@ -17,6 +18,10 @@ export const storagesModule: interfaces.ContainerModule = new ContainerModule((b bind>(ServiceIdentifiers['IStorage']) .to(ControlFlowStorage); + bind>(ServiceIdentifiers['IStorage']) + .to(StringArrayStorage) + .inSingletonScope(); + // controlFlowStorage factory bind>(ServiceIdentifiers['Factory>']) .toFactory>((context: interfaces.Context) => { diff --git a/src/custom-nodes/AbstractCustomNode.ts b/src/custom-nodes/AbstractCustomNode.ts index 9572dad4..60a1b02c 100644 --- a/src/custom-nodes/AbstractCustomNode.ts +++ b/src/custom-nodes/AbstractCustomNode.ts @@ -31,7 +31,9 @@ export abstract class AbstractCustomNode implements ICustomNode { /** * @returns {string} */ - public abstract getCode (): string; + public getCode (): string { + return NodeUtils.convertStructureToCode(this.getNode()); + } /** * @returns {TStatement[]} @@ -44,6 +46,11 @@ export abstract class AbstractCustomNode implements ICustomNode { * @returns {TStatement[]} */ protected getNodeStructure (): TStatement[] { - return NodeUtils.convertCodeToStructure(this.getCode()); + return NodeUtils.convertCodeToStructure(this.getTemplate()); } + + /** + * @returns {string} + */ + protected abstract getTemplate (): string; } diff --git a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts index 396012a7..932003d1 100644 --- a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts +++ b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts @@ -39,7 +39,7 @@ export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { /** * @returns {string} */ - public getCode (): string { + protected getTemplate (): string { return format(ConsoleOutputDisableExpressionTemplate(), { consoleLogDisableFunctionName: RandomGeneratorUtils.getRandomVariableName(), singleNodeCallControllerFunctionName: this.callsControllerFunctionName diff --git a/src/custom-nodes/control-flow-replacers-nodes/binary-expression-control-flow-replacer-nodes/BinaryExpressionFunctionNode.ts b/src/custom-nodes/control-flow-replacers-nodes/binary-expression-control-flow-replacer-nodes/BinaryExpressionFunctionNode.ts index c10e7a0a..d39da909 100644 --- a/src/custom-nodes/control-flow-replacers-nodes/binary-expression-control-flow-replacer-nodes/BinaryExpressionFunctionNode.ts +++ b/src/custom-nodes/control-flow-replacers-nodes/binary-expression-control-flow-replacer-nodes/BinaryExpressionFunctionNode.ts @@ -32,14 +32,14 @@ export class BinaryExpressionFunctionNode extends AbstractCustomNode { /** * @param operator */ - initialize (operator: string): void { + public initialize (operator: string): void { this.operator = operator; } /** * @returns {string} */ - public getCode (): string { + protected getTemplate (): string { return format(BinaryExpressionFunctionTemplate(), { functionName: RandomGeneratorUtils.getRandomVariableName(1), operator: this.operator diff --git a/src/custom-nodes/control-flow-replacers-nodes/binary-expression-control-flow-replacer-nodes/ControlFlowStorageCallNode.ts b/src/custom-nodes/control-flow-replacers-nodes/binary-expression-control-flow-replacer-nodes/ControlFlowStorageCallNode.ts index 36559589..f4f50b07 100644 --- a/src/custom-nodes/control-flow-replacers-nodes/binary-expression-control-flow-replacer-nodes/ControlFlowStorageCallNode.ts +++ b/src/custom-nodes/control-flow-replacers-nodes/binary-expression-control-flow-replacer-nodes/ControlFlowStorageCallNode.ts @@ -67,7 +67,7 @@ export class ControlFlowStorageCallNode extends AbstractCustomNode { /** * @returns {string} */ - public getCode (): string { + protected getTemplate (): string { return format(ControlFlowStorageCallTemplate(), { controlFlowStorageKey: this.controlFlowStorageKey, controlFlowStorageName: this.controlFlowStorageName, diff --git a/src/custom-nodes/control-flow-storage-nodes/ControlFlowStorageNode.ts b/src/custom-nodes/control-flow-storage-nodes/ControlFlowStorageNode.ts index e8cac8d1..f927659f 100644 --- a/src/custom-nodes/control-flow-storage-nodes/ControlFlowStorageNode.ts +++ b/src/custom-nodes/control-flow-storage-nodes/ControlFlowStorageNode.ts @@ -21,12 +21,6 @@ export class ControlFlowStorageNode extends AbstractCustomNode { @initializable() private controlFlowStorage: IStorage ; - /** - * @type {string} - */ - @initializable() - private controlFlowStorageName: string; - /** * @param options */ @@ -38,20 +32,18 @@ export class ControlFlowStorageNode extends AbstractCustomNode { /** * @param controlFlowStorage - * @param controlFlowStorageName */ - public initialize (controlFlowStorage: IStorage , controlFlowStorageName: string): void { + public initialize (controlFlowStorage: IStorage ): void { this.controlFlowStorage = controlFlowStorage; - this.controlFlowStorageName = controlFlowStorageName; } /** * @returns {string} */ - public getCode (): string { + protected getTemplate (): string { return format(ControlFlowStorageTemplate(), { controlFlowStorage: this.controlFlowStorage.toString(), - controlFlowStorageName: this.controlFlowStorageName + controlFlowStorageName: this.controlFlowStorage.getStorageId() }); } } diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts index 31c67e42..982ac2cf 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts @@ -38,7 +38,7 @@ export class DebugProtectionFunctionCallNode extends AbstractCustomNode { /** * @returns {string} */ - public getCode (): string { + protected getTemplate (): string { return format(DebugProtectionFunctionCallTemplate(), { debugProtectionFunctionName: this.debugProtectionFunctionName }); diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts index 78e08dd9..030df602 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts @@ -38,7 +38,7 @@ export class DebugProtectionFunctionIntervalNode extends AbstractCustomNode { /** * @returns {string} */ - public getCode (): string { + protected getTemplate (): string { return format(DebugProtectionFunctionIntervalTemplate(), { debugProtectionFunctionName: this.debugProtectionFunctionName }); diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts index d66484de..1bea1b85 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts @@ -38,7 +38,7 @@ export class DebugProtectionFunctionNode extends AbstractCustomNode { /** * @returns {string} */ - public getCode (): string { + protected getTemplate (): string { return format(DebugProtectionFunctionTemplate(), { debugProtectionFunctionName: this.debugProtectionFunctionName }); diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts index 50d1133f..e68f0e7c 100644 --- a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -40,7 +40,7 @@ export class DomainLockNode extends AbstractCustomNode { /** * @returns {string} */ - public getCode (): string { + protected getTemplate (): string { let domainsString: string = this.options.domainLock.join(';'), [hiddenDomainsString, diff]: string[] = CryptUtils.hideString(domainsString, domainsString.length * 3); diff --git a/src/custom-nodes/node-calls-controller-nodes/NodeCallsControllerFunctionNode.ts b/src/custom-nodes/node-calls-controller-nodes/NodeCallsControllerFunctionNode.ts index 73e9f727..1714d0fc 100644 --- a/src/custom-nodes/node-calls-controller-nodes/NodeCallsControllerFunctionNode.ts +++ b/src/custom-nodes/node-calls-controller-nodes/NodeCallsControllerFunctionNode.ts @@ -13,7 +13,7 @@ import { initializable } from '../../decorators/Initializable'; import { SingleNodeCallControllerTemplate } from '../../templates/custom-nodes/SingleNodeCallControllerTemplate'; -import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../options/presets/NoCustomNodes'; import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; @@ -53,7 +53,7 @@ export class NodeCallsControllerFunctionNode extends AbstractCustomNode { /** * @returns {string} */ - public getCode (): string { + protected getTemplate (): string { if (this.appendEvent === ObfuscationEvents.AfterObfuscation) { return JavaScriptObfuscator.obfuscate( format(SingleNodeCallControllerTemplate(), { diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index 03ca3788..2daf1f1d 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts @@ -7,7 +7,7 @@ import { IOptions } from '../../interfaces/options/IOptions'; import { initializable } from '../../decorators/Initializable'; -import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../options/presets/NoCustomNodes'; import { SelfDefendingTemplate } from '../../templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate'; @@ -42,7 +42,7 @@ export class SelfDefendingUnicodeNode extends AbstractCustomNode { /** * @returns {string} */ - public getCode (): string { + protected getTemplate (): string { return JavaScriptObfuscator.obfuscate( format(SelfDefendingTemplate(), { selfDefendingFunctionName: RandomGeneratorUtils.getRandomVariableName(), diff --git a/src/custom-nodes/string-array-nodes/StringArrayCallsWrapper.ts b/src/custom-nodes/string-array-nodes/StringArrayCallsWrapper.ts index 5013968f..e557c516 100644 --- a/src/custom-nodes/string-array-nodes/StringArrayCallsWrapper.ts +++ b/src/custom-nodes/string-array-nodes/StringArrayCallsWrapper.ts @@ -3,7 +3,6 @@ import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; import * as format from 'string-template'; -import { ICustomNodeWithIdentifier } from '../../interfaces/custom-nodes/ICustomNodeWithIdentifier'; import { IOptions } from '../../interfaces/options/IOptions'; import { IStorage } from '../../interfaces/storages/IStorage'; @@ -11,7 +10,7 @@ import { StringArrayEncoding } from '../../enums/StringArrayEncoding'; import { initializable } from '../../decorators/Initializable'; -import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../options/presets/NoCustomNodes'; import { AtobTemplate } from '../../templates/custom-nodes/AtobTemplate'; import { Rc4Template } from '../../templates/custom-nodes/Rc4Template'; @@ -24,18 +23,12 @@ import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; @injectable() -export class StringArrayCallsWrapper extends AbstractCustomNode implements ICustomNodeWithIdentifier { +export class StringArrayCallsWrapper extends AbstractCustomNode { /** * @type {IStorage } */ @initializable() - private stringArray: IStorage ; - - /** - * @type {string} - */ - @initializable() - private stringArrayCallsWrapperName: string; + private stringArrayStorage: IStorage ; /** * @type {string} @@ -43,6 +36,12 @@ export class StringArrayCallsWrapper extends AbstractCustomNode implements ICust @initializable() private stringArrayName: string; + /** + * @type {string} + */ + @initializable() + private stringArrayCallsWrapperName: string; + /** * @param options */ @@ -53,46 +52,20 @@ export class StringArrayCallsWrapper extends AbstractCustomNode implements ICust } /** - * @param stringArray + * @param stringArrayStorage * @param stringArrayName * @param stringArrayCallsWrapperName */ public initialize ( - stringArray: IStorage , + stringArrayStorage: IStorage , stringArrayName: string, stringArrayCallsWrapperName: string ): void { - this.stringArray = stringArray; + this.stringArrayStorage = stringArrayStorage; this.stringArrayName = stringArrayName; this.stringArrayCallsWrapperName = stringArrayCallsWrapperName; } - /** - * @returns {string} - */ - public getCode (): string { - const decodeNodeTemplate: string = this.getDecodeStringArrayTemplate(); - - return JavaScriptObfuscator.obfuscate( - format(StringArrayCallsWrapperTemplate(), { - decodeNodeTemplate, - stringArrayCallsWrapperName: this.stringArrayCallsWrapperName, - stringArrayName: this.stringArrayName - }), - { - ...NO_CUSTOM_NODES_PRESET, - seed: this.options.seed - } - ).getObfuscatedCode(); - } - - /** - * @returns {string} - */ - public getNodeIdentifier (): string { - return this.stringArrayCallsWrapperName; - }; - /** * @returns {string} */ @@ -130,4 +103,23 @@ export class StringArrayCallsWrapper extends AbstractCustomNode implements ICust return decodeStringArrayTemplate; } + + /** + * @returns {string} + */ + protected getTemplate (): string { + const decodeNodeTemplate: string = this.getDecodeStringArrayTemplate(); + + return JavaScriptObfuscator.obfuscate( + format(StringArrayCallsWrapperTemplate(), { + decodeNodeTemplate, + stringArrayCallsWrapperName: this.stringArrayCallsWrapperName, + stringArrayName: this.stringArrayName + }), + { + ...NO_CUSTOM_NODES_PRESET, + seed: this.options.seed + } + ).getObfuscatedCode(); + } } diff --git a/src/custom-nodes/string-array-nodes/StringArrayNode.ts b/src/custom-nodes/string-array-nodes/StringArrayNode.ts index 3171ac99..ffab6aab 100644 --- a/src/custom-nodes/string-array-nodes/StringArrayNode.ts +++ b/src/custom-nodes/string-array-nodes/StringArrayNode.ts @@ -5,7 +5,6 @@ import * as format from 'string-template'; import { TStatement } from '../../types/node/TStatement'; -import { ICustomNodeWithData } from '../../interfaces/custom-nodes/ICustomNodeWithData'; import { IOptions } from '../../interfaces/options/IOptions'; import { IStorage } from '../../interfaces/storages/IStorage'; @@ -17,17 +16,12 @@ import { AbstractCustomNode } from '../AbstractCustomNode'; import { StringArrayStorage } from '../../storages/string-array/StringArrayStorage'; @injectable() -export class StringArrayNode extends AbstractCustomNode implements ICustomNodeWithData { - /** - * @type {number} - */ - public static ARRAY_RANDOM_LENGTH: number = 4; - +export class StringArrayNode extends AbstractCustomNode { /** * @type {IStorage } */ @initializable() - private stringArray: IStorage ; + private stringArrayStorage: IStorage ; /** * @type {string} @@ -51,43 +45,36 @@ export class StringArrayNode extends AbstractCustomNode implements ICustomNodeWi } /** - * @param stringArray + * @param stringArrayStorage * @param stringArrayName * @param stringArrayRotateValue */ public initialize ( - stringArray: IStorage , + stringArrayStorage: IStorage , stringArrayName: string, stringArrayRotateValue: number ): void { - this.stringArray = stringArray; + this.stringArrayStorage = stringArrayStorage; this.stringArrayName = stringArrayName; this.stringArrayRotateValue = stringArrayRotateValue; } - /** - * @returns {string} - */ - public getCode (): string { - return format(StringArrayTemplate(), { - stringArrayName: this.stringArrayName, - stringArray: this.stringArray.toString() - }); - } - - /** - * @returns {IStorage } - */ - public getNodeData (): IStorage { - return this.stringArray; - } - /** * @returns {TStatement[]} */ public getNode (): TStatement[] { - (this.stringArray).rotateArray(this.stringArrayRotateValue); + (this.stringArrayStorage).rotateArray(this.stringArrayRotateValue); return super.getNode(); } + + /** + * @returns {string} + */ + protected getTemplate (): string { + return format(StringArrayTemplate(), { + stringArrayName: this.stringArrayName, + stringArray: this.stringArrayStorage.toString() + }); + } } diff --git a/src/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.ts b/src/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.ts index c4f5bc0f..8f6fdacc 100644 --- a/src/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.ts +++ b/src/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.ts @@ -8,7 +8,7 @@ import { IStorage } from '../../interfaces/storages/IStorage'; import { initializable } from '../../decorators/Initializable'; -import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../options/presets/NoCustomNodes'; import { SelfDefendingTemplate } from '../../templates/custom-nodes/string-array-nodes/string-array-rotate-function-node/SelfDefendingTemplate'; import { StringArrayRotateFunctionTemplate } from '../../templates/custom-nodes/string-array-nodes/string-array-rotate-function-node/StringArrayRotateFunctionTemplate'; @@ -24,7 +24,7 @@ export class StringArrayRotateFunctionNode extends AbstractCustomNode { * @type {IStorage } */ @initializable() - private stringArray: IStorage ; + private stringArrayStorage: IStorage ; /** * @type {string} @@ -48,16 +48,16 @@ export class StringArrayRotateFunctionNode extends AbstractCustomNode { } /** - * @param stringArray + * @param stringArrayStorage * @param stringArrayName * @param stringArrayRotateValue */ public initialize ( - stringArray: IStorage , + stringArrayStorage: IStorage , stringArrayName: string, stringArrayRotateValue: number ): void { - this.stringArray = stringArray; + this.stringArrayStorage = stringArrayStorage; this.stringArrayName = stringArrayName; this.stringArrayRotateValue = stringArrayRotateValue; } @@ -65,7 +65,7 @@ export class StringArrayRotateFunctionNode extends AbstractCustomNode { /** * @returns {string} */ - public getCode (): string { + protected getTemplate (): string { let code: string = '', timesName: string = RandomGeneratorUtils.getRandomVariableName(), whileFunctionName: string = RandomGeneratorUtils.getRandomVariableName(); diff --git a/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts b/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts index adb65346..768bde17 100644 --- a/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts +++ b/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts @@ -16,12 +16,10 @@ import { initializable } from '../../../decorators/Initializable'; import { CustomNodes } from '../../../enums/container/CustomNodes'; import { ObfuscationEvents } from '../../../enums/ObfuscationEvents'; -import { StringArrayNode } from '../StringArrayNode'; - import { AbstractCustomNodeGroup } from '../../AbstractCustomNodeGroup'; import { NodeAppender } from '../../../node/NodeAppender'; import { RandomGeneratorUtils } from '../../../utils/RandomGeneratorUtils'; -import { StringArrayStorage } from '../../../storages/string-array/StringArrayStorage'; +import { Utils } from '../../../utils/Utils'; @injectable() export class StringArrayCustomNodeGroup extends AbstractCustomNodeGroup { @@ -50,22 +48,25 @@ export class StringArrayCustomNodeGroup extends AbstractCustomNodeGroup { * @type {IStorage } */ @initializable() - private stringArray: IStorage ; + private stringArrayStorage: IStorage ; /** * @param customNodeFactory * @param obfuscationEventEmitter + * @param stringArrayStorage * @param options */ constructor ( @inject(ServiceIdentifiers['Factory']) customNodeFactory: TCustomNodeFactory, @inject(ServiceIdentifiers.IObfuscationEventEmitter) obfuscationEventEmitter: IObfuscationEventEmitter, + @inject(ServiceIdentifiers['IStorage']) stringArrayStorage: IStorage, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(options); this.customNodeFactory = customNodeFactory; this.obfuscationEventEmitter = obfuscationEventEmitter; + this.stringArrayStorage = stringArrayStorage; } /** @@ -73,7 +74,7 @@ export class StringArrayCustomNodeGroup extends AbstractCustomNodeGroup { * @param stackTraceData */ public appendCustomNodes (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void { - if (!this.stringArray.getLength()) { + if (!this.stringArrayStorage.getLength()) { return; } @@ -95,7 +96,6 @@ export class StringArrayCustomNodeGroup extends AbstractCustomNodeGroup { public initialize (): void { this.customNodes = new Map (); - this.stringArray = new StringArrayStorage(); if (!this.options.stringArray) { return; @@ -105,8 +105,10 @@ export class StringArrayCustomNodeGroup extends AbstractCustomNodeGroup { const stringArrayCallsWrapper: ICustomNode = this.customNodeFactory(CustomNodes.StringArrayCallsWrapper); const stringArrayRotateFunctionNode: ICustomNode = this.customNodeFactory(CustomNodes.StringArrayRotateFunctionNode); - const stringArrayName: string = RandomGeneratorUtils.getRandomVariableName(StringArrayNode.ARRAY_RANDOM_LENGTH); - const stringArrayCallsWrapperName: string = RandomGeneratorUtils.getRandomVariableName(StringArrayNode.ARRAY_RANDOM_LENGTH); + const stringArrayStorageId: string = this.stringArrayStorage.getStorageId(); + + const stringArrayName: string = `_${Utils.hexadecimalPrefix}${stringArrayStorageId}`; + const stringArrayCallsWrapperName: string = `_${Utils.hexadecimalPrefix}${Utils.stringRotate(stringArrayStorageId, 2)}`; let stringArrayRotateValue: number; @@ -116,9 +118,9 @@ export class StringArrayCustomNodeGroup extends AbstractCustomNodeGroup { stringArrayRotateValue = 0; } - stringArrayNode.initialize(this.stringArray, stringArrayName, stringArrayRotateValue); - stringArrayCallsWrapper.initialize(this.stringArray, stringArrayName, stringArrayCallsWrapperName); - stringArrayRotateFunctionNode.initialize(this.stringArray, stringArrayName, stringArrayRotateValue); + stringArrayNode.initialize(this.stringArrayStorage, stringArrayName, stringArrayRotateValue); + stringArrayCallsWrapper.initialize(this.stringArrayStorage, stringArrayName, stringArrayCallsWrapperName); + stringArrayRotateFunctionNode.initialize(this.stringArrayStorage, stringArrayName, stringArrayRotateValue); this.customNodes.set(CustomNodes.StringArrayNode, stringArrayNode); this.customNodes.set(CustomNodes.StringArrayCallsWrapper, stringArrayCallsWrapper); diff --git a/src/declarations/ESTree.d.ts b/src/declarations/ESTree.d.ts index 8671ff59..c5ec060f 100644 --- a/src/declarations/ESTree.d.ts +++ b/src/declarations/ESTree.d.ts @@ -4,8 +4,8 @@ import * as ESTree from 'estree'; declare module 'estree' { interface BaseNode { - parentNode?: ESTree.Node; obfuscated?: boolean; + parentNode?: ESTree.Node; } interface SimpleLiteral extends ESTree.BaseNode, ESTree.BaseExpression { diff --git a/src/declarations/escodegen.d.ts b/src/declarations/escodegen.d.ts new file mode 100644 index 00000000..f4de14be --- /dev/null +++ b/src/declarations/escodegen.d.ts @@ -0,0 +1,10 @@ +import { IGeneratorOutput } from '../interfaces/IGeneratorOutput'; + +declare module 'escodegen' { + /** + * @param ast + * @param options + * @returns IGeneratorOutput + */ + export function generate(ast: any, options?: GenerateOptions): IGeneratorOutput; +} diff --git a/src/decorators/Initializable.ts b/src/decorators/Initializable.ts index 7f0608ea..2a925869 100644 --- a/src/decorators/Initializable.ts +++ b/src/decorators/Initializable.ts @@ -12,46 +12,42 @@ export function initializable ( const decoratorName: string = Object.keys(this)[0]; return (target: IInitializable, propertyKey: string | symbol): any => { + const descriptor: PropertyDescriptor = { + configurable: true, + enumerable: true + }; const initializeMethod: any = (target)[initializeMethodKey]; if (!initializeMethod || typeof initializeMethod !== 'function') { throw new Error(`\`${initializeMethodKey}\` method with initialization logic not found. \`@${decoratorName}\` decorator requires \`${initializeMethodKey}\` method`); } - const methodDescriptor: PropertyDescriptor = Object.getOwnPropertyDescriptor(target, initializeMethodKey) || { - configurable: true, - enumerable: true - }; + const metadataPropertyKey: string = `_${propertyKey}`; + const propertyDescriptor: PropertyDescriptor = Object.getOwnPropertyDescriptor(target, metadataPropertyKey) || descriptor; + const methodDescriptor: PropertyDescriptor = Object.getOwnPropertyDescriptor(target, initializeMethodKey) || descriptor; const originalMethod: Function = methodDescriptor.value; - methodDescriptor.value = function (): void { - originalMethod.apply(this, arguments); + Object.defineProperty(target, propertyKey, { + ...propertyDescriptor, + get: function (): any { + if (this[metadataPropertyKey] === undefined) { + throw new Error(`Property \`${propertyKey}\` is not initialized! Initialize it first!`); + } - // call property getter to activate initialization check inside it - if (this[propertyKey]) {} - }; - - Object.defineProperty(target, initializeMethodKey, methodDescriptor); - - const metadataPropertyKey: string = `_${propertyKey}`; - const propertyDescriptor: PropertyDescriptor = Object.getOwnPropertyDescriptor(target, metadataPropertyKey) || { - configurable: true, - enumerable: true - }; - - propertyDescriptor.get = function(): any { - if (this[metadataPropertyKey] === undefined) { - throw new Error(`Property \`${propertyKey}\` is not initialized! Initialize it first!`); + return this[metadataPropertyKey]; + }, + set: function (newVal: any): void { + this[metadataPropertyKey] = newVal; } + }); + Object.defineProperty(target, initializeMethodKey, { + ...methodDescriptor, + value: function (): void { + originalMethod.apply(this, arguments); - return this[metadataPropertyKey]; - }; - - propertyDescriptor.set = function (newVal: any): void { - this[metadataPropertyKey] = newVal; - }; - - Object.defineProperty(target, propertyKey, propertyDescriptor); + if (this[propertyKey]) {} + } + }); return propertyDescriptor; }; diff --git a/src/enums/NodeType.ts b/src/enums/NodeType.ts index 631ab1cb..2fde4b4f 100644 --- a/src/enums/NodeType.ts +++ b/src/enums/NodeType.ts @@ -25,6 +25,8 @@ export const NodeType: any = Utils.strEnumify({ Program: 'Program', Property: 'Property', ReturnStatement: 'ReturnStatement', + SwitchCase: 'SwitchCase', + SwitchStatement: 'SwitchStatement', TryStatement: 'TryStatement', UnaryExpression: 'UnaryExpression', UpdateExpression: 'UpdateExpression', diff --git a/src/interfaces/IGenerator.d.ts b/src/interfaces/IGenerator.d.ts deleted file mode 100644 index b185892d..00000000 --- a/src/interfaces/IGenerator.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { IGeneratorOutput } from './IGeneratorOutput'; - -declare module 'escodegen' { - export function generate(ast: any, options?: GenerateOptions): IGeneratorOutput; -} diff --git a/src/interfaces/IJavaScriptObfsucator.d.ts b/src/interfaces/IJavaScriptObfsucator.d.ts index f9c0a1b0..ac04d50f 100644 --- a/src/interfaces/IJavaScriptObfsucator.d.ts +++ b/src/interfaces/IJavaScriptObfsucator.d.ts @@ -1,5 +1,9 @@ import { IObfuscationResult } from './IObfuscationResult'; export interface IJavaScriptObfuscator { + /** + * @param sourceCode + * @returns IObfuscationResult + */ obfuscate (sourceCode: string): IObfuscationResult; } diff --git a/src/interfaces/IObfuscator.d.ts b/src/interfaces/IObfuscator.d.ts index b8f555b9..edfaa4e5 100644 --- a/src/interfaces/IObfuscator.d.ts +++ b/src/interfaces/IObfuscator.d.ts @@ -1,5 +1,9 @@ import * as ESTree from 'estree'; export interface IObfuscator { + /** + * @param astTree + * @returns ESTree.Program + */ obfuscateAstTree (astTree: ESTree.Program): ESTree.Program; } diff --git a/src/interfaces/ISourceMapCorrector.d.ts b/src/interfaces/ISourceMapCorrector.d.ts index ff24ebe7..7ca277dc 100644 --- a/src/interfaces/ISourceMapCorrector.d.ts +++ b/src/interfaces/ISourceMapCorrector.d.ts @@ -1,5 +1,10 @@ import { IObfuscationResult } from './IObfuscationResult'; export interface ISourceMapCorrector { + /** + * @param obfuscatedCode + * @param sourceMap + * @returns IObfuscationResult + */ correct (obfuscatedCode: string, sourceMap: string): IObfuscationResult; } diff --git a/src/interfaces/custom-nodes/ICustomNodeWithData.d.ts b/src/interfaces/custom-nodes/ICustomNodeWithData.d.ts deleted file mode 100644 index afbaa164..00000000 --- a/src/interfaces/custom-nodes/ICustomNodeWithData.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ICustomNode } from './ICustomNode'; - -export interface ICustomNodeWithData extends ICustomNode { - /** - * @returns any - */ - getNodeData (): any; -} diff --git a/src/interfaces/custom-nodes/ICustomNodeWithIdentifier.d.ts b/src/interfaces/custom-nodes/ICustomNodeWithIdentifier.d.ts deleted file mode 100644 index b2981fb8..00000000 --- a/src/interfaces/custom-nodes/ICustomNodeWithIdentifier.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ICustomNode } from './ICustomNode'; - -export interface ICustomNodeWithIdentifier extends ICustomNode { - getNodeIdentifier (): string; -} diff --git a/src/interfaces/event-emitters/IObfuscationEventEmitter.d.ts b/src/interfaces/event-emitters/IObfuscationEventEmitter.d.ts index df5714e4..15d8a212 100644 --- a/src/interfaces/event-emitters/IObfuscationEventEmitter.d.ts +++ b/src/interfaces/event-emitters/IObfuscationEventEmitter.d.ts @@ -3,6 +3,17 @@ import Events = NodeJS.Events; import { TObfuscationEvent } from '../../types/event-emitters/TObfuscationEvent'; export interface IObfuscationEventEmitter extends Events { + /** + * @param event + * @param listener + * @returns this + */ on(event: TObfuscationEvent, listener: Function): this; + + /** + * @param event + * @param listener + * @returns this + */ once(event: TObfuscationEvent, listener: Function): this; } diff --git a/src/interfaces/node-transformers/IControlFlowReplacer.d.ts b/src/interfaces/node-transformers/IControlFlowReplacer.d.ts index cd30a0c8..3d3b9f81 100644 --- a/src/interfaces/node-transformers/IControlFlowReplacer.d.ts +++ b/src/interfaces/node-transformers/IControlFlowReplacer.d.ts @@ -4,10 +4,15 @@ import { ICustomNode } from '../custom-nodes/ICustomNode'; import { IStorage } from '../storages/IStorage'; export interface IControlFlowReplacer { + /** + * @param node + * @param parentNode + * @param controlFlowStorage + * @returns ESTree.Node + */ replace ( node: ESTree.Node, parentNode: ESTree.Node, - controlFlowStorage: IStorage , - controlFlowStorageCustomNodeName: string - ): ICustomNode | undefined; + controlFlowStorage: IStorage + ): ESTree.Node; } diff --git a/src/interfaces/node-transformers/INodeTransformer.d.ts b/src/interfaces/node-transformers/INodeTransformer.d.ts index c65f2ad2..b955e76d 100644 --- a/src/interfaces/node-transformers/INodeTransformer.d.ts +++ b/src/interfaces/node-transformers/INodeTransformer.d.ts @@ -1,5 +1,9 @@ import * as ESTree from 'estree'; export interface INodeTransformer { + /** + * @param node + * @param parentNode + */ transformNode (node: ESTree.Node, parentNode?: ESTree.Node): void; } diff --git a/src/interfaces/node-transformers/IObfuscatorReplacer.d.ts b/src/interfaces/node-transformers/IObfuscatorReplacer.d.ts new file mode 100644 index 00000000..afccc2f6 --- /dev/null +++ b/src/interfaces/node-transformers/IObfuscatorReplacer.d.ts @@ -0,0 +1,7 @@ +export interface IObfuscatorReplacer { + /** + * @param nodeValue + * @param nodeIdentifier + */ + replace (nodeValue: any, nodeIdentifier?: string): string; +} diff --git a/src/interfaces/node-transformers/IObfuscatorReplacerWithStorage.d.ts b/src/interfaces/node-transformers/IObfuscatorReplacerWithStorage.d.ts new file mode 100644 index 00000000..50bfda35 --- /dev/null +++ b/src/interfaces/node-transformers/IObfuscatorReplacerWithStorage.d.ts @@ -0,0 +1,9 @@ +import { IObfuscatorReplacer } from './IObfuscatorReplacer'; + +export interface IObfuscatorReplacerWithStorage extends IObfuscatorReplacer { + /** + * @param nodeValue + * @param nodeIdentifier + */ + storeNames (nodeValue: any, nodeIdentifier: string): void; +} diff --git a/src/interfaces/node-transformers/IReplacer.d.ts b/src/interfaces/node-transformers/IReplacer.d.ts deleted file mode 100644 index 0bf3ee7c..00000000 --- a/src/interfaces/node-transformers/IReplacer.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IReplacer { - replace (nodeValue: any): string; -} diff --git a/src/interfaces/options/IOptions.d.ts b/src/interfaces/options/IOptions.d.ts index 093f2d3d..c2df6a01 100644 --- a/src/interfaces/options/IOptions.d.ts +++ b/src/interfaces/options/IOptions.d.ts @@ -4,6 +4,7 @@ import { TStringArrayEncoding } from '../../types/options/TStringArrayEncoding'; export interface IOptions { readonly compact: boolean; readonly controlFlowFlattening: boolean; + readonly controlFlowFlatteningThreshold: number; readonly debugProtection: boolean; readonly debugProtectionInterval: boolean; readonly disableConsoleOutput: boolean; diff --git a/src/interfaces/stack-trace-analyzer/ICalleeDataExtractor.d.ts b/src/interfaces/stack-trace-analyzer/ICalleeDataExtractor.d.ts index 3e80f548..5a9d83a1 100644 --- a/src/interfaces/stack-trace-analyzer/ICalleeDataExtractor.d.ts +++ b/src/interfaces/stack-trace-analyzer/ICalleeDataExtractor.d.ts @@ -3,5 +3,10 @@ import * as ESTree from 'estree'; import { ICalleeData } from './ICalleeData'; export interface ICalleeDataExtractor { + /** + * @param blockScopeBody + * @param callee + * @returns ICalleeData|null + */ extract (blockScopeBody: ESTree.Node[], callee: ESTree.Node): ICalleeData|null; } diff --git a/src/interfaces/stack-trace-analyzer/IStackTraceAnalyzer.d.ts b/src/interfaces/stack-trace-analyzer/IStackTraceAnalyzer.d.ts index e3609720..78bce338 100644 --- a/src/interfaces/stack-trace-analyzer/IStackTraceAnalyzer.d.ts +++ b/src/interfaces/stack-trace-analyzer/IStackTraceAnalyzer.d.ts @@ -3,5 +3,9 @@ import * as ESTree from 'estree'; import { IStackTraceData } from './IStackTraceData'; export interface IStackTraceAnalyzer { + /** + * @param blockScopeBody + * @returns IStackTraceData[] + */ analyze (blockScopeBody: ESTree.Node[]): IStackTraceData[]; } diff --git a/src/interfaces/storages/IStorage.d.ts b/src/interfaces/storages/IStorage.d.ts index 474f052e..5540fb01 100644 --- a/src/interfaces/storages/IStorage.d.ts +++ b/src/interfaces/storages/IStorage.d.ts @@ -1,11 +1,52 @@ import { IInitializable } from '../IInitializable'; export interface IStorage extends IInitializable { + /** + * @param key + * @returns T + */ get (key: string | number): T; + + /** + * @param value + * @returns string | number | null + */ getKeyOf (value: T): string | number | null; + + /** + * @returns number + */ getLength (): number; + + /** + * @returns any + */ getStorage (): any; + + /** + * @returns string + */ + getStorageId (): string; + + /** + * @param args + */ initialize (...args: any[]): void; + + /** + * @param storage + * @param mergeId + */ + mergeWith (storage: this, mergeId: boolean): void; + + /** + * @param key + * @param value + */ set (key: string | number | null, value: T): void; + + /** + * @returns string + */ toString (): string; } diff --git a/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts b/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts index f02c6a1c..b367a667 100644 --- a/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts +++ b/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts @@ -3,10 +3,12 @@ import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; +import * as _ from 'lodash'; import { TControlFlowReplacerFactory } from '../../types/container/TControlFlowReplacerFactory'; import { TControlFlowStorageFactory } from '../../types/container/TControlFlowStorageFactory'; import { TCustomNodeFactory } from '../../types/container/TCustomNodeFactory'; +import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; import { TStatement } from '../../types/node/TStatement'; import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; @@ -20,6 +22,7 @@ import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; import { Node } from '../../node/Node'; import { NodeAppender } from '../../node/NodeAppender'; import { NodeControlFlowReplacers } from '../../enums/container/NodeControlFlowReplacers'; +import { NodeUtils } from '../../node/NodeUtils'; import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @injectable() @@ -27,10 +30,30 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { /** * @type {Map } */ - private static readonly controlFlowReplacersMap: Map = new Map ([ + private static readonly controlFlowReplacersMap: Map = new Map([ [NodeType.BinaryExpression, NodeControlFlowReplacers.BinaryExpressionControlFlowReplacer] ]); + /** + * @type {number} + */ + private static readonly hostNodeSearchMinDepth: number = 2; + + /** + * @type {number} + */ + private static readonly hostNodeSearchMaxDepth: number = 10; + + /** + * @type {Map>} + */ + private controlFlowData: Map > = new Map(); + + /** + * @type {TStatement[][]} + */ + private readonly controlFlowNodesList: TStatement[][] = []; + /** * @type {TControlFlowReplacerFactory} */ @@ -65,6 +88,51 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { this.customNodeFactory = customNodeFactory; } + /** + * @param functionNode + * @returns {TNodeWithBlockStatement} + */ + private static getHostNode (functionNode: ESTree.FunctionDeclaration | ESTree.FunctionExpression): TNodeWithBlockStatement { + const blockScopesOfNode: TNodeWithBlockStatement[] = NodeUtils.getBlockScopesOfNode(functionNode); + + if (blockScopesOfNode.length === 1) { + return functionNode.body; + } else { + blockScopesOfNode.pop(); + } + + if (blockScopesOfNode.length > FunctionControlFlowTransformer.hostNodeSearchMinDepth) { + blockScopesOfNode.splice(0, FunctionControlFlowTransformer.hostNodeSearchMinDepth); + } + + if (blockScopesOfNode.length > FunctionControlFlowTransformer.hostNodeSearchMaxDepth) { + blockScopesOfNode.length = FunctionControlFlowTransformer.hostNodeSearchMaxDepth; + } + + return RandomGeneratorUtils.getRandomGenerator().pickone(blockScopesOfNode); + } + + /** + * @param hostNodeBody + * @param controlFlowNodesList + */ + private static removeOldControlFlowNodeFromHostNodeBody ( + hostNodeBody: TStatement[], + controlFlowNodesList: TStatement[][] + ): TStatement[] { + for (let controlFlowNode of controlFlowNodesList) { + const firstIndexOfNode: number = hostNodeBody.indexOf(controlFlowNode[0]); + + if (firstIndexOfNode === -1) { + continue; + } + + return _.difference(hostNodeBody, controlFlowNode); + } + + return hostNodeBody; + } + /** * @param functionNode */ @@ -81,10 +149,27 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { } const controlFlowStorage: IStorage = this.controlFlowStorageFactory(); - const controlFlowStorageCustomNodeName: string = RandomGeneratorUtils.getRandomVariableName(6); + const hostNode: TNodeWithBlockStatement = FunctionControlFlowTransformer.getHostNode(functionNode); + + if (!this.controlFlowData.has(hostNode)) { + this.controlFlowData.set(hostNode, controlFlowStorage); + } else { + hostNode.body = FunctionControlFlowTransformer + .removeOldControlFlowNodeFromHostNodeBody(hostNode.body, this.controlFlowNodesList); + + const hostControlFlowStorage: IStorage = >this.controlFlowData.get(hostNode); + + controlFlowStorage.mergeWith(hostControlFlowStorage, true); + + this.controlFlowData.set(hostNode, controlFlowStorage); + } estraverse.replace(functionNode.body, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { + if (RandomGeneratorUtils.getRandomFloat(0, 1) > this.options.controlFlowFlatteningThreshold) { + return; + } + const controlFlowReplacerName: NodeControlFlowReplacers | undefined = FunctionControlFlowTransformer .controlFlowReplacersMap.get(node.type); @@ -92,24 +177,11 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { return; } - const controlFlowStorageCallCustomNode: ICustomNode | undefined = this.controlFlowReplacerFactory(controlFlowReplacerName) - .replace(node, parentNode, controlFlowStorage, controlFlowStorageCustomNodeName); - - if (!controlFlowStorageCallCustomNode) { - return; - } - - // controlFlowStorageCallCustomNode will always have only one TStatement node, - // so we can get it by index `0` - // also we need to return `expression` property of `ExpressionStatement` node because bug: - // https://github.com/estools/escodegen/issues/289 - const statementNode: TStatement = controlFlowStorageCallCustomNode.getNode()[0]; - - if (!statementNode || !Node.isExpressionStatementNode(statementNode)) { - throw new Error(`\`controlFlowStorageCallCustomNode.getNode()\` should returns array with \`ExpressionStatement\` node`); - } - - return statementNode.expression; + return { + ...this.controlFlowReplacerFactory(controlFlowReplacerName) + .replace(node, parentNode, controlFlowStorage), + parentNode + }; } }); @@ -119,8 +191,11 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { const controlFlowStorageCustomNode: ICustomNode = this.customNodeFactory(CustomNodes.ControlFlowStorageNode); - controlFlowStorageCustomNode.initialize(controlFlowStorage, controlFlowStorageCustomNodeName); + controlFlowStorageCustomNode.initialize(controlFlowStorage); - NodeAppender.prependNode(functionNode.body, controlFlowStorageCustomNode.getNode()); + const controlFlowStorageNode: TStatement[] = controlFlowStorageCustomNode.getNode(); + + this.controlFlowNodesList.push(controlFlowStorageNode); + NodeAppender.prependNode(hostNode, controlFlowStorageNode); } } diff --git a/src/node-transformers/node-control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts b/src/node-transformers/node-control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts index 835b5f95..b318b96a 100644 --- a/src/node-transformers/node-control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts +++ b/src/node-transformers/node-control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts @@ -8,8 +8,6 @@ import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../../interfaces/options/IOptions'; import { IStorage } from '../../../interfaces/storages/IStorage'; -import { RandomGeneratorUtils } from '../../../utils/RandomGeneratorUtils'; - @injectable() export abstract class AbstractControlFlowReplacer implements IControlFlowReplacer { /** @@ -26,27 +24,15 @@ export abstract class AbstractControlFlowReplacer implements IControlFlowReplace this.options = options; } - /** - * @returns {string} - */ - protected static getStorageKey (): string { - return RandomGeneratorUtils.getRandomGenerator().string({ - length: 3, - pool: RandomGeneratorUtils.randomGeneratorPool - }); - } - /** * @param node * @param parentNode * @param controlFlowStorage - * @param controlFlowStorageCustomNodeName - * @returns {ICustomNode | undefined} + * @returns {ESTree.Node} */ public abstract replace ( node: ESTree.Node, parentNode: ESTree.Node, - controlFlowStorage: IStorage , - controlFlowStorageCustomNodeName: string - ): ICustomNode | undefined; + controlFlowStorage: IStorage + ): ESTree.Node; } diff --git a/src/node-transformers/node-control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.ts b/src/node-transformers/node-control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.ts index 7b87380e..85513c4e 100644 --- a/src/node-transformers/node-control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.ts +++ b/src/node-transformers/node-control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.ts @@ -1,10 +1,10 @@ import { injectable, inject } from 'inversify'; import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers'; -import * as escodegen from 'escodegen'; import * as ESTree from 'estree'; import { TCustomNodeFactory } from '../../../types/container/TCustomNodeFactory'; +import { TStatement } from '../../../types/node/TStatement'; import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../../interfaces/options/IOptions'; @@ -13,9 +13,22 @@ import { IStorage } from '../../../interfaces/storages/IStorage'; import { CustomNodes } from '../../../enums/container/CustomNodes'; import { AbstractControlFlowReplacer } from './AbstractControlFlowReplacer'; +import { Node } from '../../../node/Node'; +import { NodeUtils } from '../../../node/NodeUtils'; +import { RandomGeneratorUtils } from '../../../utils/RandomGeneratorUtils'; @injectable() export class BinaryExpressionControlFlowReplacer extends AbstractControlFlowReplacer { + /** + * @type {number} + */ + private static readonly useExistingOperatorKeyThreshold: number = 0.5; + + /** + * @type {Map>} + */ + private readonly binaryOperatorsDataByControlFlowStorageId: Map > = new Map(); + /** * @type {TCustomNodeFactory} */ @@ -35,42 +48,78 @@ export class BinaryExpressionControlFlowReplacer extends AbstractControlFlowRepl } /** - * @param expressionNode - * @returns {string} + * @param binaryOperatorsDataByControlFlowStorageId + * @param controlFlowStorageId + * @returns {Map} */ - private static getExpressionValue (expressionNode: ESTree.Expression): string { - return escodegen.generate(expressionNode, { - sourceMapWithCode: true - }).code; + private static getStorageKeysByBinaryOperatorForCurrentStorage ( + binaryOperatorsDataByControlFlowStorageId: Map>, + controlFlowStorageId: string + ): Map { + let storageKeysByBinaryOperator: Map; + + if (binaryOperatorsDataByControlFlowStorageId.has(controlFlowStorageId)) { + storageKeysByBinaryOperator = >binaryOperatorsDataByControlFlowStorageId + .get(controlFlowStorageId); + } else { + storageKeysByBinaryOperator = new Map (); + } + + return storageKeysByBinaryOperator; } /** * @param binaryExpressionNode * @param parentNode * @param controlFlowStorage - * @param controlFlowStorageCustomNodeName - * @returns {ICustomNode} + * @returns {ESTree.Node} */ public replace ( binaryExpressionNode: ESTree.BinaryExpression, parentNode: ESTree.Node, - controlFlowStorage: IStorage , - controlFlowStorageCustomNodeName: string - ): ICustomNode { - const key: string = AbstractControlFlowReplacer.getStorageKey(); - const binaryExpressionFunctionNode: ICustomNode = this.customNodeFactory(CustomNodes.BinaryExpressionFunctionNode); - const controlFlowStorageCallNode: ICustomNode = this.customNodeFactory(CustomNodes.ControlFlowStorageCallNode); + controlFlowStorage: IStorage + ): ESTree.Node { + const controlFlowStorageId: string = controlFlowStorage.getStorageId(); + const controlFlowStorageCallCustomNode: ICustomNode = this.customNodeFactory(CustomNodes.ControlFlowStorageCallNode); + const storageKeysByBinaryOperator: Map = BinaryExpressionControlFlowReplacer + .getStorageKeysByBinaryOperatorForCurrentStorage( + this.binaryOperatorsDataByControlFlowStorageId, + controlFlowStorageId + ); - binaryExpressionFunctionNode.initialize(binaryExpressionNode.operator); - controlFlowStorageCallNode.initialize( - controlFlowStorageCustomNodeName, - key, - BinaryExpressionControlFlowReplacer.getExpressionValue(binaryExpressionNode.left), - BinaryExpressionControlFlowReplacer.getExpressionValue(binaryExpressionNode.right) + let storageKeysForCurrentOperator: string[] | undefined = storageKeysByBinaryOperator.get(binaryExpressionNode.operator); + let storageKey: string; + + if ( + RandomGeneratorUtils.getRandomFloat(0, 1) > BinaryExpressionControlFlowReplacer.useExistingOperatorKeyThreshold && + storageKeysForCurrentOperator && + storageKeysForCurrentOperator.length + ) { + storageKey = RandomGeneratorUtils.getRandomGenerator().pickone(storageKeysForCurrentOperator); + } else { + const binaryExpressionFunctionCustomNode: ICustomNode = this.customNodeFactory(CustomNodes.BinaryExpressionFunctionNode); + + binaryExpressionFunctionCustomNode.initialize(binaryExpressionNode.operator); + + storageKey = RandomGeneratorUtils.getRandomString(3); + storageKeysByBinaryOperator.set(binaryExpressionNode.operator, [storageKey]); + this.binaryOperatorsDataByControlFlowStorageId.set(controlFlowStorageId, storageKeysByBinaryOperator); + controlFlowStorage.set(storageKey, binaryExpressionFunctionCustomNode); + } + + controlFlowStorageCallCustomNode.initialize( + controlFlowStorageId, + storageKey, + NodeUtils.convertStructureToCode([binaryExpressionNode.left]), + NodeUtils.convertStructureToCode([binaryExpressionNode.right]) ); - controlFlowStorage.set(key, binaryExpressionFunctionNode); + const statementNode: TStatement = controlFlowStorageCallCustomNode.getNode()[0]; - return controlFlowStorageCallNode; + if (!statementNode || !Node.isExpressionStatementNode(statementNode)) { + throw new Error(`\`controlFlowStorageCallNode.getNode()[0]\` should returns array with \`ExpressionStatement\` node`); + } + + return statementNode.expression; } } diff --git a/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts b/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts index 763ba232..f5b53a85 100644 --- a/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts @@ -5,13 +5,13 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { IOptions } from '../../interfaces/options/IOptions'; -import { IReplacer } from '../../interfaces/node-transformers/IReplacer'; +import { IObfuscatorReplacer } from '../../interfaces/node-transformers/IObfuscatorReplacer'; +import { IObfuscatorReplacerWithStorage } from '../../interfaces/node-transformers/IObfuscatorReplacerWithStorage'; import { NodeObfuscatorsReplacers } from '../../enums/container/NodeObfuscatorsReplacers'; import { NodeType } from '../../enums/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { IdentifierReplacer } from './replacers/IdentifierReplacer'; import { Node } from '../../node/Node'; import { NodeUtils } from '../../node/NodeUtils'; import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @@ -27,53 +27,52 @@ import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @injectable() export class CatchClauseObfuscator extends AbstractNodeTransformer { /** - * @type {IdentifierReplacer} + * @type {IObfuscatorReplacerWithStorage} */ - private readonly identifierReplacer: IReplacer & IdentifierReplacer; + private readonly identifierReplacer: IObfuscatorReplacerWithStorage; /** * @param replacersFactory * @param options */ constructor( - @inject(ServiceIdentifiers['Factory']) replacersFactory: (replacer: NodeObfuscatorsReplacers) => IReplacer, + @inject(ServiceIdentifiers['Factory']) replacersFactory: (replacer: NodeObfuscatorsReplacers) => IObfuscatorReplacer, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(options); - this.identifierReplacer = replacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); + this.identifierReplacer = replacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); } /** * @param catchClauseNode */ public transformNode (catchClauseNode: ESTree.CatchClause): void { - this.identifierReplacer.setPrefix(RandomGeneratorUtils.getRandomGenerator().string({ - length: 5, - pool: RandomGeneratorUtils.randomGeneratorPool - })); + const nodeIdentifier: string = RandomGeneratorUtils.getRandomString(7); - this.storeCatchClauseParam(catchClauseNode); - this.replaceCatchClauseParam(catchClauseNode); + this.storeCatchClauseParam(catchClauseNode, nodeIdentifier); + this.replaceCatchClauseParam(catchClauseNode, nodeIdentifier); } /** * @param catchClauseNode + * @param nodeIdentifier */ - private storeCatchClauseParam (catchClauseNode: ESTree.CatchClause): void { + private storeCatchClauseParam (catchClauseNode: ESTree.CatchClause, nodeIdentifier: string): void { NodeUtils.typedTraverse(catchClauseNode.param, NodeType.Identifier, { - enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) + enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name, nodeIdentifier) }); } /** * @param catchClauseNode + * @param nodeIdentifier */ - private replaceCatchClauseParam (catchClauseNode: ESTree.CatchClause): void { + private replaceCatchClauseParam (catchClauseNode: ESTree.CatchClause, nodeIdentifier: string): void { estraverse.replace(catchClauseNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Node.isReplaceableIdentifierNode(node, parentNode)) { - node.name = this.identifierReplacer.replace(node.name); + node.name = this.identifierReplacer.replace(node.name, nodeIdentifier); } } }); diff --git a/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts index 1b4e1f94..4032897f 100644 --- a/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -7,13 +7,13 @@ import * as ESTree from 'estree'; import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; import { IOptions } from '../../interfaces/options/IOptions'; -import { IReplacer } from '../../interfaces/node-transformers/IReplacer'; +import { IObfuscatorReplacer } from '../../interfaces/node-transformers/IObfuscatorReplacer'; +import { IObfuscatorReplacerWithStorage } from '../../interfaces/node-transformers/IObfuscatorReplacerWithStorage'; import { NodeObfuscatorsReplacers } from '../../enums/container/NodeObfuscatorsReplacers'; import { NodeType } from '../../enums/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { IdentifierReplacer } from './replacers/IdentifierReplacer'; import { Node } from '../../node/Node'; import { NodeUtils } from '../../node/NodeUtils'; import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @@ -30,21 +30,21 @@ import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @injectable() export class FunctionDeclarationObfuscator extends AbstractNodeTransformer { /** - * @type {IdentifierReplacer} + * @type {IObfuscatorReplacerWithStorage} */ - private readonly identifierReplacer: IdentifierReplacer; + private readonly identifierReplacer: IObfuscatorReplacerWithStorage; /** * @param nodeObfuscatorsReplacersFactory * @param options */ constructor( - @inject(ServiceIdentifiers['Factory']) nodeObfuscatorsReplacersFactory: (replacer: NodeObfuscatorsReplacers) => IReplacer, + @inject(ServiceIdentifiers['Factory']) nodeObfuscatorsReplacersFactory: (replacer: NodeObfuscatorsReplacers) => IObfuscatorReplacer, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(options); - this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); + this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); } /** @@ -52,39 +52,37 @@ export class FunctionDeclarationObfuscator extends AbstractNodeTransformer { * @param parentNode */ public transformNode (functionDeclarationNode: ESTree.FunctionDeclaration, parentNode: ESTree.Node): void { - this.identifierReplacer.setPrefix(RandomGeneratorUtils.getRandomGenerator().string({ - length: 5, - pool: RandomGeneratorUtils.randomGeneratorPool - })); - + const nodeIdentifier: string = RandomGeneratorUtils.getRandomString(7); const blockScopeOfFunctionDeclarationNode: TNodeWithBlockStatement = NodeUtils - .getBlockScopeOfNode(functionDeclarationNode); + .getBlockScopesOfNode(functionDeclarationNode)[0]; if (blockScopeOfFunctionDeclarationNode.type === NodeType.Program) { return; } - this.storeFunctionName(functionDeclarationNode); - this.replaceFunctionName(blockScopeOfFunctionDeclarationNode); + this.storeFunctionName(functionDeclarationNode, nodeIdentifier); + this.replaceFunctionName(blockScopeOfFunctionDeclarationNode, nodeIdentifier); } /** * @param functionDeclarationNode + * @param nodeIdentifier */ - private storeFunctionName (functionDeclarationNode: ESTree.FunctionDeclaration): void { + private storeFunctionName (functionDeclarationNode: ESTree.FunctionDeclaration, nodeIdentifier: string): void { NodeUtils.typedTraverse(functionDeclarationNode.id, NodeType.Identifier, { - enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) + enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name, nodeIdentifier) }); } /** * @param scopeNode + * @param nodeIdentifier */ - private replaceFunctionName (scopeNode: ESTree.Node): void { + private replaceFunctionName (scopeNode: ESTree.Node, nodeIdentifier: string): void { estraverse.replace(scopeNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Node.isReplaceableIdentifierNode(node, parentNode)) { - node.name = this.identifierReplacer.replace(node.name); + node.name = this.identifierReplacer.replace(node.name, nodeIdentifier); } } }); diff --git a/src/node-transformers/node-obfuscators/FunctionObfuscator.ts b/src/node-transformers/node-obfuscators/FunctionObfuscator.ts index d2d158bb..b030f1a3 100644 --- a/src/node-transformers/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-transformers/node-obfuscators/FunctionObfuscator.ts @@ -5,13 +5,13 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { IOptions } from '../../interfaces/options/IOptions'; -import { IReplacer } from '../../interfaces/node-transformers/IReplacer'; +import { IObfuscatorReplacer } from '../../interfaces/node-transformers/IObfuscatorReplacer'; +import { IObfuscatorReplacerWithStorage } from '../../interfaces/node-transformers/IObfuscatorReplacerWithStorage'; import { NodeObfuscatorsReplacers } from '../../enums/container/NodeObfuscatorsReplacers'; import { NodeType } from '../../enums/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { IdentifierReplacer } from './replacers/IdentifierReplacer'; import { Node } from '../../node/Node'; import { NodeUtils } from '../../node/NodeUtils'; import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @@ -27,56 +27,55 @@ import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @injectable() export class FunctionObfuscator extends AbstractNodeTransformer { /** - * @type {IdentifierReplacer} + * @type {IObfuscatorReplacerWithStorage} */ - private readonly identifierReplacer: IdentifierReplacer; + private readonly identifierReplacer: IObfuscatorReplacerWithStorage; /** * @param nodeObfuscatorsReplacersFactory * @param options */ constructor( - @inject(ServiceIdentifiers['Factory']) nodeObfuscatorsReplacersFactory: (replacer: NodeObfuscatorsReplacers) => IReplacer, + @inject(ServiceIdentifiers['Factory']) nodeObfuscatorsReplacersFactory: (replacer: NodeObfuscatorsReplacers) => IObfuscatorReplacer, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(options); - this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); + this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); } /** * @param functionNode */ public transformNode (functionNode: ESTree.Function): void { - this.identifierReplacer.setPrefix(RandomGeneratorUtils.getRandomGenerator().string({ - length: 5, - pool: RandomGeneratorUtils.randomGeneratorPool - })); + const nodeIdentifier: string = RandomGeneratorUtils.getRandomString(7); - this.storeFunctionParams(functionNode); - this.replaceFunctionParams(functionNode); + this.storeFunctionParams(functionNode, nodeIdentifier); + this.replaceFunctionParams(functionNode, nodeIdentifier); } /** * @param functionNode + * @param nodeIdentifier */ - private storeFunctionParams (functionNode: ESTree.Function): void { + private storeFunctionParams (functionNode: ESTree.Function, nodeIdentifier: string): void { functionNode.params .forEach((paramsNode: ESTree.Node) => { NodeUtils.typedTraverse(paramsNode, NodeType.Identifier, { - enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) + enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name, nodeIdentifier) }); }); } /** * @param functionNode + * @param nodeIdentifier */ - private replaceFunctionParams (functionNode: ESTree.Function): void { + private replaceFunctionParams (functionNode: ESTree.Function, nodeIdentifier: string): void { let traverseVisitor: estraverse.Visitor = { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Node.isReplaceableIdentifierNode(node, parentNode)) { - const newNodeName: string = this.identifierReplacer.replace(node.name); + const newNodeName: string = this.identifierReplacer.replace(node.name, nodeIdentifier); if (node.name !== newNodeName) { node.name = newNodeName; diff --git a/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts b/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts index 79f68de1..674ca5f9 100644 --- a/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts +++ b/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts @@ -5,13 +5,13 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { IOptions } from '../../interfaces/options/IOptions'; -import { IReplacer } from '../../interfaces/node-transformers/IReplacer'; +import { IObfuscatorReplacer } from '../../interfaces/node-transformers/IObfuscatorReplacer'; +import { IObfuscatorReplacerWithStorage } from '../../interfaces/node-transformers/IObfuscatorReplacerWithStorage'; import { NodeObfuscatorsReplacers } from '../../enums/container/NodeObfuscatorsReplacers'; import { NodeType } from '../../enums/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { IdentifierReplacer } from './replacers/IdentifierReplacer'; import { Node } from '../../node/Node'; import { NodeUtils } from '../../node/NodeUtils'; import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @@ -35,53 +35,52 @@ import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @injectable() export class LabeledStatementObfuscator extends AbstractNodeTransformer { /** - * @type {IdentifierReplacer} + * @type {IObfuscatorReplacerWithStorage} */ - private readonly identifierReplacer: IdentifierReplacer; + private readonly identifierReplacer: IObfuscatorReplacerWithStorage; /** * @param nodeObfuscatorsReplacersFactory * @param options */ constructor( - @inject(ServiceIdentifiers['Factory']) nodeObfuscatorsReplacersFactory: (replacer: NodeObfuscatorsReplacers) => IReplacer, + @inject(ServiceIdentifiers['Factory']) nodeObfuscatorsReplacersFactory: (replacer: NodeObfuscatorsReplacers) => IObfuscatorReplacer, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(options); - this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); + this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); } /** * @param labeledStatementNode */ public transformNode (labeledStatementNode: ESTree.LabeledStatement): void { - this.identifierReplacer.setPrefix(RandomGeneratorUtils.getRandomGenerator().string({ - length: 5, - pool: RandomGeneratorUtils.randomGeneratorPool - })); + const nodeIdentifier: string = RandomGeneratorUtils.getRandomString(7); - this.storeLabeledStatementName(labeledStatementNode); - this.replaceLabeledStatementName(labeledStatementNode); + this.storeLabeledStatementName(labeledStatementNode, nodeIdentifier); + this.replaceLabeledStatementName(labeledStatementNode, nodeIdentifier); } /** * @param labeledStatementNode + * @param nodeIdentifier */ - private storeLabeledStatementName (labeledStatementNode: ESTree.LabeledStatement): void { + private storeLabeledStatementName (labeledStatementNode: ESTree.LabeledStatement, nodeIdentifier: string): void { NodeUtils.typedTraverse(labeledStatementNode.label, NodeType.Identifier, { - enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) + enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name, nodeIdentifier) }); } /** * @param labeledStatementNode + * @param nodeIdentifier */ - private replaceLabeledStatementName (labeledStatementNode: ESTree.LabeledStatement): void { + private replaceLabeledStatementName (labeledStatementNode: ESTree.LabeledStatement, nodeIdentifier: string): void { estraverse.replace(labeledStatementNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Node.isLabelIdentifierNode(node, parentNode)) { - node.name = this.identifierReplacer.replace(node.name); + node.name = this.identifierReplacer.replace(node.name, nodeIdentifier); } } }); diff --git a/src/node-transformers/node-obfuscators/LiteralObfuscator.ts b/src/node-transformers/node-obfuscators/LiteralObfuscator.ts index 5bdb0066..0a6142cf 100644 --- a/src/node-transformers/node-obfuscators/LiteralObfuscator.ts +++ b/src/node-transformers/node-obfuscators/LiteralObfuscator.ts @@ -5,7 +5,7 @@ import * as escodegen from 'escodegen'; import * as ESTree from 'estree'; import { IOptions } from '../../interfaces/options/IOptions'; -import { IReplacer } from '../../interfaces/node-transformers/IReplacer'; +import { IObfuscatorReplacer } from '../../interfaces/node-transformers/IObfuscatorReplacer'; import { NodeObfuscatorsReplacers } from '../../enums/container/NodeObfuscatorsReplacers'; @@ -15,16 +15,16 @@ import { Node } from '../../node/Node'; @injectable() export class LiteralObfuscator extends AbstractNodeTransformer { /** - * @type {(replacer: NodeObfuscatorsReplacers) => IReplacer} + * @type {(replacer: NodeObfuscatorsReplacers) => IObfuscatorReplacer} */ - private readonly replacersFactory: (replacer: NodeObfuscatorsReplacers) => IReplacer; + private readonly replacersFactory: (replacer: NodeObfuscatorsReplacers) => IObfuscatorReplacer; /** * @param replacersFactory * @param options */ constructor( - @inject(ServiceIdentifiers['Factory']) replacersFactory: (replacer: NodeObfuscatorsReplacers) => IReplacer, + @inject(ServiceIdentifiers['Factory']) replacersFactory: (replacer: NodeObfuscatorsReplacers) => IObfuscatorReplacer, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(options); diff --git a/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts b/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts index e1620d53..9fff9f7e 100644 --- a/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts +++ b/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts @@ -6,7 +6,7 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { IOptions } from '../../interfaces/options/IOptions'; -import { IReplacer } from '../../interfaces/node-transformers/IReplacer'; +import { IObfuscatorReplacer } from '../../interfaces/node-transformers/IObfuscatorReplacer'; import { NodeObfuscatorsReplacers } from '../../enums/container/NodeObfuscatorsReplacers'; import { NodeType } from '../../enums/NodeType'; @@ -17,16 +17,16 @@ import { Node } from '../../node/Node'; @injectable() export class MemberExpressionObfuscator extends AbstractNodeTransformer { /** - * @type {IReplacer} + * @type {IObfuscatorReplacer} */ - private readonly stringLiteralReplacer: IReplacer; + private readonly stringLiteralReplacer: IObfuscatorReplacer; /** * @param replacersFactory * @param options */ constructor( - @inject(ServiceIdentifiers['Factory']) replacersFactory: (replacer: NodeObfuscatorsReplacers) => IReplacer, + @inject(ServiceIdentifiers['Factory']) replacersFactory: (replacer: NodeObfuscatorsReplacers) => IObfuscatorReplacer, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(options); diff --git a/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts b/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts index b6bef011..93d4748f 100644 --- a/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts +++ b/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts @@ -5,13 +5,12 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { IOptions } from '../../interfaces/options/IOptions'; -import { IReplacer } from '../../interfaces/node-transformers/IReplacer'; +import { IObfuscatorReplacer } from '../../interfaces/node-transformers/IObfuscatorReplacer'; import { NodeObfuscatorsReplacers } from '../../enums/container/NodeObfuscatorsReplacers'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; import { Node } from '../../node/Node'; -import { Utils } from '../../utils/Utils'; /** * replaces: @@ -23,9 +22,9 @@ import { Utils } from '../../utils/Utils'; @injectable() export class MethodDefinitionObfuscator extends AbstractNodeTransformer { /** - * @type {IReplacer} + * @type {IObfuscatorReplacer} */ - private readonly stringLiteralReplacer: IReplacer; + private readonly stringLiteralReplacer: IObfuscatorReplacer; /** * @type {string[]} @@ -37,7 +36,7 @@ export class MethodDefinitionObfuscator extends AbstractNodeTransformer { * @param options */ constructor( - @inject(ServiceIdentifiers['Factory']) replacersFactory: (replacer: NodeObfuscatorsReplacers) => IReplacer, + @inject(ServiceIdentifiers['Factory']) replacersFactory: (replacer: NodeObfuscatorsReplacers) => IObfuscatorReplacer, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(options); @@ -61,7 +60,7 @@ export class MethodDefinitionObfuscator extends AbstractNodeTransformer { enter: (node: ESTree.Node): any => { if ( Node.isIdentifierNode(node) && - !Utils.arrayContains(MethodDefinitionObfuscator.ignoredNames, node.name) && + !MethodDefinitionObfuscator.ignoredNames.includes(node.name) && methodDefinitionNode.computed === false ) { methodDefinitionNode.computed = true; diff --git a/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts index f9dfd663..ecf029a0 100644 --- a/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts @@ -7,13 +7,13 @@ import * as ESTree from 'estree'; import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; import { IOptions } from '../../interfaces/options/IOptions'; -import { IReplacer } from '../../interfaces/node-transformers/IReplacer'; +import { IObfuscatorReplacer } from '../../interfaces/node-transformers/IObfuscatorReplacer'; +import { IObfuscatorReplacerWithStorage } from '../../interfaces/node-transformers/IObfuscatorReplacerWithStorage'; import { NodeObfuscatorsReplacers } from '../../enums/container/NodeObfuscatorsReplacers'; import { NodeType } from '../../enums/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { IdentifierReplacer } from './replacers/IdentifierReplacer'; import { Node } from '../../node/Node'; import { NodeUtils } from '../../node/NodeUtils'; import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @@ -31,21 +31,21 @@ import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @injectable() export class VariableDeclarationObfuscator extends AbstractNodeTransformer { /** - * @type {IdentifierReplacer} + * @type {IObfuscatorReplacerWithStorage} */ - private readonly identifierReplacer: IReplacer & IdentifierReplacer; + private readonly identifierReplacer: IObfuscatorReplacerWithStorage; /** * @param replacersFactory * @param options */ constructor( - @inject(ServiceIdentifiers['Factory']) replacersFactory: (replacer: NodeObfuscatorsReplacers) => IReplacer, + @inject(ServiceIdentifiers['Factory']) replacersFactory: (replacer: NodeObfuscatorsReplacers) => IObfuscatorReplacer, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(options); - this.identifierReplacer = replacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); + this.identifierReplacer = replacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); } /** @@ -53,46 +53,44 @@ export class VariableDeclarationObfuscator extends AbstractNodeTransformer { * @param parentNode */ public transformNode (variableDeclarationNode: ESTree.VariableDeclaration, parentNode: ESTree.Node): void { - this.identifierReplacer.setPrefix(RandomGeneratorUtils.getRandomGenerator().string({ - length: 5, - pool: RandomGeneratorUtils.randomGeneratorPool - })); - const blockScopeOfVariableDeclarationNode: TNodeWithBlockStatement = NodeUtils - .getBlockScopeOfNode(variableDeclarationNode); + .getBlockScopesOfNode(variableDeclarationNode)[0]; if (blockScopeOfVariableDeclarationNode.type === NodeType.Program) { return; } + const nodeIdentifier: string = RandomGeneratorUtils.getRandomString(7); const scopeNode: ESTree.Node = variableDeclarationNode.kind === 'var' ? blockScopeOfVariableDeclarationNode : parentNode; - this.storeVariableNames(variableDeclarationNode); - this.replaceVariableNames(scopeNode); + this.storeVariableNames(variableDeclarationNode, nodeIdentifier); + this.replaceVariableNames(scopeNode, nodeIdentifier); } /** * @param variableDeclarationNode + * @param nodeIdentifier */ - private storeVariableNames (variableDeclarationNode: ESTree.VariableDeclaration): void { + private storeVariableNames (variableDeclarationNode: ESTree.VariableDeclaration, nodeIdentifier: string): void { variableDeclarationNode.declarations .forEach((declarationNode: ESTree.VariableDeclarator) => { NodeUtils.typedTraverse(declarationNode.id, NodeType.Identifier, { - enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) + enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name, nodeIdentifier) }); }); } /** * @param scopeNode + * @param nodeIdentifier */ - private replaceVariableNames (scopeNode: ESTree.Node): void { + private replaceVariableNames (scopeNode: ESTree.Node, nodeIdentifier: string): void { estraverse.replace(scopeNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (!node.obfuscated && Node.isReplaceableIdentifierNode(node, parentNode)) { - node.name = this.identifierReplacer.replace(node.name); + node.name = this.identifierReplacer.replace(node.name, nodeIdentifier); } } }); diff --git a/src/node-transformers/node-obfuscators/replacers/AbstractReplacer.ts b/src/node-transformers/node-obfuscators/replacers/AbstractReplacer.ts index c5aac9a6..aa1d22bb 100644 --- a/src/node-transformers/node-obfuscators/replacers/AbstractReplacer.ts +++ b/src/node-transformers/node-obfuscators/replacers/AbstractReplacer.ts @@ -2,10 +2,10 @@ import { injectable, inject } from 'inversify'; import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers'; import { IOptions } from '../../../interfaces/options/IOptions'; -import { IReplacer } from '../../../interfaces/node-transformers/IReplacer'; +import { IObfuscatorReplacer } from '../../../interfaces/node-transformers/IObfuscatorReplacer'; @injectable() -export abstract class AbstractReplacer implements IReplacer { +export abstract class AbstractReplacer implements IObfuscatorReplacer { /** * @type {IOptions} */ @@ -22,7 +22,8 @@ export abstract class AbstractReplacer implements IReplacer { /** * @param nodeValue + * @param nodeIdentifier * @returns {string} */ - public abstract replace (nodeValue: any): string; + public abstract replace (nodeValue: any, nodeIdentifier?: string): string; } diff --git a/src/node-transformers/node-obfuscators/replacers/IdentifierReplacer.ts b/src/node-transformers/node-obfuscators/replacers/IdentifierReplacer.ts index af352995..35616ffa 100644 --- a/src/node-transformers/node-obfuscators/replacers/IdentifierReplacer.ts +++ b/src/node-transformers/node-obfuscators/replacers/IdentifierReplacer.ts @@ -1,22 +1,18 @@ import { injectable, inject } from 'inversify'; import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers'; +import { IObfuscatorReplacerWithStorage } from '../../../interfaces/node-transformers/IObfuscatorReplacerWithStorage'; import { IOptions } from '../../../interfaces/options/IOptions'; import { AbstractReplacer } from './AbstractReplacer'; import { RandomGeneratorUtils } from '../../../utils/RandomGeneratorUtils'; @injectable() -export class IdentifierReplacer extends AbstractReplacer { +export class IdentifierReplacer extends AbstractReplacer implements IObfuscatorReplacerWithStorage { /** * @type {Map} */ - private readonly namesMap: Map = new Map(); - - /** - * @type {string} - */ - private uniquePrefix: string; + private readonly namesMap: Map = new Map(); /** * @param options @@ -29,10 +25,11 @@ export class IdentifierReplacer extends AbstractReplacer { /** * @param nodeValue + * @param nodeIdentifier * @returns {string} */ - public replace (nodeValue: string): string { - const obfuscatedIdentifierName: string|undefined = this.namesMap.get(`${nodeValue}-${this.uniquePrefix}`); + public replace (nodeValue: string, nodeIdentifier: string): string { + const obfuscatedIdentifierName: string|undefined = this.namesMap.get(`${nodeValue}-${nodeIdentifier}`); if (!obfuscatedIdentifierName) { return nodeValue; @@ -41,26 +38,16 @@ export class IdentifierReplacer extends AbstractReplacer { return obfuscatedIdentifierName; } - /** - * @param uniquePrefix - */ - public setPrefix (uniquePrefix: string): void { - this.uniquePrefix = uniquePrefix - } - /** * Store all identifiers names as keys in given `namesMap` with random names as value. * Reserved names will be ignored. * * @param nodeName + * @param nodeIdentifier */ - public storeNames (nodeName: string): void { - if (!this.uniquePrefix) { - throw new Error('`uniquePrefix` is `undefined`. Set it before `storeNames`'); - } - + public storeNames (nodeName: string, nodeIdentifier: string): void { if (!this.isReservedName(nodeName)) { - this.namesMap.set(`${nodeName}-${this.uniquePrefix}`, RandomGeneratorUtils.getRandomVariableName()); + this.namesMap.set(`${nodeName}-${nodeIdentifier}`, RandomGeneratorUtils.getRandomVariableName()); } } diff --git a/src/node-transformers/node-obfuscators/replacers/NumberLiteralReplacer.ts b/src/node-transformers/node-obfuscators/replacers/NumberLiteralReplacer.ts index 96ba8ed9..96f94ff3 100644 --- a/src/node-transformers/node-obfuscators/replacers/NumberLiteralReplacer.ts +++ b/src/node-transformers/node-obfuscators/replacers/NumberLiteralReplacer.ts @@ -22,7 +22,7 @@ export class NumberLiteralReplacer extends AbstractReplacer { * @returns {string} */ public replace (nodeValue: number): string { - if (!Utils.isInteger(nodeValue)) { + if (!Utils.isCeilNumber(nodeValue)) { return String(nodeValue); } diff --git a/src/node-transformers/node-obfuscators/replacers/StringLiteralReplacer.ts b/src/node-transformers/node-obfuscators/replacers/StringLiteralReplacer.ts index 2a678a80..2db09cc8 100644 --- a/src/node-transformers/node-obfuscators/replacers/StringLiteralReplacer.ts +++ b/src/node-transformers/node-obfuscators/replacers/StringLiteralReplacer.ts @@ -1,10 +1,7 @@ import { injectable, inject } from 'inversify'; import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers'; -import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; import { ICustomNodeGroup } from '../../../interfaces/custom-nodes/ICustomNodeGroup'; -import { ICustomNodeWithData } from '../../../interfaces/custom-nodes/ICustomNodeWithData'; -import { ICustomNodeWithIdentifier } from '../../../interfaces/custom-nodes/ICustomNodeWithIdentifier'; import { IOptions } from '../../../interfaces/options/IOptions'; import { IStorage } from '../../../interfaces/storages/IStorage'; @@ -12,8 +9,6 @@ import { StringArrayEncoding } from '../../../enums/StringArrayEncoding'; import { AbstractReplacer } from './AbstractReplacer'; import { CryptUtils } from '../../../utils/CryptUtils'; -import { CustomNodes } from '../../../enums/container/CustomNodes'; -import { CustomNodeGroups } from '../../../enums/container/CustomNodeGroups'; import { RandomGeneratorUtils } from '../../../utils/RandomGeneratorUtils'; import { Utils } from '../../../utils/Utils'; @@ -35,17 +30,25 @@ export class StringLiteralReplacer extends AbstractReplacer { */ private readonly customNodeGroupStorage: IStorage; + /** + * @type {IStorage} + */ + private readonly stringArrayStorage: IStorage; + /** * @param customNodeGroupStorage + * @param stringArrayStorage * @param options */ constructor ( @inject(ServiceIdentifiers['IStorage']) customNodeGroupStorage: IStorage, + @inject(ServiceIdentifiers['IStorage']) stringArrayStorage: IStorage, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(options); this.customNodeGroupStorage = customNodeGroupStorage; + this.stringArrayStorage = stringArrayStorage; } /** @@ -70,12 +73,6 @@ export class StringLiteralReplacer extends AbstractReplacer { * @returns {string} */ private replaceStringLiteralWithStringArrayCall (value: string): string { - const stringArrayCustomNodeGroupNodes: Map = this.customNodeGroupStorage - .get(CustomNodeGroups.StringArrayCustomNodeGroup) - .getCustomNodes(); - const stringArrayNode: ICustomNodeWithData = stringArrayCustomNodeGroupNodes - .get(CustomNodes.StringArrayNode); - let rc4Key: string = ''; switch (this.options.stringArrayEncoding) { @@ -95,26 +92,25 @@ export class StringLiteralReplacer extends AbstractReplacer { value = Utils.stringToUnicodeEscapeSequence(value); } - const stringArray: IStorage = stringArrayNode.getNodeData(); - const indexOfExistingValue: number = stringArray.getKeyOf(value); + const indexOfExistingValue: number = this.stringArrayStorage.getKeyOf(value); let indexOfValue: number; if (indexOfExistingValue >= 0) { indexOfValue = indexOfExistingValue; } else { - indexOfValue = stringArray.getLength(); - stringArray.set(null, value); + indexOfValue = this.stringArrayStorage.getLength(); + this.stringArrayStorage.set(null, value); } - const stringArrayCallsWrapper: ICustomNodeWithIdentifier = stringArrayCustomNodeGroupNodes - .get(CustomNodes.StringArrayCallsWrapper); + const rotatedStringArrayStorageId: string = Utils.stringRotate(this.stringArrayStorage.getStorageId(), 2); + const stringArrayStorageCallsWrapperName: string = `_${Utils.hexadecimalPrefix}${rotatedStringArrayStorageId}`; const hexadecimalIndex: string = `${Utils.hexadecimalPrefix}${Utils.decToHex(indexOfValue)}`; if (this.options.stringArrayEncoding === StringArrayEncoding.rc4) { - return `${stringArrayCallsWrapper.getNodeIdentifier()}('${hexadecimalIndex}', '${Utils.stringToUnicodeEscapeSequence(rc4Key)}')`; + return `${stringArrayStorageCallsWrapperName}('${hexadecimalIndex}', '${Utils.stringToUnicodeEscapeSequence(rc4Key)}')`; } - return `${stringArrayCallsWrapper.getNodeIdentifier()}('${hexadecimalIndex}')`; + return `${stringArrayStorageCallsWrapperName}('${hexadecimalIndex}')`; } } diff --git a/src/node/Node.ts b/src/node/Node.ts index 13bcdd66..1161142c 100644 --- a/src/node/Node.ts +++ b/src/node/Node.ts @@ -91,6 +91,14 @@ export class Node { return node.type === NodeType.Identifier; } + /** + * @param node + * @returns {boolean} + */ + public static isIfStatementNode (node: ESTree.Node): node is ESTree.IfStatement { + return node.type === NodeType.IfStatement; + } + /** * @param node * @param parentNode diff --git a/src/node/NodeAppender.ts b/src/node/NodeAppender.ts index 9e6047b7..1afc7a01 100644 --- a/src/node/NodeAppender.ts +++ b/src/node/NodeAppender.ts @@ -155,7 +155,7 @@ export class NodeAppender { blockScopeNode: TNodeWithBlockStatement, nodeBodyStatements: TStatement[] ): TStatement[] { - for (let statement of nodeBodyStatements) { + for (const statement of nodeBodyStatements) { statement.parentNode = blockScopeNode; } diff --git a/src/node/NodeUtils.ts b/src/node/NodeUtils.ts index 4509fed0..bb800151 100644 --- a/src/node/NodeUtils.ts +++ b/src/node/NodeUtils.ts @@ -9,7 +9,6 @@ import { TStatement } from '../types/node/TStatement'; import { NodeType } from '../enums/NodeType'; import { Node } from './Node'; -import { Utils } from '../utils/Utils'; export class NodeUtils { /** @@ -50,6 +49,22 @@ export class NodeUtils { return structure.body; } + /** + * @param structure + * @returns {string} + */ + public static convertStructureToCode (structure: ESTree.Node[]): string { + let code: string = ''; + + for (const node of structure) { + code += escodegen.generate(node, { + sourceMapWithCode: true + }).code; + } + + return code; + } + /** * @param node * @param index @@ -69,10 +84,10 @@ export class NodeUtils { /** * @param node - * @param depth + * @param blockScopes * @returns {ESTree.Node} */ - public static getBlockScopeOfNode (node: ESTree.Node, depth: number = 0): TNodeWithBlockStatement { + public static getBlockScopesOfNode (node: ESTree.Node, blockScopes: TNodeWithBlockStatement[] = []): TNodeWithBlockStatement[] { const parentNode: ESTree.Node | undefined = node.parentNode; if (!parentNode) { @@ -84,20 +99,22 @@ export class NodeUtils { throw new ReferenceError('`parentNode` property of `parentNode` of given node is `undefined`'); } - if (!Utils.arrayContains(NodeUtils.nodesWithBlockScope, parentNode.parentNode.type)) { - return NodeUtils.getBlockScopeOfNode(parentNode, depth); - } else if (depth > 0) { - return NodeUtils.getBlockScopeOfNode(parentNode, --depth); + if (!NodeUtils.nodesWithBlockScope.includes(parentNode.parentNode.type)) { + return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes); } - return parentNode; + blockScopes.push(parentNode); + + return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes); } - if (Node.isProgramNode(parentNode)) { - return parentNode; + if (!Node.isProgramNode(parentNode)) { + return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes); } - return NodeUtils.getBlockScopeOfNode(parentNode); + blockScopes.push(parentNode); + + return blockScopes; } /** @@ -116,7 +133,7 @@ export class NodeUtils { return depth; } - if (Node.isBlockStatementNode(node) && Utils.arrayContains(NodeUtils.nodesWithBlockScope, parentNode.type)) { + if (Node.isBlockStatementNode(node) && NodeUtils.nodesWithBlockScope.includes(parentNode.type)) { return NodeUtils.getNodeBlockScopeDepth(parentNode, ++depth); } @@ -180,12 +197,12 @@ export class NodeUtils { (estraverse)[traverseType](node, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (node.type === nodeType && visitor.enter) { - visitor.enter(node, parentNode); + return visitor.enter(node, parentNode); } }, leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (node.type === nodeType && visitor.leave) { - visitor.leave(node, parentNode); + return visitor.leave(node, parentNode); } } }); diff --git a/src/options/Options.ts b/src/options/Options.ts index b6c97220..577b864a 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -23,7 +23,7 @@ import { IOptions } from '../interfaces/options/IOptions'; import { TSourceMapMode } from '../types/TSourceMapMode'; import { TStringArrayEncoding } from '../types/options/TStringArrayEncoding'; -import { DEFAULT_PRESET } from '../preset-options/DefaultPreset'; +import { DEFAULT_PRESET } from './presets/Default'; import { OptionsNormalizer } from './OptionsNormalizer'; import { ValidationErrorsFormatter } from './ValidationErrorsFormatter'; @@ -51,6 +51,14 @@ export class Options implements IOptions { @IsBoolean() public readonly controlFlowFlattening: boolean; + /** + * @type {boolean} + */ + @IsNumber() + @Min(0) + @Max(1) + public readonly controlFlowFlatteningThreshold: number; + /** * @type {boolean} */ diff --git a/src/options/OptionsNormalizer.ts b/src/options/OptionsNormalizer.ts index 5147c3f9..7cc8894e 100644 --- a/src/options/OptionsNormalizer.ts +++ b/src/options/OptionsNormalizer.ts @@ -10,7 +10,15 @@ export class OptionsNormalizer { /** * @type {TInputOptions} */ - private static readonly DISABLED_UNICODE_ARRAY_OPTIONS: TInputOptions = { + private static readonly DISABLED_CONTROL_FLOW_FLATTENING_OPTIONS: TInputOptions = { + controlFlowFlattening: false, + controlFlowFlatteningThreshold: 0 + }; + + /** + * @type {TInputOptions} + */ + private static readonly DISABLED_STRING_ARRAY_OPTIONS: TInputOptions = { rotateStringArray: false, stringArray: false, stringArrayEncoding: false, @@ -28,7 +36,7 @@ export class OptionsNormalizer { /** * @type {TInputOptions} */ - private static readonly UNICODE_ARRAY_ENCODING_OPTIONS: TInputOptions = { + private static readonly STRING_ARRAY_ENCODING_OPTIONS: TInputOptions = { stringArrayEncoding: 'base64' }; @@ -36,6 +44,7 @@ export class OptionsNormalizer { * @type {TOptionsNormalizerRule[]} */ private static readonly normalizerRules: TOptionsNormalizerRule[] = [ + OptionsNormalizer.controlFlowFlatteningThresholdRule, OptionsNormalizer.domainLockRule, OptionsNormalizer.selfDefendingRule, OptionsNormalizer.sourceMapBaseUrlRule, @@ -61,6 +70,21 @@ export class OptionsNormalizer { return normalizedOptions; } + /** + * @param options + * @returns {IOptions} + */ + private static controlFlowFlatteningThresholdRule (options: IOptions): IOptions { + if (options.controlFlowFlatteningThreshold === 0) { + options = { + ...options, + ...OptionsNormalizer.DISABLED_CONTROL_FLOW_FLATTENING_OPTIONS + }; + } + + return options; + } + /** * @param options * @returns {IOptions} @@ -152,7 +176,7 @@ export class OptionsNormalizer { if (!options.stringArray) { options = { ...options, - ...OptionsNormalizer.DISABLED_UNICODE_ARRAY_OPTIONS + ...OptionsNormalizer.DISABLED_STRING_ARRAY_OPTIONS }; } @@ -167,7 +191,7 @@ export class OptionsNormalizer { if (options.stringArrayEncoding === true) { options = { ...options, - ...OptionsNormalizer.UNICODE_ARRAY_ENCODING_OPTIONS + ...OptionsNormalizer.STRING_ARRAY_ENCODING_OPTIONS }; } @@ -182,7 +206,7 @@ export class OptionsNormalizer { if (options.stringArrayThreshold === 0) { options = { ...options, - ...OptionsNormalizer.DISABLED_UNICODE_ARRAY_OPTIONS + ...OptionsNormalizer.DISABLED_STRING_ARRAY_OPTIONS }; } diff --git a/src/preset-options/DefaultPreset.ts b/src/options/presets/Default.ts similarity index 77% rename from src/preset-options/DefaultPreset.ts rename to src/options/presets/Default.ts index e536011e..4fffe922 100644 --- a/src/preset-options/DefaultPreset.ts +++ b/src/options/presets/Default.ts @@ -1,10 +1,11 @@ -import { TInputOptions } from '../types/options/TInputOptions'; +import { TInputOptions } from '../../types/options/TInputOptions'; -import { SourceMapMode } from '../enums/SourceMapMode'; +import { SourceMapMode } from '../../enums/SourceMapMode'; export const DEFAULT_PRESET: TInputOptions = Object.freeze({ compact: true, controlFlowFlattening: false, + controlFlowFlatteningThreshold: 0.75, debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: true, diff --git a/src/preset-options/NoCustomNodesPreset.ts b/src/options/presets/NoCustomNodes.ts similarity index 77% rename from src/preset-options/NoCustomNodesPreset.ts rename to src/options/presets/NoCustomNodes.ts index d48d7a29..cd2ebd3b 100644 --- a/src/preset-options/NoCustomNodesPreset.ts +++ b/src/options/presets/NoCustomNodes.ts @@ -1,10 +1,11 @@ -import { TInputOptions } from '../types/options/TInputOptions'; +import { TInputOptions } from '../../types/options/TInputOptions'; -import { SourceMapMode } from '../enums/SourceMapMode'; +import { SourceMapMode } from '../../enums/SourceMapMode'; export const NO_CUSTOM_NODES_PRESET: TInputOptions = Object.freeze({ compact: true, controlFlowFlattening: false, + controlFlowFlatteningThreshold: 0, debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: false, diff --git a/src/stack-trace-analyzer/StackTraceAnalyzer.ts b/src/stack-trace-analyzer/StackTraceAnalyzer.ts index b650ae54..e17eb9a8 100644 --- a/src/stack-trace-analyzer/StackTraceAnalyzer.ts +++ b/src/stack-trace-analyzer/StackTraceAnalyzer.ts @@ -130,7 +130,7 @@ export class StackTraceAnalyzer implements IStackTraceAnalyzer { enter: (node: ESTree.Node): void => { if ( !Node.isCallExpressionNode(node) || - blockScopeBodyNode.parentNode !== NodeUtils.getBlockScopeOfNode(node) + blockScopeBodyNode.parentNode !== NodeUtils.getBlockScopesOfNode(node)[0] ) { return; } diff --git a/src/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts b/src/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts index be536396..92b4a72a 100644 --- a/src/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts +++ b/src/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts @@ -21,7 +21,7 @@ export class FunctionDeclarationCalleeDataExtractor extends AbstractCalleeDataEx if (Node.isIdentifierNode(callee)) { calleeBlockStatement = this.getCalleeBlockStatement( - NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), + NodeUtils.getBlockScopesOfNode(blockScopeBody[0])[0], callee.name ); } diff --git a/src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts b/src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts index d7d2f510..f7dd7eb8 100644 --- a/src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts +++ b/src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts @@ -21,7 +21,7 @@ export class FunctionExpressionCalleeDataExtractor extends AbstractCalleeDataExt if (Node.isIdentifierNode(callee)) { calleeBlockStatement = this.getCalleeBlockStatement( - NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), + NodeUtils.getBlockScopesOfNode(blockScopeBody[0])[0], callee.name ); } diff --git a/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts b/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts index 8dc69290..23d75c76 100644 --- a/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts +++ b/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts @@ -34,7 +34,7 @@ export class ObjectExpressionCalleeDataExtractor extends AbstractCalleeDataExtra functionExpressionName = objectMembersCallsChain[objectMembersCallsChain.length - 1]; calleeBlockStatement = this.getCalleeBlockStatement( - NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), + NodeUtils.getBlockScopesOfNode(blockScopeBody[0])[0], objectMembersCallsChain ); } diff --git a/src/storages/ArrayStorage.ts b/src/storages/ArrayStorage.ts index f7343bac..22cae049 100644 --- a/src/storages/ArrayStorage.ts +++ b/src/storages/ArrayStorage.ts @@ -1,8 +1,19 @@ +import { injectable } from 'inversify'; + import { IStorage } from '../interfaces/storages/IStorage'; import { initializable } from '../decorators/Initializable'; +import { RandomGeneratorUtils } from '../utils/RandomGeneratorUtils'; + +@injectable() export abstract class ArrayStorage implements IStorage { + /** + * @type {string} + */ + @initializable() + protected storageId: string; + /** * @type {T[]} */ @@ -45,11 +56,31 @@ export abstract class ArrayStorage implements IStorage { return this.storage; } + /** + * @returns {string} + */ + public getStorageId (): string { + return this.storageId; + } + /** * @param args */ public initialize (...args: any[]): void { this.storage = []; + this.storageId = RandomGeneratorUtils.getRandomString(6); + } + + /** + * @param storage + * @param mergeId + */ + public mergeWith (storage: this, mergeId: boolean = false): void { + this.storage = [...this.storage, ...storage.getStorage()]; + + if (mergeId) { + this.storageId = storage.getStorageId(); + } } /** diff --git a/src/storages/MapStorage.ts b/src/storages/MapStorage.ts index b8ba7ec7..d382d542 100644 --- a/src/storages/MapStorage.ts +++ b/src/storages/MapStorage.ts @@ -4,10 +4,17 @@ import { IStorage } from '../interfaces/storages/IStorage'; import { initializable } from '../decorators/Initializable'; +import { RandomGeneratorUtils } from '../utils/RandomGeneratorUtils'; import { Utils } from '../utils/Utils'; @injectable() export abstract class MapStorage implements IStorage { + /** + * @type {string} + */ + @initializable() + protected storageId: string; + /** * @type {Map } */ @@ -33,7 +40,7 @@ export abstract class MapStorage implements IStorage { * @returns {string | number | null} */ public getKeyOf (value: T): string | number | null { - return Utils.mapGetFirstKeyOf(this.storage, value); + return Utils.mapGetFirstKeyOf (this.storage, value); } /** @@ -50,11 +57,31 @@ export abstract class MapStorage implements IStorage { return this.storage; } + /** + * @returns {string} + */ + public getStorageId (): string { + return this.storageId; + } + /** * @param args */ public initialize (...args: any[]): void { this.storage = new Map (); + this.storageId = RandomGeneratorUtils.getRandomString(6); + } + + /** + * @param storage + * @param mergeId + */ + public mergeWith (storage: this, mergeId: boolean = false): void { + this.storage = new Map ([...this.storage, ...storage.getStorage()]); + + if (mergeId) { + this.storageId = storage.getStorageId(); + } } /** diff --git a/src/storages/custom-node-group/CustomNodeGroupStorage.ts b/src/storages/custom-node-group/CustomNodeGroupStorage.ts index 5ded676c..50e2ab90 100644 --- a/src/storages/custom-node-group/CustomNodeGroupStorage.ts +++ b/src/storages/custom-node-group/CustomNodeGroupStorage.ts @@ -9,6 +9,7 @@ import { IOptions } from '../../interfaces/options/IOptions'; import { CustomNodeGroups } from '../../enums/container/CustomNodeGroups'; import { MapStorage } from '../MapStorage'; +import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; @injectable() export class CustomNodeGroupStorage extends MapStorage { @@ -51,6 +52,7 @@ export class CustomNodeGroupStorage extends MapStorage { public initialize (): void { this.storage = new Map (); + this.storageId = RandomGeneratorUtils.getRandomString(6); CustomNodeGroupStorage.customNodeGroupsList.forEach((customNodeGroupName: CustomNodeGroups) => { const customNodeGroup: ICustomNodeGroup = this.customNodeGroupFactory( diff --git a/src/storages/string-array/StringArrayStorage.ts b/src/storages/string-array/StringArrayStorage.ts index 33c68893..97e51e8c 100644 --- a/src/storages/string-array/StringArrayStorage.ts +++ b/src/storages/string-array/StringArrayStorage.ts @@ -1,6 +1,10 @@ +import { injectable } from 'inversify'; + import { ArrayStorage } from '../ArrayStorage'; +import { RandomGeneratorUtils } from '../../utils/RandomGeneratorUtils'; import { Utils } from '../../utils/Utils'; +@injectable() export class StringArrayStorage extends ArrayStorage { constructor () { super(); @@ -8,6 +12,15 @@ export class StringArrayStorage extends ArrayStorage { this.initialize(); } + /** + * @param args + */ + public initialize (...args: any[]): void { + super.initialize(args); + + this.storageId = RandomGeneratorUtils.getRandomVariableName(4, false); + } + /** * @param rotationValue */ @@ -23,4 +36,4 @@ export class StringArrayStorage extends ArrayStorage { return `'${value}'`; }).toString(); } -} +} \ No newline at end of file diff --git a/src/utils/CryptUtils.ts b/src/utils/CryptUtils.ts index 870cf8af..d2ce86f3 100644 --- a/src/utils/CryptUtils.ts +++ b/src/utils/CryptUtils.ts @@ -58,7 +58,7 @@ export class CryptUtils { return result; }; - const randomString: string = RandomGeneratorUtils.randomGenerator.string({ + const randomString: string = RandomGeneratorUtils.getRandomGenerator().string({ length: length, pool: RandomGeneratorUtils.randomGeneratorPool }); @@ -69,7 +69,7 @@ export class CryptUtils { const randomStringDiffArray: string[] = randomStringDiff.split(''); - RandomGeneratorUtils.randomGenerator.shuffle(randomStringDiffArray); + RandomGeneratorUtils.getRandomGenerator().shuffle(randomStringDiffArray); randomStringDiff = randomStringDiffArray.join(''); return [randomMerge(str, randomStringDiff), randomStringDiff]; diff --git a/src/utils/RandomGeneratorUtils.ts b/src/utils/RandomGeneratorUtils.ts index 55ca5751..4cf75da2 100644 --- a/src/utils/RandomGeneratorUtils.ts +++ b/src/utils/RandomGeneratorUtils.ts @@ -16,7 +16,7 @@ export class RandomGeneratorUtils { /** * @type {Chance.Chance | Chance.SeededChance} */ - public static randomGenerator: Chance.Chance | Chance.SeededChance = new Chance(); + private static randomGenerator: Chance.Chance | Chance.SeededChance = new Chance(); /** * @param min @@ -24,7 +24,7 @@ export class RandomGeneratorUtils { * @returns {number} */ public static getRandomFloat (min: number, max: number): number { - return RandomGeneratorUtils.randomGenerator.floating({ + return RandomGeneratorUtils.getRandomGenerator().floating({ min: min, max: max, fixed: 7 @@ -50,7 +50,7 @@ export class RandomGeneratorUtils { * @returns {number} */ public static getRandomInteger (min: number, max: number): number { - return RandomGeneratorUtils.randomGenerator.integer({ + return RandomGeneratorUtils.getRandomGenerator().integer({ min: min, max: max }); @@ -58,13 +58,24 @@ export class RandomGeneratorUtils { /** * @param length + * @param pool * @returns {string} */ - public static getRandomVariableName (length: number = 6): string { - const rangeMinInteger: number = 10000, - rangeMaxInteger: number = 99999999; + public static getRandomString (length: number, pool: string = RandomGeneratorUtils.randomGeneratorPool): string { + return RandomGeneratorUtils.getRandomGenerator().string({ length, pool }); + } - return `_${Utils.hexadecimalPrefix}${( + /** + * @param length + * @param withPrefix + * @returns {string} + */ + public static getRandomVariableName (length: number = 6, withPrefix: boolean = true): string { + const prefix: string = withPrefix ? `_${Utils.hexadecimalPrefix}` : ''; + const rangeMinInteger: number = 10000; + const rangeMaxInteger: number = 99999999; + + return `${prefix}${( Utils.decToHex( RandomGeneratorUtils.getRandomInteger(rangeMinInteger, rangeMaxInteger) ) @@ -72,9 +83,9 @@ export class RandomGeneratorUtils { } /** - * @param randomGeneratorSeed + * @param randomGenerator */ - public static setRandomGeneratorSeed (randomGeneratorSeed: number): void { - RandomGeneratorUtils.randomGenerator = new Chance(randomGeneratorSeed); + public static setRandomGenerator (randomGenerator: Chance.Chance | Chance.SeededChance): void { + RandomGeneratorUtils.randomGenerator = randomGenerator; } } diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 67aae378..7d6545c5 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -1,22 +1,12 @@ +import * as _ from 'lodash'; import { JSFuck } from '../enums/JSFuck'; -const isEqual: any = require('is-equal'); - export class Utils { /** * @type {string} */ public static readonly hexadecimalPrefix: string = '0x'; - /** - * @param array - * @param searchElement - * @returns {boolean} - */ - public static arrayContains (array: any[], searchElement: any): boolean { - return array.indexOf(searchElement) >= 0; - } - /** * @param array * @param times @@ -31,8 +21,9 @@ export class Utils { return array; } - let newArray: T[] = array, - temp: T | undefined; + const newArray: T[] = array; + + let temp: T | undefined; while (times--) { temp = newArray.pop()!; @@ -74,18 +65,18 @@ export class Utils { * @param number * @returns {boolean} */ - public static isInteger (number: number): boolean { + public static isCeilNumber (number: number): boolean { return number % 1 === 0; } /** * @param map * @param value - * @returns {any} + * @returns {T | null} */ - public static mapGetFirstKeyOf(map: Map , value: any): any { - for (let [key, storageValue] of map) { - if (isEqual(value, storageValue)) { + public static mapGetFirstKeyOf (map: Map , value: U): T | null { + for (const [key, storageValue] of map) { + if (_.isEqual(value, storageValue)) { return key; } } @@ -101,6 +92,15 @@ export class Utils { return obj; } + /** + * @param string + * @param times + * @returns {string} + */ + public static stringRotate (string: string, times: number): string { + return Utils.arrayRotate(Array.from(string), times).join(''); + } + /** * @param string * @returns {string} @@ -120,9 +120,9 @@ export class Utils { */ public static stringToUnicodeEscapeSequence (string: string): string { const radix: number = 16; + const regexp: RegExp = new RegExp('[\x00-\x7F]'); let prefix: string, - regexp: RegExp = new RegExp('[\x00-\x7F]'), template: string; return `${string.replace(/[\s\S]/g, (escape: string): string => { diff --git a/test/dev/dev.ts b/test/dev/dev.ts index 59c2bb7e..5307d3d8 100644 --- a/test/dev/dev.ts +++ b/test/dev/dev.ts @@ -1,5 +1,4 @@ 'use strict'; -import { NO_CUSTOM_NODES_PRESET } from '../../src/preset-options/NoCustomNodesPreset'; if (!(global)._babelPolyfill) { require('babel-polyfill'); @@ -11,15 +10,79 @@ if (!(global)._babelPolyfill) { let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( ` (function(){ + var result = 1, + term1 = 0, + term2 = 1, + i = 1; + while(i < 10) + { + var test = 10; + result = term1 + term2; + console.log(result); + term1 = term2; + term2 = result; + i++; + } + + console.log(test); + + var test = function (test) { + console.log(test); + + if (true) { + var test = 5 + } + + return test; + } + + console.log(test(1)); + + function test2 (abc) { + function test1 () { + console.log('inside', abc.item); + } + + console.log('ั‚ะตัั‚', abc); + + var abc = {}; + + return abc.item = 15, test1(); + }; + + var regexptest = /version\\/(\\d+)/i; + console.log(regexptest); + + test2(22); + console.log(105.4); + console.log(true, false); + + var sA = 'shorthand1'; + var sB = 'shorthand2'; + + console.log({sA, sB}); + + try { + } catch (error) { + console.log(error); + } + function foo () { return function () { - var sum = 1 + 2; + var sum1 = 10 + 20; + var sum2 = 20 + 30; + var sum3 = 30 + 50; + var sub = sum3 - sum2; + + return sum1 + sub; } } + + console.log(foo()()); })(); `, { - ...NO_CUSTOM_NODES_PRESET, + compact: false, controlFlowFlattening: true, disableConsoleOutput: false } diff --git a/test/fixtures/compile-performance.js b/test/fixtures/compile-performance.js index 4d0218ae..a2b872d5 100644 --- a/test/fixtures/compile-performance.js +++ b/test/fixtures/compile-performance.js @@ -19813,8 +19813,8 @@ else { mergedOutputs = outputs; } - var mergedHost = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(dm.host) ? __WEBPACK_IMPORTED_MODULE_1__facade_collection__["b" /* StringMapWrapper */].merge(dm.host, host) : host; - var mergedQueries = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(dm.queries) ? __WEBPACK_IMPORTED_MODULE_1__facade_collection__["b" /* StringMapWrapper */].merge(dm.queries, queries) : queries; + var mergedHost = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(dm.host) ? __WEBPACK_IMPORTED_MODULE_1__facade_collection__["b" /* StringMapWrapper */].mergeWith(dm.host, host) : host; + var mergedQueries = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(dm.queries) ? __WEBPACK_IMPORTED_MODULE_1__facade_collection__["b" /* StringMapWrapper */].mergeWith(dm.queries, queries) : queries; if (dm instanceof __WEBPACK_IMPORTED_MODULE_0__angular_core__["Component"]) { return new __WEBPACK_IMPORTED_MODULE_0__angular_core__["Component"]({ selector: dm.selector, @@ -25918,7 +25918,7 @@ } function _createRootRenderer(rootRenderer /** TODO #9100 */, extraTokens) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__dom_adapter__["a" /* getDOM */])().setGlobalVar(INSPECT_GLOBAL_NAME, inspectNativeElement); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__dom_adapter__["a" /* getDOM */])().setGlobalVar(CORE_TOKENS_GLOBAL_NAME, __WEBPACK_IMPORTED_MODULE_1__facade_collection__["a" /* StringMapWrapper */].merge(CORE_TOKENS, _ngProbeTokensToMap(extraTokens || []))); + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__dom_adapter__["a" /* getDOM */])().setGlobalVar(CORE_TOKENS_GLOBAL_NAME, __WEBPACK_IMPORTED_MODULE_1__facade_collection__["a" /* StringMapWrapper */].mergeWith(CORE_TOKENS, _ngProbeTokensToMap(extraTokens || []))); return new __WEBPACK_IMPORTED_MODULE_2__private_import_core__["b" /* DebugDomRootRenderer */](rootRenderer); } function _ngProbeTokensToMap(tokens) { @@ -38913,14 +38913,14 @@ if (!_this._finished) { var responseOptions_1 = new __WEBPACK_IMPORTED_MODULE_2__base_response_options__["a" /* ResponseOptions */]({ body: JSONP_ERR_NO_CALLBACK, type: __WEBPACK_IMPORTED_MODULE_3__enums__["a" /* ResponseType */].Error, url: url }); if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__facade_lang__["a" /* isPresent */])(baseResponseOptions)) { - responseOptions_1 = baseResponseOptions.merge(responseOptions_1); + responseOptions_1 = baseResponseOptions.mergeWith(responseOptions_1); } responseObserver.error(new __WEBPACK_IMPORTED_MODULE_6__static_response__["a" /* Response */](responseOptions_1)); return; } var responseOptions = new __WEBPACK_IMPORTED_MODULE_2__base_response_options__["a" /* ResponseOptions */]({ body: _this._responseData, url: url }); if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__facade_lang__["a" /* isPresent */])(_this.baseResponseOptions)) { - responseOptions = _this.baseResponseOptions.merge(responseOptions); + responseOptions = _this.baseResponseOptions.mergeWith(responseOptions); } responseObserver.next(new __WEBPACK_IMPORTED_MODULE_6__static_response__["a" /* Response */](responseOptions)); responseObserver.complete(); @@ -38932,7 +38932,7 @@ _dom.cleanup(script); var responseOptions = new __WEBPACK_IMPORTED_MODULE_2__base_response_options__["a" /* ResponseOptions */]({ body: error.message, type: __WEBPACK_IMPORTED_MODULE_3__enums__["a" /* ResponseType */].Error }); if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__facade_lang__["a" /* isPresent */])(baseResponseOptions)) { - responseOptions = baseResponseOptions.merge(responseOptions); + responseOptions = baseResponseOptions.mergeWith(responseOptions); } responseObserver.error(new __WEBPACK_IMPORTED_MODULE_6__static_response__["a" /* Response */](responseOptions)); }; @@ -39075,7 +39075,7 @@ var statusText = _xhr.statusText || 'OK'; var responseOptions = new __WEBPACK_IMPORTED_MODULE_3__base_response_options__["a" /* ResponseOptions */]({ body: body, status: status, headers: headers, statusText: statusText, url: url }); if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__facade_lang__["a" /* isPresent */])(baseResponseOptions)) { - responseOptions = baseResponseOptions.merge(responseOptions); + responseOptions = baseResponseOptions.mergeWith(responseOptions); } var response = new __WEBPACK_IMPORTED_MODULE_9__static_response__["a" /* Response */](responseOptions); response.ok = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__http_utils__["d" /* isSuccess */])(status); @@ -39096,7 +39096,7 @@ statusText: _xhr.statusText, }); if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__facade_lang__["a" /* isPresent */])(baseResponseOptions)) { - responseOptions = baseResponseOptions.merge(responseOptions); + responseOptions = baseResponseOptions.mergeWith(responseOptions); } responseObserver.error(new __WEBPACK_IMPORTED_MODULE_9__static_response__["a" /* Response */](responseOptions)); }; @@ -39355,7 +39355,7 @@ var newOptions = defaultOpts; if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__src_facade_lang__["a" /* isPresent */])(providedOpts)) { // Hack so Dart can used named parameters - return newOptions.merge(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ + return newOptions.mergeWith(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ method: providedOpts.method || method, url: providedOpts.url || url, search: providedOpts.search, @@ -39366,10 +39366,10 @@ })); } if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__src_facade_lang__["a" /* isPresent */])(method)) { - return newOptions.merge(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ method: method, url: url })); + return newOptions.mergeWith(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ method: method, url: url })); } else { - return newOptions.merge(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ url: url })); + return newOptions.mergeWith(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ url: url })); } } /** @@ -39466,13 +39466,13 @@ * Performs a request with `post` http method. */ Http.prototype.post = function (url, body, options) { - return httpRequest(this._backend, new __WEBPACK_IMPORTED_MODULE_5__static_request__["a" /* Request */](mergeOptions(this._defaultOptions.merge(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ body: body })), options, __WEBPACK_IMPORTED_MODULE_3__enums__["b" /* RequestMethod */].Post, url))); + return httpRequest(this._backend, new __WEBPACK_IMPORTED_MODULE_5__static_request__["a" /* Request */](mergeOptions(this._defaultOptions.mergeWith(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ body: body })), options, __WEBPACK_IMPORTED_MODULE_3__enums__["b" /* RequestMethod */].Post, url))); }; /** * Performs a request with `put` http method. */ Http.prototype.put = function (url, body, options) { - return httpRequest(this._backend, new __WEBPACK_IMPORTED_MODULE_5__static_request__["a" /* Request */](mergeOptions(this._defaultOptions.merge(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ body: body })), options, __WEBPACK_IMPORTED_MODULE_3__enums__["b" /* RequestMethod */].Put, url))); + return httpRequest(this._backend, new __WEBPACK_IMPORTED_MODULE_5__static_request__["a" /* Request */](mergeOptions(this._defaultOptions.mergeWith(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ body: body })), options, __WEBPACK_IMPORTED_MODULE_3__enums__["b" /* RequestMethod */].Put, url))); }; /** * Performs a request with `delete` http method. @@ -39484,7 +39484,7 @@ * Performs a request with `patch` http method. */ Http.prototype.patch = function (url, body, options) { - return httpRequest(this._backend, new __WEBPACK_IMPORTED_MODULE_5__static_request__["a" /* Request */](mergeOptions(this._defaultOptions.merge(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ body: body })), options, __WEBPACK_IMPORTED_MODULE_3__enums__["b" /* RequestMethod */].Patch, url))); + return httpRequest(this._backend, new __WEBPACK_IMPORTED_MODULE_5__static_request__["a" /* Request */](mergeOptions(this._defaultOptions.mergeWith(new __WEBPACK_IMPORTED_MODULE_2__base_request_options__["a" /* RequestOptions */]({ body: body })), options, __WEBPACK_IMPORTED_MODULE_3__enums__["b" /* RequestMethod */].Patch, url))); }; /** * Performs a request with `head` http method. @@ -49300,7 +49300,7 @@ var lastIndex = stylesList.length - 1; var lastItem = stylesList[lastIndex]; if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["l" /* isStringMap */])(lastItem)) { - stylesList[lastIndex] = __WEBPACK_IMPORTED_MODULE_1__facade_collection__["b" /* StringMapWrapper */].merge(lastItem, newItem); + stylesList[lastIndex] = __WEBPACK_IMPORTED_MODULE_1__facade_collection__["b" /* StringMapWrapper */].mergeWith(lastItem, newItem); return; } } @@ -53616,7 +53616,7 @@ hasExtraFirstStyles = true; } }); - var keyframeCollectedStyles = __WEBPACK_IMPORTED_MODULE_0__facade_collection__["d" /* StringMapWrapper */].merge({}, flatenedFirstKeyframeStyles); + var keyframeCollectedStyles = __WEBPACK_IMPORTED_MODULE_0__facade_collection__["d" /* StringMapWrapper */].mergeWith({}, flatenedFirstKeyframeStyles); // phase 2: normalize the final keyframe var finalKeyframe = keyframes[limit]; __WEBPACK_IMPORTED_MODULE_0__facade_collection__["a" /* ListWrapper */].insert(finalKeyframe.styles.styles, 0, finalStateStyles); @@ -64367,7 +64367,7 @@ "use strict"; var Observable_1 = __webpack_require__(0); var merge_1 = __webpack_require__(857); - Observable_1.Observable.merge = merge_1.merge; + Observable_1.Observable.merge = merge_1.mergeWith; //# sourceMappingURL=merge.js.map /***/ }, @@ -64975,7 +64975,7 @@ "use strict"; var Observable_1 = __webpack_require__(0); var merge_1 = __webpack_require__(404); - Observable_1.Observable.prototype.merge = merge_1.merge; + Observable_1.Observable.prototype.merge = merge_1.mergeWith; //# sourceMappingURL=merge.js.map /***/ }, diff --git a/test/fixtures/node-transformers/node-control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer-1.js b/test/fixtures/node-transformers/node-control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer-1.js new file mode 100644 index 00000000..d7ade6fd --- /dev/null +++ b/test/fixtures/node-transformers/node-control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer-1.js @@ -0,0 +1,3 @@ +(function () { + var variable = 1 + 2; +})(); diff --git a/test/fixtures/node-transformers/node-control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer-2.js b/test/fixtures/node-transformers/node-control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer-2.js new file mode 100644 index 00000000..3ee5a085 --- /dev/null +++ b/test/fixtures/node-transformers/node-control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer-2.js @@ -0,0 +1,4 @@ +(function () { + var variable1 = 1 + 2; + var variable2 = 2 + 3; +})(); diff --git a/test/functional-tests/JavaScriptObfuscator.spec.ts b/test/functional-tests/JavaScriptObfuscator.spec.ts index f51383f9..437392f6 100644 --- a/test/functional-tests/JavaScriptObfuscator.spec.ts +++ b/test/functional-tests/JavaScriptObfuscator.spec.ts @@ -1,14 +1,22 @@ import { assert } from 'chai'; +import { Chance } from 'chance'; + import { IObfuscationResult } from '../../src/interfaces/IObfuscationResult'; import { JavaScriptObfuscator } from '../../src/JavaScriptObfuscator'; -import { NO_CUSTOM_NODES_PRESET } from '../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../src/options/presets/NoCustomNodes'; + import { readFileAsString } from '../helpers/readFileAsString'; +import { RandomGeneratorUtils } from '../../src/utils/RandomGeneratorUtils'; describe('JavaScriptObfuscator', () => { describe('obfuscate (sourceCode: string, customOptions?: IObfuscatorOptions): IObfuscationResult', () => { + beforeEach(() => { + RandomGeneratorUtils.setRandomGenerator(new Chance()); + }); + describe('if `sourceMap` option is `false`', () => { it('should returns object with obfuscated code and empty source map', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( @@ -171,5 +179,9 @@ describe('JavaScriptObfuscator', () => { assert.notEqual(obfuscationResult1.getObfuscatedCode(), obfuscationResult2.getObfuscatedCode()); assert.notEqual(obfuscationResult3.getObfuscatedCode(), obfuscationResult4.getObfuscatedCode()); }); + + afterEach(() => { + RandomGeneratorUtils.setRandomGenerator(new Chance()); + }); }); }); diff --git a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts b/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts index fc75e99d..69b02200 100644 --- a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts +++ b/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts @@ -6,7 +6,7 @@ import { IInversifyContainerFacade } from '../../src/interfaces/container/IInver import { IJavaScriptObfuscator } from '../../src/interfaces/IJavaScriptObfsucator'; import { IObfuscationResult } from '../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../src/options/presets/NoCustomNodes'; import { InversifyContainerFacade } from '../../src/container/InversifyContainerFacade'; diff --git a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts index 11a34d38..6f6edd3c 100644 --- a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts +++ b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts b/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts index bee6314d..946316b1 100644 --- a/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts +++ b/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/functional-tests/custom-nodes/string-array-nodes/StringArrayCallsWrapper.spec.ts b/test/functional-tests/custom-nodes/string-array-nodes/StringArrayCallsWrapper.spec.ts index e4e60052..56287a93 100644 --- a/test/functional-tests/custom-nodes/string-array-nodes/StringArrayCallsWrapper.spec.ts +++ b/test/functional-tests/custom-nodes/string-array-nodes/StringArrayCallsWrapper.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/functional-tests/custom-nodes/string-array-nodes/StringArrayNode.spec.ts b/test/functional-tests/custom-nodes/string-array-nodes/StringArrayNode.spec.ts index 3db50384..1914f291 100644 --- a/test/functional-tests/custom-nodes/string-array-nodes/StringArrayNode.spec.ts +++ b/test/functional-tests/custom-nodes/string-array-nodes/StringArrayNode.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/functional-tests/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.spec.ts b/test/functional-tests/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.spec.ts index 76bf39a8..20ef9e6e 100644 --- a/test/functional-tests/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.spec.ts +++ b/test/functional-tests/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/functional-tests/node-transformers/node-control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/node-control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.spec.ts new file mode 100644 index 00000000..06b56a19 --- /dev/null +++ b/test/functional-tests/node-transformers/node-control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.spec.ts @@ -0,0 +1,77 @@ +import { assert } from 'chai'; + +import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; + +import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; + +import { readFileAsString } from '../../../../helpers/readFileAsString'; + +import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscator'; + +describe('BinaryExpressionControlFlowReplacer', () => { + describe('replace (binaryExpressionNode: ESTree.BinaryExpression,parentNode: ESTree.Node,controlFlowStorage: IStorage )', () => { + describe('variant #1 - single binary expression', () => { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString( + './test/fixtures/node-transformers/node-control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer-1.js' + ), + { + ...NO_CUSTOM_NODES_PRESET, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1 + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + const controlFlowStorageCallRegExp: RegExp = /var *_0x([a-z0-9]){4,6} *= *_0x([a-z0-9]){4,6}\['(\\x[a-f0-9]*){3}'\]\(0x1, *0x2\);/; + + it('should replace binary expression node by call to control flow storage node', () => { + assert.match(obfuscatedCode, controlFlowStorageCallRegExp); + }); + }); + + describe('variant #2 - multiple binary expressions with threshold = 1', () => { + it('should replace binary expression node by call to control flow storage node', function () { + this.timeout(4000); + + const samplesCount: number = 200; + const expectedValue: number = 0.5; + const delta: number = 0.1; + + let equalsValue: number = 0; + + for (let i = 0; i < samplesCount; i++) { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString( + './test/fixtures/node-transformers/node-control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer-2.js' + ), + { + ...NO_CUSTOM_NODES_PRESET, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1 + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + const controlFlowStorageCallRegExp1: RegExp = /var *_0x([a-z0-9]){4,6} *= *(_0x([a-z0-9]){4,6}\['(\\x[a-f0-9]*){3}'\])\(0x1, *0x2\);/; + const controlFlowStorageCallRegExp2: RegExp = /var *_0x([a-z0-9]){4,6} *= *(_0x([a-z0-9]){4,6}\['(\\x[a-f0-9]*){3}'\])\(0x2, *0x3\);/; + + const firstMatchArray: RegExpMatchArray | null = obfuscatedCode.match(controlFlowStorageCallRegExp1); + const secondMatchArray: RegExpMatchArray | null = obfuscatedCode.match(controlFlowStorageCallRegExp2); + + const firstMatch: string | undefined = firstMatchArray ? firstMatchArray[2] : undefined; + const secondMatch: string | undefined = secondMatchArray ? secondMatchArray[2] : undefined; + + assert.match(obfuscatedCode, controlFlowStorageCallRegExp1); + assert.match(obfuscatedCode, controlFlowStorageCallRegExp2); + assert.isOk(firstMatch); + assert.isOk(secondMatch); + + if (firstMatch === secondMatch) { + equalsValue++; + } + } + + assert.closeTo(equalsValue / samplesCount, expectedValue, delta); + }); + }); + }); +}); diff --git a/test/functional-tests/node-transformers/node-obfuscators/CatchClauseObfuscator.spec.ts b/test/functional-tests/node-transformers/node-obfuscators/CatchClauseObfuscator.spec.ts index c08fb67f..948567a0 100644 --- a/test/functional-tests/node-transformers/node-obfuscators/CatchClauseObfuscator.spec.ts +++ b/test/functional-tests/node-transformers/node-obfuscators/CatchClauseObfuscator.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../helpers/readFileAsString'; @@ -28,11 +28,11 @@ describe('CatchClauseObfuscator', () => { }); it('catch clause arguments param name and param name in body should be same', () => { - const firstMatchArray: RegExpMatchArray|null = obfuscatedCode.match(paramNameRegExp); - const secondMatchArray: RegExpMatchArray|null = obfuscatedCode.match(bodyParamNameRegExp); + const firstMatchArray: RegExpMatchArray | null = obfuscatedCode.match(paramNameRegExp); + const secondMatchArray: RegExpMatchArray | null = obfuscatedCode.match(bodyParamNameRegExp); - const firstMatch: string|undefined = firstMatchArray ? firstMatchArray[1] : undefined; - const secondMatch: string|undefined = secondMatchArray ? secondMatchArray[1] : undefined; + const firstMatch: string | undefined = firstMatchArray ? firstMatchArray[1] : undefined; + const secondMatch: string | undefined = secondMatchArray ? secondMatchArray[1] : undefined; assert.isOk(firstMatch); assert.isOk(secondMatch); diff --git a/test/functional-tests/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.spec.ts b/test/functional-tests/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.spec.ts index 654dd631..f62c9769 100644 --- a/test/functional-tests/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.spec.ts +++ b/test/functional-tests/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/functional-tests/node-transformers/node-obfuscators/FunctionObfuscator.spec.ts b/test/functional-tests/node-transformers/node-obfuscators/FunctionObfuscator.spec.ts index 01b51305..eac8171c 100644 --- a/test/functional-tests/node-transformers/node-obfuscators/FunctionObfuscator.spec.ts +++ b/test/functional-tests/node-transformers/node-obfuscators/FunctionObfuscator.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/functional-tests/node-transformers/node-obfuscators/LabeledStatementObfuscator.spec.ts b/test/functional-tests/node-transformers/node-obfuscators/LabeledStatementObfuscator.spec.ts index a74fa29e..dc7f0d9a 100644 --- a/test/functional-tests/node-transformers/node-obfuscators/LabeledStatementObfuscator.spec.ts +++ b/test/functional-tests/node-transformers/node-obfuscators/LabeledStatementObfuscator.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../helpers/readFileAsString'; diff --git a/test/functional-tests/node-transformers/node-obfuscators/LiteralObfuscator.spec.ts b/test/functional-tests/node-transformers/node-obfuscators/LiteralObfuscator.spec.ts index edc710db..669a2601 100644 --- a/test/functional-tests/node-transformers/node-obfuscators/LiteralObfuscator.spec.ts +++ b/test/functional-tests/node-transformers/node-obfuscators/LiteralObfuscator.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/functional-tests/node-transformers/node-obfuscators/MemberExpressionObfuscator.spec.ts b/test/functional-tests/node-transformers/node-obfuscators/MemberExpressionObfuscator.spec.ts index 946998fe..7f2b3dac 100644 --- a/test/functional-tests/node-transformers/node-obfuscators/MemberExpressionObfuscator.spec.ts +++ b/test/functional-tests/node-transformers/node-obfuscators/MemberExpressionObfuscator.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/functional-tests/node-transformers/node-obfuscators/MethodDefinitionObfuscator.spec.ts b/test/functional-tests/node-transformers/node-obfuscators/MethodDefinitionObfuscator.spec.ts index 797f5794..2a5d10d4 100644 --- a/test/functional-tests/node-transformers/node-obfuscators/MethodDefinitionObfuscator.spec.ts +++ b/test/functional-tests/node-transformers/node-obfuscators/MethodDefinitionObfuscator.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/functional-tests/node-transformers/node-obfuscators/ObjectExpressionObfuscator.spec.ts b/test/functional-tests/node-transformers/node-obfuscators/ObjectExpressionObfuscator.spec.ts index e35514e0..b5f96cf1 100644 --- a/test/functional-tests/node-transformers/node-obfuscators/ObjectExpressionObfuscator.spec.ts +++ b/test/functional-tests/node-transformers/node-obfuscators/ObjectExpressionObfuscator.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/functional-tests/node-transformers/node-obfuscators/VariableDeclarationObfuscator.spec.ts b/test/functional-tests/node-transformers/node-obfuscators/VariableDeclarationObfuscator.spec.ts index 6bdbe0e7..18f1d6fc 100644 --- a/test/functional-tests/node-transformers/node-obfuscators/VariableDeclarationObfuscator.spec.ts +++ b/test/functional-tests/node-transformers/node-obfuscators/VariableDeclarationObfuscator.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; diff --git a/test/index.spec.ts b/test/index.spec.ts index 455fd3e4..2fb109c8 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -8,7 +8,7 @@ BabelPolyfill.append(); * Unit tests */ import './unit-tests/ObfuscationResult.spec'; -import './unit-tests/OptionsNormalizer.spec'; +import './unit-tests/options/OptionsNormalizer.spec'; import './unit-tests/SourceMapCorrector.spec'; import './unit-tests/cli/CLIUtils.spec'; import './unit-tests/decorators/Initializable.spec'; @@ -31,6 +31,7 @@ import './functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec'; import './functional-tests/custom-nodes/string-array-nodes/StringArrayCallsWrapper.spec'; import './functional-tests/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.spec'; import './functional-tests/custom-nodes/string-array-nodes/StringArrayNode.spec'; +import './functional-tests/node-transformers/node-control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.spec'; import './functional-tests/node-transformers/node-obfuscators/CatchClauseObfuscator.spec'; import './functional-tests/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.spec'; import './functional-tests/node-transformers/node-obfuscators/FunctionObfuscator.spec'; diff --git a/test/unit-tests/node/NodeUtils.spec.ts b/test/unit-tests/node/NodeUtils.spec.ts index 65942b23..5dec1553 100644 --- a/test/unit-tests/node/NodeUtils.spec.ts +++ b/test/unit-tests/node/NodeUtils.spec.ts @@ -63,6 +63,29 @@ describe('NodeUtils', () => { }); }); + describe('convertStructureToCode (structure: ESTree.Node[]): string', () => { + let structure: ESTree.Node[], + expectedCode: string; + + beforeEach(() => { + structure = [ + NodeMocks.getProgramNode([ + NodeMocks.getVariableDeclarationNode([ + NodeMocks.getVariableDeclaratorNode( + NodeMocks.getIdentifierNode('abc'), + NodeMocks.getLiteralNode('cde') + ) + ]) + ]) + ]; + expectedCode = 'var abc = \'cde\';'; + }); + + it('should convert `ESTree.Node[]` structure to source code', () => { + assert.deepEqual(NodeUtils.convertStructureToCode(structure), expectedCode); + }); + }); + describe('getBlockStatementNodeByIndex (node: ESTree.Node, index: number = 0): ESTree.Node', () => { let blockStatementNode: ESTree.BlockStatement, expressionStatementNode1: ESTree.ExpressionStatement, @@ -92,15 +115,15 @@ describe('NodeUtils', () => { }); }); - describe('getBlockScopeOfNode (node: ESTree.Node, depth: number = 0): TNodeWithBlockStatement', () => { + describe('getBlockScopesOfNode (node: ESTree.Node, blockScopes: TNodeWithBlockStatement[] = []): TNodeWithBlockStatement[]', () => { let functionDeclarationBlockStatementNode: ESTree.BlockStatement, ifStatementBlockStatementNode1: ESTree.BlockStatement, ifStatementBlockStatementNode2: ESTree.BlockStatement, ifStatementNode1: ESTree.IfStatement, ifStatementNode2: ESTree.IfStatement, - expressionStatementNode1: ESTree.ExpressionStatement, - expressionStatementNode2: ESTree.ExpressionStatement, expressionStatementNode3: ESTree.ExpressionStatement, + expressionStatementNode2: ESTree.ExpressionStatement, + expressionStatementNode1: ESTree.ExpressionStatement, functionDeclarationNode: ESTree.FunctionDeclaration, programNode: ESTree.Program; @@ -110,8 +133,8 @@ describe('NodeUtils', () => { expressionStatementNode3 = NodeMocks.getExpressionStatementNode(); ifStatementBlockStatementNode2 = NodeMocks.getBlockStatementNode([ - expressionStatementNode1, - expressionStatementNode2 + expressionStatementNode2, + expressionStatementNode3 ]); ifStatementNode2 = NodeMocks.getIfStatementNode(ifStatementBlockStatementNode2); @@ -123,7 +146,7 @@ describe('NodeUtils', () => { ifStatementNode1 = NodeMocks.getIfStatementNode(ifStatementBlockStatementNode1); functionDeclarationBlockStatementNode = NodeMocks.getBlockStatementNode([ - expressionStatementNode3, + expressionStatementNode1, ifStatementNode1 ]); @@ -136,29 +159,35 @@ describe('NodeUtils', () => { programNode['parentNode'] = programNode; functionDeclarationNode['parentNode'] = programNode; functionDeclarationBlockStatementNode['parentNode'] = functionDeclarationNode; - expressionStatementNode3['parentNode'] = functionDeclarationBlockStatementNode; + expressionStatementNode1['parentNode'] = functionDeclarationBlockStatementNode; ifStatementNode1['parentNode'] = functionDeclarationBlockStatementNode; ifStatementBlockStatementNode1['parentNode'] = ifStatementNode1; ifStatementNode2['parentNode'] = ifStatementBlockStatementNode1; ifStatementBlockStatementNode2['parentNode'] = ifStatementNode2; - expressionStatementNode1['parentNode'] = ifStatementBlockStatementNode2; + expressionStatementNode3['parentNode'] = ifStatementBlockStatementNode2; }); it('should return block-scope node for given node', () => { - assert.deepEqual(NodeUtils.getBlockScopeOfNode(expressionStatementNode3), functionDeclarationBlockStatementNode); - assert.deepEqual(NodeUtils.getBlockScopeOfNode(expressionStatementNode3, 1), programNode); - assert.deepEqual(NodeUtils.getBlockScopeOfNode(functionDeclarationNode), programNode); - assert.deepEqual(NodeUtils.getBlockScopeOfNode(functionDeclarationBlockStatementNode), programNode); - assert.deepEqual(NodeUtils.getBlockScopeOfNode(programNode), programNode); - assert.deepEqual(NodeUtils.getBlockScopeOfNode(expressionStatementNode1), functionDeclarationBlockStatementNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(programNode)[0], programNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(functionDeclarationNode)[0], programNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(functionDeclarationBlockStatementNode)[0], programNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(expressionStatementNode1)[0], functionDeclarationBlockStatementNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(expressionStatementNode1)[1], programNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(ifStatementNode1)[0], functionDeclarationBlockStatementNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(ifStatementNode1)[1], programNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(ifStatementBlockStatementNode1)[0], functionDeclarationBlockStatementNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(ifStatementBlockStatementNode1)[1], programNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(ifStatementBlockStatementNode2)[0], functionDeclarationBlockStatementNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(ifStatementBlockStatementNode2)[1], programNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(expressionStatementNode3)[0], functionDeclarationBlockStatementNode); + assert.deepEqual(NodeUtils.getBlockScopesOfNode(expressionStatementNode3)[1], programNode); }); it('should throw a `ReferenceError` if node has no `parentNode` property', () => { - assert.throws(() => NodeUtils.getBlockScopeOfNode(expressionStatementNode2), ReferenceError); + assert.throws(() => NodeUtils.getBlockScopesOfNode(expressionStatementNode2)[0], ReferenceError); }); }); - describe('getNodeBlockScopeDepth (node: ESTree.Node, depth: number = 0): number', () => { let functionDeclarationBlockStatementNode1: ESTree.BlockStatement, functionDeclarationBlockStatementNode2: ESTree.BlockStatement, diff --git a/test/unit-tests/OptionsNormalizer.spec.ts b/test/unit-tests/options/OptionsNormalizer.spec.ts similarity index 84% rename from test/unit-tests/OptionsNormalizer.spec.ts rename to test/unit-tests/options/OptionsNormalizer.spec.ts index ace4ae39..42db235f 100644 --- a/test/unit-tests/OptionsNormalizer.spec.ts +++ b/test/unit-tests/options/OptionsNormalizer.spec.ts @@ -1,13 +1,13 @@ import { assert } from 'chai'; -import { TInputOptions } from '../../src/types/options/TInputOptions'; +import { TInputOptions } from '../../../src/types/options/TInputOptions'; -import { IOptions } from '../../src/interfaces/options/IOptions'; +import { IOptions } from '../../../src/interfaces/options/IOptions'; -import { DEFAULT_PRESET } from '../../src/preset-options/DefaultPreset'; +import { DEFAULT_PRESET } from '../../../src/options/presets/Default'; -import { Options } from '../../src/options/Options'; -import { OptionsNormalizer } from '../../src/options/OptionsNormalizer'; +import { Options } from '../../../src/options/Options'; +import { OptionsNormalizer } from '../../../src/options/OptionsNormalizer'; /** * @param optionsPreset @@ -24,6 +24,22 @@ describe('OptionsNormalizer', () => { let optionsPreset: TInputOptions, expectedOptionsPreset: TInputOptions; + it('should normalize options preset: controlFlowFlatteningThresholdRule', () => { + optionsPreset = { + ...DEFAULT_PRESET, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 0 + }; + + expectedOptionsPreset = { + ...DEFAULT_PRESET, + controlFlowFlattening: false, + controlFlowFlatteningThreshold: 0 + }; + + assert.deepEqual(getNormalizedOptions(optionsPreset), expectedOptionsPreset); + }); + it('should normalize options preset: domainLockRule', () => { optionsPreset = { ...DEFAULT_PRESET, diff --git a/test/unit-tests/utils/Utils.spec.ts b/test/unit-tests/utils/Utils.spec.ts index 7b673f76..e0304b4d 100644 --- a/test/unit-tests/utils/Utils.spec.ts +++ b/test/unit-tests/utils/Utils.spec.ts @@ -5,14 +5,6 @@ import { Utils } from '../../../src/utils/Utils'; import { JSFuck } from '../../../src/enums/JSFuck'; describe('Utils', () => { - describe('arrayContains (array: any[], searchElement: any): boolean', () => { - it('should return boolean depends on condition if array is contains given value or not', () => { - assert.equal(Utils.arrayContains(['1', '2', '3'], '2'), true); - assert.equal(Utils.arrayContains([1, 2, 3], 2), true); - assert.equal(Utils.arrayContains([1, 2, 3], 4), false); - }); - }); - describe('arrayRotate (array: T[], times: number): T[]', () => { let array: number[]; @@ -54,11 +46,10 @@ describe('Utils', () => { }); }); - describe('isInteger (number: number): boolean', () => { - it('should return true if given number or string is integer', () => { - assert.equal(Utils.isInteger(4), true); - assert.equal(Utils.isInteger('4'), true); - assert.equal(Utils.isInteger('a'), false); + describe('isCeilNumber (number: number): boolean', () => { + it('should return true if given number is a ceil', () => { + assert.equal(Utils.isCeilNumber(4), true); + assert.equal(Utils.isCeilNumber(4.5), false); }); }); @@ -90,6 +81,28 @@ describe('Utils', () => { }); }); + describe('stringRotate (string: string, times: number): string', () => { + let string: string; + + beforeEach(() => { + string = 'abcdefg'; + }); + + it('should rotate string by a given value', () => { + assert.deepEqual(Utils.stringRotate(string, 2), 'fgabcde'); + }); + + + it('should do nothing if value <= 0', () => { + assert.deepEqual(Utils.stringRotate(string, 0), 'abcdefg'); + assert.deepEqual(Utils.stringRotate(string, -1), 'abcdefg'); + }); + + it('should throw exception if string is empty', () => { + assert.throws(() => Utils.stringRotate('', 5), ReferenceError); + }); + }); + describe('stringToJSFuck (string: string): string', () => { let expected: string = `${JSFuck.s} + ${JSFuck.t} + ${JSFuck.r} + ${JSFuck.i} + ${JSFuck.n} + ${JSFuck.g}`; diff --git a/tsconfig-test.json b/tsconfig-test.json index 5546f6f7..917f13d3 100644 --- a/tsconfig-test.json +++ b/tsconfig-test.json @@ -2,6 +2,12 @@ "compilerOptions": { "outDir": "test-tmp", "target": "ES6", + "lib": [ + "es2017", + "DOM" + ], + "noEmitHelpers": true, + "importHelpers": true, "module": "commonjs", "inlineSourceMap": true, "inlineSources": true, diff --git a/tsconfig.json b/tsconfig.json index 39076b3d..e214bc82 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,12 @@ { "compilerOptions": { "target": "ES6", + "lib": [ + "es2017", + "DOM" + ], + "noEmitHelpers": true, + "importHelpers": true, "module": "commonjs", "sourceMap": true, "emitDecoratorMetadata": true, diff --git a/tslint.json b/tslint.json index de7efbf4..819d870f 100644 --- a/tslint.json +++ b/tslint.json @@ -83,6 +83,7 @@ "check-whitespace" ], "one-variable-per-declaration": false, + "prefer-const": true, "quotemark": false, "radix": true, "semicolon": [true, "always"], diff --git a/webpack.config.js b/webpack.config.js index b65c36bb..f6696921 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,7 +2,8 @@ var fs = require("fs"), nodeExternals = require('webpack-node-externals'), - webpack = require('webpack'); + webpack = require('webpack'), + CheckerPlugin = require('awesome-typescript-loader').CheckerPlugin; function getLicenseText () { return "/*\nCopyright (C) 2016 Timofey Kachalov \n\n" + @@ -39,6 +40,7 @@ module.exports = { entryOnly: false } ), + new CheckerPlugin() ], output: { path: './dist',