diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c9b731b..97f20a01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,9 @@ Change Log === v0.14.0 --- +* **New option:** `transformObjectKeys` enables object keys transformation and obfuscation. * **Breaking change:** Now CLI obfuscating directory recursively. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/157 +* Obfuscator now can obfuscate `eval` expressions. * Fixed runtime errors when `deadCodeInjection` is enabled and `identifierNamesGenerator` is set to `mangled` * Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/166 * Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/156 diff --git a/README.md b/README.md index 54f13af4..5b1e94db 100644 --- a/README.md +++ b/README.md @@ -291,6 +291,7 @@ Following options are available for the JS Obfuscator: stringArrayEncoding: false, stringArrayThreshold: 0.75, target: 'browser', + transformObjectKeys: false, unicodeEscapeSequence: false } ``` @@ -327,6 +328,7 @@ Following options are available for the JS Obfuscator: --string-array-encoding [true, false, base64, rc4] --string-array-threshold --target [browser, extension, node] + --transform-object-keys --unicode-escape-sequence ``` @@ -707,6 +709,44 @@ Available values: Currently output code for `browser` and `node` targets is identical. Output code for `extension` target is not using `eval`. +### `transformObjectKeys` +Type: `boolean` Default: `false` + +Enables transformation of object keys. + +Example: +```ts +// input +(function(){ + var object = { + foo: 'test1', + bar: { + baz: 'test2' + } + }; +})(); + +// output +var _0x5a21 = [ + 'foo', + 'test1', + 'bar', + 'baz', + 'test2' +]; +var _0x223f = function (_0x474dc0, _0x10db96) { + _0x474dc0 = _0x474dc0 - 0x0; + var _0x4c8bf7 = _0x5a21[_0x474dc0]; + return _0x4c8bf7; +}; +(function () { + var _0x2e1a8e = {}; + _0x2e1a8e[_0x223f('0x0')] = _0x223f('0x1'); + _0x2e1a8e[_0x223f('0x2')] = {}; + _0x2e1a8e[_0x223f('0x2')][_0x223f('0x3')] = _0x223f('0x4'); +}()); +``` + ### `unicodeEscapeSequence` Type: `boolean` Default: `false` @@ -737,6 +777,7 @@ Performance will 50-100% slower than without obfuscation stringArray: true, stringArrayEncoding: 'rc4', stringArrayThreshold: 1, + transformObjectKeys: true, unicodeEscapeSequence: false } ``` @@ -763,6 +804,7 @@ Performance will 30-35% slower than without obfuscation stringArray: true, stringArrayEncoding: 'base64', stringArrayThreshold: 0.75, + transformObjectKeys: true, unicodeEscapeSequence: false } ``` diff --git a/dist/index.js b/dist/index.js index c629b23d..b4a25e43 100644 --- a/dist/index.js +++ b/dist/index.js @@ -21,9320 +21,5 @@ 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. */ - -require("source-map-support").install(); - - -module.exports = -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 47); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = require("inversify"); - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var ServiceIdentifiers; -(function (ServiceIdentifiers) { - ServiceIdentifiers["Factory__ICalleeDataExtractor"] = "Factory"; - ServiceIdentifiers["Factory__IControlFlowCustomNode"] = "Factory"; - ServiceIdentifiers["Factory__IControlFlowReplacer"] = "Factory"; - ServiceIdentifiers["Factory__ICustomNode"] = "Factory"; - ServiceIdentifiers["Factory__ICustomNodeGroup"] = "Factory"; - ServiceIdentifiers["Factory__IIdentifierNamesGenerator"] = "Factory"; - ServiceIdentifiers["Factory__IIdentifierObfuscatingReplacer"] = "Factory"; - ServiceIdentifiers["Factory__INodeGuard"] = "Factory"; - ServiceIdentifiers["Factory__INodeTransformer"] = "Factory"; - ServiceIdentifiers["Factory__IObfuscationResult"] = "Factory"; - ServiceIdentifiers["Factory__IObfuscatingReplacer"] = "Factory"; - ServiceIdentifiers["Factory__TControlFlowStorage"] = "Factory"; - ServiceIdentifiers["IArrayUtils"] = "IArrayUtils"; - ServiceIdentifiers["ICalleeDataExtractor"] = "ICalleeDataExtractor"; - ServiceIdentifiers["ICryptUtils"] = "ICryptUtils"; - ServiceIdentifiers["ICustomNode"] = "ICustomNode"; - ServiceIdentifiers["ICustomNodeGroup"] = "ICustomNodeGroup"; - ServiceIdentifiers["IControlFlowReplacer"] = "IControlFlowReplacer"; - ServiceIdentifiers["IEscapeSequenceEncoder"] = "IEscapeSequenceEncoder"; - ServiceIdentifiers["IIdentifierNamesGenerator"] = "IIdentifierNamesGenerator"; - ServiceIdentifiers["IIdentifierObfuscatingReplacer"] = "IIdentifierObfuscatingReplacer"; - ServiceIdentifiers["IJavaScriptObfuscator"] = "IJavaScriptObfuscator"; - ServiceIdentifiers["ILogger"] = "ILogger"; - ServiceIdentifiers["INodeGuard"] = "INodeGuard"; - ServiceIdentifiers["INodeTransformer"] = "INodeTransformer"; - ServiceIdentifiers["IObfuscationEventEmitter"] = "IObfuscationEventEmitter"; - ServiceIdentifiers["IObfuscationResult"] = "IObfuscationResult"; - ServiceIdentifiers["IOptions"] = "IOptions"; - ServiceIdentifiers["IObfuscatingReplacer"] = "IObfuscatingReplacer"; - ServiceIdentifiers["IRandomGenerator"] = "IRandomGenerator"; - ServiceIdentifiers["ISourceCode"] = "ISourceCode"; - ServiceIdentifiers["ISourceMapCorrector"] = "ISourceMapCorrector"; - ServiceIdentifiers["IStackTraceAnalyzer"] = "IStackTraceAnalyzer"; - ServiceIdentifiers["ITransformersRunner"] = "ITransformersRunner"; - ServiceIdentifiers["Newable__ICustomNode"] = "Newable"; - ServiceIdentifiers["Newable__TControlFlowStorage"] = "Newable"; - ServiceIdentifiers["TCustomNodeGroupStorage"] = "TCustomNodeGroupStorage"; - ServiceIdentifiers["TStringArrayStorage"] = "TStringArrayStorage"; -})(ServiceIdentifiers = exports.ServiceIdentifiers || (exports.ServiceIdentifiers = {})); - -/***/ }), -/* 2 */ -/***/ (function(module, exports) { - -module.exports = require("tslib"); - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function initializable() { - var initializeMethodKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'initialize'; - - var decoratorName = Object.keys(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 = Object.getOwnPropertyDescriptor(target, metadataPropertyKey) || descriptor; - var methodDescriptor = Object.getOwnPropertyDescriptor(target, initializeMethodKey) || descriptor; - var originalMethod = methodDescriptor.value; - Object.defineProperty(target, propertyKey, Object.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; - } })); - Object.defineProperty(target, initializeMethodKey, Object.assign({}, methodDescriptor, { value: function value() { - originalMethod.apply(this, arguments); - if (this[propertyKey]) {} - } })); - return propertyDescriptor; - }; -} -exports.initializable = initializable; - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var NodeType_1 = __webpack_require__(10); - -var NodeGuards = function () { - function NodeGuards() { - _classCallCheck(this, NodeGuards); - } - - _createClass(NodeGuards, null, [{ - key: "isArrowFunctionExpressionNode", - value: function isArrowFunctionExpressionNode(node) { - return node.type === NodeType_1.NodeType.ArrowFunctionExpression; - } - }, { - key: "isAssignmentPatternNode", - value: function isAssignmentPatternNode(node) { - return node.type === NodeType_1.NodeType.AssignmentPattern; - } - }, { - key: "isAwaitExpressionNode", - value: function isAwaitExpressionNode(node) { - return node.type === NodeType_1.NodeType.AwaitExpression; - } - }, { - 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: "isCatchClauseNode", - value: function isCatchClauseNode(node) { - return node.type === NodeType_1.NodeType.CatchClause; - } - }, { - key: "isClassDeclarationNode", - value: function isClassDeclarationNode(node) { - return node.type === NodeType_1.NodeType.ClassDeclaration; - } - }, { - 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 = NodeGuards.isLabeledStatementNode(parentNode) && parentNode.label === node; - var parentNodeIsContinueStatementNode = NodeGuards.isContinueStatementNode(parentNode) && parentNode.label === node; - var parentNodeIsBreakStatementNode = NodeGuards.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: "isMethodDefinitionNode", - value: function isMethodDefinitionNode(node) { - return node.type === NodeType_1.NodeType.MethodDefinition; - } - }, { - key: "isNode", - value: function isNode(object) { - return object && !object.type !== undefined; - } - }, { - key: "isNodeHasBlockStatement", - value: function isNodeHasBlockStatement(node) { - return Array.isArray(node.body); - } - }, { - key: "isNodeWithComments", - value: function isNodeWithComments(node) { - return Boolean(node.leadingComments) || Boolean(node.trailingComments); - } - }, { - key: "isObjectPatternNode", - value: function isObjectPatternNode(node) { - return node.type === NodeType_1.NodeType.ObjectPattern; - } - }, { - 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 (!NodeGuards.isIdentifierNode(node)) { - return false; - } - var parentNodeIsPropertyNode = NodeGuards.isPropertyNode(parentNode) && !parentNode.computed && parentNode.key === node; - var parentNodeIsMemberExpressionNode = NodeGuards.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node; - var parentNodeIsMethodDefinitionNode = NodeGuards.isMethodDefinitionNode(parentNode) && !parentNode.computed; - var isLabelIdentifierNode = NodeGuards.isLabelIdentifierNode(node, parentNode); - return !parentNodeIsPropertyNode && !parentNodeIsMemberExpressionNode && !parentNodeIsMethodDefinitionNode && !isLabelIdentifierNode; - } - }, { - key: "isReturnStatementNode", - value: function isReturnStatementNode(node) { - return node.type === NodeType_1.NodeType.ReturnStatement; - } - }, { - key: "isSuperNode", - value: function isSuperNode(node) { - return node.type === NodeType_1.NodeType.Super; - } - }, { - key: "isTemplateLiteralNode", - value: function isTemplateLiteralNode(node) { - return node.type === NodeType_1.NodeType.TemplateLiteral; - } - }, { - key: "isUnaryExpressionNode", - value: function isUnaryExpressionNode(node) { - return node.type === NodeType_1.NodeType.UnaryExpression; - } - }, { - key: "isUseStrictOperator", - value: function isUseStrictOperator(node) { - return node.type === NodeType_1.NodeType.ExpressionStatement && node.directive === 'use strict'; - } - }, { - 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: "isWhileStatementNode", - value: function isWhileStatementNode(node) { - return node.type === NodeType_1.NodeType.WhileStatement; - } - }]); - - return NodeGuards; -}(); - -exports.NodeGuards = NodeGuards; - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var escodegen = __webpack_require__(29); -var esprima = __webpack_require__(36); -var estraverse = __webpack_require__(8); -var NodeType_1 = __webpack_require__(10); -var NodeGuards_1 = __webpack_require__(4); - -var NodeUtils = function () { - function NodeUtils() { - _classCallCheck(this, NodeUtils); - } - - _createClass(NodeUtils, null, [{ - key: "addXVerbatimPropertyToLiterals", - value: function addXVerbatimPropertyToLiterals(astTree) { - estraverse.replace(astTree, { - leave: function leave(node) { - if (NodeGuards_1.NodeGuards.isLiteralNode(node)) { - node['x-verbatim-property'] = { - content: node.raw, - precedence: escodegen.Precedence.Primary - }; - } - } - }); - return astTree; - } - }, { - key: "clone", - value: function clone(astTree) { - var cloneRecursive = function cloneRecursive(node) { - if (node === null) { - return node; - } - var copy = {}; - Object.keys(node).forEach(function (property) { - if (property === 'parentNode') { - return; - } - var value = node[property]; - var clonedValue = void 0; - if (value === null || value instanceof RegExp) { - clonedValue = value; - } else if (Array.isArray(value)) { - clonedValue = value.map(cloneRecursive); - } else if ((typeof value === "undefined" ? "undefined" : _typeof(value)) === 'object') { - clonedValue = cloneRecursive(value); - } else { - clonedValue = value; - } - copy[property] = clonedValue; - }); - return copy; - }; - return NodeUtils.parentize(cloneRecursive(astTree)); - } - }, { - key: "convertCodeToStructure", - value: function convertCodeToStructure(code) { - var structure = esprima.parseScript(code); - structure = NodeUtils.addXVerbatimPropertyToLiterals(structure); - structure = NodeUtils.parentize(structure); - return structure.body; - } - }, { - key: "convertStructureToCode", - value: function convertStructureToCode(structure) { - return structure.reduce(function (code, node) { - return code + escodegen.generate(node, { - sourceMapWithCode: true - }).code; - }, ''); - } - }, { - key: "getBlockStatementNodeByIndex", - value: function getBlockStatementNodeByIndex(node) { - var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - if (!NodeGuards_1.NodeGuards.isNodeHasBlockStatement(node)) { - throw new TypeError('The specified node have no a block-statement'); - } - if (node.body[index] === undefined) { - throw new ReferenceError("Wrong index `" + index + "`. Block-statement body length is `" + node.body.length + "`"); - } - return node.body[index]; - } - }, { - 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 (NodeGuards_1.NodeGuards.isBlockStatementNode(parentNode)) { - if (!parentNode.parentNode) { - throw new ReferenceError('`parentNode` property of `parentNode` of given node is `undefined`'); - } - if (NodeUtils.nodesWithBlockScope.indexOf(parentNode.parentNode.type) !== -1) { - blockScopes.push(parentNode); - } - } - if (node !== parentNode) { - return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes); - } - if (NodeGuards_1.NodeGuards.isNodeHasBlockStatement(parentNode)) { - 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 (NodeGuards_1.NodeGuards.isProgramNode(parentNode)) { - return depth; - } - if (NodeGuards_1.NodeGuards.isBlockStatementNode(node) && NodeUtils.nodesWithBlockScope.indexOf(parentNode.type) !== -1) { - return NodeUtils.getNodeBlockScopeDepth(parentNode, ++depth); - } - return NodeUtils.getNodeBlockScopeDepth(parentNode, depth); - } - }, { - key: "getUnaryExpressionArgumentNode", - value: function getUnaryExpressionArgumentNode(unaryExpressionNode) { - if (NodeGuards_1.NodeGuards.isUnaryExpressionNode(unaryExpressionNode.argument)) { - return NodeUtils.getUnaryExpressionArgumentNode(unaryExpressionNode.argument); - } - return unaryExpressionNode.argument; - } - }, { - key: "parentize", - value: function parentize(astTree) { - estraverse.traverse(astTree, { - enter: NodeUtils.parentizeNode - }); - return astTree; - } - }, { - key: "parentizeNode", - value: function parentizeNode(node, parentNode) { - node.parentNode = parentNode || node; - node.obfuscatedNode = false; - return node; - } - }]); - - 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; - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var GlobalVariableTemplate1_1 = __webpack_require__(73); -var GlobalVariableTemplate2_1 = __webpack_require__(74); -var NodeUtils_1 = __webpack_require__(5); -var AbstractCustomNode = AbstractCustomNode_1 = function () { - function AbstractCustomNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, AbstractCustomNode); - - this.identifierNamesGenerator = identifierNamesGeneratorFactory(options); - this.randomGenerator = randomGenerator; - this.options = options; - } - - _createClass(AbstractCustomNode, [{ - key: "getCode", - value: function getCode() { - if (!this.cachedCode) { - this.cachedCode = NodeUtils_1.NodeUtils.convertStructureToCode(this.getNode()); - } - return this.cachedCode; - } - }, { - key: "getNode", - value: function getNode() { - if (!this.cachedNode) { - this.cachedNode = this.getNodeStructure(); - } - return this.cachedNode; - } - }, { - key: "getGlobalVariableTemplate", - value: function getGlobalVariableTemplate() { - return this.randomGenerator.getRandomGenerator().pickone(AbstractCustomNode_1.globalVariableTemplateFunctions); - } - }]); - - return AbstractCustomNode; -}(); -AbstractCustomNode.globalVariableTemplateFunctions = [GlobalVariableTemplate1_1.GlobalVariableTemplate1(), GlobalVariableTemplate2_1.GlobalVariableTemplate2()]; -AbstractCustomNode = AbstractCustomNode_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], AbstractCustomNode); -exports.AbstractCustomNode = AbstractCustomNode; -var AbstractCustomNode_1; - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var AbstractNodeTransformer = function () { - function AbstractNodeTransformer(randomGenerator, options) { - _classCallCheck(this, AbstractNodeTransformer); - - this.randomGenerator = randomGenerator; - this.options = options; - } - - _createClass(AbstractNodeTransformer, [{ - key: "initialize", - value: function initialize() { - this.nodeIdentifier = this.randomGenerator.getRandomInteger(0, 10000); - } - }]); - - return AbstractNodeTransformer; -}(); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Number)], AbstractNodeTransformer.prototype, "nodeIdentifier", void 0); -tslib_1.__decorate([inversify_1.postConstruct(), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", []), tslib_1.__metadata("design:returntype", void 0)], AbstractNodeTransformer.prototype, "initialize", null); -AbstractNodeTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], AbstractNodeTransformer); -exports.AbstractNodeTransformer = AbstractNodeTransformer; - -/***/ }), -/* 8 */ -/***/ (function(module, exports) { - -module.exports = require("estraverse"); - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var escodegen = __webpack_require__(29); -var NodeType_1 = __webpack_require__(10); - -var Nodes = function () { - function Nodes() { - _classCallCheck(this, Nodes); - } - - _createClass(Nodes, null, [{ - key: "getProgramNode", - value: function getProgramNode() { - var body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - - return { - type: NodeType_1.NodeType.Program, - body: body, - sourceType: 'script', - obfuscatedNode: false - }; - } - }, { - key: "getArrayExpressionNode", - value: function getArrayExpressionNode() { - var elements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - - return { - type: NodeType_1.NodeType.ArrayExpression, - elements: elements - }; - } - }, { - key: "getAssignmentExpressionNode", - value: function getAssignmentExpressionNode(operator, left, right) { - return { - type: NodeType_1.NodeType.AssignmentExpression, - operator: operator, - left: left, - right: right, - obfuscatedNode: false - }; - } - }, { - key: "getBinaryExpressionNode", - value: function getBinaryExpressionNode(operator, left, right) { - return { - type: NodeType_1.NodeType.BinaryExpression, - operator: operator, - left: left, - right: right, - obfuscatedNode: false - }; - } - }, { - key: "getBlockStatementNode", - value: function getBlockStatementNode() { - var body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - - return { - type: NodeType_1.NodeType.BlockStatement, - body: body, - obfuscatedNode: false - }; - } - }, { - key: "getBreakStatement", - value: function getBreakStatement(label) { - var breakStatementNode = { - type: NodeType_1.NodeType.BreakStatement, - obfuscatedNode: false - }; - if (label) { - breakStatementNode.label = label; - } - return breakStatementNode; - } - }, { - key: "getCatchClauseNode", - value: function getCatchClauseNode() { - var body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - - return { - type: NodeType_1.NodeType.CatchClause, - param: Nodes.getIdentifierNode('err'), - body: Nodes.getBlockStatementNode(body), - obfuscatedNode: false - }; - } - }, { - key: "getCallExpressionNode", - value: function getCallExpressionNode(callee) { - var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - return { - type: NodeType_1.NodeType.CallExpression, - callee: callee, - arguments: args, - obfuscatedNode: false - }; - } - }, { - key: "getContinueStatement", - value: function getContinueStatement(label) { - var continueStatementNode = { - type: NodeType_1.NodeType.ContinueStatement, - obfuscatedNode: false - }; - if (label) { - continueStatementNode.label = label; - } - return continueStatementNode; - } - }, { - key: "getExpressionStatementNode", - value: function getExpressionStatementNode(expression) { - return { - type: NodeType_1.NodeType.ExpressionStatement, - expression: expression, - obfuscatedNode: false - }; - } - }, { - key: "getFunctionDeclarationNode", - value: function getFunctionDeclarationNode(functionName, params, body) { - return { - type: NodeType_1.NodeType.FunctionDeclaration, - id: Nodes.getIdentifierNode(functionName), - params: params, - body: body, - generator: false, - obfuscatedNode: false - }; - } - }, { - key: "getFunctionExpressionNode", - value: function getFunctionExpressionNode(params, body) { - return { - type: NodeType_1.NodeType.FunctionExpression, - params: params, - body: body, - generator: false, - obfuscatedNode: false - }; - } - }, { - key: "getIfStatementNode", - value: function getIfStatementNode(test, consequent, alternate) { - return Object.assign({ type: NodeType_1.NodeType.IfStatement, test: test, - consequent: consequent }, alternate && { alternate: alternate }, { obfuscatedNode: false }); - } - }, { - key: "getIdentifierNode", - value: function getIdentifierNode(name) { - return { - type: NodeType_1.NodeType.Identifier, - name: name, - obfuscatedNode: false - }; - } - }, { - key: "getLabeledStatement", - value: function getLabeledStatement(label, body) { - return { - type: NodeType_1.NodeType.LabeledStatement, - label: label, - body: body, - obfuscatedNode: false - }; - } - }, { - key: "getLiteralNode", - value: function getLiteralNode(value, raw) { - raw = raw !== undefined ? raw : "'" + value + "'"; - return { - type: NodeType_1.NodeType.Literal, - value: value, - raw: raw, - 'x-verbatim-property': { - content: raw, - precedence: escodegen.Precedence.Primary - }, - obfuscatedNode: false - }; - } - }, { - key: "getLogicalExpressionNode", - value: function getLogicalExpressionNode(operator, left, right) { - return { - type: NodeType_1.NodeType.LogicalExpression, - operator: operator, - left: left, - right: right, - obfuscatedNode: false - }; - } - }, { - key: "getMemberExpressionNode", - value: function getMemberExpressionNode(object, property) { - var computed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - return { - type: NodeType_1.NodeType.MemberExpression, - computed: computed, - object: object, - property: property, - obfuscatedNode: false - }; - } - }, { - key: "getObjectExpressionNode", - value: function getObjectExpressionNode(properties) { - return { - type: NodeType_1.NodeType.ObjectExpression, - properties: properties, - obfuscatedNode: false - }; - } - }, { - key: "getPropertyNode", - value: function getPropertyNode(key, value) { - var computed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - return { - type: NodeType_1.NodeType.Property, - key: key, - value: value, - kind: 'init', - method: false, - shorthand: false, - computed: computed, - obfuscatedNode: false - }; - } - }, { - key: "getUnaryExpressionNode", - value: function getUnaryExpressionNode(operator, argument) { - var prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - - return { - type: NodeType_1.NodeType.UnaryExpression, - operator: operator, - argument: argument, - prefix: prefix, - obfuscatedNode: false - }; - } - }, { - key: "getReturnStatementNode", - value: function getReturnStatementNode(argument) { - return { - type: NodeType_1.NodeType.ReturnStatement, - argument: argument, - obfuscatedNode: false - }; - } - }, { - key: "getSwitchStatementNode", - value: function getSwitchStatementNode(discriminant, cases) { - return { - type: NodeType_1.NodeType.SwitchStatement, - discriminant: discriminant, - cases: cases, - obfuscatedNode: false - }; - } - }, { - key: "getSwitchCaseNode", - value: function getSwitchCaseNode(test, consequent) { - return { - type: NodeType_1.NodeType.SwitchCase, - test: test, - consequent: consequent, - obfuscatedNode: false - }; - } - }, { - key: "getUpdateExpressionNode", - value: function getUpdateExpressionNode(operator, argumentExpr) { - return { - type: NodeType_1.NodeType.UpdateExpression, - operator: operator, - argument: argumentExpr, - prefix: false, - obfuscatedNode: false - }; - } - }, { - key: "getVariableDeclarationNode", - value: function getVariableDeclarationNode() { - var declarations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'var'; - - return { - type: NodeType_1.NodeType.VariableDeclaration, - declarations: declarations, - kind: kind, - obfuscatedNode: false - }; - } - }, { - key: "getVariableDeclaratorNode", - value: function getVariableDeclaratorNode(id, init) { - return { - type: NodeType_1.NodeType.VariableDeclarator, - id: id, - init: init, - obfuscatedNode: false - }; - } - }, { - key: "getWhileStatementNode", - value: function getWhileStatementNode(test, body) { - return { - type: NodeType_1.NodeType.WhileStatement, - test: test, - body: body, - obfuscatedNode: false - }; - } - }]); - - return Nodes; -}(); - -exports.Nodes = Nodes; - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var NodeType; -(function (NodeType) { - NodeType["ArrayExpression"] = "ArrayExpression"; - NodeType["ArrowFunctionExpression"] = "ArrowFunctionExpression"; - NodeType["AssignmentExpression"] = "AssignmentExpression"; - NodeType["AssignmentPattern"] = "AssignmentPattern"; - NodeType["AwaitExpression"] = "AwaitExpression"; - NodeType["BinaryExpression"] = "BinaryExpression"; - NodeType["BlockStatement"] = "BlockStatement"; - NodeType["BreakStatement"] = "BreakStatement"; - NodeType["CallExpression"] = "CallExpression"; - NodeType["CatchClause"] = "CatchClause"; - NodeType["ClassDeclaration"] = "ClassDeclaration"; - NodeType["ContinueStatement"] = "ContinueStatement"; - NodeType["ExpressionStatement"] = "ExpressionStatement"; - NodeType["FunctionDeclaration"] = "FunctionDeclaration"; - NodeType["FunctionExpression"] = "FunctionExpression"; - NodeType["Identifier"] = "Identifier"; - NodeType["IfStatement"] = "IfStatement"; - NodeType["LabeledStatement"] = "LabeledStatement"; - NodeType["Literal"] = "Literal"; - NodeType["LogicalExpression"] = "LogicalExpression"; - NodeType["MemberExpression"] = "MemberExpression"; - NodeType["MethodDefinition"] = "MethodDefinition"; - NodeType["ObjectExpression"] = "ObjectExpression"; - NodeType["ObjectPattern"] = "ObjectPattern"; - NodeType["Program"] = "Program"; - NodeType["Property"] = "Property"; - NodeType["ReturnStatement"] = "ReturnStatement"; - NodeType["Super"] = "Super"; - NodeType["SwitchCase"] = "SwitchCase"; - NodeType["SwitchStatement"] = "SwitchStatement"; - NodeType["TemplateLiteral"] = "TemplateLiteral"; - NodeType["TryStatement"] = "TryStatement"; - NodeType["UnaryExpression"] = "UnaryExpression"; - NodeType["UpdateExpression"] = "UpdateExpression"; - NodeType["VariableDeclaration"] = "VariableDeclaration"; - NodeType["VariableDeclarator"] = "VariableDeclarator"; - NodeType["WhileStatement"] = "WhileStatement"; -})(NodeType = exports.NodeType || (exports.NodeType = {})); - -/***/ }), -/* 11 */ -/***/ (function(module, exports) { - -module.exports = require("string-template"); - -/***/ }), -/* 12 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var ControlFlowCustomNode; -(function (ControlFlowCustomNode) { - ControlFlowCustomNode[ControlFlowCustomNode["BinaryExpressionFunctionNode"] = 0] = "BinaryExpressionFunctionNode"; - ControlFlowCustomNode[ControlFlowCustomNode["BlockStatementControlFlowFlatteningNode"] = 1] = "BlockStatementControlFlowFlatteningNode"; - ControlFlowCustomNode[ControlFlowCustomNode["CallExpressionControlFlowStorageCallNode"] = 2] = "CallExpressionControlFlowStorageCallNode"; - ControlFlowCustomNode[ControlFlowCustomNode["CallExpressionFunctionNode"] = 3] = "CallExpressionFunctionNode"; - ControlFlowCustomNode[ControlFlowCustomNode["ControlFlowStorageNode"] = 4] = "ControlFlowStorageNode"; - ControlFlowCustomNode[ControlFlowCustomNode["ExpressionWithOperatorControlFlowStorageCallNode"] = 5] = "ExpressionWithOperatorControlFlowStorageCallNode"; - ControlFlowCustomNode[ControlFlowCustomNode["LogicalExpressionFunctionNode"] = 6] = "LogicalExpressionFunctionNode"; - ControlFlowCustomNode[ControlFlowCustomNode["StringLiteralControlFlowStorageCallNode"] = 7] = "StringLiteralControlFlowStorageCallNode"; - ControlFlowCustomNode[ControlFlowCustomNode["StringLiteralNode"] = 8] = "StringLiteralNode"; -})(ControlFlowCustomNode = exports.ControlFlowCustomNode || (exports.ControlFlowCustomNode = {})); - -/***/ }), -/* 13 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var ObfuscationTarget; -(function (ObfuscationTarget) { - ObfuscationTarget["Browser"] = "browser"; - ObfuscationTarget["Extension"] = "extension"; - ObfuscationTarget["Node"] = "node"; -})(ObfuscationTarget = exports.ObfuscationTarget || (exports.ObfuscationTarget = {})); - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AnalyzersModule_1 = __webpack_require__(49); -var ControlFlowTransformersModule_1 = __webpack_require__(54); -var ConvertingTransformersModule_1 = __webpack_require__(62); -var CustomNodesModule_1 = __webpack_require__(66); -var GeneratorsModule_1 = __webpack_require__(112); -var NodeTransformersModule_1 = __webpack_require__(115); -var ObfuscatingTransformersModule_1 = __webpack_require__(116); -var PreparingTransformersModule_1 = __webpack_require__(130); -var StoragesModule_1 = __webpack_require__(136); -var UtilsModule_1 = __webpack_require__(141); -var JavaScriptObfuscator_1 = __webpack_require__(147); -var Logger_1 = __webpack_require__(149); -var ObfuscationEventEmitter_1 = __webpack_require__(151); -var ObfuscationResult_1 = __webpack_require__(153); -var Options_1 = __webpack_require__(154); -var SourceCode_1 = __webpack_require__(168); -var SourceMapCorrector_1 = __webpack_require__(169); -var TransformersRunner_1 = __webpack_require__(170); - -var InversifyContainerFacade = function () { - function InversifyContainerFacade() { - _classCallCheck(this, InversifyContainerFacade); - - this.container = new inversify_1.Container(); - } - - _createClass(InversifyContainerFacade, [{ - key: "get", - value: function get(serviceIdentifier) { - return this.container.get(serviceIdentifier); - } - }, { - key: "getNamed", - value: function getNamed(serviceIdentifier, named) { - return this.container.getNamed(serviceIdentifier, named); - } - }, { - key: "load", - value: function load(sourceCode, options) { - this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.ISourceCode).toDynamicValue(function () { - return new SourceCode_1.SourceCode(sourceCode); - }).inSingletonScope(); - this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.IOptions).toDynamicValue(function () { - return new Options_1.Options(options); - }).inSingletonScope(); - this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.ILogger).to(Logger_1.Logger).inSingletonScope(); - this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.IJavaScriptObfuscator).to(JavaScriptObfuscator_1.JavaScriptObfuscator).inSingletonScope(); - this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.ITransformersRunner).to(TransformersRunner_1.TransformersRunner).inSingletonScope(); - this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationResult).to(ObfuscationResult_1.ObfuscationResult).inSingletonScope(); - this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IObfuscationResult).toFactory(function (context) { - return function (obfuscatedAst, obfuscatedCode, sourceMap) { - var obfuscationResult = context.container.get(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationResult); - obfuscationResult.initialize(obfuscatedAst, obfuscatedCode, sourceMap); - return obfuscationResult; - }; - }); - this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.ISourceMapCorrector).to(SourceMapCorrector_1.SourceMapCorrector).inSingletonScope(); - this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter).to(ObfuscationEventEmitter_1.ObfuscationEventEmitter).inSingletonScope(); - this.container.load(AnalyzersModule_1.analyzersModule); - this.container.load(ControlFlowTransformersModule_1.controlFlowTransformersModule); - this.container.load(ConvertingTransformersModule_1.convertingTransformersModule); - this.container.load(CustomNodesModule_1.customNodesModule); - this.container.load(GeneratorsModule_1.generatorsModule); - this.container.load(NodeTransformersModule_1.nodeTransformersModule); - this.container.load(ObfuscatingTransformersModule_1.obfuscatingTransformersModule); - this.container.load(PreparingTransformersModule_1.preparingTransformersModule); - this.container.load(StoragesModule_1.storagesModule); - this.container.load(UtilsModule_1.utilsModule); - } - }, { - key: "unload", - value: function unload() { - this.container.unbindAll(); - } - }], [{ - key: "getFactory", - value: function getFactory(serviceIdentifier) { - return function (context) { - return function (bindingName) { - return context.container.getNamed(serviceIdentifier, bindingName); - }; - }; - } - }, { - key: "getCacheFactory", - value: function getCacheFactory(serviceIdentifier) { - return function (context) { - var cache = new Map(); - return function (bindingName) { - if (cache.has(bindingName)) { - return cache.get(bindingName); - } - var object = context.container.getNamed(serviceIdentifier, bindingName); - cache.set(bindingName, object); - return object; - }; - }; - } - }, { - key: "getConstructorFactory", - value: function getConstructorFactory(serviceIdentifier) { - for (var _len = arguments.length, dependencies = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - dependencies[_key - 1] = arguments[_key]; - } - - return function (context) { - var cache = new Map(); - var cachedDependencies = []; - return function (bindingName) { - dependencies.forEach(function (dependency, index) { - if (!cachedDependencies[index]) { - cachedDependencies[index] = context.container.get(dependency); - } - }); - if (cache.has(bindingName)) { - return new (Function.prototype.bind.apply(cache.get(bindingName), [null].concat(cachedDependencies)))(); - } - var constructor = context.container.getNamed(serviceIdentifier, bindingName); - cache.set(bindingName, constructor); - return new (Function.prototype.bind.apply(constructor, [null].concat(cachedDependencies)))(); - }; - }; - } - }]); - - return InversifyContainerFacade; -}(); - -exports.InversifyContainerFacade = InversifyContainerFacade; - -/***/ }), -/* 15 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var ObfuscationEvent; -(function (ObfuscationEvent) { - ObfuscationEvent["AfterObfuscation"] = "afterObfuscation"; - ObfuscationEvent["BeforeObfuscation"] = "beforeObfuscation"; -})(ObfuscationEvent = exports.ObfuscationEvent || (exports.ObfuscationEvent = {})); - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var IdentifierObfuscatingReplacer; -(function (IdentifierObfuscatingReplacer) { - IdentifierObfuscatingReplacer[IdentifierObfuscatingReplacer["BaseIdentifierObfuscatingReplacer"] = 0] = "BaseIdentifierObfuscatingReplacer"; -})(IdentifierObfuscatingReplacer = exports.IdentifierObfuscatingReplacer || (exports.IdentifierObfuscatingReplacer = {})); - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -__webpack_require__(48); -var ServiceIdentifiers_1 = __webpack_require__(1); -var InversifyContainerFacade_1 = __webpack_require__(14); -var JavaScriptObfuscatorCLI_1 = __webpack_require__(33); - -var JavaScriptObfuscatorFacade = function () { - function JavaScriptObfuscatorFacade() { - _classCallCheck(this, JavaScriptObfuscatorFacade); - } - - _createClass(JavaScriptObfuscatorFacade, null, [{ - key: "obfuscate", - value: function obfuscate(sourceCode) { - var inputOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var inversifyContainerFacade = new InversifyContainerFacade_1.InversifyContainerFacade(); - inversifyContainerFacade.load(sourceCode, inputOptions); - var javaScriptObfuscator = inversifyContainerFacade.get(ServiceIdentifiers_1.ServiceIdentifiers.IJavaScriptObfuscator); - var obfuscationResult = javaScriptObfuscator.obfuscate(sourceCode); - inversifyContainerFacade.unload(); - return obfuscationResult; - } - }, { - key: "runCLI", - value: function runCLI(argv) { - var javaScriptObfuscatorCLI = new JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI(argv); - javaScriptObfuscatorCLI.initialize(); - javaScriptObfuscatorCLI.run(); - } - }]); - - return JavaScriptObfuscatorFacade; -}(); - -exports.JavaScriptObfuscator = JavaScriptObfuscatorFacade; - -/***/ }), -/* 18 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var NodeTransformer; -(function (NodeTransformer) { - NodeTransformer[NodeTransformer["BlockStatementControlFlowTransformer"] = 0] = "BlockStatementControlFlowTransformer"; - NodeTransformer[NodeTransformer["CallExpressionTransformer"] = 1] = "CallExpressionTransformer"; - NodeTransformer[NodeTransformer["ClassDeclarationTransformer"] = 2] = "ClassDeclarationTransformer"; - NodeTransformer[NodeTransformer["CommentsTransformer"] = 3] = "CommentsTransformer"; - NodeTransformer[NodeTransformer["DeadCodeInjectionTransformer"] = 4] = "DeadCodeInjectionTransformer"; - NodeTransformer[NodeTransformer["FunctionControlFlowTransformer"] = 5] = "FunctionControlFlowTransformer"; - NodeTransformer[NodeTransformer["CatchClauseTransformer"] = 6] = "CatchClauseTransformer"; - NodeTransformer[NodeTransformer["FunctionDeclarationTransformer"] = 7] = "FunctionDeclarationTransformer"; - NodeTransformer[NodeTransformer["FunctionTransformer"] = 8] = "FunctionTransformer"; - NodeTransformer[NodeTransformer["LabeledStatementTransformer"] = 9] = "LabeledStatementTransformer"; - NodeTransformer[NodeTransformer["LiteralTransformer"] = 10] = "LiteralTransformer"; - NodeTransformer[NodeTransformer["MemberExpressionTransformer"] = 11] = "MemberExpressionTransformer"; - NodeTransformer[NodeTransformer["MethodDefinitionTransformer"] = 12] = "MethodDefinitionTransformer"; - NodeTransformer[NodeTransformer["ObfuscatingGuardsTransformer"] = 13] = "ObfuscatingGuardsTransformer"; - NodeTransformer[NodeTransformer["ObjectExpressionTransformer"] = 14] = "ObjectExpressionTransformer"; - NodeTransformer[NodeTransformer["ParentificationTransformer"] = 15] = "ParentificationTransformer"; - NodeTransformer[NodeTransformer["TemplateLiteralTransformer"] = 16] = "TemplateLiteralTransformer"; - NodeTransformer[NodeTransformer["VariableDeclarationTransformer"] = 17] = "VariableDeclarationTransformer"; -})(NodeTransformer = exports.NodeTransformer || (exports.NodeTransformer = {})); - -/***/ }), -/* 19 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); - -var NodeAppender = function () { - function NodeAppender() { - _classCallCheck(this, NodeAppender); - } - - _createClass(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)); - } - }, { - key: "appendNodeToOptimalBlockScope", - value: function appendNodeToOptimalBlockScope(blockScopeStackTraceData, blockScopeNode, nodeBodyStatements) { - var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - - var targetBlockScope = void 0; - if (!blockScopeStackTraceData.length) { - targetBlockScope = blockScopeNode; - } else { - targetBlockScope = NodeAppender.getOptimalBlockScope(blockScopeStackTraceData, index); - } - NodeAppender.prependNode(targetBlockScope, nodeBodyStatements); - } - }, { - 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."); - } - if (deep > 1 && firstCall.stackTrace.length) { - return NodeAppender.getOptimalBlockScope(firstCall.stackTrace, 0, --deep); - } else { - return firstCall.callee; - } - } - }, { - 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))); - } - }, { - 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)); - } - }, { - key: "parentizeBodyStatementsBeforeAppend", - value: function parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements) { - nodeBodyStatements.forEach(function (statement) { - statement.parentNode = blockScopeNode; - }); - return nodeBodyStatements; - } - }, { - key: "validateBodyStatements", - value: function validateBodyStatements(nodeBodyStatements) { - return nodeBodyStatements.every(function (statementNode) { - return !!statementNode && statementNode.hasOwnProperty('type'); - }); - } - }]); - - return NodeAppender; -}(); - -exports.NodeAppender = NodeAppender; - -/***/ }), -/* 20 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var CustomNode; -(function (CustomNode) { - CustomNode[CustomNode["ConsoleOutputDisableExpressionNode"] = 0] = "ConsoleOutputDisableExpressionNode"; - CustomNode[CustomNode["DebugProtectionFunctionCallNode"] = 1] = "DebugProtectionFunctionCallNode"; - CustomNode[CustomNode["DebugProtectionFunctionIntervalNode"] = 2] = "DebugProtectionFunctionIntervalNode"; - CustomNode[CustomNode["DebugProtectionFunctionNode"] = 3] = "DebugProtectionFunctionNode"; - CustomNode[CustomNode["DomainLockNode"] = 4] = "DomainLockNode"; - CustomNode[CustomNode["NodeCallsControllerFunctionNode"] = 5] = "NodeCallsControllerFunctionNode"; - CustomNode[CustomNode["SelfDefendingUnicodeNode"] = 6] = "SelfDefendingUnicodeNode"; - CustomNode[CustomNode["StringArrayCallsWrapper"] = 7] = "StringArrayCallsWrapper"; - CustomNode[CustomNode["StringArrayNode"] = 8] = "StringArrayNode"; - CustomNode[CustomNode["StringArrayRotateFunctionNode"] = 9] = "StringArrayRotateFunctionNode"; -})(CustomNode = exports.CustomNode || (exports.CustomNode = {})); - -/***/ }), -/* 21 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var JSFuck_1 = __webpack_require__(109); - -var Utils = function () { - function Utils() { - _classCallCheck(this, Utils); - } - - _createClass(Utils, null, [{ - key: "decToHex", - value: function decToHex(dec) { - var radix = 16; - return dec.toString(radix); - } - }, { - key: "extractDomainFromUrl", - value: function extractDomainFromUrl(url) { - var domain = void 0; - if (url.indexOf('://') > -1 || url.indexOf('//') === 0) { - domain = url.split('/')[2]; - } else { - domain = url.split('/')[0]; - } - domain = domain.split(':')[0]; - return domain; - } - }, { - key: "isCeilNumber", - value: function isCeilNumber(number) { - return number % 1 === 0; - } - }, { - key: "stringRotate", - value: function stringRotate(string, times) { - if (!string) { - throw new ReferenceError("Cannot rotate empty string."); - } - for (var i = 0; i < times; i++) { - string = string[string.length - 1] + string.substring(0, string.length - 1); - } - return string; - } - }, { - key: "stringToJSFuck", - value: function stringToJSFuck(string) { - return Array.from(string).map(function (character) { - return JSFuck_1.JSFuck[character] || character; - }).join(' + '); - } - }]); - - return Utils; -}(); - -Utils.hexadecimalPrefix = '0x'; -exports.Utils = Utils; - -/***/ }), -/* 22 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractCustomNodeGroup = function () { - function AbstractCustomNodeGroup(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, AbstractCustomNodeGroup); - - this.identifierNamesGenerator = identifierNamesGeneratorFactory(options); - this.randomGenerator = randomGenerator; - this.options = options; - } - - _createClass(AbstractCustomNodeGroup, [{ - key: "getAppendEvent", - value: function getAppendEvent() { - return this.appendEvent; - } - }, { - key: "getCustomNodes", - value: function getCustomNodes() { - return this.customNodes; - } - }, { - key: "appendCustomNodeIfExist", - value: function appendCustomNodeIfExist(customNodeName, callback) { - var customNode = this.customNodes.get(customNodeName); - if (!customNode) { - return; - } - callback(customNode); - } - }, { - key: "getRandomStackTraceIndex", - value: function getRandomStackTraceIndex(stackTraceLength) { - return this.randomGenerator.getRandomInteger(0, Math.max(0, Math.round(stackTraceLength - 1))); - } - }]); - - return AbstractCustomNodeGroup; -}(); -AbstractCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], AbstractCustomNodeGroup); -exports.AbstractCustomNodeGroup = AbstractCustomNodeGroup; - -/***/ }), -/* 23 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var IdentifierNamesGenerator; -(function (IdentifierNamesGenerator) { - IdentifierNamesGenerator["HexadecimalIdentifierNamesGenerator"] = "hexadecimal"; - IdentifierNamesGenerator["MangledIdentifierNamesGenerator"] = "mangled"; -})(IdentifierNamesGenerator = exports.IdentifierNamesGenerator || (exports.IdentifierNamesGenerator = {})); - -/***/ }), -/* 24 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var SourceMapMode; -(function (SourceMapMode) { - SourceMapMode["Inline"] = "inline"; - SourceMapMode["Separate"] = "separate"; -})(SourceMapMode = exports.SourceMapMode || (exports.SourceMapMode = {})); - -/***/ }), -/* 25 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var StringArrayEncoding; -(function (StringArrayEncoding) { - StringArrayEncoding["Base64"] = "base64"; - StringArrayEncoding["Rc4"] = "rc4"; -})(StringArrayEncoding = exports.StringArrayEncoding || (exports.StringArrayEncoding = {})); - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var IdentifierNamesGenerator_1 = __webpack_require__(23); -var ObfuscationTarget_1 = __webpack_require__(13); -var SourceMapMode_1 = __webpack_require__(24); -exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ - compact: true, - controlFlowFlattening: false, - controlFlowFlatteningThreshold: 0, - deadCodeInjection: false, - deadCodeInjectionThreshold: 0, - debugProtection: false, - debugProtectionInterval: false, - disableConsoleOutput: false, - domainLock: [], - identifierNamesGenerator: IdentifierNamesGenerator_1.IdentifierNamesGenerator.HexadecimalIdentifierNamesGenerator, - log: false, - renameGlobals: false, - reservedNames: [], - rotateStringArray: false, - seed: 0, - selfDefending: false, - sourceMap: false, - sourceMapBaseUrl: '', - sourceMapFileName: '', - sourceMapMode: SourceMapMode_1.SourceMapMode.Separate, - stringArray: false, - stringArrayEncoding: false, - stringArrayThreshold: 0, - target: ObfuscationTarget_1.ObfuscationTarget.Browser, - unicodeEscapeSequence: false -}); - -/***/ }), -/* 27 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractObfuscatingReplacer = function AbstractObfuscatingReplacer(options) { - _classCallCheck(this, AbstractObfuscatingReplacer); - - this.options = options; -}; -AbstractObfuscatingReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractObfuscatingReplacer); -exports.AbstractObfuscatingReplacer = AbstractObfuscatingReplacer; - -/***/ }), -/* 28 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var AbstractCalleeDataExtractor = function AbstractCalleeDataExtractor() { - _classCallCheck(this, AbstractCalleeDataExtractor); -}; -AbstractCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectable()], AbstractCalleeDataExtractor); -exports.AbstractCalleeDataExtractor = AbstractCalleeDataExtractor; - -/***/ }), -/* 29 */ -/***/ (function(module, exports) { - -module.exports = require("escodegen-wallaby"); - -/***/ }), -/* 30 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractControlFlowReplacer = AbstractControlFlowReplacer_1 = function () { - function AbstractControlFlowReplacer(controlFlowCustomNodeFactory, randomGenerator, options) { - _classCallCheck(this, AbstractControlFlowReplacer); - - this.replacerDataByControlFlowStorageId = new Map(); - this.controlFlowCustomNodeFactory = controlFlowCustomNodeFactory; - this.randomGenerator = randomGenerator; - this.options = options; - } - - _createClass(AbstractControlFlowReplacer, [{ - key: "insertCustomNodeToControlFlowStorage", - value: function insertCustomNodeToControlFlowStorage(customNode, controlFlowStorage, replacerId, usingExistingIdentifierChance) { - var _this = this; - - var controlFlowStorageId = controlFlowStorage.getStorageId(); - var storageKeysById = AbstractControlFlowReplacer_1.getStorageKeysByIdForCurrentStorage(this.replacerDataByControlFlowStorageId, controlFlowStorageId); - var storageKeysForCurrentId = storageKeysById.get(replacerId); - if (this.randomGenerator.getMathRandom() < usingExistingIdentifierChance && storageKeysForCurrentId && storageKeysForCurrentId.length) { - return this.randomGenerator.getRandomGenerator().pickone(storageKeysForCurrentId); - } - var generateStorageKey = function generateStorageKey(length) { - var key = _this.randomGenerator.getRandomString(length); - if (controlFlowStorage.getStorage().has(key)) { - return generateStorageKey(length); - } - return key; - }; - var storageKey = generateStorageKey(5); - storageKeysById.set(replacerId, [storageKey]); - this.replacerDataByControlFlowStorageId.set(controlFlowStorageId, storageKeysById); - controlFlowStorage.set(storageKey, customNode); - return storageKey; - } - }], [{ - key: "getStorageKeysByIdForCurrentStorage", - value: function getStorageKeysByIdForCurrentStorage(identifierDataByControlFlowStorageId, controlFlowStorageId) { - var storageKeysById = void 0; - if (identifierDataByControlFlowStorageId.has(controlFlowStorageId)) { - storageKeysById = identifierDataByControlFlowStorageId.get(controlFlowStorageId); - } else { - storageKeysById = new Map(); - } - return storageKeysById; - } - }]); - - return AbstractControlFlowReplacer; -}(); -AbstractControlFlowReplacer = AbstractControlFlowReplacer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IControlFlowCustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], AbstractControlFlowReplacer); -exports.AbstractControlFlowReplacer = AbstractControlFlowReplacer; -var AbstractControlFlowReplacer_1; - -/***/ }), -/* 31 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function GlobalVariableNoEvalTemplate() { - return "\n var that = (typeof window !== 'undefined'\n ? window\n : (typeof process === 'object' &&\n typeof require === 'function' &&\n typeof global === 'object')\n ? global\n : this);\n "; -} -exports.GlobalVariableNoEvalTemplate = GlobalVariableNoEvalTemplate; - -/***/ }), -/* 32 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var IdentifierNamesGenerator_1 = __webpack_require__(23); -var ObfuscationTarget_1 = __webpack_require__(13); -var SourceMapMode_1 = __webpack_require__(24); -exports.DEFAULT_PRESET = Object.freeze({ - compact: true, - config: '', - controlFlowFlattening: false, - controlFlowFlatteningThreshold: 0.75, - deadCodeInjection: false, - deadCodeInjectionThreshold: 0.4, - debugProtection: false, - debugProtectionInterval: false, - disableConsoleOutput: false, - domainLock: [], - identifierNamesGenerator: IdentifierNamesGenerator_1.IdentifierNamesGenerator.HexadecimalIdentifierNamesGenerator, - log: false, - renameGlobals: false, - reservedNames: [], - rotateStringArray: true, - seed: 0, - selfDefending: false, - sourceMap: false, - sourceMapBaseUrl: '', - sourceMapFileName: '', - sourceMapMode: SourceMapMode_1.SourceMapMode.Separate, - stringArray: true, - stringArrayEncoding: false, - stringArrayThreshold: 0.75, - target: ObfuscationTarget_1.ObfuscationTarget.Browser, - unicodeEscapeSequence: false -}); - -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var commander = __webpack_require__(172); -var packageJson = __webpack_require__(45); -var path = __webpack_require__(34); -var Initializable_1 = __webpack_require__(3); -var Default_1 = __webpack_require__(32); -var ArraySanitizer_1 = __webpack_require__(173); -var BooleanSanitizer_1 = __webpack_require__(174); -var IdentifierNamesGeneratorSanitizer_1 = __webpack_require__(175); -var ObfuscatingTargetSanitizer_1 = __webpack_require__(176); -var SourceMapModeSanitizer_1 = __webpack_require__(177); -var StringArrayEncodingSanitizer_1 = __webpack_require__(178); -var CLIUtils_1 = __webpack_require__(179); -var JavaScriptObfuscatorFacade_1 = __webpack_require__(17); -var SourceCodeReader_1 = __webpack_require__(182); - -var JavaScriptObfuscatorCLI = function () { - function JavaScriptObfuscatorCLI(argv) { - _classCallCheck(this, JavaScriptObfuscatorCLI); - - this.rawArguments = argv; - this.arguments = argv.slice(2); - } - - _createClass(JavaScriptObfuscatorCLI, [{ - key: "initialize", - value: function initialize() { - this.inputPath = path.normalize(this.arguments[0] || ''); - this.commands = new commander.Command(); - this.configureCommands(); - this.configureHelp(); - this.inputCLIOptions = this.commands.opts(); - } - }, { - key: "run", - value: function run() { - var canShowHelp = !this.arguments.length || this.arguments.indexOf('--help') !== -1; - if (canShowHelp) { - return this.commands.outputHelp(); - } - var sourceCodeData = SourceCodeReader_1.SourceCodeReader.readSourceCode(this.inputPath); - this.processSourceCodeData(sourceCodeData); - } - }, { - key: "buildOptions", - value: function buildOptions() { - var inputCLIOptions = JavaScriptObfuscatorCLI.filterOptions(this.inputCLIOptions); - var configFilePath = this.inputCLIOptions.config; - var configFileLocation = configFilePath ? path.resolve(configFilePath, '.') : ''; - var configFileOptions = configFileLocation ? CLIUtils_1.CLIUtils.getUserConfig(configFileLocation) : {}; - return Object.assign({}, Default_1.DEFAULT_PRESET, configFileOptions, inputCLIOptions); - } - }, { - key: "configureCommands", - value: function configureCommands() { - this.commands.usage(' [options]').version(packageJson.version, '-v, --version').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', BooleanSanitizer_1.BooleanSanitizer).option('--config ', 'Name of js / json config file').option('--control-flow-flattening ', 'Enables control flow flattening', BooleanSanitizer_1.BooleanSanitizer).option('--control-flow-flattening-threshold ', 'The probability that the control flow flattening transformation will be applied to the node', parseFloat).option('--dead-code-injection ', 'Enables dead code injection', BooleanSanitizer_1.BooleanSanitizer).option('--dead-code-injection-threshold ', 'The probability that the dead code injection transformation will be applied to the node', parseFloat).option('--debug-protection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', BooleanSanitizer_1.BooleanSanitizer).option('--debug-protection-interval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', BooleanSanitizer_1.BooleanSanitizer).option('--disable-console-output ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', BooleanSanitizer_1.BooleanSanitizer).option('--domain-lock (comma separated, without whitespaces)', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', ArraySanitizer_1.ArraySanitizer).option('--identifier-names-generator [hexadecimal, mangled]', 'Sets identifier names generator (Default: hexadecimal)', IdentifierNamesGeneratorSanitizer_1.IdentifierNamesGeneratorSanitizer).option('--log ', 'Enables logging of the information to the console', BooleanSanitizer_1.BooleanSanitizer).option('--reserved-names (comma separated, without whitespaces)', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', ArraySanitizer_1.ArraySanitizer).option('--rename-globals ', 'Allows to enable obfuscation of global variable and function names with declaration.', BooleanSanitizer_1.BooleanSanitizer).option('--rotate-string-array ', 'Disable rotation of unicode array values during obfuscation', BooleanSanitizer_1.BooleanSanitizer).option('--seed ', 'Sets seed for random generator. This is useful for creating repeatable results.', parseFloat).option('--self-defending ', 'Disables self-defending for obfuscated code', BooleanSanitizer_1.BooleanSanitizer).option('--source-map ', 'Enables source map generation', BooleanSanitizer_1.BooleanSanitizer).option('--source-map-base-url ', 'Sets base url to the source map import url when `--source-map-mode=separate`').option('--source-map-file-name ', 'Sets file name for output source map when `--source-map-mode=separate`').option('--source-map-mode [inline, separate]', 'Specify source map output mode', SourceMapModeSanitizer_1.SourceMapModeSanitizer).option('--string-array ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', BooleanSanitizer_1.BooleanSanitizer).option('--string-array-encoding [true, false, base64, rc4]', 'Encodes all strings in strings array using base64 or rc4 (this option can slow down your code speed', StringArrayEncodingSanitizer_1.StringArrayEncodingSanitizer).option('--string-array-threshold ', 'The probability that the literal string will be inserted into stringArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--target ', 'Allows to set target environment for obfuscated code.', ObfuscatingTargetSanitizer_1.ObfuscationTargetSanitizer).option('--unicode-escape-sequence ', 'Allows to enable/disable string conversion to unicode escape sequence', BooleanSanitizer_1.BooleanSanitizer).parse(this.rawArguments); - } - }, { - key: "configureHelp", - value: function configureHelp() { - this.commands.on('--help', function () { - console.log(' Examples:\n'); - console.log(' %> javascript-obfuscator input_file_name.js --compact true --self-defending false'); - console.log(' %> javascript-obfuscator input_file_name.js --output output_file_name.js --compact true --self-defending false'); - console.log(' %> javascript-obfuscator input_directory_name --compact true --self-defending false'); - console.log(''); - }); - } - }, { - key: "processSourceCodeData", - value: function processSourceCodeData(sourceCodeData) { - var _this = this; - - var outputPath = this.inputCLIOptions.output ? path.normalize(this.inputCLIOptions.output) : ''; - if (!Array.isArray(sourceCodeData)) { - var outputCodePath = outputPath || CLIUtils_1.CLIUtils.getOutputCodePath(this.inputPath); - this.processSourceCode(sourceCodeData, outputCodePath); - } else { - sourceCodeData.forEach(function (_ref) { - var filePath = _ref.filePath, - content = _ref.content; - - var outputCodePath = outputPath ? path.join(outputPath, filePath) : CLIUtils_1.CLIUtils.getOutputCodePath(filePath); - _this.processSourceCode(content, outputCodePath); - }); - } - } - }, { - key: "processSourceCode", - value: function processSourceCode(sourceCode, outputCodePath) { - var options = this.buildOptions(); - if (options.sourceMap) { - JavaScriptObfuscatorCLI.processSourceCodeWithSourceMap(sourceCode, outputCodePath, options); - } else { - JavaScriptObfuscatorCLI.processSourceCodeWithoutSourceMap(sourceCode, outputCodePath, options); - } - } - }], [{ - key: "filterOptions", - value: function filterOptions(options) { - var filteredOptions = {}; - for (var option in options) { - if (!options.hasOwnProperty(option) || options[option] === undefined) { - continue; - } - filteredOptions[option] = options[option]; - } - return filteredOptions; - } - }, { - key: "processSourceCodeWithoutSourceMap", - value: function processSourceCodeWithoutSourceMap(sourceCode, outputCodePath, options) { - var obfuscatedCode = JavaScriptObfuscatorFacade_1.JavaScriptObfuscator.obfuscate(sourceCode, options).getObfuscatedCode(); - CLIUtils_1.CLIUtils.writeFile(outputCodePath, obfuscatedCode); - } - }, { - key: "processSourceCodeWithSourceMap", - value: function processSourceCodeWithSourceMap(sourceCode, outputCodePath, options) { - var outputSourceMapPath = CLIUtils_1.CLIUtils.getOutputSourceMapPath(outputCodePath, options.sourceMapFileName || ''); - options = Object.assign({}, options, { sourceMapFileName: path.basename(outputSourceMapPath) }); - var obfuscationResult = JavaScriptObfuscatorFacade_1.JavaScriptObfuscator.obfuscate(sourceCode, options); - CLIUtils_1.CLIUtils.writeFile(outputCodePath, obfuscationResult.getObfuscatedCode()); - if (options.sourceMapMode === 'separate' && obfuscationResult.getSourceMap()) { - CLIUtils_1.CLIUtils.writeFile(outputSourceMapPath, obfuscationResult.getSourceMap()); - } - } - }]); - - return JavaScriptObfuscatorCLI; -}(); - -JavaScriptObfuscatorCLI.availableInputExtensions = ['.js']; -JavaScriptObfuscatorCLI.encoding = 'utf8'; -JavaScriptObfuscatorCLI.obfuscatedFilePrefix = '-obfuscated'; -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], JavaScriptObfuscatorCLI.prototype, "commands", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], JavaScriptObfuscatorCLI.prototype, "inputCLIOptions", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], JavaScriptObfuscatorCLI.prototype, "inputPath", void 0); -exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; - -/***/ }), -/* 34 */ -/***/ (function(module, exports) { - -module.exports = require("path"); - -/***/ }), -/* 35 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var CalleeDataExtractor; -(function (CalleeDataExtractor) { - CalleeDataExtractor[CalleeDataExtractor["FunctionDeclarationCalleeDataExtractor"] = 0] = "FunctionDeclarationCalleeDataExtractor"; - CalleeDataExtractor[CalleeDataExtractor["FunctionExpressionCalleeDataExtractor"] = 1] = "FunctionExpressionCalleeDataExtractor"; - CalleeDataExtractor[CalleeDataExtractor["ObjectExpressionCalleeDataExtractor"] = 2] = "ObjectExpressionCalleeDataExtractor"; -})(CalleeDataExtractor = exports.CalleeDataExtractor || (exports.CalleeDataExtractor = {})); - -/***/ }), -/* 36 */ -/***/ (function(module, exports) { - -module.exports = require("esprima"); - -/***/ }), -/* 37 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var ControlFlowReplacer; -(function (ControlFlowReplacer) { - ControlFlowReplacer[ControlFlowReplacer["BinaryExpressionControlFlowReplacer"] = 0] = "BinaryExpressionControlFlowReplacer"; - ControlFlowReplacer[ControlFlowReplacer["CallExpressionControlFlowReplacer"] = 1] = "CallExpressionControlFlowReplacer"; - ControlFlowReplacer[ControlFlowReplacer["LogicalExpressionControlFlowReplacer"] = 2] = "LogicalExpressionControlFlowReplacer"; - ControlFlowReplacer[ControlFlowReplacer["StringLiteralControlFlowReplacer"] = 3] = "StringLiteralControlFlowReplacer"; -})(ControlFlowReplacer = exports.ControlFlowReplacer || (exports.ControlFlowReplacer = {})); - -/***/ }), -/* 38 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ControlFlowCustomNode_1 = __webpack_require__(12); -var AbstractControlFlowReplacer_1 = __webpack_require__(30); -var NodeGuards_1 = __webpack_require__(4); -var ExpressionWithOperatorControlFlowReplacer = function (_AbstractControlFlowR) { - _inherits(ExpressionWithOperatorControlFlowReplacer, _AbstractControlFlowR); - - function ExpressionWithOperatorControlFlowReplacer(controlFlowCustomNodeFactory, randomGenerator, options) { - _classCallCheck(this, ExpressionWithOperatorControlFlowReplacer); - - var _this = _possibleConstructorReturn(this, (ExpressionWithOperatorControlFlowReplacer.__proto__ || Object.getPrototypeOf(ExpressionWithOperatorControlFlowReplacer)).call(this, controlFlowCustomNodeFactory, randomGenerator, options)); - - _this.replacerDataByControlFlowStorageId = new Map(); - return _this; - } - - _createClass(ExpressionWithOperatorControlFlowReplacer, [{ - key: "getControlFlowStorageCallNode", - value: function getControlFlowStorageCallNode(controlFlowStorageId, storageKey, leftExpression, rightExpression) { - var controlFlowStorageCallCustomNode = this.controlFlowCustomNodeFactory(ControlFlowCustomNode_1.ControlFlowCustomNode.ExpressionWithOperatorControlFlowStorageCallNode); - controlFlowStorageCallCustomNode.initialize(controlFlowStorageId, storageKey, leftExpression, rightExpression); - var statementNode = controlFlowStorageCallCustomNode.getNode()[0]; - if (!statementNode || !NodeGuards_1.NodeGuards.isExpressionStatementNode(statementNode)) { - throw new Error("`controlFlowStorageCallCustomNode.getNode()[0]` should returns array with `ExpressionStatement` node"); - } - return statementNode.expression; - } - }]); - - return ExpressionWithOperatorControlFlowReplacer; -}(AbstractControlFlowReplacer_1.AbstractControlFlowReplacer); -ExpressionWithOperatorControlFlowReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IControlFlowCustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], ExpressionWithOperatorControlFlowReplacer); -exports.ExpressionWithOperatorControlFlowReplacer = ExpressionWithOperatorControlFlowReplacer; - -/***/ }), -/* 39 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var CustomNodeGroup; -(function (CustomNodeGroup) { - CustomNodeGroup[CustomNodeGroup["ConsoleOutputCustomNodeGroup"] = 0] = "ConsoleOutputCustomNodeGroup"; - CustomNodeGroup[CustomNodeGroup["DebugProtectionCustomNodeGroup"] = 1] = "DebugProtectionCustomNodeGroup"; - CustomNodeGroup[CustomNodeGroup["DomainLockCustomNodeGroup"] = 2] = "DomainLockCustomNodeGroup"; - CustomNodeGroup[CustomNodeGroup["SelfDefendingCustomNodeGroup"] = 3] = "SelfDefendingCustomNodeGroup"; - CustomNodeGroup[CustomNodeGroup["StringArrayCustomNodeGroup"] = 4] = "StringArrayCustomNodeGroup"; -})(CustomNodeGroup = exports.CustomNodeGroup || (exports.CustomNodeGroup = {})); - -/***/ }), -/* 40 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractIdentifierNamesGenerator = function AbstractIdentifierNamesGenerator(randomGenerator, options) { - _classCallCheck(this, AbstractIdentifierNamesGenerator); - - this.randomGenerator = randomGenerator; - this.options = options; -}; -AbstractIdentifierNamesGenerator = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], AbstractIdentifierNamesGenerator); -exports.AbstractIdentifierNamesGenerator = AbstractIdentifierNamesGenerator; - -/***/ }), -/* 41 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var LiteralObfuscatingReplacer; -(function (LiteralObfuscatingReplacer) { - LiteralObfuscatingReplacer[LiteralObfuscatingReplacer["BooleanLiteralObfuscatingReplacer"] = 0] = "BooleanLiteralObfuscatingReplacer"; - LiteralObfuscatingReplacer[LiteralObfuscatingReplacer["NumberLiteralObfuscatingReplacer"] = 1] = "NumberLiteralObfuscatingReplacer"; - LiteralObfuscatingReplacer[LiteralObfuscatingReplacer["StringLiteralObfuscatingReplacer"] = 2] = "StringLiteralObfuscatingReplacer"; -})(LiteralObfuscatingReplacer = exports.LiteralObfuscatingReplacer || (exports.LiteralObfuscatingReplacer = {})); - -/***/ }), -/* 42 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var ObfuscatingGuard; -(function (ObfuscatingGuard) { - ObfuscatingGuard[ObfuscatingGuard["BlackListNodeGuard"] = 0] = "BlackListNodeGuard"; - ObfuscatingGuard[ObfuscatingGuard["ConditionalCommentNodeGuard"] = 1] = "ConditionalCommentNodeGuard"; -})(ObfuscatingGuard = exports.ObfuscatingGuard || (exports.ObfuscatingGuard = {})); - -/***/ }), -/* 43 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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 _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); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var MapStorage = function () { - function MapStorage(randomGenerator, options) { - _classCallCheck(this, MapStorage); - - this.randomGenerator = randomGenerator; - this.options = options; - } - - _createClass(MapStorage, [{ - key: "initialize", - value: function initialize() { - this.storage = new Map(); - this.storageId = this.randomGenerator.getRandomString(6); - } - }, { - key: "get", - value: function get(key) { - var value = this.storage.get(key); - if (!value) { - throw new Error("No value found in map storage with key `" + key + "`"); - } - return value; - } - }, { - key: "getKeyOf", - value: function getKeyOf(value) { - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = this.storage[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var _step$value = _slicedToArray(_step.value, 2), - key = _step$value[0], - storageValue = _step$value[1]; - - if (value === storageValue) { - return key; - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return null; - } - }, { - key: "getLength", - value: function getLength() { - return this.storage.size; - } - }, { - key: "getStorage", - value: function getStorage() { - return this.storage; - } - }, { - key: "getStorageId", - value: function getStorageId() { - return this.storageId; - } - }, { - key: "mergeWith", - value: function mergeWith(storage) { - var mergeId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - this.storage = new Map([].concat(_toConsumableArray(this.storage), _toConsumableArray(storage.getStorage()))); - if (mergeId) { - this.storageId = storage.getStorageId(); - } - } - }, { - key: "set", - value: function set(key, value) { - this.storage.set(key, value); - } - }]); - - return 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", Map)], MapStorage.prototype, "storage", void 0); -tslib_1.__decorate([inversify_1.postConstruct(), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", []), tslib_1.__metadata("design:returntype", void 0)], MapStorage.prototype, "initialize", null); -MapStorage = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], MapStorage); -exports.MapStorage = MapStorage; - -/***/ }), -/* 44 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var md5 = __webpack_require__(144); -var chance_1 = __webpack_require__(145); -var Initializable_1 = __webpack_require__(3); -var RandomGenerator = RandomGenerator_1 = function () { - function RandomGenerator(sourceCode, options) { - _classCallCheck(this, RandomGenerator); - - this.sourceCode = sourceCode; - this.options = options; - } - - _createClass(RandomGenerator, [{ - key: "initialize", - value: function initialize() { - var _this = this; - - var getRandomInteger = function getRandomInteger(min, max) { - return Math.floor(Math.random() * (max - min + 1) + min); - }; - var getSeed = function getSeed() { - var md5Hash = md5(_this.sourceCode.getSourceCode()); - return _this.seed + Number(md5Hash.replace(/\D/g, '')); - }; - this.seed = this.options.seed !== 0 ? this.options.seed : getRandomInteger(0, 999999999); - this.randomGenerator = new chance_1.Chance(getSeed()); - } - }, { - key: "getMathRandom", - value: function getMathRandom() { - return this.getRandomInteger(0, 99999) / 100000; - } - }, { - key: "getRandomFloat", - value: function getRandomFloat(min, max) { - return this.getRandomGenerator().floating({ - min: min, - max: max, - fixed: 7 - }); - } - }, { - key: "getRandomGenerator", - value: function getRandomGenerator() { - return this.randomGenerator; - } - }, { - key: "getRandomInteger", - value: function getRandomInteger(min, max) { - return this.getRandomGenerator().integer({ - min: min, - max: max - }); - } - }, { - key: "getRandomString", - value: function getRandomString(length) { - var pool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RandomGenerator_1.randomGeneratorPool; - - return this.getRandomGenerator().string({ length: length, pool: pool }); - } - }, { - key: "getSeed", - value: function getSeed() { - return this.seed; - } - }]); - - return RandomGenerator; -}(); -RandomGenerator.randomGeneratorPool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; -RandomGenerator.randomGeneratorPoolNumbers = '0123456789'; -RandomGenerator.randomGeneratorPoolHexadecimal = "abcdef" + RandomGenerator_1.randomGeneratorPoolNumbers; -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], RandomGenerator.prototype, "randomGenerator", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Number)], RandomGenerator.prototype, "seed", void 0); -tslib_1.__decorate([inversify_1.postConstruct(), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", []), tslib_1.__metadata("design:returntype", void 0)], RandomGenerator.prototype, "initialize", null); -RandomGenerator = RandomGenerator_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ISourceCode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], RandomGenerator); -exports.RandomGenerator = RandomGenerator; -var RandomGenerator_1; - -/***/ }), -/* 45 */ -/***/ (function(module, exports) { - -module.exports = require("pjson"); - -/***/ }), -/* 46 */ -/***/ (function(module, exports) { - -module.exports = require("fs"); - -/***/ }), -/* 47 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var JavaScriptObfuscatorFacade_1 = __webpack_require__(17); -module.exports = JavaScriptObfuscatorFacade_1.JavaScriptObfuscator; - -/***/ }), -/* 48 */ -/***/ (function(module, exports) { - -module.exports = require("reflect-metadata"); - -/***/ }), -/* 49 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var InversifyContainerFacade_1 = __webpack_require__(14); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var CalleeDataExtractor_1 = __webpack_require__(35); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(50); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(51); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(52); -var StackTraceAnalyzer_1 = __webpack_require__(53); -exports.analyzersModule = 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(CalleeDataExtractor_1.CalleeDataExtractor.FunctionDeclarationCalleeDataExtractor); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICalleeDataExtractor).to(FunctionExpressionCalleeDataExtractor_1.FunctionExpressionCalleeDataExtractor).whenTargetNamed(CalleeDataExtractor_1.CalleeDataExtractor.FunctionExpressionCalleeDataExtractor); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICalleeDataExtractor).to(ObjectExpressionCalleeDataExtractor_1.ObjectExpressionCalleeDataExtractor).whenTargetNamed(CalleeDataExtractor_1.CalleeDataExtractor.ObjectExpressionCalleeDataExtractor); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__ICalleeDataExtractor).toFactory(InversifyContainerFacade_1.InversifyContainerFacade.getCacheFactory(ServiceIdentifiers_1.ServiceIdentifiers.ICalleeDataExtractor)); -}); - -/***/ }), -/* 50 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var estraverse = __webpack_require__(8); -var AbstractCalleeDataExtractor_1 = __webpack_require__(28); -var NodeGuards_1 = __webpack_require__(4); -var NodeUtils_1 = __webpack_require__(5); -var FunctionDeclarationCalleeDataExtractor = function (_AbstractCalleeDataEx) { - _inherits(FunctionDeclarationCalleeDataExtractor, _AbstractCalleeDataEx); - - function FunctionDeclarationCalleeDataExtractor() { - _classCallCheck(this, FunctionDeclarationCalleeDataExtractor); - - return _possibleConstructorReturn(this, (FunctionDeclarationCalleeDataExtractor.__proto__ || Object.getPrototypeOf(FunctionDeclarationCalleeDataExtractor)).apply(this, arguments)); - } - - _createClass(FunctionDeclarationCalleeDataExtractor, [{ - key: "extract", - value: function extract(blockScopeBody, callee) { - if (!NodeGuards_1.NodeGuards.isIdentifierNode(callee)) { - return null; - } - var calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopesOfNode(blockScopeBody[0])[0], callee.name); - if (!calleeBlockStatement) { - return null; - } - return { - callee: calleeBlockStatement, - name: callee.name - }; - } - }, { - key: "getCalleeBlockStatement", - value: function getCalleeBlockStatement(targetNode, name) { - var calleeBlockStatement = null; - estraverse.traverse(targetNode, { - enter: function enter(node) { - if (NodeGuards_1.NodeGuards.isFunctionDeclarationNode(node) && node.id.name === name) { - calleeBlockStatement = node.body; - return estraverse.VisitorOption.Break; - } - } - }); - return calleeBlockStatement; - } - }]); - - return FunctionDeclarationCalleeDataExtractor; -}(AbstractCalleeDataExtractor_1.AbstractCalleeDataExtractor); -FunctionDeclarationCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectable()], FunctionDeclarationCalleeDataExtractor); -exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; - -/***/ }), -/* 51 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var estraverse = __webpack_require__(8); -var AbstractCalleeDataExtractor_1 = __webpack_require__(28); -var NodeGuards_1 = __webpack_require__(4); -var NodeUtils_1 = __webpack_require__(5); -var FunctionExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { - _inherits(FunctionExpressionCalleeDataExtractor, _AbstractCalleeDataEx); - - function FunctionExpressionCalleeDataExtractor() { - _classCallCheck(this, FunctionExpressionCalleeDataExtractor); - - return _possibleConstructorReturn(this, (FunctionExpressionCalleeDataExtractor.__proto__ || Object.getPrototypeOf(FunctionExpressionCalleeDataExtractor)).apply(this, arguments)); - } - - _createClass(FunctionExpressionCalleeDataExtractor, [{ - key: "extract", - value: function extract(blockScopeBody, callee) { - var calleeBlockStatement = null; - if (NodeGuards_1.NodeGuards.isIdentifierNode(callee)) { - calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopesOfNode(blockScopeBody[0])[0], callee.name); - } - if (NodeGuards_1.NodeGuards.isFunctionExpressionNode(callee)) { - calleeBlockStatement = callee.body; - } - if (!calleeBlockStatement) { - return null; - } - return { - callee: calleeBlockStatement, - name: callee.name || null - }; - } - }, { - key: "getCalleeBlockStatement", - value: function getCalleeBlockStatement(targetNode, name) { - var calleeBlockStatement = null; - estraverse.traverse(targetNode, { - enter: function enter(node, parentNode) { - if (NodeGuards_1.NodeGuards.isFunctionExpressionNode(node) && parentNode && NodeGuards_1.NodeGuards.isVariableDeclaratorNode(parentNode) && NodeGuards_1.NodeGuards.isIdentifierNode(parentNode.id) && parentNode.id.name === name) { - calleeBlockStatement = node.body; - return estraverse.VisitorOption.Break; - } - } - }); - return calleeBlockStatement; - } - }]); - - return FunctionExpressionCalleeDataExtractor; -}(AbstractCalleeDataExtractor_1.AbstractCalleeDataExtractor); -FunctionExpressionCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectable()], FunctionExpressionCalleeDataExtractor); -exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; - -/***/ }), -/* 52 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var estraverse = __webpack_require__(8); -var AbstractCalleeDataExtractor_1 = __webpack_require__(28); -var NodeGuards_1 = __webpack_require__(4); -var NodeUtils_1 = __webpack_require__(5); -var ObjectExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { - _inherits(ObjectExpressionCalleeDataExtractor, _AbstractCalleeDataEx); - - function ObjectExpressionCalleeDataExtractor() { - _classCallCheck(this, ObjectExpressionCalleeDataExtractor); - - return _possibleConstructorReturn(this, (ObjectExpressionCalleeDataExtractor.__proto__ || Object.getPrototypeOf(ObjectExpressionCalleeDataExtractor)).apply(this, arguments)); - } - - _createClass(ObjectExpressionCalleeDataExtractor, [{ - key: "extract", - value: function extract(blockScopeBody, callee) { - if (!NodeGuards_1.NodeGuards.isMemberExpressionNode(callee)) { - return null; - } - var objectMembersCallsChain = this.createObjectMembersCallsChain([], callee); - if (!objectMembersCallsChain.length) { - return null; - } - var functionExpressionName = objectMembersCallsChain[objectMembersCallsChain.length - 1]; - var calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopesOfNode(blockScopeBody[0])[0], objectMembersCallsChain); - if (!calleeBlockStatement) { - return null; - } - return { - callee: calleeBlockStatement, - name: functionExpressionName - }; - } - }, { - key: "createObjectMembersCallsChain", - value: function createObjectMembersCallsChain(currentChain, memberExpression) { - if (NodeGuards_1.NodeGuards.isIdentifierNode(memberExpression.property) && memberExpression.computed === false) { - currentChain.unshift(memberExpression.property.name); - } else if (NodeGuards_1.NodeGuards.isLiteralNode(memberExpression.property) && (typeof memberExpression.property.value === 'string' || typeof memberExpression.property.value === 'number')) { - currentChain.unshift(memberExpression.property.value); - } else { - return currentChain; - } - if (NodeGuards_1.NodeGuards.isMemberExpressionNode(memberExpression.object)) { - return this.createObjectMembersCallsChain(currentChain, memberExpression.object); - } else if (NodeGuards_1.NodeGuards.isIdentifierNode(memberExpression.object)) { - currentChain.unshift(memberExpression.object.name); - } - return currentChain; - } - }, { - key: "getCalleeBlockStatement", - value: function getCalleeBlockStatement(targetNode, objectMembersCallsChain) { - var _this2 = this; - - var objectName = objectMembersCallsChain.shift(); - if (!objectName) { - return null; - } - var calleeBlockStatement = null; - estraverse.traverse(targetNode, { - enter: function enter(node) { - if (NodeGuards_1.NodeGuards.isVariableDeclaratorNode(node) && NodeGuards_1.NodeGuards.isIdentifierNode(node.id) && node.init && NodeGuards_1.NodeGuards.isObjectExpressionNode(node.init) && node.id.name === objectName) { - calleeBlockStatement = _this2.findCalleeBlockStatement(node.init.properties, objectMembersCallsChain); - return estraverse.VisitorOption.Break; - } - } - }); - return calleeBlockStatement; - } - }, { - key: "findCalleeBlockStatement", - value: function findCalleeBlockStatement(objectExpressionProperties, objectMembersCallsChain) { - var nextItemInCallsChain = objectMembersCallsChain.shift(); - if (!nextItemInCallsChain) { - return null; - } - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = objectExpressionProperties[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var propertyNode = _step.value; - - var isTargetPropertyNodeWithIdentifierKey = NodeGuards_1.NodeGuards.isIdentifierNode(propertyNode.key) && propertyNode.key.name === nextItemInCallsChain; - var isTargetPropertyNodeWithLiteralKey = NodeGuards_1.NodeGuards.isLiteralNode(propertyNode.key) && Boolean(propertyNode.key.value) && propertyNode.key.value === nextItemInCallsChain; - if (!isTargetPropertyNodeWithIdentifierKey && !isTargetPropertyNodeWithLiteralKey) { - continue; - } - if (NodeGuards_1.NodeGuards.isObjectExpressionNode(propertyNode.value)) { - return this.findCalleeBlockStatement(propertyNode.value.properties, objectMembersCallsChain); - } - if (NodeGuards_1.NodeGuards.isFunctionExpressionNode(propertyNode.value)) { - return propertyNode.value.body; - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return null; - } - }]); - - return ObjectExpressionCalleeDataExtractor; -}(AbstractCalleeDataExtractor_1.AbstractCalleeDataExtractor); -ObjectExpressionCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectable()], ObjectExpressionCalleeDataExtractor); -exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; - -/***/ }), -/* 53 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(8); -var CalleeDataExtractor_1 = __webpack_require__(35); -var NodeGuards_1 = __webpack_require__(4); -var NodeUtils_1 = __webpack_require__(5); -var StackTraceAnalyzer = StackTraceAnalyzer_1 = function () { - function StackTraceAnalyzer(calleeDataExtractorFactory) { - _classCallCheck(this, StackTraceAnalyzer); - - this.calleeDataExtractorFactory = calleeDataExtractorFactory; - } - - _createClass(StackTraceAnalyzer, [{ - key: "analyze", - value: function analyze(astTree) { - return this.analyzeRecursive(astTree.body); - } - }, { - key: "analyzeRecursive", - value: function analyzeRecursive(blockScopeBody) { - var _this = this; - - var limitIndex = StackTraceAnalyzer_1.getLimitIndex(blockScopeBody.length); - var stackTraceData = []; - var blockScopeBodyLength = blockScopeBody.length; - - var _loop = function _loop(index) { - if (index > limitIndex) { - return "break"; - } - var blockScopeBodyNode = blockScopeBody[index]; - estraverse.traverse(blockScopeBodyNode, { - enter: function enter(node) { - if (!NodeGuards_1.NodeGuards.isCallExpressionNode(node)) { - return; - } - if (blockScopeBodyNode.parentNode !== NodeUtils_1.NodeUtils.getBlockScopesOfNode(node)[0]) { - return estraverse.VisitorOption.Skip; - } - _this.analyzeCallExpressionNode(stackTraceData, blockScopeBody, node); - } - }); - }; - - for (var index = 0; index < blockScopeBodyLength; index++) { - var _ret = _loop(index); - - if (_ret === "break") break; - } - return stackTraceData; - } - }, { - key: "analyzeCallExpressionNode", - value: function analyzeCallExpressionNode(stackTraceData, blockScopeBody, callExpressionNode) { - var _this2 = this; - - StackTraceAnalyzer_1.calleeDataExtractorsList.forEach(function (calleeDataExtractorName) { - var calleeData = _this2.calleeDataExtractorFactory(calleeDataExtractorName).extract(blockScopeBody, callExpressionNode.callee); - if (!calleeData) { - return; - } - stackTraceData.push(Object.assign({}, calleeData, { stackTrace: _this2.analyzeRecursive(calleeData.callee.body) })); - }); - } - }], [{ - key: "getLimitIndex", - value: function getLimitIndex(blockScopeBodyLength) { - var lastIndex = blockScopeBodyLength - 1; - var limitThresholdActivationIndex = StackTraceAnalyzer_1.limitThresholdActivationLength - 1; - var limitIndex = lastIndex; - if (lastIndex > limitThresholdActivationIndex) { - limitIndex = Math.round(limitThresholdActivationIndex + lastIndex * StackTraceAnalyzer_1.limitThreshold); - if (limitIndex > lastIndex) { - limitIndex = lastIndex; - } - } - return limitIndex; - } - }]); - - return StackTraceAnalyzer; -}(); -StackTraceAnalyzer.calleeDataExtractorsList = [CalleeDataExtractor_1.CalleeDataExtractor.FunctionDeclarationCalleeDataExtractor, CalleeDataExtractor_1.CalleeDataExtractor.FunctionExpressionCalleeDataExtractor, CalleeDataExtractor_1.CalleeDataExtractor.ObjectExpressionCalleeDataExtractor]; -StackTraceAnalyzer.limitThresholdActivationLength = 25; -StackTraceAnalyzer.limitThreshold = 0.002; -StackTraceAnalyzer = StackTraceAnalyzer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__ICalleeDataExtractor)), tslib_1.__metadata("design:paramtypes", [Function])], StackTraceAnalyzer); -exports.StackTraceAnalyzer = StackTraceAnalyzer; -var StackTraceAnalyzer_1; - -/***/ }), -/* 54 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var InversifyContainerFacade_1 = __webpack_require__(14); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ControlFlowReplacer_1 = __webpack_require__(37); -var NodeTransformer_1 = __webpack_require__(18); -var BinaryExpressionControlFlowReplacer_1 = __webpack_require__(55); -var BlockStatementControlFlowTransformer_1 = __webpack_require__(56); -var CallExpressionControlFlowReplacer_1 = __webpack_require__(57); -var DeadCodeInjectionTransformer_1 = __webpack_require__(58); -var FunctionControlFlowTransformer_1 = __webpack_require__(59); -var LogicalExpressionControlFlowReplacer_1 = __webpack_require__(60); -var StringLiteralControlFlowReplacer_1 = __webpack_require__(61); -exports.controlFlowTransformersModule = new inversify_1.ContainerModule(function (bind) { - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(BlockStatementControlFlowTransformer_1.BlockStatementControlFlowTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.BlockStatementControlFlowTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(DeadCodeInjectionTransformer_1.DeadCodeInjectionTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.DeadCodeInjectionTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(FunctionControlFlowTransformer_1.FunctionControlFlowTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.FunctionControlFlowTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IControlFlowReplacer).to(BinaryExpressionControlFlowReplacer_1.BinaryExpressionControlFlowReplacer).whenTargetNamed(ControlFlowReplacer_1.ControlFlowReplacer.BinaryExpressionControlFlowReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IControlFlowReplacer).to(CallExpressionControlFlowReplacer_1.CallExpressionControlFlowReplacer).whenTargetNamed(ControlFlowReplacer_1.ControlFlowReplacer.CallExpressionControlFlowReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IControlFlowReplacer).to(LogicalExpressionControlFlowReplacer_1.LogicalExpressionControlFlowReplacer).whenTargetNamed(ControlFlowReplacer_1.ControlFlowReplacer.LogicalExpressionControlFlowReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IControlFlowReplacer).to(StringLiteralControlFlowReplacer_1.StringLiteralControlFlowReplacer).whenTargetNamed(ControlFlowReplacer_1.ControlFlowReplacer.StringLiteralControlFlowReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IControlFlowReplacer).toFactory(InversifyContainerFacade_1.InversifyContainerFacade.getCacheFactory(ServiceIdentifiers_1.ServiceIdentifiers.IControlFlowReplacer)); -}); - -/***/ }), -/* 55 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ControlFlowCustomNode_1 = __webpack_require__(12); -var ExpressionWithOperatorControlFlowReplacer_1 = __webpack_require__(38); -var BinaryExpressionControlFlowReplacer = BinaryExpressionControlFlowReplacer_1 = function (_ExpressionWithOperat) { - _inherits(BinaryExpressionControlFlowReplacer, _ExpressionWithOperat); - - function BinaryExpressionControlFlowReplacer(controlFlowCustomNodeFactory, randomGenerator, options) { - _classCallCheck(this, BinaryExpressionControlFlowReplacer); - - return _possibleConstructorReturn(this, (BinaryExpressionControlFlowReplacer.__proto__ || Object.getPrototypeOf(BinaryExpressionControlFlowReplacer)).call(this, controlFlowCustomNodeFactory, randomGenerator, options)); - } - - _createClass(BinaryExpressionControlFlowReplacer, [{ - key: "replace", - value: function replace(binaryExpressionNode, parentNode, controlFlowStorage) { - var replacerId = binaryExpressionNode.operator; - var binaryExpressionFunctionCustomNode = this.controlFlowCustomNodeFactory(ControlFlowCustomNode_1.ControlFlowCustomNode.BinaryExpressionFunctionNode); - binaryExpressionFunctionCustomNode.initialize(replacerId); - var storageKey = this.insertCustomNodeToControlFlowStorage(binaryExpressionFunctionCustomNode, controlFlowStorage, replacerId, BinaryExpressionControlFlowReplacer_1.usingExistingIdentifierChance); - return this.getControlFlowStorageCallNode(controlFlowStorage.getStorageId(), storageKey, binaryExpressionNode.left, binaryExpressionNode.right); - } - }]); - - return BinaryExpressionControlFlowReplacer; -}(ExpressionWithOperatorControlFlowReplacer_1.ExpressionWithOperatorControlFlowReplacer); -BinaryExpressionControlFlowReplacer.usingExistingIdentifierChance = 0.5; -BinaryExpressionControlFlowReplacer = BinaryExpressionControlFlowReplacer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IControlFlowCustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], BinaryExpressionControlFlowReplacer); -exports.BinaryExpressionControlFlowReplacer = BinaryExpressionControlFlowReplacer; -var BinaryExpressionControlFlowReplacer_1; - -/***/ }), -/* 56 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(8); -var ControlFlowCustomNode_1 = __webpack_require__(12); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var BlockStatementControlFlowTransformer = BlockStatementControlFlowTransformer_1 = function (_AbstractNodeTransfor) { - _inherits(BlockStatementControlFlowTransformer, _AbstractNodeTransfor); - - function BlockStatementControlFlowTransformer(controlFlowCustomNodeFactory, arrayUtils, randomGenerator, options) { - _classCallCheck(this, BlockStatementControlFlowTransformer); - - var _this = _possibleConstructorReturn(this, (BlockStatementControlFlowTransformer.__proto__ || Object.getPrototypeOf(BlockStatementControlFlowTransformer)).call(this, randomGenerator, options)); - - _this.controlFlowCustomNodeFactory = controlFlowCustomNodeFactory; - _this.arrayUtils = arrayUtils; - return _this; - } - - _createClass(BlockStatementControlFlowTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - leave: function leave(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isBlockStatementNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(blockStatementNode, parentNode) { - if (this.randomGenerator.getMathRandom() > this.options.controlFlowFlatteningThreshold || !BlockStatementControlFlowTransformer_1.canTransformBlockStatementNode(blockStatementNode)) { - return blockStatementNode; - } - var blockStatementBody = blockStatementNode.body; - var originalKeys = this.arrayUtils.arrayRange(blockStatementBody.length); - var shuffledKeys = this.arrayUtils.arrayShuffle(originalKeys); - var originalKeysIndexesInShuffledArray = originalKeys.map(function (key) { - return shuffledKeys.indexOf(key); - }); - var blockStatementControlFlowFlatteningCustomNode = this.controlFlowCustomNodeFactory(ControlFlowCustomNode_1.ControlFlowCustomNode.BlockStatementControlFlowFlatteningNode); - blockStatementControlFlowFlatteningCustomNode.initialize(blockStatementBody, shuffledKeys, originalKeysIndexesInShuffledArray); - return blockStatementControlFlowFlatteningCustomNode.getNode()[0]; - } - }], [{ - key: "blockStatementHasProhibitedStatements", - value: function blockStatementHasProhibitedStatements(blockStatementNode) { - return blockStatementNode.body.some(function (statement) { - var isBreakOrContinueStatement = NodeGuards_1.NodeGuards.isBreakStatementNode(statement) || NodeGuards_1.NodeGuards.isContinueStatementNode(statement); - var isVariableDeclarationWithLetOrConstKind = NodeGuards_1.NodeGuards.isVariableDeclarationNode(statement) && (statement.kind === 'const' || statement.kind === 'let'); - return NodeGuards_1.NodeGuards.isFunctionDeclarationNode(statement) || isBreakOrContinueStatement || isVariableDeclarationWithLetOrConstKind; - }); - } - }, { - key: "canTransformBlockStatementNode", - value: function canTransformBlockStatementNode(blockStatementNode) { - var canTransform = true; - estraverse.traverse(blockStatementNode, { - enter: function enter(node) { - if (NodeGuards_1.NodeGuards.isWhileStatementNode(node)) { - return estraverse.VisitorOption.Skip; - } - if (NodeGuards_1.NodeGuards.isBlockStatementNode(node) && BlockStatementControlFlowTransformer_1.blockStatementHasProhibitedStatements(node)) { - canTransform = false; - } - } - }); - if (blockStatementNode.body.length <= 4) { - canTransform = false; - } - return canTransform; - } - }]); - - return BlockStatementControlFlowTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -BlockStatementControlFlowTransformer = BlockStatementControlFlowTransformer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IControlFlowCustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IArrayUtils)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object, Object])], BlockStatementControlFlowTransformer); -exports.BlockStatementControlFlowTransformer = BlockStatementControlFlowTransformer; -var BlockStatementControlFlowTransformer_1; - -/***/ }), -/* 57 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ControlFlowCustomNode_1 = __webpack_require__(12); -var AbstractControlFlowReplacer_1 = __webpack_require__(30); -var NodeGuards_1 = __webpack_require__(4); -var CallExpressionControlFlowReplacer = CallExpressionControlFlowReplacer_1 = function (_AbstractControlFlowR) { - _inherits(CallExpressionControlFlowReplacer, _AbstractControlFlowR); - - function CallExpressionControlFlowReplacer(controlFlowCustomNodeFactory, randomGenerator, options) { - _classCallCheck(this, CallExpressionControlFlowReplacer); - - return _possibleConstructorReturn(this, (CallExpressionControlFlowReplacer.__proto__ || Object.getPrototypeOf(CallExpressionControlFlowReplacer)).call(this, controlFlowCustomNodeFactory, randomGenerator, options)); - } - - _createClass(CallExpressionControlFlowReplacer, [{ - key: "replace", - value: function replace(callExpressionNode, parentNode, controlFlowStorage) { - var callee = callExpressionNode.callee; - if (!NodeGuards_1.NodeGuards.isIdentifierNode(callee)) { - return callExpressionNode; - } - var replacerId = String(callExpressionNode.arguments.length); - var callExpressionFunctionCustomNode = this.controlFlowCustomNodeFactory(ControlFlowCustomNode_1.ControlFlowCustomNode.CallExpressionFunctionNode); - var expressionArguments = callExpressionNode.arguments; - callExpressionFunctionCustomNode.initialize(expressionArguments); - var storageKey = this.insertCustomNodeToControlFlowStorage(callExpressionFunctionCustomNode, controlFlowStorage, replacerId, CallExpressionControlFlowReplacer_1.usingExistingIdentifierChance); - return this.getControlFlowStorageCallNode(controlFlowStorage.getStorageId(), storageKey, callee, expressionArguments); - } - }, { - key: "getControlFlowStorageCallNode", - value: function getControlFlowStorageCallNode(controlFlowStorageId, storageKey, callee, expressionArguments) { - var controlFlowStorageCallCustomNode = this.controlFlowCustomNodeFactory(ControlFlowCustomNode_1.ControlFlowCustomNode.CallExpressionControlFlowStorageCallNode); - controlFlowStorageCallCustomNode.initialize(controlFlowStorageId, storageKey, callee, expressionArguments); - var statementNode = controlFlowStorageCallCustomNode.getNode()[0]; - if (!statementNode || !NodeGuards_1.NodeGuards.isExpressionStatementNode(statementNode)) { - throw new Error("`controlFlowStorageCallCustomNode.getNode()[0]` should returns array with `ExpressionStatement` node"); - } - return statementNode.expression; - } - }]); - - return CallExpressionControlFlowReplacer; -}(AbstractControlFlowReplacer_1.AbstractControlFlowReplacer); -CallExpressionControlFlowReplacer.usingExistingIdentifierChance = 0.5; -CallExpressionControlFlowReplacer = CallExpressionControlFlowReplacer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IControlFlowCustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], CallExpressionControlFlowReplacer); -exports.CallExpressionControlFlowReplacer = CallExpressionControlFlowReplacer; -var CallExpressionControlFlowReplacer_1; - -/***/ }), -/* 58 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(8); -var NodeTransformer_1 = __webpack_require__(18); -var NodeType_1 = __webpack_require__(10); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var Nodes_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(5); -var DeadCodeInjectionTransformer = DeadCodeInjectionTransformer_1 = function (_AbstractNodeTransfor) { - _inherits(DeadCodeInjectionTransformer, _AbstractNodeTransfor); - - function DeadCodeInjectionTransformer(transformersRunner, randomGenerator, options) { - _classCallCheck(this, DeadCodeInjectionTransformer); - - var _this = _possibleConstructorReturn(this, (DeadCodeInjectionTransformer.__proto__ || Object.getPrototypeOf(DeadCodeInjectionTransformer)).call(this, randomGenerator, options)); - - _this.collectedBlockStatements = []; - _this.transformersRunner = transformersRunner; - return _this; - } - - _createClass(DeadCodeInjectionTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isProgramNode(node)) { - _this2.analyzeNode(node, parentNode); - return node; - } - }, - leave: function leave(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isBlockStatementNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "analyzeNode", - value: function analyzeNode(programNode, parentNode) { - var _this3 = this; - - estraverse.traverse(programNode, { - enter: function enter(node) { - if (NodeGuards_1.NodeGuards.isBlockStatementNode(node)) { - _this3.collectBlockStatementNodes(node, _this3.collectedBlockStatements); - } - } - }); - this.collectedBlockStatementsLength = this.collectedBlockStatements.length; - } - }, { - key: "transformNode", - value: function transformNode(blockStatementNode, parentNode) { - if (this.collectedBlockStatementsLength < DeadCodeInjectionTransformer_1.minCollectedBlockStatementsCount) { - return estraverse.VisitorOption.Break; - } - if (!this.collectedBlockStatements.length) { - return estraverse.VisitorOption.Break; - } - if (this.randomGenerator.getMathRandom() > this.options.deadCodeInjectionThreshold) { - return blockStatementNode; - } - var blockScopeOfBlockStatementNode = NodeUtils_1.NodeUtils.getBlockScopesOfNode(blockStatementNode)[0]; - if (blockScopeOfBlockStatementNode.type === NodeType_1.NodeType.Program) { - return blockStatementNode; - } - var minInteger = 0; - var maxInteger = this.collectedBlockStatements.length - 1; - var randomIndex = this.randomGenerator.getRandomInteger(minInteger, maxInteger); - var randomBlockStatementNode = this.collectedBlockStatements.splice(randomIndex, 1)[0]; - if (randomBlockStatementNode === blockStatementNode) { - return blockStatementNode; - } - return this.replaceBlockStatementNode(blockStatementNode, randomBlockStatementNode); - } - }, { - key: "collectBlockStatementNodes", - value: function collectBlockStatementNodes(blockStatementNode, collectedBlockStatements) { - var clonedBlockStatementNode = NodeUtils_1.NodeUtils.clone(blockStatementNode), - nestedBlockStatementsCount = 0, - isValidBlockStatementNode = true; - estraverse.replace(clonedBlockStatementNode, { - enter: function enter(node, parentNode) { - if (NodeGuards_1.NodeGuards.isBlockStatementNode(node)) { - nestedBlockStatementsCount++; - } - if (nestedBlockStatementsCount > DeadCodeInjectionTransformer_1.maxNestedBlockStatementsCount || !DeadCodeInjectionTransformer_1.isValidBlockStatementNode(node)) { - isValidBlockStatementNode = false; - return estraverse.VisitorOption.Break; - } - return node; - } - }); - if (!isValidBlockStatementNode) { - return; - } - clonedBlockStatementNode = this.transformersRunner.transform(clonedBlockStatementNode, DeadCodeInjectionTransformer_1.transformersToRenameBlockScopeIdentifiers); - collectedBlockStatements.push(clonedBlockStatementNode); - } - }, { - key: "replaceBlockStatementNode", - value: function replaceBlockStatementNode(blockStatementNode, randomBlockStatementNode) { - var random1 = this.randomGenerator.getMathRandom() > 0.5; - var random2 = this.randomGenerator.getMathRandom() > 0.5; - var operator = random1 ? '===' : '!=='; - var leftString = this.randomGenerator.getRandomString(5); - var rightString = random2 ? leftString : this.randomGenerator.getRandomString(5); - - var _ref = random1 === random2 ? [blockStatementNode, randomBlockStatementNode] : [randomBlockStatementNode, blockStatementNode], - _ref2 = _slicedToArray(_ref, 2), - consequent = _ref2[0], - alternate = _ref2[1]; - - var newBlockStatementNode = Nodes_1.Nodes.getBlockStatementNode([Nodes_1.Nodes.getIfStatementNode(Nodes_1.Nodes.getBinaryExpressionNode(operator, Nodes_1.Nodes.getLiteralNode(leftString), Nodes_1.Nodes.getLiteralNode(rightString)), consequent, alternate)]); - newBlockStatementNode = NodeUtils_1.NodeUtils.parentize(newBlockStatementNode); - return newBlockStatementNode; - } - }], [{ - key: "isValidBlockStatementNode", - value: function isValidBlockStatementNode(node) { - return !NodeGuards_1.NodeGuards.isBreakStatementNode(node) && !NodeGuards_1.NodeGuards.isContinueStatementNode(node) && !NodeGuards_1.NodeGuards.isAwaitExpressionNode(node) && !NodeGuards_1.NodeGuards.isSuperNode(node); - } - }]); - - return DeadCodeInjectionTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -DeadCodeInjectionTransformer.maxNestedBlockStatementsCount = 4; -DeadCodeInjectionTransformer.minCollectedBlockStatementsCount = 5; -DeadCodeInjectionTransformer.transformersToRenameBlockScopeIdentifiers = [NodeTransformer_1.NodeTransformer.CatchClauseTransformer, NodeTransformer_1.NodeTransformer.ClassDeclarationTransformer, NodeTransformer_1.NodeTransformer.FunctionDeclarationTransformer, NodeTransformer_1.NodeTransformer.FunctionTransformer, NodeTransformer_1.NodeTransformer.LabeledStatementTransformer, NodeTransformer_1.NodeTransformer.VariableDeclarationTransformer]; -DeadCodeInjectionTransformer = DeadCodeInjectionTransformer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ITransformersRunner)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object, Object])], DeadCodeInjectionTransformer); -exports.DeadCodeInjectionTransformer = DeadCodeInjectionTransformer; -var DeadCodeInjectionTransformer_1; - -/***/ }), -/* 59 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(8); -var ControlFlowCustomNode_1 = __webpack_require__(12); -var ControlFlowReplacer_1 = __webpack_require__(37); -var NodeType_1 = __webpack_require__(10); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var NodeAppender_1 = __webpack_require__(19); -var NodeUtils_1 = __webpack_require__(5); -var FunctionControlFlowTransformer = FunctionControlFlowTransformer_1 = function (_AbstractNodeTransfor) { - _inherits(FunctionControlFlowTransformer, _AbstractNodeTransfor); - - function FunctionControlFlowTransformer(controlFlowStorageFactory, controlFlowReplacerFactory, controlFlowCustomNodeFactory, randomGenerator, options) { - _classCallCheck(this, FunctionControlFlowTransformer); - - var _this = _possibleConstructorReturn(this, (FunctionControlFlowTransformer.__proto__ || Object.getPrototypeOf(FunctionControlFlowTransformer)).call(this, randomGenerator, options)); - - _this.controlFlowData = new Map(); - _this.visitedFunctionNodes = new Set(); - _this.hostNodesWithControlFlowNode = new Set(); - _this.controlFlowStorageFactory = controlFlowStorageFactory; - _this.controlFlowReplacerFactory = controlFlowReplacerFactory; - _this.controlFlowCustomNodeFactory = controlFlowCustomNodeFactory; - return _this; - } - - _createClass(FunctionControlFlowTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - leave: function leave(node, parentNode) { - if (parentNode && (NodeGuards_1.NodeGuards.isFunctionDeclarationNode(node) || NodeGuards_1.NodeGuards.isFunctionExpressionNode(node) || NodeGuards_1.NodeGuards.isArrowFunctionExpressionNode(node))) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(functionNode, parentNode) { - this.visitedFunctionNodes.add(functionNode); - if (!NodeGuards_1.NodeGuards.isBlockStatementNode(functionNode.body)) { - return functionNode; - } - var hostNode = this.getHostNode(functionNode.body); - var controlFlowStorage = this.getControlFlowStorage(hostNode); - this.controlFlowData.set(hostNode, controlFlowStorage); - this.transformFunctionBody(functionNode.body, controlFlowStorage); - if (!controlFlowStorage.getLength()) { - return functionNode; - } - var controlFlowStorageCustomNode = this.controlFlowCustomNodeFactory(ControlFlowCustomNode_1.ControlFlowCustomNode.ControlFlowStorageNode); - controlFlowStorageCustomNode.initialize(controlFlowStorage); - NodeAppender_1.NodeAppender.prependNode(hostNode, controlFlowStorageCustomNode.getNode()); - this.hostNodesWithControlFlowNode.add(hostNode); - return functionNode; - } - }, { - key: "getControlFlowStorage", - value: function getControlFlowStorage(hostNode) { - var controlFlowStorage = this.controlFlowStorageFactory(); - if (this.controlFlowData.has(hostNode)) { - if (this.hostNodesWithControlFlowNode.has(hostNode)) { - hostNode.body.shift(); - } - var hostControlFlowStorage = this.controlFlowData.get(hostNode); - controlFlowStorage.mergeWith(hostControlFlowStorage, true); - } - return controlFlowStorage; - } - }, { - key: "getHostNode", - value: function getHostNode(functionNodeBody) { - var blockScopesOfNode = NodeUtils_1.NodeUtils.getBlockScopesOfNode(functionNodeBody); - if (blockScopesOfNode.length === 1) { - return functionNodeBody; - } 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 this.randomGenerator.getRandomGenerator().pickone(blockScopesOfNode); - } - }, { - key: "isVisitedFunctionNode", - value: function isVisitedFunctionNode(node) { - return (NodeGuards_1.NodeGuards.isFunctionDeclarationNode(node) || NodeGuards_1.NodeGuards.isFunctionExpressionNode(node) || NodeGuards_1.NodeGuards.isArrowFunctionExpressionNode(node)) && this.visitedFunctionNodes.has(node); - } - }, { - key: "transformFunctionBody", - value: function transformFunctionBody(functionNodeBody, controlFlowStorage) { - var _this3 = this; - - estraverse.replace(functionNodeBody, { - enter: function enter(node, parentNode) { - if (node.ignoredNode) { - return estraverse.VisitorOption.Skip; - } - if (_this3.isVisitedFunctionNode(node) || !parentNode) { - return estraverse.VisitorOption.Skip; - } - if (!FunctionControlFlowTransformer_1.controlFlowReplacersMap.has(node.type)) { - return node; - } - if (_this3.randomGenerator.getMathRandom() > _this3.options.controlFlowFlatteningThreshold) { - return node; - } - var controlFlowReplacerName = FunctionControlFlowTransformer_1.controlFlowReplacersMap.get(node.type); - if (controlFlowReplacerName === undefined) { - return node; - } - return Object.assign({}, _this3.controlFlowReplacerFactory(controlFlowReplacerName).replace(node, parentNode, controlFlowStorage), { parentNode: parentNode }); - } - }); - } - }]); - - return FunctionControlFlowTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -FunctionControlFlowTransformer.controlFlowReplacersMap = new Map([[NodeType_1.NodeType.BinaryExpression, ControlFlowReplacer_1.ControlFlowReplacer.BinaryExpressionControlFlowReplacer], [NodeType_1.NodeType.CallExpression, ControlFlowReplacer_1.ControlFlowReplacer.CallExpressionControlFlowReplacer], [NodeType_1.NodeType.LogicalExpression, ControlFlowReplacer_1.ControlFlowReplacer.LogicalExpressionControlFlowReplacer], [NodeType_1.NodeType.Literal, ControlFlowReplacer_1.ControlFlowReplacer.StringLiteralControlFlowReplacer]]); -FunctionControlFlowTransformer.hostNodeSearchMinDepth = 0; -FunctionControlFlowTransformer.hostNodeSearchMaxDepth = 2; -FunctionControlFlowTransformer = FunctionControlFlowTransformer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__TControlFlowStorage)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IControlFlowReplacer)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IControlFlowCustomNode)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(4, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Function, Function, Object, Object])], FunctionControlFlowTransformer); -exports.FunctionControlFlowTransformer = FunctionControlFlowTransformer; -var FunctionControlFlowTransformer_1; - -/***/ }), -/* 60 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ControlFlowCustomNode_1 = __webpack_require__(12); -var ExpressionWithOperatorControlFlowReplacer_1 = __webpack_require__(38); -var NodeGuards_1 = __webpack_require__(4); -var NodeUtils_1 = __webpack_require__(5); -var LogicalExpressionControlFlowReplacer = LogicalExpressionControlFlowReplacer_1 = function (_ExpressionWithOperat) { - _inherits(LogicalExpressionControlFlowReplacer, _ExpressionWithOperat); - - function LogicalExpressionControlFlowReplacer(controlFlowCustomNodeFactory, randomGenerator, options) { - _classCallCheck(this, LogicalExpressionControlFlowReplacer); - - return _possibleConstructorReturn(this, (LogicalExpressionControlFlowReplacer.__proto__ || Object.getPrototypeOf(LogicalExpressionControlFlowReplacer)).call(this, controlFlowCustomNodeFactory, randomGenerator, options)); - } - - _createClass(LogicalExpressionControlFlowReplacer, [{ - key: "replace", - value: function replace(logicalExpressionNode, parentNode, controlFlowStorage) { - if (this.checkForProhibitedExpressions(logicalExpressionNode.left, logicalExpressionNode.right)) { - return logicalExpressionNode; - } - var replacerId = logicalExpressionNode.operator; - var logicalExpressionFunctionCustomNode = this.controlFlowCustomNodeFactory(ControlFlowCustomNode_1.ControlFlowCustomNode.LogicalExpressionFunctionNode); - logicalExpressionFunctionCustomNode.initialize(replacerId); - var storageKey = this.insertCustomNodeToControlFlowStorage(logicalExpressionFunctionCustomNode, controlFlowStorage, replacerId, LogicalExpressionControlFlowReplacer_1.usingExistingIdentifierChance); - return this.getControlFlowStorageCallNode(controlFlowStorage.getStorageId(), storageKey, logicalExpressionNode.left, logicalExpressionNode.right); - } - }, { - key: "checkForProhibitedExpressions", - value: function checkForProhibitedExpressions(leftExpression, rightExpression) { - return [leftExpression, rightExpression].some(function (expressionNode) { - var nodeForCheck = void 0; - if (!NodeGuards_1.NodeGuards.isUnaryExpressionNode(expressionNode)) { - nodeForCheck = expressionNode; - } else { - nodeForCheck = NodeUtils_1.NodeUtils.getUnaryExpressionArgumentNode(expressionNode); - } - return !NodeGuards_1.NodeGuards.isLiteralNode(nodeForCheck) && !NodeGuards_1.NodeGuards.isIdentifierNode(nodeForCheck) && !NodeGuards_1.NodeGuards.isObjectExpressionNode(nodeForCheck) && !NodeGuards_1.NodeGuards.isExpressionStatementNode(nodeForCheck); - }); - } - }]); - - return LogicalExpressionControlFlowReplacer; -}(ExpressionWithOperatorControlFlowReplacer_1.ExpressionWithOperatorControlFlowReplacer); -LogicalExpressionControlFlowReplacer.usingExistingIdentifierChance = 0.5; -LogicalExpressionControlFlowReplacer = LogicalExpressionControlFlowReplacer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IControlFlowCustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], LogicalExpressionControlFlowReplacer); -exports.LogicalExpressionControlFlowReplacer = LogicalExpressionControlFlowReplacer; -var LogicalExpressionControlFlowReplacer_1; - -/***/ }), -/* 61 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ControlFlowCustomNode_1 = __webpack_require__(12); -var AbstractControlFlowReplacer_1 = __webpack_require__(30); -var NodeGuards_1 = __webpack_require__(4); -var StringLiteralControlFlowReplacer = StringLiteralControlFlowReplacer_1 = function (_AbstractControlFlowR) { - _inherits(StringLiteralControlFlowReplacer, _AbstractControlFlowR); - - function StringLiteralControlFlowReplacer(controlFlowCustomNodeFactory, randomGenerator, options) { - _classCallCheck(this, StringLiteralControlFlowReplacer); - - return _possibleConstructorReturn(this, (StringLiteralControlFlowReplacer.__proto__ || Object.getPrototypeOf(StringLiteralControlFlowReplacer)).call(this, controlFlowCustomNodeFactory, randomGenerator, options)); - } - - _createClass(StringLiteralControlFlowReplacer, [{ - key: "replace", - value: function replace(literalNode, parentNode, controlFlowStorage) { - if (NodeGuards_1.NodeGuards.isPropertyNode(parentNode) && parentNode.key === literalNode) { - return literalNode; - } - if (typeof literalNode.value !== 'string' || literalNode.value.length < 3) { - return literalNode; - } - var replacerId = String(literalNode.value); - var literalFunctionCustomNode = this.controlFlowCustomNodeFactory(ControlFlowCustomNode_1.ControlFlowCustomNode.StringLiteralNode); - literalFunctionCustomNode.initialize(literalNode.value); - var storageKey = this.insertCustomNodeToControlFlowStorage(literalFunctionCustomNode, controlFlowStorage, replacerId, StringLiteralControlFlowReplacer_1.usingExistingIdentifierChance); - return this.getControlFlowStorageCallNode(controlFlowStorage.getStorageId(), storageKey); - } - }, { - key: "getControlFlowStorageCallNode", - value: function getControlFlowStorageCallNode(controlFlowStorageId, storageKey) { - var controlFlowStorageCallCustomNode = this.controlFlowCustomNodeFactory(ControlFlowCustomNode_1.ControlFlowCustomNode.StringLiteralControlFlowStorageCallNode); - controlFlowStorageCallCustomNode.initialize(controlFlowStorageId, storageKey); - var statementNode = controlFlowStorageCallCustomNode.getNode()[0]; - if (!statementNode || !NodeGuards_1.NodeGuards.isExpressionStatementNode(statementNode)) { - throw new Error("`controlFlowStorageCallCustomNode.getNode()[0]` should returns array with `ExpressionStatement` node"); - } - return statementNode.expression; - } - }]); - - return StringLiteralControlFlowReplacer; -}(AbstractControlFlowReplacer_1.AbstractControlFlowReplacer); -StringLiteralControlFlowReplacer.usingExistingIdentifierChance = 1; -StringLiteralControlFlowReplacer = StringLiteralControlFlowReplacer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IControlFlowCustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], StringLiteralControlFlowReplacer); -exports.StringLiteralControlFlowReplacer = StringLiteralControlFlowReplacer; -var StringLiteralControlFlowReplacer_1; - -/***/ }), -/* 62 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var NodeTransformer_1 = __webpack_require__(18); -var CallExpressionTransformer_1 = __webpack_require__(183); -var MemberExpressionTransformer_1 = __webpack_require__(63); -var MethodDefinitionTransformer_1 = __webpack_require__(64); -var TemplateLiteralTransformer_1 = __webpack_require__(65); -exports.convertingTransformersModule = new inversify_1.ContainerModule(function (bind) { - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(CallExpressionTransformer_1.CallExpressionTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.CallExpressionTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(MemberExpressionTransformer_1.MemberExpressionTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.MemberExpressionTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(MethodDefinitionTransformer_1.MethodDefinitionTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.MethodDefinitionTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(TemplateLiteralTransformer_1.TemplateLiteralTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.TemplateLiteralTransformer); -}); - -/***/ }), -/* 63 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var NodeType_1 = __webpack_require__(10); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var MemberExpressionTransformer = function (_AbstractNodeTransfor) { - _inherits(MemberExpressionTransformer, _AbstractNodeTransfor); - - function MemberExpressionTransformer(randomGenerator, options) { - _classCallCheck(this, MemberExpressionTransformer); - - return _possibleConstructorReturn(this, (MemberExpressionTransformer.__proto__ || Object.getPrototypeOf(MemberExpressionTransformer)).call(this, randomGenerator, options)); - } - - _createClass(MemberExpressionTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isMemberExpressionNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(memberExpressionNode, parentNode) { - if (NodeGuards_1.NodeGuards.isIdentifierNode(memberExpressionNode.property)) { - if (memberExpressionNode.computed) { - return memberExpressionNode; - } - memberExpressionNode.computed = true; - memberExpressionNode.property = { - type: NodeType_1.NodeType.Literal, - value: memberExpressionNode.property.name, - raw: "'" + memberExpressionNode.property.name + "'" - }; - } - return memberExpressionNode; - } - }]); - - return MemberExpressionTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -MemberExpressionTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], MemberExpressionTransformer); -exports.MemberExpressionTransformer = MemberExpressionTransformer; - -/***/ }), -/* 64 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var NodeType_1 = __webpack_require__(10); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var MethodDefinitionTransformer = MethodDefinitionTransformer_1 = function (_AbstractNodeTransfor) { - _inherits(MethodDefinitionTransformer, _AbstractNodeTransfor); - - function MethodDefinitionTransformer(randomGenerator, options) { - _classCallCheck(this, MethodDefinitionTransformer); - - return _possibleConstructorReturn(this, (MethodDefinitionTransformer.__proto__ || Object.getPrototypeOf(MethodDefinitionTransformer)).call(this, randomGenerator, options)); - } - - _createClass(MethodDefinitionTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isMethodDefinitionNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(methodDefinitionNode, parentNode) { - if (NodeGuards_1.NodeGuards.isIdentifierNode(methodDefinitionNode.key) && !(MethodDefinitionTransformer_1.ignoredNames.indexOf(methodDefinitionNode.key.name) !== -1) && methodDefinitionNode.computed === false) { - methodDefinitionNode.computed = true; - methodDefinitionNode.key = { - type: NodeType_1.NodeType.Literal, - value: methodDefinitionNode.key.name, - raw: "'" + methodDefinitionNode.key.name + "'" - }; - } - return methodDefinitionNode; - } - }]); - - return MethodDefinitionTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -MethodDefinitionTransformer.ignoredNames = ['constructor']; -MethodDefinitionTransformer = MethodDefinitionTransformer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], MethodDefinitionTransformer); -exports.MethodDefinitionTransformer = MethodDefinitionTransformer; -var MethodDefinitionTransformer_1; - -/***/ }), -/* 65 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var Nodes_1 = __webpack_require__(9); -var TemplateLiteralTransformer = TemplateLiteralTransformer_1 = function (_AbstractNodeTransfor) { - _inherits(TemplateLiteralTransformer, _AbstractNodeTransfor); - - function TemplateLiteralTransformer(randomGenerator, options) { - _classCallCheck(this, TemplateLiteralTransformer); - - return _possibleConstructorReturn(this, (TemplateLiteralTransformer.__proto__ || Object.getPrototypeOf(TemplateLiteralTransformer)).call(this, randomGenerator, options)); - } - - _createClass(TemplateLiteralTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isTemplateLiteralNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(templateLiteralNode, parentNode) { - var templateLiteralExpressions = templateLiteralNode.expressions; - var nodes = []; - templateLiteralNode.quasis.forEach(function (templateElement) { - nodes.push(Nodes_1.Nodes.getLiteralNode(templateElement.value.cooked)); - var expression = templateLiteralExpressions.shift(); - if (!expression) { - return; - } - nodes.push(expression); - }); - nodes = nodes.filter(function (node) { - return !(NodeGuards_1.NodeGuards.isLiteralNode(node) && node.value === ''); - }); - if (!TemplateLiteralTransformer_1.isLiteralNodeWithStringValue(nodes[0]) && !TemplateLiteralTransformer_1.isLiteralNodeWithStringValue(nodes[1])) { - nodes.unshift(Nodes_1.Nodes.getLiteralNode('')); - } - if (nodes.length > 1) { - var root = Nodes_1.Nodes.getBinaryExpressionNode('+', nodes.shift(), nodes.shift()); - nodes.forEach(function (node) { - root = Nodes_1.Nodes.getBinaryExpressionNode('+', root, node); - }); - return root; - } - return nodes[0]; - } - }], [{ - key: "isLiteralNodeWithStringValue", - value: function isLiteralNodeWithStringValue(node) { - return node && NodeGuards_1.NodeGuards.isLiteralNode(node) && typeof node.value === 'string'; - } - }]); - - return TemplateLiteralTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -TemplateLiteralTransformer = TemplateLiteralTransformer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], TemplateLiteralTransformer); -exports.TemplateLiteralTransformer = TemplateLiteralTransformer; -var TemplateLiteralTransformer_1; - -/***/ }), -/* 66 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var InversifyContainerFacade_1 = __webpack_require__(14); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ControlFlowCustomNode_1 = __webpack_require__(12); -var CustomNode_1 = __webpack_require__(20); -var CustomNodeGroup_1 = __webpack_require__(39); -var ConsoleOutputCustomNodeGroup_1 = __webpack_require__(67); -var DebugProtectionCustomNodeGroup_1 = __webpack_require__(68); -var DomainLockCustomNodeGroup_1 = __webpack_require__(69); -var SelfDefendingCustomNodeGroup_1 = __webpack_require__(70); -var StringArrayCustomNodeGroup_1 = __webpack_require__(71); -var BinaryExpressionFunctionNode_1 = __webpack_require__(72); -var BlockStatementControlFlowFlatteningNode_1 = __webpack_require__(75); -var CallExpressionControlFlowStorageCallNode_1 = __webpack_require__(76); -var CallExpressionFunctionNode_1 = __webpack_require__(77); -var ControlFlowStorageNode_1 = __webpack_require__(78); -var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(79); -var DebugProtectionFunctionCallNode_1 = __webpack_require__(81); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(83); -var DebugProtectionFunctionNode_1 = __webpack_require__(85); -var DomainLockNode_1 = __webpack_require__(89); -var ExpressionWithOperatorControlFlowStorageCallNode_1 = __webpack_require__(91); -var LogicalExpressionFunctionNode_1 = __webpack_require__(92); -var NodeCallsControllerFunctionNode_1 = __webpack_require__(93); -var SelfDefendingUnicodeNode_1 = __webpack_require__(95); -var StringArrayCallsWrapper_1 = __webpack_require__(97); -var StringArrayNode_1 = __webpack_require__(104); -var StringArrayRotateFunctionNode_1 = __webpack_require__(106); -var StringLiteralControlFlowStorageCallNode_1 = __webpack_require__(110); -var StringLiteralNode_1 = __webpack_require__(111); -exports.customNodesModule = new inversify_1.ContainerModule(function (bind) { - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(ConsoleOutputDisableExpressionNode_1.ConsoleOutputDisableExpressionNode).whenTargetNamed(CustomNode_1.CustomNode.ConsoleOutputDisableExpressionNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(DebugProtectionFunctionCallNode_1.DebugProtectionFunctionCallNode).whenTargetNamed(CustomNode_1.CustomNode.DebugProtectionFunctionCallNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(DebugProtectionFunctionIntervalNode_1.DebugProtectionFunctionIntervalNode).whenTargetNamed(CustomNode_1.CustomNode.DebugProtectionFunctionIntervalNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(DebugProtectionFunctionNode_1.DebugProtectionFunctionNode).whenTargetNamed(CustomNode_1.CustomNode.DebugProtectionFunctionNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(DomainLockNode_1.DomainLockNode).whenTargetNamed(CustomNode_1.CustomNode.DomainLockNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(NodeCallsControllerFunctionNode_1.NodeCallsControllerFunctionNode).whenTargetNamed(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(SelfDefendingUnicodeNode_1.SelfDefendingUnicodeNode).whenTargetNamed(CustomNode_1.CustomNode.SelfDefendingUnicodeNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(StringArrayCallsWrapper_1.StringArrayCallsWrapper).whenTargetNamed(CustomNode_1.CustomNode.StringArrayCallsWrapper); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(StringArrayNode_1.StringArrayNode).whenTargetNamed(CustomNode_1.CustomNode.StringArrayNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode).to(StringArrayRotateFunctionNode_1.StringArrayRotateFunctionNode).whenTargetNamed(CustomNode_1.CustomNode.StringArrayRotateFunctionNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Newable__ICustomNode).toConstructor(BinaryExpressionFunctionNode_1.BinaryExpressionFunctionNode).whenTargetNamed(ControlFlowCustomNode_1.ControlFlowCustomNode.BinaryExpressionFunctionNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Newable__ICustomNode).toConstructor(BlockStatementControlFlowFlatteningNode_1.BlockStatementControlFlowFlatteningNode).whenTargetNamed(ControlFlowCustomNode_1.ControlFlowCustomNode.BlockStatementControlFlowFlatteningNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Newable__ICustomNode).toConstructor(CallExpressionControlFlowStorageCallNode_1.CallExpressionControlFlowStorageCallNode).whenTargetNamed(ControlFlowCustomNode_1.ControlFlowCustomNode.CallExpressionControlFlowStorageCallNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Newable__ICustomNode).toConstructor(CallExpressionFunctionNode_1.CallExpressionFunctionNode).whenTargetNamed(ControlFlowCustomNode_1.ControlFlowCustomNode.CallExpressionFunctionNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Newable__ICustomNode).toConstructor(ControlFlowStorageNode_1.ControlFlowStorageNode).whenTargetNamed(ControlFlowCustomNode_1.ControlFlowCustomNode.ControlFlowStorageNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Newable__ICustomNode).toConstructor(ExpressionWithOperatorControlFlowStorageCallNode_1.ExpressionWithOperatorControlFlowStorageCallNode).whenTargetNamed(ControlFlowCustomNode_1.ControlFlowCustomNode.ExpressionWithOperatorControlFlowStorageCallNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Newable__ICustomNode).toConstructor(LogicalExpressionFunctionNode_1.LogicalExpressionFunctionNode).whenTargetNamed(ControlFlowCustomNode_1.ControlFlowCustomNode.LogicalExpressionFunctionNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Newable__ICustomNode).toConstructor(StringLiteralNode_1.StringLiteralNode).whenTargetNamed(ControlFlowCustomNode_1.ControlFlowCustomNode.StringLiteralNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Newable__ICustomNode).toConstructor(StringLiteralControlFlowStorageCallNode_1.StringLiteralControlFlowStorageCallNode).whenTargetNamed(ControlFlowCustomNode_1.ControlFlowCustomNode.StringLiteralControlFlowStorageCallNode); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNodeGroup).to(ConsoleOutputCustomNodeGroup_1.ConsoleOutputCustomNodeGroup).whenTargetNamed(CustomNodeGroup_1.CustomNodeGroup.ConsoleOutputCustomNodeGroup); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNodeGroup).to(DebugProtectionCustomNodeGroup_1.DebugProtectionCustomNodeGroup).whenTargetNamed(CustomNodeGroup_1.CustomNodeGroup.DebugProtectionCustomNodeGroup); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNodeGroup).to(DomainLockCustomNodeGroup_1.DomainLockCustomNodeGroup).whenTargetNamed(CustomNodeGroup_1.CustomNodeGroup.DomainLockCustomNodeGroup); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNodeGroup).to(SelfDefendingCustomNodeGroup_1.SelfDefendingCustomNodeGroup).whenTargetNamed(CustomNodeGroup_1.CustomNodeGroup.SelfDefendingCustomNodeGroup); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNodeGroup).to(StringArrayCustomNodeGroup_1.StringArrayCustomNodeGroup).whenTargetNamed(CustomNodeGroup_1.CustomNodeGroup.StringArrayCustomNodeGroup); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__ICustomNode).toFactory(InversifyContainerFacade_1.InversifyContainerFacade.getFactory(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNode)); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IControlFlowCustomNode).toFactory(InversifyContainerFacade_1.InversifyContainerFacade.getConstructorFactory(ServiceIdentifiers_1.ServiceIdentifiers.Newable__ICustomNode, ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator, ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator, ServiceIdentifiers_1.ServiceIdentifiers.IOptions)); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__ICustomNodeGroup).toFactory(InversifyContainerFacade_1.InversifyContainerFacade.getFactory(ServiceIdentifiers_1.ServiceIdentifiers.ICustomNodeGroup)); -}); - -/***/ }), -/* 67 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var CustomNode_1 = __webpack_require__(20); -var ObfuscationEvent_1 = __webpack_require__(15); -var AbstractCustomNodeGroup_1 = __webpack_require__(22); -var NodeAppender_1 = __webpack_require__(19); -var ConsoleOutputCustomNodeGroup = function (_AbstractCustomNodeGr) { - _inherits(ConsoleOutputCustomNodeGroup, _AbstractCustomNodeGr); - - function ConsoleOutputCustomNodeGroup(customNodeFactory, identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, ConsoleOutputCustomNodeGroup); - - var _this = _possibleConstructorReturn(this, (ConsoleOutputCustomNodeGroup.__proto__ || Object.getPrototypeOf(ConsoleOutputCustomNodeGroup)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - - _this.appendEvent = ObfuscationEvent_1.ObfuscationEvent.BeforeObfuscation; - _this.customNodeFactory = customNodeFactory; - return _this; - } - - _createClass(ConsoleOutputCustomNodeGroup, [{ - key: "appendCustomNodes", - value: function appendCustomNodes(blockScopeNode, stackTraceData) { - var randomStackTraceIndex = this.getRandomStackTraceIndex(stackTraceData.length); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.ConsoleOutputDisableExpressionNode, function (customNode) { - NodeAppender_1.NodeAppender.appendNodeToOptimalBlockScope(stackTraceData, blockScopeNode, customNode.getNode(), randomStackTraceIndex); - }); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode, function (customNode) { - var targetBlockScope = void 0; - if (stackTraceData.length) { - targetBlockScope = NodeAppender_1.NodeAppender.getOptimalBlockScope(stackTraceData, randomStackTraceIndex, 1); - } else { - targetBlockScope = blockScopeNode; - } - NodeAppender_1.NodeAppender.prependNode(targetBlockScope, customNode.getNode()); - }); - } - }, { - key: "initialize", - value: function initialize() { - this.customNodes = new Map(); - if (!this.options.disableConsoleOutput) { - return; - } - var callsControllerFunctionName = this.identifierNamesGenerator.generate(6); - var consoleOutputDisableExpressionNode = this.customNodeFactory(CustomNode_1.CustomNode.ConsoleOutputDisableExpressionNode); - var nodeCallsControllerFunctionNode = this.customNodeFactory(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode); - consoleOutputDisableExpressionNode.initialize(callsControllerFunctionName); - nodeCallsControllerFunctionNode.initialize(this.appendEvent, callsControllerFunctionName); - this.customNodes.set(CustomNode_1.CustomNode.ConsoleOutputDisableExpressionNode, consoleOutputDisableExpressionNode); - this.customNodes.set(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode, nodeCallsControllerFunctionNode); - } - }]); - - return ConsoleOutputCustomNodeGroup; -}(AbstractCustomNodeGroup_1.AbstractCustomNodeGroup); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Map)], ConsoleOutputCustomNodeGroup.prototype, "customNodes", void 0); -ConsoleOutputCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__ICustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Function, Object, Object])], ConsoleOutputCustomNodeGroup); -exports.ConsoleOutputCustomNodeGroup = ConsoleOutputCustomNodeGroup; - -/***/ }), -/* 68 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var CustomNode_1 = __webpack_require__(20); -var ObfuscationEvent_1 = __webpack_require__(15); -var AbstractCustomNodeGroup_1 = __webpack_require__(22); -var NodeAppender_1 = __webpack_require__(19); -var DebugProtectionCustomNodeGroup = function (_AbstractCustomNodeGr) { - _inherits(DebugProtectionCustomNodeGroup, _AbstractCustomNodeGr); - - function DebugProtectionCustomNodeGroup(customNodeFactory, identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, DebugProtectionCustomNodeGroup); - - var _this = _possibleConstructorReturn(this, (DebugProtectionCustomNodeGroup.__proto__ || Object.getPrototypeOf(DebugProtectionCustomNodeGroup)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - - _this.appendEvent = ObfuscationEvent_1.ObfuscationEvent.BeforeObfuscation; - _this.customNodeFactory = customNodeFactory; - return _this; - } - - _createClass(DebugProtectionCustomNodeGroup, [{ - key: "appendCustomNodes", - value: function appendCustomNodes(blockScopeNode, stackTraceData) { - var _this2 = this; - - var randomStackTraceIndex = this.getRandomStackTraceIndex(stackTraceData.length); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.DebugProtectionFunctionCallNode, function (customNode) { - NodeAppender_1.NodeAppender.appendNodeToOptimalBlockScope(stackTraceData, blockScopeNode, customNode.getNode(), randomStackTraceIndex); - }); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.DebugProtectionFunctionNode, function (customNode) { - NodeAppender_1.NodeAppender.appendNode(blockScopeNode, customNode.getNode()); - }); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.DebugProtectionFunctionIntervalNode, function (customNode) { - var programBodyLength = blockScopeNode.body.length; - var randomIndex = _this2.randomGenerator.getRandomInteger(0, programBodyLength); - NodeAppender_1.NodeAppender.insertNodeAtIndex(blockScopeNode, customNode.getNode(), randomIndex); - }); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode, function (customNode) { - var targetBlockScope = void 0; - if (stackTraceData.length) { - targetBlockScope = NodeAppender_1.NodeAppender.getOptimalBlockScope(stackTraceData, randomStackTraceIndex, 1); - } else { - targetBlockScope = blockScopeNode; - } - NodeAppender_1.NodeAppender.prependNode(targetBlockScope, customNode.getNode()); - }); - } - }, { - key: "initialize", - value: function initialize() { - this.customNodes = new Map(); - if (!this.options.debugProtection) { - return; - } - var debugProtectionFunctionName = this.identifierNamesGenerator.generate(6); - var callsControllerFunctionName = this.identifierNamesGenerator.generate(6); - var debugProtectionFunctionNode = this.customNodeFactory(CustomNode_1.CustomNode.DebugProtectionFunctionNode); - var debugProtectionFunctionCallNode = this.customNodeFactory(CustomNode_1.CustomNode.DebugProtectionFunctionCallNode); - var debugProtectionFunctionIntervalNode = this.customNodeFactory(CustomNode_1.CustomNode.DebugProtectionFunctionIntervalNode); - var nodeCallsControllerFunctionNode = this.customNodeFactory(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode); - debugProtectionFunctionNode.initialize(debugProtectionFunctionName); - debugProtectionFunctionCallNode.initialize(debugProtectionFunctionName, callsControllerFunctionName); - debugProtectionFunctionIntervalNode.initialize(debugProtectionFunctionName); - nodeCallsControllerFunctionNode.initialize(this.appendEvent, callsControllerFunctionName); - this.customNodes.set(CustomNode_1.CustomNode.DebugProtectionFunctionNode, debugProtectionFunctionNode); - this.customNodes.set(CustomNode_1.CustomNode.DebugProtectionFunctionCallNode, debugProtectionFunctionCallNode); - if (this.options.debugProtectionInterval) { - this.customNodes.set(CustomNode_1.CustomNode.DebugProtectionFunctionIntervalNode, debugProtectionFunctionIntervalNode); - } - this.customNodes.set(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode, nodeCallsControllerFunctionNode); - } - }]); - - return DebugProtectionCustomNodeGroup; -}(AbstractCustomNodeGroup_1.AbstractCustomNodeGroup); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Map)], DebugProtectionCustomNodeGroup.prototype, "customNodes", void 0); -DebugProtectionCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__ICustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Function, Object, Object])], DebugProtectionCustomNodeGroup); -exports.DebugProtectionCustomNodeGroup = DebugProtectionCustomNodeGroup; - -/***/ }), -/* 69 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var CustomNode_1 = __webpack_require__(20); -var ObfuscationEvent_1 = __webpack_require__(15); -var AbstractCustomNodeGroup_1 = __webpack_require__(22); -var NodeAppender_1 = __webpack_require__(19); -var DomainLockCustomNodeGroup = function (_AbstractCustomNodeGr) { - _inherits(DomainLockCustomNodeGroup, _AbstractCustomNodeGr); - - function DomainLockCustomNodeGroup(customNodeFactory, identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, DomainLockCustomNodeGroup); - - var _this = _possibleConstructorReturn(this, (DomainLockCustomNodeGroup.__proto__ || Object.getPrototypeOf(DomainLockCustomNodeGroup)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - - _this.appendEvent = ObfuscationEvent_1.ObfuscationEvent.BeforeObfuscation; - _this.customNodeFactory = customNodeFactory; - return _this; - } - - _createClass(DomainLockCustomNodeGroup, [{ - key: "appendCustomNodes", - value: function appendCustomNodes(blockScopeNode, stackTraceData) { - var randomStackTraceIndex = this.getRandomStackTraceIndex(stackTraceData.length); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.DomainLockNode, function (customNode) { - NodeAppender_1.NodeAppender.appendNodeToOptimalBlockScope(stackTraceData, blockScopeNode, customNode.getNode(), randomStackTraceIndex); - }); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode, function (customNode) { - var targetBlockScope = void 0; - if (stackTraceData.length) { - targetBlockScope = NodeAppender_1.NodeAppender.getOptimalBlockScope(stackTraceData, randomStackTraceIndex, 1); - } else { - targetBlockScope = blockScopeNode; - } - NodeAppender_1.NodeAppender.prependNode(targetBlockScope, customNode.getNode()); - }); - } - }, { - key: "initialize", - value: function initialize() { - this.customNodes = new Map(); - if (!this.options.domainLock.length) { - return; - } - var callsControllerFunctionName = this.identifierNamesGenerator.generate(6); - var domainLockNode = this.customNodeFactory(CustomNode_1.CustomNode.DomainLockNode); - var nodeCallsControllerFunctionNode = this.customNodeFactory(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode); - domainLockNode.initialize(callsControllerFunctionName); - nodeCallsControllerFunctionNode.initialize(this.appendEvent, callsControllerFunctionName); - this.customNodes.set(CustomNode_1.CustomNode.DomainLockNode, domainLockNode); - this.customNodes.set(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode, nodeCallsControllerFunctionNode); - } - }]); - - return DomainLockCustomNodeGroup; -}(AbstractCustomNodeGroup_1.AbstractCustomNodeGroup); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Map)], DomainLockCustomNodeGroup.prototype, "customNodes", void 0); -DomainLockCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__ICustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Function, Object, Object])], DomainLockCustomNodeGroup); -exports.DomainLockCustomNodeGroup = DomainLockCustomNodeGroup; - -/***/ }), -/* 70 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var CustomNode_1 = __webpack_require__(20); -var ObfuscationEvent_1 = __webpack_require__(15); -var AbstractCustomNodeGroup_1 = __webpack_require__(22); -var NodeAppender_1 = __webpack_require__(19); -var SelfDefendingCustomNodeGroup = function (_AbstractCustomNodeGr) { - _inherits(SelfDefendingCustomNodeGroup, _AbstractCustomNodeGr); - - function SelfDefendingCustomNodeGroup(customNodeFactory, identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, SelfDefendingCustomNodeGroup); - - var _this = _possibleConstructorReturn(this, (SelfDefendingCustomNodeGroup.__proto__ || Object.getPrototypeOf(SelfDefendingCustomNodeGroup)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - - _this.appendEvent = ObfuscationEvent_1.ObfuscationEvent.AfterObfuscation; - _this.customNodeFactory = customNodeFactory; - return _this; - } - - _createClass(SelfDefendingCustomNodeGroup, [{ - key: "appendCustomNodes", - value: function appendCustomNodes(blockScopeNode, stackTraceData) { - var randomStackTraceIndex = this.getRandomStackTraceIndex(stackTraceData.length); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.SelfDefendingUnicodeNode, function (customNode) { - NodeAppender_1.NodeAppender.appendNodeToOptimalBlockScope(stackTraceData, blockScopeNode, customNode.getNode(), randomStackTraceIndex); - }); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode, function (customNode) { - var targetBlockScope = void 0; - if (stackTraceData.length) { - targetBlockScope = NodeAppender_1.NodeAppender.getOptimalBlockScope(stackTraceData, randomStackTraceIndex, 1); - } else { - targetBlockScope = blockScopeNode; - } - NodeAppender_1.NodeAppender.prependNode(targetBlockScope, customNode.getNode()); - }); - } - }, { - key: "initialize", - value: function initialize() { - this.customNodes = new Map(); - if (!this.options.selfDefending) { - return; - } - var callsControllerFunctionName = this.identifierNamesGenerator.generate(6); - var selfDefendingUnicodeNode = this.customNodeFactory(CustomNode_1.CustomNode.SelfDefendingUnicodeNode); - var nodeCallsControllerFunctionNode = this.customNodeFactory(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode); - selfDefendingUnicodeNode.initialize(callsControllerFunctionName); - nodeCallsControllerFunctionNode.initialize(this.appendEvent, callsControllerFunctionName); - this.customNodes.set(CustomNode_1.CustomNode.SelfDefendingUnicodeNode, selfDefendingUnicodeNode); - this.customNodes.set(CustomNode_1.CustomNode.NodeCallsControllerFunctionNode, nodeCallsControllerFunctionNode); - } - }]); - - return SelfDefendingCustomNodeGroup; -}(AbstractCustomNodeGroup_1.AbstractCustomNodeGroup); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Map)], SelfDefendingCustomNodeGroup.prototype, "customNodes", void 0); -SelfDefendingCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__ICustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Function, Object, Object])], SelfDefendingCustomNodeGroup); -exports.SelfDefendingCustomNodeGroup = SelfDefendingCustomNodeGroup; - -/***/ }), -/* 71 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var CustomNode_1 = __webpack_require__(20); -var ObfuscationEvent_1 = __webpack_require__(15); -var AbstractCustomNodeGroup_1 = __webpack_require__(22); -var NodeAppender_1 = __webpack_require__(19); -var StringArrayCustomNodeGroup = function (_AbstractCustomNodeGr) { - _inherits(StringArrayCustomNodeGroup, _AbstractCustomNodeGr); - - function StringArrayCustomNodeGroup(customNodeFactory, stringArrayStorage, identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, StringArrayCustomNodeGroup); - - var _this = _possibleConstructorReturn(this, (StringArrayCustomNodeGroup.__proto__ || Object.getPrototypeOf(StringArrayCustomNodeGroup)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - - _this.appendEvent = ObfuscationEvent_1.ObfuscationEvent.AfterObfuscation; - _this.customNodeFactory = customNodeFactory; - _this.stringArrayStorage = stringArrayStorage; - return _this; - } - - _createClass(StringArrayCustomNodeGroup, [{ - key: "appendCustomNodes", - value: function appendCustomNodes(blockScopeNode, stackTraceData) { - if (!this.stringArrayStorage.getLength()) { - return; - } - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.StringArrayNode, function (customNode) { - NodeAppender_1.NodeAppender.prependNode(blockScopeNode, customNode.getNode()); - }); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.StringArrayCallsWrapper, function (customNode) { - NodeAppender_1.NodeAppender.insertNodeAtIndex(blockScopeNode, customNode.getNode(), 1); - }); - this.appendCustomNodeIfExist(CustomNode_1.CustomNode.StringArrayRotateFunctionNode, function (customNode) { - NodeAppender_1.NodeAppender.insertNodeAtIndex(blockScopeNode, customNode.getNode(), 1); - }); - } - }, { - key: "initialize", - value: function initialize() { - this.customNodes = new Map(); - if (!this.options.stringArray) { - return; - } - var stringArrayNode = this.customNodeFactory(CustomNode_1.CustomNode.StringArrayNode); - var stringArrayCallsWrapper = this.customNodeFactory(CustomNode_1.CustomNode.StringArrayCallsWrapper); - var stringArrayRotateFunctionNode = this.customNodeFactory(CustomNode_1.CustomNode.StringArrayRotateFunctionNode); - var stringArrayStorageId = this.stringArrayStorage.getStorageId(); - - var _stringArrayStorageId = stringArrayStorageId.split('|'), - _stringArrayStorageId2 = _slicedToArray(_stringArrayStorageId, 2), - stringArrayName = _stringArrayStorageId2[0], - stringArrayCallsWrapperName = _stringArrayStorageId2[1]; - - var stringArrayRotateValue = void 0; - if (this.options.rotateStringArray) { - stringArrayRotateValue = this.randomGenerator.getRandomInteger(100, 500); - } else { - stringArrayRotateValue = 0; - } - stringArrayNode.initialize(this.stringArrayStorage, stringArrayName, stringArrayRotateValue); - stringArrayCallsWrapper.initialize(stringArrayName, stringArrayCallsWrapperName); - stringArrayRotateFunctionNode.initialize(stringArrayName, stringArrayRotateValue); - this.customNodes.set(CustomNode_1.CustomNode.StringArrayNode, stringArrayNode); - this.customNodes.set(CustomNode_1.CustomNode.StringArrayCallsWrapper, stringArrayCallsWrapper); - if (this.options.rotateStringArray) { - this.customNodes.set(CustomNode_1.CustomNode.StringArrayRotateFunctionNode, stringArrayRotateFunctionNode); - } - } - }]); - - return StringArrayCustomNodeGroup; -}(AbstractCustomNodeGroup_1.AbstractCustomNodeGroup); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Map)], 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__ICustomNode)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.TStringArrayStorage)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(4, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Function, Object, Object])], StringArrayCustomNodeGroup); -exports.StringArrayCustomNodeGroup = StringArrayCustomNodeGroup; - -/***/ }), -/* 72 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var AbstractCustomNode_1 = __webpack_require__(6); -var Nodes_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(5); -var BinaryExpressionFunctionNode = function (_AbstractCustomNode_) { - _inherits(BinaryExpressionFunctionNode, _AbstractCustomNode_); - - function BinaryExpressionFunctionNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, BinaryExpressionFunctionNode); - - return _possibleConstructorReturn(this, (BinaryExpressionFunctionNode.__proto__ || Object.getPrototypeOf(BinaryExpressionFunctionNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(BinaryExpressionFunctionNode, [{ - key: "initialize", - value: function initialize(operator) { - this.operator = operator; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - var structure = Nodes_1.Nodes.getFunctionDeclarationNode(this.randomGenerator.getRandomString(3), [Nodes_1.Nodes.getIdentifierNode('x'), Nodes_1.Nodes.getIdentifierNode('y')], Nodes_1.Nodes.getBlockStatementNode([Nodes_1.Nodes.getReturnStatementNode(Nodes_1.Nodes.getBinaryExpressionNode(this.operator, Nodes_1.Nodes.getIdentifierNode('x'), Nodes_1.Nodes.getIdentifierNode('y')))])); - NodeUtils_1.NodeUtils.parentize(structure); - return [structure]; - } - }]); - - return BinaryExpressionFunctionNode; -}(AbstractCustomNode_1.AbstractCustomNode); -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.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], BinaryExpressionFunctionNode); -exports.BinaryExpressionFunctionNode = BinaryExpressionFunctionNode; - -/***/ }), -/* 73 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function GlobalVariableTemplate1() { - return "\n var that;\n \n try {\n var getGlobal = Function('return (function() ' + '{}.constructor(\"return this\")( )' + ');');\n \n that = getGlobal();\n } catch (e) {\n that = window;\n }\n "; -} -exports.GlobalVariableTemplate1 = GlobalVariableTemplate1; - -/***/ }), -/* 74 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function GlobalVariableTemplate2() { - return "\n var getGlobal = function () {\n var globalObject;\n \n try {\n globalObject = Function('return (function() ' + '{}.constructor(\"return this\")( )' + ');')();\n } catch (e) {\n globalObject = window;\n }\n \n return globalObject;\n };\n var that = getGlobal();\n "; -} -exports.GlobalVariableTemplate2 = GlobalVariableTemplate2; - -/***/ }), -/* 75 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var AbstractCustomNode_1 = __webpack_require__(6); -var NodeGuards_1 = __webpack_require__(4); -var Nodes_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(5); -var BlockStatementControlFlowFlatteningNode = function (_AbstractCustomNode_) { - _inherits(BlockStatementControlFlowFlatteningNode, _AbstractCustomNode_); - - function BlockStatementControlFlowFlatteningNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, BlockStatementControlFlowFlatteningNode); - - return _possibleConstructorReturn(this, (BlockStatementControlFlowFlatteningNode.__proto__ || Object.getPrototypeOf(BlockStatementControlFlowFlatteningNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(BlockStatementControlFlowFlatteningNode, [{ - key: "initialize", - value: function initialize(blockStatementBody, shuffledKeys, originalKeysIndexesInShuffledArray) { - this.blockStatementBody = blockStatementBody; - this.shuffledKeys = shuffledKeys; - this.originalKeysIndexesInShuffledArray = originalKeysIndexesInShuffledArray; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - var _this2 = this; - - var controllerIdentifierName = this.randomGenerator.getRandomString(6); - var indexIdentifierName = this.randomGenerator.getRandomString(6); - var structure = Nodes_1.Nodes.getBlockStatementNode([Nodes_1.Nodes.getVariableDeclarationNode([Nodes_1.Nodes.getVariableDeclaratorNode(Nodes_1.Nodes.getIdentifierNode(controllerIdentifierName), Nodes_1.Nodes.getCallExpressionNode(Nodes_1.Nodes.getMemberExpressionNode(Nodes_1.Nodes.getLiteralNode(this.originalKeysIndexesInShuffledArray.join('|')), Nodes_1.Nodes.getIdentifierNode('split')), [Nodes_1.Nodes.getLiteralNode('|')])), Nodes_1.Nodes.getVariableDeclaratorNode(Nodes_1.Nodes.getIdentifierNode(indexIdentifierName), Nodes_1.Nodes.getLiteralNode(0))]), Nodes_1.Nodes.getWhileStatementNode(Nodes_1.Nodes.getLiteralNode(true), Nodes_1.Nodes.getBlockStatementNode([Nodes_1.Nodes.getSwitchStatementNode(Nodes_1.Nodes.getMemberExpressionNode(Nodes_1.Nodes.getIdentifierNode(controllerIdentifierName), Nodes_1.Nodes.getUpdateExpressionNode('++', Nodes_1.Nodes.getIdentifierNode(indexIdentifierName)), true), this.shuffledKeys.map(function (key, index) { - var statement = _this2.blockStatementBody[key]; - var consequent = [statement]; - if (!NodeGuards_1.NodeGuards.isReturnStatementNode(statement)) { - consequent.push(Nodes_1.Nodes.getContinueStatement()); - } - return Nodes_1.Nodes.getSwitchCaseNode(Nodes_1.Nodes.getLiteralNode(String(index)), consequent); - })), Nodes_1.Nodes.getBreakStatement()]))]); - NodeUtils_1.NodeUtils.parentize(structure); - return [structure]; - } - }]); - - return BlockStatementControlFlowFlatteningNode; -}(AbstractCustomNode_1.AbstractCustomNode); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Array)], BlockStatementControlFlowFlatteningNode.prototype, "blockStatementBody", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Array)], BlockStatementControlFlowFlatteningNode.prototype, "originalKeysIndexesInShuffledArray", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Array)], BlockStatementControlFlowFlatteningNode.prototype, "shuffledKeys", void 0); -BlockStatementControlFlowFlatteningNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], BlockStatementControlFlowFlatteningNode); -exports.BlockStatementControlFlowFlatteningNode = BlockStatementControlFlowFlatteningNode; - -/***/ }), -/* 76 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var AbstractCustomNode_1 = __webpack_require__(6); -var Nodes_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(5); -var CallExpressionControlFlowStorageCallNode = function (_AbstractCustomNode_) { - _inherits(CallExpressionControlFlowStorageCallNode, _AbstractCustomNode_); - - function CallExpressionControlFlowStorageCallNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, CallExpressionControlFlowStorageCallNode); - - return _possibleConstructorReturn(this, (CallExpressionControlFlowStorageCallNode.__proto__ || Object.getPrototypeOf(CallExpressionControlFlowStorageCallNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(CallExpressionControlFlowStorageCallNode, [{ - key: "initialize", - value: function initialize(controlFlowStorageName, controlFlowStorageKey, callee, expressionArguments) { - this.controlFlowStorageName = controlFlowStorageName; - this.controlFlowStorageKey = controlFlowStorageKey; - this.callee = callee; - this.expressionArguments = expressionArguments; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - var structure = Nodes_1.Nodes.getExpressionStatementNode(Nodes_1.Nodes.getCallExpressionNode(Nodes_1.Nodes.getMemberExpressionNode(Nodes_1.Nodes.getIdentifierNode(this.controlFlowStorageName), Nodes_1.Nodes.getIdentifierNode(this.controlFlowStorageKey)), [this.callee].concat(_toConsumableArray(this.expressionArguments)))); - NodeUtils_1.NodeUtils.parentize(structure); - return [structure]; - } - }]); - - return CallExpressionControlFlowStorageCallNode; -}(AbstractCustomNode_1.AbstractCustomNode); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], CallExpressionControlFlowStorageCallNode.prototype, "callee", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], CallExpressionControlFlowStorageCallNode.prototype, "controlFlowStorageKey", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], CallExpressionControlFlowStorageCallNode.prototype, "controlFlowStorageName", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Array)], CallExpressionControlFlowStorageCallNode.prototype, "expressionArguments", void 0); -CallExpressionControlFlowStorageCallNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], CallExpressionControlFlowStorageCallNode); -exports.CallExpressionControlFlowStorageCallNode = CallExpressionControlFlowStorageCallNode; - -/***/ }), -/* 77 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var AbstractCustomNode_1 = __webpack_require__(6); -var Nodes_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(5); -var CallExpressionFunctionNode = function (_AbstractCustomNode_) { - _inherits(CallExpressionFunctionNode, _AbstractCustomNode_); - - function CallExpressionFunctionNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, CallExpressionFunctionNode); - - return _possibleConstructorReturn(this, (CallExpressionFunctionNode.__proto__ || Object.getPrototypeOf(CallExpressionFunctionNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(CallExpressionFunctionNode, [{ - key: "initialize", - value: function initialize(expressionArguments) { - this.expressionArguments = expressionArguments; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - var calleeIdentifier = Nodes_1.Nodes.getIdentifierNode('callee'); - var params = []; - var argumentsLength = this.expressionArguments.length; - for (var i = 0; i < argumentsLength; i++) { - params.push(Nodes_1.Nodes.getIdentifierNode("param" + (i + 1))); - } - var structure = Nodes_1.Nodes.getFunctionDeclarationNode(this.randomGenerator.getRandomString(3), [calleeIdentifier].concat(params), Nodes_1.Nodes.getBlockStatementNode([Nodes_1.Nodes.getReturnStatementNode(Nodes_1.Nodes.getCallExpressionNode(calleeIdentifier, params))])); - NodeUtils_1.NodeUtils.parentize(structure); - return [structure]; - } - }]); - - return CallExpressionFunctionNode; -}(AbstractCustomNode_1.AbstractCustomNode); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Array)], CallExpressionFunctionNode.prototype, "expressionArguments", void 0); -CallExpressionFunctionNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], CallExpressionFunctionNode); -exports.CallExpressionFunctionNode = CallExpressionFunctionNode; - -/***/ }), -/* 78 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var AbstractCustomNode_1 = __webpack_require__(6); -var Nodes_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(5); -var ControlFlowStorageNode = function (_AbstractCustomNode_) { - _inherits(ControlFlowStorageNode, _AbstractCustomNode_); - - function ControlFlowStorageNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, ControlFlowStorageNode); - - return _possibleConstructorReturn(this, (ControlFlowStorageNode.__proto__ || Object.getPrototypeOf(ControlFlowStorageNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(ControlFlowStorageNode, [{ - key: "initialize", - value: function initialize(controlFlowStorage) { - this.controlFlowStorage = controlFlowStorage; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - var structure = Nodes_1.Nodes.getVariableDeclarationNode([Nodes_1.Nodes.getVariableDeclaratorNode(Nodes_1.Nodes.getIdentifierNode(this.controlFlowStorage.getStorageId()), Nodes_1.Nodes.getObjectExpressionNode(Array.from(this.controlFlowStorage.getStorage()).map(function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - key = _ref2[0], - value = _ref2[1]; - - return Nodes_1.Nodes.getPropertyNode(Nodes_1.Nodes.getIdentifierNode(key), value.getNode()[0]); - })))]); - structure = NodeUtils_1.NodeUtils.parentize(structure); - return [structure]; - } - }]); - - return ControlFlowStorageNode; -}(AbstractCustomNode_1.AbstractCustomNode); -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.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], ControlFlowStorageNode); -exports.ControlFlowStorageNode = ControlFlowStorageNode; - -/***/ }), -/* 79 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(11); -var ObfuscationTarget_1 = __webpack_require__(13); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(80); -var GlobalVariableNoEvalTemplate_1 = __webpack_require__(31); -var Initializable_1 = __webpack_require__(3); -var AbstractCustomNode_1 = __webpack_require__(6); -var NodeUtils_1 = __webpack_require__(5); -var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { - _inherits(ConsoleOutputDisableExpressionNode, _AbstractCustomNode_); - - function ConsoleOutputDisableExpressionNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, ConsoleOutputDisableExpressionNode); - - return _possibleConstructorReturn(this, (ConsoleOutputDisableExpressionNode.__proto__ || Object.getPrototypeOf(ConsoleOutputDisableExpressionNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(ConsoleOutputDisableExpressionNode, [{ - key: "initialize", - value: function initialize(callsControllerFunctionName) { - this.callsControllerFunctionName = callsControllerFunctionName; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getTemplate()); - } - }, { - key: "getTemplate", - value: function getTemplate() { - var globalVariableTemplate = this.options.target !== ObfuscationTarget_1.ObfuscationTarget.Extension ? this.getGlobalVariableTemplate() : GlobalVariableNoEvalTemplate_1.GlobalVariableNoEvalTemplate(); - return format(ConsoleOutputDisableExpressionTemplate_1.ConsoleOutputDisableExpressionTemplate(), { - consoleLogDisableFunctionName: this.identifierNamesGenerator.generate(6), - globalVariableTemplate: globalVariableTemplate, - singleNodeCallControllerFunctionName: this.callsControllerFunctionName - }); - } - }]); - - return ConsoleOutputDisableExpressionNode; -}(AbstractCustomNode_1.AbstractCustomNode); -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.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], ConsoleOutputDisableExpressionNode); -exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; - -/***/ }), -/* 80 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function ConsoleOutputDisableExpressionTemplate() { - return "\n var {consoleLogDisableFunctionName} = {singleNodeCallControllerFunctionName}(this, function () {\n var func = function () {};\n \n {globalVariableTemplate}\n \n if (!that.console) {\n that.console = (function (func){\n var c = {};\n \n c.log = func;\n c.warn = func;\n c.debug = func;\n c.info = func;\n c.error = func;\n c.exception = func;\n c.trace = func;\n \n return c;\n })(func);\n } else {\n that.console.log = func;\n that.console.warn = func;\n that.console.debug = func;\n that.console.info = func;\n that.console.error = func;\n that.console.exception = func;\n that.console.trace = func;\n }\n });\n \n {consoleLogDisableFunctionName}();\n "; -} -exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; - -/***/ }), -/* 81 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(11); -var Initializable_1 = __webpack_require__(3); -var DebugProtectionFunctionCallTemplate_1 = __webpack_require__(82); -var AbstractCustomNode_1 = __webpack_require__(6); -var NodeUtils_1 = __webpack_require__(5); -var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { - _inherits(DebugProtectionFunctionCallNode, _AbstractCustomNode_); - - function DebugProtectionFunctionCallNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, DebugProtectionFunctionCallNode); - - return _possibleConstructorReturn(this, (DebugProtectionFunctionCallNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionCallNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(DebugProtectionFunctionCallNode, [{ - key: "initialize", - value: function initialize(debugProtectionFunctionName, callsControllerFunctionName) { - this.debugProtectionFunctionName = debugProtectionFunctionName; - this.callsControllerFunctionName = callsControllerFunctionName; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getTemplate()); - } - }, { - key: "getTemplate", - value: function getTemplate() { - return format(DebugProtectionFunctionCallTemplate_1.DebugProtectionFunctionCallTemplate(), { - debugProtectionFunctionName: this.debugProtectionFunctionName, - singleNodeCallControllerFunctionName: this.callsControllerFunctionName - }); - } - }]); - - return DebugProtectionFunctionCallNode; -}(AbstractCustomNode_1.AbstractCustomNode); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], DebugProtectionFunctionCallNode.prototype, "callsControllerFunctionName", void 0); -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.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], DebugProtectionFunctionCallNode); -exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; - -/***/ }), -/* 82 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function DebugProtectionFunctionCallTemplate() { - return "\n (function () {\n {singleNodeCallControllerFunctionName}(this, function () {\n var regExp1 = new RegExp('function *\\\\( *\\\\)');\n var regExp2 = new RegExp('\\\\+\\\\+ *\\(?:_0x(?:[a-f0-9]){4,6}|(?:\\\\b|\\\\d)[a-z0-9]{1,4}(?:\\\\b|\\\\d)\\)', 'i');\n \n var result = {debugProtectionFunctionName}('init');\n \n if (!regExp1.test(result + 'chain') || !regExp2.test(result + 'input')) {\n result('0');\n } else {\n {debugProtectionFunctionName}();\n }\n })();\n })();\n "; -} -exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; - -/***/ }), -/* 83 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(11); -var Initializable_1 = __webpack_require__(3); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(84); -var AbstractCustomNode_1 = __webpack_require__(6); -var NodeUtils_1 = __webpack_require__(5); -var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { - _inherits(DebugProtectionFunctionIntervalNode, _AbstractCustomNode_); - - function DebugProtectionFunctionIntervalNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, DebugProtectionFunctionIntervalNode); - - return _possibleConstructorReturn(this, (DebugProtectionFunctionIntervalNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionIntervalNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(DebugProtectionFunctionIntervalNode, [{ - key: "initialize", - value: function initialize(debugProtectionFunctionName) { - this.debugProtectionFunctionName = debugProtectionFunctionName; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getTemplate()); - } - }, { - key: "getTemplate", - value: function getTemplate() { - return format(DebugProtectionFunctionIntervalTemplate_1.DebugProtectionFunctionIntervalTemplate(), { - debugProtectionFunctionName: this.debugProtectionFunctionName - }); - } - }]); - - return DebugProtectionFunctionIntervalNode; -}(AbstractCustomNode_1.AbstractCustomNode); -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.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], DebugProtectionFunctionIntervalNode); -exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; - -/***/ }), -/* 84 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function DebugProtectionFunctionIntervalTemplate() { - return "\n setInterval(function () {\n {debugProtectionFunctionName}();\n }, 4000);\n "; -} -exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; - -/***/ }), -/* 85 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(11); -var ObfuscationTarget_1 = __webpack_require__(13); -var Initializable_1 = __webpack_require__(3); -var DebuggerTemplate_1 = __webpack_require__(86); -var DebuggerTemplateNoEval_1 = __webpack_require__(87); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(88); -var AbstractCustomNode_1 = __webpack_require__(6); -var NodeUtils_1 = __webpack_require__(5); -var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { - _inherits(DebugProtectionFunctionNode, _AbstractCustomNode_); - - function DebugProtectionFunctionNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, DebugProtectionFunctionNode); - - return _possibleConstructorReturn(this, (DebugProtectionFunctionNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(DebugProtectionFunctionNode, [{ - key: "initialize", - value: function initialize(debugProtectionFunctionName) { - this.debugProtectionFunctionName = debugProtectionFunctionName; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getTemplate()); - } - }, { - key: "getTemplate", - value: function getTemplate() { - var debuggerTemplate = this.options.target !== ObfuscationTarget_1.ObfuscationTarget.Extension ? DebuggerTemplate_1.DebuggerTemplate() : DebuggerTemplateNoEval_1.DebuggerTemplateNoEval(); - return format(DebugProtectionFunctionTemplate_1.DebugProtectionFunctionTemplate(), { - debuggerTemplate: debuggerTemplate, - debugProtectionFunctionName: this.debugProtectionFunctionName - }); - } - }]); - - return DebugProtectionFunctionNode; -}(AbstractCustomNode_1.AbstractCustomNode); -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.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], DebugProtectionFunctionNode); -exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; - -/***/ }), -/* 86 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function DebuggerTemplate() { - return "\n if (typeof counter === 'string') {\n return (function (arg) {}.constructor('while (true) {}').apply('counter'));\n } else {\n if (('' + counter / counter)['length'] !== 1 || counter % 20 === 0) {\n (function () {return true;}.constructor('debu' + 'gger').call('action'));\n } else {\n (function () {return false;}.constructor('debu' + 'gger').apply('stateObject'));\n }\n \n }\n "; -} -exports.DebuggerTemplate = DebuggerTemplate; - -/***/ }), -/* 87 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function DebuggerTemplateNoEval() { - return "\n if (typeof counter === 'string') {\n var func = function () {\n while (true) {}\n };\n \n return func();\n } else {\n if (('' + counter / counter)['length'] !== 1 || counter % 20 === 0) {\n debugger;\n } else {\n debugger;\n }\n \n }\n "; -} -exports.DebuggerTemplateNoEval = DebuggerTemplateNoEval; - -/***/ }), -/* 88 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function DebugProtectionFunctionTemplate() { - return "\n function {debugProtectionFunctionName} (ret) {\n function debuggerProtection (counter) {\n \n {debuggerTemplate}\n \n debuggerProtection(++counter);\n }\n \n try {\n if (ret) {\n return debuggerProtection;\n } else {\n debuggerProtection(0);\n }\n } catch (y) {}\n }\n "; -} -exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; - -/***/ }), -/* 89 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(11); -var ObfuscationTarget_1 = __webpack_require__(13); -var Initializable_1 = __webpack_require__(3); -var DomainLockNodeTemplate_1 = __webpack_require__(90); -var GlobalVariableNoEvalTemplate_1 = __webpack_require__(31); -var AbstractCustomNode_1 = __webpack_require__(6); -var NodeUtils_1 = __webpack_require__(5); -var DomainLockNode = function (_AbstractCustomNode_) { - _inherits(DomainLockNode, _AbstractCustomNode_); - - function DomainLockNode(identifierNamesGeneratorFactory, randomGenerator, cryptUtils, options) { - _classCallCheck(this, DomainLockNode); - - var _this = _possibleConstructorReturn(this, (DomainLockNode.__proto__ || Object.getPrototypeOf(DomainLockNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - - _this.cryptUtils = cryptUtils; - return _this; - } - - _createClass(DomainLockNode, [{ - key: "initialize", - value: function initialize(callsControllerFunctionName) { - this.callsControllerFunctionName = callsControllerFunctionName; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getTemplate()); - } - }, { - key: "getTemplate", - value: function getTemplate() { - var domainsString = this.options.domainLock.join(';'); - - var _cryptUtils$hideStrin = this.cryptUtils.hideString(domainsString, domainsString.length * 3), - _cryptUtils$hideStrin2 = _slicedToArray(_cryptUtils$hideStrin, 2), - hiddenDomainsString = _cryptUtils$hideStrin2[0], - diff = _cryptUtils$hideStrin2[1]; - - var globalVariableTemplate = this.options.target !== ObfuscationTarget_1.ObfuscationTarget.Extension ? this.getGlobalVariableTemplate() : GlobalVariableNoEvalTemplate_1.GlobalVariableNoEvalTemplate(); - return format(DomainLockNodeTemplate_1.DomainLockNodeTemplate(), { - domainLockFunctionName: this.identifierNamesGenerator.generate(6), - diff: diff, - domains: hiddenDomainsString, - globalVariableTemplate: globalVariableTemplate, - singleNodeCallControllerFunctionName: this.callsControllerFunctionName - }); - } - }]); - - return DomainLockNode; -}(AbstractCustomNode_1.AbstractCustomNode); -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.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ICryptUtils)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object, Object])], DomainLockNode); -exports.DomainLockNode = DomainLockNode; - -/***/ }), -/* 90 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function DomainLockNodeTemplate() { - return "\n var {domainLockFunctionName} = {singleNodeCallControllerFunctionName}(this, function () {\n \n {globalVariableTemplate}\n \n var func = function () {\n return {\n key: 'item',\n value: 'attribute',\n getAttribute: function () {\n for (var i = 0; i < 1000; i--) {\n var isPositive = i > 0;\n \n switch (isPositive) {\n case true:\n return this.item + '_' + this.value + '_' + i;\n default:\n this.item + '_' + this.value;\n }\n }\n }()\n };\n };\n \n var regExp = new RegExp(\"[{diff}]\", \"g\");\n var domains = \"{domains}\".replace(regExp, \"\").split(\";\");\n var document;\n var domain;\n \n for (var d in that) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n document = d;\n \n break;\n }\n }\n\n for (var d1 in that[document]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n domain = d1;\n \n break;\n }\n }\n \n if ((!document && !domain) || (!that[document] && !that[document][domain])) {\n return;\n }\n \n var currentDomain = that[document][domain];\n\n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n data;\n } else {\n return;\n }\n \n func();\n });\n\n {domainLockFunctionName}();\n "; -} -exports.DomainLockNodeTemplate = DomainLockNodeTemplate; - -/***/ }), -/* 91 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var AbstractCustomNode_1 = __webpack_require__(6); -var Nodes_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(5); -var ExpressionWithOperatorControlFlowStorageCallNode = function (_AbstractCustomNode_) { - _inherits(ExpressionWithOperatorControlFlowStorageCallNode, _AbstractCustomNode_); - - function ExpressionWithOperatorControlFlowStorageCallNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, ExpressionWithOperatorControlFlowStorageCallNode); - - return _possibleConstructorReturn(this, (ExpressionWithOperatorControlFlowStorageCallNode.__proto__ || Object.getPrototypeOf(ExpressionWithOperatorControlFlowStorageCallNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(ExpressionWithOperatorControlFlowStorageCallNode, [{ - key: "initialize", - value: function initialize(controlFlowStorageName, controlFlowStorageKey, leftValue, rightValue) { - this.controlFlowStorageName = controlFlowStorageName; - this.controlFlowStorageKey = controlFlowStorageKey; - this.leftValue = leftValue; - this.rightValue = rightValue; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - var structure = Nodes_1.Nodes.getExpressionStatementNode(Nodes_1.Nodes.getCallExpressionNode(Nodes_1.Nodes.getMemberExpressionNode(Nodes_1.Nodes.getIdentifierNode(this.controlFlowStorageName), Nodes_1.Nodes.getIdentifierNode(this.controlFlowStorageKey)), [this.leftValue, this.rightValue])); - NodeUtils_1.NodeUtils.parentize(structure); - return [structure]; - } - }]); - - return ExpressionWithOperatorControlFlowStorageCallNode; -}(AbstractCustomNode_1.AbstractCustomNode); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ExpressionWithOperatorControlFlowStorageCallNode.prototype, "controlFlowStorageKey", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ExpressionWithOperatorControlFlowStorageCallNode.prototype, "controlFlowStorageName", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], ExpressionWithOperatorControlFlowStorageCallNode.prototype, "leftValue", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], ExpressionWithOperatorControlFlowStorageCallNode.prototype, "rightValue", void 0); -ExpressionWithOperatorControlFlowStorageCallNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], ExpressionWithOperatorControlFlowStorageCallNode); -exports.ExpressionWithOperatorControlFlowStorageCallNode = ExpressionWithOperatorControlFlowStorageCallNode; - -/***/ }), -/* 92 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var AbstractCustomNode_1 = __webpack_require__(6); -var Nodes_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(5); -var LogicalExpressionFunctionNode = function (_AbstractCustomNode_) { - _inherits(LogicalExpressionFunctionNode, _AbstractCustomNode_); - - function LogicalExpressionFunctionNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, LogicalExpressionFunctionNode); - - return _possibleConstructorReturn(this, (LogicalExpressionFunctionNode.__proto__ || Object.getPrototypeOf(LogicalExpressionFunctionNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(LogicalExpressionFunctionNode, [{ - key: "initialize", - value: function initialize(operator) { - this.operator = operator; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - var structure = Nodes_1.Nodes.getFunctionDeclarationNode(this.randomGenerator.getRandomString(3), [Nodes_1.Nodes.getIdentifierNode('x'), Nodes_1.Nodes.getIdentifierNode('y')], Nodes_1.Nodes.getBlockStatementNode([Nodes_1.Nodes.getReturnStatementNode(Nodes_1.Nodes.getLogicalExpressionNode(this.operator, Nodes_1.Nodes.getIdentifierNode('x'), Nodes_1.Nodes.getIdentifierNode('y')))])); - NodeUtils_1.NodeUtils.parentize(structure); - return [structure]; - } - }]); - - return LogicalExpressionFunctionNode; -}(AbstractCustomNode_1.AbstractCustomNode); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], LogicalExpressionFunctionNode.prototype, "operator", void 0); -LogicalExpressionFunctionNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], LogicalExpressionFunctionNode); -exports.LogicalExpressionFunctionNode = LogicalExpressionFunctionNode; - -/***/ }), -/* 93 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(11); -var ObfuscationEvent_1 = __webpack_require__(15); -var Initializable_1 = __webpack_require__(3); -var SingleNodeCallControllerTemplate_1 = __webpack_require__(94); -var NoCustomNodes_1 = __webpack_require__(26); -var AbstractCustomNode_1 = __webpack_require__(6); -var JavaScriptObfuscatorFacade_1 = __webpack_require__(17); -var NodeUtils_1 = __webpack_require__(5); -var NodeCallsControllerFunctionNode = function (_AbstractCustomNode_) { - _inherits(NodeCallsControllerFunctionNode, _AbstractCustomNode_); - - function NodeCallsControllerFunctionNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, NodeCallsControllerFunctionNode); - - return _possibleConstructorReturn(this, (NodeCallsControllerFunctionNode.__proto__ || Object.getPrototypeOf(NodeCallsControllerFunctionNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(NodeCallsControllerFunctionNode, [{ - key: "initialize", - value: function initialize(appendEvent, callsControllerFunctionName) { - this.appendEvent = appendEvent; - this.callsControllerFunctionName = callsControllerFunctionName; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getTemplate()); - } - }, { - key: "getTemplate", - value: function getTemplate() { - if (this.appendEvent === ObfuscationEvent_1.ObfuscationEvent.AfterObfuscation) { - return JavaScriptObfuscatorFacade_1.JavaScriptObfuscator.obfuscate(format(SingleNodeCallControllerTemplate_1.SingleNodeCallControllerTemplate(), { - singleNodeCallControllerFunctionName: this.callsControllerFunctionName - }), Object.assign({}, NoCustomNodes_1.NO_CUSTOM_NODES_PRESET, { identifierNamesGenerator: this.options.identifierNamesGenerator, seed: this.options.seed })).getObfuscatedCode(); - } - return format(SingleNodeCallControllerTemplate_1.SingleNodeCallControllerTemplate(), { - singleNodeCallControllerFunctionName: this.callsControllerFunctionName - }); - } - }]); - - return NodeCallsControllerFunctionNode; -}(AbstractCustomNode_1.AbstractCustomNode); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], NodeCallsControllerFunctionNode.prototype, "callsControllerFunctionName", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], NodeCallsControllerFunctionNode.prototype, "appendEvent", void 0); -NodeCallsControllerFunctionNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], NodeCallsControllerFunctionNode); -exports.NodeCallsControllerFunctionNode = NodeCallsControllerFunctionNode; - -/***/ }), -/* 94 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function SingleNodeCallControllerTemplate() { - return "\n var {singleNodeCallControllerFunctionName} = (function(){\n var firstCall = true;\n \n return function (context, fn){\n var rfn = firstCall ? function(){\n if(fn){\n var res = fn.apply(context, arguments);\n fn = null;\n return res;\n }\n } : function(){}\n \n firstCall = false;\n \n return rfn;\n }\n })();\n "; -} -exports.SingleNodeCallControllerTemplate = SingleNodeCallControllerTemplate; - -/***/ }), -/* 95 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(11); -var Initializable_1 = __webpack_require__(3); -var NoCustomNodes_1 = __webpack_require__(26); -var SelfDefendingTemplate_1 = __webpack_require__(96); -var AbstractCustomNode_1 = __webpack_require__(6); -var JavaScriptObfuscatorFacade_1 = __webpack_require__(17); -var NodeUtils_1 = __webpack_require__(5); -var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { - _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); - - function SelfDefendingUnicodeNode(identifierNamesGeneratorFactory, randomGenerator, escapeSequenceEncoder, options) { - _classCallCheck(this, SelfDefendingUnicodeNode); - - var _this = _possibleConstructorReturn(this, (SelfDefendingUnicodeNode.__proto__ || Object.getPrototypeOf(SelfDefendingUnicodeNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - - _this.escapeSequenceEncoder = escapeSequenceEncoder; - return _this; - } - - _createClass(SelfDefendingUnicodeNode, [{ - key: "initialize", - value: function initialize(callsControllerFunctionName) { - this.callsControllerFunctionName = callsControllerFunctionName; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getTemplate()); - } - }, { - key: "getTemplate", - value: function getTemplate() { - return JavaScriptObfuscatorFacade_1.JavaScriptObfuscator.obfuscate(format(SelfDefendingTemplate_1.SelfDefendingTemplate(this.escapeSequenceEncoder), { - selfDefendingFunctionName: this.identifierNamesGenerator.generate(6), - singleNodeCallControllerFunctionName: this.callsControllerFunctionName - }), Object.assign({}, NoCustomNodes_1.NO_CUSTOM_NODES_PRESET, { identifierNamesGenerator: this.options.identifierNamesGenerator, seed: this.options.seed, unicodeEscapeSequence: true })).getObfuscatedCode(); - } - }]); - - return SelfDefendingUnicodeNode; -}(AbstractCustomNode_1.AbstractCustomNode); -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.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IEscapeSequenceEncoder)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object, Object])], SelfDefendingUnicodeNode); -exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; - -/***/ }), -/* 96 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function SelfDefendingTemplate(escapeSequenceEncoder) { - 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('" + escapeSequenceEncoder.encode("\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}", true) + "');\n \n return !regExp.test(func1.toString());\n };\n \n var test2 = function () {\n var regExp = new RegExp('" + escapeSequenceEncoder.encode("(\\\\[x|u](\\w){2,4})+", true) + "');\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; - -/***/ }), -/* 97 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(11); -var ObfuscationTarget_1 = __webpack_require__(13); -var StringArrayEncoding_1 = __webpack_require__(25); -var Initializable_1 = __webpack_require__(3); -var NoCustomNodes_1 = __webpack_require__(26); -var AtobTemplate_1 = __webpack_require__(98); -var GlobalVariableNoEvalTemplate_1 = __webpack_require__(31); -var Rc4Template_1 = __webpack_require__(99); -var SelfDefendingTemplate_1 = __webpack_require__(100); -var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(101); -var StringArrayCallsWrapperTemplate_1 = __webpack_require__(102); -var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(103); -var AbstractCustomNode_1 = __webpack_require__(6); -var JavaScriptObfuscatorFacade_1 = __webpack_require__(17); -var NodeUtils_1 = __webpack_require__(5); -var StringArrayCallsWrapper = function (_AbstractCustomNode_) { - _inherits(StringArrayCallsWrapper, _AbstractCustomNode_); - - function StringArrayCallsWrapper(identifierNamesGeneratorFactory, randomGenerator, escapeSequenceEncoder, options) { - _classCallCheck(this, StringArrayCallsWrapper); - - var _this = _possibleConstructorReturn(this, (StringArrayCallsWrapper.__proto__ || Object.getPrototypeOf(StringArrayCallsWrapper)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - - _this.escapeSequenceEncoder = escapeSequenceEncoder; - return _this; - } - - _createClass(StringArrayCallsWrapper, [{ - key: "initialize", - value: function initialize(stringArrayName, stringArrayCallsWrapperName) { - this.stringArrayName = stringArrayName; - this.stringArrayCallsWrapperName = stringArrayCallsWrapperName; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getTemplate()); - } - }, { - key: "getTemplate", - value: function getTemplate() { - var decodeNodeTemplate = this.getDecodeStringArrayTemplate(); - return JavaScriptObfuscatorFacade_1.JavaScriptObfuscator.obfuscate(format(StringArrayCallsWrapperTemplate_1.StringArrayCallsWrapperTemplate(), { - decodeNodeTemplate: decodeNodeTemplate, - stringArrayCallsWrapperName: this.stringArrayCallsWrapperName, - stringArrayName: this.stringArrayName - }), Object.assign({}, NoCustomNodes_1.NO_CUSTOM_NODES_PRESET, { identifierNamesGenerator: this.options.identifierNamesGenerator, seed: this.options.seed })).getObfuscatedCode(); - } - }, { - key: "getDecodeStringArrayTemplate", - value: function getDecodeStringArrayTemplate() { - var globalVariableTemplate = this.options.target !== ObfuscationTarget_1.ObfuscationTarget.Extension ? this.getGlobalVariableTemplate() : GlobalVariableNoEvalTemplate_1.GlobalVariableNoEvalTemplate(); - var atobPolyfill = format(AtobTemplate_1.AtobTemplate(), { globalVariableTemplate: globalVariableTemplate }); - var decodeStringArrayTemplate = '', - selfDefendingCode = ''; - if (this.options.selfDefending) { - selfDefendingCode = format(SelfDefendingTemplate_1.SelfDefendingTemplate(this.randomGenerator, this.escapeSequenceEncoder), { - stringArrayCallsWrapperName: this.stringArrayCallsWrapperName, - stringArrayName: this.stringArrayName - }); - } - switch (this.options.stringArrayEncoding) { - case StringArrayEncoding_1.StringArrayEncoding.Rc4: - decodeStringArrayTemplate = format(StringArrayRC4DecodeNodeTemplate_1.StringArrayRc4DecodeNodeTemplate(this.randomGenerator), { - atobPolyfill: atobPolyfill, - rc4Polyfill: Rc4Template_1.Rc4Template(), - selfDefendingCode: selfDefendingCode, - stringArrayCallsWrapperName: this.stringArrayCallsWrapperName - }); - break; - case StringArrayEncoding_1.StringArrayEncoding.Base64: - decodeStringArrayTemplate = format(StringArrayBase64DecodeNodeTemplate_1.StringArrayBase64DecodeNodeTemplate(this.randomGenerator), { - atobPolyfill: atobPolyfill, - selfDefendingCode: selfDefendingCode, - stringArrayCallsWrapperName: this.stringArrayCallsWrapperName - }); - break; - } - return decodeStringArrayTemplate; - } - }]); - - return StringArrayCallsWrapper; -}(AbstractCustomNode_1.AbstractCustomNode); -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.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IEscapeSequenceEncoder)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object, Object])], StringArrayCallsWrapper); -exports.StringArrayCallsWrapper = StringArrayCallsWrapper; - -/***/ }), -/* 98 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function AtobTemplate() { - return "\n (function () {\n {globalVariableTemplate}\n \n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n that.atob || (\n that.atob = function(input) {\n var str = String(input).replace(/=+$/, '');\n for (\n var bc = 0, bs, buffer, idx = 0, output = '';\n buffer = str.charAt(idx++);\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n return output;\n });\n })();\n "; -} -exports.AtobTemplate = AtobTemplate; - -/***/ }), -/* 99 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function Rc4Template() { - return "\n var rc4 = function (str, key) {\n var s = [], j = 0, x, res = '', newStr = '';\n \n str = atob(str);\n \n for (var k = 0, length = str.length; k < length; k++) {\n newStr += '%' + ('00' + str.charCodeAt(k).toString(16)).slice(-2);\n }\n \n str = decodeURIComponent(newStr);\n \t \n\t for (var i = 0; i < 256; i++) {\n s[i] = i;\n }\n \n for (i = 0; i < 256; i++) {\n j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n }\n \n i = 0;\n j = 0;\n \n for (var y = 0; y < str.length; y++) {\n i = (i + 1) % 256;\n j = (j + s[i]) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);\n }\n \n return res;\n }\n "; -} -exports.Rc4Template = Rc4Template; - -/***/ }), -/* 100 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function SelfDefendingTemplate(randomGenerator, escapeSequenceEncoder) { - var identifierLength = 6; - var rc4BytesIdentifier = randomGenerator.getRandomString(identifierLength); - var statesIdentifier = randomGenerator.getRandomString(identifierLength); - var newStateIdentifier = randomGenerator.getRandomString(identifierLength); - var firstStateIdentifier = randomGenerator.getRandomString(identifierLength); - var secondStateIdentifier = randomGenerator.getRandomString(identifierLength); - var checkStateIdentifier = randomGenerator.getRandomString(identifierLength); - var runStateIdentifier = randomGenerator.getRandomString(identifierLength); - var getStateIdentifier = randomGenerator.getRandomString(identifierLength); - var stateResultIdentifier = randomGenerator.getRandomString(identifierLength); - return "\n var StatesClass = function (" + rc4BytesIdentifier + ") {\n this." + rc4BytesIdentifier + " = " + rc4BytesIdentifier + ";\n this." + statesIdentifier + " = [1, 0, 0];\n this." + newStateIdentifier + " = function(){return 'newState';};\n this." + firstStateIdentifier + " = '" + escapeSequenceEncoder.encode("\\w+ *\\(\\) *{\\w+ *", true) + "';\n this." + secondStateIdentifier + " = '" + escapeSequenceEncoder.encode("['|\"].+['|\"];? *}", true) + "';\n };\n \n StatesClass.prototype." + checkStateIdentifier + " = function () {\n var regExp = new RegExp(this." + firstStateIdentifier + " + this." + secondStateIdentifier + ");\n var expression = regExp.test(this." + newStateIdentifier + ".toString())\n ? --this." + statesIdentifier + "[1]\n : --this." + statesIdentifier + "[0];\n \n return this." + runStateIdentifier + "(expression);\n };\n \n StatesClass.prototype." + runStateIdentifier + " = function (" + stateResultIdentifier + ") {\n if (!Boolean(~" + stateResultIdentifier + ")) {\n return " + stateResultIdentifier + ";\n }\n \n return this." + getStateIdentifier + "(this." + rc4BytesIdentifier + ");\n };\n\n StatesClass.prototype." + getStateIdentifier + " = function (" + rc4BytesIdentifier + ") {\n for (var i = 0, len = this." + statesIdentifier + ".length; i < len; i++) {\n this." + statesIdentifier + ".push(Math.round(Math.random()));\n len = this." + statesIdentifier + ".length;\n }\n \n return " + rc4BytesIdentifier + "(this." + statesIdentifier + "[0]);\n };\n\n new StatesClass({stringArrayCallsWrapperName})." + checkStateIdentifier + "();\n "; -} -exports.SelfDefendingTemplate = SelfDefendingTemplate; - -/***/ }), -/* 101 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function StringArrayBase64DecodeNodeTemplate(randomGenerator) { - var identifierLength = 6; - var initializedIdentifier = randomGenerator.getRandomString(identifierLength); - var base64DecodeFunctionIdentifier = randomGenerator.getRandomString(identifierLength); - var dataIdentifier = randomGenerator.getRandomString(identifierLength); - return "\n if ({stringArrayCallsWrapperName}." + initializedIdentifier + " === undefined) {\n {atobPolyfill}\n \n {stringArrayCallsWrapperName}." + base64DecodeFunctionIdentifier + " = function (str) {\n var string = atob(str);\n var newStringChars = [];\n \n for (var i = 0, length = string.length; i < length; i++) {\n newStringChars += '%' + ('00' + string.charCodeAt(i).toString(16)).slice(-2);\n }\n \n return decodeURIComponent(newStringChars);\n };\n \n {stringArrayCallsWrapperName}." + dataIdentifier + " = {};\n \n {stringArrayCallsWrapperName}." + initializedIdentifier + " = true;\n }\n \n var cachedValue = {stringArrayCallsWrapperName}." + dataIdentifier + "[index];\n \n if (cachedValue === undefined) {\n {selfDefendingCode}\n \n value = {stringArrayCallsWrapperName}." + base64DecodeFunctionIdentifier + "(value);\n {stringArrayCallsWrapperName}." + dataIdentifier + "[index] = value;\n } else {\n value = cachedValue;\n }\n "; -} -exports.StringArrayBase64DecodeNodeTemplate = StringArrayBase64DecodeNodeTemplate; - -/***/ }), -/* 102 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function StringArrayCallsWrapperTemplate() { - return "\n var {stringArrayCallsWrapperName} = function (index, key) {\n index = index - 0;\n \n var value = {stringArrayName}[index];\n \n {decodeNodeTemplate}\n \n return value;\n };\n "; -} -exports.StringArrayCallsWrapperTemplate = StringArrayCallsWrapperTemplate; - -/***/ }), -/* 103 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function StringArrayRc4DecodeNodeTemplate(randomGenerator) { - var identifierLength = 6; - var initializedIdentifier = randomGenerator.getRandomString(identifierLength); - var rc4Identifier = randomGenerator.getRandomString(identifierLength); - var dataIdentifier = randomGenerator.getRandomString(identifierLength); - var onceIdentifier = randomGenerator.getRandomString(identifierLength); - return "\n if ({stringArrayCallsWrapperName}." + initializedIdentifier + " === undefined) {\n {atobPolyfill}\n \n {rc4Polyfill}\n {stringArrayCallsWrapperName}." + rc4Identifier + " = rc4;\n \n {stringArrayCallsWrapperName}." + dataIdentifier + " = {};\n \n {stringArrayCallsWrapperName}." + initializedIdentifier + " = true;\n }\n \n var cachedValue = {stringArrayCallsWrapperName}." + dataIdentifier + "[index];\n\n if (cachedValue === undefined) {\n if ({stringArrayCallsWrapperName}." + onceIdentifier + " === undefined) {\n {selfDefendingCode}\n \n {stringArrayCallsWrapperName}." + onceIdentifier + " = true;\n }\n \n value = {stringArrayCallsWrapperName}." + rc4Identifier + "(value, key);\n {stringArrayCallsWrapperName}." + dataIdentifier + "[index] = value;\n } else {\n value = cachedValue;\n }\n "; -} -exports.StringArrayRc4DecodeNodeTemplate = StringArrayRc4DecodeNodeTemplate; - -/***/ }), -/* 104 */ -/***/ (function(module, exports, __webpack_require__) { - -"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); } }); - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(11); -var Initializable_1 = __webpack_require__(3); -var StringArrayTemplate_1 = __webpack_require__(105); -var AbstractCustomNode_1 = __webpack_require__(6); -var NodeUtils_1 = __webpack_require__(5); -var StringArrayNode = function (_AbstractCustomNode_) { - _inherits(StringArrayNode, _AbstractCustomNode_); - - function StringArrayNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, StringArrayNode); - - return _possibleConstructorReturn(this, (StringArrayNode.__proto__ || Object.getPrototypeOf(StringArrayNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(StringArrayNode, [{ - key: "initialize", - value: function initialize(stringArrayStorage, stringArrayName, stringArrayRotateValue) { - this.stringArrayStorage = stringArrayStorage; - this.stringArrayName = stringArrayName; - this.stringArrayRotateValue = stringArrayRotateValue; - } - }, { - key: "getNode", - value: function getNode() { - this.stringArrayStorage.rotateArray(this.stringArrayRotateValue); - return _get(StringArrayNode.prototype.__proto__ || Object.getPrototypeOf(StringArrayNode.prototype), "getNode", this).call(this); - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getTemplate()); - } - }, { - 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.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], StringArrayNode); -exports.StringArrayNode = StringArrayNode; - -/***/ }), -/* 105 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function StringArrayTemplate() { - return "\n var {stringArrayName} = [{stringArray}];\n "; -} -exports.StringArrayTemplate = StringArrayTemplate; - -/***/ }), -/* 106 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var format = __webpack_require__(11); -var Initializable_1 = __webpack_require__(3); -var NoCustomNodes_1 = __webpack_require__(26); -var SelfDefendingTemplate_1 = __webpack_require__(107); -var StringArrayRotateFunctionTemplate_1 = __webpack_require__(108); -var AbstractCustomNode_1 = __webpack_require__(6); -var JavaScriptObfuscatorFacade_1 = __webpack_require__(17); -var NodeUtils_1 = __webpack_require__(5); -var Utils_1 = __webpack_require__(21); -var StringArrayRotateFunctionNode = function (_AbstractCustomNode_) { - _inherits(StringArrayRotateFunctionNode, _AbstractCustomNode_); - - function StringArrayRotateFunctionNode(identifierNamesGeneratorFactory, randomGenerator, escapeSequenceEncoder, options) { - _classCallCheck(this, StringArrayRotateFunctionNode); - - var _this = _possibleConstructorReturn(this, (StringArrayRotateFunctionNode.__proto__ || Object.getPrototypeOf(StringArrayRotateFunctionNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - - _this.escapeSequenceEncoder = escapeSequenceEncoder; - return _this; - } - - _createClass(StringArrayRotateFunctionNode, [{ - key: "initialize", - value: function initialize(stringArrayName, stringArrayRotateValue) { - this.stringArrayName = stringArrayName; - this.stringArrayRotateValue = stringArrayRotateValue; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - return NodeUtils_1.NodeUtils.convertCodeToStructure(this.getTemplate()); - } - }, { - key: "getTemplate", - value: function getTemplate() { - var timesName = this.identifierNamesGenerator.generate(6); - var whileFunctionName = this.identifierNamesGenerator.generate(6); - var code = ''; - if (this.options.selfDefending) { - code = format(SelfDefendingTemplate_1.SelfDefendingTemplate(this.escapeSequenceEncoder), { - timesName: timesName, - whileFunctionName: whileFunctionName - }); - } else { - code = whileFunctionName + "(++" + timesName + ")"; - } - return JavaScriptObfuscatorFacade_1.JavaScriptObfuscator.obfuscate(format(StringArrayRotateFunctionTemplate_1.StringArrayRotateFunctionTemplate(), { - code: code, - timesName: timesName, - stringArrayName: this.stringArrayName, - stringArrayRotateValue: Utils_1.Utils.decToHex(this.stringArrayRotateValue), - whileFunctionName: whileFunctionName - }), Object.assign({}, NoCustomNodes_1.NO_CUSTOM_NODES_PRESET, { identifierNamesGenerator: this.options.identifierNamesGenerator, seed: this.options.seed })).getObfuscatedCode(); - } - }]); - - return StringArrayRotateFunctionNode; -}(AbstractCustomNode_1.AbstractCustomNode); -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.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IEscapeSequenceEncoder)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object, Object])], StringArrayRotateFunctionNode); -exports.StringArrayRotateFunctionNode = StringArrayRotateFunctionNode; - -/***/ }), -/* 107 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function SelfDefendingTemplate(escapeSequenceEncoder) { - 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('" + escapeSequenceEncoder.encode("\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}", true) + "');\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; - -/***/ }), -/* 108 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -function StringArrayRotateFunctionTemplate() { - return "\n (function (array, {timesName}) {\n var {whileFunctionName} = function (times) {\n while (--times) {\n array['push'](array['shift']());\n }\n };\n \n {code}\n })({stringArrayName}, 0x{stringArrayRotateValue});\n "; -} -exports.StringArrayRotateFunctionTemplate = StringArrayRotateFunctionTemplate; - -/***/ }), -/* 109 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var JSFuck; -(function (JSFuck) { - JSFuck["False"] = "![]"; - JSFuck["True"] = "!![]"; - JSFuck["a"] = "(false+\"\")[1]"; - JSFuck["b"] = "([][\"entries\"]()+\"\")[2]"; - JSFuck["c"] = "([][\"fill\"]+\"\")[3]"; - JSFuck["d"] = "(undefined+\"\")[2]"; - JSFuck["e"] = "(true+\"\")[3]"; - JSFuck["f"] = "(false+\"\")[0]"; - JSFuck["g"] = "(false+[0]+String)[20]"; - JSFuck["h"] = "(+(101))[\"toString\"](21)[1]"; - JSFuck["i"] = "([false]+undefined)[10]"; - JSFuck["j"] = "([][\"entries\"]()+\"\")[3]"; - JSFuck["k"] = "(+(20))[\"toString\"](21)"; - JSFuck["l"] = "(false+\"\")[2]"; - JSFuck["m"] = "(Number+\"\")[11]"; - JSFuck["n"] = "(undefined+\"\")[1]"; - JSFuck["o"] = "(true+[][\"fill\"])[10]"; - JSFuck["p"] = "(+(211))[\"toString\"](31)[1]"; - JSFuck["q"] = "(+(212))[\"toString\"](31)[1]"; - JSFuck["r"] = "(true+\"\")[1]"; - JSFuck["s"] = "(false+\"\")[3]"; - JSFuck["t"] = "(true+\"\")[0]"; - JSFuck["u"] = "(undefined+\"\")[0]"; - JSFuck["v"] = "(+(31))[\"toString\"](32)"; - JSFuck["w"] = "(+(32))[\"toString\"](33)"; - JSFuck["x"] = "(+(101))[\"toString\"](34)[1]"; - JSFuck["y"] = "(NaN+[Infinity])[10]"; - JSFuck["z"] = "(+(35))[\"toString\"](36)"; - JSFuck["A"] = "(+[]+Array)[10]"; - JSFuck["B"] = "(+[]+Boolean)[10]"; - JSFuck["C"] = "Function(\"return escape\")()((\"\")[\"italics\"]())[2]"; - JSFuck["D"] = "Function(\"return escape\")()([][\"fill\"])[\"slice\"](\"-1\")"; - JSFuck["E"] = "(RegExp+\"\")[12]"; - JSFuck["F"] = "(+[]+Function)[10]"; - JSFuck["G"] = "(false+Function(\"return Date\")()())[30]"; - JSFuck["H"] = "'H'"; - JSFuck["I"] = "(Infinity+\"\")[0]"; - JSFuck["J"] = "'J'"; - JSFuck["K"] = "'K'"; - JSFuck["L"] = "'L'"; - JSFuck["M"] = "(true+Function(\"return Date\")()())[30]"; - JSFuck["N"] = "(NaN+\"\")[0]"; - JSFuck["O"] = "(NaN+Function(\"return{}\")())[11]"; - JSFuck["P"] = "'P'"; - JSFuck["Q"] = "'Q'"; - JSFuck["R"] = "(+[]+RegExp)[10]"; - JSFuck["S"] = "(+[]+String)[10]"; - JSFuck["T"] = "(NaN+Function(\"return Date\")()())[30]"; - JSFuck["U"] = "(NaN+Function(\"return{}\")()[\"toString\"][\"call\"]())[11]"; - JSFuck["V"] = "'V'"; - JSFuck["W"] = "'W'"; - JSFuck["X"] = "'X'"; - JSFuck["Y"] = "'Y'"; - JSFuck["Z"] = "'Z'"; -})(JSFuck = exports.JSFuck || (exports.JSFuck = {})); - -/***/ }), -/* 110 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var AbstractCustomNode_1 = __webpack_require__(6); -var Nodes_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(5); -var StringLiteralControlFlowStorageCallNode = function (_AbstractCustomNode_) { - _inherits(StringLiteralControlFlowStorageCallNode, _AbstractCustomNode_); - - function StringLiteralControlFlowStorageCallNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, StringLiteralControlFlowStorageCallNode); - - return _possibleConstructorReturn(this, (StringLiteralControlFlowStorageCallNode.__proto__ || Object.getPrototypeOf(StringLiteralControlFlowStorageCallNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(StringLiteralControlFlowStorageCallNode, [{ - key: "initialize", - value: function initialize(controlFlowStorageName, controlFlowStorageKey) { - this.controlFlowStorageName = controlFlowStorageName; - this.controlFlowStorageKey = controlFlowStorageKey; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - var structure = Nodes_1.Nodes.getExpressionStatementNode(Nodes_1.Nodes.getMemberExpressionNode(Nodes_1.Nodes.getIdentifierNode(this.controlFlowStorageName), Nodes_1.Nodes.getIdentifierNode(this.controlFlowStorageKey))); - NodeUtils_1.NodeUtils.parentize(structure); - return [structure]; - } - }]); - - return StringLiteralControlFlowStorageCallNode; -}(AbstractCustomNode_1.AbstractCustomNode); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], StringLiteralControlFlowStorageCallNode.prototype, "controlFlowStorageKey", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], StringLiteralControlFlowStorageCallNode.prototype, "controlFlowStorageName", void 0); -StringLiteralControlFlowStorageCallNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], StringLiteralControlFlowStorageCallNode); -exports.StringLiteralControlFlowStorageCallNode = StringLiteralControlFlowStorageCallNode; - -/***/ }), -/* 111 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var AbstractCustomNode_1 = __webpack_require__(6); -var Nodes_1 = __webpack_require__(9); -var StringLiteralNode = function (_AbstractCustomNode_) { - _inherits(StringLiteralNode, _AbstractCustomNode_); - - function StringLiteralNode(identifierNamesGeneratorFactory, randomGenerator, options) { - _classCallCheck(this, StringLiteralNode); - - return _possibleConstructorReturn(this, (StringLiteralNode.__proto__ || Object.getPrototypeOf(StringLiteralNode)).call(this, identifierNamesGeneratorFactory, randomGenerator, options)); - } - - _createClass(StringLiteralNode, [{ - key: "initialize", - value: function initialize(literalValue) { - this.literalValue = literalValue; - } - }, { - key: "getNodeStructure", - value: function getNodeStructure() { - var structure = Nodes_1.Nodes.getLiteralNode(this.literalValue); - return [structure]; - } - }]); - - return StringLiteralNode; -}(AbstractCustomNode_1.AbstractCustomNode); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], StringLiteralNode.prototype, "literalValue", void 0); -StringLiteralNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], StringLiteralNode); -exports.StringLiteralNode = StringLiteralNode; - -/***/ }), -/* 112 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var IdentifierNamesGenerator_1 = __webpack_require__(23); -var HexadecimalIdentifierNamesGenerator_1 = __webpack_require__(113); -var MangledIdentifierNamesGenerator_1 = __webpack_require__(114); -exports.generatorsModule = new inversify_1.ContainerModule(function (bind) { - bind(ServiceIdentifiers_1.ServiceIdentifiers.IIdentifierNamesGenerator).to(HexadecimalIdentifierNamesGenerator_1.HexadecimalIdentifierNamesGenerator).inSingletonScope().whenTargetNamed(IdentifierNamesGenerator_1.IdentifierNamesGenerator.HexadecimalIdentifierNamesGenerator); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IIdentifierNamesGenerator).to(MangledIdentifierNamesGenerator_1.MangledIdentifierNamesGenerator).inSingletonScope().whenTargetNamed(IdentifierNamesGenerator_1.IdentifierNamesGenerator.MangledIdentifierNamesGenerator); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator).toFactory(function (context) { - var cachedIdentifierNamesGenerator = null; - return function (options) { - if (cachedIdentifierNamesGenerator) { - return cachedIdentifierNamesGenerator; - } - var identifierNamesGenerator = void 0; - switch (options.identifierNamesGenerator) { - case IdentifierNamesGenerator_1.IdentifierNamesGenerator.MangledIdentifierNamesGenerator: - identifierNamesGenerator = context.container.getNamed(ServiceIdentifiers_1.ServiceIdentifiers.IIdentifierNamesGenerator, IdentifierNamesGenerator_1.IdentifierNamesGenerator.MangledIdentifierNamesGenerator); - break; - case IdentifierNamesGenerator_1.IdentifierNamesGenerator.HexadecimalIdentifierNamesGenerator: - default: - identifierNamesGenerator = context.container.getNamed(ServiceIdentifiers_1.ServiceIdentifiers.IIdentifierNamesGenerator, IdentifierNamesGenerator_1.IdentifierNamesGenerator.HexadecimalIdentifierNamesGenerator); - } - cachedIdentifierNamesGenerator = identifierNamesGenerator; - return identifierNamesGenerator; - }; - }); -}); - -/***/ }), -/* 113 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractIdentifierNamesGenerator_1 = __webpack_require__(40); -var Utils_1 = __webpack_require__(21); -var HexadecimalIdentifierNamesGenerator = function (_AbstractIdentifierNa) { - _inherits(HexadecimalIdentifierNamesGenerator, _AbstractIdentifierNa); - - function HexadecimalIdentifierNamesGenerator(randomGenerator, options) { - _classCallCheck(this, HexadecimalIdentifierNamesGenerator); - - var _this = _possibleConstructorReturn(this, (HexadecimalIdentifierNamesGenerator.__proto__ || Object.getPrototypeOf(HexadecimalIdentifierNamesGenerator)).call(this, randomGenerator, options)); - - _this.randomVariableNameSet = new Set(); - return _this; - } - - _createClass(HexadecimalIdentifierNamesGenerator, [{ - key: "generate", - value: function generate(length) { - var prefix = "_" + Utils_1.Utils.hexadecimalPrefix; - var rangeMinInteger = 10000; - var rangeMaxInteger = 99999999; - var randomInteger = this.randomGenerator.getRandomInteger(rangeMinInteger, rangeMaxInteger); - var hexadecimalNumber = Utils_1.Utils.decToHex(randomInteger); - var randomVariableName = "" + prefix + hexadecimalNumber.substr(0, length); - if (this.randomVariableNameSet.has(randomVariableName)) { - return this.generate(length); - } - this.randomVariableNameSet.add(randomVariableName); - return randomVariableName; - } - }]); - - return HexadecimalIdentifierNamesGenerator; -}(AbstractIdentifierNamesGenerator_1.AbstractIdentifierNamesGenerator); -HexadecimalIdentifierNamesGenerator = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], HexadecimalIdentifierNamesGenerator); -exports.HexadecimalIdentifierNamesGenerator = HexadecimalIdentifierNamesGenerator; - -/***/ }), -/* 114 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractIdentifierNamesGenerator_1 = __webpack_require__(40); -var MangledIdentifierNamesGenerator = MangledIdentifierNamesGenerator_1 = function (_AbstractIdentifierNa) { - _inherits(MangledIdentifierNamesGenerator, _AbstractIdentifierNa); - - function MangledIdentifierNamesGenerator(randomGenerator, options) { - _classCallCheck(this, MangledIdentifierNamesGenerator); - - var _this = _possibleConstructorReturn(this, (MangledIdentifierNamesGenerator.__proto__ || Object.getPrototypeOf(MangledIdentifierNamesGenerator)).call(this, randomGenerator, options)); - - _this.previousMangledName = MangledIdentifierNamesGenerator_1.initMangledNameCharacter; - return _this; - } - - _createClass(MangledIdentifierNamesGenerator, [{ - key: "generate", - value: function generate(length) { - var newName = MangledIdentifierNamesGenerator_1.generateNewMangledName(this.previousMangledName); - this.previousMangledName = newName; - return newName; - } - }], [{ - key: "generateNewMangledName", - value: function generateNewMangledName(previousMangledName) { - var generateNewMangledName = function generateNewMangledName(name) { - var nameSequence = MangledIdentifierNamesGenerator_1.nameSequence; - var zeroSequenceCache = []; - var nameLength = name.length; - var zeroSequence = function zeroSequence(num) { - var result = zeroSequenceCache[num]; - if (result !== undefined) { - return result; - } - result = '0'.repeat(num); - zeroSequenceCache[num] = result; - return result; - }; - var index = nameLength - 1; - do { - var character = name.charAt(index); - var indexInSequence = nameSequence.indexOf(character); - var lastNameSequenceIndex = nameSequence.length - 1; - if (indexInSequence !== lastNameSequenceIndex) { - var previousNamePart = name.substring(0, index); - var nextCharacter = nameSequence[indexInSequence + 1]; - var zeroSequenceCharacters = zeroSequence(nameLength - (index + 1)); - return previousNamePart + nextCharacter + zeroSequenceCharacters; - } - --index; - } while (index >= 0); - return "a" + zeroSequence(nameLength); - }; - var newMangledName = generateNewMangledName(previousMangledName); - if (!MangledIdentifierNamesGenerator_1.validateMangledName(newMangledName)) { - newMangledName = MangledIdentifierNamesGenerator_1.generateNewMangledName(newMangledName); - } - return newMangledName; - } - }, { - key: "validateMangledName", - value: function validateMangledName(mangledName) { - return !(MangledIdentifierNamesGenerator_1.reservedNames.indexOf(mangledName) !== -1); - } - }]); - - return MangledIdentifierNamesGenerator; -}(AbstractIdentifierNamesGenerator_1.AbstractIdentifierNamesGenerator); -MangledIdentifierNamesGenerator.initMangledNameCharacter = '9'; -MangledIdentifierNamesGenerator.nameSequence = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); -MangledIdentifierNamesGenerator.reservedNames = ['byte', 'case', 'char', 'do', 'else', 'enum', 'eval', 'for', 'goto', 'if', 'in', 'int', 'let', 'long', 'new', 'null', 'this', 'true', 'try', 'var', 'void', 'with']; -MangledIdentifierNamesGenerator = MangledIdentifierNamesGenerator_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], MangledIdentifierNamesGenerator); -exports.MangledIdentifierNamesGenerator = MangledIdentifierNamesGenerator; -var MangledIdentifierNamesGenerator_1; - -/***/ }), -/* 115 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var InversifyContainerFacade_1 = __webpack_require__(14); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -exports.nodeTransformersModule = new inversify_1.ContainerModule(function (bind) { - bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__INodeTransformer).toFactory(InversifyContainerFacade_1.InversifyContainerFacade.getCacheFactory(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer)); -}); - -/***/ }), -/* 116 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var InversifyContainerFacade_1 = __webpack_require__(14); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var IdentifierObfuscatingReplacer_1 = __webpack_require__(16); -var LiteralObfuscatingReplacer_1 = __webpack_require__(41); -var NodeTransformer_1 = __webpack_require__(18); -var BaseIdentifierObfuscatingReplacer_1 = __webpack_require__(117); -var BooleanLiteralObfuscatingReplacer_1 = __webpack_require__(118); -var CatchClauseTransformer_1 = __webpack_require__(120); -var ClassDeclarationTransformer_1 = __webpack_require__(121); -var FunctionDeclarationTransformer_1 = __webpack_require__(122); -var FunctionTransformer_1 = __webpack_require__(123); -var LabeledStatementTransformer_1 = __webpack_require__(124); -var LiteralTransformer_1 = __webpack_require__(125); -var NumberLiteralObfuscatingReplacer_1 = __webpack_require__(126); -var ObjectExpressionTransformer_1 = __webpack_require__(127); -var StringLiteralObfuscatingReplacer_1 = __webpack_require__(128); -var VariableDeclarationTransformer_1 = __webpack_require__(129); -exports.obfuscatingTransformersModule = new inversify_1.ContainerModule(function (bind) { - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(CatchClauseTransformer_1.CatchClauseTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.CatchClauseTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(ClassDeclarationTransformer_1.ClassDeclarationTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.ClassDeclarationTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(FunctionDeclarationTransformer_1.FunctionDeclarationTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.FunctionDeclarationTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(FunctionTransformer_1.FunctionTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.FunctionTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(LabeledStatementTransformer_1.LabeledStatementTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.LabeledStatementTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(LiteralTransformer_1.LiteralTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.LiteralTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(ObjectExpressionTransformer_1.ObjectExpressionTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.ObjectExpressionTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(VariableDeclarationTransformer_1.VariableDeclarationTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.VariableDeclarationTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatingReplacer).to(BooleanLiteralObfuscatingReplacer_1.BooleanLiteralObfuscatingReplacer).whenTargetNamed(LiteralObfuscatingReplacer_1.LiteralObfuscatingReplacer.BooleanLiteralObfuscatingReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatingReplacer).to(NumberLiteralObfuscatingReplacer_1.NumberLiteralObfuscatingReplacer).whenTargetNamed(LiteralObfuscatingReplacer_1.LiteralObfuscatingReplacer.NumberLiteralObfuscatingReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatingReplacer).to(StringLiteralObfuscatingReplacer_1.StringLiteralObfuscatingReplacer).whenTargetNamed(LiteralObfuscatingReplacer_1.LiteralObfuscatingReplacer.StringLiteralObfuscatingReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IIdentifierObfuscatingReplacer).to(BaseIdentifierObfuscatingReplacer_1.BaseIdentifierObfuscatingReplacer).whenTargetNamed(IdentifierObfuscatingReplacer_1.IdentifierObfuscatingReplacer.BaseIdentifierObfuscatingReplacer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IObfuscatingReplacer).toFactory(InversifyContainerFacade_1.InversifyContainerFacade.getCacheFactory(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatingReplacer)); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierObfuscatingReplacer).toFactory(InversifyContainerFacade_1.InversifyContainerFacade.getCacheFactory(ServiceIdentifiers_1.ServiceIdentifiers.IIdentifierObfuscatingReplacer)); -}); - -/***/ }), -/* 117 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractObfuscatingReplacer_1 = __webpack_require__(27); -var Nodes_1 = __webpack_require__(9); -var BaseIdentifierObfuscatingReplacer = function (_AbstractObfuscatingR) { - _inherits(BaseIdentifierObfuscatingReplacer, _AbstractObfuscatingR); - - function BaseIdentifierObfuscatingReplacer(identifierNamesGeneratorFactory, options) { - _classCallCheck(this, BaseIdentifierObfuscatingReplacer); - - var _this = _possibleConstructorReturn(this, (BaseIdentifierObfuscatingReplacer.__proto__ || Object.getPrototypeOf(BaseIdentifierObfuscatingReplacer)).call(this, options)); - - _this.namesMap = new Map(); - _this.identifierNamesGenerator = identifierNamesGeneratorFactory(options); - return _this; - } - - _createClass(BaseIdentifierObfuscatingReplacer, [{ - key: "replace", - value: function replace(nodeValue, nodeIdentifier) { - var mapKey = nodeValue + "-" + String(nodeIdentifier); - if (this.namesMap.has(mapKey)) { - nodeValue = this.namesMap.get(mapKey); - } - return Nodes_1.Nodes.getIdentifierNode(nodeValue); - } - }, { - key: "storeNames", - value: function storeNames(nodeName, nodeIdentifier) { - if (this.isReservedName(nodeName)) { - return; - } - this.namesMap.set(nodeName + "-" + String(nodeIdentifier), this.identifierNamesGenerator.generate(6)); - } - }, { - key: "isReservedName", - value: function isReservedName(name) { - return this.options.reservedNames.some(function (reservedName) { - return new RegExp(reservedName, 'g').exec(name) !== null; - }); - } - }]); - - return BaseIdentifierObfuscatingReplacer; -}(AbstractObfuscatingReplacer_1.AbstractObfuscatingReplacer); -BaseIdentifierObfuscatingReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], BaseIdentifierObfuscatingReplacer); -exports.BaseIdentifierObfuscatingReplacer = BaseIdentifierObfuscatingReplacer; - -/***/ }), -/* 118 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractObfuscatingReplacer_1 = __webpack_require__(27); -var Nodes_1 = __webpack_require__(9); -var BooleanLiteralObfuscatingReplacer = BooleanLiteralObfuscatingReplacer_1 = function (_AbstractObfuscatingR) { - _inherits(BooleanLiteralObfuscatingReplacer, _AbstractObfuscatingR); - - function BooleanLiteralObfuscatingReplacer(options) { - _classCallCheck(this, BooleanLiteralObfuscatingReplacer); - - return _possibleConstructorReturn(this, (BooleanLiteralObfuscatingReplacer.__proto__ || Object.getPrototypeOf(BooleanLiteralObfuscatingReplacer)).call(this, options)); - } - - _createClass(BooleanLiteralObfuscatingReplacer, [{ - key: "replace", - value: function replace(nodeValue) { - return nodeValue ? BooleanLiteralObfuscatingReplacer_1.getTrueUnaryExpressionNode() : BooleanLiteralObfuscatingReplacer_1.getFalseUnaryExpressionNode(); - } - }], [{ - key: "getTrueUnaryExpressionNode", - value: function getTrueUnaryExpressionNode() { - return Nodes_1.Nodes.getUnaryExpressionNode('!', BooleanLiteralObfuscatingReplacer_1.getFalseUnaryExpressionNode()); - } - }, { - key: "getFalseUnaryExpressionNode", - value: function getFalseUnaryExpressionNode() { - return Nodes_1.Nodes.getUnaryExpressionNode('!', Nodes_1.Nodes.getArrayExpressionNode()); - } - }]); - - return BooleanLiteralObfuscatingReplacer; -}(AbstractObfuscatingReplacer_1.AbstractObfuscatingReplacer); -BooleanLiteralObfuscatingReplacer = BooleanLiteralObfuscatingReplacer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], BooleanLiteralObfuscatingReplacer); -exports.BooleanLiteralObfuscatingReplacer = BooleanLiteralObfuscatingReplacer; -var BooleanLiteralObfuscatingReplacer_1; - -/***/ }), -/* 119 */, -/* 120 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(8); -var IdentifierObfuscatingReplacer_1 = __webpack_require__(16); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var CatchClauseTransformer = function (_AbstractNodeTransfor) { - _inherits(CatchClauseTransformer, _AbstractNodeTransfor); - - function CatchClauseTransformer(identifierObfuscatingReplacerFactory, randomGenerator, options) { - _classCallCheck(this, CatchClauseTransformer); - - var _this = _possibleConstructorReturn(this, (CatchClauseTransformer.__proto__ || Object.getPrototypeOf(CatchClauseTransformer)).call(this, randomGenerator, options)); - - _this.identifierObfuscatingReplacer = identifierObfuscatingReplacerFactory(IdentifierObfuscatingReplacer_1.IdentifierObfuscatingReplacer.BaseIdentifierObfuscatingReplacer); - return _this; - } - - _createClass(CatchClauseTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isCatchClauseNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(catchClauseNode, parentNode) { - var nodeIdentifier = this.nodeIdentifier++; - this.storeCatchClauseParam(catchClauseNode, nodeIdentifier); - this.replaceCatchClauseParam(catchClauseNode, nodeIdentifier); - return catchClauseNode; - } - }, { - key: "storeCatchClauseParam", - value: function storeCatchClauseParam(catchClauseNode, nodeIdentifier) { - if (NodeGuards_1.NodeGuards.isIdentifierNode(catchClauseNode.param)) { - this.identifierObfuscatingReplacer.storeNames(catchClauseNode.param.name, nodeIdentifier); - } - } - }, { - key: "replaceCatchClauseParam", - value: function replaceCatchClauseParam(catchClauseNode, nodeIdentifier) { - var _this3 = this; - - estraverse.replace(catchClauseNode, { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isReplaceableIdentifierNode(node, parentNode)) { - var newIdentifier = _this3.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); - var newIdentifierName = newIdentifier.name; - if (node.name !== newIdentifierName) { - node.name = newIdentifierName; - node.obfuscatedNode = true; - } - } - } - }); - } - }]); - - return CatchClauseTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -CatchClauseTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierObfuscatingReplacer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], CatchClauseTransformer); -exports.CatchClauseTransformer = CatchClauseTransformer; - -/***/ }), -/* 121 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(8); -var IdentifierObfuscatingReplacer_1 = __webpack_require__(16); -var NodeType_1 = __webpack_require__(10); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var NodeUtils_1 = __webpack_require__(5); -var ClassDeclarationTransformer = function (_AbstractNodeTransfor) { - _inherits(ClassDeclarationTransformer, _AbstractNodeTransfor); - - function ClassDeclarationTransformer(identifierObfuscatingReplacerFactory, randomGenerator, options) { - _classCallCheck(this, ClassDeclarationTransformer); - - var _this = _possibleConstructorReturn(this, (ClassDeclarationTransformer.__proto__ || Object.getPrototypeOf(ClassDeclarationTransformer)).call(this, randomGenerator, options)); - - _this.replaceableIdentifiers = new Map(); - _this.identifierObfuscatingReplacer = identifierObfuscatingReplacerFactory(IdentifierObfuscatingReplacer_1.IdentifierObfuscatingReplacer.BaseIdentifierObfuscatingReplacer); - return _this; - } - - _createClass(ClassDeclarationTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isClassDeclarationNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(classDeclarationNode, parentNode) { - var nodeIdentifier = this.nodeIdentifier++; - var blockScopeNode = NodeUtils_1.NodeUtils.getBlockScopesOfNode(classDeclarationNode)[0]; - if (!this.options.renameGlobals && blockScopeNode.type === NodeType_1.NodeType.Program) { - return classDeclarationNode; - } - this.storeClassName(classDeclarationNode, nodeIdentifier); - if (this.replaceableIdentifiers.has(blockScopeNode)) { - this.replaceScopeCachedIdentifiers(blockScopeNode, nodeIdentifier); - } else { - this.replaceScopeIdentifiers(blockScopeNode, nodeIdentifier); - } - return classDeclarationNode; - } - }, { - key: "storeClassName", - value: function storeClassName(classDeclarationNode, nodeIdentifier) { - this.identifierObfuscatingReplacer.storeNames(classDeclarationNode.id.name, nodeIdentifier); - } - }, { - key: "replaceScopeCachedIdentifiers", - value: function replaceScopeCachedIdentifiers(blockScopeNode, nodeIdentifier) { - var _this3 = this; - - var cachedReplaceableIdentifiers = this.replaceableIdentifiers.get(blockScopeNode); - cachedReplaceableIdentifiers.forEach(function (replaceableIdentifier) { - var newReplaceableIdentifier = _this3.identifierObfuscatingReplacer.replace(replaceableIdentifier.name, nodeIdentifier); - replaceableIdentifier.name = newReplaceableIdentifier.name; - }); - } - }, { - key: "replaceScopeIdentifiers", - value: function replaceScopeIdentifiers(blockScopeNode, nodeIdentifier) { - var _this4 = this; - - var storedReplaceableIdentifiers = []; - estraverse.replace(blockScopeNode, { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isReplaceableIdentifierNode(node, parentNode)) { - var newIdentifier = _this4.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); - var newIdentifierName = newIdentifier.name; - if (node.name !== newIdentifierName) { - node.name = newIdentifierName; - } else { - storedReplaceableIdentifiers.push(node); - } - } - } - }); - this.replaceableIdentifiers.set(blockScopeNode, storedReplaceableIdentifiers); - } - }]); - - return ClassDeclarationTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -ClassDeclarationTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierObfuscatingReplacer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], ClassDeclarationTransformer); -exports.ClassDeclarationTransformer = ClassDeclarationTransformer; - -/***/ }), -/* 122 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(8); -var IdentifierObfuscatingReplacer_1 = __webpack_require__(16); -var NodeType_1 = __webpack_require__(10); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var NodeUtils_1 = __webpack_require__(5); -var FunctionDeclarationTransformer = function (_AbstractNodeTransfor) { - _inherits(FunctionDeclarationTransformer, _AbstractNodeTransfor); - - function FunctionDeclarationTransformer(identifierObfuscatingReplacerFactory, randomGenerator, options) { - _classCallCheck(this, FunctionDeclarationTransformer); - - var _this = _possibleConstructorReturn(this, (FunctionDeclarationTransformer.__proto__ || Object.getPrototypeOf(FunctionDeclarationTransformer)).call(this, randomGenerator, options)); - - _this.replaceableIdentifiers = new Map(); - _this.identifierObfuscatingReplacer = identifierObfuscatingReplacerFactory(IdentifierObfuscatingReplacer_1.IdentifierObfuscatingReplacer.BaseIdentifierObfuscatingReplacer); - return _this; - } - - _createClass(FunctionDeclarationTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isFunctionDeclarationNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(functionDeclarationNode, parentNode) { - var nodeIdentifier = this.nodeIdentifier++; - var blockScopeNode = NodeUtils_1.NodeUtils.getBlockScopesOfNode(functionDeclarationNode)[0]; - if (!this.options.renameGlobals && blockScopeNode.type === NodeType_1.NodeType.Program) { - return functionDeclarationNode; - } - this.storeFunctionName(functionDeclarationNode, nodeIdentifier); - if (this.replaceableIdentifiers.has(blockScopeNode)) { - this.replaceScopeCachedIdentifiers(functionDeclarationNode, blockScopeNode, nodeIdentifier); - } else { - this.replaceScopeIdentifiers(blockScopeNode, nodeIdentifier); - } - return functionDeclarationNode; - } - }, { - key: "storeFunctionName", - value: function storeFunctionName(functionDeclarationNode, nodeIdentifier) { - this.identifierObfuscatingReplacer.storeNames(functionDeclarationNode.id.name, nodeIdentifier); - } - }, { - key: "replaceScopeCachedIdentifiers", - value: function replaceScopeCachedIdentifiers(functionDeclarationNode, blockScopeNode, nodeIdentifier) { - var cachedReplaceableIdentifiersNamesMap = this.replaceableIdentifiers.get(blockScopeNode); - if (!cachedReplaceableIdentifiersNamesMap) { - return; - } - var cachedReplaceableIdentifiers = cachedReplaceableIdentifiersNamesMap.get(functionDeclarationNode.id.name); - if (!cachedReplaceableIdentifiers) { - return; - } - var cachedReplaceableIdentifierLength = cachedReplaceableIdentifiers.length; - for (var i = 0; i < cachedReplaceableIdentifierLength; i++) { - var replaceableIdentifier = cachedReplaceableIdentifiers[i]; - var newReplaceableIdentifier = this.identifierObfuscatingReplacer.replace(replaceableIdentifier.name, nodeIdentifier); - replaceableIdentifier.name = newReplaceableIdentifier.name; - } - } - }, { - key: "replaceScopeIdentifiers", - value: function replaceScopeIdentifiers(blockScopeNode, nodeIdentifier) { - var _this3 = this; - - var storedReplaceableIdentifiersNamesMap = new Map(); - estraverse.replace(blockScopeNode, { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isReplaceableIdentifierNode(node, parentNode)) { - var newIdentifier = _this3.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); - var newIdentifierName = newIdentifier.name; - if (node.name !== newIdentifierName) { - node.name = newIdentifierName; - } else { - var storedReplaceableIdentifiers = storedReplaceableIdentifiersNamesMap.get(node.name) || []; - storedReplaceableIdentifiers.push(node); - storedReplaceableIdentifiersNamesMap.set(node.name, storedReplaceableIdentifiers); - } - } - } - }); - this.replaceableIdentifiers.set(blockScopeNode, storedReplaceableIdentifiersNamesMap); - } - }]); - - return FunctionDeclarationTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -FunctionDeclarationTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierObfuscatingReplacer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], FunctionDeclarationTransformer); -exports.FunctionDeclarationTransformer = FunctionDeclarationTransformer; - -/***/ }), -/* 123 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(8); -var IdentifierObfuscatingReplacer_1 = __webpack_require__(16); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var FunctionTransformer = function (_AbstractNodeTransfor) { - _inherits(FunctionTransformer, _AbstractNodeTransfor); - - function FunctionTransformer(identifierObfuscatingReplacerFactory, randomGenerator, options) { - _classCallCheck(this, FunctionTransformer); - - var _this = _possibleConstructorReturn(this, (FunctionTransformer.__proto__ || Object.getPrototypeOf(FunctionTransformer)).call(this, randomGenerator, options)); - - _this.identifierObfuscatingReplacer = identifierObfuscatingReplacerFactory(IdentifierObfuscatingReplacer_1.IdentifierObfuscatingReplacer.BaseIdentifierObfuscatingReplacer); - return _this; - } - - _createClass(FunctionTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && (NodeGuards_1.NodeGuards.isFunctionDeclarationNode(node) || NodeGuards_1.NodeGuards.isFunctionExpressionNode(node) || NodeGuards_1.NodeGuards.isArrowFunctionExpressionNode(node))) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(functionNode, parentNode) { - var nodeIdentifier = this.nodeIdentifier++; - this.storeFunctionParams(functionNode, nodeIdentifier); - this.replaceFunctionParams(functionNode, nodeIdentifier); - return functionNode; - } - }, { - key: "storeFunctionParams", - value: function storeFunctionParams(functionNode, nodeIdentifier) { - var _this3 = this; - - functionNode.params.forEach(function (paramsNode) { - if (NodeGuards_1.NodeGuards.isObjectPatternNode(paramsNode)) { - return estraverse.VisitorOption.Skip; - } - estraverse.traverse(paramsNode, { - enter: function enter(node) { - if (NodeGuards_1.NodeGuards.isAssignmentPatternNode(node) && NodeGuards_1.NodeGuards.isIdentifierNode(node.left)) { - _this3.identifierObfuscatingReplacer.storeNames(node.left.name, nodeIdentifier); - return estraverse.VisitorOption.Skip; - } - if (NodeGuards_1.NodeGuards.isIdentifierNode(node)) { - _this3.identifierObfuscatingReplacer.storeNames(node.name, nodeIdentifier); - } - } - }); - }); - } - }, { - key: "addIdentifiersToIgnoredIdentifierNamesSet", - value: function addIdentifiersToIgnoredIdentifierNamesSet(properties, ignoredIdentifierNamesSet) { - properties.forEach(function (property) { - if (!NodeGuards_1.NodeGuards.isIdentifierNode(property.key)) { - return; - } - ignoredIdentifierNamesSet.add(property.key.name); - }); - } - }, { - key: "replaceFunctionParams", - value: function replaceFunctionParams(functionNode, nodeIdentifier) { - var _this4 = this; - - var ignoredIdentifierNamesSet = new Set(); - var replaceVisitor = { - enter: function enter(node, parentNode) { - if (NodeGuards_1.NodeGuards.isObjectPatternNode(node)) { - _this4.addIdentifiersToIgnoredIdentifierNamesSet(node.properties, ignoredIdentifierNamesSet); - } - if (parentNode && NodeGuards_1.NodeGuards.isReplaceableIdentifierNode(node, parentNode) && !ignoredIdentifierNamesSet.has(node.name)) { - var newIdentifier = _this4.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); - var newIdentifierName = newIdentifier.name; - if (node.name !== newIdentifierName) { - node.name = newIdentifierName; - node.obfuscatedNode = true; - } - } - } - }; - functionNode.params.forEach(function (paramsNode) { - return estraverse.replace(paramsNode, replaceVisitor); - }); - estraverse.replace(functionNode.body, replaceVisitor); - } - }]); - - return FunctionTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -FunctionTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierObfuscatingReplacer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], FunctionTransformer); -exports.FunctionTransformer = FunctionTransformer; - -/***/ }), -/* 124 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(8); -var IdentifierObfuscatingReplacer_1 = __webpack_require__(16); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var LabeledStatementTransformer = function (_AbstractNodeTransfor) { - _inherits(LabeledStatementTransformer, _AbstractNodeTransfor); - - function LabeledStatementTransformer(identifierObfuscatingReplacerFactory, randomGenerator, options) { - _classCallCheck(this, LabeledStatementTransformer); - - var _this = _possibleConstructorReturn(this, (LabeledStatementTransformer.__proto__ || Object.getPrototypeOf(LabeledStatementTransformer)).call(this, randomGenerator, options)); - - _this.identifierObfuscatingReplacer = identifierObfuscatingReplacerFactory(IdentifierObfuscatingReplacer_1.IdentifierObfuscatingReplacer.BaseIdentifierObfuscatingReplacer); - return _this; - } - - _createClass(LabeledStatementTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isLabeledStatementNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(labeledStatementNode, parentNode) { - var nodeIdentifier = this.nodeIdentifier++; - this.storeLabeledStatementName(labeledStatementNode, nodeIdentifier); - this.replaceLabeledStatementName(labeledStatementNode, nodeIdentifier); - return labeledStatementNode; - } - }, { - key: "storeLabeledStatementName", - value: function storeLabeledStatementName(labeledStatementNode, nodeIdentifier) { - this.identifierObfuscatingReplacer.storeNames(labeledStatementNode.label.name, nodeIdentifier); - } - }, { - key: "replaceLabeledStatementName", - value: function replaceLabeledStatementName(labeledStatementNode, nodeIdentifier) { - var _this3 = this; - - estraverse.replace(labeledStatementNode, { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isLabelIdentifierNode(node, parentNode)) { - var newIdentifier = _this3.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); - node.name = newIdentifier.name; - } - } - }); - } - }]); - - return LabeledStatementTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -LabeledStatementTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierObfuscatingReplacer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], LabeledStatementTransformer); -exports.LabeledStatementTransformer = LabeledStatementTransformer; - -/***/ }), -/* 125 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var LiteralObfuscatingReplacer_1 = __webpack_require__(41); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var LiteralTransformer = function (_AbstractNodeTransfor) { - _inherits(LiteralTransformer, _AbstractNodeTransfor); - - function LiteralTransformer(literalObfuscatingReplacerFactory, randomGenerator, options) { - _classCallCheck(this, LiteralTransformer); - - var _this = _possibleConstructorReturn(this, (LiteralTransformer.__proto__ || Object.getPrototypeOf(LiteralTransformer)).call(this, randomGenerator, options)); - - _this.literalObfuscatingReplacerFactory = literalObfuscatingReplacerFactory; - return _this; - } - - _createClass(LiteralTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isLiteralNode(node) && !node.obfuscatedNode) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(literalNode, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isPropertyNode(parentNode) && parentNode.key === literalNode) { - return literalNode; - } - switch (_typeof(literalNode.value)) { - case 'boolean': - return this.literalObfuscatingReplacerFactory(LiteralObfuscatingReplacer_1.LiteralObfuscatingReplacer.BooleanLiteralObfuscatingReplacer).replace(literalNode.value); - case 'number': - return this.literalObfuscatingReplacerFactory(LiteralObfuscatingReplacer_1.LiteralObfuscatingReplacer.NumberLiteralObfuscatingReplacer).replace(literalNode.value); - case 'string': - return this.literalObfuscatingReplacerFactory(LiteralObfuscatingReplacer_1.LiteralObfuscatingReplacer.StringLiteralObfuscatingReplacer).replace(literalNode.value); - default: - return literalNode; - } - } - }]); - - return LiteralTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -LiteralTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IObfuscatingReplacer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], LiteralTransformer); -exports.LiteralTransformer = LiteralTransformer; - -/***/ }), -/* 126 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractObfuscatingReplacer_1 = __webpack_require__(27); -var Nodes_1 = __webpack_require__(9); -var Utils_1 = __webpack_require__(21); -var NumberLiteralObfuscatingReplacer = function (_AbstractObfuscatingR) { - _inherits(NumberLiteralObfuscatingReplacer, _AbstractObfuscatingR); - - function NumberLiteralObfuscatingReplacer(options) { - _classCallCheck(this, NumberLiteralObfuscatingReplacer); - - var _this = _possibleConstructorReturn(this, (NumberLiteralObfuscatingReplacer.__proto__ || Object.getPrototypeOf(NumberLiteralObfuscatingReplacer)).call(this, options)); - - _this.numberLiteralCache = new Map(); - return _this; - } - - _createClass(NumberLiteralObfuscatingReplacer, [{ - key: "replace", - value: function replace(nodeValue) { - var rawValue = void 0; - if (this.numberLiteralCache.has(nodeValue)) { - rawValue = this.numberLiteralCache.get(nodeValue); - } else { - if (!Utils_1.Utils.isCeilNumber(nodeValue)) { - rawValue = String(nodeValue); - } else { - rawValue = "" + Utils_1.Utils.hexadecimalPrefix + Utils_1.Utils.decToHex(nodeValue); - } - this.numberLiteralCache.set(nodeValue, rawValue); - } - return Nodes_1.Nodes.getLiteralNode(nodeValue, rawValue); - } - }]); - - return NumberLiteralObfuscatingReplacer; -}(AbstractObfuscatingReplacer_1.AbstractObfuscatingReplacer); -NumberLiteralObfuscatingReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], NumberLiteralObfuscatingReplacer); -exports.NumberLiteralObfuscatingReplacer = NumberLiteralObfuscatingReplacer; - -/***/ }), -/* 127 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var NodeType_1 = __webpack_require__(10); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var ObjectExpressionTransformer = ObjectExpressionTransformer_1 = function (_AbstractNodeTransfor) { - _inherits(ObjectExpressionTransformer, _AbstractNodeTransfor); - - function ObjectExpressionTransformer(randomGenerator, options) { - _classCallCheck(this, ObjectExpressionTransformer); - - return _possibleConstructorReturn(this, (ObjectExpressionTransformer.__proto__ || Object.getPrototypeOf(ObjectExpressionTransformer)).call(this, randomGenerator, options)); - } - - _createClass(ObjectExpressionTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isObjectExpressionNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(objectExpressionNode, parentNode) { - objectExpressionNode.properties.forEach(function (property) { - if (property.computed) { - return; - } - if (property.shorthand) { - property.shorthand = false; - } - if (NodeGuards_1.NodeGuards.isIdentifierNode(property.key)) { - property.key = ObjectExpressionTransformer_1.transformIdentifierPropertyKey(property.key); - } - }); - return objectExpressionNode; - } - }], [{ - key: "transformIdentifierPropertyKey", - value: function transformIdentifierPropertyKey(node) { - return { - type: NodeType_1.NodeType.Literal, - value: node.name, - raw: "'" + node.name + "'" - }; - } - }]); - - return ObjectExpressionTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -ObjectExpressionTransformer = ObjectExpressionTransformer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], ObjectExpressionTransformer); -exports.ObjectExpressionTransformer = ObjectExpressionTransformer; -var ObjectExpressionTransformer_1; - -/***/ }), -/* 128 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var StringArrayEncoding_1 = __webpack_require__(25); -var AbstractObfuscatingReplacer_1 = __webpack_require__(27); -var Nodes_1 = __webpack_require__(9); -var Utils_1 = __webpack_require__(21); -var StringLiteralObfuscatingReplacer = StringLiteralObfuscatingReplacer_1 = function (_AbstractObfuscatingR) { - _inherits(StringLiteralObfuscatingReplacer, _AbstractObfuscatingR); - - function StringLiteralObfuscatingReplacer(stringArrayStorage, escapeSequenceEncoder, randomGenerator, cryptUtils, options) { - _classCallCheck(this, StringLiteralObfuscatingReplacer); - - var _this = _possibleConstructorReturn(this, (StringLiteralObfuscatingReplacer.__proto__ || Object.getPrototypeOf(StringLiteralObfuscatingReplacer)).call(this, options)); - - _this.nodesCache = new Map(); - _this.stringLiteralHexadecimalIndexCache = new Map(); - _this.stringArrayStorage = stringArrayStorage; - _this.escapeSequenceEncoder = escapeSequenceEncoder; - _this.randomGenerator = randomGenerator; - _this.cryptUtils = cryptUtils; - _this.rc4Keys = _this.randomGenerator.getRandomGenerator().n(function () { - return _this.randomGenerator.getRandomGenerator().string({ - length: StringLiteralObfuscatingReplacer_1.rc4KeyLength - }); - }, StringLiteralObfuscatingReplacer_1.rc4KeysCount); - return _this; - } - - _createClass(StringLiteralObfuscatingReplacer, [{ - key: "replace", - value: function replace(nodeValue) { - var useStringArray = this.canUseStringArray(nodeValue); - var cacheKey = nodeValue + "-" + String(useStringArray); - var useCacheValue = this.nodesCache.has(cacheKey) && this.options.stringArrayEncoding !== StringArrayEncoding_1.StringArrayEncoding.Rc4; - if (useCacheValue) { - return this.nodesCache.get(cacheKey); - } - var resultNode = useStringArray ? this.replaceWithStringArrayCallNode(nodeValue) : this.replaceWithLiteralNode(nodeValue); - this.nodesCache.set(cacheKey, resultNode); - return resultNode; - } - }, { - key: "canUseStringArray", - value: function canUseStringArray(nodeValue) { - return this.options.stringArray && nodeValue.length >= StringLiteralObfuscatingReplacer_1.minimumLengthForStringArray && this.randomGenerator.getMathRandom() <= this.options.stringArrayThreshold; - } - }, { - key: "getStringArrayHexadecimalIndex", - value: function getStringArrayHexadecimalIndex(value, stringArrayStorageLength) { - if (this.stringLiteralHexadecimalIndexCache.has(value)) { - return { - fromCache: true, - index: this.stringLiteralHexadecimalIndexCache.get(value) - }; - } - var hexadecimalRawIndex = Utils_1.Utils.decToHex(stringArrayStorageLength); - var hexadecimalIndex = "" + Utils_1.Utils.hexadecimalPrefix + hexadecimalRawIndex; - this.stringLiteralHexadecimalIndexCache.set(value, hexadecimalIndex); - return { - fromCache: false, - index: hexadecimalIndex - }; - } - }, { - key: "getEncodedValue", - value: function getEncodedValue(value) { - var encodedValue = void 0, - key = null; - switch (this.options.stringArrayEncoding) { - case StringArrayEncoding_1.StringArrayEncoding.Rc4: - key = this.randomGenerator.getRandomGenerator().pickone(this.rc4Keys); - encodedValue = this.cryptUtils.btoa(this.cryptUtils.rc4(value, key)); - break; - case StringArrayEncoding_1.StringArrayEncoding.Base64: - encodedValue = this.cryptUtils.btoa(value); - break; - default: - encodedValue = value; - } - return { encodedValue: encodedValue, key: key }; - } - }, { - key: "replaceWithLiteralNode", - value: function replaceWithLiteralNode(value) { - return Nodes_1.Nodes.getLiteralNode(this.escapeSequenceEncoder.encode(value, this.options.unicodeEscapeSequence)); - } - }, { - key: "replaceWithStringArrayCallNode", - value: function replaceWithStringArrayCallNode(value) { - var _getEncodedValue = this.getEncodedValue(value), - encodedValue = _getEncodedValue.encodedValue, - key = _getEncodedValue.key; - - var escapedValue = this.escapeSequenceEncoder.encode(encodedValue, this.options.unicodeEscapeSequence); - var stringArrayStorageLength = this.stringArrayStorage.getLength(); - var stringArrayStorageCallsWrapperName = this.stringArrayStorage.getStorageId().split('|')[1]; - - var _getStringArrayHexade = this.getStringArrayHexadecimalIndex(escapedValue, stringArrayStorageLength), - fromCache = _getStringArrayHexade.fromCache, - index = _getStringArrayHexade.index; - - if (!fromCache) { - this.stringArrayStorage.set(stringArrayStorageLength, escapedValue); - } - var callExpressionArgs = [StringLiteralObfuscatingReplacer_1.getHexadecimalLiteralNode(index)]; - if (key) { - callExpressionArgs.push(StringLiteralObfuscatingReplacer_1.getRc4KeyLiteralNode(this.escapeSequenceEncoder.encode(key, this.options.unicodeEscapeSequence))); - } - var stringArrayIdentifierNode = Nodes_1.Nodes.getIdentifierNode(stringArrayStorageCallsWrapperName); - stringArrayIdentifierNode.obfuscatedNode = true; - return Nodes_1.Nodes.getCallExpressionNode(stringArrayIdentifierNode, callExpressionArgs); - } - }], [{ - key: "getHexadecimalLiteralNode", - value: function getHexadecimalLiteralNode(hexadecimalIndex) { - var hexadecimalLiteralNode = Nodes_1.Nodes.getLiteralNode(hexadecimalIndex); - hexadecimalLiteralNode.obfuscatedNode = true; - return hexadecimalLiteralNode; - } - }, { - key: "getRc4KeyLiteralNode", - value: function getRc4KeyLiteralNode(literalValue) { - var rc4KeyLiteralNode = Nodes_1.Nodes.getLiteralNode(literalValue); - rc4KeyLiteralNode.obfuscatedNode = true; - return rc4KeyLiteralNode; - } - }]); - - return StringLiteralObfuscatingReplacer; -}(AbstractObfuscatingReplacer_1.AbstractObfuscatingReplacer); -StringLiteralObfuscatingReplacer.minimumLengthForStringArray = 3; -StringLiteralObfuscatingReplacer.rc4KeyLength = 4; -StringLiteralObfuscatingReplacer.rc4KeysCount = 50; -StringLiteralObfuscatingReplacer = StringLiteralObfuscatingReplacer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.TStringArrayStorage)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IEscapeSequenceEncoder)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ICryptUtils)), tslib_1.__param(4, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object, Object, Object, Object])], StringLiteralObfuscatingReplacer); -exports.StringLiteralObfuscatingReplacer = StringLiteralObfuscatingReplacer; -var StringLiteralObfuscatingReplacer_1; - -/***/ }), -/* 129 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(8); -var IdentifierObfuscatingReplacer_1 = __webpack_require__(16); -var NodeType_1 = __webpack_require__(10); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var NodeUtils_1 = __webpack_require__(5); -var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { - _inherits(VariableDeclarationTransformer, _AbstractNodeTransfor); - - function VariableDeclarationTransformer(identifierObfuscatingReplacerFactory, randomGenerator, options) { - _classCallCheck(this, VariableDeclarationTransformer); - - var _this = _possibleConstructorReturn(this, (VariableDeclarationTransformer.__proto__ || Object.getPrototypeOf(VariableDeclarationTransformer)).call(this, randomGenerator, options)); - - _this.replaceableIdentifiers = new Map(); - _this.identifierObfuscatingReplacer = identifierObfuscatingReplacerFactory(IdentifierObfuscatingReplacer_1.IdentifierObfuscatingReplacer.BaseIdentifierObfuscatingReplacer); - return _this; - } - - _createClass(VariableDeclarationTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isVariableDeclarationNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(variableDeclarationNode, parentNode) { - var blockScopeNode = NodeUtils_1.NodeUtils.getBlockScopesOfNode(variableDeclarationNode)[0]; - if (!this.options.renameGlobals && blockScopeNode.type === NodeType_1.NodeType.Program) { - return variableDeclarationNode; - } - var nodeIdentifier = this.nodeIdentifier++; - var scopeNode = variableDeclarationNode.kind === 'var' ? blockScopeNode : parentNode; - this.storeVariableNames(variableDeclarationNode, nodeIdentifier); - if (this.replaceableIdentifiers.has(scopeNode)) { - this.replaceScopeCachedIdentifiers(variableDeclarationNode, scopeNode, nodeIdentifier); - } else { - this.replaceScopeIdentifiers(scopeNode, nodeIdentifier); - } - return variableDeclarationNode; - } - }, { - key: "storeVariableNames", - value: function storeVariableNames(variableDeclarationNode, nodeIdentifier) { - var _this3 = this; - - this.traverseDeclarationIdentifiers(variableDeclarationNode, function (identifierNode) { - _this3.identifierObfuscatingReplacer.storeNames(identifierNode.name, nodeIdentifier); - }); - } - }, { - key: "replaceScopeCachedIdentifiers", - value: function replaceScopeCachedIdentifiers(variableDeclarationNode, scopeNode, nodeIdentifier) { - var _this4 = this; - - var cachedReplaceableIdentifiersNamesMap = this.replaceableIdentifiers.get(scopeNode); - if (!cachedReplaceableIdentifiersNamesMap) { - return; - } - var identifierNames = []; - this.traverseDeclarationIdentifiers(variableDeclarationNode, function (identifierNode) { - identifierNames.push(identifierNode.name); - }); - identifierNames.forEach(function (identifierName) { - var cachedReplaceableIdentifiers = cachedReplaceableIdentifiersNamesMap.get(identifierName); - if (!cachedReplaceableIdentifiers) { - return; - } - var cachedReplaceableIdentifierLength = cachedReplaceableIdentifiers.length; - for (var i = 0; i < cachedReplaceableIdentifierLength; i++) { - var replaceableIdentifier = cachedReplaceableIdentifiers[i]; - if (identifierName !== replaceableIdentifier.name) { - continue; - } - var newReplaceableIdentifier = _this4.identifierObfuscatingReplacer.replace(replaceableIdentifier.name, nodeIdentifier); - replaceableIdentifier.name = newReplaceableIdentifier.name; - } - }); - } - }, { - key: "replaceScopeIdentifiers", - value: function replaceScopeIdentifiers(blockScopeNode, nodeIdentifier) { - var _this5 = this; - - var storedReplaceableIdentifiersNamesMap = new Map(); - estraverse.replace(blockScopeNode, { - enter: function enter(node, parentNode) { - if (parentNode && !node.obfuscatedNode && NodeGuards_1.NodeGuards.isReplaceableIdentifierNode(node, parentNode)) { - var newIdentifier = _this5.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); - var newIdentifierName = newIdentifier.name; - if (node.name !== newIdentifierName) { - node.name = newIdentifierName; - } else { - var storedReplaceableIdentifiers = storedReplaceableIdentifiersNamesMap.get(node.name) || []; - storedReplaceableIdentifiers.push(node); - storedReplaceableIdentifiersNamesMap.set(node.name, storedReplaceableIdentifiers); - } - } - } - }); - this.replaceableIdentifiers.set(blockScopeNode, storedReplaceableIdentifiersNamesMap); - } - }, { - key: "traverseDeclarationIdentifiers", - value: function traverseDeclarationIdentifiers(variableDeclarationNode, callback) { - variableDeclarationNode.declarations.forEach(function (declarationNode) { - if (NodeGuards_1.NodeGuards.isObjectPatternNode(declarationNode.id)) { - return estraverse.VisitorOption.Skip; - } - estraverse.traverse(declarationNode.id, { - enter: function enter(node) { - if (NodeGuards_1.NodeGuards.isIdentifierNode(node)) { - callback(node); - } - } - }); - }); - } - }]); - - return VariableDeclarationTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -VariableDeclarationTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierObfuscatingReplacer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], VariableDeclarationTransformer); -exports.VariableDeclarationTransformer = VariableDeclarationTransformer; - -/***/ }), -/* 130 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var InversifyContainerFacade_1 = __webpack_require__(14); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var NodeTransformer_1 = __webpack_require__(18); -var ObfuscatingGuard_1 = __webpack_require__(42); -var BlackListObfuscatingGuard_1 = __webpack_require__(131); -var CommentsTransformer_1 = __webpack_require__(132); -var ConditionalCommentObfuscatingGuard_1 = __webpack_require__(133); -var ObfuscatingGuardsTransformer_1 = __webpack_require__(134); -var ParentificationTransformer_1 = __webpack_require__(135); -exports.preparingTransformersModule = new inversify_1.ContainerModule(function (bind) { - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(CommentsTransformer_1.CommentsTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.CommentsTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(ObfuscatingGuardsTransformer_1.ObfuscatingGuardsTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.ObfuscatingGuardsTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(ParentificationTransformer_1.ParentificationTransformer).whenTargetNamed(NodeTransformer_1.NodeTransformer.ParentificationTransformer); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeGuard).to(BlackListObfuscatingGuard_1.BlackListObfuscatingGuard).inSingletonScope().whenTargetNamed(ObfuscatingGuard_1.ObfuscatingGuard.BlackListNodeGuard); - bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeGuard).to(ConditionalCommentObfuscatingGuard_1.ConditionalCommentObfuscatingGuard).inSingletonScope().whenTargetNamed(ObfuscatingGuard_1.ObfuscatingGuard.ConditionalCommentNodeGuard); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__INodeGuard).toFactory(InversifyContainerFacade_1.InversifyContainerFacade.getCacheFactory(ServiceIdentifiers_1.ServiceIdentifiers.INodeGuard)); -}); - -/***/ }), -/* 131 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var NodeGuards_1 = __webpack_require__(4); -var BlackListObfuscatingGuard = BlackListObfuscatingGuard_1 = function () { - function BlackListObfuscatingGuard() { - _classCallCheck(this, BlackListObfuscatingGuard); - - this.blackListGuardsLength = BlackListObfuscatingGuard_1.blackListGuards.length; - } - - _createClass(BlackListObfuscatingGuard, [{ - key: "check", - value: function check(node) { - for (var i = 0; i < this.blackListGuardsLength; i++) { - if (BlackListObfuscatingGuard_1.blackListGuards[i](node)) { - return false; - } - } - return true; - } - }]); - - return BlackListObfuscatingGuard; -}(); -BlackListObfuscatingGuard.blackListGuards = [NodeGuards_1.NodeGuards.isUseStrictOperator]; -BlackListObfuscatingGuard = BlackListObfuscatingGuard_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], BlackListObfuscatingGuard); -exports.BlackListObfuscatingGuard = BlackListObfuscatingGuard; -var BlackListObfuscatingGuard_1; - -/***/ }), -/* 132 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var CommentsTransformer = CommentsTransformer_1 = function (_AbstractNodeTransfor) { - _inherits(CommentsTransformer, _AbstractNodeTransfor); - - function CommentsTransformer(randomGenerator, options) { - _classCallCheck(this, CommentsTransformer); - - return _possibleConstructorReturn(this, (CommentsTransformer.__proto__ || Object.getPrototypeOf(CommentsTransformer)).call(this, randomGenerator, options)); - } - - _createClass(CommentsTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - leave: function leave(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isNodeWithComments(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(node, parentNode) { - if (node.leadingComments) { - node.leadingComments = this.transformComments(node.leadingComments); - } - if (node.trailingComments) { - node.trailingComments = this.transformComments(node.trailingComments); - } - return node; - } - }, { - key: "transformComments", - value: function transformComments(comments) { - return comments.filter(function (comment) { - return CommentsTransformer_1.preservedWords.some(function (availableWord) { - return comment.value.indexOf(availableWord) !== -1; - }); - }); - } - }]); - - return CommentsTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -CommentsTransformer.preservedWords = ['@license', '@preserve']; -CommentsTransformer = CommentsTransformer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], CommentsTransformer); -exports.CommentsTransformer = CommentsTransformer; -var CommentsTransformer_1; - -/***/ }), -/* 133 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var NodeGuards_1 = __webpack_require__(4); -var ConditionalCommentObfuscatingGuard = ConditionalCommentObfuscatingGuard_1 = function () { - function ConditionalCommentObfuscatingGuard() { - _classCallCheck(this, ConditionalCommentObfuscatingGuard); - - this.obfuscationAllowedForCurrentNode = true; - this.obfuscationAllowedForNextNode = null; - } - - _createClass(ConditionalCommentObfuscatingGuard, [{ - key: "check", - value: function check(node) { - if (this.obfuscationAllowedForNextNode) { - this.obfuscationAllowedForCurrentNode = this.obfuscationAllowedForNextNode; - this.obfuscationAllowedForNextNode = null; - } - if (!NodeGuards_1.NodeGuards.isNodeWithComments(node)) { - return this.obfuscationAllowedForCurrentNode; - } - var leadingComments = node.leadingComments; - var trailingComments = node.trailingComments; - if (leadingComments) { - this.obfuscationAllowedForCurrentNode = this.checkComments(leadingComments); - } - if (trailingComments) { - this.obfuscationAllowedForNextNode = this.checkComments(trailingComments); - } - return this.obfuscationAllowedForCurrentNode; - } - }, { - key: "checkComments", - value: function checkComments(comments) { - var commentsLength = comments.length; - var obfuscationAllowed = this.obfuscationAllowedForCurrentNode; - for (var i = 0; i < commentsLength; i++) { - var comment = comments[i]; - if (ConditionalCommentObfuscatingGuard_1.obfuscationEnableCommentRegExp.test(comment.value)) { - obfuscationAllowed = true; - continue; - } - if (ConditionalCommentObfuscatingGuard_1.obfuscationDisableCommentRegExp.test(comment.value)) { - obfuscationAllowed = false; - } - } - return obfuscationAllowed; - } - }]); - - return ConditionalCommentObfuscatingGuard; -}(); -ConditionalCommentObfuscatingGuard.obfuscationEnableCommentRegExp = new RegExp('javascript-obfuscator *: *enable'); -ConditionalCommentObfuscatingGuard.obfuscationDisableCommentRegExp = new RegExp('javascript-obfuscator *: *disable'); -ConditionalCommentObfuscatingGuard = ConditionalCommentObfuscatingGuard_1 = tslib_1.__decorate([inversify_1.injectable()], ConditionalCommentObfuscatingGuard); -exports.ConditionalCommentObfuscatingGuard = ConditionalCommentObfuscatingGuard; -var ConditionalCommentObfuscatingGuard_1; - -/***/ }), -/* 134 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ObfuscatingGuard_1 = __webpack_require__(42); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var ObfuscatingGuardsTransformer = ObfuscatingGuardsTransformer_1 = function (_AbstractNodeTransfor) { - _inherits(ObfuscatingGuardsTransformer, _AbstractNodeTransfor); - - function ObfuscatingGuardsTransformer(obfuscatingGuardFactory, randomGenerator, options) { - _classCallCheck(this, ObfuscatingGuardsTransformer); - - var _this = _possibleConstructorReturn(this, (ObfuscatingGuardsTransformer.__proto__ || Object.getPrototypeOf(ObfuscatingGuardsTransformer)).call(this, randomGenerator, options)); - - _this.obfuscatingGuards = ObfuscatingGuardsTransformer_1.obfuscatingGuardsList.map(obfuscatingGuardFactory); - return _this; - } - - _createClass(ObfuscatingGuardsTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - return _this2.transformNode(node, parentNode); - } - }; - } - }, { - key: "transformNode", - value: function transformNode(node, parentNode) { - var obfuscationAllowed = this.obfuscatingGuards.every(function (nodeGuard) { - return nodeGuard.check(node); - }); - node.ignoredNode = !obfuscationAllowed; - return node; - } - }]); - - return ObfuscatingGuardsTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -ObfuscatingGuardsTransformer.obfuscatingGuardsList = [ObfuscatingGuard_1.ObfuscatingGuard.BlackListNodeGuard, ObfuscatingGuard_1.ObfuscatingGuard.ConditionalCommentNodeGuard]; -ObfuscatingGuardsTransformer = ObfuscatingGuardsTransformer_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__INodeGuard)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], ObfuscatingGuardsTransformer); -exports.ObfuscatingGuardsTransformer = ObfuscatingGuardsTransformer; -var ObfuscatingGuardsTransformer_1; - -/***/ }), -/* 135 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeUtils_1 = __webpack_require__(5); -var ParentificationTransformer = function (_AbstractNodeTransfor) { - _inherits(ParentificationTransformer, _AbstractNodeTransfor); - - function ParentificationTransformer(randomGenerator, options) { - _classCallCheck(this, ParentificationTransformer); - - return _possibleConstructorReturn(this, (ParentificationTransformer.__proto__ || Object.getPrototypeOf(ParentificationTransformer)).call(this, randomGenerator, options)); - } - - _createClass(ParentificationTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - return _this2.transformNode(node, parentNode); - } - }; - } - }, { - key: "transformNode", - value: function transformNode(node, parentNode) { - return NodeUtils_1.NodeUtils.parentizeNode(node, parentNode); - } - }]); - - return ParentificationTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -ParentificationTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], ParentificationTransformer); -exports.ParentificationTransformer = ParentificationTransformer; - -/***/ }), -/* 136 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ControlFlowStorage_1 = __webpack_require__(137); -var CustomNodeGroupStorage_1 = __webpack_require__(138); -var StringArrayStorage_1 = __webpack_require__(139); -exports.storagesModule = new inversify_1.ContainerModule(function (bind) { - bind(ServiceIdentifiers_1.ServiceIdentifiers.TCustomNodeGroupStorage).to(CustomNodeGroupStorage_1.CustomNodeGroupStorage).inSingletonScope(); - bind(ServiceIdentifiers_1.ServiceIdentifiers.TStringArrayStorage).to(StringArrayStorage_1.StringArrayStorage).inSingletonScope(); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Newable__TControlFlowStorage).toConstructor(ControlFlowStorage_1.ControlFlowStorage); - bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__TControlFlowStorage).toFactory(function (context) { - return function () { - var constructor = context.container.get(ServiceIdentifiers_1.ServiceIdentifiers.Newable__TControlFlowStorage); - var randomGenerator = context.container.get(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator); - var options = context.container.get(ServiceIdentifiers_1.ServiceIdentifiers.IOptions); - var storage = new constructor(randomGenerator, options); - storage.initialize(); - return storage; - }; - }); -}); - -/***/ }), -/* 137 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var MapStorage_1 = __webpack_require__(43); -var ControlFlowStorage = function (_MapStorage_1$MapStor) { - _inherits(ControlFlowStorage, _MapStorage_1$MapStor); - - function ControlFlowStorage(randomGenerator, options) { - _classCallCheck(this, ControlFlowStorage); - - return _possibleConstructorReturn(this, (ControlFlowStorage.__proto__ || Object.getPrototypeOf(ControlFlowStorage)).call(this, randomGenerator, options)); - } - - return ControlFlowStorage; -}(MapStorage_1.MapStorage); -ControlFlowStorage = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], ControlFlowStorage); -exports.ControlFlowStorage = ControlFlowStorage; - -/***/ }), -/* 138 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var CustomNodeGroup_1 = __webpack_require__(39); -var MapStorage_1 = __webpack_require__(43); -var CustomNodeGroupStorage = CustomNodeGroupStorage_1 = function (_MapStorage_1$MapStor) { - _inherits(CustomNodeGroupStorage, _MapStorage_1$MapStor); - - function CustomNodeGroupStorage(customNodeGroupFactory, randomGenerator, options) { - _classCallCheck(this, CustomNodeGroupStorage); - - var _this = _possibleConstructorReturn(this, (CustomNodeGroupStorage.__proto__ || Object.getPrototypeOf(CustomNodeGroupStorage)).call(this, randomGenerator, options)); - - _this.customNodeGroupFactory = customNodeGroupFactory; - return _this; - } - - _createClass(CustomNodeGroupStorage, [{ - key: "initialize", - value: function initialize() { - var _this2 = this; - - this.storage = new Map(); - this.storageId = this.randomGenerator.getRandomString(6); - CustomNodeGroupStorage_1.customNodeGroupsList.forEach(function (customNodeGroupName) { - var customNodeGroup = _this2.customNodeGroupFactory(customNodeGroupName); - if (!customNodeGroup) { - return; - } - _this2.storage.set(customNodeGroupName, customNodeGroup); - }); - } - }]); - - return CustomNodeGroupStorage; -}(MapStorage_1.MapStorage); -CustomNodeGroupStorage.customNodeGroupsList = [CustomNodeGroup_1.CustomNodeGroup.ConsoleOutputCustomNodeGroup, CustomNodeGroup_1.CustomNodeGroup.DebugProtectionCustomNodeGroup, CustomNodeGroup_1.CustomNodeGroup.DomainLockCustomNodeGroup, CustomNodeGroup_1.CustomNodeGroup.SelfDefendingCustomNodeGroup, CustomNodeGroup_1.CustomNodeGroup.StringArrayCustomNodeGroup]; -tslib_1.__decorate([inversify_1.postConstruct(), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", []), tslib_1.__metadata("design:returntype", void 0)], CustomNodeGroupStorage.prototype, "initialize", null); -CustomNodeGroupStorage = CustomNodeGroupStorage_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__ICustomNodeGroup)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], CustomNodeGroupStorage); -exports.CustomNodeGroupStorage = CustomNodeGroupStorage; -var CustomNodeGroupStorage_1; - -/***/ }), -/* 139 */ -/***/ (function(module, exports, __webpack_require__) { - -"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); } }); - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ArrayStorage_1 = __webpack_require__(140); -var StringArrayStorage = function (_ArrayStorage_1$Array) { - _inherits(StringArrayStorage, _ArrayStorage_1$Array); - - function StringArrayStorage(identifierNamesGeneratorFactory, arrayUtils, randomGenerator, options) { - _classCallCheck(this, StringArrayStorage); - - var _this = _possibleConstructorReturn(this, (StringArrayStorage.__proto__ || Object.getPrototypeOf(StringArrayStorage)).call(this, randomGenerator, options)); - - _this.identifierNamesGenerator = identifierNamesGeneratorFactory(options); - _this.arrayUtils = arrayUtils; - return _this; - } - - _createClass(StringArrayStorage, [{ - key: "initialize", - value: function initialize() { - _get(StringArrayStorage.prototype.__proto__ || Object.getPrototypeOf(StringArrayStorage.prototype), "initialize", this).call(this); - var stringArrayName = this.identifierNamesGenerator.generate(4); - var stringArrayCallsWrapperName = this.identifierNamesGenerator.generate(4); - this.storageId = stringArrayName + "|" + stringArrayCallsWrapperName; - } - }, { - key: "rotateArray", - value: function rotateArray(rotationValue) { - this.storage = this.arrayUtils.arrayRotate(this.storage, rotationValue); - } - }, { - key: "toString", - value: function toString() { - return this.storage.map(function (value) { - return "'" + value + "'"; - }).toString(); - } - }]); - - return StringArrayStorage; -}(ArrayStorage_1.ArrayStorage); -tslib_1.__decorate([inversify_1.postConstruct(), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", []), tslib_1.__metadata("design:returntype", void 0)], StringArrayStorage.prototype, "initialize", null); -StringArrayStorage = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IArrayUtils)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object, Object])], StringArrayStorage); -exports.StringArrayStorage = StringArrayStorage; - -/***/ }), -/* 140 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var Initializable_1 = __webpack_require__(3); -var ArrayStorage = function () { - function ArrayStorage(randomGenerator, options) { - _classCallCheck(this, ArrayStorage); - - this.storageLength = 0; - this.randomGenerator = randomGenerator; - this.options = options; - } - - _createClass(ArrayStorage, [{ - key: "initialize", - value: function initialize() { - this.storage = []; - this.storageId = this.randomGenerator.getRandomString(6); - } - }, { - key: "get", - value: function get(key) { - var value = this.storage[key]; - if (!value) { - throw new Error("No value found in array storage with key `" + key + "`"); - } - return value; - } - }, { - key: "getKeyOf", - value: function getKeyOf(value) { - var key = this.storage.indexOf(value); - return key >= 0 ? key : null; - } - }, { - key: "getLength", - value: function getLength() { - return this.storageLength; - } - }, { - key: "getStorage", - value: function getStorage() { - return this.storage; - } - }, { - key: "getStorageId", - value: function getStorageId() { - return this.storageId; - } - }, { - key: "mergeWith", - value: function mergeWith(storage) { - var mergeId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - this.storage = [].concat(_toConsumableArray(this.storage), _toConsumableArray(storage.getStorage())); - if (mergeId) { - this.storageId = storage.getStorageId(); - } - } - }, { - key: "set", - value: function set(key, value) { - if (key === this.storageLength) { - this.storage.push(value); - } else { - this.storage.splice(key, 0, value); - } - this.storageLength++; - } - }]); - - return ArrayStorage; -}(); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__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([inversify_1.postConstruct(), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", []), tslib_1.__metadata("design:returntype", void 0)], ArrayStorage.prototype, "initialize", null); -ArrayStorage = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object])], ArrayStorage); -exports.ArrayStorage = ArrayStorage; - -/***/ }), -/* 141 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ArrayUtils_1 = __webpack_require__(142); -var CryptUtils_1 = __webpack_require__(143); -var EscapeSequenceEncoder_1 = __webpack_require__(146); -var RandomGenerator_1 = __webpack_require__(44); -exports.utilsModule = new inversify_1.ContainerModule(function (bind) { - bind(ServiceIdentifiers_1.ServiceIdentifiers.IArrayUtils).to(ArrayUtils_1.ArrayUtils).inSingletonScope(); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator).to(RandomGenerator_1.RandomGenerator).inSingletonScope(); - bind(ServiceIdentifiers_1.ServiceIdentifiers.ICryptUtils).to(CryptUtils_1.CryptUtils).inSingletonScope(); - bind(ServiceIdentifiers_1.ServiceIdentifiers.IEscapeSequenceEncoder).to(EscapeSequenceEncoder_1.EscapeSequenceEncoder).inSingletonScope(); -}); - -/***/ }), -/* 142 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var ArrayUtils = function () { - function ArrayUtils(randomGenerator) { - _classCallCheck(this, ArrayUtils); - - this.randomGenerator = randomGenerator; - } - - _createClass(ArrayUtils, [{ - key: "arrayRange", - value: function arrayRange(length) { - var range = []; - for (var i = 0; i < length; i++) { - range.push(i); - } - return range; - } - }, { - key: "arrayRotate", - value: function arrayRotate(array, times) { - if (!array.length) { - throw new ReferenceError("Cannot rotate empty array."); - } - if (times <= 0) { - return array; - } - var newArray = array; - var temp = void 0; - while (times--) { - temp = newArray.pop(); - newArray.unshift(temp); - } - return newArray; - } - }, { - key: "arrayShuffle", - value: function arrayShuffle(array) { - var shuffledArray = [].concat(_toConsumableArray(array)); - for (var i = shuffledArray.length; i; i--) { - var j = Math.floor(this.randomGenerator.getMathRandom() * i); - var _ref = [shuffledArray[j], shuffledArray[i - 1]]; - shuffledArray[i - 1] = _ref[0]; - shuffledArray[j] = _ref[1]; - } - return shuffledArray; - } - }]); - - return ArrayUtils; -}(); -ArrayUtils = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__metadata("design:paramtypes", [Object])], ArrayUtils); -exports.ArrayUtils = ArrayUtils; - -/***/ }), -/* 143 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var RandomGenerator_1 = __webpack_require__(44); -var Utils_1 = __webpack_require__(21); -var CryptUtils = function () { - function CryptUtils(randomGenerator) { - _classCallCheck(this, CryptUtils); - - this.randomGenerator = randomGenerator; - } - - _createClass(CryptUtils, [{ - 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)); - }); - 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); - if (charCode > 0xFF) { - throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range."); - } - block = block << 8 | charCode; - } - return output; - } - }, { - key: "hideString", - value: function hideString(str, length) { - var _this = this; - - var escapeRegExp = function escapeRegExp(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - }; - var randomMerge = function randomMerge(s1, s2) { - var i1 = -1, - i2 = -1, - result = ''; - while (i1 < s1.length || i2 < s2.length) { - if (_this.randomGenerator.getMathRandom() < 0.5 && i2 < s2.length) { - result += s2.charAt(++i2); - } else { - result += s1.charAt(++i1); - } - } - return result; - }; - var randomString = this.randomGenerator.getRandomGenerator().string({ - length: length, - pool: RandomGenerator_1.RandomGenerator.randomGeneratorPool - }); - var randomStringDiff = randomString.replace(new RegExp("[" + escapeRegExp(str) + "]", 'g'), ''); - var randomStringDiffArray = randomStringDiff.split(''); - this.randomGenerator.getRandomGenerator().shuffle(randomStringDiffArray); - randomStringDiff = randomStringDiffArray.join(''); - return [randomMerge(str, randomStringDiff), randomStringDiff]; - } - }, { - key: "rc4", - value: function rc4(string, key) { - var s = [], - j = 0, - x = void 0, - result = ''; - for (var i = 0; i < 256; i++) { - s[i] = i; - } - for (i = 0; i < 256; i++) { - j = (j + s[i] + key.charCodeAt(i % key.length)) % 256; - x = s[i]; - s[i] = s[j]; - s[j] = x; - } - i = 0; - j = 0; - for (var y = 0; y < string.length; y++) { - i = (i + 1) % 256; - j = (j + s[i]) % 256; - x = s[i]; - s[i] = s[j]; - s[j] = x; - result += String.fromCharCode(string.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]); - } - return result; - } - }]); - - return CryptUtils; -}(); -CryptUtils = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__metadata("design:paramtypes", [Object])], CryptUtils); -exports.CryptUtils = CryptUtils; - -/***/ }), -/* 144 */ -/***/ (function(module, exports) { - -module.exports = require("md5"); - -/***/ }), -/* 145 */ -/***/ (function(module, exports) { - -module.exports = require("chance"); - -/***/ }), -/* 146 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var EscapeSequenceEncoder = function () { - function EscapeSequenceEncoder() { - _classCallCheck(this, EscapeSequenceEncoder); - - this.stringsCache = new Map(); - } - - _createClass(EscapeSequenceEncoder, [{ - key: "encode", - value: function encode(string, encodeAllSymbols) { - var cacheKey = string + "-" + String(encodeAllSymbols); - if (this.stringsCache.has(cacheKey)) { - return this.stringsCache.get(cacheKey); - } - var radix = 16; - var replaceRegExp = new RegExp('[\\s\\S]', 'g'); - var escapeSequenceRegExp = new RegExp('[\'\"\\\\\\s]'); - var regExp = new RegExp('[\\x00-\\x7F]'); - var prefix = void 0, - template = void 0; - var result = string.replace(replaceRegExp, function (character) { - if (!encodeAllSymbols && !escapeSequenceRegExp.exec(character)) { - return character; - } - if (regExp.exec(character)) { - prefix = '\\x'; - template = '00'; - } else { - prefix = "\\u"; - template = '0000'; - } - return "" + prefix + (template + character.charCodeAt(0).toString(radix)).slice(-template.length); - }); - this.stringsCache.set(cacheKey, result); - return result; - } - }]); - - return EscapeSequenceEncoder; -}(); -EscapeSequenceEncoder = tslib_1.__decorate([inversify_1.injectable()], EscapeSequenceEncoder); -exports.EscapeSequenceEncoder = EscapeSequenceEncoder; - -/***/ }), -/* 147 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var esprima = __webpack_require__(36); -var escodegen = __webpack_require__(29); -var packageJson = __webpack_require__(45); -var LoggingMessage_1 = __webpack_require__(148); -var NodeTransformer_1 = __webpack_require__(18); -var ObfuscationEvent_1 = __webpack_require__(15); -var NodeGuards_1 = __webpack_require__(4); -var JavaScriptObfuscator = JavaScriptObfuscator_1 = function () { - function JavaScriptObfuscator(stackTraceAnalyzer, obfuscationEventEmitter, customNodeGroupStorage, transformersRunner, sourceMapCorrector, randomGenerator, logger, options) { - _classCallCheck(this, JavaScriptObfuscator); - - this.stackTraceAnalyzer = stackTraceAnalyzer; - this.obfuscationEventEmitter = obfuscationEventEmitter; - this.customNodeGroupStorage = customNodeGroupStorage; - this.transformersRunner = transformersRunner; - this.sourceMapCorrector = sourceMapCorrector; - this.randomGenerator = randomGenerator; - this.logger = logger; - this.options = options; - } - - _createClass(JavaScriptObfuscator, [{ - key: "obfuscate", - value: function obfuscate(sourceCode) { - var timeStart = Date.now(); - this.logger.info(LoggingMessage_1.LoggingMessage.Version, packageJson.version); - this.logger.info(LoggingMessage_1.LoggingMessage.ObfuscationStarted); - this.logger.info(LoggingMessage_1.LoggingMessage.RandomGeneratorSeed, this.randomGenerator.getSeed()); - var astTree = this.parseCode(sourceCode); - var obfuscatedAstTree = this.transformAstTree(astTree); - var generatorOutput = this.generateCode(sourceCode, obfuscatedAstTree); - var obfuscationTime = (Date.now() - timeStart) / 1000; - this.logger.success(LoggingMessage_1.LoggingMessage.ObfuscationCompleted, obfuscationTime); - return this.getObfuscationResult(obfuscatedAstTree, generatorOutput); - } - }, { - key: "parseCode", - value: function parseCode(sourceCode) { - return esprima.parseScript(sourceCode, { - attachComment: true, - loc: this.options.sourceMap - }); - } - }, { - key: "transformAstTree", - value: function transformAstTree(astTree) { - var _this = this; - - var isEmptyAstTree = NodeGuards_1.NodeGuards.isProgramNode(astTree) && !astTree.body.length && !astTree.leadingComments; - if (isEmptyAstTree) { - this.logger.warn(LoggingMessage_1.LoggingMessage.EmptySourceCode); - return astTree; - } - this.logger.info(LoggingMessage_1.LoggingMessage.StagePreparingASTTree); - astTree = this.transformersRunner.transform(astTree, JavaScriptObfuscator_1.preparingTransformersList); - this.logger.info(LoggingMessage_1.LoggingMessage.StageAnalyzingASTTree); - var stackTraceData = this.stackTraceAnalyzer.analyze(astTree); - this.customNodeGroupStorage.getStorage().forEach(function (customNodeGroup) { - customNodeGroup.initialize(); - _this.obfuscationEventEmitter.once(customNodeGroup.getAppendEvent(), customNodeGroup.appendCustomNodes.bind(customNodeGroup)); - }); - this.obfuscationEventEmitter.emit(ObfuscationEvent_1.ObfuscationEvent.BeforeObfuscation, astTree, stackTraceData); - if (this.options.deadCodeInjection) { - this.logger.info(LoggingMessage_1.LoggingMessage.StageDeadCodeInjection); - astTree = this.transformersRunner.transform(astTree, JavaScriptObfuscator_1.deadCodeInjectionTransformersList); - } - if (this.options.controlFlowFlattening) { - this.logger.info(LoggingMessage_1.LoggingMessage.StageControlFlowFlattening); - astTree = this.transformersRunner.transform(astTree, JavaScriptObfuscator_1.controlFlowTransformersList); - } - this.logger.info(LoggingMessage_1.LoggingMessage.StageObfuscation); - astTree = this.transformersRunner.transform(astTree, [].concat(_toConsumableArray(JavaScriptObfuscator_1.convertingTransformersList), _toConsumableArray(JavaScriptObfuscator_1.obfuscatingTransformersList))); - this.obfuscationEventEmitter.emit(ObfuscationEvent_1.ObfuscationEvent.AfterObfuscation, astTree, stackTraceData); - return astTree; - } - }, { - key: "generateCode", - value: function generateCode(sourceCode, astTree) { - var escodegenParams = Object.assign({}, JavaScriptObfuscator_1.escodegenParams); - if (this.options.sourceMap) { - escodegenParams.sourceMap = 'sourceMap'; - escodegenParams.sourceContent = sourceCode; - } - var generatorOutput = escodegen.generate(astTree, Object.assign({}, escodegenParams, { format: { - compact: this.options.compact - } })); - generatorOutput.map = generatorOutput.map ? generatorOutput.map.toString() : ''; - return generatorOutput; - } - }, { - key: "getObfuscationResult", - value: function getObfuscationResult(obfuscatedAstTree, generatorOutput) { - return this.sourceMapCorrector.correct(obfuscatedAstTree, generatorOutput.code, generatorOutput.map); - } - }]); - - return JavaScriptObfuscator; -}(); -JavaScriptObfuscator.escodegenParams = { - comment: true, - verbatim: 'x-verbatim-property', - sourceMapWithCode: true -}; -JavaScriptObfuscator.controlFlowTransformersList = [NodeTransformer_1.NodeTransformer.BlockStatementControlFlowTransformer, NodeTransformer_1.NodeTransformer.FunctionControlFlowTransformer]; -JavaScriptObfuscator.convertingTransformersList = [NodeTransformer_1.NodeTransformer.CallExpressionTransformer, NodeTransformer_1.NodeTransformer.MemberExpressionTransformer, NodeTransformer_1.NodeTransformer.MethodDefinitionTransformer, NodeTransformer_1.NodeTransformer.TemplateLiteralTransformer]; -JavaScriptObfuscator.deadCodeInjectionTransformersList = [NodeTransformer_1.NodeTransformer.DeadCodeInjectionTransformer]; -JavaScriptObfuscator.obfuscatingTransformersList = [NodeTransformer_1.NodeTransformer.CatchClauseTransformer, NodeTransformer_1.NodeTransformer.ClassDeclarationTransformer, NodeTransformer_1.NodeTransformer.FunctionDeclarationTransformer, NodeTransformer_1.NodeTransformer.FunctionTransformer, NodeTransformer_1.NodeTransformer.LabeledStatementTransformer, NodeTransformer_1.NodeTransformer.LiteralTransformer, NodeTransformer_1.NodeTransformer.ObjectExpressionTransformer, NodeTransformer_1.NodeTransformer.VariableDeclarationTransformer]; -JavaScriptObfuscator.preparingTransformersList = [NodeTransformer_1.NodeTransformer.CommentsTransformer, NodeTransformer_1.NodeTransformer.ObfuscatingGuardsTransformer, NodeTransformer_1.NodeTransformer.ParentificationTransformer]; -JavaScriptObfuscator = JavaScriptObfuscator_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.TCustomNodeGroupStorage)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ITransformersRunner)), tslib_1.__param(4, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ISourceMapCorrector)), tslib_1.__param(5, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(6, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ILogger)), tslib_1.__param(7, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object, Object, Object, Object, Object, Object, Object])], JavaScriptObfuscator); -exports.JavaScriptObfuscator = JavaScriptObfuscator; -var JavaScriptObfuscator_1; - -/***/ }), -/* 148 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var LoggingMessage; -(function (LoggingMessage) { - LoggingMessage["EmptySourceCode"] = "Empty source code. Obfuscation canceled..."; - LoggingMessage["ObfuscationCompleted"] = "Obfuscation completed. Total time: %s sec."; - LoggingMessage["ObfuscationStarted"] = "Obfuscation started..."; - LoggingMessage["RandomGeneratorSeed"] = "Random generator seed: %s..."; - LoggingMessage["StagePreparingASTTree"] = "Stage: preparing AST-tree..."; - LoggingMessage["StageAnalyzingASTTree"] = "Stage: analyzing AST-tree..."; - LoggingMessage["StageControlFlowFlattening"] = "Stage: control flow flattening..."; - LoggingMessage["StageDeadCodeInjection"] = "Stage: dead code injection..."; - LoggingMessage["StageObfuscation"] = "Stage: obfuscation..."; - LoggingMessage["Version"] = "Version: %s"; -})(LoggingMessage = exports.LoggingMessage || (exports.LoggingMessage = {})); - -/***/ }), -/* 149 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var chalk_1 = __webpack_require__(150); -var Initializable_1 = __webpack_require__(3); -var Logger = Logger_1 = function () { - function Logger(options) { - _classCallCheck(this, Logger); - - this.options = options; - } - - _createClass(Logger, [{ - key: "initialize", - value: function initialize() { - this.colorInfo = chalk_1.default.cyan; - this.colorSuccess = chalk_1.default.green; - this.colorWarn = chalk_1.default.yellow; - } - }, { - key: "info", - value: function info(loggingMessage, value) { - this.log(this.colorInfo, loggingMessage, value); - } - }, { - key: "success", - value: function success(loggingMessage, value) { - this.log(this.colorSuccess, loggingMessage, value); - } - }, { - key: "warn", - value: function warn(loggingMessage, value) { - this.log(this.colorWarn, loggingMessage, value); - } - }, { - key: "log", - value: function log(loggingLevelColor, loggingMessage, value) { - if (!this.options.log) { - return; - } - var processedMessage = loggingLevelColor("\n" + Logger_1.loggingPrefix + " " + loggingMessage); - !value ? console.log(processedMessage) : console.log(processedMessage, value); - } - }]); - - return Logger; -}(); -Logger.loggingPrefix = '[javascript-obfuscator]'; -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Function)], Logger.prototype, "colorInfo", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Function)], Logger.prototype, "colorSuccess", void 0); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Function)], Logger.prototype, "colorWarn", void 0); -tslib_1.__decorate([inversify_1.postConstruct(), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", []), tslib_1.__metadata("design:returntype", void 0)], Logger.prototype, "initialize", null); -Logger = Logger_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], Logger); -exports.Logger = Logger; -var Logger_1; - -/***/ }), -/* 150 */ -/***/ (function(module, exports) { - -module.exports = require("chalk"); - -/***/ }), -/* 151 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var events_1 = __webpack_require__(152); -inversify_1.decorate(inversify_1.injectable(), events_1.EventEmitter); -var ObfuscationEventEmitter = function (_events_1$EventEmitte) { - _inherits(ObfuscationEventEmitter, _events_1$EventEmitte); - - function ObfuscationEventEmitter() { - _classCallCheck(this, ObfuscationEventEmitter); - - return _possibleConstructorReturn(this, (ObfuscationEventEmitter.__proto__ || Object.getPrototypeOf(ObfuscationEventEmitter)).apply(this, arguments)); - } - - return ObfuscationEventEmitter; -}(events_1.EventEmitter); -ObfuscationEventEmitter = tslib_1.__decorate([inversify_1.injectable()], ObfuscationEventEmitter); -exports.ObfuscationEventEmitter = ObfuscationEventEmitter; - -/***/ }), -/* 152 */ -/***/ (function(module, exports) { - -module.exports = require("events"); - -/***/ }), -/* 153 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var Initializable_1 = __webpack_require__(3); -var ObfuscationResult = function () { - function ObfuscationResult() { - _classCallCheck(this, ObfuscationResult); - } - - _createClass(ObfuscationResult, [{ - key: "initialize", - value: function initialize(obfuscatedAst, obfuscatedCode, sourceMap) { - this.obfuscatedAst = obfuscatedAst; - this.obfuscatedCode = obfuscatedCode; - this.sourceMap = sourceMap; - } - }, { - key: "getObfuscatedAst", - value: function getObfuscatedAst() { - return this.obfuscatedAst; - } - }, { - key: "getObfuscatedCode", - value: function getObfuscatedCode() { - return this.obfuscatedCode; - } - }, { - key: "getSourceMap", - value: function getSourceMap() { - return this.sourceMap; - } - }, { - key: "toString", - value: function toString() { - return this.obfuscatedCode; - } - }]); - - return ObfuscationResult; -}(); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Object)], ObfuscationResult.prototype, "obfuscatedAst", void 0); -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()], ObfuscationResult); -exports.ObfuscationResult = ObfuscationResult; - -/***/ }), -/* 154 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var class_validator_1 = __webpack_require__(155); -var IdentifierNamesGenerator_1 = __webpack_require__(23); -var ObfuscationTarget_1 = __webpack_require__(13); -var SourceMapMode_1 = __webpack_require__(24); -var StringArrayEncoding_1 = __webpack_require__(25); -var Default_1 = __webpack_require__(32); -var OptionsNormalizer_1 = __webpack_require__(156); -var ValidationErrorsFormatter_1 = __webpack_require__(167); -var Options = Options_1 = function Options(inputOptions) { - _classCallCheck(this, Options); - - Object.assign(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)); -}; -Options.validatorOptions = { - validationError: { - target: false - } -}; -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, "deadCodeInjection", void 0); -tslib_1.__decorate([class_validator_1.IsNumber(), tslib_1.__metadata("design:type", Number)], Options.prototype, "deadCodeInjectionThreshold", 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 -}), tslib_1.__metadata("design:type", Array)], Options.prototype, "domainLock", void 0); -tslib_1.__decorate([class_validator_1.IsIn([IdentifierNamesGenerator_1.IdentifierNamesGenerator.HexadecimalIdentifierNamesGenerator, IdentifierNamesGenerator_1.IdentifierNamesGenerator.MangledIdentifierNamesGenerator]), tslib_1.__metadata("design:type", String)], Options.prototype, "identifierNamesGenerator", void 0); -tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "log", void 0); -tslib_1.__decorate([class_validator_1.IsBoolean(), tslib_1.__metadata("design:type", Boolean)], Options.prototype, "renameGlobals", void 0); -tslib_1.__decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ - each: true -}), 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 -}), 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([SourceMapMode_1.SourceMapMode.Inline, SourceMapMode_1.SourceMapMode.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, StringArrayEncoding_1.StringArrayEncoding.Base64, StringArrayEncoding_1.StringArrayEncoding.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.IsIn([ObfuscationTarget_1.ObfuscationTarget.Browser, ObfuscationTarget_1.ObfuscationTarget.Extension, ObfuscationTarget_1.ObfuscationTarget.Node]), tslib_1.__metadata("design:type", String)], Options.prototype, "target", 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; - -/***/ }), -/* 155 */ -/***/ (function(module, exports) { - -module.exports = require("class-validator"); - -/***/ }), -/* 156 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var ControlFlowFlatteningThresholdRule_1 = __webpack_require__(157); -var DeadCodeInjectionRule_1 = __webpack_require__(158); -var DeadCodeInjectionThresholdRule_1 = __webpack_require__(159); -var DomainLockRule_1 = __webpack_require__(160); -var SelfDefendingRule_1 = __webpack_require__(161); -var SourceMapBaseUrlRule_1 = __webpack_require__(162); -var SourceMapFileNameRule_1 = __webpack_require__(163); -var StringArrayRule_1 = __webpack_require__(164); -var StringArrayEncodingRule_1 = __webpack_require__(165); -var StringArrayThresholdRule_1 = __webpack_require__(166); - -var OptionsNormalizer = function () { - function OptionsNormalizer() { - _classCallCheck(this, OptionsNormalizer); - } - - _createClass(OptionsNormalizer, null, [{ - key: "normalizeOptions", - value: function normalizeOptions(options) { - var normalizedOptions = Object.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) { - var normalizerRule = _step.value; - - normalizedOptions = normalizerRule(normalizedOptions); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return normalizedOptions; - } - }]); - - return OptionsNormalizer; -}(); - -OptionsNormalizer.normalizerRules = [ControlFlowFlatteningThresholdRule_1.ControlFlowFlatteningThresholdRule, DeadCodeInjectionRule_1.DeadCodeInjectionRule, DeadCodeInjectionThresholdRule_1.DeadCodeInjectionThresholdRule, DomainLockRule_1.DomainLockRule, SelfDefendingRule_1.SelfDefendingRule, SourceMapBaseUrlRule_1.SourceMapBaseUrlRule, SourceMapFileNameRule_1.SourceMapFileNameRule, StringArrayRule_1.StringArrayRule, StringArrayEncodingRule_1.StringArrayEncodingRule, StringArrayThresholdRule_1.StringArrayThresholdRule]; -exports.OptionsNormalizer = OptionsNormalizer; - -/***/ }), -/* 157 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ControlFlowFlatteningThresholdRule = function (options) { - if (options.controlFlowFlatteningThreshold === 0) { - options = Object.assign({}, options, { controlFlowFlattening: false, controlFlowFlatteningThreshold: 0 }); - } - return options; -}; - -/***/ }), -/* 158 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var Default_1 = __webpack_require__(32); -exports.DeadCodeInjectionRule = function (options) { - if (options.deadCodeInjection) { - options = Object.assign({}, options, { deadCodeInjection: true, stringArray: true }); - if (!options.stringArrayThreshold) { - options = Object.assign({}, options, { stringArray: true, stringArrayThreshold: Default_1.DEFAULT_PRESET.stringArrayThreshold }); - } - } - return options; -}; - -/***/ }), -/* 159 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DeadCodeInjectionThresholdRule = function (options) { - if (options.deadCodeInjectionThreshold === 0) { - options = Object.assign({}, options, { deadCodeInjection: false, deadCodeInjectionThreshold: 0 }); - } - return options; -}; - -/***/ }), -/* 160 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var Utils_1 = __webpack_require__(21); -exports.DomainLockRule = function (options) { - if (options.domainLock.length) { - var normalizedDomains = []; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = options.domainLock[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var domain = _step.value; - - normalizedDomains.push(Utils_1.Utils.extractDomainFromUrl(domain)); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - options = Object.assign({}, options, { domainLock: normalizedDomains }); - } - return options; -}; - -/***/ }), -/* 161 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SelfDefendingRule = function (options) { - if (options.selfDefending) { - options = Object.assign({}, options, { compact: true, selfDefending: true }); - } - return options; -}; - -/***/ }), -/* 162 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SourceMapBaseUrlRule = function (options) { - var _options = options, - sourceMapBaseUrl = _options.sourceMapBaseUrl; - - if (!options.sourceMapFileName) { - options = Object.assign({}, options, { sourceMapBaseUrl: '' }); - return options; - } - if (sourceMapBaseUrl && !sourceMapBaseUrl.endsWith('/')) { - options = Object.assign({}, options, { sourceMapBaseUrl: sourceMapBaseUrl + "/" }); - } - return options; -}; - -/***/ }), -/* 163 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SourceMapFileNameRule = function (options) { - var _options = options, - sourceMapFileName = _options.sourceMapFileName; - - if (sourceMapFileName) { - sourceMapFileName = sourceMapFileName.replace(/^\/+/, '').split('.')[0]; - options = Object.assign({}, options, { sourceMapFileName: sourceMapFileName + ".js.map" }); - } - return options; -}; - -/***/ }), -/* 164 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.StringArrayRule = function (options) { - if (!options.stringArray) { - options = Object.assign({}, options, { rotateStringArray: false, stringArray: false, stringArrayEncoding: false, stringArrayThreshold: 0 }); - } - return options; -}; - -/***/ }), -/* 165 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var StringArrayEncoding_1 = __webpack_require__(25); -exports.StringArrayEncodingRule = function (options) { - if (options.stringArrayEncoding === true) { - options = Object.assign({}, options, { stringArrayEncoding: StringArrayEncoding_1.StringArrayEncoding.Base64 }); - } - return options; -}; - -/***/ }), -/* 166 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.StringArrayThresholdRule = function (options) { - if (options.stringArrayThreshold === 0) { - options = Object.assign({}, options, { rotateStringArray: false, stringArray: false, stringArrayEncoding: false, stringArrayThreshold: 0 }); - } - return options; -}; - -/***/ }), -/* 167 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); - -var ValidationErrorsFormatter = function () { - function ValidationErrorsFormatter() { - _classCallCheck(this, ValidationErrorsFormatter); - } - - _createClass(ValidationErrorsFormatter, null, [{ - key: "format", - value: function format(validationErrors) { - var errorsArray = []; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = validationErrors[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var error = _step.value; - - errorsArray.push(ValidationErrorsFormatter.formatError(error)); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return errorsArray.join('\n'); - } - }, { - key: "formatError", - value: function formatError(validationError) { - var constraints = validationError.constraints; - var errorString = "`" + validationError.property + "` errors:\n"; - for (var constraint in constraints) { - if (!constraints.hasOwnProperty(constraint)) { - continue; - } - errorString += " - " + constraints[constraint] + "\n"; - } - return errorString; - } - }]); - - return ValidationErrorsFormatter; -}(); - -exports.ValidationErrorsFormatter = ValidationErrorsFormatter; - -/***/ }), -/* 168 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); - -var SourceCode = function () { - function SourceCode(sourceCode) { - _classCallCheck(this, SourceCode); - - this.sourceCode = sourceCode; - } - - _createClass(SourceCode, [{ - key: "getSourceCode", - value: function getSourceCode() { - return this.sourceCode; - } - }]); - - return SourceCode; -}(); - -exports.SourceCode = SourceCode; - -/***/ }), -/* 169 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var SourceMapMode_1 = __webpack_require__(24); -var SourceMapCorrector = function () { - function SourceMapCorrector(obfuscationResultFactory, cryptUtils, options) { - _classCallCheck(this, SourceMapCorrector); - - this.obfuscationResultFactory = obfuscationResultFactory; - this.cryptUtils = cryptUtils; - this.options = options; - } - - _createClass(SourceMapCorrector, [{ - key: "correct", - value: function correct(obfuscatedAst, obfuscatedCode, sourceMap) { - return this.obfuscationResultFactory(obfuscatedAst, this.correctObfuscatedCode(obfuscatedCode, sourceMap), sourceMap); - } - }, { - key: "correctObfuscatedCode", - value: function correctObfuscatedCode(obfuscatedCode, sourceMap) { - if (!sourceMap) { - return obfuscatedCode; - } - var sourceMapUrl = this.options.sourceMapBaseUrl + this.options.sourceMapFileName; - var sourceMappingUrl = '//# sourceMappingURL='; - switch (this.options.sourceMapMode) { - case SourceMapMode_1.SourceMapMode.Inline: - sourceMappingUrl += "data:application/json;base64," + this.cryptUtils.btoa(sourceMap); - break; - case SourceMapMode_1.SourceMapMode.Separate: - default: - if (!sourceMapUrl) { - return obfuscatedCode; - } - sourceMappingUrl += sourceMapUrl; - break; - } - return obfuscatedCode + "\n" + sourceMappingUrl; - } - }]); - - return SourceMapCorrector; -}(); -SourceMapCorrector = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IObfuscationResult)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.ICryptUtils)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object, Object])], SourceMapCorrector); -exports.SourceMapCorrector = SourceMapCorrector; - -/***/ }), -/* 170 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var estraverse = __webpack_require__(8); -var VisitorDirection_1 = __webpack_require__(171); -var NodeGuards_1 = __webpack_require__(4); -var TransformersRunner = function () { - function TransformersRunner(nodeTransformerFactory) { - _classCallCheck(this, TransformersRunner); - - this.nodeTransformerFactory = nodeTransformerFactory; - } - - _createClass(TransformersRunner, [{ - key: "transform", - value: function transform(astTree, nodeTransformers) { - if (!nodeTransformers.length) { - return astTree; - } - var enterVisitors = []; - var leaveVisitors = []; - var nodeTransformersLength = nodeTransformers.length; - var visitor = void 0; - for (var i = 0; i < nodeTransformersLength; i++) { - visitor = this.nodeTransformerFactory(nodeTransformers[i]).getVisitor(); - if (visitor.enter) { - enterVisitors.push(visitor); - } - if (visitor.leave) { - leaveVisitors.push(visitor); - } - } - estraverse.replace(astTree, { - enter: this.mergeVisitorsForDirection(enterVisitors, VisitorDirection_1.VisitorDirection.Enter), - leave: this.mergeVisitorsForDirection(leaveVisitors, VisitorDirection_1.VisitorDirection.Leave) - }); - return astTree; - } - }, { - key: "mergeVisitorsForDirection", - value: function mergeVisitorsForDirection(visitors, direction) { - var visitorsLength = visitors.length; - if (!visitorsLength) { - return function (node, parentNode) { - return node; - }; - } - return function (node, parentNode) { - if (node.ignoredNode) { - return estraverse.VisitorOption.Skip; - } - for (var i = 0; i < visitorsLength; i++) { - var visitorFunction = visitors[i][direction]; - if (!visitorFunction) { - continue; - } - var visitorResult = visitorFunction(node, parentNode); - if (!visitorResult || !NodeGuards_1.NodeGuards.isNode(visitorResult)) { - continue; - } - node = visitorResult; - } - return node; - }; - } - }]); - - return TransformersRunner; -}(); -TransformersRunner = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__INodeTransformer)), tslib_1.__metadata("design:paramtypes", [Function])], TransformersRunner); -exports.TransformersRunner = TransformersRunner; - -/***/ }), -/* 171 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var VisitorDirection; -(function (VisitorDirection) { - VisitorDirection["Enter"] = "enter"; - VisitorDirection["Leave"] = "leave"; -})(VisitorDirection = exports.VisitorDirection || (exports.VisitorDirection = {})); - -/***/ }), -/* 172 */ -/***/ (function(module, exports) { - -module.exports = require("commander"); - -/***/ }), -/* 173 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ArraySanitizer = function (value) { - if (/,$/.test(value)) { - throw new SyntaxError("Multiple values should be wrapped inside quotes: --option-name 'value1, value2'"); - } - return value.split(',').map(function (string) { - return string.trim(); - }); -}; - -/***/ }), -/* 174 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BooleanSanitizer = function (value) { - return value === 'true' || value === '1'; -}; - -/***/ }), -/* 175 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var IdentifierNamesGenerator_1 = __webpack_require__(23); -exports.IdentifierNamesGeneratorSanitizer = function (value) { - var isCorrectIdentifierNamesGenerator = Object.keys(IdentifierNamesGenerator_1.IdentifierNamesGenerator).some(function (key) { - return IdentifierNamesGenerator_1.IdentifierNamesGenerator[key] === value; - }); - if (!isCorrectIdentifierNamesGenerator) { - throw new ReferenceError('Invalid value of `--identifier-names-generator` option'); - } - return value; -}; - -/***/ }), -/* 176 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var ObfuscationTarget_1 = __webpack_require__(13); -exports.ObfuscationTargetSanitizer = function (value) { - var isCorrectTarget = Object.keys(ObfuscationTarget_1.ObfuscationTarget).some(function (key) { - return ObfuscationTarget_1.ObfuscationTarget[key] === value; - }); - if (!isCorrectTarget) { - throw new ReferenceError('Invalid value of `--target` option'); - } - return value; -}; - -/***/ }), -/* 177 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var SourceMapMode_1 = __webpack_require__(24); -exports.SourceMapModeSanitizer = function (value) { - var isCorrectSourceMapMode = Object.keys(SourceMapMode_1.SourceMapMode).some(function (key) { - return SourceMapMode_1.SourceMapMode[key] === value; - }); - if (!isCorrectSourceMapMode) { - throw new ReferenceError('Invalid value of `--source-map-mode` option'); - } - return value; -}; - -/***/ }), -/* 178 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { value: true }); -var StringArrayEncoding_1 = __webpack_require__(25); -exports.StringArrayEncodingSanitizer = function (value) { - switch (value) { - case 'true': - case '1': - case StringArrayEncoding_1.StringArrayEncoding.Base64: - return true; - case StringArrayEncoding_1.StringArrayEncoding.Rc4: - return StringArrayEncoding_1.StringArrayEncoding.Rc4; - default: - return false; - } -}; - -/***/ }), -/* 179 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var fs = __webpack_require__(46); -var mkdirp = __webpack_require__(180); -var path = __webpack_require__(34); -var JavaScriptObfuscatorCLI_1 = __webpack_require__(33); - -var CLIUtils = function () { - function CLIUtils() { - _classCallCheck(this, CLIUtils); - } - - _createClass(CLIUtils, null, [{ - key: "getOutputCodePath", - value: function getOutputCodePath(inputPath) { - return path.normalize(inputPath).split('.').map(function (value, index) { - return index === 0 ? "" + value + JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI.obfuscatedFilePrefix : value; - }).join('.'); - } - }, { - key: "getOutputSourceMapPath", - value: function getOutputSourceMapPath(outputCodePath) { - var sourceMapFileName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - - if (sourceMapFileName) { - outputCodePath = outputCodePath.substring(0, outputCodePath.lastIndexOf('/')) + "/" + sourceMapFileName; - } - if (!/\.js\.map$/.test(outputCodePath)) { - outputCodePath = outputCodePath.split('.')[0] + ".js.map"; - } else if (/\.js$/.test(outputCodePath)) { - outputCodePath += '.map'; - } - return outputCodePath; - } - }, { - key: "getUserConfig", - value: function getUserConfig(configPath) { - var config = void 0; - try { - config = !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()); - } catch (e) { - try { - config = require(configPath); - } catch (e) { - throw new ReferenceError('Given config path must be a valid file path'); - } - } - return config; - } - }, { - key: "writeFile", - value: function writeFile(outputPath, data) { - mkdirp.sync(path.dirname(outputPath)); - fs.writeFileSync(outputPath, data, { - encoding: JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI.encoding - }); - } - }]); - - return CLIUtils; -}(); - -exports.CLIUtils = CLIUtils; - -/***/ }), -/* 180 */ -/***/ (function(module, exports) { - -module.exports = require("mkdirp"); - -/***/ }), -/* 181 */ -/***/ (function(module, exports) { - -function webpackEmptyContext(req) { - throw new Error("Cannot find module '" + req + "'."); -} -webpackEmptyContext.keys = function() { return []; }; -webpackEmptyContext.resolve = webpackEmptyContext; -module.exports = webpackEmptyContext; -webpackEmptyContext.id = 181; - -/***/ }), -/* 182 */ -/***/ (function(module, exports, __webpack_require__) { - -"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 _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); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -Object.defineProperty(exports, "__esModule", { value: true }); -var fs = __webpack_require__(46); -var path = __webpack_require__(34); -var JavaScriptObfuscatorCLI_1 = __webpack_require__(33); - -var SourceCodeReader = function () { - function SourceCodeReader() { - _classCallCheck(this, SourceCodeReader); - } - - _createClass(SourceCodeReader, null, [{ - key: "readSourceCode", - value: function readSourceCode(inputPath) { - if (SourceCodeReader.isFilePath(inputPath)) { - return SourceCodeReader.readFile(inputPath); - } - if (SourceCodeReader.isDirectoryPath(inputPath)) { - return SourceCodeReader.readDirectoryRecursive(inputPath); - } - throw new ReferenceError("Given input path must be a valid source code file or directory path"); - } - }, { - key: "isDirectoryPath", - value: function isDirectoryPath(filePath) { - try { - return fs.statSync(filePath).isDirectory(); - } catch (e) { - return false; - } - } - }, { - key: "isFilePath", - value: function isFilePath(filePath) { - try { - return fs.statSync(filePath).isFile(); - } catch (e) { - return false; - } - } - }, { - key: "readDirectoryRecursive", - value: function readDirectoryRecursive(directoryPath) { - var fileData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - fs.readdirSync(directoryPath, JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI.encoding).forEach(function (fileName) { - var filePath = directoryPath + "/" + fileName; - if (SourceCodeReader.isDirectoryPath(filePath)) { - fileData.push.apply(fileData, _toConsumableArray(SourceCodeReader.readDirectoryRecursive(filePath))); - } else if (SourceCodeReader.isFilePath(filePath) && SourceCodeReader.isValidFile(fileName)) { - var content = fs.readFileSync(filePath, JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI.encoding); - fileData.push({ filePath: filePath, content: content }); - } - }); - return fileData; - } - }, { - key: "readFile", - value: function readFile(filePath) { - if (!SourceCodeReader.isValidFile(filePath)) { - throw new ReferenceError("Input file must have .js extension"); - } - return fs.readFileSync(filePath, JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI.encoding); - } - }, { - key: "isValidFile", - value: function isValidFile(filePath) { - return JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI.availableInputExtensions.indexOf(path.extname(filePath)) !== -1 && !(filePath.indexOf(JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI.obfuscatedFilePrefix) !== -1); - } - }]); - - return SourceCodeReader; -}(); - -exports.SourceCodeReader = SourceCodeReader; - -/***/ }), -/* 183 */ -/***/ (function(module, exports, __webpack_require__) { - -"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"); } } - -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; } - -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = __webpack_require__(2); -var inversify_1 = __webpack_require__(0); -var ServiceIdentifiers_1 = __webpack_require__(1); -var AbstractNodeTransformer_1 = __webpack_require__(7); -var NodeGuards_1 = __webpack_require__(4); -var CallExpressionTransformer = function (_AbstractNodeTransfor) { - _inherits(CallExpressionTransformer, _AbstractNodeTransfor); - - function CallExpressionTransformer(javaScriptObfuscator, randomGenerator, options) { - _classCallCheck(this, CallExpressionTransformer); - - var _this = _possibleConstructorReturn(this, (CallExpressionTransformer.__proto__ || Object.getPrototypeOf(CallExpressionTransformer)).call(this, randomGenerator, options)); - - _this.javaScriptObfuscator = javaScriptObfuscator; - return _this; - } - - _createClass(CallExpressionTransformer, [{ - key: "getVisitor", - value: function getVisitor() { - var _this2 = this; - - return { - enter: function enter(node, parentNode) { - if (parentNode && NodeGuards_1.NodeGuards.isCallExpressionNode(node)) { - return _this2.transformNode(node, parentNode); - } - } - }; - } - }, { - key: "transformNode", - value: function transformNode(callExpressionNode, parentNode) { - var callExpressionFirstArgument = callExpressionNode.arguments[0]; - if (NodeGuards_1.NodeGuards.isIdentifierNode(callExpressionNode.callee) && callExpressionNode.callee.name === 'eval' && callExpressionFirstArgument && NodeGuards_1.NodeGuards.isLiteralNode(callExpressionFirstArgument)) { - return this.transformEvalCallExpressionLiteralToAst(callExpressionFirstArgument); - } - return callExpressionNode; - } - }, { - key: "transformEvalCallExpressionLiteralToAst", - value: function transformEvalCallExpressionLiteralToAst(literalNode) { - if (typeof literalNode.value !== 'string') { - return literalNode; - } - var code = literalNode.value; - var obfuscationResult = this.javaScriptObfuscator.obfuscate(code); - return obfuscationResult.getObfuscatedAst(); - } - }]); - - return CallExpressionTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -CallExpressionTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IJavaScriptObfuscator)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object, Object])], CallExpressionTransformer); -exports.CallExpressionTransformer = CallExpressionTransformer; - -/***/ }) -/******/ ]); +require("source-map-support").install(),module.exports=function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=48)}([function(e,t){e.exports=require("inversify")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.Factory__ICalleeDataExtractor="Factory",e.Factory__IControlFlowCustomNode="Factory",e.Factory__IControlFlowReplacer="Factory",e.Factory__ICustomNode="Factory",e.Factory__ICustomNodeGroup="Factory",e.Factory__IDeadCodeInjectionCustomNode="Factory",e.Factory__IIdentifierNamesGenerator="Factory",e.Factory__IIdentifierObfuscatingReplacer="Factory",e.Factory__INodeGuard="Factory",e.Factory__INodeTransformer="Factory",e.Factory__IObfuscationResult="Factory",e.Factory__IObfuscatingReplacer="Factory",e.Factory__TControlFlowStorage="Factory",e.IArrayUtils="IArrayUtils",e.ICalleeDataExtractor="ICalleeDataExtractor",e.ICryptUtils="ICryptUtils",e.ICustomNode="ICustomNode",e.ICustomNodeGroup="ICustomNodeGroup",e.IControlFlowReplacer="IControlFlowReplacer",e.IEscapeSequenceEncoder="IEscapeSequenceEncoder",e.IIdentifierNamesGenerator="IIdentifierNamesGenerator",e.IIdentifierObfuscatingReplacer="IIdentifierObfuscatingReplacer",e.IJavaScriptObfuscator="IJavaScriptObfuscator",e.ILogger="ILogger",e.INodeGuard="INodeGuard",e.INodeTransformer="INodeTransformer",e.IObfuscationEventEmitter="IObfuscationEventEmitter",e.IObfuscationResult="IObfuscationResult",e.IOptions="IOptions",e.IObfuscatingReplacer="IObfuscatingReplacer",e.IRandomGenerator="IRandomGenerator",e.ISourceCode="ISourceCode",e.ISourceMapCorrector="ISourceMapCorrector",e.IStackTraceAnalyzer="IStackTraceAnalyzer",e.ITransformersRunner="ITransformersRunner",e.Newable__ICustomNode="Newable",e.Newable__TControlFlowStorage="Newable",e.TCustomNodeGroupStorage="TCustomNodeGroupStorage",e.TStringArrayStorage="TStringArrayStorage"}(t.ServiceIdentifiers||(t.ServiceIdentifiers={}))},function(e,t){e.exports=require("tslib")},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=t.parentNode;if(!o)throw new ReferenceError("`parentNode` property of given node is `undefined`");return(u.NodeGuards.isProgramNode(t)||n&&u.NodeGuards.isNodeHasBlockScope(t,o))&&r.push(t),t!==o?e.getBlockScopesOfNodeRecursive(o,r,++n):r}}]),e}();t.NodeUtils=l},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"initialize",t=Object.keys(this)[0];return function(r,n){var o={configurable:!0,enumerable:!0},a=r[e];if(!a||"function"!=typeof a)throw new Error("`"+e+"` method with initialization logic not found. `@"+t+"` decorator requires `"+e+"` method");var i="_"+n,c=Object.getOwnPropertyDescriptor(r,i)||o,s=Object.getOwnPropertyDescriptor(r,e)||o,u=s.value;return Object.defineProperty(r,n,Object.assign({},c,{get:function(){if(void 0===this[i])throw new Error("Property `"+n+"` is not initialized! Initialize it first!");return this[i]},set:function(e){this[i]=e}})),Object.defineProperty(r,e,Object.assign({},s,{value:function(){u.apply(this,arguments),this[n]}})),c}}Object.defineProperty(t,"__esModule",{value:!0}),t.initializable=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.Program,body:e,sourceType:"script",obfuscatedNode:!1}}},{key:"getArrayExpressionNode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.ArrayExpression,elements:e}}},{key:"getAssignmentExpressionNode",value:function(e,t,r){return{type:i.NodeType.AssignmentExpression,operator:e,left:t,right:r,obfuscatedNode:!1}}},{key:"getBinaryExpressionNode",value:function(e,t,r){return{type:i.NodeType.BinaryExpression,operator:e,left:t,right:r,obfuscatedNode:!1}}},{key:"getBlockStatementNode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.BlockStatement,body:e,obfuscatedNode:!1}}},{key:"getBreakStatement",value:function(e){var t={type:i.NodeType.BreakStatement,obfuscatedNode:!1};return e&&(t.label=e),t}},{key:"getCatchClauseNode",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.CatchClause,param:e.getIdentifierNode("err"),body:e.getBlockStatementNode(t),obfuscatedNode:!1}}},{key:"getCallExpressionNode",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return{type:i.NodeType.CallExpression,callee:e,arguments:t,obfuscatedNode:!1}}},{key:"getContinueStatement",value:function(e){var t={type:i.NodeType.ContinueStatement,obfuscatedNode:!1};return e&&(t.label=e),t}},{key:"getExpressionStatementNode",value:function(e){return{type:i.NodeType.ExpressionStatement,expression:e,obfuscatedNode:!1}}},{key:"getFunctionDeclarationNode",value:function(t,r,n){return{type:i.NodeType.FunctionDeclaration,id:e.getIdentifierNode(t),params:r,body:n,generator:!1,obfuscatedNode:!1}}},{key:"getFunctionExpressionNode",value:function(e,t){return{type:i.NodeType.FunctionExpression,params:e,body:t,generator:!1,obfuscatedNode:!1}}},{key:"getIfStatementNode",value:function(e,t,r){return Object.assign({type:i.NodeType.IfStatement,test:e,consequent:t},r&&{alternate:r},{obfuscatedNode:!1})}},{key:"getIdentifierNode",value:function(e){return{type:i.NodeType.Identifier,name:e,obfuscatedNode:!1}}},{key:"getLabeledStatement",value:function(e,t){return{type:i.NodeType.LabeledStatement,label:e,body:t,obfuscatedNode:!1}}},{key:"getLiteralNode",value:function(e,t){return t=void 0!==t?t:"'"+e+"'",{type:i.NodeType.Literal,value:e,raw:t,"x-verbatim-property":{content:t,precedence:a.Precedence.Primary},obfuscatedNode:!1}}},{key:"getLogicalExpressionNode",value:function(e,t,r){return{type:i.NodeType.LogicalExpression,operator:e,left:t,right:r,obfuscatedNode:!1}}},{key:"getMemberExpressionNode",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return{type:i.NodeType.MemberExpression,computed:r,object:e,property:t,obfuscatedNode:!1}}},{key:"getMethodDefinitionNode",value:function(e,t,r,n){return{type:i.NodeType.MethodDefinition,key:e,value:t,kind:r,computed:n,static:!1,obfuscatedNode:!1}}},{key:"getObjectExpressionNode",value:function(e){return{type:i.NodeType.ObjectExpression,properties:e,obfuscatedNode:!1}}},{key:"getPropertyNode",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return{type:i.NodeType.Property,key:e,value:t,kind:"init",method:!1,shorthand:!1,computed:r,obfuscatedNode:!1}}},{key:"getUnaryExpressionNode",value:function(e,t){var r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return{type:i.NodeType.UnaryExpression,operator:e,argument:t,prefix:r,obfuscatedNode:!1}}},{key:"getReturnStatementNode",value:function(e){return{type:i.NodeType.ReturnStatement,argument:e,obfuscatedNode:!1}}},{key:"getSwitchStatementNode",value:function(e,t){return{type:i.NodeType.SwitchStatement,discriminant:e,cases:t,obfuscatedNode:!1}}},{key:"getSwitchCaseNode",value:function(e,t){return{type:i.NodeType.SwitchCase,test:e,consequent:t,obfuscatedNode:!1}}},{key:"getUpdateExpressionNode",value:function(e,t){return{type:i.NodeType.UpdateExpression,operator:e,argument:t,prefix:!1,obfuscatedNode:!1}}},{key:"getVariableDeclarationNode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"var";return{type:i.NodeType.VariableDeclaration,declarations:e,kind:t,obfuscatedNode:!1}}},{key:"getVariableDeclaratorNode",value:function(e,t){return{type:i.NodeType.VariableDeclarator,id:e,init:t,obfuscatedNode:!1}}},{key:"getWhileStatementNode",value:function(e,t){return{type:i.NodeType.WhileStatement,test:e,body:t,obfuscatedNode:!1}}}]),e}();t.Nodes=c},function(e,t){e.exports=require("estraverse")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.ArrayExpression="ArrayExpression",e.ArrayPattern="ArrayPattern",e.ArrowFunctionExpression="ArrowFunctionExpression",e.AssignmentExpression="AssignmentExpression",e.AssignmentPattern="AssignmentPattern",e.AwaitExpression="AwaitExpression",e.BinaryExpression="BinaryExpression",e.BlockStatement="BlockStatement",e.BreakStatement="BreakStatement",e.CallExpression="CallExpression",e.CatchClause="CatchClause",e.ClassDeclaration="ClassDeclaration",e.ContinueStatement="ContinueStatement",e.ExpressionStatement="ExpressionStatement",e.FunctionDeclaration="FunctionDeclaration",e.FunctionExpression="FunctionExpression",e.Identifier="Identifier",e.IfStatement="IfStatement",e.LabeledStatement="LabeledStatement",e.Literal="Literal",e.LogicalExpression="LogicalExpression",e.MemberExpression="MemberExpression",e.MethodDefinition="MethodDefinition",e.ObjectExpression="ObjectExpression",e.ObjectPattern="ObjectPattern",e.Program="Program",e.Property="Property",e.RestElement="RestElement",e.ReturnStatement="ReturnStatement",e.Super="Super",e.SwitchCase="SwitchCase",e.SwitchStatement="SwitchStatement",e.TemplateLiteral="TemplateLiteral",e.TryStatement="TryStatement",e.UnaryExpression="UnaryExpression",e.UpdateExpression="UpdateExpression",e.VariableDeclaration="VariableDeclaration",e.VariableDeclarator="VariableDeclarator",e.WhileStatement="WhileStatement"}(t.NodeType||(t.NodeType={}))},function(e,t){e.exports=require("string-template")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.BinaryExpressionFunctionNode="BinaryExpressionFunctionNode",e.BlockStatementControlFlowFlatteningNode="BlockStatementControlFlowFlatteningNode",e.CallExpressionControlFlowStorageCallNode="CallExpressionControlFlowStorageCallNode",e.CallExpressionFunctionNode="CallExpressionFunctionNode",e.ControlFlowStorageNode="ControlFlowStorageNode",e.ExpressionWithOperatorControlFlowStorageCallNode="ExpressionWithOperatorControlFlowStorageCallNode",e.LogicalExpressionFunctionNode="LogicalExpressionFunctionNode",e.StringLiteralControlFlowStorageCallNode="StringLiteralControlFlowStorageCallNode",e.StringLiteralNode="StringLiteralNode"}(t.ControlFlowCustomNode||(t.ControlFlowCustomNode={}))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.Browser="browser",e.Extension="extension",e.Node="node"}(t.ObfuscationTarget||(t.ObfuscationTarget={}))},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r1?t-1:0),n=1;n3&&void 0!==arguments[3]?arguments[3]:0,a=void 0;a=t.length?e.getOptimalBlockScope(t,o):r,e.prependNode(a,n)}},{key:"getOptimalBlockScope",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1/0,o=t[r];if(n<=0)throw new Error("Invalid `deep` argument value. Value should be bigger then 0.");return n>1&&o.stackTrace.length?e.getOptimalBlockScope(o.stackTrace,0,--n):o.callee}},{key:"insertNodeAfter",value:function(t,r,n){var o=e.getScopeNodeStatements(t).indexOf(n);e.insertNodeAtIndex(t,r,o+1)}},{key:"insertNodeAtIndex",value:function(t,r,o){e.validateScopeStatements(r)||(r=[]),r=e.parentizeScopeStatementsBeforeAppend(t,r),e.setScopeNodeStatements(t,[].concat(n(e.getScopeNodeStatements(t).slice(0,o)),n(r),n(e.getScopeNodeStatements(t).slice(o))))}},{key:"prependNode",value:function(t,r){e.validateScopeStatements(r)||(r=[]),r=e.parentizeScopeStatementsBeforeAppend(t,r),e.setScopeNodeStatements(t,[].concat(n(r),n(e.getScopeNodeStatements(t))))}},{key:"getScopeNodeStatements",value:function(e){return i.NodeGuards.isSwitchCaseNode(e)?e.consequent:e.body}},{key:"parentizeScopeStatementsBeforeAppend",value:function(e,t){return t.forEach(function(t){t.parentNode=e}),t}},{key:"setScopeNodeStatements",value:function(e,t){if(i.NodeGuards.isSwitchCaseNode(e))return void(e.consequent=t);e.body=t}},{key:"validateScopeStatements",value:function(e){return e.every(function(e){return!!e&&e.hasOwnProperty("type")})}}]),e}();t.NodeAppender=c},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.AfterObfuscation="afterObfuscation",e.BeforeObfuscation="beforeObfuscation"}(t.ObfuscationEvent||(t.ObfuscationEvent={}))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.BaseIdentifierObfuscatingReplacer="BaseIdentifierObfuscatingReplacer"}(t.IdentifierObfuscatingReplacer||(t.IdentifierObfuscatingReplacer={}))},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{},r=new i.InversifyContainerFacade;r.load(e,t);var n=r.get(a.ServiceIdentifiers.IJavaScriptObfuscator),o=n.obfuscate(e);return r.unload(),o}},{key:"runCLI",value:function(e){var t=new c.JavaScriptObfuscatorCLI(e);t.initialize(),t.run()}}]),e}();t.JavaScriptObfuscator=s},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.AstToEvalCallExpressionTransformer="AstToEvalCallExpressionTransformer",e.BlockStatementControlFlowTransformer="BlockStatementControlFlowTransformer",e.ClassDeclarationTransformer="ClassDeclarationTransformer",e.CommentsTransformer="CommentsTransformer",e.DeadCodeInjectionTransformer="DeadCodeInjectionTransformer",e.EvalCallExpressionToAstTransformer="EvalCallExpressionToAstTransformer",e.FunctionControlFlowTransformer="FunctionControlFlowTransformer",e.CatchClauseTransformer="CatchClauseTransformer",e.FunctionDeclarationTransformer="FunctionDeclarationTransformer",e.FunctionTransformer="FunctionTransformer",e.LabeledStatementTransformer="LabeledStatementTransformer",e.LiteralTransformer="LiteralTransformer",e.MemberExpressionTransformer="MemberExpressionTransformer",e.MethodDefinitionTransformer="MethodDefinitionTransformer",e.ObfuscatingGuardsTransformer="ObfuscatingGuardsTransformer",e.ObjectExpressionKeysTransformer="ObjectExpressionKeysTransformer",e.ObjectExpressionTransformer="ObjectExpressionTransformer",e.ParentificationTransformer="ParentificationTransformer",e.TemplateLiteralTransformer="TemplateLiteralTransformer",e.VariableDeclarationTransformer="VariableDeclarationTransformer"}(t.NodeTransformer||(t.NodeTransformer={}))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.ConsoleOutputDisableExpressionNode="ConsoleOutputDisableExpressionNode",e.DebugProtectionFunctionCallNode="DebugProtectionFunctionCallNode",e.DebugProtectionFunctionIntervalNode="DebugProtectionFunctionIntervalNode",e.DebugProtectionFunctionNode="DebugProtectionFunctionNode",e.DomainLockNode="DomainLockNode",e.NodeCallsControllerFunctionNode="NodeCallsControllerFunctionNode",e.SelfDefendingUnicodeNode="SelfDefendingUnicodeNode",e.StringArrayCallsWrapper="StringArrayCallsWrapper",e.StringArrayNode="StringArrayNode",e.StringArrayRotateFunctionNode="StringArrayRotateFunctionNode"}(t.CustomNode||(t.CustomNode={}))},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r-1||0===e.indexOf("//")?e.split("/")[2]:e.split("/")[0],t=t.split(":")[0]}},{key:"isCeilNumber",value:function(e){return e%1==0}},{key:"stringRotate",value:function(e,t){if(!e)throw new ReferenceError("Cannot rotate empty string.");for(var r=0;r [options]").version(c.version,"-v, --version").option("-o, --output ","Output path for obfuscated code").option("--compact ","Disable one line output code compacting",d.BooleanSanitizer).option("--config ","Name of js / json config file").option("--control-flow-flattening ","Enables control flow flattening",d.BooleanSanitizer).option("--control-flow-flattening-threshold ","The probability that the control flow flattening transformation will be applied to the node",parseFloat).option("--dead-code-injection ","Enables dead code injection",d.BooleanSanitizer).option("--dead-code-injection-threshold ","The probability that the dead code injection transformation will be applied to the node",parseFloat).option("--debug-protection ","Disable browser Debug panel (can cause DevTools enabled browser freeze)",d.BooleanSanitizer).option("--debug-protection-interval ","Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)",d.BooleanSanitizer).option("--disable-console-output ","Allow console.log, console.info, console.error and console.warn messages output into browser console",d.BooleanSanitizer).option("--domain-lock (comma separated, without whitespaces)","Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)",f.ArraySanitizer).option("--identifier-names-generator [hexadecimal, mangled]","Sets identifier names generator (Default: hexadecimal)",p.IdentifierNamesGeneratorSanitizer).option("--log ","Enables logging of the information to the console",d.BooleanSanitizer).option("--reserved-names (comma separated, without whitespaces)","Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)",f.ArraySanitizer).option("--rename-globals ","Allows to enable obfuscation of global variable and function names with declaration.",d.BooleanSanitizer).option("--rotate-string-array ","Disable rotation of unicode array values during obfuscation",d.BooleanSanitizer).option("--seed ","Sets seed for random generator. This is useful for creating repeatable results.",parseFloat).option("--self-defending ","Disables self-defending for obfuscated code",d.BooleanSanitizer).option("--source-map ","Enables source map generation",d.BooleanSanitizer).option("--source-map-base-url ","Sets base url to the source map import url when `--source-map-mode=separate`").option("--source-map-file-name ","Sets file name for output source map when `--source-map-mode=separate`").option("--source-map-mode [inline, separate]","Specify source map output mode",y.SourceMapModeSanitizer).option("--string-array ","Disables gathering of all literal strings into an array and replacing every literal string with an array call",d.BooleanSanitizer).option("--string-array-encoding [true, false, base64, rc4]","Encodes all strings in strings array using base64 or rc4 (this option can slow down your code speed",b.StringArrayEncodingSanitizer).option("--string-array-threshold ","The probability that the literal string will be inserted into stringArray (Default: 0.8, Min: 0, Max: 1)",parseFloat).option("--target ","Allows to set target environment for obfuscated code.",m.ObfuscationTargetSanitizer).option("--transform-object-keys ","Enables transformation of object keys",d.BooleanSanitizer).option("--unicode-escape-sequence ","Allows to enable/disable string conversion to unicode escape sequence",d.BooleanSanitizer).parse(this.rawArguments)}},{key:"configureHelp",value:function(){this.commands.on("--help",function(){console.log(" Examples:\n"),console.log(" %> javascript-obfuscator input_file_name.js --compact true --self-defending false"),console.log(" %> javascript-obfuscator input_file_name.js --output output_file_name.js --compact true --self-defending false"),console.log(" %> javascript-obfuscator input_directory_name --compact true --self-defending false"),console.log("")})}},{key:"processSourceCodeData",value:function(e){var t=this,r=this.inputCLIOptions.output?s.normalize(this.inputCLIOptions.output):"";if(Array.isArray(e))e.forEach(function(e){var n=e.filePath,o=e.content,a=r?s.join(r,n):g.CLIUtils.getOutputCodePath(n);t.processSourceCode(o,a)});else{var n=r||g.CLIUtils.getOutputCodePath(this.inputPath);this.processSourceCode(e,n)}}},{key:"processSourceCode",value:function(t,r){var n=this.buildOptions();n.sourceMap?e.processSourceCodeWithSourceMap(t,r,n):e.processSourceCodeWithoutSourceMap(t,r,n)}}],[{key:"filterOptions",value:function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&void 0!==e[r]&&(t[r]=e[r]);return t}},{key:"processSourceCodeWithoutSourceMap",value:function(e,t,r){var n=v.JavaScriptObfuscator.obfuscate(e,r).getObfuscatedCode();g.CLIUtils.writeFile(t,n)}},{key:"processSourceCodeWithSourceMap",value:function(e,t,r){var n=g.CLIUtils.getOutputSourceMapPath(t,r.sourceMapFileName||"");r=Object.assign({},r,{sourceMapFileName:s.basename(n)});var o=v.JavaScriptObfuscator.obfuscate(e,r);g.CLIUtils.writeFile(t,o.getObfuscatedCode()),"separate"===r.sourceMapMode&&o.getSourceMap()&&g.CLIUtils.writeFile(n,o.getSourceMap())}}]),e}();_.availableInputExtensions=[".js"],_.encoding="utf8",_.obfuscatedFilePrefix="-obfuscated",a.__decorate([u.initializable(),a.__metadata("design:type",Object)],_.prototype,"commands",void 0),a.__decorate([u.initializable(),a.__metadata("design:type",Object)],_.prototype,"inputCLIOptions",void 0),a.__decorate([u.initializable(),a.__metadata("design:type",String)],_.prototype,"inputPath",void 0),t.JavaScriptObfuscatorCLI=_},function(e,t){e.exports=require("path")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.FunctionDeclarationCalleeDataExtractor="FunctionDeclarationCalleeDataExtractor",e.FunctionExpressionCalleeDataExtractor="FunctionExpressionCalleeDataExtractor",e.ObjectExpressionCalleeDataExtractor="ObjectExpressionCalleeDataExtractor"}(t.CalleeDataExtractor||(t.CalleeDataExtractor={}))},function(e,t){e.exports=require("esprima")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.BinaryExpressionControlFlowReplacer="BinaryExpressionControlFlowReplacer",e.CallExpressionControlFlowReplacer="CallExpressionControlFlowReplacer",e.LogicalExpressionControlFlowReplacer="LogicalExpressionControlFlowReplacer",e.StringLiteralControlFlowReplacer="StringLiteralControlFlowReplacer"}(t.ControlFlowReplacer||(t.ControlFlowReplacer={}))},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]&&arguments[1];this.storage=new Map([].concat(n(this.storage),n(e.getStorage()))),t&&(this.storageId=e.getStorageId())}},{key:"set",value:function(e,t){this.storage.set(e,t)}}]),e}();c.__decorate([l.initializable(),c.__metadata("design:type",String)],f.prototype,"storageId",void 0),c.__decorate([l.initializable(),c.__metadata("design:type",Map)],f.prototype,"storage",void 0),c.__decorate([s.postConstruct(),c.__metadata("design:type",Function),c.__metadata("design:paramtypes",[]),c.__metadata("design:returntype",void 0)],f.prototype,"initialize",null),f=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(1,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Object,Object])],f),t.MapStorage=f},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:d.randomGeneratorPool;return this.getRandomGenerator().string({length:e,pool:t})}},{key:"getSeed",value:function(){return this.seed}}]),e}();f.randomGeneratorPool="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",f.randomGeneratorPoolNumbers="0123456789",f.randomGeneratorPoolHexadecimal="abcdef"+d.randomGeneratorPoolNumbers,a.__decorate([l.initializable(),a.__metadata("design:type",Object)],f.prototype,"randomGenerator",void 0),a.__decorate([l.initializable(),a.__metadata("design:type",Number)],f.prototype,"seed",void 0),a.__decorate([i.postConstruct(),a.__metadata("design:type",Function),a.__metadata("design:paramtypes",[]),a.__metadata("design:returntype",void 0)],f.prototype,"initialize",null),f=d=a.__decorate([i.injectable(),a.__param(0,i.inject(c.ServiceIdentifiers.ISourceCode)),a.__param(1,i.inject(c.ServiceIdentifiers.IOptions)),a.__metadata("design:paramtypes",[Object,Object])],f),t.RandomGenerator=f;var d},function(e,t){e.exports=require("pjson")},function(e,t){e.exports=require("fs")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(18);e.exports=n.JavaScriptObfuscator},function(e,t){e.exports=require("reflect-metadata")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(14),o=r(0),a=r(1),i=r(35),c=r(51),s=r(52),u=r(53),l=r(54);t.analyzersModule=new o.ContainerModule(function(e){e(a.ServiceIdentifiers.IStackTraceAnalyzer).to(l.StackTraceAnalyzer).inSingletonScope(),e(a.ServiceIdentifiers.ICalleeDataExtractor).to(c.FunctionDeclarationCalleeDataExtractor).whenTargetNamed(i.CalleeDataExtractor.FunctionDeclarationCalleeDataExtractor),e(a.ServiceIdentifiers.ICalleeDataExtractor).to(s.FunctionExpressionCalleeDataExtractor).whenTargetNamed(i.CalleeDataExtractor.FunctionExpressionCalleeDataExtractor),e(a.ServiceIdentifiers.ICalleeDataExtractor).to(u.ObjectExpressionCalleeDataExtractor).whenTargetNamed(i.CalleeDataExtractor.ObjectExpressionCalleeDataExtractor),e(a.ServiceIdentifiers.Factory__ICalleeDataExtractor).toFactory(n.InversifyContainerFacade.getCacheFactory(a.ServiceIdentifiers.ICalleeDataExtractor))})},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rr)return"break";var a=e[o];s.traverse(a,{enter:function(r){if(l.NodeGuards.isCallExpressionNode(r))return a.parentNode!==f.NodeUtils.getBlockScopesOfNode(r)[0]?s.VisitorOption.Skip:void t.analyzeCallExpressionNode(n,e,r)}})}(a))break}return n}},{key:"analyzeCallExpressionNode",value:function(e,t,r){var n=this;p.calleeDataExtractorsList.forEach(function(o){var a=n.calleeDataExtractorFactory(o).extract(t,r.callee);a&&e.push(Object.assign({},a,{stackTrace:n.analyzeRecursive(a.callee.body)}))})}}],[{key:"getLimitIndex",value:function(e){var t=e-1,r=p.limitThresholdActivationLength-1,n=t;return t>r&&(n=Math.round(r+t*p.limitThreshold))>t&&(n=t),n}}]),e}();d.calleeDataExtractorsList=[u.CalleeDataExtractor.FunctionDeclarationCalleeDataExtractor,u.CalleeDataExtractor.FunctionExpressionCalleeDataExtractor,u.CalleeDataExtractor.ObjectExpressionCalleeDataExtractor],d.limitThresholdActivationLength=25,d.limitThreshold=.002,d=p=a.__decorate([i.injectable(),a.__param(0,i.inject(c.ServiceIdentifiers.Factory__ICalleeDataExtractor)),a.__metadata("design:paramtypes",[Function])],d),t.StackTraceAnalyzer=d;var p},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(14),o=r(0),a=r(1),i=r(37),c=r(19),s=r(56),u=r(57),l=r(58),f=r(59),d=r(60),p=r(61),m=r(62);t.controlFlowTransformersModule=new o.ContainerModule(function(e){e(a.ServiceIdentifiers.INodeTransformer).to(u.BlockStatementControlFlowTransformer).whenTargetNamed(c.NodeTransformer.BlockStatementControlFlowTransformer),e(a.ServiceIdentifiers.INodeTransformer).to(f.DeadCodeInjectionTransformer).whenTargetNamed(c.NodeTransformer.DeadCodeInjectionTransformer),e(a.ServiceIdentifiers.INodeTransformer).to(d.FunctionControlFlowTransformer).whenTargetNamed(c.NodeTransformer.FunctionControlFlowTransformer),e(a.ServiceIdentifiers.IControlFlowReplacer).to(s.BinaryExpressionControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.BinaryExpressionControlFlowReplacer),e(a.ServiceIdentifiers.IControlFlowReplacer).to(l.CallExpressionControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.CallExpressionControlFlowReplacer),e(a.ServiceIdentifiers.IControlFlowReplacer).to(p.LogicalExpressionControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.LogicalExpressionControlFlowReplacer),e(a.ServiceIdentifiers.IControlFlowReplacer).to(m.StringLiteralControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.StringLiteralControlFlowReplacer),e(a.ServiceIdentifiers.Factory__IControlFlowReplacer).toFactory(n.InversifyContainerFacade.getCacheFactory(a.ServiceIdentifiers.IControlFlowReplacer))})},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rthis.options.controlFlowFlatteningThreshold||!b.canTransformBlockStatementNode(e))return e;var r=e.body,n=this.arrayUtils.arrayRange(r.length),o=this.arrayUtils.arrayShuffle(n),a=n.map(function(e){return o.indexOf(e)}),i=this.controlFlowCustomNodeFactory(f.ControlFlowCustomNode.BlockStatementControlFlowFlatteningNode);i.initialize(r,o,a);var c=i.getNode()[0];return m.NodeUtils.parentizeNode(c,t),c}}],[{key:"blockStatementHasProhibitedStatements",value:function(e){return e.body.some(function(e){var t=p.NodeGuards.isBreakStatementNode(e)||p.NodeGuards.isContinueStatementNode(e),r=p.NodeGuards.isVariableDeclarationNode(e)&&("const"===e.kind||"let"===e.kind);return p.NodeGuards.isFunctionDeclarationNode(e)||t||r})}},{key:"canTransformBlockStatementNode",value:function(e){var t=!0;return l.traverse(e,{enter:function(e){if(p.NodeGuards.isWhileStatementNode(e))return l.VisitorOption.Skip;p.NodeGuards.isBlockStatementNode(e)&&b.blockStatementHasProhibitedStatements(e)&&(t=!1)}}),e.body.length<=4&&(t=!1),t}}]),t}(d.AbstractNodeTransformer);y=b=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.Factory__IControlFlowCustomNode)),c.__param(1,s.inject(u.ServiceIdentifiers.IArrayUtils)),c.__param(2,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(3,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Function,Object,Object,Object])],y),t.BlockStatementControlFlowTransformer=y;var b},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rthis.options.deadCodeInjectionThreshold)return e;if(b.NodeUtils.getBlockScopesOfNode(e)[0].type===p.NodeType.Program)return e;var r=this.collectedBlockStatements.length-1,n=this.randomGenerator.getRandomInteger(0,r),o=this.collectedBlockStatements.splice(n,1)[0];return o===e?e:this.replaceBlockStatementNode(e,o,t)}},{key:"collectBlockStatementNodes",value:function(e,t,r){var n=b.NodeUtils.clone(e),o=0,a=!0;l.replace(n,{enter:function(e){return y.NodeGuards.isBlockStatementNode(e)&&o++,o>v.maxNestedBlockStatementsCount||!v.isValidBlockStatementNode(e)?(a=!1,l.VisitorOption.Break):e}}),a&&(b.NodeUtils.parentizeNode(n,r),n=this.transformersRunner.transform(n,v.transformersToRenameBlockScopeIdentifiers),t.push(n))}},{key:"replaceBlockStatementNode",value:function(e,t,r){var n=this.deadCodeInjectionCustomNodeFactory(f.DeadCodeInjectionCustomNode.BlockStatementDeadCodeInjectionNode);n.initialize(e,t);var o=n.getNode()[0];return b.NodeUtils.parentizeNode(o,r),o}}],[{key:"isValidBlockStatementNode",value:function(e){return!(y.NodeGuards.isBreakStatementNode(e)||y.NodeGuards.isContinueStatementNode(e)||y.NodeGuards.isAwaitExpressionNode(e)||y.NodeGuards.isSuperNode(e))}}]),t}(m.AbstractNodeTransformer);g.maxNestedBlockStatementsCount=4,g.minCollectedBlockStatementsCount=5,g.transformersToRenameBlockScopeIdentifiers=[d.NodeTransformer.CatchClauseTransformer,d.NodeTransformer.ClassDeclarationTransformer,d.NodeTransformer.FunctionDeclarationTransformer,d.NodeTransformer.FunctionTransformer,d.NodeTransformer.LabeledStatementTransformer,d.NodeTransformer.VariableDeclarationTransformer],g=v=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.Factory__IDeadCodeInjectionCustomNode)),c.__param(1,s.inject(u.ServiceIdentifiers.ITransformersRunner)),c.__param(2,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(3,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Function,Object,Object,Object])],g),t.DeadCodeInjectionTransformer=g;var v},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rh.hostNodeSearchMinDepth&&t.splice(0,h.hostNodeSearchMinDepth),t.length>h.hostNodeSearchMaxDepth&&(t.length=h.hostNodeSearchMaxDepth),this.randomGenerator.getRandomGenerator().pickone(t))}},{key:"isVisitedFunctionNode",value:function(e){return(y.NodeGuards.isFunctionDeclarationNode(e)||y.NodeGuards.isFunctionExpressionNode(e)||y.NodeGuards.isArrowFunctionExpressionNode(e))&&this.visitedFunctionNodes.has(e)}},{key:"transformFunctionBody",value:function(e,t){var r=this;l.replace(e,{enter:function(e,n){if(e.ignoredNode)return l.VisitorOption.Skip;if(r.isVisitedFunctionNode(e)||!n)return l.VisitorOption.Skip;if(!h.controlFlowReplacersMap.has(e.type))return e;if(r.randomGenerator.getMathRandom()>r.options.controlFlowFlatteningThreshold)return e;var o=h.controlFlowReplacersMap.get(e.type);return void 0===o?e:Object.assign({},r.controlFlowReplacerFactory(o).replace(e,n,t),{parentNode:n})}})}}]),t}(m.AbstractNodeTransformer);v.controlFlowReplacersMap=new Map([[p.NodeType.BinaryExpression,d.ControlFlowReplacer.BinaryExpressionControlFlowReplacer],[p.NodeType.CallExpression,d.ControlFlowReplacer.CallExpressionControlFlowReplacer],[p.NodeType.LogicalExpression,d.ControlFlowReplacer.LogicalExpressionControlFlowReplacer],[p.NodeType.Literal,d.ControlFlowReplacer.StringLiteralControlFlowReplacer]]),v.hostNodeSearchMinDepth=0,v.hostNodeSearchMaxDepth=2,v=h=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.Factory__TControlFlowStorage)),c.__param(1,s.inject(u.ServiceIdentifiers.Factory__IControlFlowReplacer)),c.__param(2,s.inject(u.ServiceIdentifiers.Factory__IControlFlowCustomNode)),c.__param(3,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(4,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Function,Function,Function,Object,Object])],v),t.FunctionControlFlowTransformer=v;var h},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r1){var o=d.Nodes.getBinaryExpressionNode("+",n.shift(),n.shift());return n.forEach(function(e){o=d.Nodes.getBinaryExpressionNode("+",o,e)}),o}return n[0]}}],[{key:"isLiteralNodeWithStringValue",value:function(e){return e&&f.NodeGuards.isLiteralNode(e)&&"string"==typeof e.value}}]),t}(l.AbstractNodeTransformer);p=m=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(1,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Object,Object])],p),t.TemplateLiteralTransformer=p;var m},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(14),o=r(0),a=r(1),i=r(12),c=r(20),s=r(40),u=r(39),l=r(72),f=r(73),d=r(74),p=r(75),m=r(76),y=r(77),b=r(80),g=r(81),v=r(82),h=r(83),_=r(84),N=r(85),O=r(87),S=r(89),j=r(91),C=r(95),w=r(97),I=r(98),T=r(99),E=r(101),F=r(103),k=r(110),P=r(112),x=r(116),R=r(117);t.customNodesModule=new o.ContainerModule(function(e){e(a.ServiceIdentifiers.ICustomNode).to(N.ConsoleOutputDisableExpressionNode).whenTargetNamed(c.CustomNode.ConsoleOutputDisableExpressionNode),e(a.ServiceIdentifiers.ICustomNode).to(O.DebugProtectionFunctionCallNode).whenTargetNamed(c.CustomNode.DebugProtectionFunctionCallNode),e(a.ServiceIdentifiers.ICustomNode).to(S.DebugProtectionFunctionIntervalNode).whenTargetNamed(c.CustomNode.DebugProtectionFunctionIntervalNode),e(a.ServiceIdentifiers.ICustomNode).to(j.DebugProtectionFunctionNode).whenTargetNamed(c.CustomNode.DebugProtectionFunctionNode),e(a.ServiceIdentifiers.ICustomNode).to(C.DomainLockNode).whenTargetNamed(c.CustomNode.DomainLockNode),e(a.ServiceIdentifiers.ICustomNode).to(T.NodeCallsControllerFunctionNode).whenTargetNamed(c.CustomNode.NodeCallsControllerFunctionNode),e(a.ServiceIdentifiers.ICustomNode).to(E.SelfDefendingUnicodeNode).whenTargetNamed(c.CustomNode.SelfDefendingUnicodeNode),e(a.ServiceIdentifiers.ICustomNode).to(F.StringArrayCallsWrapper).whenTargetNamed(c.CustomNode.StringArrayCallsWrapper),e(a.ServiceIdentifiers.ICustomNode).to(k.StringArrayNode).whenTargetNamed(c.CustomNode.StringArrayNode),e(a.ServiceIdentifiers.ICustomNode).to(P.StringArrayRotateFunctionNode).whenTargetNamed(c.CustomNode.StringArrayRotateFunctionNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(y.BinaryExpressionFunctionNode).whenTargetNamed(i.ControlFlowCustomNode.BinaryExpressionFunctionNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(b.BlockStatementControlFlowFlatteningNode).whenTargetNamed(i.ControlFlowCustomNode.BlockStatementControlFlowFlatteningNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(v.CallExpressionControlFlowStorageCallNode).whenTargetNamed(i.ControlFlowCustomNode.CallExpressionControlFlowStorageCallNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(h.CallExpressionFunctionNode).whenTargetNamed(i.ControlFlowCustomNode.CallExpressionFunctionNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(_.ControlFlowStorageNode).whenTargetNamed(i.ControlFlowCustomNode.ControlFlowStorageNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(w.ExpressionWithOperatorControlFlowStorageCallNode).whenTargetNamed(i.ControlFlowCustomNode.ExpressionWithOperatorControlFlowStorageCallNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(I.LogicalExpressionFunctionNode).whenTargetNamed(i.ControlFlowCustomNode.LogicalExpressionFunctionNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(R.StringLiteralNode).whenTargetNamed(i.ControlFlowCustomNode.StringLiteralNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(x.StringLiteralControlFlowStorageCallNode).whenTargetNamed(i.ControlFlowCustomNode.StringLiteralControlFlowStorageCallNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(g.BlockStatementDeadCodeInjectionNode).whenTargetNamed(u.DeadCodeInjectionCustomNode.BlockStatementDeadCodeInjectionNode),e(a.ServiceIdentifiers.ICustomNodeGroup).to(l.ConsoleOutputCustomNodeGroup).whenTargetNamed(s.CustomNodeGroup.ConsoleOutputCustomNodeGroup),e(a.ServiceIdentifiers.ICustomNodeGroup).to(f.DebugProtectionCustomNodeGroup).whenTargetNamed(s.CustomNodeGroup.DebugProtectionCustomNodeGroup),e(a.ServiceIdentifiers.ICustomNodeGroup).to(d.DomainLockCustomNodeGroup).whenTargetNamed(s.CustomNodeGroup.DomainLockCustomNodeGroup),e(a.ServiceIdentifiers.ICustomNodeGroup).to(p.SelfDefendingCustomNodeGroup).whenTargetNamed(s.CustomNodeGroup.SelfDefendingCustomNodeGroup),e(a.ServiceIdentifiers.ICustomNodeGroup).to(m.StringArrayCustomNodeGroup).whenTargetNamed(s.CustomNodeGroup.StringArrayCustomNodeGroup),e(a.ServiceIdentifiers.Factory__ICustomNode).toFactory(n.InversifyContainerFacade.getFactory(a.ServiceIdentifiers.ICustomNode)),e(a.ServiceIdentifiers.Factory__IControlFlowCustomNode).toFactory(n.InversifyContainerFacade.getConstructorFactory(a.ServiceIdentifiers.Newable__ICustomNode,a.ServiceIdentifiers.Factory__IIdentifierNamesGenerator,a.ServiceIdentifiers.IRandomGenerator,a.ServiceIdentifiers.IOptions)),e(a.ServiceIdentifiers.Factory__IDeadCodeInjectionCustomNode).toFactory(n.InversifyContainerFacade.getConstructorFactory(a.ServiceIdentifiers.Newable__ICustomNode,a.ServiceIdentifiers.Factory__IIdentifierNamesGenerator,a.ServiceIdentifiers.IRandomGenerator,a.ServiceIdentifiers.IOptions)),e(a.ServiceIdentifiers.Factory__ICustomNodeGroup).toFactory(n.InversifyContainerFacade.getFactory(a.ServiceIdentifiers.ICustomNodeGroup))})},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r.5,t=this.randomGenerator.getMathRandom()>.5,r=e?"===":"!==",n=this.randomGenerator.getRandomString(5),o=t?n:this.randomGenerator.getRandomString(5),a=e===t?[this.blockStatementNode,this.randomBlockStatementNode]:[this.randomBlockStatementNode,this.blockStatementNode],c=i(a,2),s=c[0],u=c[1],l=p.Nodes.getBlockStatementNode([p.Nodes.getIfStatementNode(p.Nodes.getBinaryExpressionNode(r,p.Nodes.getLiteralNode(n),p.Nodes.getLiteralNode(o)),s,u)]);return m.NodeUtils.parentize(l),[l]}}]),t}(d.AbstractCustomNode);s.__decorate([f.initializable(),s.__metadata("design:type",Object)],y.prototype,"blockStatementNode",void 0),s.__decorate([f.initializable(),s.__metadata("design:type",Object)],y.prototype,"randomBlockStatementNode",void 0),y=s.__decorate([u.injectable(),s.__param(0,u.inject(l.ServiceIdentifiers.Factory__IIdentifierNamesGenerator)),s.__param(1,u.inject(l.ServiceIdentifiers.IRandomGenerator)),s.__param(2,u.inject(l.ServiceIdentifiers.IOptions)),s.__metadata("design:paramtypes",[Function,Object,Object])],y),t.BlockStatementDeadCodeInjectionNode=y},function(e,t,r){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t 0;\n \n switch (isPositive) {\n case true:\n return this.item + \'_\' + this.value + \'_\' + i;\n default:\n this.item + \'_\' + this.value;\n }\n }\n }()\n };\n };\n \n var regExp = new RegExp("[{diff}]", "g");\n var domains = "{domains}".replace(regExp, "").split(";");\n var document;\n var domain;\n \n for (var d in that) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n document = d;\n \n break;\n }\n }\n\n for (var d1 in that[document]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n domain = d1;\n \n break;\n }\n }\n \n if ((!document && !domain) || (!that[document] && !that[document][domain])) {\n return;\n }\n \n var currentDomain = that[document][domain];\n\n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(".") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n data;\n } else {\n return;\n }\n \n func();\n });\n\n {domainLockFunctionName}();\n '}Object.defineProperty(t,"__esModule",{value:!0}),t.DomainLockNodeTemplate=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r> 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еxOf');\n } else {\n recursiveFunc1('indexOf');\n }\n } else {\n recursiveFunc1('indеxOf');\n }\n })\n \n {selfDefendingFunctionName}();\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.SelfDefendingTemplate=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n return output;\n });\n })();\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.AtobTemplate=n},function(e,t,r){"use strict";function n(){return"\n var rc4 = function (str, key) {\n var s = [], j = 0, x, res = '', newStr = '';\n \n str = atob(str);\n \n for (var k = 0, length = str.length; k < length; k++) {\n newStr += '%' + ('00' + str.charCodeAt(k).toString(16)).slice(-2);\n }\n \n str = decodeURIComponent(newStr);\n \t \n\t for (var i = 0; i < 256; i++) {\n s[i] = i;\n }\n \n for (i = 0; i < 256; i++) {\n j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n }\n \n i = 0;\n j = 0;\n \n for (var y = 0; y < str.length; y++) {\n i = (i + 1) % 256;\n j = (j + s[i]) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);\n }\n \n return res;\n }\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.Rc4Template=n},function(e,t,r){"use strict";function n(e,t){var r=e.getRandomString(6),n=e.getRandomString(6),o=e.getRandomString(6),a=e.getRandomString(6),i=e.getRandomString(6),c=e.getRandomString(6),s=e.getRandomString(6),u=e.getRandomString(6),l=e.getRandomString(6);return"\n var StatesClass = function ("+r+") {\n this."+r+" = "+r+";\n this."+n+" = [1, 0, 0];\n this."+o+" = function(){return 'newState';};\n this."+a+" = '"+t.encode("\\w+ *\\(\\) *{\\w+ *",!0)+"';\n this."+i+" = '"+t.encode("['|\"].+['|\"];? *}",!0)+"';\n };\n \n StatesClass.prototype."+c+" = function () {\n var regExp = new RegExp(this."+a+" + this."+i+");\n var expression = regExp.test(this."+o+".toString())\n ? --this."+n+"[1]\n : --this."+n+"[0];\n \n return this."+s+"(expression);\n };\n \n StatesClass.prototype."+s+" = function ("+l+") {\n if (!Boolean(~"+l+")) {\n return "+l+";\n }\n \n return this."+u+"(this."+r+");\n };\n\n StatesClass.prototype."+u+" = function ("+r+") {\n for (var i = 0, len = this."+n+".length; i < len; i++) {\n this."+n+".push(Math.round(Math.random()));\n len = this."+n+".length;\n }\n \n return "+r+"(this."+n+"[0]);\n };\n\n new StatesClass({stringArrayCallsWrapperName})."+c+"();\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.SelfDefendingTemplate=n},function(e,t,r){"use strict";function n(e){var t=e.getRandomString(6),r=e.getRandomString(6),n=e.getRandomString(6);return"\n if ({stringArrayCallsWrapperName}."+t+" === undefined) {\n {atobPolyfill}\n \n {stringArrayCallsWrapperName}."+r+" = function (str) {\n var string = atob(str);\n var newStringChars = [];\n \n for (var i = 0, length = string.length; i < length; i++) {\n newStringChars += '%' + ('00' + string.charCodeAt(i).toString(16)).slice(-2);\n }\n \n return decodeURIComponent(newStringChars);\n };\n \n {stringArrayCallsWrapperName}."+n+" = {};\n \n {stringArrayCallsWrapperName}."+t+" = true;\n }\n \n var cachedValue = {stringArrayCallsWrapperName}."+n+"[index];\n \n if (cachedValue === undefined) {\n {selfDefendingCode}\n \n value = {stringArrayCallsWrapperName}."+r+"(value);\n {stringArrayCallsWrapperName}."+n+"[index] = value;\n } else {\n value = cachedValue;\n }\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.StringArrayBase64DecodeNodeTemplate=n},function(e,t,r){"use strict";function n(){return"\n var {stringArrayCallsWrapperName} = function (index, key) {\n index = index - 0;\n \n var value = {stringArrayName}[index];\n \n {decodeNodeTemplate}\n \n return value;\n };\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.StringArrayCallsWrapperTemplate=n},function(e,t,r){"use strict";function n(e){var t=e.getRandomString(6),r=e.getRandomString(6),n=e.getRandomString(6),o=e.getRandomString(6);return"\n if ({stringArrayCallsWrapperName}."+t+" === undefined) {\n {atobPolyfill}\n \n {rc4Polyfill}\n {stringArrayCallsWrapperName}."+r+" = rc4;\n \n {stringArrayCallsWrapperName}."+n+" = {};\n \n {stringArrayCallsWrapperName}."+t+" = true;\n }\n \n var cachedValue = {stringArrayCallsWrapperName}."+n+"[index];\n\n if (cachedValue === undefined) {\n if ({stringArrayCallsWrapperName}."+o+" === undefined) {\n {selfDefendingCode}\n \n {stringArrayCallsWrapperName}."+o+" = true;\n }\n \n value = {stringArrayCallsWrapperName}."+r+"(value, key);\n {stringArrayCallsWrapperName}."+n+"[index] = value;\n } else {\n value = cachedValue;\n }\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.StringArrayRc4DecodeNodeTemplate=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r=0);return"a"+o(n)}(e);return d.validateMangledName(t)||(t=d.generateNewMangledName(t)),t}},{key:"validateMangledName",value:function(e){return!(-1!==d.reservedNames.indexOf(e))}}]),t}(l.AbstractIdentifierNamesGenerator);f.initMangledNameCharacter="9",f.nameSequence="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),f.reservedNames=["byte","case","char","do","else","enum","eval","for","goto","if","in","int","let","long","new","null","this","true","try","var","void","with"],f=d=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(1,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Object,Object])],f),t.MangledIdentifierNamesGenerator=f;var d},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(14),o=r(0),a=r(1);t.nodeTransformersModule=new o.ContainerModule(function(e){e(a.ServiceIdentifiers.Factory__INodeTransformer).toFactory(n.InversifyContainerFacade.getCacheFactory(a.ServiceIdentifiers.INodeTransformer))})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(14),o=r(0),a=r(1),i=r(17),c=r(42),s=r(19),u=r(123),l=r(124),f=r(125),d=r(126),p=r(127),m=r(128),y=r(129),b=r(130),g=r(131),v=r(132),h=r(133),_=r(134);t.obfuscatingTransformersModule=new o.ContainerModule(function(e){e(a.ServiceIdentifiers.INodeTransformer).to(f.CatchClauseTransformer).whenTargetNamed(s.NodeTransformer.CatchClauseTransformer),e(a.ServiceIdentifiers.INodeTransformer).to(d.ClassDeclarationTransformer).whenTargetNamed(s.NodeTransformer.ClassDeclarationTransformer),e(a.ServiceIdentifiers.INodeTransformer).to(p.FunctionDeclarationTransformer).whenTargetNamed(s.NodeTransformer.FunctionDeclarationTransformer),e(a.ServiceIdentifiers.INodeTransformer).to(m.FunctionTransformer).whenTargetNamed(s.NodeTransformer.FunctionTransformer),e(a.ServiceIdentifiers.INodeTransformer).to(y.LabeledStatementTransformer).whenTargetNamed(s.NodeTransformer.LabeledStatementTransformer),e(a.ServiceIdentifiers.INodeTransformer).to(b.LiteralTransformer).whenTargetNamed(s.NodeTransformer.LiteralTransformer),e(a.ServiceIdentifiers.INodeTransformer).to(v.ObjectExpressionTransformer).whenTargetNamed(s.NodeTransformer.ObjectExpressionTransformer),e(a.ServiceIdentifiers.INodeTransformer).to(_.VariableDeclarationTransformer).whenTargetNamed(s.NodeTransformer.VariableDeclarationTransformer),e(a.ServiceIdentifiers.IObfuscatingReplacer).to(l.BooleanLiteralObfuscatingReplacer).whenTargetNamed(c.LiteralObfuscatingReplacer.BooleanLiteralObfuscatingReplacer),e(a.ServiceIdentifiers.IObfuscatingReplacer).to(g.NumberLiteralObfuscatingReplacer).whenTargetNamed(c.LiteralObfuscatingReplacer.NumberLiteralObfuscatingReplacer),e(a.ServiceIdentifiers.IObfuscatingReplacer).to(h.StringLiteralObfuscatingReplacer).whenTargetNamed(c.LiteralObfuscatingReplacer.StringLiteralObfuscatingReplacer),e(a.ServiceIdentifiers.IIdentifierObfuscatingReplacer).to(u.BaseIdentifierObfuscatingReplacer).whenTargetNamed(i.IdentifierObfuscatingReplacer.BaseIdentifierObfuscatingReplacer),e(a.ServiceIdentifiers.Factory__IObfuscatingReplacer).toFactory(n.InversifyContainerFacade.getCacheFactory(a.ServiceIdentifiers.IObfuscatingReplacer)),e(a.ServiceIdentifiers.Factory__IIdentifierObfuscatingReplacer).toFactory(n.InversifyContainerFacade.getCacheFactory(a.ServiceIdentifiers.IIdentifierObfuscatingReplacer))})},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r=y.minimumLengthForStringArray&&this.randomGenerator.getMathRandom()<=this.options.stringArrayThreshold}},{key:"getStringArrayHexadecimalIndex",value:function(e,t){if(this.stringLiteralHexadecimalIndexCache.has(e))return{fromCache:!0,index:this.stringLiteralHexadecimalIndexCache.get(e)};var r=p.Utils.decToHex(t),n=""+p.Utils.hexadecimalPrefix+r;return this.stringLiteralHexadecimalIndexCache.set(e,n),{fromCache:!1,index:n}}},{key:"getEncodedValue",value:function(e){var t=void 0,r=null;switch(this.options.stringArrayEncoding){case l.StringArrayEncoding.Rc4:r=this.randomGenerator.getRandomGenerator().pickone(this.rc4Keys),t=this.cryptUtils.btoa(this.cryptUtils.rc4(e,r));break;case l.StringArrayEncoding.Base64:t=this.cryptUtils.btoa(e);break;default:t=e}return{encodedValue:t,key:r}}},{key:"replaceWithLiteralNode",value:function(e){return d.Nodes.getLiteralNode(this.escapeSequenceEncoder.encode(e,this.options.unicodeEscapeSequence))}},{key:"replaceWithStringArrayCallNode",value:function(e){var t=this.getEncodedValue(e),r=t.encodedValue,n=t.key,o=this.escapeSequenceEncoder.encode(r,this.options.unicodeEscapeSequence),a=this.stringArrayStorage.getLength(),i=this.stringArrayStorage.getStorageId().split("|")[1],c=this.getStringArrayHexadecimalIndex(o,a),s=c.fromCache,u=c.index;s||this.stringArrayStorage.set(a,o);var l=[y.getHexadecimalLiteralNode(u)];n&&l.push(y.getRc4KeyLiteralNode(this.escapeSequenceEncoder.encode(n,this.options.unicodeEscapeSequence)));var f=d.Nodes.getIdentifierNode(i);return f.obfuscatedNode=!0,d.Nodes.getCallExpressionNode(f,l)}}],[{key:"getHexadecimalLiteralNode",value:function(e){var t=d.Nodes.getLiteralNode(e);return t.obfuscatedNode=!0,t}},{key:"getRc4KeyLiteralNode",value:function(e){var t=d.Nodes.getLiteralNode(e);return t.obfuscatedNode=!0,t}}]),t}(f.AbstractObfuscatingReplacer);m.minimumLengthForStringArray=3,m.rc4KeyLength=4,m.rc4KeysCount=50,m=y=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.TStringArrayStorage)),c.__param(1,s.inject(u.ServiceIdentifiers.IEscapeSequenceEncoder)),c.__param(2,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(3,s.inject(u.ServiceIdentifiers.ICryptUtils)),c.__param(4,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Object,Object,Object,Object,Object])],m),t.StringLiteralObfuscatingReplacer=m;var y},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r=0?t:null}},{key:"getLength",value:function(){return this.storageLength}},{key:"getStorage",value:function(){return this.storage}},{key:"getStorageId",value:function(){return this.storageId}},{key:"mergeWith",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.storage=[].concat(n(this.storage),n(e.getStorage())),t&&(this.storageId=e.getStorageId())}},{key:"set",value:function(e,t){e===this.storageLength?this.storage.push(t):this.storage.splice(e,0,t),this.storageLength++}}]),e}();i.__decorate([u.initializable(),i.__metadata("design:type",Array)],l.prototype,"storage",void 0),i.__decorate([u.initializable(),i.__metadata("design:type",String)],l.prototype,"storageId",void 0),i.__decorate([c.postConstruct(),i.__metadata("design:type",Function),i.__metadata("design:paramtypes",[]),i.__metadata("design:returntype",void 0)],l.prototype,"initialize",null),l=i.__decorate([c.injectable(),i.__param(0,c.inject(s.ServiceIdentifiers.IRandomGenerator)),i.__param(1,c.inject(s.ServiceIdentifiers.IOptions)),i.__metadata("design:paramtypes",[Object,Object])],l),t.ArrayStorage=l},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1),a=r(147),i=r(148),c=r(151),s=r(45);t.utilsModule=new n.ContainerModule(function(e){e(o.ServiceIdentifiers.IArrayUtils).to(a.ArrayUtils).inSingletonScope(),e(o.ServiceIdentifiers.IRandomGenerator).to(s.RandomGenerator).inSingletonScope(),e(o.ServiceIdentifiers.ICryptUtils).to(i.CryptUtils).inSingletonScope(),e(o.ServiceIdentifiers.IEscapeSequenceEncoder).to(c.EscapeSequenceEncoder).inSingletonScope()})},function(e,t,r){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t>8-o%1*8)){if((n=e.charCodeAt(o+=.75))>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|n}return t}},{key:"hideString",value:function(e,t){var r=this,n=this.randomGenerator.getRandomGenerator().string({length:t,pool:s.RandomGenerator.randomGeneratorPool}),o=n.replace(new RegExp("["+function(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}(e)+"]","g"),""),a=o.split("");return this.randomGenerator.getRandomGenerator().shuffle(a),o=a.join(""),[function(e,t){for(var n=-1,o=-1,a="";n values should be wrapped inside quotes: --option-name 'value1, value2'");return e.split(",").map(function(e){return e.trim()})}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BooleanSanitizer=function(e){return"true"===e||"1"===e}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(23);t.IdentifierNamesGeneratorSanitizer=function(e){if(!Object.keys(n.IdentifierNamesGenerator).some(function(t){return n.IdentifierNamesGenerator[t]===e}))throw new ReferenceError("Invalid value of `--identifier-names-generator` option");return e}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(13);t.ObfuscationTargetSanitizer=function(e){if(!Object.keys(n.ObfuscationTarget).some(function(t){return n.ObfuscationTarget[t]===e}))throw new ReferenceError("Invalid value of `--target` option");return e}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(24);t.SourceMapModeSanitizer=function(e){if(!Object.keys(n.SourceMapMode).some(function(t){return n.SourceMapMode[t]===e}))throw new ReferenceError("Invalid value of `--source-map-mode` option");return e}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(25);t.StringArrayEncodingSanitizer=function(e){switch(e){case"true":case"1":case n.StringArrayEncoding.Base64:return!0;case n.StringArrayEncoding.Rc4:return n.StringArrayEncoding.Rc4;default:return!1}}},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:"";return t&&(e=e.substring(0,e.lastIndexOf("/"))+"/"+t),/\.js\.map$/.test(e)?/\.js$/.test(e)&&(e+=".map"):e=e.split(".")[0]+".js.map",e}},{key:"getUserConfig",value:function(e){var t=void 0;try{t=!function(){var e=new Error('Cannot find module "."');throw e.code="MODULE_NOT_FOUND",e}()}catch(r){try{t=require(e)}catch(e){throw new ReferenceError("Given config path must be a valid file path")}}return t}},{key:"writeFile",value:function(e,t){i.sync(c.dirname(e)),a.writeFileSync(e,t,{encoding:s.JavaScriptObfuscatorCLI.encoding})}}]),e}();t.CLIUtils=u},function(e,t){e.exports=require("mkdirp")},function(e,t){function r(e){throw new Error("Cannot find module '"+e+"'.")}r.keys=function(){return[]},r.resolve=r,e.exports=r,r.id=186},function(e,t,r){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];return i.readdirSync(t,s.JavaScriptObfuscatorCLI.encoding).forEach(function(o){var a=t+"/"+o;if(e.isDirectoryPath(a))r.push.apply(r,n(e.readDirectoryRecursive(a)));else if(e.isFilePath(a)&&e.isValidFile(o)){var c=i.readFileSync(a,s.JavaScriptObfuscatorCLI.encoding);r.push({filePath:a,content:c})}}),r}},{key:"readFile",value:function(t){if(!e.isValidFile(t))throw new ReferenceError("Input file must have .js extension");return i.readFileSync(t,s.JavaScriptObfuscatorCLI.encoding)}},{key:"isValidFile",value:function(e){return-1!==s.JavaScriptObfuscatorCLI.availableInputExtensions.indexOf(c.extname(e))&&!(-1!==e.indexOf(s.JavaScriptObfuscatorCLI.obfuscatedFilePrefix))}}]),e}();t.SourceCodeReader=u}]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/package.json b/package.json index f0df4bfb..47f9fd2a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "0.14.0-beta.1", + "version": "0.14.0-beta.2", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", @@ -23,22 +23,23 @@ "chance": "1.0.13", "class-validator": "0.7.3", "commander": "2.12.2", - "escodegen-wallaby": "1.6.15", + "escodegen-wallaby": "1.6.16", "esprima": "4.0.0", "estraverse": "4.2.0", "inversify": "4.9.0", + "js-string-escape": "1.0.1", "md5": "2.2.1", "mkdirp": "0.5.1", "opencollective": "1.0.3", - "pjson": "^1.0.9", + "pjson": "1.0.9", "reflect-metadata": "0.1.10", "source-map-support": "0.5.0", "string-template": "1.0.0", "tslib": "1.8.1" }, "devDependencies": { - "@types/chai": "4.0.10", - "@types/chance": "0.7.35", + "@types/chai": "4.1.0", + "@types/chance": "0.7.36", "@types/commander": "2.12.2", "@types/escodegen": "0.0.6", "@types/esprima": "4.0.1", @@ -46,9 +47,9 @@ "@types/estree": "0.0.38", "@types/md5": "2.1.32", "@types/mkdirp": "0.5.2", - "@types/mocha": "2.2.45", - "@types/node": "8.5.2", - "@types/rimraf": "^2.0.2", + "@types/mocha": "2.2.46", + "@types/node": "8.5.7", + "@types/rimraf": "2.0.2", "@types/sinon": "4.1.2", "@types/string-template": "1.0.2", "@types/webpack-env": "1.13.3", @@ -62,9 +63,9 @@ "istanbul": "1.1.0-alpha.1", "mocha": "4.1.0", "pre-commit": "1.2.2", - "rimraf": "^2.6.2", + "rimraf": "2.6.2", "sinon": "4.1.3", - "threads": "^0.10.0", + "threads": "0.10.0", "ts-node": "4.1.0", "tslint": "5.8.0", "tslint-eslint-rules": "4.1.1", diff --git a/src/JavaScriptObfuscator.ts b/src/JavaScriptObfuscator.ts index 38ec155a..37c27e15 100644 --- a/src/JavaScriptObfuscator.ts +++ b/src/JavaScriptObfuscator.ts @@ -48,10 +48,18 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator { /** * @type {NodeTransformer[]} */ - private static readonly convertingTransformersList: NodeTransformer[] = [ - NodeTransformer.CallExpressionTransformer, + private static readonly postObfuscationConvertingTransformersList: NodeTransformer[] = [ + NodeTransformer.AstToEvalCallExpressionTransformer + ]; + + /** + * @type {NodeTransformer[]} + */ + private static readonly preObfuscationConvertingTransformersList: NodeTransformer[] = [ + NodeTransformer.EvalCallExpressionToAstTransformer, NodeTransformer.MemberExpressionTransformer, NodeTransformer.MethodDefinitionTransformer, + NodeTransformer.ObjectExpressionKeysTransformer, NodeTransformer.TemplateLiteralTransformer ]; @@ -177,7 +185,7 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator { const obfuscationTime: number = (Date.now() - timeStart) / 1000; this.logger.success(LoggingMessage.ObfuscationCompleted, obfuscationTime); - return this.getObfuscationResult(obfuscatedAstTree, generatorOutput); + return this.getObfuscationResult(generatorOutput); } /** @@ -251,12 +259,26 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator { ); } - // fifth pass: converting and obfuscating transformers + // fifth pass: pre-obfuscation converting transformers + this.logger.info(LoggingMessage.StagePreObfuscation); + astTree = this.transformersRunner.transform( + astTree, + JavaScriptObfuscator.preObfuscationConvertingTransformersList + ); + + // sixth pass: obfuscating transformers this.logger.info(LoggingMessage.StageObfuscation); - astTree = this.transformersRunner.transform(astTree, [ - ...JavaScriptObfuscator.convertingTransformersList, - ...JavaScriptObfuscator.obfuscatingTransformersList - ]); + astTree = this.transformersRunner.transform( + astTree, + JavaScriptObfuscator.obfuscatingTransformersList + ); + + // seventh pass: post-obfuscation converting transformers + this.logger.info(LoggingMessage.StagePostObfuscation); + astTree = this.transformersRunner.transform( + astTree, + JavaScriptObfuscator.postObfuscationConvertingTransformersList + ); this.obfuscationEventEmitter.emit(ObfuscationEvent.AfterObfuscation, astTree, stackTraceData); @@ -291,16 +313,11 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator { } /** - * @param {Program} obfuscatedAstTree * @param {IGeneratorOutput} generatorOutput * @returns {IObfuscationResult} */ - private getObfuscationResult ( - obfuscatedAstTree: ESTree.Program, - generatorOutput: IGeneratorOutput - ): IObfuscationResult { + private getObfuscationResult (generatorOutput: IGeneratorOutput): IObfuscationResult { return this.sourceMapCorrector.correct( - obfuscatedAstTree, generatorOutput.code, generatorOutput.map ); diff --git a/src/ObfuscationResult.ts b/src/ObfuscationResult.ts index dc87cca6..043cbb68 100644 --- a/src/ObfuscationResult.ts +++ b/src/ObfuscationResult.ts @@ -1,19 +1,11 @@ import { injectable } from 'inversify'; -import { Program } from 'estree'; - import { IObfuscationResult } from './interfaces/IObfuscationResult'; import { initializable } from './decorators/Initializable'; @injectable() export class ObfuscationResult implements IObfuscationResult { - /** - * @type {Program} - */ - @initializable() - private obfuscatedAst: Program; - /** * @type {string} */ @@ -27,23 +19,14 @@ export class ObfuscationResult implements IObfuscationResult { private sourceMap: string; /** - * @param {Program} obfuscatedAst * @param {string} obfuscatedCode * @param {string} sourceMap */ - public initialize (obfuscatedAst: Program, obfuscatedCode: string, sourceMap: string): void { - this.obfuscatedAst = obfuscatedAst; + public initialize (obfuscatedCode: string, sourceMap: string): void { this.obfuscatedCode = obfuscatedCode; this.sourceMap = sourceMap; } - /** - * @returns {Program} - */ - public getObfuscatedAst (): Program { - return this.obfuscatedAst; - } - /** * @returns {string} */ diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index 2e4e9d5b..1b910115 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -309,6 +309,11 @@ export class JavaScriptObfuscatorCLI implements IInitializable { 'Allows to set target environment for obfuscated code.', ObfuscationTargetSanitizer ) + .option( + '--transform-object-keys ', + 'Enables transformation of object keys', + BooleanSanitizer + ) .option( '--unicode-escape-sequence ', 'Allows to enable/disable string conversion to unicode escape sequence', diff --git a/src/container/InversifyContainerFacade.ts b/src/container/InversifyContainerFacade.ts index 50d5e924..842a3754 100644 --- a/src/container/InversifyContainerFacade.ts +++ b/src/container/InversifyContainerFacade.ts @@ -1,8 +1,6 @@ import { Container, interfaces } from 'inversify'; import { ServiceIdentifiers } from './ServiceIdentifiers'; -import * as ESTree from 'estree'; - import { analyzersModule } from './modules/analyzers/AnalyzersModule'; import { controlFlowTransformersModule } from './modules/node-transformers/ControlFlowTransformersModule'; import { convertingTransformersModule } from './modules/node-transformers/ConvertingTransformersModule'; @@ -49,7 +47,7 @@ export class InversifyContainerFacade implements IInversifyContainerFacade { * @param {interfaces.ServiceIdentifier} serviceIdentifier * @returns {U} */ - public static getFactory ( + public static getFactory ( serviceIdentifier: interfaces.ServiceIdentifier ): (context: interfaces.Context) => (bindingName: T) => U { return (context: interfaces.Context): (bindingName: T) => U => { @@ -63,7 +61,7 @@ export class InversifyContainerFacade implements IInversifyContainerFacade { * @param {interfaces.ServiceIdentifier} serviceIdentifier * @returns {U} */ - public static getCacheFactory ( + public static getCacheFactory ( serviceIdentifier: interfaces.ServiceIdentifier ): (context: interfaces.Context) => (bindingName: T) => U { return (context: interfaces.Context): (bindingName: T) => U => { @@ -88,7 +86,7 @@ export class InversifyContainerFacade implements IInversifyContainerFacade { * @param {any[]} dependencies * @returns {U} */ - public static getConstructorFactory ( + public static getConstructorFactory ( serviceIdentifier: interfaces.ServiceIdentifier>, ...dependencies: any[] ): (context: interfaces.Context) => (bindingName: T) => U { @@ -175,11 +173,11 @@ export class InversifyContainerFacade implements IInversifyContainerFacade { this.container .bind(ServiceIdentifiers.Factory__IObfuscationResult) .toFactory((context: interfaces.Context) => { - return (obfuscatedAst: ESTree.Program, obfuscatedCode: string, sourceMap: string) => { + return (obfuscatedCode: string, sourceMap: string) => { const obfuscationResult: IObfuscationResult = context.container .get(ServiceIdentifiers.IObfuscationResult); - obfuscationResult.initialize(obfuscatedAst, obfuscatedCode, sourceMap); + obfuscationResult.initialize(obfuscatedCode, sourceMap); return obfuscationResult; }; diff --git a/src/container/ServiceIdentifiers.ts b/src/container/ServiceIdentifiers.ts index 1a6c1bdb..1f9473c6 100644 --- a/src/container/ServiceIdentifiers.ts +++ b/src/container/ServiceIdentifiers.ts @@ -4,6 +4,7 @@ export enum ServiceIdentifiers { Factory__IControlFlowReplacer = 'Factory', Factory__ICustomNode = 'Factory', Factory__ICustomNodeGroup = 'Factory', + Factory__IDeadCodeInjectionCustomNode = 'Factory', Factory__IIdentifierNamesGenerator = 'Factory', Factory__IIdentifierObfuscatingReplacer = 'Factory', Factory__INodeGuard = 'Factory', diff --git a/src/container/modules/custom-nodes/CustomNodesModule.ts b/src/container/modules/custom-nodes/CustomNodesModule.ts index ad8d8d27..e78ba981 100644 --- a/src/container/modules/custom-nodes/CustomNodesModule.ts +++ b/src/container/modules/custom-nodes/CustomNodesModule.ts @@ -8,6 +8,7 @@ import { ICustomNodeGroup } from '../../../interfaces/custom-nodes/ICustomNodeGr import { ControlFlowCustomNode } from "../../../enums/custom-nodes/ControlFlowCustomNode"; import { CustomNode } from '../../../enums/custom-nodes/CustomNode'; import { CustomNodeGroup } from '../../../enums/custom-nodes/CustomNodeGroup'; +import { DeadCodeInjectionCustomNode } from '../../../enums/custom-nodes/DeadCodeInjectionCustomNode'; import { ConsoleOutputCustomNodeGroup } from '../../../custom-nodes/console-output-nodes/group/ConsoleOutputCustomNodeGroup'; import { DebugProtectionCustomNodeGroup } from '../../../custom-nodes/debug-protection-nodes/group/DebugProtectionCustomNodeGroup'; @@ -17,6 +18,7 @@ import { StringArrayCustomNodeGroup } from '../../../custom-nodes/string-array-n import { BinaryExpressionFunctionNode } from '../../../custom-nodes/control-flow-flattening-nodes/BinaryExpressionFunctionNode'; import { BlockStatementControlFlowFlatteningNode } from '../../../custom-nodes/control-flow-flattening-nodes/BlockStatementControlFlowFlatteningNode'; +import { BlockStatementDeadCodeInjectionNode } from '../../../custom-nodes/dead-code-injection-nodes/BlockStatementDeadCodeInjectionNode'; import { CallExpressionControlFlowStorageCallNode } from '../../../custom-nodes/control-flow-flattening-nodes/control-flow-storage-nodes/CallExpressionControlFlowStorageCallNode'; import { CallExpressionFunctionNode } from '../../../custom-nodes/control-flow-flattening-nodes/CallExpressionFunctionNode'; import { ControlFlowStorageNode } from '../../../custom-nodes/control-flow-flattening-nodes/control-flow-storage-nodes/ControlFlowStorageNode'; @@ -114,6 +116,11 @@ export const customNodesModule: interfaces.ContainerModule = new ContainerModule .toConstructor(StringLiteralControlFlowStorageCallNode) .whenTargetNamed(ControlFlowCustomNode.StringLiteralControlFlowStorageCallNode); + // dead code injection custom nodes + bind>(ServiceIdentifiers.Newable__ICustomNode) + .toConstructor(BlockStatementDeadCodeInjectionNode) + .whenTargetNamed(DeadCodeInjectionCustomNode.BlockStatementDeadCodeInjectionNode); + // node groups bind(ServiceIdentifiers.ICustomNodeGroup) .to(ConsoleOutputCustomNodeGroup) @@ -140,7 +147,7 @@ export const customNodesModule: interfaces.ContainerModule = new ContainerModule .toFactory(InversifyContainerFacade .getFactory(ServiceIdentifiers.ICustomNode)); - // control flow storage customNode constructor factory + // control flow customNode constructor factory bind(ServiceIdentifiers.Factory__IControlFlowCustomNode) .toFactory(InversifyContainerFacade .getConstructorFactory( @@ -150,6 +157,16 @@ export const customNodesModule: interfaces.ContainerModule = new ContainerModule ServiceIdentifiers.IOptions )); + // dead code injection customNode constructor factory + bind(ServiceIdentifiers.Factory__IDeadCodeInjectionCustomNode) + .toFactory(InversifyContainerFacade + .getConstructorFactory( + ServiceIdentifiers.Newable__ICustomNode, + ServiceIdentifiers.Factory__IIdentifierNamesGenerator, + ServiceIdentifiers.IRandomGenerator, + ServiceIdentifiers.IOptions + )); + // customNodeGroup factory bind(ServiceIdentifiers.Factory__ICustomNodeGroup) .toFactory(InversifyContainerFacade diff --git a/src/container/modules/node-transformers/ConvertingTransformersModule.ts b/src/container/modules/node-transformers/ConvertingTransformersModule.ts index 225d4d85..a224dca2 100644 --- a/src/container/modules/node-transformers/ConvertingTransformersModule.ts +++ b/src/container/modules/node-transformers/ConvertingTransformersModule.ts @@ -5,16 +5,22 @@ import { INodeTransformer } from '../../../interfaces/node-transformers/INodeTra import { NodeTransformer } from '../../../enums/node-transformers/NodeTransformer'; -import { CallExpressionTransformer } from '../../../node-transformers/converting-transformers/CallExpressionTransformer'; +import { AstToEvalCallExpressionTransformer } from '../../../node-transformers/converting-transformers/AstToEvalCallExpressionTransformer'; +import { EvalCallExpressionToAstTransformer } from '../../../node-transformers/converting-transformers/EvaCallExpressionToAstTransformer'; import { MemberExpressionTransformer } from '../../../node-transformers/converting-transformers/MemberExpressionTransformer'; import { MethodDefinitionTransformer } from '../../../node-transformers/converting-transformers/MethodDefinitionTransformer'; +import { ObjectExpressionKeysTransformer } from '../../../node-transformers/converting-transformers/ObjectExpressionKeysTransformer'; import { TemplateLiteralTransformer } from '../../../node-transformers/converting-transformers/TemplateLiteralTransformer'; export const convertingTransformersModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { // converting transformers bind(ServiceIdentifiers.INodeTransformer) - .to(CallExpressionTransformer) - .whenTargetNamed(NodeTransformer.CallExpressionTransformer); + .to(AstToEvalCallExpressionTransformer) + .whenTargetNamed(NodeTransformer.AstToEvalCallExpressionTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(EvalCallExpressionToAstTransformer) + .whenTargetNamed(NodeTransformer.EvalCallExpressionToAstTransformer); bind(ServiceIdentifiers.INodeTransformer) .to(MemberExpressionTransformer) @@ -24,6 +30,10 @@ export const convertingTransformersModule: interfaces.ContainerModule = new Cont .to(MethodDefinitionTransformer) .whenTargetNamed(NodeTransformer.MethodDefinitionTransformer); + bind(ServiceIdentifiers.INodeTransformer) + .to(ObjectExpressionKeysTransformer) + .whenTargetNamed(NodeTransformer.ObjectExpressionKeysTransformer); + bind(ServiceIdentifiers.INodeTransformer) .to(TemplateLiteralTransformer) .whenTargetNamed(NodeTransformer.TemplateLiteralTransformer); diff --git a/src/custom-nodes/AbstractCustomNodeGroup.ts b/src/custom-nodes/AbstractCustomNodeGroup.ts index cca506ae..b4ff0589 100644 --- a/src/custom-nodes/AbstractCustomNodeGroup.ts +++ b/src/custom-nodes/AbstractCustomNodeGroup.ts @@ -2,7 +2,7 @@ import { inject, injectable } from 'inversify'; import { ServiceIdentifiers } from '../container/ServiceIdentifiers'; import { TIdentifierNamesGeneratorFactory } from '../types/container/generators/TIdentifierNamesGeneratorFactory'; -import { TNodeWithBlockStatement } from '../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../types/node/TNodeWithBlockScope'; import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { ICustomNodeGroup } from '../interfaces/custom-nodes/ICustomNodeGroup'; @@ -63,10 +63,10 @@ export abstract class AbstractCustomNodeGroup implements ICustomNodeGroup { } /** - * @param {TNodeWithBlockStatement} blockScopeNode + * @param {TNodeWithBlockScope} blockScopeNode * @param {IStackTraceData[]} stackTraceData */ - public abstract appendCustomNodes (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void; + public abstract appendCustomNodes (blockScopeNode: TNodeWithBlockScope, stackTraceData: IStackTraceData[]): void; /** * @returns {ObfuscationEvent} diff --git a/src/custom-nodes/console-output-nodes/group/ConsoleOutputCustomNodeGroup.ts b/src/custom-nodes/console-output-nodes/group/ConsoleOutputCustomNodeGroup.ts index 4fb495ec..cfca8820 100644 --- a/src/custom-nodes/console-output-nodes/group/ConsoleOutputCustomNodeGroup.ts +++ b/src/custom-nodes/console-output-nodes/group/ConsoleOutputCustomNodeGroup.ts @@ -3,7 +3,7 @@ import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers'; import { TCustomNodeFactory } from '../../../types/container/custom-nodes/TCustomNodeFactory'; import { TIdentifierNamesGeneratorFactory } from '../../../types/container/generators/TIdentifierNamesGeneratorFactory'; -import { TNodeWithBlockStatement } from '../../../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../../../types/node/TNodeWithBlockScope'; import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../../interfaces/options/IOptions'; @@ -55,10 +55,10 @@ export class ConsoleOutputCustomNodeGroup extends AbstractCustomNodeGroup { } /** - * @param {TNodeWithBlockStatement} blockScopeNode + * @param {TNodeWithBlockScope} blockScopeNode * @param {IStackTraceData[]} stackTraceData */ - public appendCustomNodes (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void { + public appendCustomNodes (blockScopeNode: TNodeWithBlockScope, stackTraceData: IStackTraceData[]): void { const randomStackTraceIndex: number = this.getRandomStackTraceIndex(stackTraceData.length); // consoleOutputDisableExpressionNode append @@ -73,7 +73,7 @@ export class ConsoleOutputCustomNodeGroup extends AbstractCustomNodeGroup { // nodeCallsControllerFunctionNode append this.appendCustomNodeIfExist(CustomNode.NodeCallsControllerFunctionNode, (customNode: ICustomNode) => { - let targetBlockScope: TNodeWithBlockStatement; + let targetBlockScope: TNodeWithBlockScope; if (stackTraceData.length) { targetBlockScope = NodeAppender.getOptimalBlockScope(stackTraceData, randomStackTraceIndex, 1); diff --git a/src/custom-nodes/dead-code-injection-nodes/BlockStatementDeadCodeInjectionNode.ts b/src/custom-nodes/dead-code-injection-nodes/BlockStatementDeadCodeInjectionNode.ts new file mode 100644 index 00000000..ca1c4913 --- /dev/null +++ b/src/custom-nodes/dead-code-injection-nodes/BlockStatementDeadCodeInjectionNode.ts @@ -0,0 +1,89 @@ +import { inject, injectable, } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + +import { BinaryOperator, BlockStatement } from 'estree'; + +import { TIdentifierNamesGeneratorFactory } from '../../types/container/generators/TIdentifierNamesGeneratorFactory'; +import { TStatement } from '../../types/node/TStatement'; + +import { IOptions } from '../../interfaces/options/IOptions'; +import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; + +import { initializable } from '../../decorators/Initializable'; + +import { AbstractCustomNode } from '../AbstractCustomNode'; +import { Nodes } from '../../node/Nodes'; +import { NodeUtils } from '../../node/NodeUtils'; + +@injectable() +export class BlockStatementDeadCodeInjectionNode extends AbstractCustomNode { + /** + * @type {BlockStatement} + */ + @initializable() + private blockStatementNode: BlockStatement; + + /** + * @type {BlockStatement} + */ + @initializable() + private randomBlockStatementNode: BlockStatement; + + /** + * @param {TIdentifierNamesGeneratorFactory} identifierNamesGeneratorFactory + * @param {IRandomGenerator} randomGenerator + * @param {IOptions} options + */ + constructor ( + @inject(ServiceIdentifiers.Factory__IIdentifierNamesGenerator) + identifierNamesGeneratorFactory: TIdentifierNamesGeneratorFactory, + @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { + super(identifierNamesGeneratorFactory, randomGenerator, options); + } + + /** + * @param {BlockStatement} blockStatementNode + * @param {BlockStatement} randomBlockStatementNode + */ + public initialize ( + blockStatementNode: BlockStatement, + randomBlockStatementNode: BlockStatement + ): void { + this.blockStatementNode = blockStatementNode; + this.randomBlockStatementNode = randomBlockStatementNode; + } + + /** + * @returns {TStatement[]} + */ + protected getNodeStructure (): TStatement[] { + const random1: boolean = this.randomGenerator.getMathRandom() > 0.5; + const random2: boolean = this.randomGenerator.getMathRandom() > 0.5; + + const operator: BinaryOperator = random1 ? '===' : '!=='; + const leftString: string = this.randomGenerator.getRandomString(5); + const rightString: string = random2 ? leftString : this.randomGenerator.getRandomString(5); + + const [consequent, alternate]: [BlockStatement, BlockStatement] = random1 === random2 + ? [this.blockStatementNode, this.randomBlockStatementNode] + : [this.randomBlockStatementNode, this.blockStatementNode]; + + const structure: BlockStatement = Nodes.getBlockStatementNode([ + Nodes.getIfStatementNode( + Nodes.getBinaryExpressionNode( + operator, + Nodes.getLiteralNode(leftString), + Nodes.getLiteralNode(rightString) + ), + consequent, + alternate + ) + ]); + + NodeUtils.parentize(structure); + + return [structure]; + } +} diff --git a/src/custom-nodes/debug-protection-nodes/group/DebugProtectionCustomNodeGroup.ts b/src/custom-nodes/debug-protection-nodes/group/DebugProtectionCustomNodeGroup.ts index fb7d3d64..f523d853 100644 --- a/src/custom-nodes/debug-protection-nodes/group/DebugProtectionCustomNodeGroup.ts +++ b/src/custom-nodes/debug-protection-nodes/group/DebugProtectionCustomNodeGroup.ts @@ -3,7 +3,7 @@ import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers'; import { TCustomNodeFactory } from '../../../types/container/custom-nodes/TCustomNodeFactory'; import { TIdentifierNamesGeneratorFactory } from '../../../types/container/generators/TIdentifierNamesGeneratorFactory'; -import { TNodeWithBlockStatement } from '../../../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../../../types/node/TNodeWithBlockScope'; import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../../interfaces/options/IOptions'; @@ -55,10 +55,10 @@ export class DebugProtectionCustomNodeGroup extends AbstractCustomNodeGroup { } /** - * @param {TNodeWithBlockStatement} blockScopeNode + * @param {TNodeWithBlockScope} blockScopeNode * @param {IStackTraceData[]} stackTraceData */ - public appendCustomNodes (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void { + public appendCustomNodes (blockScopeNode: TNodeWithBlockScope, stackTraceData: IStackTraceData[]): void { const randomStackTraceIndex: number = this.getRandomStackTraceIndex(stackTraceData.length); // debugProtectionFunctionCallNode append @@ -86,7 +86,7 @@ export class DebugProtectionCustomNodeGroup extends AbstractCustomNodeGroup { // nodeCallsControllerFunctionNode append this.appendCustomNodeIfExist(CustomNode.NodeCallsControllerFunctionNode, (customNode: ICustomNode) => { - let targetBlockScope: TNodeWithBlockStatement; + let targetBlockScope: TNodeWithBlockScope; if (stackTraceData.length) { targetBlockScope = NodeAppender.getOptimalBlockScope(stackTraceData, randomStackTraceIndex, 1); diff --git a/src/custom-nodes/domain-lock-nodes/group/DomainLockCustomNodeGroup.ts b/src/custom-nodes/domain-lock-nodes/group/DomainLockCustomNodeGroup.ts index e3874138..bb7c7ec4 100644 --- a/src/custom-nodes/domain-lock-nodes/group/DomainLockCustomNodeGroup.ts +++ b/src/custom-nodes/domain-lock-nodes/group/DomainLockCustomNodeGroup.ts @@ -3,7 +3,7 @@ import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers'; import { TCustomNodeFactory } from '../../../types/container/custom-nodes/TCustomNodeFactory'; import { TIdentifierNamesGeneratorFactory } from '../../../types/container/generators/TIdentifierNamesGeneratorFactory'; -import { TNodeWithBlockStatement } from '../../../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../../../types/node/TNodeWithBlockScope'; import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../../interfaces/options/IOptions'; @@ -55,10 +55,10 @@ export class DomainLockCustomNodeGroup extends AbstractCustomNodeGroup { } /** - * @param {TNodeWithBlockStatement} blockScopeNode + * @param {TNodeWithBlockScope} blockScopeNode * @param {IStackTraceData[]} stackTraceData */ - public appendCustomNodes (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void { + public appendCustomNodes (blockScopeNode: TNodeWithBlockScope, stackTraceData: IStackTraceData[]): void { const randomStackTraceIndex: number = this.getRandomStackTraceIndex(stackTraceData.length); // domainLockNode append @@ -73,7 +73,7 @@ export class DomainLockCustomNodeGroup extends AbstractCustomNodeGroup { // nodeCallsControllerFunctionNode append this.appendCustomNodeIfExist(CustomNode.NodeCallsControllerFunctionNode, (customNode: ICustomNode) => { - let targetBlockScope: TNodeWithBlockStatement; + let targetBlockScope: TNodeWithBlockScope; if (stackTraceData.length) { targetBlockScope = NodeAppender.getOptimalBlockScope(stackTraceData, randomStackTraceIndex, 1); diff --git a/src/custom-nodes/node-calls-controller-nodes/NodeCallsControllerFunctionNode.ts b/src/custom-nodes/node-calls-controller-nodes/NodeCallsControllerFunctionNode.ts index 31c4dab9..981a344e 100644 --- a/src/custom-nodes/node-calls-controller-nodes/NodeCallsControllerFunctionNode.ts +++ b/src/custom-nodes/node-calls-controller-nodes/NodeCallsControllerFunctionNode.ts @@ -15,7 +15,7 @@ import { initializable } from '../../decorators/Initializable'; import { SingleNodeCallControllerTemplate } from '../../templates/SingleNodeCallControllerTemplate'; -import { NO_CUSTOM_NODES_PRESET } from '../../options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../options/presets/NoCustomNodes'; import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from '../../JavaScriptObfuscatorFacade'; @@ -75,7 +75,7 @@ export class NodeCallsControllerFunctionNode extends AbstractCustomNode { singleNodeCallControllerFunctionName: this.callsControllerFunctionName }), { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, identifierNamesGenerator: this.options.identifierNamesGenerator, seed: this.options.seed } diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index f11df688..d381562b 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts @@ -12,7 +12,7 @@ import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { initializable } from '../../decorators/Initializable'; -import { NO_CUSTOM_NODES_PRESET } from '../../options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../options/presets/NoCustomNodes'; import { SelfDefendingTemplate } from '../../templates/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate'; @@ -75,7 +75,7 @@ export class SelfDefendingUnicodeNode extends AbstractCustomNode { singleNodeCallControllerFunctionName: this.callsControllerFunctionName }), { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, identifierNamesGenerator: this.options.identifierNamesGenerator, seed: this.options.seed, unicodeEscapeSequence: true diff --git a/src/custom-nodes/self-defending-nodes/group/SelfDefendingCustomNodeGroup.ts b/src/custom-nodes/self-defending-nodes/group/SelfDefendingCustomNodeGroup.ts index 07290a0e..6c2c55d1 100644 --- a/src/custom-nodes/self-defending-nodes/group/SelfDefendingCustomNodeGroup.ts +++ b/src/custom-nodes/self-defending-nodes/group/SelfDefendingCustomNodeGroup.ts @@ -3,7 +3,7 @@ import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers'; import { TCustomNodeFactory } from '../../../types/container/custom-nodes/TCustomNodeFactory'; import { TIdentifierNamesGeneratorFactory } from '../../../types/container/generators/TIdentifierNamesGeneratorFactory'; -import { TNodeWithBlockStatement } from '../../../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../../../types/node/TNodeWithBlockScope'; import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../../interfaces/options/IOptions'; @@ -55,10 +55,10 @@ export class SelfDefendingCustomNodeGroup extends AbstractCustomNodeGroup { } /** - * @param {TNodeWithBlockStatement} blockScopeNode + * @param {TNodeWithBlockScope} blockScopeNode * @param {IStackTraceData[]} stackTraceData */ - public appendCustomNodes (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void { + public appendCustomNodes (blockScopeNode: TNodeWithBlockScope, stackTraceData: IStackTraceData[]): void { const randomStackTraceIndex: number = this.getRandomStackTraceIndex(stackTraceData.length); // selfDefendingUnicodeNode append @@ -73,7 +73,7 @@ export class SelfDefendingCustomNodeGroup extends AbstractCustomNodeGroup { // nodeCallsControllerFunctionNode append this.appendCustomNodeIfExist(CustomNode.NodeCallsControllerFunctionNode, (customNode: ICustomNode) => { - let targetBlockScope: TNodeWithBlockStatement; + let targetBlockScope: TNodeWithBlockScope; if (stackTraceData.length) { targetBlockScope = NodeAppender.getOptimalBlockScope(stackTraceData, randomStackTraceIndex, 1); diff --git a/src/custom-nodes/string-array-nodes/StringArrayCallsWrapper.ts b/src/custom-nodes/string-array-nodes/StringArrayCallsWrapper.ts index bceec77b..452ed55b 100644 --- a/src/custom-nodes/string-array-nodes/StringArrayCallsWrapper.ts +++ b/src/custom-nodes/string-array-nodes/StringArrayCallsWrapper.ts @@ -15,7 +15,7 @@ import { StringArrayEncoding } from '../../enums/StringArrayEncoding'; import { initializable } from '../../decorators/Initializable'; -import { NO_CUSTOM_NODES_PRESET } from '../../options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../options/presets/NoCustomNodes'; import { AtobTemplate } from '../../templates/AtobTemplate'; import { GlobalVariableNoEvalTemplate } from '../../templates/GlobalVariableNoEvalTemplate'; @@ -98,7 +98,7 @@ export class StringArrayCallsWrapper extends AbstractCustomNode { stringArrayName: this.stringArrayName }), { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, identifierNamesGenerator: this.options.identifierNamesGenerator, seed: this.options.seed } diff --git a/src/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.ts b/src/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.ts index 4bf087c1..0c32dbf4 100644 --- a/src/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.ts +++ b/src/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.ts @@ -12,7 +12,7 @@ import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { initializable } from '../../decorators/Initializable'; -import { NO_CUSTOM_NODES_PRESET } from '../../options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../options/presets/NoCustomNodes'; import { SelfDefendingTemplate } from '../../templates/string-array-nodes/string-array-rotate-function-node/SelfDefendingTemplate'; import { StringArrayRotateFunctionTemplate } from '../../templates/string-array-nodes/string-array-rotate-function-node/StringArrayRotateFunctionTemplate'; @@ -105,7 +105,7 @@ export class StringArrayRotateFunctionNode extends AbstractCustomNode { whileFunctionName }), { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, identifierNamesGenerator: this.options.identifierNamesGenerator, seed: this.options.seed } diff --git a/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts b/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts index 8ecf900d..8c7237c2 100644 --- a/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts +++ b/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts @@ -3,7 +3,7 @@ import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers'; import { TCustomNodeFactory } from '../../../types/container/custom-nodes/TCustomNodeFactory'; import { TIdentifierNamesGeneratorFactory } from '../../../types/container/generators/TIdentifierNamesGeneratorFactory'; -import { TNodeWithBlockStatement } from '../../../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../../../types/node/TNodeWithBlockScope'; import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../../interfaces/options/IOptions'; @@ -65,10 +65,10 @@ export class StringArrayCustomNodeGroup extends AbstractCustomNodeGroup { } /** - * @param {TNodeWithBlockStatement} blockScopeNode + * @param {TNodeWithBlockScope} blockScopeNode * @param {IStackTraceData[]} stackTraceData */ - public appendCustomNodes (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void { + public appendCustomNodes (blockScopeNode: TNodeWithBlockScope, stackTraceData: IStackTraceData[]): void { if (!this.stringArrayStorage.getLength()) { return; } diff --git a/src/declarations/ESTree.d.ts b/src/declarations/ESTree.d.ts index db3aaca6..d2373483 100644 --- a/src/declarations/ESTree.d.ts +++ b/src/declarations/ESTree.d.ts @@ -5,6 +5,7 @@ import * as ESTree from 'estree'; declare module 'estree' { interface BaseNode { ignoredNode?: boolean; + isEvalRoot?: boolean; obfuscatedNode?: boolean; parentNode?: ESTree.Node; } diff --git a/src/declarations/js-string-escape.d.ts b/src/declarations/js-string-escape.d.ts new file mode 100644 index 00000000..4b54f572 --- /dev/null +++ b/src/declarations/js-string-escape.d.ts @@ -0,0 +1,5 @@ +declare module 'js-string-escape' { + function jsStringEscape (input: string): string; + + export = jsStringEscape; +} diff --git a/src/enums/analyzers/stack-trace-analyzer/CalleeDataExtractor.ts b/src/enums/analyzers/stack-trace-analyzer/CalleeDataExtractor.ts index b8ba708f..2652e419 100644 --- a/src/enums/analyzers/stack-trace-analyzer/CalleeDataExtractor.ts +++ b/src/enums/analyzers/stack-trace-analyzer/CalleeDataExtractor.ts @@ -1,5 +1,5 @@ export enum CalleeDataExtractor { - FunctionDeclarationCalleeDataExtractor, - FunctionExpressionCalleeDataExtractor, - ObjectExpressionCalleeDataExtractor, + FunctionDeclarationCalleeDataExtractor = 'FunctionDeclarationCalleeDataExtractor', + FunctionExpressionCalleeDataExtractor = 'FunctionExpressionCalleeDataExtractor', + ObjectExpressionCalleeDataExtractor = 'ObjectExpressionCalleeDataExtractor', } diff --git a/src/enums/custom-nodes/ControlFlowCustomNode.ts b/src/enums/custom-nodes/ControlFlowCustomNode.ts index b2918756..ae4310b9 100644 --- a/src/enums/custom-nodes/ControlFlowCustomNode.ts +++ b/src/enums/custom-nodes/ControlFlowCustomNode.ts @@ -1,11 +1,11 @@ export enum ControlFlowCustomNode { - BinaryExpressionFunctionNode, - BlockStatementControlFlowFlatteningNode, - CallExpressionControlFlowStorageCallNode, - CallExpressionFunctionNode, - ControlFlowStorageNode, - ExpressionWithOperatorControlFlowStorageCallNode, - LogicalExpressionFunctionNode, - StringLiteralControlFlowStorageCallNode, - StringLiteralNode, + BinaryExpressionFunctionNode = 'BinaryExpressionFunctionNode', + BlockStatementControlFlowFlatteningNode = 'BlockStatementControlFlowFlatteningNode', + CallExpressionControlFlowStorageCallNode = 'CallExpressionControlFlowStorageCallNode', + CallExpressionFunctionNode = 'CallExpressionFunctionNode', + ControlFlowStorageNode = 'ControlFlowStorageNode', + ExpressionWithOperatorControlFlowStorageCallNode = 'ExpressionWithOperatorControlFlowStorageCallNode', + LogicalExpressionFunctionNode = 'LogicalExpressionFunctionNode', + StringLiteralControlFlowStorageCallNode = 'StringLiteralControlFlowStorageCallNode', + StringLiteralNode = 'StringLiteralNode' } diff --git a/src/enums/custom-nodes/CustomNode.ts b/src/enums/custom-nodes/CustomNode.ts index 340cd8f1..f79c3a76 100644 --- a/src/enums/custom-nodes/CustomNode.ts +++ b/src/enums/custom-nodes/CustomNode.ts @@ -1,12 +1,12 @@ export enum CustomNode { - ConsoleOutputDisableExpressionNode, - DebugProtectionFunctionCallNode, - DebugProtectionFunctionIntervalNode, - DebugProtectionFunctionNode, - DomainLockNode, - NodeCallsControllerFunctionNode, - SelfDefendingUnicodeNode, - StringArrayCallsWrapper, - StringArrayNode, - StringArrayRotateFunctionNode + ConsoleOutputDisableExpressionNode = 'ConsoleOutputDisableExpressionNode', + DebugProtectionFunctionCallNode = 'DebugProtectionFunctionCallNode', + DebugProtectionFunctionIntervalNode = 'DebugProtectionFunctionIntervalNode', + DebugProtectionFunctionNode = 'DebugProtectionFunctionNode', + DomainLockNode = 'DomainLockNode', + NodeCallsControllerFunctionNode = 'NodeCallsControllerFunctionNode', + SelfDefendingUnicodeNode = 'SelfDefendingUnicodeNode', + StringArrayCallsWrapper = 'StringArrayCallsWrapper', + StringArrayNode = 'StringArrayNode', + StringArrayRotateFunctionNode = 'StringArrayRotateFunctionNode' } diff --git a/src/enums/custom-nodes/CustomNodeGroup.ts b/src/enums/custom-nodes/CustomNodeGroup.ts index e1368d61..a3f0d9bf 100644 --- a/src/enums/custom-nodes/CustomNodeGroup.ts +++ b/src/enums/custom-nodes/CustomNodeGroup.ts @@ -1,7 +1,7 @@ export enum CustomNodeGroup { - ConsoleOutputCustomNodeGroup, - DebugProtectionCustomNodeGroup, - DomainLockCustomNodeGroup, - SelfDefendingCustomNodeGroup, - StringArrayCustomNodeGroup + ConsoleOutputCustomNodeGroup = 'ConsoleOutputCustomNodeGroup', + DebugProtectionCustomNodeGroup = 'DebugProtectionCustomNodeGroup', + DomainLockCustomNodeGroup = 'DomainLockCustomNodeGroup', + SelfDefendingCustomNodeGroup = 'SelfDefendingCustomNodeGroup', + StringArrayCustomNodeGroup = 'StringArrayCustomNodeGroup' } diff --git a/src/enums/custom-nodes/DeadCodeInjectionCustomNode.ts b/src/enums/custom-nodes/DeadCodeInjectionCustomNode.ts new file mode 100644 index 00000000..dea3aacd --- /dev/null +++ b/src/enums/custom-nodes/DeadCodeInjectionCustomNode.ts @@ -0,0 +1,3 @@ +export enum DeadCodeInjectionCustomNode { + BlockStatementDeadCodeInjectionNode = 'BlockStatementDeadCodeInjectionNode' +} diff --git a/src/enums/logger/LoggingMessage.ts b/src/enums/logger/LoggingMessage.ts index bd793657..2cd8c6b5 100644 --- a/src/enums/logger/LoggingMessage.ts +++ b/src/enums/logger/LoggingMessage.ts @@ -7,6 +7,8 @@ export enum LoggingMessage { StageAnalyzingASTTree = 'Stage: analyzing AST-tree...', StageControlFlowFlattening = 'Stage: control flow flattening...', StageDeadCodeInjection = 'Stage: dead code injection...', + StagePostObfuscation = 'Stage: post-obfuscation...', + StagePreObfuscation = 'Stage: pre-obfuscation...', StageObfuscation = 'Stage: obfuscation...', Version = 'Version: %s' } diff --git a/src/enums/node-transformers/NodeTransformer.ts b/src/enums/node-transformers/NodeTransformer.ts index 5bf47f85..476ae220 100644 --- a/src/enums/node-transformers/NodeTransformer.ts +++ b/src/enums/node-transformers/NodeTransformer.ts @@ -1,20 +1,22 @@ export enum NodeTransformer { - BlockStatementControlFlowTransformer, - CallExpressionTransformer, - ClassDeclarationTransformer, - CommentsTransformer, - DeadCodeInjectionTransformer, - FunctionControlFlowTransformer, - CatchClauseTransformer, - FunctionDeclarationTransformer, - FunctionTransformer, - LabeledStatementTransformer, - LiteralTransformer, - MemberExpressionTransformer, - MethodDefinitionTransformer, - ObfuscatingGuardsTransformer, - ObjectExpressionTransformer, - ParentificationTransformer, - TemplateLiteralTransformer, - VariableDeclarationTransformer + AstToEvalCallExpressionTransformer = 'AstToEvalCallExpressionTransformer', + BlockStatementControlFlowTransformer = 'BlockStatementControlFlowTransformer', + ClassDeclarationTransformer = 'ClassDeclarationTransformer', + CommentsTransformer = 'CommentsTransformer', + DeadCodeInjectionTransformer = 'DeadCodeInjectionTransformer', + EvalCallExpressionToAstTransformer = 'EvalCallExpressionToAstTransformer', + FunctionControlFlowTransformer = 'FunctionControlFlowTransformer', + CatchClauseTransformer = 'CatchClauseTransformer', + FunctionDeclarationTransformer = 'FunctionDeclarationTransformer', + FunctionTransformer = 'FunctionTransformer', + LabeledStatementTransformer = 'LabeledStatementTransformer', + LiteralTransformer = 'LiteralTransformer', + MemberExpressionTransformer = 'MemberExpressionTransformer', + MethodDefinitionTransformer = 'MethodDefinitionTransformer', + ObfuscatingGuardsTransformer = 'ObfuscatingGuardsTransformer', + ObjectExpressionKeysTransformer = 'ObjectExpressionKeysTransformer', + ObjectExpressionTransformer = 'ObjectExpressionTransformer', + ParentificationTransformer = 'ParentificationTransformer', + TemplateLiteralTransformer = 'TemplateLiteralTransformer', + VariableDeclarationTransformer = 'VariableDeclarationTransformer' } diff --git a/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/ControlFlowReplacer.ts b/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/ControlFlowReplacer.ts index 513d53f2..079ec1d2 100644 --- a/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/ControlFlowReplacer.ts +++ b/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/ControlFlowReplacer.ts @@ -1,6 +1,6 @@ export enum ControlFlowReplacer { - BinaryExpressionControlFlowReplacer, - CallExpressionControlFlowReplacer, - LogicalExpressionControlFlowReplacer, - StringLiteralControlFlowReplacer, + BinaryExpressionControlFlowReplacer = 'BinaryExpressionControlFlowReplacer', + CallExpressionControlFlowReplacer = 'CallExpressionControlFlowReplacer', + LogicalExpressionControlFlowReplacer = 'LogicalExpressionControlFlowReplacer', + StringLiteralControlFlowReplacer = 'StringLiteralControlFlowReplacer' } diff --git a/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer.ts b/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer.ts index 0bca9ce1..b37453fb 100644 --- a/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer.ts +++ b/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer.ts @@ -1,3 +1,3 @@ export enum IdentifierObfuscatingReplacer { - BaseIdentifierObfuscatingReplacer + BaseIdentifierObfuscatingReplacer = 'BaseIdentifierObfuscatingReplacer' } diff --git a/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/LiteralObfuscatingReplacer.ts b/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/LiteralObfuscatingReplacer.ts index 52f4f4d4..61c9a83f 100644 --- a/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/LiteralObfuscatingReplacer.ts +++ b/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/LiteralObfuscatingReplacer.ts @@ -1,5 +1,5 @@ export enum LiteralObfuscatingReplacer { - BooleanLiteralObfuscatingReplacer, - NumberLiteralObfuscatingReplacer, - StringLiteralObfuscatingReplacer + BooleanLiteralObfuscatingReplacer = 'BooleanLiteralObfuscatingReplacer', + NumberLiteralObfuscatingReplacer = 'NumberLiteralObfuscatingReplacer', + StringLiteralObfuscatingReplacer = 'StringLiteralObfuscatingReplacer' } diff --git a/src/enums/node-transformers/preparing-transformers/obfuscating-guards/ObfuscatingGuard.ts b/src/enums/node-transformers/preparing-transformers/obfuscating-guards/ObfuscatingGuard.ts index ecbbe697..0f131254 100644 --- a/src/enums/node-transformers/preparing-transformers/obfuscating-guards/ObfuscatingGuard.ts +++ b/src/enums/node-transformers/preparing-transformers/obfuscating-guards/ObfuscatingGuard.ts @@ -1,4 +1,4 @@ export enum ObfuscatingGuard { - BlackListNodeGuard, - ConditionalCommentNodeGuard + BlackListNodeGuard = 'BlackListNodeGuard', + ConditionalCommentNodeGuard = 'ConditionalCommentNodeGuard' } diff --git a/src/enums/node/NodeType.ts b/src/enums/node/NodeType.ts index fb40f9f9..792879fa 100644 --- a/src/enums/node/NodeType.ts +++ b/src/enums/node/NodeType.ts @@ -1,5 +1,6 @@ export enum NodeType { ArrayExpression = 'ArrayExpression', + ArrayPattern = 'ArrayPattern', ArrowFunctionExpression = 'ArrowFunctionExpression', AssignmentExpression = 'AssignmentExpression', AssignmentPattern = 'AssignmentPattern', @@ -25,6 +26,7 @@ export enum NodeType { ObjectPattern = 'ObjectPattern', Program = 'Program', Property = 'Property', + RestElement = 'RestElement', ReturnStatement = 'ReturnStatement', Super = 'Super', SwitchCase = 'SwitchCase', diff --git a/src/interfaces/IObfuscationResult.d.ts b/src/interfaces/IObfuscationResult.d.ts index 7f6fc511..b267e8bc 100644 --- a/src/interfaces/IObfuscationResult.d.ts +++ b/src/interfaces/IObfuscationResult.d.ts @@ -1,13 +1,6 @@ -import * as ESTree from 'estree'; - import { IInitializable } from './IInitializable'; export interface IObfuscationResult extends IInitializable { - /** - * @return {string} - */ - getObfuscatedAst (): ESTree.Program; - /** * @return {string} */ diff --git a/src/interfaces/custom-nodes/ICustomNodeGroup.d.ts b/src/interfaces/custom-nodes/ICustomNodeGroup.d.ts index 836a4d0a..cf9b2b1d 100644 --- a/src/interfaces/custom-nodes/ICustomNodeGroup.d.ts +++ b/src/interfaces/custom-nodes/ICustomNodeGroup.d.ts @@ -1,4 +1,4 @@ -import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../../types/node/TNodeWithBlockScope'; import { ICustomNode } from './ICustomNode'; import { IInitializable } from '../IInitializable'; @@ -12,7 +12,7 @@ export interface ICustomNodeGroup extends IInitializable { * @param blockScopeNode * @param stackTraceData */ - appendCustomNodes (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void; + appendCustomNodes (blockScopeNode: TNodeWithBlockScope, stackTraceData: IStackTraceData[]): void; /** * @returns {ObfuscationEvent} diff --git a/src/interfaces/options/IOptions.d.ts b/src/interfaces/options/IOptions.d.ts index b2cc2635..5e176e20 100644 --- a/src/interfaces/options/IOptions.d.ts +++ b/src/interfaces/options/IOptions.d.ts @@ -29,5 +29,6 @@ export interface IOptions { readonly stringArrayEncoding: TStringArrayEncoding; readonly stringArrayThreshold: number; readonly target: ObfuscationTarget; + readonly transformObjectKeys: boolean; readonly unicodeEscapeSequence: boolean; } diff --git a/src/interfaces/source-map/ISourceMapCorrector.d.ts b/src/interfaces/source-map/ISourceMapCorrector.d.ts index 6f2cd0a9..ec1a2b08 100644 --- a/src/interfaces/source-map/ISourceMapCorrector.d.ts +++ b/src/interfaces/source-map/ISourceMapCorrector.d.ts @@ -1,13 +1,10 @@ -import * as ESTree from 'estree'; - import { IObfuscationResult } from '../IObfuscationResult'; export interface ISourceMapCorrector { /** - * @param {Program} obfuscatedAst * @param {string} obfuscatedCode * @param {string} sourceMap * @returns {IObfuscationResult} */ - correct (obfuscatedAst: ESTree.Program, obfuscatedCode: string, sourceMap: string): IObfuscationResult; + correct (obfuscatedCode: string, sourceMap: string): IObfuscationResult; } diff --git a/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts b/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts index 6b4c9a33..b04883e5 100644 --- a/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts +++ b/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts @@ -5,6 +5,7 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { TControlFlowCustomNodeFactory } from '../../types/container/custom-nodes/TControlFlowCustomNodeFactory'; +import { TStatement } from '../../types/node/TStatement'; import { IArrayUtils } from '../../interfaces/utils/IArrayUtils'; import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; @@ -16,6 +17,7 @@ import { ControlFlowCustomNode } from '../../enums/custom-nodes/ControlFlowCusto import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; import { NodeGuards } from '../../node/NodeGuards'; +import { NodeUtils } from '../../node/NodeUtils'; @injectable() export class BlockStatementControlFlowTransformer extends AbstractNodeTransformer { @@ -134,6 +136,10 @@ export class BlockStatementControlFlowTransformer extends AbstractNodeTransforme originalKeysIndexesInShuffledArray ); - return blockStatementControlFlowFlatteningCustomNode.getNode()[0]; + const newBlockStatementNode: TStatement = blockStatementControlFlowFlatteningCustomNode.getNode()[0]; + + NodeUtils.parentizeNode(newBlockStatementNode, parentNode); + + return newBlockStatementNode; } } diff --git a/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts b/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts index 098b4ffd..377cf566 100644 --- a/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts +++ b/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts @@ -7,7 +7,7 @@ import * as ESTree from 'estree'; import { TControlFlowCustomNodeFactory } from '../../types/container/custom-nodes/TControlFlowCustomNodeFactory'; import { TControlFlowReplacerFactory } from '../../types/container/node-transformers/TControlFlowReplacerFactory'; import { TControlFlowStorageFactory } from '../../types/container/node-transformers/TControlFlowStorageFactory'; -import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../../types/node/TNodeWithBlockScope'; import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../interfaces/options/IOptions'; @@ -57,9 +57,9 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { private readonly visitedFunctionNodes: Set = new Set(); /** - * @type {Set} + * @type {Set} */ - private readonly hostNodesWithControlFlowNode: Set = new Set(); + private readonly hostNodesWithControlFlowNode: Set = new Set(); /** * @type {TControlFlowReplacerFactory} @@ -131,7 +131,7 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { return functionNode; } - const hostNode: TNodeWithBlockStatement = this.getHostNode(functionNode.body); + const hostNode: TNodeWithBlockScope = this.getHostNode(functionNode.body); const controlFlowStorage: IStorage = this.getControlFlowStorage(hostNode); this.controlFlowData.set(hostNode, controlFlowStorage); @@ -153,10 +153,10 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { } /** - * @param {TNodeWithBlockStatement} hostNode + * @param {TNodeWithBlockScope} hostNode * @returns {IStorage} */ - private getControlFlowStorage (hostNode: TNodeWithBlockStatement): IStorage { + private getControlFlowStorage (hostNode: TNodeWithBlockScope): IStorage { const controlFlowStorage: IStorage = this.controlFlowStorageFactory(); if (this.controlFlowData.has(hostNode)) { @@ -174,10 +174,10 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { /** * @param {BlockStatement} functionNodeBody - * @returns {TNodeWithBlockStatement} + * @returns {TNodeWithBlockScope} */ - private getHostNode (functionNodeBody: ESTree.BlockStatement): TNodeWithBlockStatement { - const blockScopesOfNode: TNodeWithBlockStatement[] = NodeUtils.getBlockScopesOfNode(functionNodeBody); + private getHostNode (functionNodeBody: ESTree.BlockStatement): TNodeWithBlockScope { + const blockScopesOfNode: TNodeWithBlockScope[] = NodeUtils.getBlockScopesOfNode(functionNodeBody); if (blockScopesOfNode.length === 1) { return functionNodeBody; diff --git a/src/node-transformers/converting-transformers/AstToEvalCallExpressionTransformer.ts b/src/node-transformers/converting-transformers/AstToEvalCallExpressionTransformer.ts new file mode 100644 index 00000000..8b06c639 --- /dev/null +++ b/src/node-transformers/converting-transformers/AstToEvalCallExpressionTransformer.ts @@ -0,0 +1,56 @@ +import { inject, injectable, } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + +import * as ESTree from 'estree'; +import jsStringEscape = require('js-string-escape'); + +import { IOptions } from '../../interfaces/options/IOptions'; +import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; +import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; + +import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; +import { Nodes } from '../../node/Nodes'; +import { NodeUtils } from '../../node/NodeUtils'; + +@injectable() +export class AstToEvalCallExpressionTransformer extends AbstractNodeTransformer { + /** + * @param {IRandomGenerator} randomGenerator + * @param {IOptions} options + */ + constructor ( + @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { + super(randomGenerator, options); + } + + /** + * @return {IVisitor} + */ + public getVisitor (): IVisitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node | null) => { + if (parentNode && node.isEvalRoot) { + return this.transformNode(node, parentNode); + } + } + }; + } + + /** + * @param {ExpressionStatement} node + * @param {Node} parentNode + * @returns {Node} + */ + public transformNode (node: ESTree.Node, parentNode: ESTree.Node): ESTree.Node { + const code: string = NodeUtils.convertStructureToCode([node]); + + return Nodes.getCallExpressionNode( + Nodes.getIdentifierNode('eval'), + [ + Nodes.getLiteralNode(jsStringEscape(code)) + ] + ); + } +} diff --git a/src/node-transformers/converting-transformers/CallExpressionTransformer.ts b/src/node-transformers/converting-transformers/CallExpressionTransformer.ts deleted file mode 100644 index d5a95262..00000000 --- a/src/node-transformers/converting-transformers/CallExpressionTransformer.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { inject, injectable, } from 'inversify'; -import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; - -import * as ESTree from 'estree'; - -import { IOptions } from '../../interfaces/options/IOptions'; -import { IJavaScriptObfuscator } from '../../interfaces/IJavaScriptObfsucator'; -import { IObfuscationResult } from '../../interfaces/IObfuscationResult'; -import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; -import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; - -import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { NodeGuards } from '../../node/NodeGuards'; - -@injectable() -export class CallExpressionTransformer extends AbstractNodeTransformer { - /** - * @type {IJavaScriptObfuscator} - */ - private readonly javaScriptObfuscator: IJavaScriptObfuscator; - - /** - * @param {IJavaScriptObfuscator} javaScriptObfuscator - * @param {IRandomGenerator} randomGenerator - * @param {IOptions} options - */ - constructor ( - @inject(ServiceIdentifiers.IJavaScriptObfuscator) javaScriptObfuscator: IJavaScriptObfuscator, - @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator, - @inject(ServiceIdentifiers.IOptions) options: IOptions - ) { - super(randomGenerator, options); - - this.javaScriptObfuscator = javaScriptObfuscator; - } - - /** - * @return {IVisitor} - */ - public getVisitor (): IVisitor { - return { - enter: (node: ESTree.Node, parentNode: ESTree.Node | null) => { - if (parentNode && NodeGuards.isCallExpressionNode(node)) { - return this.transformNode(node, parentNode); - } - } - }; - } - - /** - * @param {CallExpression} callExpressionNode - * @param {Node} parentNode - * @returns {Node} - */ - public transformNode (callExpressionNode: ESTree.CallExpression, parentNode: ESTree.Node): ESTree.Node { - const callExpressionFirstArgument: ESTree.Expression | ESTree.SpreadElement = callExpressionNode.arguments[0]; - - if ( - NodeGuards.isIdentifierNode(callExpressionNode.callee) - && callExpressionNode.callee.name === 'eval' - && callExpressionFirstArgument - && NodeGuards.isLiteralNode(callExpressionFirstArgument) - ) { - return this.transformEvalCallExpressionLiteralToAst(callExpressionFirstArgument); - } - - return callExpressionNode; - } - - /** - * @param {Literal} literalNode - * @returns {Node} - */ - private transformEvalCallExpressionLiteralToAst (literalNode: ESTree.Literal): ESTree.Node { - if (typeof literalNode.value !== 'string') { - return literalNode; - } - - const code: string = literalNode.value; - const obfuscationResult: IObfuscationResult = this.javaScriptObfuscator.obfuscate(code); - - return obfuscationResult.getObfuscatedAst(); - } -} diff --git a/src/node-transformers/converting-transformers/EvaCallExpressionToAstTransformer.ts b/src/node-transformers/converting-transformers/EvaCallExpressionToAstTransformer.ts new file mode 100644 index 00000000..92cf0c92 --- /dev/null +++ b/src/node-transformers/converting-transformers/EvaCallExpressionToAstTransformer.ts @@ -0,0 +1,72 @@ +import { inject, injectable, } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + +import * as ESTree from 'estree'; + +import { TStatement } from '../../types/node/TStatement'; + +import { IOptions } from '../../interfaces/options/IOptions'; +import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; +import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; + +import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; +import { NodeGuards } from '../../node/NodeGuards'; +import { Nodes } from '../../node/Nodes'; +import { NodeUtils } from '../../node/NodeUtils'; + +@injectable() +export class EvalCallExpressionToAstTransformer extends AbstractNodeTransformer { + /** + * @param {IRandomGenerator} randomGenerator + * @param {IOptions} options + */ + constructor ( + @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { + super(randomGenerator, options); + } + + /** + * @return {IVisitor} + */ + public getVisitor (): IVisitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node | null) => { + if ( + parentNode + && NodeGuards.isCallExpressionNode(node) + && NodeGuards.isIdentifierNode(node.callee) + && node.callee.name === 'eval' + ) { + return this.transformNode(node, parentNode); + } + } + }; + } + + /** + * @param {CallExpression} callExpression + * @param {Node} parentNode + * @returns {Node} + */ + public transformNode (callExpression: ESTree.CallExpression, parentNode: ESTree.Node): ESTree.Node { + const callExpressionFirstArgument: ESTree.Expression | ESTree.SpreadElement = callExpression.arguments[0]; + + if (!callExpressionFirstArgument || !NodeGuards.isLiteralNode(callExpressionFirstArgument)) { + return callExpression; + } + + if (typeof callExpressionFirstArgument.value !== 'string') { + return callExpression; + } + + const code: string = callExpressionFirstArgument.value; + const ast: TStatement[] = NodeUtils.convertCodeToStructure(code); + const programNode: ESTree.Program = Nodes.getProgramNode(ast); + + programNode.isEvalRoot = true; + + return programNode; + } +} diff --git a/src/node-transformers/converting-transformers/ObjectExpressionKeysTransformer.ts b/src/node-transformers/converting-transformers/ObjectExpressionKeysTransformer.ts new file mode 100644 index 00000000..6c5aa7c2 --- /dev/null +++ b/src/node-transformers/converting-transformers/ObjectExpressionKeysTransformer.ts @@ -0,0 +1,230 @@ +import { inject, injectable } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + +import * as ESTree from 'estree'; + +import { TNodeWithScope } from '../../types/node/TNodeWithScope'; + +import { IOptions } from '../../interfaces/options/IOptions'; +import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; +import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; + +import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; +import { NodeAppender } from '../../node/NodeAppender'; +import { NodeGuards } from '../../node/NodeGuards'; +import { Nodes } from '../../node/Nodes'; +import { NodeUtils } from '../../node/NodeUtils'; + +@injectable() +export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer { + /** + * @type {Map} + */ + private cachedScopeNodesMap: Map = new Map(); + + /** + * @param {IRandomGenerator} randomGenerator + * @param {IOptions} options + */ + constructor ( + @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { + super(randomGenerator, options); + } + + /** + * @param {TNodeWithScope} scopeNode + * @param {ExpressionStatement[]} expressionStatements + * @param {Node} variableDeclarator + */ + private static appendExpressionStatements ( + scopeNode: TNodeWithScope, + expressionStatements: ESTree.ExpressionStatement[], + variableDeclarator: ESTree.Node + ): void { + const variableDeclaration: ESTree.Node | undefined = variableDeclarator.parentNode; + + if (!variableDeclaration || !NodeGuards.isVariableDeclarationNode(variableDeclaration)) { + throw new Error('Cannot find variable declaration for variable declarator'); + } + + NodeAppender.insertNodeAfter(scopeNode, expressionStatements, variableDeclaration); + } + + /** + * @param {Property[]} properties + * @param {number[]} removablePropertyIds + * @returns {Property[]} + */ + private static filterObjectExpressionProperties (properties: ESTree.Property[], removablePropertyIds: number[]): ESTree.Property[] { + return properties.filter((property: ESTree.Property, index: number) => !removablePropertyIds.includes(index)); + } + + /** + * @return {IVisitor} + */ + public getVisitor (): IVisitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node | null) => { + if ( + this.options.transformObjectKeys + && parentNode + && NodeGuards.isObjectExpressionNode(node) + && NodeGuards.isVariableDeclaratorNode(parentNode) + ) { + return this.transformNode(node, parentNode); + } + } + }; + } + + /** + * replaces: + * var object = { + * foo: 1, + * bar: 2 + * }; + * + * on: + * var object = {}; + * object['foo'] = 1; + * object['bar'] = 2; + * + * @param {MemberExpression} objectExpressionNode + * @param {NodeGuards} variableDeclarator + * @returns {NodeGuards} + */ + public transformNode (objectExpressionNode: ESTree.ObjectExpression, variableDeclarator: ESTree.VariableDeclarator): ESTree.Node { + // should pass only Expression nodes as MemberExpression.object value + if (!NodeGuards.isIdentifierNode(variableDeclarator.id)) { + return objectExpressionNode; + } + + const scopeNode: TNodeWithScope | null = NodeUtils.getScopeOfNode(variableDeclarator); + + if (!scopeNode || !NodeGuards.isNodeHasScope(scopeNode)) { + return objectExpressionNode; + } + + this.cachedScopeNodesMap.set(variableDeclarator, scopeNode); + + return this.transformObjectExpressionNode( + objectExpressionNode, + variableDeclarator.id, + variableDeclarator + ); + } + + /** + * @param {Property[]} properties + * @param {Expression} memberExpressionObject + * @param {VariableDeclarator} variableDeclarator + * @returns {[ExpressionStatement[] , number[]]} + */ + private extractPropertiesToExpressionStatements ( + properties: ESTree.Property[], + memberExpressionObject: ESTree.Expression, + variableDeclarator: ESTree.VariableDeclarator + ): [ESTree.ExpressionStatement[], number[]] { + const propertiesLength: number = properties.length; + const expressionStatements: ESTree.ExpressionStatement[] = []; + const removablePropertyIds: number[] = []; + + for (let i: number = 0; i < propertiesLength; i++) { + const property: ESTree.Property = properties[i]; + const propertyKey: ESTree.Expression = property.key; + + // invalid property nodes + if ( + NodeGuards.isObjectPatternNode(property.value) + || NodeGuards.isArrayPatternNode(property.value) + || NodeGuards.isAssignmentPatternNode(property.value) + || NodeGuards.isRestElementNode(property.value) + ) { + continue; + } + + /** + * Stage 1: collecting property node key names + */ + let propertyKeyName: string; + + if (NodeGuards.isLiteralNode(propertyKey) && typeof propertyKey.value === 'string') { + propertyKeyName = propertyKey.value; + } else if (NodeGuards.isIdentifierNode(propertyKey)) { + propertyKeyName = propertyKey.name; + } else { + continue; + } + + /** + * Stage 2: creating new expression statement node with member expression based on removed property + */ + const shouldCreateLiteralNode: boolean = !property.computed + || (property.computed && NodeGuards.isLiteralNode(property.key)); + const memberExpressionProperty: ESTree.Expression = shouldCreateLiteralNode + ? Nodes.getLiteralNode(propertyKeyName) + : Nodes.getIdentifierNode(propertyKeyName); + const memberExpressionNode: ESTree.MemberExpression = Nodes + .getMemberExpressionNode(memberExpressionObject, memberExpressionProperty, true); + const rightExpression: ESTree.Expression = property.value; + const expressionStatementNode: ESTree.ExpressionStatement = Nodes.getExpressionStatementNode( + Nodes.getAssignmentExpressionNode('=', memberExpressionNode, rightExpression) + ); + + /** + * Stage 3: recursively processing nested object expressions + */ + if (NodeGuards.isObjectExpressionNode(property.value)) { + this.transformObjectExpressionNode( + property.value, + memberExpressionNode, + variableDeclarator + ); + } + + /** + * Stage 4: filling arrays + */ + expressionStatements.push(expressionStatementNode); + removablePropertyIds.push(i); + } + + return [expressionStatements, removablePropertyIds]; + } + + /** + * @param {ObjectExpression} objectExpressionNode + * @param {Expression} memberExpressionObjectNode + * @param {VariableDeclarator} variableDeclarator + * @returns {Node} + */ + private transformObjectExpressionNode ( + objectExpressionNode: ESTree.ObjectExpression, + memberExpressionObjectNode: ESTree.Expression, + variableDeclarator: ESTree.VariableDeclarator + ): ESTree.Node { + const properties: ESTree.Property[] = objectExpressionNode.properties; + + if (!properties.length) { + return objectExpressionNode; + } + + const scopeNode: TNodeWithScope | undefined = this.cachedScopeNodesMap.get(variableDeclarator); + + if (!scopeNode) { + return objectExpressionNode; + } + + const [expressionStatements, removablePropertyIds]: [ESTree.ExpressionStatement[], number[]] = this + .extractPropertiesToExpressionStatements(properties, memberExpressionObjectNode, variableDeclarator); + + objectExpressionNode.properties = ObjectExpressionKeysTransformer + .filterObjectExpressionProperties(properties, removablePropertyIds); + ObjectExpressionKeysTransformer + .appendExpressionStatements(scopeNode, expressionStatements, variableDeclarator); + + return objectExpressionNode; + } +} diff --git a/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts b/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts index 6742dd5f..1a672b5e 100644 --- a/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts +++ b/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts @@ -4,19 +4,21 @@ import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; +import { TDeadNodeInjectionCustomNodeFactory } from '../../types/container/custom-nodes/TDeadNodeInjectionCustomNodeFactory'; +import { TNodeWithBlockScope } from '../../types/node/TNodeWithBlockScope'; +import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { ITransformersRunner } from '../../interfaces/node-transformers/ITransformersRunner'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; +import { DeadCodeInjectionCustomNode } from '../../enums/custom-nodes/DeadCodeInjectionCustomNode'; import { NodeTransformer } from '../../enums/node-transformers/NodeTransformer'; import { NodeType } from '../../enums/node/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; import { NodeGuards } from '../../node/NodeGuards'; -import { Nodes } from '../../node/Nodes'; import { NodeUtils } from '../../node/NodeUtils'; @injectable() @@ -53,23 +55,32 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { */ private collectedBlockStatementsLength: number; + /** + * @type {TDeadNodeInjectionCustomNodeFactory} + */ + private readonly deadCodeInjectionCustomNodeFactory: TDeadNodeInjectionCustomNodeFactory; + /** * @type {ITransformersRunner} */ private readonly transformersRunner: ITransformersRunner; /** + * @param {TControlFlowCustomNodeFactory} deadCodeInjectionCustomNodeFactory * @param {ITransformersRunner} transformersRunner * @param {IRandomGenerator} randomGenerator * @param {IOptions} options */ constructor ( + @inject(ServiceIdentifiers.Factory__IDeadCodeInjectionCustomNode) + deadCodeInjectionCustomNodeFactory: TDeadNodeInjectionCustomNodeFactory, @inject(ServiceIdentifiers.ITransformersRunner) transformersRunner: ITransformersRunner, @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(randomGenerator, options); + this.deadCodeInjectionCustomNodeFactory = deadCodeInjectionCustomNodeFactory; this.transformersRunner = transformersRunner; } @@ -112,7 +123,7 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { estraverse.traverse(programNode, { enter: (node: ESTree.Node): any => { if (NodeGuards.isBlockStatementNode(node)) { - this.collectBlockStatementNodes(node, this.collectedBlockStatements); + this.collectBlockStatementNodes(node, this.collectedBlockStatements, parentNode); } } }); @@ -138,7 +149,7 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { return blockStatementNode; } - const blockScopeOfBlockStatementNode: TNodeWithBlockStatement = NodeUtils + const blockScopeOfBlockStatementNode: TNodeWithBlockScope = NodeUtils .getBlockScopesOfNode(blockStatementNode)[0]; if (blockScopeOfBlockStatementNode.type === NodeType.Program) { @@ -154,23 +165,25 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { return blockStatementNode; } - return this.replaceBlockStatementNode(blockStatementNode, randomBlockStatementNode); + return this.replaceBlockStatementNode(blockStatementNode, randomBlockStatementNode, parentNode); } /** * @param {BlockStatement} blockStatementNode * @param {BlockStatement[]} collectedBlockStatements + * @param {Node} parentNode */ private collectBlockStatementNodes ( blockStatementNode: ESTree.BlockStatement, - collectedBlockStatements: ESTree.BlockStatement[] + collectedBlockStatements: ESTree.BlockStatement[], + parentNode: ESTree.Node ): void { let clonedBlockStatementNode: ESTree.BlockStatement = NodeUtils.clone(blockStatementNode), nestedBlockStatementsCount: number = 0, isValidBlockStatementNode: boolean = true; estraverse.replace(clonedBlockStatementNode, { - enter: (node: ESTree.Node, parentNode: ESTree.Node | null): any => { + enter: (node: ESTree.Node): any => { /** * Count nested block statements in current block statement */ @@ -202,6 +215,7 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { /** * We should transform identifiers in the dead code block statement to avoid conflicts with original code */ + NodeUtils.parentizeNode(clonedBlockStatementNode, parentNode); clonedBlockStatementNode = this.transformersRunner.transform( clonedBlockStatementNode, DeadCodeInjectionTransformer.transformersToRenameBlockScopeIdentifiers @@ -213,36 +227,26 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { /** * @param {BlockStatement} blockStatementNode * @param {BlockStatement} randomBlockStatementNode + * @param {Node} parentNode * @returns {BlockStatement} */ private replaceBlockStatementNode ( blockStatementNode: ESTree.BlockStatement, - randomBlockStatementNode: ESTree.BlockStatement + randomBlockStatementNode: ESTree.BlockStatement, + parentNode: ESTree.Node ): ESTree.BlockStatement { - const random1: boolean = this.randomGenerator.getMathRandom() > 0.5; - const random2: boolean = this.randomGenerator.getMathRandom() > 0.5; + const blockStatementDeadCodeInjectionCustomNode: ICustomNode = this.deadCodeInjectionCustomNodeFactory( + DeadCodeInjectionCustomNode.BlockStatementDeadCodeInjectionNode + ); - const operator: ESTree.BinaryOperator = random1 ? '===' : '!=='; - const leftString: string = this.randomGenerator.getRandomString(5); - const rightString: string = random2 ? leftString : this.randomGenerator.getRandomString(5); + blockStatementDeadCodeInjectionCustomNode.initialize( + blockStatementNode, + randomBlockStatementNode + ); - const [consequent, alternate]: [ESTree.BlockStatement, ESTree.BlockStatement] = random1 === random2 - ? [blockStatementNode, randomBlockStatementNode] - : [randomBlockStatementNode, blockStatementNode]; + const newBlockStatementNode: ESTree.BlockStatement = blockStatementDeadCodeInjectionCustomNode.getNode()[0]; - let newBlockStatementNode: ESTree.BlockStatement = Nodes.getBlockStatementNode([ - Nodes.getIfStatementNode( - Nodes.getBinaryExpressionNode( - operator, - Nodes.getLiteralNode(leftString), - Nodes.getLiteralNode(rightString) - ), - consequent, - alternate - ) - ]); - - newBlockStatementNode = NodeUtils.parentize(newBlockStatementNode); + NodeUtils.parentizeNode(newBlockStatementNode, parentNode); return newBlockStatementNode; } diff --git a/src/node-transformers/obfuscating-transformers/ClassDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/ClassDeclarationTransformer.ts index 1be4ce2d..3930eb0f 100644 --- a/src/node-transformers/obfuscating-transformers/ClassDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/ClassDeclarationTransformer.ts @@ -5,7 +5,7 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { TIdentifierObfuscatingReplacerFactory } from "../../types/container/node-transformers/TIdentifierObfuscatingReplacerFactory"; -import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../../types/node/TNodeWithBlockScope'; import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer'; import { IOptions } from '../../interfaces/options/IOptions'; @@ -78,7 +78,7 @@ export class ClassDeclarationTransformer extends AbstractNodeTransformer { */ public transformNode (classDeclarationNode: ESTree.ClassDeclaration, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; - const blockScopeNode: TNodeWithBlockStatement = NodeUtils + const blockScopeNode: TNodeWithBlockScope = NodeUtils .getBlockScopesOfNode(classDeclarationNode)[0]; if (!this.options.renameGlobals && blockScopeNode.type === NodeType.Program) { @@ -106,10 +106,10 @@ export class ClassDeclarationTransformer extends AbstractNodeTransformer { } /** - * @param {TNodeWithBlockStatement} blockScopeNode + * @param {TNodeWithBlockScope} blockScopeNode * @param {number} nodeIdentifier */ - private replaceScopeCachedIdentifiers (blockScopeNode: TNodeWithBlockStatement, nodeIdentifier: number): void { + private replaceScopeCachedIdentifiers (blockScopeNode: TNodeWithBlockScope, nodeIdentifier: number): void { const cachedReplaceableIdentifiers: ESTree.Identifier[] = this.replaceableIdentifiers.get(blockScopeNode); cachedReplaceableIdentifiers.forEach((replaceableIdentifier: ESTree.Identifier) => { @@ -121,10 +121,10 @@ export class ClassDeclarationTransformer extends AbstractNodeTransformer { } /** - * @param {TNodeWithBlockStatement} blockScopeNode + * @param {TNodeWithBlockScope} blockScopeNode * @param {number} nodeIdentifier */ - private replaceScopeIdentifiers (blockScopeNode: TNodeWithBlockStatement, nodeIdentifier: number): void { + private replaceScopeIdentifiers (blockScopeNode: TNodeWithBlockScope, nodeIdentifier: number): void { const storedReplaceableIdentifiers: ESTree.Identifier[] = []; estraverse.replace(blockScopeNode, { diff --git a/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts index d923bd4c..bfc52b42 100644 --- a/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts @@ -5,7 +5,7 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { TIdentifierObfuscatingReplacerFactory } from "../../types/container/node-transformers/TIdentifierObfuscatingReplacerFactory"; -import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../../types/node/TNodeWithBlockScope'; import { TReplaceableIdentifiers } from '../../types/node-transformers/TReplaceableIdentifiers'; import { TReplaceableIdentifiersNames } from '../../types/node-transformers/TReplaceableIdentifiersNames'; @@ -80,7 +80,7 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer { */ public transformNode (functionDeclarationNode: ESTree.FunctionDeclaration, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; - const blockScopeNode: TNodeWithBlockStatement = NodeUtils + const blockScopeNode: TNodeWithBlockScope = NodeUtils .getBlockScopesOfNode(functionDeclarationNode)[0]; if (!this.options.renameGlobals && blockScopeNode.type === NodeType.Program) { @@ -109,12 +109,12 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer { /** * @param {FunctionDeclaration} functionDeclarationNode - * @param {TNodeWithBlockStatement} blockScopeNode + * @param {TNodeWithBlockScope} blockScopeNode * @param {number} nodeIdentifier */ private replaceScopeCachedIdentifiers ( functionDeclarationNode: ESTree.FunctionDeclaration, - blockScopeNode: TNodeWithBlockStatement, + blockScopeNode: TNodeWithBlockScope, nodeIdentifier: number ): void { const cachedReplaceableIdentifiersNamesMap: TReplaceableIdentifiersNames | undefined = this.replaceableIdentifiers.get(blockScopeNode); @@ -142,10 +142,10 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer { } /** - * @param {TNodeWithBlockStatement} blockScopeNode + * @param {TNodeWithBlockScope} blockScopeNode * @param {number} nodeIdentifier */ - private replaceScopeIdentifiers (blockScopeNode: TNodeWithBlockStatement, nodeIdentifier: number): void { + private replaceScopeIdentifiers (blockScopeNode: TNodeWithBlockScope, nodeIdentifier: number): void { const storedReplaceableIdentifiersNamesMap: TReplaceableIdentifiersNames = new Map(); estraverse.replace(blockScopeNode, { diff --git a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts index 134fa9b2..7af3d3d1 100644 --- a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts @@ -5,7 +5,7 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { TIdentifierObfuscatingReplacerFactory } from '../../types/container/node-transformers/TIdentifierObfuscatingReplacerFactory'; -import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../../types/node/TNodeWithBlockScope'; import { TReplaceableIdentifiers } from '../../types/node-transformers/TReplaceableIdentifiers'; import { TReplaceableIdentifiersNames } from '../../types/node-transformers/TReplaceableIdentifiersNames'; @@ -80,7 +80,7 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { * @returns {NodeGuards} */ public transformNode (variableDeclarationNode: ESTree.VariableDeclaration, parentNode: ESTree.Node): ESTree.Node { - const blockScopeNode: TNodeWithBlockStatement = NodeUtils + const blockScopeNode: TNodeWithBlockScope = NodeUtils .getBlockScopesOfNode(variableDeclarationNode)[0]; if (!this.options.renameGlobals && blockScopeNode.type === NodeType.Program) { diff --git a/src/node/NodeAppender.ts b/src/node/NodeAppender.ts index 8af0edaf..5fffcff0 100644 --- a/src/node/NodeAppender.ts +++ b/src/node/NodeAppender.ts @@ -1,61 +1,59 @@ import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from '../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../types/node/TNodeWithBlockScope'; import { TStatement } from '../types/node/TStatement'; import { IStackTraceData } from '../interfaces/analyzers/stack-trace-analyzer/IStackTraceData'; +import { TNodeWithScope } from '../types/node/TNodeWithScope'; +import { NodeGuards } from './NodeGuards'; -/** - * This class appends node into a first deepest BlockStatement in order of function calls - * - * For example: - * - * function Foo () { - * var baz = function () { - * - * } - * - * baz(); - * } - * - * foo(); - * - * Appends node into block statement of `baz` function expression. - */ export class NodeAppender { /** - * @param {TNodeWithBlockStatement} blockScopeNode - * @param {TStatement[]} nodeBodyStatements + * @param {TNodeWithScope} scopeNode + * @param {TStatement[]} scopeStatements */ - public static appendNode ( - blockScopeNode: TNodeWithBlockStatement, - nodeBodyStatements: TStatement[] - ): void { - if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { - nodeBodyStatements = []; + public static appendNode (scopeNode: TNodeWithScope, scopeStatements: TStatement[]): void { + if (!NodeAppender.validateScopeStatements(scopeStatements)) { + scopeStatements = []; } - nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); + scopeStatements = NodeAppender.parentizeScopeStatementsBeforeAppend(scopeNode, scopeStatements); - blockScopeNode.body = [ - ...blockScopeNode.body, - ...nodeBodyStatements - ]; + NodeAppender.setScopeNodeStatements(scopeNode, [ + ...NodeAppender.getScopeNodeStatements(scopeNode), + ...scopeStatements + ]); } /** + * Appends node into a first deepest BlockStatement in order of function calls + * + * For example: + * + * function Foo () { + * var baz = function () { + * + * } + * + * baz(); + * } + * + * foo(); + * + * Appends node into block statement of `baz` function expression + * * @param {IStackTraceData[]} blockScopeStackTraceData - * @param {TNodeWithBlockStatement} blockScopeNode + * @param {TNodeWithBlockScope} blockScopeNode * @param {TStatement[]} nodeBodyStatements * @param {number} index */ public static appendNodeToOptimalBlockScope ( blockScopeStackTraceData: IStackTraceData[], - blockScopeNode: TNodeWithBlockStatement, + blockScopeNode: TNodeWithBlockScope, nodeBodyStatements: TStatement[], index: number = 0 ): void { - let targetBlockScope: TNodeWithBlockStatement; + let targetBlockScope: TNodeWithBlockScope; if (!blockScopeStackTraceData.length) { targetBlockScope = blockScopeNode; @@ -96,70 +94,99 @@ export class NodeAppender { } /** - * @param {TNodeWithBlockStatement} blockScopeNode - * @param {TStatement[]} nodeBodyStatements + * @param {TNodeWithScope} scopeNode + * @param {TStatement[]} scopeStatements + * @param {Node} targetStatement + */ + public static insertNodeAfter (scopeNode: TNodeWithScope, scopeStatements: TStatement[], targetStatement: ESTree.Statement): void { + const indexInScopeStatement: number = NodeAppender + .getScopeNodeStatements(scopeNode) + .indexOf(targetStatement); + + NodeAppender.insertNodeAtIndex(scopeNode, scopeStatements, indexInScopeStatement + 1); + } + + /** + * @param {TNodeWithScope} scopeNode + * @param {TStatement[]} scopeStatements * @param {number} index */ - public static insertNodeAtIndex ( - blockScopeNode: TNodeWithBlockStatement, - nodeBodyStatements: TStatement[], - index: number - ): void { - if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { - nodeBodyStatements = []; + public static insertNodeAtIndex (scopeNode: TNodeWithScope, scopeStatements: TStatement[], index: number): void { + if (!NodeAppender.validateScopeStatements(scopeStatements)) { + scopeStatements = []; } - nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); + scopeStatements = NodeAppender.parentizeScopeStatementsBeforeAppend(scopeNode, scopeStatements); - blockScopeNode.body = [ - ...blockScopeNode.body.slice(0, index), - ...nodeBodyStatements, - ...blockScopeNode.body.slice(index) - ]; + NodeAppender.setScopeNodeStatements(scopeNode, [ + ...NodeAppender.getScopeNodeStatements(scopeNode).slice(0, index), + ...scopeStatements, + ...NodeAppender.getScopeNodeStatements(scopeNode).slice(index) + ]); } /** - * @param {TNodeWithBlockStatement} blockScopeNode - * @param {TStatement[]} nodeBodyStatements + * @param {TNodeWithScope} scopeNode + * @param {TStatement[]} scopeStatements */ - public static prependNode ( - blockScopeNode: TNodeWithBlockStatement, - nodeBodyStatements: TStatement[] - ): void { - if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { - nodeBodyStatements = []; + public static prependNode (scopeNode: TNodeWithScope, scopeStatements: TStatement[]): void { + if (!NodeAppender.validateScopeStatements(scopeStatements)) { + scopeStatements = []; } - nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); + scopeStatements = NodeAppender.parentizeScopeStatementsBeforeAppend(scopeNode, scopeStatements); - blockScopeNode.body = [ - ...nodeBodyStatements, - ...blockScopeNode.body, - ]; + NodeAppender.setScopeNodeStatements(scopeNode, [ + ...scopeStatements, + ...NodeAppender.getScopeNodeStatements(scopeNode), + ]); } /** - * @param {TNodeWithBlockStatement} blockScopeNode - * @param {TStatement[]} nodeBodyStatements + * @param {TNodeWithScope} scopeNode * @returns {TStatement[]} */ - private static parentizeBodyStatementsBeforeAppend ( - blockScopeNode: TNodeWithBlockStatement, - nodeBodyStatements: TStatement[] - ): TStatement[] { - nodeBodyStatements.forEach((statement: TStatement) => { - statement.parentNode = blockScopeNode; - }); + private static getScopeNodeStatements (scopeNode: TNodeWithScope): TStatement[] { + if (NodeGuards.isSwitchCaseNode(scopeNode)) { + return scopeNode.consequent; + } - return nodeBodyStatements; + return scopeNode.body; } /** - * @param {TStatement[]} nodeBodyStatements + * @param {TNodeWithScope} scopeNode + * @param {TStatement[]} scopeStatements + * @returns {TStatement[]} + */ + private static parentizeScopeStatementsBeforeAppend (scopeNode: TNodeWithScope, scopeStatements: TStatement[]): TStatement[] { + scopeStatements.forEach((statement: TStatement) => { + statement.parentNode = scopeNode; + }); + + return scopeStatements; + } + + /** + * @param {TNodeWithScope} scopeNode + * @param {TStatement[]} statements + */ + private static setScopeNodeStatements (scopeNode: TNodeWithScope, statements: TStatement[]): void { + if (NodeGuards.isSwitchCaseNode(scopeNode)) { + scopeNode.consequent = statements; + + return; + } + + scopeNode.body = statements; + } + + /** + * @param {TStatement[]} scopeStatement * @returns {boolean} */ - private static validateBodyStatements (nodeBodyStatements: TStatement[]): boolean { - return nodeBodyStatements.every((statementNode: TStatement) => { + private static validateScopeStatements (scopeStatement: TStatement[]): boolean { + return scopeStatement.every((statementNode: TStatement) => { return !!statementNode && statementNode.hasOwnProperty('type'); }); } diff --git a/src/node/NodeGuards.ts b/src/node/NodeGuards.ts index b22e9702..fdad520a 100644 --- a/src/node/NodeGuards.ts +++ b/src/node/NodeGuards.ts @@ -1,10 +1,29 @@ import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from '../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../types/node/TNodeWithBlockScope'; +import { TNodeWithScope } from '../types/node/TNodeWithScope'; import { NodeType } from '../enums/node/NodeType'; export class NodeGuards { + /** + * @type {string[]} + */ + private static readonly nodesWithBlockScope: string[] = [ + NodeType.ArrowFunctionExpression, + NodeType.FunctionDeclaration, + NodeType.FunctionExpression, + NodeType.MethodDefinition, + ]; + + /** + * @param {Node} node + * @returns {boolean} + */ + public static isArrayPatternNode (node: ESTree.Node): node is ESTree.ArrayPattern { + return node.type === NodeType.ArrayPattern; + } + /** * @param {Node} node * @returns {boolean} @@ -172,10 +191,24 @@ export class NodeGuards { /** * @param {Node} node + * @param {Node} parentNode * @returns {boolean} */ - public static isNodeHasBlockStatement (node: ESTree.Node): node is TNodeWithBlockStatement { - return Array.isArray((node).body); + public static isNodeHasBlockScope (node: ESTree.Node, parentNode: ESTree.Node): node is TNodeWithBlockScope { + return NodeGuards.isProgramNode(node) || ( + NodeGuards.isBlockStatementNode(node) + && NodeGuards.nodesWithBlockScope.includes(parentNode.type) + ); + } + + /** + * @param {Node} node + * @returns {boolean} + */ + public static isNodeHasScope (node: ESTree.Node): node is TNodeWithScope { + return NodeGuards.isProgramNode(node) + || NodeGuards.isBlockStatementNode(node) + || NodeGuards.isSwitchCaseNode(node); } /** @@ -233,7 +266,7 @@ export class NodeGuards { parentNode.key === node; const parentNodeIsMemberExpressionNode: boolean = ( NodeGuards.isMemberExpressionNode(parentNode) && - parentNode.computed === false && + !parentNode.computed && parentNode.property === node ); const parentNodeIsMethodDefinitionNode: boolean = NodeGuards.isMethodDefinitionNode(parentNode) && @@ -246,6 +279,14 @@ export class NodeGuards { !isLabelIdentifierNode; } + /** + * @param {Node} node + * @returns {boolean} + */ + public static isRestElementNode (node: ESTree.Node): node is ESTree.RestElement { + return node.type === NodeType.RestElement; + } + /** * @param {Node} node * @returns {boolean} @@ -262,6 +303,14 @@ export class NodeGuards { return node.type === NodeType.Super; } + /** + * @param {Node} node + * @returns {boolean} + */ + public static isSwitchCaseNode (node: ESTree.Node): node is ESTree.SwitchCase { + return node.type === NodeType.SwitchCase; + } + /** * @param {Node} node * @returns {boolean} diff --git a/src/node/NodeUtils.ts b/src/node/NodeUtils.ts index 76b88743..95e42612 100644 --- a/src/node/NodeUtils.ts +++ b/src/node/NodeUtils.ts @@ -3,26 +3,14 @@ import * as esprima from 'esprima'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from '../types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../types/node/TNodeWithBlockScope'; +import { TNodeWithScope } from '../types/node/TNodeWithScope'; import { TObject } from '../types/TObject'; import { TStatement } from '../types/node/TStatement'; -import { NodeType } from '../enums/node/NodeType'; - import { NodeGuards } from './NodeGuards'; export class NodeUtils { - /** - * @type {string[]} - */ - private static readonly nodesWithBlockScope: string[] = [ - NodeType.ArrowFunctionExpression, - NodeType.FunctionDeclaration, - NodeType.FunctionExpression, - NodeType.MethodDefinition, - NodeType.Program - ]; - /** * @param {T} astTree * @returns {T} @@ -47,45 +35,7 @@ export class NodeUtils { * @returns {T} */ public static clone (astTree: T): T { - /** - * @param {T} node - * @returns {T} - */ - const cloneRecursive: (node: T) => T = (node: T) => { - if (node === null) { - return node; - } - - const copy: TObject = {}; - - Object - .keys(node) - .forEach((property: string): void => { - if (property === 'parentNode') { - return; - } - - const value: any = (node)[property]; - - let clonedValue: any | null; - - if (value === null || value instanceof RegExp) { - clonedValue = value; - } else if (Array.isArray(value)) { - clonedValue = value.map(cloneRecursive); - } else if (typeof value === 'object') { - clonedValue = cloneRecursive(value); - } else { - clonedValue = value; - } - - copy[property] = clonedValue; - }); - - return copy; - }; - - return NodeUtils.parentize(cloneRecursive(astTree)); + return NodeUtils.parentize(NodeUtils.cloneRecursive(astTree)); } /** @@ -114,76 +64,29 @@ export class NodeUtils { } /** - * @param {NodeGuards} node - * @param {number} index - * @returns {NodeGuards} + * @param {Node} targetNode + * @returns {TNodeWithBlockScope[]} */ - public static getBlockStatementNodeByIndex (node: ESTree.Node, index: number = 0): ESTree.Node { - if (!NodeGuards.isNodeHasBlockStatement(node)) { - throw new TypeError('The specified node have no a block-statement'); - } - - if (node.body[index] === undefined) { - throw new ReferenceError(`Wrong index \`${index}\`. Block-statement body length is \`${node.body.length}\``); - } - - return node.body[index]; + public static getBlockScopesOfNode (targetNode: ESTree.Node): TNodeWithBlockScope[] { + return NodeUtils.getBlockScopesOfNodeRecursive(targetNode); } /** * @param {NodeGuards} node - * @param {TNodeWithBlockStatement[]} blockScopes - * @returns {TNodeWithBlockStatement[]} + * @returns {TNodeWithScope} */ - public static getBlockScopesOfNode (node: ESTree.Node, blockScopes: TNodeWithBlockStatement[] = []): TNodeWithBlockStatement[] { + public static getScopeOfNode (node: ESTree.Node): TNodeWithScope { const parentNode: ESTree.Node | undefined = node.parentNode; if (!parentNode) { throw new ReferenceError('`parentNode` property of given node is `undefined`'); } - if (NodeGuards.isBlockStatementNode(parentNode)) { - if (!parentNode.parentNode) { - throw new ReferenceError('`parentNode` property of `parentNode` of given node is `undefined`'); - } - - if (NodeUtils.nodesWithBlockScope.includes(parentNode.parentNode.type)) { - blockScopes.push(parentNode); - } + if (!NodeGuards.isNodeHasScope(parentNode)) { + return NodeUtils.getScopeOfNode(parentNode); } - if (node !== parentNode) { - return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes); - } - - if (NodeGuards.isNodeHasBlockStatement(parentNode)) { - blockScopes.push(parentNode); - } - - return blockScopes; - } - - /** - * @param {NodeGuards} node - * @param {number} depth - * @returns {number} - */ - public static getNodeBlockScopeDepth (node: ESTree.Node, depth: number = 0): number { - const parentNode: ESTree.Node | undefined = node.parentNode; - - if (!parentNode) { - throw new ReferenceError('`parentNode` property of given node is `undefined`'); - } - - if (NodeGuards.isProgramNode(parentNode)) { - return depth; - } - - if (NodeGuards.isBlockStatementNode(node) && NodeUtils.nodesWithBlockScope.includes(parentNode.type)) { - return NodeUtils.getNodeBlockScopeDepth(parentNode, ++depth); - } - - return NodeUtils.getNodeBlockScopeDepth(parentNode, depth); + return parentNode; } /** @@ -203,7 +106,7 @@ export class NodeUtils { * @returns {T} */ public static parentize (astTree: T): T { - estraverse.traverse(astTree, { + estraverse.replace(astTree, { enter: NodeUtils.parentizeNode }); @@ -221,4 +124,80 @@ export class NodeUtils { return node; } + + /** + * @param {T} node + * @returns {T} + */ + private static cloneRecursive (node: T): T { + if (node === null) { + return node; + } + + const copy: TObject = {}; + + Object + .keys(node) + .forEach((property: string): void => { + if (property === 'parentNode') { + return; + } + + const value: any = (node)[property]; + + let clonedValue: any | null; + + if (value === null || value instanceof RegExp) { + clonedValue = value; + } else if (Array.isArray(value)) { + clonedValue = value.map(NodeUtils.cloneRecursive); + } else if (typeof value === 'object') { + clonedValue = NodeUtils.cloneRecursive(value); + } else { + clonedValue = value; + } + + copy[property] = clonedValue; + }); + + return copy; + } + + /** + * @param {Node} node + * @param {TNodeWithBlockScope[]} blockScopes + * @param {number} depth + * @returns {TNodeWithBlockScope[]} + */ + private static getBlockScopesOfNodeRecursive ( + node: ESTree.Node, + blockScopes: TNodeWithBlockScope[] = [], + depth: number = 0 + ): TNodeWithBlockScope[] { + const parentNode: ESTree.Node | undefined = node.parentNode; + + if (!parentNode) { + throw new ReferenceError('`parentNode` property of given node is `undefined`'); + } + + if ( + /** + * we can add program node instantly + */ + NodeGuards.isProgramNode(node) || + /** + * we shouldn't add to the array input node that is node with block scope itself + * so, on depth 0 we will skip push to the array of block scopes + */ + (depth && NodeGuards.isNodeHasBlockScope(node, parentNode)) + ) { + blockScopes.push(node); + } + + if (node !== parentNode) { + return NodeUtils.getBlockScopesOfNodeRecursive(parentNode, blockScopes, ++depth); + } + + return blockScopes; + } } diff --git a/src/node/Nodes.ts b/src/node/Nodes.ts index 79e5e7a7..1527e6af 100644 --- a/src/node/Nodes.ts +++ b/src/node/Nodes.ts @@ -305,6 +305,30 @@ export class Nodes { }; } + /** + * @param {Expression} key + * @param {FunctionExpression} value + * @param {"constructor" | "method" | "get" | "set"} kind + * @param {boolean} computed + * @returns {MethodDefinition} + */ + public static getMethodDefinitionNode ( + key: ESTree.Expression, + value: ESTree.FunctionExpression, + kind: 'constructor' | 'method' | 'get' | 'set', + computed: boolean, + ): ESTree.MethodDefinition { + return { + type: NodeType.MethodDefinition, + key, + value, + kind, + computed, + static: false, + obfuscatedNode: false + }; + } + /** * @param {Property[]} properties * @returns {ObjectExpression} diff --git a/src/options/Options.ts b/src/options/Options.ts index 963c2569..0a9cc3e7 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -206,6 +206,12 @@ export class Options implements IOptions { @IsIn([ObfuscationTarget.Browser, ObfuscationTarget.Extension, ObfuscationTarget.Node]) public readonly target: ObfuscationTarget; + /** + * @type {boolean} + */ + @IsBoolean() + public readonly transformObjectKeys: boolean; + /** * @type {boolean} */ diff --git a/src/options/presets/Default.ts b/src/options/presets/Default.ts index 6b2990f0..d9312848 100644 --- a/src/options/presets/Default.ts +++ b/src/options/presets/Default.ts @@ -30,5 +30,6 @@ export const DEFAULT_PRESET: TInputOptions = Object.freeze({ stringArrayEncoding: false, stringArrayThreshold: 0.75, target: ObfuscationTarget.Browser, + transformObjectKeys: false, unicodeEscapeSequence: false }); diff --git a/src/options/presets/NoCustomNodes.ts b/src/options/presets/NoCustomNodes.ts index d5d6c8b4..182fc7d9 100644 --- a/src/options/presets/NoCustomNodes.ts +++ b/src/options/presets/NoCustomNodes.ts @@ -4,7 +4,7 @@ import { IdentifierNamesGenerator } from '../../enums/generators/identifier-name import { ObfuscationTarget } from '../../enums/ObfuscationTarget'; import { SourceMapMode } from '../../enums/source-map/SourceMapMode'; -export const NO_CUSTOM_NODES_PRESET: TInputOptions = Object.freeze({ +export const NO_ADDITIONAL_NODES_PRESET: TInputOptions = Object.freeze({ compact: true, controlFlowFlattening: false, controlFlowFlatteningThreshold: 0, @@ -29,5 +29,6 @@ export const NO_CUSTOM_NODES_PRESET: TInputOptions = Object.freeze({ stringArrayEncoding: false, stringArrayThreshold: 0, target: ObfuscationTarget.Browser, + transformObjectKeys: false, unicodeEscapeSequence: false }); diff --git a/src/source-map/SourceMapCorrector.ts b/src/source-map/SourceMapCorrector.ts index 1642a9d1..23e76109 100644 --- a/src/source-map/SourceMapCorrector.ts +++ b/src/source-map/SourceMapCorrector.ts @@ -1,8 +1,6 @@ import { inject, injectable } from 'inversify'; import { ServiceIdentifiers } from '../container/ServiceIdentifiers'; -import * as ESTree from 'estree'; - import { TObfuscationResultFactory } from '../types/container/TObfuscationResultFactory'; import { ICryptUtils } from '../interfaces/utils/ICryptUtils'; @@ -45,14 +43,12 @@ export class SourceMapCorrector implements ISourceMapCorrector { } /** - * @param {Program} obfuscatedAst * @param {string} obfuscatedCode * @param {string} sourceMap * @returns {IObfuscationResult} */ - public correct (obfuscatedAst: ESTree.Program, obfuscatedCode: string, sourceMap: string): IObfuscationResult { + public correct (obfuscatedCode: string, sourceMap: string): IObfuscationResult { return this.obfuscationResultFactory( - obfuscatedAst, this.correctObfuscatedCode(obfuscatedCode, sourceMap), sourceMap ); diff --git a/src/types/container/TObfuscationResultFactory.d.ts b/src/types/container/TObfuscationResultFactory.d.ts index c1409917..4acf9d5f 100644 --- a/src/types/container/TObfuscationResultFactory.d.ts +++ b/src/types/container/TObfuscationResultFactory.d.ts @@ -1,5 +1,3 @@ -import * as ESTree from 'estree'; - import { IObfuscationResult } from '../../interfaces/IObfuscationResult'; -export type TObfuscationResultFactory = (obfuscatedAst: ESTree.Program, obfuscatedCode: string, sourceMap: string) => IObfuscationResult; +export type TObfuscationResultFactory = (obfuscatedCode: string, sourceMap: string) => IObfuscationResult; diff --git a/src/types/container/custom-nodes/TDeadNodeInjectionCustomNodeFactory.d.ts b/src/types/container/custom-nodes/TDeadNodeInjectionCustomNodeFactory.d.ts new file mode 100644 index 00000000..b2b06cf9 --- /dev/null +++ b/src/types/container/custom-nodes/TDeadNodeInjectionCustomNodeFactory.d.ts @@ -0,0 +1,5 @@ +import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; + +import { DeadCodeInjectionCustomNode } from '../../../enums/custom-nodes/DeadCodeInjectionCustomNode'; + +export type TDeadNodeInjectionCustomNodeFactory = (deadCodeInjectionCustomNodeName: DeadCodeInjectionCustomNode) => ICustomNode; diff --git a/src/types/node/TNodeWithBlockScope.d.ts b/src/types/node/TNodeWithBlockScope.d.ts new file mode 100644 index 00000000..273b2796 --- /dev/null +++ b/src/types/node/TNodeWithBlockScope.d.ts @@ -0,0 +1,3 @@ +import * as ESTree from 'estree'; + +export type TNodeWithBlockScope = ESTree.Program | ESTree.BlockStatement; diff --git a/src/types/node/TNodeWithBlockStatement.d.ts b/src/types/node/TNodeWithBlockStatement.d.ts deleted file mode 100644 index 82266bac..00000000 --- a/src/types/node/TNodeWithBlockStatement.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as ESTree from 'estree'; - -export type TNodeWithBlockStatement = ESTree.BlockStatement | ESTree.Program; diff --git a/src/types/node/TNodeWithScope.d.ts b/src/types/node/TNodeWithScope.d.ts new file mode 100644 index 00000000..491b4c94 --- /dev/null +++ b/src/types/node/TNodeWithScope.d.ts @@ -0,0 +1,3 @@ +import * as ESTree from 'estree'; + +export type TNodeWithScope = ESTree.Program | ESTree.BlockStatement | ESTree.SwitchCase; diff --git a/test/dev/dev.ts b/test/dev/dev.ts index d5bbb8b9..f4ed799e 100644 --- a/test/dev/dev.ts +++ b/test/dev/dev.ts @@ -1,5 +1,5 @@ 'use strict'; -import { NO_CUSTOM_NODES_PRESET } from '../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../src/options/presets/NoCustomNodes'; (function () { const JavaScriptObfuscator: any = require('../../index'); @@ -8,15 +8,18 @@ import { NO_CUSTOM_NODES_PRESET } from '../../src/options/presets/NoCustomNodes' ` (function(){ function foo (bar) { - eval('console.log(bar);'); + eval('console.log(bar, \\'baz\\');'); + console.log(eval('bar; console.log(\\'bark\\')')); } foo(1); })(); `, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, compact: false, + stringArray: true, + stringArrayThreshold: 1 } ).getObfuscatedCode(); diff --git a/test/functional-tests/analyzers/stack-trace-analyzer/StackTraceAnalyzer.spec.ts b/test/functional-tests/analyzers/stack-trace-analyzer/StackTraceAnalyzer.spec.ts index 714df8b3..5ebdd5ad 100644 --- a/test/functional-tests/analyzers/stack-trace-analyzer/StackTraceAnalyzer.spec.ts +++ b/test/functional-tests/analyzers/stack-trace-analyzer/StackTraceAnalyzer.spec.ts @@ -7,7 +7,7 @@ import * as ESTree from 'estree'; import { assert } from 'chai'; -import { TNodeWithBlockStatement } from '../../../../src/types/node/TNodeWithBlockStatement'; +import { TNodeWithBlockScope } from '../../../../src/types/node/TNodeWithBlockScope'; import { IInversifyContainerFacade } from '../../../../src/interfaces/container/IInversifyContainerFacade'; import { IStackTraceAnalyzer } from '../../../../src/interfaces/analyzers/stack-trace-analyzer/IStackTraceAnalyzer'; @@ -165,7 +165,7 @@ describe('StackTraceAnalyzer', () => { describe('variant #1: basic-1', () => { before(() => { const code: string = readFileAsString(__dirname + '/fixtures/basic-1.js'); - const astTree: TNodeWithBlockStatement = Nodes.getProgramNode( + const astTree: TNodeWithBlockScope = Nodes.getProgramNode( NodeUtils.convertCodeToStructure(code) ); @@ -215,7 +215,7 @@ describe('StackTraceAnalyzer', () => { describe('variant #2: basic-2', () => { before(() => { const code: string = readFileAsString(__dirname + '/fixtures/basic-2.js'); - const astTree: TNodeWithBlockStatement = Nodes.getProgramNode( + const astTree: TNodeWithBlockScope = Nodes.getProgramNode( NodeUtils.convertCodeToStructure(code) ); @@ -254,7 +254,7 @@ describe('StackTraceAnalyzer', () => { describe('variant #3: deep conditions nesting', () => { before(() => { const code: string = readFileAsString(__dirname + '/fixtures/deep-conditions-nesting.js'); - const astTree: TNodeWithBlockStatement = Nodes.getProgramNode( + const astTree: TNodeWithBlockScope = Nodes.getProgramNode( NodeUtils.convertCodeToStructure(code) ); @@ -293,7 +293,7 @@ describe('StackTraceAnalyzer', () => { describe('variant #4: call before declaration', () => { before(() => { const code: string = readFileAsString(__dirname + '/fixtures/call-before-declaration.js'); - const astTree: TNodeWithBlockStatement = Nodes.getProgramNode( + const astTree: TNodeWithBlockScope = Nodes.getProgramNode( NodeUtils.convertCodeToStructure(code) ); @@ -316,7 +316,7 @@ describe('StackTraceAnalyzer', () => { describe('variant #5: call expression of object member #1', () => { before(() => { const code: string = readFileAsString(__dirname + '/fixtures/call-expression-of-object-member-1.js'); - const astTree: TNodeWithBlockStatement = Nodes.getProgramNode( + const astTree: TNodeWithBlockScope = Nodes.getProgramNode( NodeUtils.convertCodeToStructure(code) ); @@ -375,7 +375,7 @@ describe('StackTraceAnalyzer', () => { describe('variant #5: call expression of object member #2', () => { before(() => { const code: string = readFileAsString(__dirname + '/fixtures/call-expression-of-object-member-2.js'); - const astTree: TNodeWithBlockStatement = Nodes.getProgramNode( + const astTree: TNodeWithBlockScope = Nodes.getProgramNode( NodeUtils.convertCodeToStructure(code) ); @@ -403,7 +403,7 @@ describe('StackTraceAnalyzer', () => { describe('variant #6: no call expressions', () => { before(() => { const code: string = readFileAsString(__dirname + '/fixtures/no-call-expressions.js'); - const astTree: TNodeWithBlockStatement = Nodes.getProgramNode( + const astTree: TNodeWithBlockScope = Nodes.getProgramNode( NodeUtils.convertCodeToStructure(code) ); @@ -420,7 +420,7 @@ describe('StackTraceAnalyzer', () => { describe('variant #7: only call expression', () => { before(() => { const code: string = readFileAsString(__dirname + '/fixtures/only-call-expression.js'); - const astTree: TNodeWithBlockStatement = Nodes.getProgramNode( + const astTree: TNodeWithBlockScope = Nodes.getProgramNode( NodeUtils.convertCodeToStructure(code) ); @@ -437,7 +437,7 @@ describe('StackTraceAnalyzer', () => { describe('variant #8: self-invoking functions', () => { before(() => { const code: string = readFileAsString(__dirname + '/fixtures/self-invoking-functions.js'); - const astTree: TNodeWithBlockStatement = Nodes.getProgramNode( + const astTree: TNodeWithBlockScope = Nodes.getProgramNode( NodeUtils.convertCodeToStructure(code) ); @@ -472,7 +472,7 @@ describe('StackTraceAnalyzer', () => { describe('variant #9: no recursion', () => { before(() => { const code: string = readFileAsString(__dirname + '/fixtures/no-recursion.js'); - const astTree: TNodeWithBlockStatement = Nodes.getProgramNode( + const astTree: TNodeWithBlockScope = Nodes.getProgramNode( NodeUtils.convertCodeToStructure(code) ); 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 a7d3d5ec..a563684d 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/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../helpers/readFileAsString'; @@ -21,7 +21,7 @@ describe('ConsoleOutputDisableExpressionNode', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, disableConsoleOutput: true } ); @@ -50,7 +50,7 @@ describe('ConsoleOutputDisableExpressionNode', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, disableConsoleOutput: false } ); 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 007df024..54d07797 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/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../helpers/readFileAsString'; @@ -19,7 +19,7 @@ describe('DomainLockNode', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, domainLock: ['.example.com'] } ); @@ -40,7 +40,7 @@ describe('DomainLockNode', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, domainLock: [] } ); 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 86789093..db895e3a 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/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../helpers/readFileAsString'; @@ -20,7 +20,7 @@ describe('StringArrayCallsWrapper', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -43,7 +43,7 @@ describe('StringArrayCallsWrapper', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: false } ); 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 8a4df36f..4b6b7ed7 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/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../helpers/readFileAsString'; @@ -20,7 +20,7 @@ describe('StringArrayNode', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -43,7 +43,7 @@ describe('StringArrayNode', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: false } ); 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 9ea7e475..2d986dea 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/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../helpers/readFileAsString'; @@ -20,7 +20,7 @@ describe('StringArrayRotateFunctionNode', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, rotateStringArray: true, stringArray: true, stringArrayThreshold: 1 @@ -44,7 +44,7 @@ describe('StringArrayRotateFunctionNode', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, rotateStringArray: false, stringArray: true, stringArrayThreshold: 1 diff --git a/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts b/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts index 42f42773..c194cc07 100644 --- a/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts +++ b/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts @@ -7,7 +7,7 @@ import { StringArrayEncoding } from '../../../src/enums/StringArrayEncoding'; import { JavaScriptObfuscator } from '../../../src/JavaScriptObfuscatorFacade'; -import { NO_CUSTOM_NODES_PRESET } from '../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../src/options/presets/NoCustomNodes'; import { IdentifierNamesGenerator } from '../../../src/enums/generators/identifier-names-generators/IdentifierNamesGenerator'; @@ -26,7 +26,7 @@ describe('JavaScriptObfuscator', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -91,7 +91,7 @@ describe('JavaScriptObfuscator', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, sourceMap: true } ); @@ -120,7 +120,7 @@ describe('JavaScriptObfuscator', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, sourceMap: true, sourceMapMode: SourceMapMode.Inline } @@ -195,7 +195,7 @@ describe('JavaScriptObfuscator', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -217,7 +217,7 @@ describe('JavaScriptObfuscator', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -240,7 +240,7 @@ describe('JavaScriptObfuscator', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -269,7 +269,7 @@ describe('JavaScriptObfuscator', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -438,7 +438,7 @@ describe('JavaScriptObfuscator', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -494,6 +494,7 @@ describe('JavaScriptObfuscator', () => { stringArray: true, stringArrayEncoding: StringArrayEncoding.Rc4, stringArrayThreshold: 1, + transformObjectKeys: true, unicodeEscapeSequence: false } ); diff --git a/test/functional-tests/node-transformers/control-flow-transformers/block-statement-control-flow-transformer/BlockStatementControlFlowTransformer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/block-statement-control-flow-transformer/BlockStatementControlFlowTransformer.spec.ts index 073227a0..087a9490 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/block-statement-control-flow-transformer/BlockStatementControlFlowTransformer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/block-statement-control-flow-transformer/BlockStatementControlFlowTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { getRegExpMatch } from '../../../../helpers/getRegExpMatch'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -29,13 +29,14 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } ); obfuscatedCode = obfuscationResult.getObfuscatedCode(); + console.log(obfuscatedCode); }); describe('`console.log` statements', ()=> { @@ -117,7 +118,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1, unicodeEscapeSequence: false @@ -208,7 +209,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -232,7 +233,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -256,7 +257,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -280,7 +281,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -304,7 +305,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -331,7 +332,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -360,7 +361,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -384,7 +385,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -411,7 +412,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -440,7 +441,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -471,7 +472,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code.repeat(samples), { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: controlFlowFlatteningThreshold, } @@ -513,7 +514,7 @@ describe('BlockStatementControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts index 28651770..49fbd963 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../../helpers/readFileAsString'; @@ -22,7 +22,7 @@ describe('BinaryExpressionControlFlowReplacer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -64,7 +64,7 @@ describe('BinaryExpressionControlFlowReplacer', function () { obfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts index a707e34b..a0ed9eec 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../../helpers/readFileAsString'; @@ -22,7 +22,7 @@ describe('CallExpressionControlFlowReplacer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -64,7 +64,7 @@ describe('CallExpressionControlFlowReplacer', function () { obfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -111,7 +111,7 @@ describe('CallExpressionControlFlowReplacer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts index 12dc5a5d..18f1c05f 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../../helpers/readFileAsString'; @@ -22,7 +22,7 @@ describe('LogicalExpressionControlFlowReplacer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -64,7 +64,7 @@ describe('LogicalExpressionControlFlowReplacer', function () { obfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -111,7 +111,7 @@ describe('LogicalExpressionControlFlowReplacer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -135,7 +135,7 @@ describe('LogicalExpressionControlFlowReplacer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: .1 } diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts index 2efdabd3..c820ce1a 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../../helpers/readFileAsString'; @@ -20,7 +20,7 @@ describe('StringLiteralControlFlowReplacer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } diff --git a/test/functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec.ts index 85d2a848..6ca4172d 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -38,7 +38,7 @@ describe('FunctionControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -80,7 +80,7 @@ describe('FunctionControlFlowTransformer', function () { obfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -123,7 +123,7 @@ describe('FunctionControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -147,7 +147,7 @@ describe('FunctionControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -182,7 +182,7 @@ describe('FunctionControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -211,7 +211,7 @@ describe('FunctionControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 0 } @@ -240,7 +240,7 @@ describe('FunctionControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } @@ -264,7 +264,7 @@ describe('FunctionControlFlowTransformer', function () { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } diff --git a/test/functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec.ts b/test/functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec.ts index 44cd63b6..058de33a 100644 --- a/test/functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -20,7 +20,7 @@ describe('MemberExpressionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -43,7 +43,7 @@ describe('MemberExpressionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -74,7 +74,7 @@ describe('MemberExpressionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -102,7 +102,7 @@ describe('MemberExpressionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); diff --git a/test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec.ts b/test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec.ts index a8459ba7..61f82f85 100644 --- a/test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -19,7 +19,7 @@ describe('MethodDefinitionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -42,7 +42,7 @@ describe('MethodDefinitionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -70,7 +70,7 @@ describe('MethodDefinitionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts new file mode 100644 index 00000000..782f3b07 --- /dev/null +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts @@ -0,0 +1,319 @@ +import { assert } from 'chai'; + +import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; + +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; + +import { readFileAsString } from '../../../../helpers/readFileAsString'; + +import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFacade'; + +describe('ObjectExpressionKeysTransformer', () => { + const variableMatch: string = '_0x([a-f0-9]){4,6}'; + + describe('transformation of object keys', () => { + describe('variant #1: simple', () => { + const match: string = `` + + `var *${variableMatch} *= *{};` + + `${variableMatch}\\['foo'] *= *'bar';` + + `${variableMatch}\\['baz'] *= *'bark';` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/simple.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + transformObjectKeys: true + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('should correctly transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); + + describe('variant #2: nested objects #1', () => { + const match: string = `` + + `var *${variableMatch} *= *{};` + + `${variableMatch}\\['foo'] *= *'bar';` + + `${variableMatch}\\['inner'] *= *{};` + + `${variableMatch}\\['inner']\\['inner1'] *= *{};` + + `${variableMatch}\\['inner']\\['inner1']\\['baz'] *= *'bark';` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/nested-objects-1.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + transformObjectKeys: true + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('should correctly transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); + + describe('variant #3: nested objects #2', () => { + const match: string = `` + + `var *${variableMatch} *= *{};` + + `${variableMatch}\\['foo'] *= *'bar';` + + `${variableMatch}\\['inner'] *= *{};` + + `${variableMatch}\\['ball'] *= *'door';` + + `${variableMatch}\\['inner']\\['baz'] *= *'bark';` + + `${variableMatch}\\['inner']\\['inner1'] *= *{};` + + `${variableMatch}\\['inner']\\['cow'] *= *'bear';` + + `${variableMatch}\\['inner']\\['inner1']\\['hawk'] *= *'geek';` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/nested-objects-2.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + transformObjectKeys: true + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('should correctly transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); + + describe('variant #4: correct integration with control flow flattening object', () => { + const match: string = `` + + `var *${variableMatch} *= *{};` + + `${variableMatch}\\['\\w{5}'] *= *function *${variableMatch} *\\(${variableMatch}, *${variableMatch}\\) *{` + + `return *${variableMatch} *\\+ *${variableMatch};` + + `};` + + `var *${variableMatch} *= *${variableMatch}\\['\\w{5}']\\(0x1, *0x2\\);` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/integration-with-control-flow-flattening.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1, + transformObjectKeys: true + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('should correctly transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); + }); + + describe('correct placement of expression statements', () => { + describe('variant #1: if statement', () => { + const match: string = `` + + `if *\\(!!\\[]\\) *{` + + `var *${variableMatch} *= *{};` + + `${variableMatch}\\['foo'] *= *'bar';` + + `}` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/placement-inside-if-statement.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + transformObjectKeys: true + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('should correctly transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); + + describe('variant #2: try statement', () => { + const match: string = `` + + `try *{` + + `var *${variableMatch} *= *{};` + + `${variableMatch}\\['foo'] *= *'bar';` + + `} *catch *\\(${variableMatch}\\) *{` + + `}` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/placement-inside-try-statement.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + transformObjectKeys: true + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('should correctly transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); + + describe('variant #3: catch clause statement', () => { + const match: string = `` + + `try *{` + + `} *catch *\\(${variableMatch}\\) *{` + + `var *${variableMatch} *= *{};` + + `${variableMatch}\\['foo'] *= *'bar';` + + `}` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/placement-inside-catch-clause.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + transformObjectKeys: true + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('should correctly transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); + + describe('variant #4: switch catch statement', () => { + const match: string = `` + + `switch *\\(!!\\[]\\) *{` + + `case *!!\\[]:` + + `var *${variableMatch} *= *{};` + + `${variableMatch}\\['foo'] *= *'bar';` + + `}` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/placement-inside-switch-case.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + transformObjectKeys: true + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('should transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); + }); + + describe('Ignore transformation', () => { + describe('variant #1: disabled option', () => { + const match: string = `` + + `var *${variableMatch} *= *{` + + `'foo': *'bar',` + + `'baz': *'bark'` + + `}` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/simple.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('shouldn\'t transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); + + describe('variant #2: variable declaration without initialization', () => { + const match: string = `` + + `var *${variableMatch};` + + `${variableMatch} *= *{` + + `'foo': *'bar',` + + `'baz': *'bark'` + + `}` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/variable-declaration-without-initialization.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + transformObjectKeys: true + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('shouldn\'t transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); + }); +}); diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/integration-with-control-flow-flattening.js b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/integration-with-control-flow-flattening.js new file mode 100644 index 00000000..07b7b01f --- /dev/null +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/integration-with-control-flow-flattening.js @@ -0,0 +1,3 @@ +(function () { + var variable = 1 + 2; +})(); \ No newline at end of file diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/nested-objects-1.js b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/nested-objects-1.js new file mode 100644 index 00000000..fbff3baa --- /dev/null +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/nested-objects-1.js @@ -0,0 +1,10 @@ +(function(){ + var object = { + foo: 'bar', + inner: { + inner1: { + baz: 'bark' + } + } + }; +})(); \ No newline at end of file diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/nested-objects-2.js b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/nested-objects-2.js new file mode 100644 index 00000000..c9021813 --- /dev/null +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/nested-objects-2.js @@ -0,0 +1,14 @@ +(function(){ + var object = { + foo: 'bar', + inner: { + baz: 'bark', + inner1: { + hawk: 'geek' + }, + cow: 'bear', + + }, + ball: 'door', + }; +})(); \ No newline at end of file diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-catch-clause.js b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-catch-clause.js new file mode 100644 index 00000000..095ae1f2 --- /dev/null +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-catch-clause.js @@ -0,0 +1,8 @@ +(function(){ + try { + } catch (e) { + var object = { + foo: 'bar' + }; + } +})(); \ No newline at end of file diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-if-statement.js b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-if-statement.js new file mode 100644 index 00000000..7ca7c9bf --- /dev/null +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-if-statement.js @@ -0,0 +1,7 @@ +(function(){ + if (true) { + var object = { + foo: 'bar' + }; + } +})(); \ No newline at end of file diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-switch-case.js b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-switch-case.js new file mode 100644 index 00000000..1a8345c8 --- /dev/null +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-switch-case.js @@ -0,0 +1,8 @@ +(function(){ + switch (true) { + case true: + var object = { + foo: 'bar' + }; + } +})(); \ No newline at end of file diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-try-statement.js b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-try-statement.js new file mode 100644 index 00000000..deb30782 --- /dev/null +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/placement-inside-try-statement.js @@ -0,0 +1,7 @@ +(function(){ + try { + var object = { + foo: 'bar' + }; + } catch (e) {} +})(); \ No newline at end of file diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/simple.js b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/simple.js new file mode 100644 index 00000000..1e939b42 --- /dev/null +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/simple.js @@ -0,0 +1,6 @@ +(function(){ + var object = { + foo: 'bar', + baz: 'bark' + }; +})(); \ No newline at end of file diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/variable-declaration-without-initialization.js b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/variable-declaration-without-initialization.js new file mode 100644 index 00000000..515c6f5b --- /dev/null +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/variable-declaration-without-initialization.js @@ -0,0 +1,7 @@ +(function(){ + var object; + object = { + foo: 'bar', + baz: 'bark' + }; +})(); \ No newline at end of file diff --git a/test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec.ts b/test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec.ts index 223b3cba..a254ddc1 100644 --- a/test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec.ts +++ b/test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -15,7 +15,7 @@ describe('TemplateLiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, unicodeEscapeSequence: false } ); @@ -30,7 +30,7 @@ describe('TemplateLiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, unicodeEscapeSequence: false } ); @@ -45,7 +45,7 @@ describe('TemplateLiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, unicodeEscapeSequence: false } ); @@ -60,7 +60,7 @@ describe('TemplateLiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, unicodeEscapeSequence: false } ); diff --git a/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts b/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts index 5067b6d4..ce1a5fc1 100644 --- a/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../helpers/readFileAsString'; @@ -33,7 +33,7 @@ describe('DeadCodeInjectionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, deadCodeInjection: true, deadCodeInjectionThreshold: 1, stringArray: true, @@ -69,7 +69,7 @@ describe('DeadCodeInjectionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, deadCodeInjection: true, deadCodeInjectionThreshold: 1, stringArray: true, @@ -105,7 +105,7 @@ describe('DeadCodeInjectionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, deadCodeInjection: true, deadCodeInjectionThreshold: 0, stringArray: true, @@ -149,7 +149,7 @@ describe('DeadCodeInjectionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, deadCodeInjection: true, deadCodeInjectionThreshold: 1, stringArray: true, @@ -200,7 +200,7 @@ describe('DeadCodeInjectionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, deadCodeInjection: true, deadCodeInjectionThreshold: 1, stringArray: true, @@ -251,7 +251,7 @@ describe('DeadCodeInjectionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, deadCodeInjection: true, deadCodeInjectionThreshold: 1, stringArray: true, @@ -339,7 +339,7 @@ describe('DeadCodeInjectionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, deadCodeInjection: true, deadCodeInjectionThreshold: 1, stringArray: true, @@ -396,7 +396,7 @@ describe('DeadCodeInjectionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1, deadCodeInjection: true, @@ -422,7 +422,7 @@ describe('DeadCodeInjectionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, deadCodeInjection: true, deadCodeInjectionThreshold: 1, debugProtection: true diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/catch-clause-transformer/CatchClauseTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/catch-clause-transformer/CatchClauseTransformer.spec.ts index 8bed91a1..50e41f14 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/catch-clause-transformer/CatchClauseTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/catch-clause-transformer/CatchClauseTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { getRegExpMatch } from '../../../../helpers/getRegExpMatch'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -24,7 +24,7 @@ describe('CatchClauseTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -55,7 +55,7 @@ describe('CatchClauseTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/class-declaration-transformer/ClassDeclarationTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/class-declaration-transformer/ClassDeclarationTransformer.spec.ts index 4b0b1887..962df243 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/class-declaration-transformer/ClassDeclarationTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/class-declaration-transformer/ClassDeclarationTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { getRegExpMatch } from '../../../../helpers/getRegExpMatch'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -24,7 +24,7 @@ describe('ClassDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -50,7 +50,7 @@ describe('ClassDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -77,7 +77,7 @@ describe('ClassDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, renameGlobals: true } ); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/function-declaration-transformer/FunctionDeclarationTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/function-declaration-transformer/FunctionDeclarationTransformer.spec.ts index 5c3e07f7..b4c92013 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/function-declaration-transformer/FunctionDeclarationTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/function-declaration-transformer/FunctionDeclarationTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { getRegExpMatch } from '../../../../helpers/getRegExpMatch'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -24,7 +24,7 @@ describe('FunctionDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -50,7 +50,7 @@ describe('FunctionDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -77,7 +77,7 @@ describe('FunctionDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, renameGlobals: true } ); @@ -108,7 +108,7 @@ describe('FunctionDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -135,7 +135,7 @@ describe('FunctionDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts index 38816c8d..47b9df11 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -24,7 +24,7 @@ describe('FunctionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -60,7 +60,7 @@ describe('FunctionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -87,7 +87,7 @@ describe('FunctionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -116,7 +116,7 @@ describe('FunctionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -148,7 +148,7 @@ describe('FunctionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -198,7 +198,7 @@ describe('FunctionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -265,7 +265,7 @@ describe('FunctionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/labeled-statement-transformer/LabeledStatementTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/labeled-statement-transformer/LabeledStatementTransformer.spec.ts index ba3b2628..b2361562 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/labeled-statement-transformer/LabeledStatementTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/labeled-statement-transformer/LabeledStatementTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { getRegExpMatch } from '../../../../helpers/getRegExpMatch'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -25,7 +25,7 @@ describe('LabeledStatementTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts index 421165b4..bb436037 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts @@ -5,7 +5,7 @@ import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationRe import { IdentifierNamesGenerator } from '../../../../../src/enums/generators/identifier-names-generators/IdentifierNamesGenerator'; import { StringArrayEncoding } from '../../../../../src/enums/StringArrayEncoding'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -24,7 +24,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -52,7 +52,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -73,7 +73,7 @@ describe('LiteralTransformer', () => { testFunc = () => JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -96,7 +96,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -124,7 +124,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, unicodeEscapeSequence: true } @@ -149,7 +149,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1, unicodeEscapeSequence: true @@ -178,7 +178,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -203,7 +203,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayEncoding: StringArrayEncoding.Base64, stringArrayThreshold: 1 @@ -232,7 +232,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayEncoding: StringArrayEncoding.Rc4, stringArrayThreshold: 1 @@ -263,7 +263,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `${code}\n`.repeat(samples), { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: stringArrayThreshold } @@ -301,7 +301,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1, identifierNamesGenerator: IdentifierNamesGenerator.MangledIdentifierNamesGenerator @@ -327,7 +327,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -351,7 +351,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } @@ -375,7 +375,7 @@ describe('LiteralTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts index 06ab9acd..353a5919 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -19,7 +19,7 @@ describe('ObjectExpressionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -41,7 +41,7 @@ describe('ObjectExpressionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -63,7 +63,7 @@ describe('ObjectExpressionTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts index b21d1fa4..88bfc03d 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { getRegExpMatch } from '../../../../helpers/getRegExpMatch'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -21,7 +21,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -49,7 +49,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -76,7 +76,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, renameGlobals: true } ); @@ -104,7 +104,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -126,7 +126,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -149,7 +149,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -183,7 +183,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); @@ -238,7 +238,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); @@ -286,7 +286,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -308,7 +308,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -332,7 +332,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -363,7 +363,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -402,7 +402,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -424,7 +424,7 @@ describe('VariableDeclarationTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); diff --git a/test/functional-tests/node-transformers/preparing-transformers/comments-transformer/CommentsTransformer.spec.ts b/test/functional-tests/node-transformers/preparing-transformers/comments-transformer/CommentsTransformer.spec.ts index acc92b87..224b2bdd 100644 --- a/test/functional-tests/node-transformers/preparing-transformers/comments-transformer/CommentsTransformer.spec.ts +++ b/test/functional-tests/node-transformers/preparing-transformers/comments-transformer/CommentsTransformer.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../helpers/readFileAsString'; @@ -19,7 +19,7 @@ describe('CommentsTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -41,7 +41,7 @@ describe('CommentsTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -63,7 +63,7 @@ describe('CommentsTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -92,7 +92,7 @@ describe('CommentsTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -112,7 +112,7 @@ describe('CommentsTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -134,7 +134,7 @@ describe('CommentsTransformer', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); diff --git a/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/black-list-obfuscating-guard/BlackListObfuscatingGuard.spec.ts b/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/black-list-obfuscating-guard/BlackListObfuscatingGuard.spec.ts index e88e21de..a472bcc0 100644 --- a/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/black-list-obfuscating-guard/BlackListObfuscatingGuard.spec.ts +++ b/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/black-list-obfuscating-guard/BlackListObfuscatingGuard.spec.ts @@ -4,7 +4,7 @@ import { IObfuscationResult } from '../../../../../../src/interfaces/IObfuscatio import { JavaScriptObfuscator } from '../../../../../../src/JavaScriptObfuscatorFacade'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../../helpers/readFileAsString'; @@ -22,7 +22,7 @@ describe('BlackListObfuscatingGuard', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, stringArray: true, stringArrayThreshold: 1 } diff --git a/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/conditional-comment-obfuscating-guard/ConditionalCommentObfuscatingGuard.spec.ts b/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/conditional-comment-obfuscating-guard/ConditionalCommentObfuscatingGuard.spec.ts index bef94271..7d1e1ed3 100644 --- a/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/conditional-comment-obfuscating-guard/ConditionalCommentObfuscatingGuard.spec.ts +++ b/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/conditional-comment-obfuscating-guard/ConditionalCommentObfuscatingGuard.spec.ts @@ -4,7 +4,7 @@ import { IObfuscationResult } from '../../../../../../src/interfaces/IObfuscatio import { JavaScriptObfuscator } from '../../../../../../src/JavaScriptObfuscatorFacade'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../../helpers/readFileAsString'; @@ -22,7 +22,7 @@ describe('ConditionalCommentObfuscatingGuard', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -54,7 +54,7 @@ describe('ConditionalCommentObfuscatingGuard', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -85,7 +85,7 @@ describe('ConditionalCommentObfuscatingGuard', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET + ...NO_ADDITIONAL_NODES_PRESET } ); @@ -123,7 +123,7 @@ describe('ConditionalCommentObfuscatingGuard', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, deadCodeInjection: true, deadCodeInjectionThreshold: 1 } @@ -183,7 +183,7 @@ describe('ConditionalCommentObfuscatingGuard', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, controlFlowFlattening: true, controlFlowFlatteningThreshold: 1 } diff --git a/test/functional-tests/templates/custom-nodes/debug-protection-nodes/DebufProtectionFunctionCallTemplate.spec.ts b/test/functional-tests/templates/custom-nodes/debug-protection-nodes/DebufProtectionFunctionCallTemplate.spec.ts index a75c17e3..e7ea6a66 100644 --- a/test/functional-tests/templates/custom-nodes/debug-protection-nodes/DebufProtectionFunctionCallTemplate.spec.ts +++ b/test/functional-tests/templates/custom-nodes/debug-protection-nodes/DebufProtectionFunctionCallTemplate.spec.ts @@ -5,7 +5,7 @@ import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationRe import { readFileAsString } from '../../../../helpers/readFileAsString'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFacade'; @@ -40,7 +40,7 @@ describe('DebugProtectionFunctionCallTemplate (): string', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, debugProtection: true } ); @@ -75,7 +75,7 @@ describe('DebugProtectionFunctionCallTemplate (): string', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, debugProtection: true, mangle: true } @@ -111,7 +111,7 @@ describe('DebugProtectionFunctionCallTemplate (): string', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, debugProtection: true } ); @@ -147,7 +147,7 @@ describe('DebugProtectionFunctionCallTemplate (): string', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( code, { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, debugProtection: true } ); diff --git a/test/index.spec.ts b/test/index.spec.ts index e21fcc74..f488ba7e 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -20,6 +20,7 @@ import './unit-tests/generators/identifier-names-generators/MangledlIdentifierNa import './unit-tests/javascript-obfuscator/JavaScriptObfuscator.spec'; import './unit-tests/logger/Logger.spec'; import './unit-tests/node/node-appender/NodeAppender.spec'; +import './unit-tests/node/node-guards/NodeGuards.spec'; import './unit-tests/node/node-utils/NodeUtils.spec'; import './unit-tests/node-transformers/preparing-transformers/ObfuscatingGuardsTransformer.spec'; import './unit-tests/obfuscation-result/ObfuscationResult.spec'; @@ -52,6 +53,7 @@ import './functional-tests/node-transformers/control-flow-transformers/control-f import './functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec'; import './functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec'; import './functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec'; +import './functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec'; import './functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec'; import './functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec'; import './functional-tests/node-transformers/obfuscating-transformers/catch-clause-transformer/CatchClauseTransformer.spec'; diff --git a/test/runtime-tests/JavaScriptObfuscatorRuntime.spec.ts b/test/runtime-tests/JavaScriptObfuscatorRuntime.spec.ts index edba94e7..26390ae4 100644 --- a/test/runtime-tests/JavaScriptObfuscatorRuntime.spec.ts +++ b/test/runtime-tests/JavaScriptObfuscatorRuntime.spec.ts @@ -22,7 +22,8 @@ describe('JavaScriptObfuscator runtime eval', function () { deadCodeInjection: true, debugProtection: true, selfDefending: true, - stringArrayEncoding: StringArrayEncoding.Rc4 + stringArrayEncoding: StringArrayEncoding.Rc4, + transformObjectKeys: true } ); diff --git a/test/unit-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts b/test/unit-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts index 16adcabd..26d8ecde 100644 --- a/test/unit-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts +++ b/test/unit-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts @@ -6,7 +6,7 @@ import { IInversifyContainerFacade } from '../../../src/interfaces/container/IIn import { IJavaScriptObfuscator } from '../../../src/interfaces/IJavaScriptObfsucator'; import { IObfuscationResult } from '../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from '../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../src/options/presets/NoCustomNodes'; import { InversifyContainerFacade } from '../../../src/container/InversifyContainerFacade'; @@ -30,7 +30,7 @@ describe('JavaScriptObfuscator', () => { inversifyContainerFacade.load( '', { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, sourceMap: true, sourceMapFileName: sourceMapUrl } @@ -66,7 +66,7 @@ describe('JavaScriptObfuscator', () => { inversifyContainerFacade.load( '', { - ...NO_CUSTOM_NODES_PRESET, + ...NO_ADDITIONAL_NODES_PRESET, sourceMap: true, sourceMapBaseUrl: sourceMapBaseUrl, sourceMapFileName: sourceMapUrl diff --git a/test/unit-tests/node/node-appender/NodeAppender.spec.ts b/test/unit-tests/node/node-appender/NodeAppender.spec.ts index c4c53af6..48dc7341 100644 --- a/test/unit-tests/node/node-appender/NodeAppender.spec.ts +++ b/test/unit-tests/node/node-appender/NodeAppender.spec.ts @@ -1,3 +1,5 @@ +import 'reflect-metadata'; + import { ServiceIdentifiers } from '../../../../src/container/ServiceIdentifiers'; import * as ESTree from 'estree'; @@ -36,7 +38,7 @@ const convertCodeToAst: (fixturePath: string) => ESTree.Program = (fixturePath) }; describe('NodeAppender', () => { - describe('appendNode (blockScopeNode: TNodeWithBlockStatement[], nodeBodyStatements: TStatement[]): void', () => { + describe('appendNode (blockScopeNode: TNodeWithBlockScope[], nodeBodyStatements: TStatement[]): void', () => { let astTree: ESTree.Program, expectedAstTree: ESTree.Program, node: TStatement[]; @@ -57,7 +59,7 @@ describe('NodeAppender', () => { }); }); - describe('appendNodeToOptimalBlockScope (blockScopeStackTraceData: IStackTraceData[], blockScopeNode: TNodeWithBlockStatement, nodeBodyStatements: TStatement[], index: number = 0): void', () => { + describe('appendNodeToOptimalBlockScope (blockScopeStackTraceData: IStackTraceData[], blockScopeNode: TNodeWithBlockScope, nodeBodyStatements: TStatement[], index: number = 0): void', () => { let stackTraceAnalyzer: IStackTraceAnalyzer, astTree: ESTree.Program, expectedAstTree: ESTree.Program, @@ -162,7 +164,30 @@ describe('NodeAppender', () => { }); }); - describe('insertNodeAtIndex (blockScopeNode: TNodeWithBlockStatement[], nodeBodyStatements: TStatement[], index: number): void', () => { + describe('insertNodeAfter (scopeNode: TNodeWithScope, scopeStatements: TStatement[], targetStatement: ESTree.Statement): void', () => { + let astTree: ESTree.Program, + expectedAstTree: ESTree.Program, + node: TStatement[], + targetStatement: ESTree.Statement; + + before(() => { + node = convertCodeToStructure('/fixtures/simple-input.js'); + astTree = convertCodeToAst('/fixtures/insert-node-after.js'); + expectedAstTree = convertCodeToAst('/fixtures/insert-node-after-expected.js'); + targetStatement = astTree.body[1]; + + astTree = NodeUtils.parentize(astTree); + expectedAstTree = NodeUtils.parentize(expectedAstTree); + + NodeAppender.insertNodeAfter(astTree, node, targetStatement); + }); + + it('should insert given node in `BlockStatement` node body after target statement', () => { + assert.deepEqual(astTree, expectedAstTree); + }); + }); + + describe('insertNodeAtIndex (blockScopeNode: TNodeWithBlockScope[], nodeBodyStatements: TStatement[], index: number): void', () => { let astTree: ESTree.Program, expectedAstTree: ESTree.Program, node: TStatement[]; @@ -183,7 +208,7 @@ describe('NodeAppender', () => { }); }); - describe('prependNode (blockScopeNode: TNodeWithBlockStatement[], nodeBodyStatements: TStatement[]): void', () => { + describe('prependNode (blockScopeNode: TNodeWithBlockScope[], nodeBodyStatements: TStatement[]): void', () => { let astTree: ESTree.Program, expectedAstTree: ESTree.Program, node: TStatement[]; diff --git a/test/unit-tests/node/node-appender/fixtures/insert-node-after-expected.js b/test/unit-tests/node/node-appender/fixtures/insert-node-after-expected.js new file mode 100644 index 00000000..93082a90 --- /dev/null +++ b/test/unit-tests/node/node-appender/fixtures/insert-node-after-expected.js @@ -0,0 +1,13 @@ +var func1 = function () { + return true; +}; + +var func2 = function () { + return false; +}; + +var test = 1; + +var func3 = function () { + return 'string'; +}; \ No newline at end of file diff --git a/test/unit-tests/node/node-appender/fixtures/insert-node-after.js b/test/unit-tests/node/node-appender/fixtures/insert-node-after.js new file mode 100644 index 00000000..658678cc --- /dev/null +++ b/test/unit-tests/node/node-appender/fixtures/insert-node-after.js @@ -0,0 +1,11 @@ +var func1 = function () { + return true; +}; + +var func2 = function () { + return false; +}; + +var func3 = function () { + return 'string'; +}; \ No newline at end of file diff --git a/test/unit-tests/node/node-guards/NodeGuards.spec.ts b/test/unit-tests/node/node-guards/NodeGuards.spec.ts new file mode 100644 index 00000000..0b7e266b --- /dev/null +++ b/test/unit-tests/node/node-guards/NodeGuards.spec.ts @@ -0,0 +1,437 @@ +import * as ESTree from 'estree'; + +import { assert } from 'chai'; + +import { Nodes } from '../../../../src/node/Nodes'; +import { NodeGuards } from '../../../../src/node/NodeGuards'; +import { NodeUtils } from '../../../../src/node/NodeUtils'; + +describe('NodeGuards', () => { + describe('isNodeHasBlockScope (node: ESTree.Node): node is TNodeWithBlockScope', () => { + describe('truthful checks', () => { + describe('variant #1: block statement of function declaration', () => { + const expectedResult: boolean = true; + const node: ESTree.Node = Nodes.getBlockStatementNode(); + const parentNode: ESTree.FunctionDeclaration = Nodes.getFunctionDeclarationNode( + 'foo', + [], + node + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isNodeHasBlockScope(node, parentNode); + }); + + it('should check if node has block scope', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #2: block statement of function expression', () => { + const expectedResult: boolean = true; + const node: ESTree.Node = Nodes.getBlockStatementNode(); + const parentNode: ESTree.FunctionExpression = Nodes.getFunctionExpressionNode( + [], + node + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isNodeHasBlockScope(node, parentNode); + }); + + it('should check if node has block scope', () => { + assert.equal(result, expectedResult); + }); + }); + }); + + describe('false checks', () => { + describe('variant #1: switch-case node', () => { + const expectedResult: boolean = false; + const node: ESTree.Node = Nodes.getSwitchCaseNode( + Nodes.getLiteralNode(1), + [] + ); + const parentNode: ESTree.FunctionDeclaration = Nodes.getFunctionDeclarationNode( + 'foo', + [], + Nodes.getBlockStatementNode([ + Nodes.getSwitchStatementNode( + Nodes.getMemberExpressionNode( + Nodes.getIdentifierNode('bar'), + Nodes.getUpdateExpressionNode( + '++', + Nodes.getIdentifierNode('baz') + ), + true + ), + [node] + ) + ]) + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isNodeHasBlockScope(node, parentNode); + }); + + it('should check if node has block scope', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #2: literal node', () => { + const expectedResult: boolean = false; + const node: ESTree.Node = Nodes.getLiteralNode(1); + const parentNode: ESTree.FunctionDeclaration = Nodes.getFunctionDeclarationNode( + 'foo', + [], + Nodes.getBlockStatementNode([ + Nodes.getExpressionStatementNode( + Nodes.getCallExpressionNode( + Nodes.getIdentifierNode('bar'), + [node] + ) + ) + ]) + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isNodeHasBlockScope(node, parentNode); + }); + + it('should check if node has block scope', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #3: block statement of if statement', () => { + const expectedResult: boolean = false; + const node: ESTree.Node = Nodes.getBlockStatementNode(); + const parentNode: ESTree.IfStatement = Nodes.getIfStatementNode( + Nodes.getIdentifierNode('foo'), + node + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isNodeHasBlockScope(node, parentNode); + }); + + it('should check if node has block scope', () => { + assert.equal(result, expectedResult); + }); + }); + }); + }); + + describe('isNodeHasScope (node: ESTree.Node): node is TNodeWithScope', () => { + describe('truthful checks', () => { + describe('variant #1: program node', () => { + const expectedResult: boolean = true; + const node: ESTree.Node = Nodes.getProgramNode(); + + let result: boolean; + + before(() => { + result = NodeGuards.isNodeHasScope(node); + }); + + it('should check if node has scope', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #2: block statement node', () => { + const expectedResult: boolean = true; + const node: ESTree.Node = Nodes.getBlockStatementNode(); + + let result: boolean; + + before(() => { + result = NodeGuards.isNodeHasScope(node); + }); + + it('should check if node has scope', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #3: switch case node', () => { + const expectedResult: boolean = true; + const node: ESTree.Node = Nodes.getSwitchCaseNode( + Nodes.getLiteralNode(1), + [] + ); + + let result: boolean; + + before(() => { + result = NodeGuards.isNodeHasScope(node); + }); + + it('should check if node has scope', () => { + assert.equal(result, expectedResult); + }); + }); + }); + + describe('false checks', () => { + describe('variant #1: literal node', () => { + const expectedResult: boolean = false; + const node: ESTree.Node = Nodes.getLiteralNode(1); + + let result: boolean; + + before(() => { + result = NodeGuards.isNodeHasScope(node); + }); + + it('should check if node has scope', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #2: identifier node', () => { + const expectedResult: boolean = false; + const node: ESTree.Node = Nodes.getIdentifierNode('foo'); + + let result: boolean; + + before(() => { + result = NodeGuards.isNodeHasScope(node); + }); + + it('should check if node has scope', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #3: if-statement node', () => { + const expectedResult: boolean = false; + const node: ESTree.Node = Nodes.getIfStatementNode( + Nodes.getIdentifierNode('foo'), + Nodes.getBlockStatementNode() + ); + + let result: boolean; + + before(() => { + result = NodeGuards.isNodeHasScope(node); + }); + + it('should check if node has scope', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #4: switch-statement node', () => { + const expectedResult: boolean = false; + const node: ESTree.Node = Nodes.getSwitchStatementNode( + Nodes.getIdentifierNode('foo'), + [] + ); + + let result: boolean; + + before(() => { + result = NodeGuards.isNodeHasScope(node); + }); + + it('should check if node has scope', () => { + assert.equal(result, expectedResult); + }); + }); + }); + }); + + describe('isReplaceableIdentifierNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.Identifier', () => { + describe('truthful checks', () => { + describe('variant #1: parent node is function declaration node', () => { + const expectedResult: boolean = true; + const identifier: ESTree.Identifier = Nodes.getIdentifierNode('foo'); + const parentNode: ESTree.Node = Nodes.getFunctionDeclarationNode( + 'bar', + [identifier], + Nodes.getBlockStatementNode() + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isReplaceableIdentifierNode(identifier, parentNode); + }); + + it('should check if input identifier can be replaced by obfuscated one', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #2: parent node is computed property node', () => { + const expectedResult: boolean = true; + const identifier: ESTree.Identifier = Nodes.getIdentifierNode('foo'); + const parentNode: ESTree.Node = Nodes.getPropertyNode( + identifier, + Nodes.getLiteralNode('bar'), + true + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isReplaceableIdentifierNode(identifier, parentNode); + }); + + it('should check if input identifier can be replaced by obfuscated one', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #4: parent node is computed member expression node', () => { + const expectedResult: boolean = true; + const identifier: ESTree.Identifier = Nodes.getIdentifierNode('foo'); + const parentNode: ESTree.Node = Nodes.getMemberExpressionNode( + Nodes.getIdentifierNode('bar'), + identifier, + true + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isReplaceableIdentifierNode(identifier, parentNode); + }); + + it('should check if input identifier can be replaced by obfuscated one', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #4: parent node is computed method definition node', () => { + const expectedResult: boolean = true; + const identifier: ESTree.Identifier = Nodes.getIdentifierNode('foo'); + const parentNode: ESTree.Node = Nodes.getMethodDefinitionNode( + identifier, + Nodes.getFunctionExpressionNode([], Nodes.getBlockStatementNode()), + 'method', + true + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isReplaceableIdentifierNode(identifier, parentNode); + }); + + it('should check if input identifier can be replaced by obfuscated one', () => { + assert.equal(result, expectedResult); + }); + }); + }); + + describe('false checks', () => { + describe('variant #1: node isn\'t an identifier', () => { + const expectedResult: boolean = false; + const literal: ESTree.Literal = Nodes.getLiteralNode(1); + const parentNode: ESTree.Node = Nodes.getExpressionStatementNode( + Nodes.getCallExpressionNode( + Nodes.getIdentifierNode('foo'), + [literal] + ) + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isReplaceableIdentifierNode(literal, parentNode); + }); + + it('should check if input identifier can be replaced by obfuscated one', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #2: parent node isn\'t computed property node', () => { + const expectedResult: boolean = false; + const identifier: ESTree.Identifier = Nodes.getIdentifierNode('foo'); + const parentNode: ESTree.Node = Nodes.getPropertyNode( + identifier, + Nodes.getLiteralNode('bar'), + false + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isReplaceableIdentifierNode(identifier, parentNode); + }); + + it('should check if input identifier can be replaced by obfuscated one', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #3: parent node isn\'t computed member expression node', () => { + const expectedResult: boolean = false; + const identifier: ESTree.Identifier = Nodes.getIdentifierNode('foo'); + const parentNode: ESTree.Node = Nodes.getMemberExpressionNode( + Nodes.getIdentifierNode('bar'), + identifier, + false + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isReplaceableIdentifierNode(identifier, parentNode); + }); + + it('should check if input identifier can be replaced by obfuscated one', () => { + assert.equal(result, expectedResult); + }); + }); + + describe('variant #4: parent node isn\'t computed method definition node', () => { + const expectedResult: boolean = false; + const identifier: ESTree.Identifier = Nodes.getIdentifierNode('foo'); + const parentNode: ESTree.Node = Nodes.getMethodDefinitionNode( + identifier, + Nodes.getFunctionExpressionNode([], Nodes.getBlockStatementNode()), + 'method', + false + ); + + let result: boolean; + + before(() => { + NodeUtils.parentize(parentNode); + result = NodeGuards.isReplaceableIdentifierNode(identifier, parentNode); + }); + + it('should check if input identifier can be replaced by obfuscated one', () => { + assert.equal(result, expectedResult); + }); + }); + }); + }); +}); diff --git a/test/unit-tests/node/node-utils/NodeUtils.spec.ts b/test/unit-tests/node/node-utils/NodeUtils.spec.ts index 8034caf3..7840378c 100644 --- a/test/unit-tests/node/node-utils/NodeUtils.spec.ts +++ b/test/unit-tests/node/node-utils/NodeUtils.spec.ts @@ -9,8 +9,8 @@ import { NodeUtils } from '../../../../src/node/NodeUtils'; describe('NodeUtils', () => { describe('addXVerbatimPropertyToLiterals (node: ESTree.Node): void', () => { - let literalNode: any, - expectedLiteralNode: any; + let literalNode: ESTree.Literal, + expectedLiteralNode: ESTree.Literal; before(() => { literalNode = Nodes.getLiteralNode('value'); @@ -179,39 +179,7 @@ describe('NodeUtils', () => { }); }); - describe('getBlockStatementNodeByIndex (node: ESTree.Node, index: number = 0): ESTree.Node', () => { - let blockStatementNode: ESTree.BlockStatement, - expressionStatementNode1: ESTree.ExpressionStatement, - expressionStatementNode2: ESTree.ExpressionStatement; - - beforeEach(() => { - expressionStatementNode1 = Nodes.getExpressionStatementNode(Nodes.getIdentifierNode('identifier')); - expressionStatementNode2 = Nodes.getExpressionStatementNode(Nodes.getIdentifierNode('identifier')); - - blockStatementNode = Nodes.getBlockStatementNode([ - expressionStatementNode1, - expressionStatementNode2 - ]); - }); - - it('should return block-statement child node of given node if that node has block-statement', () => { - assert.deepEqual(NodeUtils.getBlockStatementNodeByIndex(blockStatementNode), expressionStatementNode1); - }); - - it('should return block-statement child node of given node with index `1` if that node has block-statement', () => { - assert.deepEqual(NodeUtils.getBlockStatementNodeByIndex(blockStatementNode, 1), expressionStatementNode2); - }); - - it('should throw a `ReferenceError` if index is out of boundaries', () => { - assert.throws(() => NodeUtils.getBlockStatementNodeByIndex(blockStatementNode, 2), ReferenceError); - }); - - it('should throw a `TypeError` if node have no a block-statement', () => { - assert.throws(() => NodeUtils.getBlockStatementNodeByIndex(expressionStatementNode1, 1), TypeError); - }); - }); - - describe('getBlockScopesOfNode (node: ESTree.Node, blockScopes: TNodeWithBlockStatement[] = []): TNodeWithBlockStatement[]', () => { + describe('getBlockScopesOfNode (node: ESTree.Node, blockScopes: TNodeWithBlockScope[] = []): TNodeWithBlockScope[]', () => { let functionDeclarationBlockStatementNode: ESTree.BlockStatement, ifStatementBlockStatementNode1: ESTree.BlockStatement, ifStatementBlockStatementNode2: ESTree.BlockStatement, @@ -326,18 +294,20 @@ describe('NodeUtils', () => { }); }); - describe('getNodeBlockScopeDepth (node: ESTree.Node, depth: number = 0): number', () => { - let functionDeclarationBlockStatementNode1: ESTree.BlockStatement, - functionDeclarationBlockStatementNode2: ESTree.BlockStatement, + describe('getScopeOfNode (node: ESTree.Node): TNodeWithScope | null', () => { + let functionDeclarationBlockStatementNode: ESTree.BlockStatement, ifStatementBlockStatementNode1: ESTree.BlockStatement, ifStatementBlockStatementNode2: ESTree.BlockStatement, + ifStatementBlockStatementNode3: ESTree.BlockStatement, ifStatementNode1: ESTree.IfStatement, ifStatementNode2: ESTree.IfStatement, - expressionStatementNode1: ESTree.ExpressionStatement, - expressionStatementNode2: ESTree.ExpressionStatement, + ifStatementNode3: ESTree.IfStatement, + switchCaseNode: ESTree.SwitchCase, + switchStatementNode: ESTree.SwitchStatement, expressionStatementNode3: ESTree.ExpressionStatement, - functionDeclarationNode1: ESTree.FunctionDeclaration, - functionDeclarationNode2: ESTree.FunctionDeclaration, + expressionStatementNode2: ESTree.ExpressionStatement, + expressionStatementNode1: ESTree.ExpressionStatement, + functionDeclarationNode: ESTree.FunctionDeclaration, programNode: ESTree.Program; before(() => { @@ -345,101 +315,123 @@ describe('NodeUtils', () => { expressionStatementNode2 = Nodes.getExpressionStatementNode(Nodes.getIdentifierNode('identifier')); expressionStatementNode3 = Nodes.getExpressionStatementNode(Nodes.getIdentifierNode('identifier')); - ifStatementBlockStatementNode2 = Nodes.getBlockStatementNode([ + ifStatementBlockStatementNode3 = Nodes.getBlockStatementNode([ + expressionStatementNode2, expressionStatementNode3 ]); + ifStatementNode3 = Nodes.getIfStatementNode( + Nodes.getLiteralNode(true), + ifStatementBlockStatementNode3 + ); + + ifStatementBlockStatementNode2 = Nodes.getBlockStatementNode(); + + ifStatementBlockStatementNode1 = Nodes.getBlockStatementNode([ + ifStatementNode3 + ]); + ifStatementNode2 = Nodes.getIfStatementNode( Nodes.getLiteralNode(true), ifStatementBlockStatementNode2 ); - functionDeclarationBlockStatementNode2 = Nodes.getBlockStatementNode([ - ifStatementNode2, - expressionStatementNode2 - ]); - - functionDeclarationNode2 = Nodes.getFunctionDeclarationNode('test', [], functionDeclarationBlockStatementNode2); - - ifStatementBlockStatementNode1 = Nodes.getBlockStatementNode([ - functionDeclarationNode2 - ]); - ifStatementNode1 = Nodes.getIfStatementNode( Nodes.getLiteralNode(true), ifStatementBlockStatementNode1 ); - functionDeclarationBlockStatementNode1 = Nodes.getBlockStatementNode([ + switchCaseNode = Nodes.getSwitchCaseNode( + Nodes.getLiteralNode(1), + [ + ifStatementNode2 + ] + ); + + switchStatementNode = Nodes.getSwitchStatementNode( + Nodes.getLiteralNode(1), + [ + switchCaseNode + ] + ); + + functionDeclarationBlockStatementNode = Nodes.getBlockStatementNode([ expressionStatementNode1, - ifStatementNode1 + ifStatementNode1, + switchStatementNode ]); - functionDeclarationNode1 = Nodes.getFunctionDeclarationNode('test', [], functionDeclarationBlockStatementNode1); + functionDeclarationNode = Nodes.getFunctionDeclarationNode('test', [], functionDeclarationBlockStatementNode); programNode = Nodes.getProgramNode([ - functionDeclarationNode1 + functionDeclarationNode ]); programNode.parentNode = programNode; - functionDeclarationNode1.parentNode = programNode; - functionDeclarationBlockStatementNode1.parentNode = functionDeclarationNode1; - expressionStatementNode1.parentNode = functionDeclarationBlockStatementNode1; - ifStatementNode1.parentNode = functionDeclarationBlockStatementNode1; + functionDeclarationNode.parentNode = programNode; + functionDeclarationBlockStatementNode.parentNode = functionDeclarationNode; + expressionStatementNode1.parentNode = functionDeclarationBlockStatementNode; + ifStatementNode1.parentNode = functionDeclarationBlockStatementNode; ifStatementBlockStatementNode1.parentNode = ifStatementNode1; - functionDeclarationNode2.parentNode = ifStatementBlockStatementNode1; - functionDeclarationBlockStatementNode2.parentNode = functionDeclarationNode2; - expressionStatementNode2.parentNode = functionDeclarationBlockStatementNode2; - ifStatementNode2.parentNode = functionDeclarationBlockStatementNode2; + switchStatementNode.parentNode = functionDeclarationBlockStatementNode; + switchCaseNode.parentNode = switchStatementNode; + ifStatementNode2.parentNode = switchCaseNode; ifStatementBlockStatementNode2.parentNode = ifStatementNode2; + ifStatementNode3.parentNode = ifStatementBlockStatementNode1; + ifStatementBlockStatementNode3.parentNode = ifStatementNode3; + expressionStatementNode3.parentNode = ifStatementBlockStatementNode3; }); - it('should return block-scope depth for `program` node', () => { - assert.deepEqual(NodeUtils.getNodeBlockScopeDepth(programNode), 0); + it('should return scope node for `program` node child', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(programNode), programNode); }); - it('should return block-scope depth for `functionDeclaration` node #1', () => { - assert.deepEqual(NodeUtils.getNodeBlockScopeDepth(functionDeclarationNode1), 0); + it('should return scope node for `functionDeclaration` node child node #1', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(functionDeclarationNode), programNode); }); - it('should return block-scope depth for `functionDeclaration blockStatement` node #1', () => { - assert.deepEqual(NodeUtils.getNodeBlockScopeDepth(functionDeclarationBlockStatementNode1), 1); + it('should return scope node for `functionDeclaration blockStatement` node child node #1', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(functionDeclarationBlockStatementNode), programNode); }); - it('should return block-scope depth for `expressionStatement` node #1', () => { - assert.deepEqual(NodeUtils.getNodeBlockScopeDepth(expressionStatementNode1), 1); + it('should return scope node for `expressionStatement` node #1 child node', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(expressionStatementNode1), functionDeclarationBlockStatementNode); }); - it('should return block-scope depth for `ifStatement` node #1', () => { - assert.deepEqual(NodeUtils.getNodeBlockScopeDepth(ifStatementNode1), 1); + it('should return scope node for `ifStatement` node #1 child node', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(ifStatementNode1), functionDeclarationBlockStatementNode); }); - it('should return block-scope depth for `ifStatement blockStatement` node #1', () => { - assert.deepEqual(NodeUtils.getNodeBlockScopeDepth(ifStatementBlockStatementNode1), 1); + it('should return scope node for `switchStatement` node child node', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(switchStatementNode), functionDeclarationBlockStatementNode); }); - it('should return block-scope depth for `functionDeclaration` node #2', () => { - assert.deepEqual(NodeUtils.getNodeBlockScopeDepth(functionDeclarationNode2), 1); + it('should return scope node for `switchCase` node child node', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(switchCaseNode), functionDeclarationBlockStatementNode); }); - it('should return block-scope depth for `functionDeclaration blockStatement` node #2', () => { - assert.deepEqual(NodeUtils.getNodeBlockScopeDepth(functionDeclarationBlockStatementNode2), 2); + it('should return scope node for `ifStatement` node #2 child node', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(ifStatementNode2), switchCaseNode); }); - it('should return block-scope depth for `expressionStatement` node #2', () => { - assert.deepEqual(NodeUtils.getNodeBlockScopeDepth(expressionStatementNode2), 2); + it('should return scope node for `ifStatement blockStatement` node #2 child node', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(ifStatementBlockStatementNode2), switchCaseNode); }); - it('should return block-scope depth for `ifStatement` node #2', () => { - assert.deepEqual(NodeUtils.getNodeBlockScopeDepth(ifStatementNode2), 2); + it('should return scope node for `ifStatement blockStatement` node #1 child node', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(ifStatementBlockStatementNode1), functionDeclarationBlockStatementNode); }); - it('should return block-scope depth for `ifStatement blockStatement` node #2', () => { - assert.deepEqual(NodeUtils.getNodeBlockScopeDepth(ifStatementBlockStatementNode2), 2); + it('should return scope node for `ifStatement blockStatement` node #3 child node', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(ifStatementBlockStatementNode3), ifStatementBlockStatementNode1); + }); + + it('should return scope node for `expressionStatement` node #3 child node', () => { + assert.deepEqual(NodeUtils.getScopeOfNode(expressionStatementNode3), ifStatementBlockStatementNode3); }); it('should throw a `ReferenceError` if node has no `parentNode` property', () => { - assert.throws(() => NodeUtils.getNodeBlockScopeDepth(expressionStatementNode3), ReferenceError); + assert.throws(() => NodeUtils.getScopeOfNode(expressionStatementNode2), ReferenceError); }); }); diff --git a/yarn.lock b/yarn.lock index 12a94c36..7edf3a01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,13 @@ # yarn lockfile v1 -"@types/chai@4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.10.tgz#0eb222c7353adde8e0980bea04165d4d3b6afef3" +"@types/chai@4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.0.tgz#d9008fa4c06f6801f93396d121f0227cd4244ac6" -"@types/chance@0.7.35": - version "0.7.35" - resolved "https://registry.yarnpkg.com/@types/chance/-/chance-0.7.35.tgz#e76f3441b7763476c58eb7dc32f62da3d8ea547e" +"@types/chance@0.7.36": + version "0.7.36" + resolved "https://registry.yarnpkg.com/@types/chance/-/chance-0.7.36.tgz#1c3e14b9b11463d454182393ebcd8e977f1daff5" "@types/commander@2.12.2": version "2.12.2" @@ -64,19 +64,17 @@ dependencies: "@types/node" "*" -"@types/mocha@2.2.45": - version "2.2.45" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.45.tgz#816572b6e45164526a36d4faa123e8267d6d5d0a" - dependencies: - "@types/node" "*" +"@types/mocha@2.2.46": + version "2.2.46" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.46.tgz#b04713f7759d1cf752effdaae7b3969e285ebc16" "@types/node@*": version "8.0.53" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.53.tgz#396b35af826fa66aad472c8cb7b8d5e277f4e6d8" -"@types/node@8.5.2": - version "8.5.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.2.tgz#83b8103fa9a2c2e83d78f701a9aa7c9539739aa5" +"@types/node@8.5.7": + version "8.5.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.7.tgz#9c498c35af354dcfbca3790fb2e81129e93cf0e2" "@types/rimraf@^2.0.2": version "2.0.2" @@ -1450,9 +1448,9 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen-wallaby@1.6.15: - version "1.6.15" - resolved "https://registry.yarnpkg.com/escodegen-wallaby/-/escodegen-wallaby-1.6.15.tgz#9d5ef67dd4d8c7c8a58aff1e4edd63512566ba9f" +escodegen-wallaby@1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/escodegen-wallaby/-/escodegen-wallaby-1.6.16.tgz#f55b65d1a846d98584f1be18a2bf463f96280527" dependencies: esprima "^2.7.1" estraverse "^1.9.1" @@ -2244,6 +2242,10 @@ istanbul@1.1.0-alpha.1: which "^1.1.1" wordwrap "^1.0.0" +js-string-escape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"