diff --git a/dist/index.js b/dist/index.js index ab81ca5f..42a96ae6 100644 --- a/dist/index.js +++ b/dist/index.js @@ -88,7 +88,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 105); +/******/ return __webpack_require__(__webpack_require__.s = 108); /******/ }) /************************************************************************/ /******/ ([ @@ -104,9 +104,9 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(25); +var chance_1 = __webpack_require__(26); var JSFuck_1 = __webpack_require__(21); -var isEqual = __webpack_require__(102); +var isEqual = __webpack_require__(105); var Utils = function () { function Utils() { @@ -347,7 +347,19 @@ Utils.randomGenerator = new chance_1.Chance(); exports.Utils = Utils; /***/ }, -/* 1 */, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var Utils_1 = __webpack_require__(0); +exports.ObfuscationEvents = Utils_1.Utils.strEnumify({ + AfterObfuscation: 'afterObfuscation', + BeforeObfuscation: 'beforeObfuscation' +}); + +/***/ }, /* 2 */ /***/ function(module, exports, __webpack_require__) { @@ -726,7 +738,7 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var escodegen = __webpack_require__(11); -var esprima = __webpack_require__(26); +var esprima = __webpack_require__(27); var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); var Node_1 = __webpack_require__(2); @@ -875,10 +887,10 @@ exports.NodeUtils = NodeUtils; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var AbstractNodeTransformer = function AbstractNodeTransformer(nodes, options) { +var AbstractNodeTransformer = function AbstractNodeTransformer(customNodesStorage, options) { _classCallCheck(this, AbstractNodeTransformer); - this.nodes = nodes; + this.customNodesStorage = customNodesStorage; this.options = options; }; @@ -895,9 +907,9 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var JavaScriptObfuscatorCLI_1 = __webpack_require__(33); -var JavaScriptObfuscatorInternal_1 = __webpack_require__(29); -var Options_1 = __webpack_require__(67); +var JavaScriptObfuscatorCLI_1 = __webpack_require__(34); +var JavaScriptObfuscatorInternal_1 = __webpack_require__(30); +var Options_1 = __webpack_require__(69); var JavaScriptObfuscator = function () { function JavaScriptObfuscator() { @@ -941,7 +953,7 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var ObfuscationEvents_1 = __webpack_require__(107); +var ObfuscationEvents_1 = __webpack_require__(1); var AbstractCustomNodesFactory = function () { function AbstractCustomNodesFactory(options) { @@ -1050,10 +1062,10 @@ exports.SourceMapMode = { function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var AbstractReplacer = function AbstractReplacer(nodes, options) { +var AbstractReplacer = function AbstractReplacer(customNodesStorage, options) { _classCallCheck(this, AbstractReplacer); - this.nodes = nodes; + this.customNodesStorage = customNodesStorage; this.options = options; }; @@ -1104,8 +1116,8 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); -var SingleNodeCallControllerTemplate_1 = __webpack_require__(80); +var ObfuscationEvents_1 = __webpack_require__(1); +var SingleNodeCallControllerTemplate_1 = __webpack_require__(82); var NoCustomNodesPreset_1 = __webpack_require__(16); var AbstractCustomNode_1 = __webpack_require__(5); var JavaScriptObfuscator_1 = __webpack_require__(10); @@ -1211,10 +1223,7 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { }, { key: 'replaceStringLiteralWithStringArrayCall', value: function replaceStringLiteralWithStringArrayCall(value) { - var stringArrayNode = this.nodes.get('stringArrayNode'); - if (!stringArrayNode) { - throw new ReferenceError('`stringArrayNode` node is not found in Map with custom nodes.'); - } + var stringArrayNode = this.customNodesStorage.get('stringArrayNode'); var rc4Key = ''; switch (this.options.stringArrayEncoding) { case StringArrayEncoding_1.StringArrayEncoding.base64: @@ -1237,11 +1246,8 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { indexOfValue = stringArray.getLength(); stringArray.set(null, value); } - var stringArrayCallsWrapper = this.nodes.get('stringArrayCallsWrapper'); - var hexadecimalIndex = new NumberLiteralReplacer_1.NumberLiteralReplacer(this.nodes, this.options).replace(indexOfValue); - if (!stringArrayCallsWrapper) { - throw new ReferenceError('`stringArrayCallsWrapper` node is not found in Map with custom node.'); - } + var stringArrayCallsWrapper = this.customNodesStorage.get('stringArrayCallsWrapper'); + var hexadecimalIndex = new NumberLiteralReplacer_1.NumberLiteralReplacer(this.customNodesStorage, this.options).replace(indexOfValue); if (this.options.stringArrayEncoding === StringArrayEncoding_1.StringArrayEncoding.rc4) { return stringArrayCallsWrapper.getNodeIdentifier() + '(\'' + hexadecimalIndex + '\', \'' + Utils_1.Utils.stringToUnicodeEscapeSequence(rc4Key) + '\')'; } @@ -1375,10 +1381,10 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var AbstractNodeTransformersFactory = function () { - function AbstractNodeTransformersFactory(customNodes, options) { + function AbstractNodeTransformersFactory(customNodesStorage, options) { _classCallCheck(this, AbstractNodeTransformersFactory); - this.customNodes = customNodes; + this.customNodesStorage = customNodesStorage; this.options = options; } @@ -1390,7 +1396,7 @@ var AbstractNodeTransformersFactory = function () { var nodeTransformers = this.nodeTransformers.get(nodeType) || []; var instancesArray = []; nodeTransformers.forEach(function (transformer) { - instancesArray.push(new transformer(_this.customNodes, _this.options)); + instancesArray.push(new transformer(_this.customNodesStorage, _this.options)); }); return instancesArray; } @@ -1475,30 +1481,6 @@ exports.DEFAULT_PRESET = Object.freeze({ /***/ }, /* 25 */ -/***/ function(module, exports) { - -module.exports = require("chance"); - -/***/ }, -/* 26 */ -/***/ function(module, exports) { - -module.exports = require("esprima"); - -/***/ }, -/* 27 */ -/***/ function(module, exports) { - -module.exports = require("path"); - -/***/ }, -/* 28 */ -/***/ function(module, exports) { - -module.exports = require("babel-polyfill"); - -/***/ }, -/* 29 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1508,12 +1490,95 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var esprima = __webpack_require__(26); +var Utils_1 = __webpack_require__(0); + +var MapStorage = function () { + function MapStorage() { + _classCallCheck(this, MapStorage); + + this.storage = new Map(); + } + + _createClass(MapStorage, [{ + 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) { + return Utils_1.Utils.mapGetFirstKeyOf(this.storage, value); + } + }, { + key: "getLength", + value: function getLength() { + return Array.from(this.storage).length; + } + }, { + key: "getStorage", + value: function getStorage() { + return this.storage; + } + }, { + key: "initialize", + value: function initialize() {} + }, { + key: "set", + value: function set(key, value) { + this.storage.set(key, value); + } + }]); + + return MapStorage; +}(); + +exports.MapStorage = MapStorage; + +/***/ }, +/* 26 */ +/***/ function(module, exports) { + +module.exports = require("chance"); + +/***/ }, +/* 27 */ +/***/ function(module, exports) { + +module.exports = require("esprima"); + +/***/ }, +/* 28 */ +/***/ function(module, exports) { + +module.exports = require("path"); + +/***/ }, +/* 29 */ +/***/ function(module, exports) { + +module.exports = require("babel-polyfill"); + +/***/ }, +/* 30 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var esprima = __webpack_require__(27); var escodegen = __webpack_require__(11); -var chance_1 = __webpack_require__(25); +var chance_1 = __webpack_require__(26); var ObfuscationResult_1 = __webpack_require__(20); -var Obfuscator_1 = __webpack_require__(30); -var SourceMapCorrector_1 = __webpack_require__(31); +var Obfuscator_1 = __webpack_require__(31); +var SourceMapCorrector_1 = __webpack_require__(32); var Utils_1 = __webpack_require__(0); var JavaScriptObfuscatorInternal = function () { @@ -1569,7 +1634,7 @@ JavaScriptObfuscatorInternal.esprimaParams = { exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; /***/ }, -/* 30 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1579,24 +1644,18 @@ var _createClass = (function () { function defineProperties(target, props) { for function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -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"); } } var estraverse = __webpack_require__(4); -var ObfuscationEvents_1 = __webpack_require__(107); -var VisitorDirection_1 = __webpack_require__(51); -var ConsoleOutputCustomNodesFactory_1 = __webpack_require__(35); -var DebugProtectionCustomNodesFactory_1 = __webpack_require__(42); -var DomainLockCustomNodesFactory_1 = __webpack_require__(44); -var NodeControlFlowTransformersFactory_1 = __webpack_require__(55); -var NodeObfuscatorsFactory_1 = __webpack_require__(65); -var SelfDefendingCustomNodesFactory_1 = __webpack_require__(46); -var StringArrayCustomNodesFactory_1 = __webpack_require__(50); +var ObfuscationEvents_1 = __webpack_require__(1); +var VisitorDirection_1 = __webpack_require__(52); +var NodeControlFlowTransformersFactory_1 = __webpack_require__(57); +var NodeObfuscatorsFactory_1 = __webpack_require__(67); +var CustomNodesStorage_1 = __webpack_require__(78); var Node_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(8); -var StackTraceAnalyzer_1 = __webpack_require__(70); -var ObfuscationEventEmitter_1 = __webpack_require__(108); +var StackTraceAnalyzer_1 = __webpack_require__(72); +var ObfuscationEventEmitter_1 = __webpack_require__(53); var Obfuscator = function () { function Obfuscator(options) { @@ -1614,30 +1673,16 @@ var Obfuscator = function () { NodeUtils_1.NodeUtils.parentize(astTree); var obfuscationEventEmitter = new ObfuscationEventEmitter_1.ObfuscationEventEmitter(); var stackTraceAnalyzer = new StackTraceAnalyzer_1.StackTraceAnalyzer(); - this.initializeCustomNodes(obfuscationEventEmitter, stackTraceAnalyzer.analyze(astTree.body)); + var customNodesStorage = new CustomNodesStorage_1.CustomNodesStorage(this.options); + customNodesStorage.initialize(obfuscationEventEmitter, stackTraceAnalyzer.analyze(astTree.body)); obfuscationEventEmitter.emit(ObfuscationEvents_1.ObfuscationEvents.BeforeObfuscation, astTree); if (this.options.controlFlowFlattening) { - this.transformAstTree(astTree, VisitorDirection_1.VisitorDirection.leave, new NodeControlFlowTransformersFactory_1.NodeControlFlowTransformersFactory(this.customNodes, this.options)); + this.transformAstTree(astTree, VisitorDirection_1.VisitorDirection.leave, new NodeControlFlowTransformersFactory_1.NodeControlFlowTransformersFactory(customNodesStorage, this.options)); } - this.transformAstTree(astTree, VisitorDirection_1.VisitorDirection.enter, new NodeObfuscatorsFactory_1.NodeObfuscatorsFactory(this.customNodes, this.options)); + this.transformAstTree(astTree, VisitorDirection_1.VisitorDirection.enter, new NodeObfuscatorsFactory_1.NodeObfuscatorsFactory(customNodesStorage, this.options)); obfuscationEventEmitter.emit(ObfuscationEvents_1.ObfuscationEvents.AfterObfuscation, astTree); return astTree; } - }, { - key: 'initializeCustomNodes', - value: function initializeCustomNodes(obfuscationEventEmitter, stackTraceData) { - var _this = this; - - var customNodes = []; - Obfuscator.customNodesFactories.forEach(function (customNodesFactoryConstructor) { - var customNodesFactory = new customNodesFactoryConstructor(_this.options).initializeCustomNodes(obfuscationEventEmitter, stackTraceData); - if (!customNodesFactory) { - return; - } - customNodes.push.apply(customNodes, _toConsumableArray(customNodesFactory)); - }); - this.customNodes = new Map(customNodes); - } }, { key: 'transformAstTree', value: function transformAstTree(astTree, direction, nodeTransformersFactory) { @@ -1653,11 +1698,10 @@ var Obfuscator = function () { return Obfuscator; }(); -Obfuscator.customNodesFactories = [DomainLockCustomNodesFactory_1.DomainLockCustomNodesFactory, SelfDefendingCustomNodesFactory_1.SelfDefendingCustomNodesFactory, ConsoleOutputCustomNodesFactory_1.ConsoleOutputCustomNodesFactory, DebugProtectionCustomNodesFactory_1.DebugProtectionCustomNodesFactory, StringArrayCustomNodesFactory_1.StringArrayCustomNodesFactory]; exports.Obfuscator = Obfuscator; /***/ }, -/* 31 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1715,7 +1759,7 @@ var SourceMapCorrector = function () { exports.SourceMapCorrector = SourceMapCorrector; /***/ }, -/* 32 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1725,9 +1769,9 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var fs = __webpack_require__(101); -var mkdirp = __webpack_require__(103); -var path = __webpack_require__(27); +var fs = __webpack_require__(104); +var mkdirp = __webpack_require__(106); +var path = __webpack_require__(28); var Utils_1 = __webpack_require__(0); var CLIUtils = function () { @@ -1807,7 +1851,7 @@ CLIUtils.encoding = 'utf8'; exports.CLIUtils = CLIUtils; /***/ }, -/* 33 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1817,12 +1861,12 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var commander = __webpack_require__(100); -var path = __webpack_require__(27); +var commander = __webpack_require__(102); +var path = __webpack_require__(28); var SourceMapMode_1 = __webpack_require__(14); var StringArrayEncoding_1 = __webpack_require__(18); var DefaultPreset_1 = __webpack_require__(24); -var CLIUtils_1 = __webpack_require__(32); +var CLIUtils_1 = __webpack_require__(33); var JavaScriptObfuscator_1 = __webpack_require__(10); var Utils_1 = __webpack_require__(0); @@ -1955,7 +1999,7 @@ var JavaScriptObfuscatorCLI = function () { exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; /***/ }, -/* 34 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1970,8 +2014,8 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(81); +var ObfuscationEvents_1 = __webpack_require__(1); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(83); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -2012,7 +2056,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; /***/ }, -/* 35 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2026,7 +2070,7 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(34); +var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(35); var NodeCallsControllerFunctionNode_1 = __webpack_require__(17); var AbstractCustomNodesFactory_1 = __webpack_require__(12); var NodeAppender_1 = __webpack_require__(3); @@ -2059,7 +2103,7 @@ var ConsoleOutputCustomNodesFactory = function (_AbstractCustomNodesF) { exports.ConsoleOutputCustomNodesFactory = ConsoleOutputCustomNodesFactory; /***/ }, -/* 36 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2074,8 +2118,8 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); -var BinaryExpressionFunctionTemplate_1 = __webpack_require__(82); +var ObfuscationEvents_1 = __webpack_require__(1); +var BinaryExpressionFunctionTemplate_1 = __webpack_require__(84); var AbstractCustomNode_1 = __webpack_require__(5); var Utils_1 = __webpack_require__(0); @@ -2111,7 +2155,7 @@ var BinaryExpressionFunctionNode = function (_AbstractCustomNode_) { exports.BinaryExpressionFunctionNode = BinaryExpressionFunctionNode; /***/ }, -/* 37 */ +/* 38 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2126,8 +2170,8 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); -var ControlFlowStorageCallTemplate_1 = __webpack_require__(83); +var ObfuscationEvents_1 = __webpack_require__(1); +var ControlFlowStorageCallTemplate_1 = __webpack_require__(85); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); @@ -2170,7 +2214,7 @@ var ControlFlowStorageCallNode = function (_AbstractCustomNode_) { exports.ControlFlowStorageCallNode = ControlFlowStorageCallNode; /***/ }, -/* 38 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2185,8 +2229,8 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); -var ControlFlowStorageTemplate_1 = __webpack_require__(84); +var ObfuscationEvents_1 = __webpack_require__(1); +var ControlFlowStorageTemplate_1 = __webpack_require__(86); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); @@ -2225,7 +2269,7 @@ var ControlFlowStorageNode = function (_AbstractCustomNode_) { exports.ControlFlowStorageNode = ControlFlowStorageNode; /***/ }, -/* 39 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2240,8 +2284,8 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(85); +var ObfuscationEvents_1 = __webpack_require__(1); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(87); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); @@ -2278,7 +2322,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; /***/ }, -/* 40 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2293,8 +2337,8 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(86); +var ObfuscationEvents_1 = __webpack_require__(1); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(88); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); @@ -2331,7 +2375,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; /***/ }, -/* 41 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2346,8 +2390,8 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(87); +var ObfuscationEvents_1 = __webpack_require__(1); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(89); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -2387,7 +2431,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; /***/ }, -/* 42 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2401,9 +2445,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var DebugProtectionFunctionCallNode_1 = __webpack_require__(39); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(40); -var DebugProtectionFunctionNode_1 = __webpack_require__(41); +var DebugProtectionFunctionCallNode_1 = __webpack_require__(40); +var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(41); +var DebugProtectionFunctionNode_1 = __webpack_require__(42); var AbstractCustomNodesFactory_1 = __webpack_require__(12); var Utils_1 = __webpack_require__(0); @@ -2437,7 +2481,7 @@ var DebugProtectionCustomNodesFactory = function (_AbstractCustomNodesF) { exports.DebugProtectionCustomNodesFactory = DebugProtectionCustomNodesFactory; /***/ }, -/* 43 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2454,8 +2498,8 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); -var DomainLockNodeTemplate_1 = __webpack_require__(88); +var ObfuscationEvents_1 = __webpack_require__(1); +var DomainLockNodeTemplate_1 = __webpack_require__(90); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -2503,7 +2547,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { exports.DomainLockNode = DomainLockNode; /***/ }, -/* 44 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2517,7 +2561,7 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var DomainLockNode_1 = __webpack_require__(43); +var DomainLockNode_1 = __webpack_require__(44); var NodeCallsControllerFunctionNode_1 = __webpack_require__(17); var AbstractCustomNodesFactory_1 = __webpack_require__(12); var NodeAppender_1 = __webpack_require__(3); @@ -2550,7 +2594,7 @@ var DomainLockCustomNodesFactory = function (_AbstractCustomNodesF) { exports.DomainLockCustomNodesFactory = DomainLockCustomNodesFactory; /***/ }, -/* 45 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2565,9 +2609,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); +var ObfuscationEvents_1 = __webpack_require__(1); var NoCustomNodesPreset_1 = __webpack_require__(16); -var SelfDefendingTemplate_1 = __webpack_require__(89); +var SelfDefendingTemplate_1 = __webpack_require__(91); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); var JavaScriptObfuscator_1 = __webpack_require__(10); @@ -2611,7 +2655,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 46 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2625,9 +2669,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var ObfuscationEvents_1 = __webpack_require__(107); +var ObfuscationEvents_1 = __webpack_require__(1); var NodeCallsControllerFunctionNode_1 = __webpack_require__(17); -var SelfDefendingUnicodeNode_1 = __webpack_require__(45); +var SelfDefendingUnicodeNode_1 = __webpack_require__(46); var AbstractCustomNodesFactory_1 = __webpack_require__(12); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -2662,7 +2706,7 @@ var SelfDefendingCustomNodesFactory = function (_AbstractCustomNodesF) { exports.SelfDefendingCustomNodesFactory = SelfDefendingCustomNodesFactory; /***/ }, -/* 47 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2679,15 +2723,15 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); +var ObfuscationEvents_1 = __webpack_require__(1); var StringArrayEncoding_1 = __webpack_require__(18); var NoCustomNodesPreset_1 = __webpack_require__(16); -var AtobTemplate_1 = __webpack_require__(78); -var Rc4Template_1 = __webpack_require__(79); -var SelfDefendingTemplate_1 = __webpack_require__(90); -var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(91); -var StringArrayCallsWrapperTemplate_1 = __webpack_require__(92); -var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(93); +var AtobTemplate_1 = __webpack_require__(80); +var Rc4Template_1 = __webpack_require__(81); +var SelfDefendingTemplate_1 = __webpack_require__(92); +var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(93); +var StringArrayCallsWrapperTemplate_1 = __webpack_require__(94); +var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(95); var AbstractCustomNode_1 = __webpack_require__(5); var JavaScriptObfuscator_1 = __webpack_require__(10); var NodeAppender_1 = __webpack_require__(3); @@ -2775,7 +2819,7 @@ var StringArrayCallsWrapper = function (_AbstractCustomNode_) { exports.StringArrayCallsWrapper = StringArrayCallsWrapper; /***/ }, -/* 48 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2792,8 +2836,8 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); -var StringArrayTemplate_1 = __webpack_require__(94); +var ObfuscationEvents_1 = __webpack_require__(1); +var StringArrayTemplate_1 = __webpack_require__(96); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); @@ -2851,7 +2895,7 @@ StringArrayNode.ARRAY_RANDOM_LENGTH = 4; exports.StringArrayNode = StringArrayNode; /***/ }, -/* 49 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2866,10 +2910,10 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var format = __webpack_require__(7); -var ObfuscationEvents_1 = __webpack_require__(107); +var ObfuscationEvents_1 = __webpack_require__(1); var NoCustomNodesPreset_1 = __webpack_require__(16); -var SelfDefendingTemplate_1 = __webpack_require__(95); -var StringArrayRotateFunctionTemplate_1 = __webpack_require__(96); +var SelfDefendingTemplate_1 = __webpack_require__(97); +var StringArrayRotateFunctionTemplate_1 = __webpack_require__(98); var AbstractCustomNode_1 = __webpack_require__(5); var JavaScriptObfuscator_1 = __webpack_require__(10); var NodeAppender_1 = __webpack_require__(3); @@ -2930,7 +2974,7 @@ var StringArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.StringArrayRotateFunctionNode = StringArrayRotateFunctionNode; /***/ }, -/* 50 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2944,12 +2988,12 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var ObfuscationEvents_1 = __webpack_require__(107); -var StringArrayCallsWrapper_1 = __webpack_require__(47); -var StringArrayNode_1 = __webpack_require__(48); -var StringArrayRotateFunctionNode_1 = __webpack_require__(49); +var ObfuscationEvents_1 = __webpack_require__(1); +var StringArrayCallsWrapper_1 = __webpack_require__(48); +var StringArrayNode_1 = __webpack_require__(49); +var StringArrayRotateFunctionNode_1 = __webpack_require__(50); var AbstractCustomNodesFactory_1 = __webpack_require__(12); -var StringArrayStorage_1 = __webpack_require__(77); +var StringArrayStorage_1 = __webpack_require__(79); var Utils_1 = __webpack_require__(0); var StringArrayCustomNodesFactory = function (_AbstractCustomNodesF) { @@ -2993,7 +3037,7 @@ var StringArrayCustomNodesFactory = function (_AbstractCustomNodesF) { exports.StringArrayCustomNodesFactory = StringArrayCustomNodesFactory; /***/ }, -/* 51 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3006,7 +3050,36 @@ exports.VisitorDirection = Utils_1.Utils.strEnumify({ }); /***/ }, -/* 52 */ +/* 53 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"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; } + +var events_1 = __webpack_require__(103); + +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); + +exports.ObfuscationEventEmitter = ObfuscationEventEmitter; + +/***/ }, +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3023,9 +3096,9 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); var AbstractNodeTransformer_1 = __webpack_require__(9); -var BinaryExpressionControlFlowReplacer_1 = __webpack_require__(54); -var ControlFlowStorage_1 = __webpack_require__(76); -var ControlFlowStorageNode_1 = __webpack_require__(38); +var BinaryExpressionControlFlowReplacer_1 = __webpack_require__(56); +var ControlFlowStorage_1 = __webpack_require__(77); +var ControlFlowStorageNode_1 = __webpack_require__(39); var Node_1 = __webpack_require__(2); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -3034,10 +3107,10 @@ var NodeUtils_1 = __webpack_require__(8); var FunctionControlFlowTransformer = function (_AbstractNodeTransfor) { _inherits(FunctionControlFlowTransformer, _AbstractNodeTransfor); - function FunctionControlFlowTransformer(nodes, options) { + function FunctionControlFlowTransformer(customNodesStorage, options) { _classCallCheck(this, FunctionControlFlowTransformer); - return _possibleConstructorReturn(this, (FunctionControlFlowTransformer.__proto__ || Object.getPrototypeOf(FunctionControlFlowTransformer)).call(this, nodes, options)); + return _possibleConstructorReturn(this, (FunctionControlFlowTransformer.__proto__ || Object.getPrototypeOf(FunctionControlFlowTransformer)).call(this, customNodesStorage, options)); } _createClass(FunctionControlFlowTransformer, [{ @@ -3062,7 +3135,7 @@ var FunctionControlFlowTransformer = function (_AbstractNodeTransfor) { if (!controlFlowReplacer) { return; } - var controlFlowStorageCallCustomNode = new controlFlowReplacer(_this2.nodes, _this2.options).replace(node, parentNode, controlFlowStorage, controlFlowStorageCustomNodeName); + var controlFlowStorageCallCustomNode = new controlFlowReplacer(_this2.customNodesStorage, _this2.options).replace(node, parentNode, controlFlowStorage, controlFlowStorageCustomNodeName); if (!controlFlowStorageCallCustomNode) { return; } @@ -3085,7 +3158,7 @@ FunctionControlFlowTransformer.controlFlowReplacers = new Map([[NodeType_1.NodeT exports.FunctionControlFlowTransformer = FunctionControlFlowTransformer; /***/ }, -/* 53 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3098,10 +3171,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var Utils_1 = __webpack_require__(0); var AbstractControlFlowReplacer = function () { - function AbstractControlFlowReplacer(nodes, options) { + function AbstractControlFlowReplacer(customNodesStorage, options) { _classCallCheck(this, AbstractControlFlowReplacer); - this.nodes = nodes; + this.customNodesStorage = customNodesStorage; this.options = options; } @@ -3121,7 +3194,7 @@ var AbstractControlFlowReplacer = function () { exports.AbstractControlFlowReplacer = AbstractControlFlowReplacer; /***/ }, -/* 54 */ +/* 56 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3136,9 +3209,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var escodegen = __webpack_require__(11); -var AbstractControlFlowReplacer_1 = __webpack_require__(53); -var BinaryExpressionFunctionNode_1 = __webpack_require__(36); -var ControlFlowStorageCallNode_1 = __webpack_require__(37); +var AbstractControlFlowReplacer_1 = __webpack_require__(55); +var BinaryExpressionFunctionNode_1 = __webpack_require__(37); +var ControlFlowStorageCallNode_1 = __webpack_require__(38); var BinaryExpressionControlFlowReplacer = function (_AbstractControlFlowR) { _inherits(BinaryExpressionControlFlowReplacer, _AbstractControlFlowR); @@ -3171,7 +3244,7 @@ var BinaryExpressionControlFlowReplacer = function (_AbstractControlFlowR) { exports.BinaryExpressionControlFlowReplacer = BinaryExpressionControlFlowReplacer; /***/ }, -/* 55 */ +/* 57 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3184,7 +3257,7 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var NodeType_1 = __webpack_require__(6); -var FunctionControlFlowTransformer_1 = __webpack_require__(52); +var FunctionControlFlowTransformer_1 = __webpack_require__(54); var AbstractNodeTransformersFactory_1 = __webpack_require__(22); var NodeControlFlowTransformersFactory = function (_AbstractNodeTransfor) { @@ -3205,7 +3278,7 @@ var NodeControlFlowTransformersFactory = function (_AbstractNodeTransfor) { exports.NodeControlFlowTransformersFactory = NodeControlFlowTransformersFactory; /***/ }, -/* 56 */ +/* 58 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3229,12 +3302,12 @@ var NodeUtils_1 = __webpack_require__(8); var CatchClauseObfuscator = function (_AbstractNodeTransfor) { _inherits(CatchClauseObfuscator, _AbstractNodeTransfor); - function CatchClauseObfuscator(nodes, options) { + function CatchClauseObfuscator(customNodesStorage, options) { _classCallCheck(this, CatchClauseObfuscator); - var _this = _possibleConstructorReturn(this, (CatchClauseObfuscator.__proto__ || Object.getPrototypeOf(CatchClauseObfuscator)).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (CatchClauseObfuscator.__proto__ || Object.getPrototypeOf(CatchClauseObfuscator)).call(this, customNodesStorage, options)); - _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); + _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.customNodesStorage, _this.options); return _this; } @@ -3276,7 +3349,7 @@ var CatchClauseObfuscator = function (_AbstractNodeTransfor) { exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 57 */ +/* 59 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3300,12 +3373,12 @@ var NodeUtils_1 = __webpack_require__(8); var FunctionDeclarationObfuscator = function (_AbstractNodeTransfor) { _inherits(FunctionDeclarationObfuscator, _AbstractNodeTransfor); - function FunctionDeclarationObfuscator(nodes, options) { + function FunctionDeclarationObfuscator(customNodesStorage, options) { _classCallCheck(this, FunctionDeclarationObfuscator); - var _this = _possibleConstructorReturn(this, (FunctionDeclarationObfuscator.__proto__ || Object.getPrototypeOf(FunctionDeclarationObfuscator)).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (FunctionDeclarationObfuscator.__proto__ || Object.getPrototypeOf(FunctionDeclarationObfuscator)).call(this, customNodesStorage, options)); - _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); + _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.customNodesStorage, _this.options); return _this; } @@ -3351,7 +3424,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeTransfor) { exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 58 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3375,12 +3448,12 @@ var NodeUtils_1 = __webpack_require__(8); var FunctionObfuscator = function (_AbstractNodeTransfor) { _inherits(FunctionObfuscator, _AbstractNodeTransfor); - function FunctionObfuscator(nodes, options) { + function FunctionObfuscator(customNodesStorage, options) { _classCallCheck(this, FunctionObfuscator); - var _this = _possibleConstructorReturn(this, (FunctionObfuscator.__proto__ || Object.getPrototypeOf(FunctionObfuscator)).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (FunctionObfuscator.__proto__ || Object.getPrototypeOf(FunctionObfuscator)).call(this, customNodesStorage, options)); - _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); + _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.customNodesStorage, _this.options); return _this; } @@ -3432,7 +3505,7 @@ var FunctionObfuscator = function (_AbstractNodeTransfor) { exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 59 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3456,12 +3529,12 @@ var NodeUtils_1 = __webpack_require__(8); var LabeledStatementObfuscator = function (_AbstractNodeTransfor) { _inherits(LabeledStatementObfuscator, _AbstractNodeTransfor); - function LabeledStatementObfuscator(nodes, options) { + function LabeledStatementObfuscator(customNodesStorage, options) { _classCallCheck(this, LabeledStatementObfuscator); - var _this = _possibleConstructorReturn(this, (LabeledStatementObfuscator.__proto__ || Object.getPrototypeOf(LabeledStatementObfuscator)).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (LabeledStatementObfuscator.__proto__ || Object.getPrototypeOf(LabeledStatementObfuscator)).call(this, customNodesStorage, options)); - _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); + _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.customNodesStorage, _this.options); return _this; } @@ -3503,7 +3576,7 @@ var LabeledStatementObfuscator = function (_AbstractNodeTransfor) { exports.LabeledStatementObfuscator = LabeledStatementObfuscator; /***/ }, -/* 60 */ +/* 62 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3521,7 +3594,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var AbstractNodeTransformer_1 = __webpack_require__(9); -var BooleanLiteralReplacer_1 = __webpack_require__(66); +var BooleanLiteralReplacer_1 = __webpack_require__(68); var Node_1 = __webpack_require__(2); var NumberLiteralReplacer_1 = __webpack_require__(23); var StringLiteralReplacer_1 = __webpack_require__(19); @@ -3544,13 +3617,13 @@ var LiteralObfuscator = function (_AbstractNodeTransfor) { var content = void 0; switch (_typeof(literalNode.value)) { case 'boolean': - content = new BooleanLiteralReplacer_1.BooleanLiteralReplacer(this.nodes, this.options).replace(literalNode.value); + content = new BooleanLiteralReplacer_1.BooleanLiteralReplacer(this.customNodesStorage, this.options).replace(literalNode.value); break; case 'number': - content = new NumberLiteralReplacer_1.NumberLiteralReplacer(this.nodes, this.options).replace(literalNode.value); + content = new NumberLiteralReplacer_1.NumberLiteralReplacer(this.customNodesStorage, this.options).replace(literalNode.value); break; case 'string': - content = new StringLiteralReplacer_1.StringLiteralReplacer(this.nodes, this.options).replace(literalNode.value); + content = new StringLiteralReplacer_1.StringLiteralReplacer(this.customNodesStorage, this.options).replace(literalNode.value); break; default: return; @@ -3568,7 +3641,7 @@ var LiteralObfuscator = function (_AbstractNodeTransfor) { exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 61 */ +/* 63 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3626,7 +3699,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeTransfor) { var literalNode = { raw: '\'' + nodeValue + '\'', 'x-verbatim-property': { - content: new StringLiteralReplacer_1.StringLiteralReplacer(this.nodes, this.options).replace(nodeValue), + content: new StringLiteralReplacer_1.StringLiteralReplacer(this.customNodesStorage, this.options).replace(nodeValue), precedence: escodegen.Precedence.Primary }, type: NodeType_1.NodeType.Literal, @@ -3640,7 +3713,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeTransfor) { value: function obfuscateLiteralProperty(node) { if (typeof node.value === 'string' && !node['x-verbatim-property']) { node['x-verbatim-property'] = { - content: new StringLiteralReplacer_1.StringLiteralReplacer(this.nodes, this.options).replace(node.value), + content: new StringLiteralReplacer_1.StringLiteralReplacer(this.customNodesStorage, this.options).replace(node.value), precedence: escodegen.Precedence.Primary }; } @@ -3653,7 +3726,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeTransfor) { exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 62 */ +/* 64 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3696,7 +3769,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeTransfor) { enter: function enter(node) { if (Node_1.Node.isIdentifierNode(node) && !Utils_1.Utils.arrayContains(MethodDefinitionObfuscator.ignoredNames, node.name) && methodDefinitionNode.computed === false) { methodDefinitionNode.computed = true; - node.name = new StringLiteralReplacer_1.StringLiteralReplacer(_this2.nodes, _this2.options).replace(node.name); + node.name = new StringLiteralReplacer_1.StringLiteralReplacer(_this2.customNodesStorage, _this2.options).replace(node.name); return; } return estraverse.VisitorOption.Skip; @@ -3712,7 +3785,7 @@ MethodDefinitionObfuscator.ignoredNames = ['constructor']; exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 63 */ +/* 65 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3798,7 +3871,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeTransfor) { exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 64 */ +/* 66 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3822,12 +3895,12 @@ var NodeUtils_1 = __webpack_require__(8); var VariableDeclarationObfuscator = function (_AbstractNodeTransfor) { _inherits(VariableDeclarationObfuscator, _AbstractNodeTransfor); - function VariableDeclarationObfuscator(nodes, options) { + function VariableDeclarationObfuscator(customNodesStorage, options) { _classCallCheck(this, VariableDeclarationObfuscator); - var _this = _possibleConstructorReturn(this, (VariableDeclarationObfuscator.__proto__ || Object.getPrototypeOf(VariableDeclarationObfuscator)).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (VariableDeclarationObfuscator.__proto__ || Object.getPrototypeOf(VariableDeclarationObfuscator)).call(this, customNodesStorage, options)); - _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); + _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.customNodesStorage, _this.options); return _this; } @@ -3876,7 +3949,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeTransfor) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 65 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3889,15 +3962,15 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var NodeType_1 = __webpack_require__(6); -var CatchClauseObfuscator_1 = __webpack_require__(56); -var FunctionDeclarationObfuscator_1 = __webpack_require__(57); -var FunctionObfuscator_1 = __webpack_require__(58); -var LabeledStatementObfuscator_1 = __webpack_require__(59); -var LiteralObfuscator_1 = __webpack_require__(60); -var MemberExpressionObfuscator_1 = __webpack_require__(61); -var MethodDefinitionObfuscator_1 = __webpack_require__(62); -var ObjectExpressionObfuscator_1 = __webpack_require__(63); -var VariableDeclarationObfuscator_1 = __webpack_require__(64); +var CatchClauseObfuscator_1 = __webpack_require__(58); +var FunctionDeclarationObfuscator_1 = __webpack_require__(59); +var FunctionObfuscator_1 = __webpack_require__(60); +var LabeledStatementObfuscator_1 = __webpack_require__(61); +var LiteralObfuscator_1 = __webpack_require__(62); +var MemberExpressionObfuscator_1 = __webpack_require__(63); +var MethodDefinitionObfuscator_1 = __webpack_require__(64); +var ObjectExpressionObfuscator_1 = __webpack_require__(65); +var VariableDeclarationObfuscator_1 = __webpack_require__(66); var AbstractNodeTransformersFactory_1 = __webpack_require__(22); var NodeObfuscatorsFactory = function (_AbstractNodeTransfor) { @@ -3918,7 +3991,7 @@ var NodeObfuscatorsFactory = function (_AbstractNodeTransfor) { exports.NodeObfuscatorsFactory = NodeObfuscatorsFactory; /***/ }, -/* 66 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3957,7 +4030,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 67 */ +/* 69 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3978,12 +4051,12 @@ var __decorate = undefined && undefined.__decorate || function (decorators, targ var __metadata = undefined && undefined.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var class_validator_1 = __webpack_require__(99); -var TSourceMapMode_1 = __webpack_require__(97); -var TStringArrayEncoding_1 = __webpack_require__(98); +var class_validator_1 = __webpack_require__(101); +var TSourceMapMode_1 = __webpack_require__(99); +var TStringArrayEncoding_1 = __webpack_require__(100); var DefaultPreset_1 = __webpack_require__(24); -var OptionsNormalizer_1 = __webpack_require__(68); -var ValidationErrorsFormatter_1 = __webpack_require__(69); +var OptionsNormalizer_1 = __webpack_require__(70); +var ValidationErrorsFormatter_1 = __webpack_require__(71); var Options = function Options(inputOptions) { _classCallCheck(this, Options); @@ -4032,7 +4105,7 @@ exports.Options = Options; var _a, _b; /***/ }, -/* 68 */ +/* 70 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4199,7 +4272,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNo exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 69 */ +/* 71 */ /***/ function(module, exports) { "use strict"; @@ -4266,7 +4339,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 70 */ +/* 72 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4278,9 +4351,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(71); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(72); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(73); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(73); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(74); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(75); var Node_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(8); @@ -4358,7 +4431,7 @@ StackTraceAnalyzer.limitThreshold = 0.002; exports.StackTraceAnalyzer = StackTraceAnalyzer; /***/ }, -/* 71 */ +/* 73 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4417,7 +4490,7 @@ var FunctionDeclarationCalleeDataExtractor = function () { exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; /***/ }, -/* 72 */ +/* 74 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4479,7 +4552,7 @@ var FunctionExpressionCalleeDataExtractor = function () { exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; /***/ }, -/* 73 */ +/* 75 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4611,7 +4684,7 @@ var ObjectExpressionCalleeDataExtractor = function () { exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; /***/ }, -/* 74 */ +/* 76 */ /***/ function(module, exports) { "use strict"; @@ -4652,6 +4725,9 @@ var ArrayStorage = function () { value: function getStorage() { return this.storage; } + }, { + key: "initialize", + value: function initialize() {} }, { key: "set", value: function set(key, value) { @@ -4665,63 +4741,7 @@ var ArrayStorage = function () { exports.ArrayStorage = ArrayStorage; /***/ }, -/* 75 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var Utils_1 = __webpack_require__(0); - -var MapStorage = function () { - function MapStorage() { - _classCallCheck(this, MapStorage); - - this.storage = new Map(); - } - - _createClass(MapStorage, [{ - 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) { - return Utils_1.Utils.mapGetFirstKeyOf(this.storage, value); - } - }, { - key: "getLength", - value: function getLength() { - return Array.from(this.storage).length; - } - }, { - key: "getStorage", - value: function getStorage() { - return this.storage; - } - }, { - key: "set", - value: function set(key, value) { - this.storage.set(key, value); - } - }]); - - return MapStorage; -}(); - -exports.MapStorage = MapStorage; - -/***/ }, -/* 76 */ +/* 77 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4737,7 +4757,7 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var MapStorage_1 = __webpack_require__(75); +var MapStorage_1 = __webpack_require__(25); var ControlFlowStorage = function (_MapStorage_1$MapStor) { _inherits(ControlFlowStorage, _MapStorage_1$MapStor); @@ -4768,7 +4788,66 @@ var ControlFlowStorage = function (_MapStorage_1$MapStor) { exports.ControlFlowStorage = ControlFlowStorage; /***/ }, -/* 77 */ +/* 78 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +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; } + +var ConsoleOutputCustomNodesFactory_1 = __webpack_require__(36); +var DebugProtectionCustomNodesFactory_1 = __webpack_require__(43); +var DomainLockCustomNodesFactory_1 = __webpack_require__(45); +var MapStorage_1 = __webpack_require__(25); +var SelfDefendingCustomNodesFactory_1 = __webpack_require__(47); +var StringArrayCustomNodesFactory_1 = __webpack_require__(51); + +var CustomNodesStorage = function (_MapStorage_1$MapStor) { + _inherits(CustomNodesStorage, _MapStorage_1$MapStor); + + function CustomNodesStorage(options) { + _classCallCheck(this, CustomNodesStorage); + + var _this = _possibleConstructorReturn(this, (CustomNodesStorage.__proto__ || Object.getPrototypeOf(CustomNodesStorage)).call(this)); + + _this.options = options; + return _this; + } + + _createClass(CustomNodesStorage, [{ + key: 'initialize', + value: function initialize(obfuscationEventEmitter, stackTraceData) { + var _this2 = this; + + var customNodes = []; + CustomNodesStorage.customNodesFactories.forEach(function (customNodesFactoryConstructor) { + var customNodesFactory = new customNodesFactoryConstructor(_this2.options).initializeCustomNodes(obfuscationEventEmitter, stackTraceData); + if (!customNodesFactory) { + return; + } + customNodes.push.apply(customNodes, _toConsumableArray(customNodesFactory)); + }); + this.storage = new Map(customNodes); + } + }]); + + return CustomNodesStorage; +}(MapStorage_1.MapStorage); + +CustomNodesStorage.customNodesFactories = [DomainLockCustomNodesFactory_1.DomainLockCustomNodesFactory, SelfDefendingCustomNodesFactory_1.SelfDefendingCustomNodesFactory, ConsoleOutputCustomNodesFactory_1.ConsoleOutputCustomNodesFactory, DebugProtectionCustomNodesFactory_1.DebugProtectionCustomNodesFactory, StringArrayCustomNodesFactory_1.StringArrayCustomNodesFactory]; +exports.CustomNodesStorage = CustomNodesStorage; + +/***/ }, +/* 79 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4782,7 +4861,7 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var ArrayStorage_1 = __webpack_require__(74); +var ArrayStorage_1 = __webpack_require__(76); var Utils_1 = __webpack_require__(0); var StringArrayStorage = function (_ArrayStorage_1$Array) { @@ -4814,7 +4893,7 @@ var StringArrayStorage = function (_ArrayStorage_1$Array) { exports.StringArrayStorage = StringArrayStorage; /***/ }, -/* 78 */ +/* 80 */ /***/ function(module, exports) { "use strict"; @@ -4826,7 +4905,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 79 */ +/* 81 */ /***/ function(module, exports) { "use strict"; @@ -4838,7 +4917,7 @@ function Rc4Template() { exports.Rc4Template = Rc4Template; /***/ }, -/* 80 */ +/* 82 */ /***/ function(module, exports) { "use strict"; @@ -4850,7 +4929,7 @@ function SingleNodeCallControllerTemplate() { exports.SingleNodeCallControllerTemplate = SingleNodeCallControllerTemplate; /***/ }, -/* 81 */ +/* 83 */ /***/ function(module, exports) { "use strict"; @@ -4862,7 +4941,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 82 */ +/* 84 */ /***/ function(module, exports) { "use strict"; @@ -4874,7 +4953,7 @@ function BinaryExpressionFunctionTemplate() { exports.BinaryExpressionFunctionTemplate = BinaryExpressionFunctionTemplate; /***/ }, -/* 83 */ +/* 85 */ /***/ function(module, exports) { "use strict"; @@ -4886,7 +4965,7 @@ function ControlFlowStorageCallTemplate() { exports.ControlFlowStorageCallTemplate = ControlFlowStorageCallTemplate; /***/ }, -/* 84 */ +/* 86 */ /***/ function(module, exports) { "use strict"; @@ -4898,7 +4977,7 @@ function ControlFlowStorageTemplate() { exports.ControlFlowStorageTemplate = ControlFlowStorageTemplate; /***/ }, -/* 85 */ +/* 87 */ /***/ function(module, exports) { "use strict"; @@ -4910,7 +4989,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 86 */ +/* 88 */ /***/ function(module, exports) { "use strict"; @@ -4922,7 +5001,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 87 */ +/* 89 */ /***/ function(module, exports) { "use strict"; @@ -4934,7 +5013,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 88 */ +/* 90 */ /***/ function(module, exports) { "use strict"; @@ -4946,7 +5025,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 89 */ +/* 91 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4959,7 +5038,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 90 */ +/* 92 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4972,7 +5051,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 91 */ +/* 93 */ /***/ function(module, exports) { "use strict"; @@ -4984,7 +5063,7 @@ function StringArrayBase64DecodeNodeTemplate() { exports.StringArrayBase64DecodeNodeTemplate = StringArrayBase64DecodeNodeTemplate; /***/ }, -/* 92 */ +/* 94 */ /***/ function(module, exports) { "use strict"; @@ -4996,7 +5075,7 @@ function StringArrayCallsWrapperTemplate() { exports.StringArrayCallsWrapperTemplate = StringArrayCallsWrapperTemplate; /***/ }, -/* 93 */ +/* 95 */ /***/ function(module, exports) { "use strict"; @@ -5008,7 +5087,7 @@ function StringArrayRc4DecodeNodeTemplate() { exports.StringArrayRc4DecodeNodeTemplate = StringArrayRc4DecodeNodeTemplate; /***/ }, -/* 94 */ +/* 96 */ /***/ function(module, exports) { "use strict"; @@ -5020,7 +5099,7 @@ function StringArrayTemplate() { exports.StringArrayTemplate = StringArrayTemplate; /***/ }, -/* 95 */ +/* 97 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -5033,7 +5112,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 96 */ +/* 98 */ /***/ function(module, exports) { "use strict"; @@ -5044,53 +5123,59 @@ function StringArrayRotateFunctionTemplate() { } exports.StringArrayRotateFunctionTemplate = StringArrayRotateFunctionTemplate; -/***/ }, -/* 97 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -/***/ }, -/* 98 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - /***/ }, /* 99 */ /***/ function(module, exports) { -module.exports = require("class-validator"); +"use strict"; +"use strict"; /***/ }, /* 100 */ /***/ function(module, exports) { -module.exports = require("commander"); +"use strict"; +"use strict"; /***/ }, /* 101 */ /***/ function(module, exports) { -module.exports = require("fs"); +module.exports = require("class-validator"); /***/ }, /* 102 */ /***/ function(module, exports) { -module.exports = require("is-equal"); +module.exports = require("commander"); /***/ }, /* 103 */ /***/ function(module, exports) { +module.exports = require("events"); + +/***/ }, +/* 104 */ +/***/ function(module, exports) { + +module.exports = require("fs"); + +/***/ }, +/* 105 */ +/***/ function(module, exports) { + +module.exports = require("is-equal"); + +/***/ }, +/* 106 */ +/***/ function(module, exports) { + module.exports = require("mkdirp"); /***/ }, -/* 104 */, -/* 105 */ +/* 107 */, +/* 108 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -5098,58 +5183,10 @@ module.exports = require("mkdirp"); var JavaScriptObfuscator_1 = __webpack_require__(10); if (!global._babelPolyfill) { - __webpack_require__(28); + __webpack_require__(29); } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; -/***/ }, -/* 106 */ -/***/ function(module, exports) { - -module.exports = require("events"); - -/***/ }, -/* 107 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var Utils_1 = __webpack_require__(0); -exports.ObfuscationEvents = Utils_1.Utils.strEnumify({ - AfterObfuscation: 'afterObfuscation', - BeforeObfuscation: 'beforeObfuscation' -}); - -/***/ }, -/* 108 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"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; } - -var events_1 = __webpack_require__(106); - -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); - -exports.ObfuscationEventEmitter = ObfuscationEventEmitter; - /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index c331bf9c..bc5d16a3 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -1,7 +1,6 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { TCustomNodesFactory } from './types/TCustomNodesFactory'; import { TVisitorDirection } from './types/TVisitorDirection'; import { ICustomNode } from './interfaces/custom-nodes/ICustomNode'; @@ -11,41 +10,21 @@ import { IOptions } from './interfaces/IOptions'; import { INodeTransformer } from './interfaces/INodeTransformer'; import { INodeTransformersFactory } from './interfaces/INodeTransformersFactory'; import { IStackTraceAnalyzer } from './interfaces/stack-trace-analyzer/IStackTraceAnalyzer'; -import { IStackTraceData } from './interfaces/stack-trace-analyzer/IStackTraceData'; +import { IStorage } from './interfaces/IStorage'; import { ObfuscationEvents } from './enums/ObfuscationEvents'; import { VisitorDirection } from './enums/VisitorDirection'; -import { ConsoleOutputCustomNodesFactory } from './custom-nodes/console-output-nodes/factory/ConsoleOutputCustomNodesFactory'; -import { DebugProtectionCustomNodesFactory } from './custom-nodes/debug-protection-nodes/factory/DebugProtectionCustomNodesFactory'; -import { DomainLockCustomNodesFactory } from './custom-nodes/domain-lock-nodes/factory/DomainLockCustomNodesFactory'; import { NodeControlFlowTransformersFactory } from './node-transformers/node-control-flow-transformers/factory/NodeControlFlowTransformersFactory'; import { NodeObfuscatorsFactory } from './node-transformers/node-obfuscators/factory/NodeObfuscatorsFactory'; -import { SelfDefendingCustomNodesFactory } from './custom-nodes/self-defending-nodes/factory/SelfDefendingCustomNodesFactory'; -import { StringArrayCustomNodesFactory } from './custom-nodes/string-array-nodes/factory/StringArrayCustomNodesFactory'; +import { CustomNodesStorage } from './storages/custom-nodes/CustomNodesStorage'; import { Node } from './node/Node'; import { NodeUtils } from './node/NodeUtils'; import { StackTraceAnalyzer } from './stack-trace-analyzer/StackTraceAnalyzer'; import { ObfuscationEventEmitter } from './event-emitters/ObfuscationEventEmitter'; export class Obfuscator implements IObfuscator { - /** - * @type {TCustomNodesFactory[]} - */ - private static readonly customNodesFactories: TCustomNodesFactory[] = [ - DomainLockCustomNodesFactory, - SelfDefendingCustomNodesFactory, - ConsoleOutputCustomNodesFactory, - DebugProtectionCustomNodesFactory, - StringArrayCustomNodesFactory - ]; - - /** - * @type {Map} - */ - private customNodes: Map ; - /** * @type {IOptions} */ @@ -71,22 +50,23 @@ export class Obfuscator implements IObfuscator { const obfuscationEventEmitter: IObfuscationEventEmitter = new ObfuscationEventEmitter(); const stackTraceAnalyzer: IStackTraceAnalyzer = new StackTraceAnalyzer(); + const customNodesStorage: IStorage = new CustomNodesStorage(this.options); - this.initializeCustomNodes(obfuscationEventEmitter, stackTraceAnalyzer.analyze(astTree.body)); + customNodesStorage.initialize(obfuscationEventEmitter, stackTraceAnalyzer.analyze(astTree.body)); obfuscationEventEmitter.emit(ObfuscationEvents.BeforeObfuscation, astTree); // first pass: control flow flattening if (this.options.controlFlowFlattening) { this.transformAstTree(astTree, VisitorDirection.leave, new NodeControlFlowTransformersFactory( - this.customNodes, + customNodesStorage, this.options )); } // second pass: nodes obfuscation this.transformAstTree(astTree, VisitorDirection.enter, new NodeObfuscatorsFactory( - this.customNodes, + customNodesStorage, this.options )); @@ -95,31 +75,6 @@ export class Obfuscator implements IObfuscator { return astTree; } - /** - * @param obfuscationEventEmitter - * @param stackTraceData - */ - private initializeCustomNodes (obfuscationEventEmitter: IObfuscationEventEmitter, stackTraceData: IStackTraceData[]): void { - const customNodes: [string, ICustomNode][] = []; - - Obfuscator.customNodesFactories.forEach((customNodesFactoryConstructor: TCustomNodesFactory) => { - const customNodesFactory: Map | undefined = new customNodesFactoryConstructor( - this.options - ).initializeCustomNodes( - obfuscationEventEmitter, - stackTraceData - ); - - if (!customNodesFactory) { - return; - } - - customNodes.push(...customNodesFactory); - }); - - this.customNodes = new Map (customNodes); - } - /** * @param astTree * @param direction diff --git a/src/interfaces/IStorage.d.ts b/src/interfaces/IStorage.d.ts index 036c8545..b374f2f5 100644 --- a/src/interfaces/IStorage.d.ts +++ b/src/interfaces/IStorage.d.ts @@ -3,6 +3,7 @@ export interface IStorage { getKeyOf (value: T): string | number | null; getLength (): number; getStorage (): any; + initialize (...args: any[]): void; set (key: string | number | null, value: T): void; toString (): string; } diff --git a/src/node-transformers/AbstractNodeTransformer.ts b/src/node-transformers/AbstractNodeTransformer.ts index 71d84c6e..3951703c 100644 --- a/src/node-transformers/AbstractNodeTransformer.ts +++ b/src/node-transformers/AbstractNodeTransformer.ts @@ -3,12 +3,13 @@ import * as ESTree from 'estree'; import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { INodeTransformer } from '../interfaces/INodeTransformer'; import { IOptions } from '../interfaces/IOptions'; +import { IStorage } from '../interfaces/IStorage'; export abstract class AbstractNodeTransformer implements INodeTransformer { /** - * @type Map + * @type IStorage */ - protected readonly nodes: Map ; + protected readonly customNodesStorage: IStorage; /** * @type {IOptions} @@ -16,11 +17,11 @@ export abstract class AbstractNodeTransformer implements INodeTransformer { protected readonly options: IOptions; /** - * @param nodes + * @param customNodesStorage * @param options */ - constructor (nodes: Map , options: IOptions) { - this.nodes = nodes; + constructor (customNodesStorage: IStorage, options: IOptions) { + this.customNodesStorage = customNodesStorage; this.options = options; } diff --git a/src/node-transformers/AbstractNodeTransformersFactory.ts b/src/node-transformers/AbstractNodeTransformersFactory.ts index 3b05c25a..94272d00 100644 --- a/src/node-transformers/AbstractNodeTransformersFactory.ts +++ b/src/node-transformers/AbstractNodeTransformersFactory.ts @@ -4,6 +4,7 @@ import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { INodeTransformer } from '../interfaces/INodeTransformer'; import { INodeTransformersFactory } from '../interfaces/INodeTransformersFactory'; import { IOptions } from '../interfaces/IOptions'; +import { IStorage } from '../interfaces/IStorage'; export abstract class AbstractNodeTransformersFactory implements INodeTransformersFactory { /** @@ -12,9 +13,9 @@ export abstract class AbstractNodeTransformersFactory implements INodeTransforme protected abstract readonly nodeTransformers: Map ; /** - * @type Map + * @type IStorage */ - protected readonly customNodes: Map ; + protected readonly customNodesStorage: IStorage; /** * @type {IOptions} @@ -22,11 +23,11 @@ export abstract class AbstractNodeTransformersFactory implements INodeTransforme protected readonly options: IOptions; /** - * @param customNodes + * @param customNodesStorage * @param options */ - constructor (customNodes: Map , options: IOptions) { - this.customNodes = customNodes; + constructor (customNodesStorage: IStorage, options: IOptions) { + this.customNodesStorage = customNodesStorage; this.options = options; } @@ -40,7 +41,7 @@ export abstract class AbstractNodeTransformersFactory implements INodeTransforme nodeTransformers.forEach((transformer: TNodeTransformer) => { instancesArray.push( - new transformer(this.customNodes, this.options) + new transformer(this.customNodesStorage, this.options) ); }); diff --git a/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts b/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts index 90f61fb3..20e21a3e 100644 --- a/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts +++ b/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts @@ -28,11 +28,11 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { ]); /** - * @param nodes + * @param customNodesStorage * @param options */ - constructor (nodes: Map , options: IOptions) { - super(nodes, options); + constructor (customNodesStorage: IStorage, options: IOptions) { + super(customNodesStorage, options); } /** @@ -65,7 +65,7 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { } const controlFlowStorageCallCustomNode: ICustomNode | undefined = new controlFlowReplacer( - this.nodes, + this.customNodesStorage, this.options ).replace(node, parentNode, controlFlowStorage, controlFlowStorageCustomNodeName); diff --git a/src/node-transformers/node-control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts b/src/node-transformers/node-control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts index 18f55048..64615257 100644 --- a/src/node-transformers/node-control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts +++ b/src/node-transformers/node-control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts @@ -9,9 +9,9 @@ import { Utils } from '../../../Utils'; export abstract class AbstractControlFlowReplacer implements IControlFlowReplacer { /** - * @type Map + * @type IStorage */ - protected readonly nodes: Map ; + protected readonly customNodesStorage: IStorage; /** * @type {IOptions} @@ -19,11 +19,11 @@ export abstract class AbstractControlFlowReplacer implements IControlFlowReplace protected readonly options : IOptions; /** - * @param nodes + * @param customNodesStorage * @param options */ - constructor (nodes: Map , options: IOptions) { - this.nodes = nodes; + constructor (customNodesStorage: IStorage, options: IOptions) { + this.customNodesStorage = customNodesStorage; this.options = options; } diff --git a/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts b/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts index d91360e0..90153b87 100644 --- a/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts @@ -3,6 +3,7 @@ import * as ESTree from 'estree'; import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../interfaces/IOptions'; +import { IStorage } from '../../interfaces/IStorage'; import { NodeType } from '../../enums/NodeType'; @@ -26,13 +27,13 @@ export class CatchClauseObfuscator extends AbstractNodeTransformer { private readonly identifierReplacer: IdentifierReplacer; /** - * @param nodes + * @param customNodesStorage * @param options */ - constructor(nodes: Map , options: IOptions) { - super(nodes, options); + constructor(customNodesStorage: IStorage, options: IOptions) { + super(customNodesStorage, options); - this.identifierReplacer = new IdentifierReplacer(this.nodes, this.options); + this.identifierReplacer = new IdentifierReplacer(this.customNodesStorage, this.options); } /** diff --git a/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts index 98fb41c7..6739605c 100644 --- a/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -5,6 +5,7 @@ import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../interfaces/IOptions'; +import { IStorage } from '../../interfaces/IStorage'; import { NodeType } from '../../enums/NodeType'; @@ -29,13 +30,13 @@ export class FunctionDeclarationObfuscator extends AbstractNodeTransformer { private readonly identifierReplacer: IdentifierReplacer; /** - * @param nodes + * @param customNodesStorage * @param options */ - constructor(nodes: Map , options: IOptions) { - super(nodes, options); + constructor(customNodesStorage: IStorage, options: IOptions) { + super(customNodesStorage, options); - this.identifierReplacer = new IdentifierReplacer(this.nodes, this.options); + this.identifierReplacer = new IdentifierReplacer(this.customNodesStorage, this.options); } /** diff --git a/src/node-transformers/node-obfuscators/FunctionObfuscator.ts b/src/node-transformers/node-obfuscators/FunctionObfuscator.ts index a8143226..67b746d6 100644 --- a/src/node-transformers/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-transformers/node-obfuscators/FunctionObfuscator.ts @@ -3,6 +3,7 @@ import * as ESTree from 'estree'; import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../interfaces/IOptions'; +import { IStorage } from '../../interfaces/IStorage'; import { NodeType } from '../../enums/NodeType'; @@ -26,13 +27,13 @@ export class FunctionObfuscator extends AbstractNodeTransformer { private readonly identifierReplacer: IdentifierReplacer; /** - * @param nodes + * @param customNodesStorage * @param options */ - constructor(nodes: Map , options: IOptions) { - super(nodes, options); + constructor(customNodesStorage: IStorage, options: IOptions) { + super(customNodesStorage, options); - this.identifierReplacer = new IdentifierReplacer(this.nodes, this.options); + this.identifierReplacer = new IdentifierReplacer(this.customNodesStorage, this.options); } /** diff --git a/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts b/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts index 1486f905..dd683e0f 100644 --- a/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts +++ b/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts @@ -3,6 +3,7 @@ import * as ESTree from 'estree'; import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../interfaces/IOptions'; +import { IStorage } from '../../interfaces/IStorage'; import { NodeType } from '../../enums/NodeType'; @@ -34,13 +35,13 @@ export class LabeledStatementObfuscator extends AbstractNodeTransformer { private readonly identifierReplacer: IdentifierReplacer; /** - * @param nodes + * @param customNodesStorage * @param options */ - constructor(nodes: Map , options: IOptions) { - super(nodes, options); + constructor(customNodesStorage: IStorage, options: IOptions) { + super(customNodesStorage, options); - this.identifierReplacer = new IdentifierReplacer(this.nodes, this.options); + this.identifierReplacer = new IdentifierReplacer(this.customNodesStorage, this.options); } /** diff --git a/src/node-transformers/node-obfuscators/LiteralObfuscator.ts b/src/node-transformers/node-obfuscators/LiteralObfuscator.ts index f1986a5f..97a577f9 100644 --- a/src/node-transformers/node-obfuscators/LiteralObfuscator.ts +++ b/src/node-transformers/node-obfuscators/LiteralObfuscator.ts @@ -21,19 +21,19 @@ export class LiteralObfuscator extends AbstractNodeTransformer { switch (typeof literalNode.value) { case 'boolean': - content = new BooleanLiteralReplacer(this.nodes, this.options) + content = new BooleanLiteralReplacer(this.customNodesStorage, this.options) .replace(literalNode.value); break; case 'number': - content = new NumberLiteralReplacer(this.nodes, this.options) + content = new NumberLiteralReplacer(this.customNodesStorage, this.options) .replace(literalNode.value); break; case 'string': - content = new StringLiteralReplacer(this.nodes, this.options) + content = new StringLiteralReplacer(this.customNodesStorage, this.options) .replace(literalNode.value); break; diff --git a/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts b/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts index 7007ccce..ae181f1a 100644 --- a/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts +++ b/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts @@ -50,7 +50,7 @@ export class MemberExpressionObfuscator extends AbstractNodeTransformer { const literalNode: ESTree.Literal = { raw: `'${nodeValue}'`, 'x-verbatim-property': { - content : new StringLiteralReplacer(this.nodes, this.options).replace(nodeValue), + content : new StringLiteralReplacer(this.customNodesStorage, this.options).replace(nodeValue), precedence: escodegen.Precedence.Primary }, type: NodeType.Literal, @@ -74,7 +74,7 @@ export class MemberExpressionObfuscator extends AbstractNodeTransformer { private obfuscateLiteralProperty (node: ESTree.Literal): void { if (typeof node.value === 'string' && !node['x-verbatim-property']) { node['x-verbatim-property'] = { - content : new StringLiteralReplacer(this.nodes, this.options).replace(node.value), + content : new StringLiteralReplacer(this.customNodesStorage, this.options).replace(node.value), precedence: escodegen.Precedence.Primary }; } diff --git a/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts b/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts index b632699d..a2aa330c 100644 --- a/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts +++ b/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts @@ -39,7 +39,7 @@ export class MethodDefinitionObfuscator extends AbstractNodeTransformer { methodDefinitionNode.computed === false ) { methodDefinitionNode.computed = true; - node.name = new StringLiteralReplacer(this.nodes, this.options) + node.name = new StringLiteralReplacer(this.customNodesStorage, this.options) .replace(node.name); return; diff --git a/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts index b51e8ca2..4146895b 100644 --- a/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts @@ -5,6 +5,7 @@ import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../interfaces/IOptions'; +import { IStorage } from '../../interfaces/IStorage'; import { NodeType } from '../../enums/NodeType'; @@ -30,13 +31,13 @@ export class VariableDeclarationObfuscator extends AbstractNodeTransformer { private readonly identifierReplacer: IdentifierReplacer; /** - * @param nodes + * @param customNodesStorage * @param options */ - constructor(nodes: Map , options: IOptions) { - super(nodes, options); + constructor(customNodesStorage: IStorage, options: IOptions) { + super(customNodesStorage, options); - this.identifierReplacer = new IdentifierReplacer(this.nodes, this.options); + this.identifierReplacer = new IdentifierReplacer(this.customNodesStorage, this.options); } /** diff --git a/src/node-transformers/node-obfuscators/replacers/AbstractReplacer.ts b/src/node-transformers/node-obfuscators/replacers/AbstractReplacer.ts index f8f25743..c3dfd69d 100644 --- a/src/node-transformers/node-obfuscators/replacers/AbstractReplacer.ts +++ b/src/node-transformers/node-obfuscators/replacers/AbstractReplacer.ts @@ -1,12 +1,13 @@ import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../../interfaces/IOptions'; import { IReplacer } from '../../../interfaces/IReplacer'; +import { IStorage } from '../../../interfaces/IStorage'; export abstract class AbstractReplacer implements IReplacer { /** - * @type Map + * @type IStorage */ - protected readonly nodes: Map ; + protected readonly customNodesStorage: IStorage; /** * @type {IOptions} @@ -14,11 +15,11 @@ export abstract class AbstractReplacer implements IReplacer { protected readonly options : IOptions; /** - * @param nodes + * @param customNodesStorage * @param options */ - constructor (nodes: Map , options: IOptions) { - this.nodes = nodes; + constructor (customNodesStorage: IStorage, options: IOptions) { + this.customNodesStorage = customNodesStorage; this.options = options; } diff --git a/src/node-transformers/node-obfuscators/replacers/StringLiteralReplacer.ts b/src/node-transformers/node-obfuscators/replacers/StringLiteralReplacer.ts index 37165126..0ff4a601 100644 --- a/src/node-transformers/node-obfuscators/replacers/StringLiteralReplacer.ts +++ b/src/node-transformers/node-obfuscators/replacers/StringLiteralReplacer.ts @@ -42,11 +42,7 @@ export class StringLiteralReplacer extends AbstractReplacer { * @returns {string} */ private replaceStringLiteralWithStringArrayCall (value: string): string { - const stringArrayNode: ICustomNodeWithData = this.nodes.get('stringArrayNode'); - - if (!stringArrayNode) { - throw new ReferenceError('`stringArrayNode` node is not found in Map with custom nodes.'); - } + const stringArrayNode: ICustomNodeWithData = this.customNodesStorage.get('stringArrayNode'); let rc4Key: string = ''; @@ -79,12 +75,8 @@ export class StringLiteralReplacer extends AbstractReplacer { stringArray.set(null, value); } - const stringArrayCallsWrapper: ICustomNodeWithIdentifier = this.nodes.get('stringArrayCallsWrapper'); - const hexadecimalIndex: string = new NumberLiteralReplacer(this.nodes, this.options).replace(indexOfValue); - - if (!stringArrayCallsWrapper) { - throw new ReferenceError('`stringArrayCallsWrapper` node is not found in Map with custom node.'); - } + const stringArrayCallsWrapper: ICustomNodeWithIdentifier = this.customNodesStorage.get('stringArrayCallsWrapper'); + const hexadecimalIndex: string = new NumberLiteralReplacer(this.customNodesStorage, this.options).replace(indexOfValue); if (this.options.stringArrayEncoding === StringArrayEncoding.rc4) { return `${stringArrayCallsWrapper.getNodeIdentifier()}('${hexadecimalIndex}', '${Utils.stringToUnicodeEscapeSequence(rc4Key)}')`; diff --git a/src/storages/ArrayStorage.ts b/src/storages/ArrayStorage.ts index 1c6b452a..6f902dce 100644 --- a/src/storages/ArrayStorage.ts +++ b/src/storages/ArrayStorage.ts @@ -42,6 +42,11 @@ export abstract class ArrayStorage implements IStorage { return this.storage; } + /** + * @param args + */ + public initialize (...args: any[]): void {} + /** * @param key * @param value diff --git a/src/storages/MapStorage.ts b/src/storages/MapStorage.ts index 9d7944a6..d74feb0b 100644 --- a/src/storages/MapStorage.ts +++ b/src/storages/MapStorage.ts @@ -44,6 +44,11 @@ export abstract class MapStorage implements IStorage { return this.storage; } + /** + * @param args + */ + public initialize (...args: any[]): void {} + /** * @param key * @param value diff --git a/src/storages/custom-nodes/CustomNodesStorage.ts b/src/storages/custom-nodes/CustomNodesStorage.ts new file mode 100644 index 00000000..e563b2a9 --- /dev/null +++ b/src/storages/custom-nodes/CustomNodesStorage.ts @@ -0,0 +1,64 @@ +import { TCustomNodesFactory } from '../../types/TCustomNodesFactory'; + +import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; +import { IObfuscationEventEmitter } from '../../interfaces/IObfuscationEventEmitter'; +import { IOptions } from '../../interfaces/IOptions'; +import { IStackTraceData } from '../../interfaces/stack-trace-analyzer/IStackTraceData'; + +import { ConsoleOutputCustomNodesFactory } from '../../custom-nodes/console-output-nodes/factory/ConsoleOutputCustomNodesFactory'; +import { DebugProtectionCustomNodesFactory } from '../../custom-nodes/debug-protection-nodes/factory/DebugProtectionCustomNodesFactory'; +import { DomainLockCustomNodesFactory } from '../../custom-nodes/domain-lock-nodes/factory/DomainLockCustomNodesFactory'; +import { MapStorage } from '../MapStorage'; +import { SelfDefendingCustomNodesFactory } from '../../custom-nodes/self-defending-nodes/factory/SelfDefendingCustomNodesFactory'; +import { StringArrayCustomNodesFactory } from '../../custom-nodes/string-array-nodes/factory/StringArrayCustomNodesFactory'; + +export class CustomNodesStorage extends MapStorage { + /** + * @type {TCustomNodesFactory[]} + */ + private static readonly customNodesFactories: TCustomNodesFactory[] = [ + DomainLockCustomNodesFactory, + SelfDefendingCustomNodesFactory, + ConsoleOutputCustomNodesFactory, + DebugProtectionCustomNodesFactory, + StringArrayCustomNodesFactory + ]; + + /** + * @type {IOptions} + */ + private readonly options: IOptions; + + /** + * @param options + */ + constructor (options: IOptions) { + super(); + + this.options = options; + } + /** + * @param obfuscationEventEmitter + * @param stackTraceData + */ + public initialize (obfuscationEventEmitter: IObfuscationEventEmitter, stackTraceData: IStackTraceData[]): void { + const customNodes: [string, ICustomNode][] = []; + + CustomNodesStorage.customNodesFactories.forEach((customNodesFactoryConstructor: TCustomNodesFactory) => { + const customNodesFactory: Map | undefined = new customNodesFactoryConstructor( + this.options + ).initializeCustomNodes( + obfuscationEventEmitter, + stackTraceData + ); + + if (!customNodesFactory) { + return; + } + + customNodes.push(...customNodesFactory); + }); + + this.storage = new Map (customNodes); + } +} diff --git a/src/types/TControlFlowReplacer.d.ts b/src/types/TControlFlowReplacer.d.ts index b80db1e5..ef54b014 100644 --- a/src/types/TControlFlowReplacer.d.ts +++ b/src/types/TControlFlowReplacer.d.ts @@ -1,5 +1,6 @@ import { IControlFlowReplacer } from '../interfaces/IControlFlowReplacer'; import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../interfaces/IOptions'; +import { IStorage } from '../interfaces/IStorage'; -export type TControlFlowReplacer = (new (nodes: Map , options: IOptions) => IControlFlowReplacer); +export type TControlFlowReplacer = (new (customNodesStorage: IStorage, options: IOptions) => IControlFlowReplacer); diff --git a/src/types/TNodeTransformer.d.ts b/src/types/TNodeTransformer.d.ts index 2483c600..e7c1a05f 100644 --- a/src/types/TNodeTransformer.d.ts +++ b/src/types/TNodeTransformer.d.ts @@ -1,5 +1,6 @@ import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { INodeTransformer } from '../interfaces/INodeTransformer'; import { IOptions } from '../interfaces/IOptions'; +import { IStorage } from '../interfaces/IStorage'; -export type TNodeTransformer = (new (nodes: Map , options: IOptions) => INodeTransformer); +export type TNodeTransformer = (new (customNodesStorage: IStorage, options: IOptions) => INodeTransformer); diff --git a/test/fixtures/compile-performance.js b/test/fixtures/compile-performance.js index 21682938..6216e6ff 100644 --- a/test/fixtures/compile-performance.js +++ b/test/fixtures/compile-performance.js @@ -14892,7 +14892,7 @@ // Transform ICU messages to angular directives var expandedHtmlAst = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_10__ml_parser_icu_ast_expander__["a" /* expandNodes */])(htmlAstWithErrors.rootNodes); errors.push.apply(errors, expandedHtmlAst.errors); - htmlAstWithErrors = new __WEBPACK_IMPORTED_MODULE_9__ml_parser_html_parser__["a" /* ParseTreeResult */](expandedHtmlAst.nodes, errors); + htmlAstWithErrors = new __WEBPACK_IMPORTED_MODULE_9__ml_parser_html_parser__["a" /* ParseTreeResult */](expandedHtmlAst.customNodesStorage, errors); } if (htmlAstWithErrors.rootNodes.length > 0) { var uniqDirectives = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__compile_metadata__["f" /* removeIdentifierDuplicates */])(directives); @@ -20398,7 +20398,7 @@ * found in the LICENSE file at https://angular.io/license */ function digestMessage(message) { - return sha1(serializeNodes(message.nodes).join('') + ("[" + message.meaning + "]")); + return sha1(serializeNodes(message.customNodesStorage).join('') + ("[" + message.meaning + "]")); } /** * Serialize the i18n ast to something xml-like in order to generate an UID. @@ -30516,7 +30516,7 @@ var significantChildren = directChildren.reduce(function (count, node) { return count + (node instanceof __WEBPACK_IMPORTED_MODULE_0__ml_parser_ast__["a" /* Comment */] ? 0 : 1); }, 0); if (significantChildren == 1) { for (var i = this._messages.length - 1; i >= startIndex; i--) { - var ast = this._messages[i].nodes; + var ast = this._messages[i].customNodesStorage; if (!(ast.length == 1 && ast[0] instanceof __WEBPACK_IMPORTED_MODULE_3__i18n_ast__["f" /* Text */])) { this._messages.splice(i, 1); break; @@ -30876,7 +30876,7 @@ Object.keys(messageMap).forEach(function (id) { var message = messageMap[id]; var transUnit = new __WEBPACK_IMPORTED_MODULE_5__xml_helper__["b" /* Tag */](_UNIT_TAG, { id: id, datatype: 'html' }); - transUnit.children.push(_CR(8), new __WEBPACK_IMPORTED_MODULE_5__xml_helper__["b" /* Tag */](_SOURCE_TAG, {}, visitor.serialize(message.nodes)), _CR(8), new __WEBPACK_IMPORTED_MODULE_5__xml_helper__["b" /* Tag */](_TARGET_TAG)); + transUnit.children.push(_CR(8), new __WEBPACK_IMPORTED_MODULE_5__xml_helper__["b" /* Tag */](_SOURCE_TAG, {}, visitor.serialize(message.customNodesStorage)), _CR(8), new __WEBPACK_IMPORTED_MODULE_5__xml_helper__["b" /* Tag */](_TARGET_TAG)); if (message.description) { transUnit.children.push(_CR(8), new __WEBPACK_IMPORTED_MODULE_5__xml_helper__["b" /* Tag */]('note', { priority: '1', from: 'description' }, [new __WEBPACK_IMPORTED_MODULE_5__xml_helper__["a" /* Text */](message.description)])); } @@ -31109,7 +31109,7 @@ if (message.meaning) { attrs['meaning'] = message.meaning; } - rootNode.children.push(new __WEBPACK_IMPORTED_MODULE_1__xml_helper__["a" /* Text */](' '), new __WEBPACK_IMPORTED_MODULE_1__xml_helper__["b" /* Tag */](_MESSAGE_TAG, attrs, visitor.serialize(message.nodes)), new __WEBPACK_IMPORTED_MODULE_1__xml_helper__["a" /* Text */]('\n')); + rootNode.children.push(new __WEBPACK_IMPORTED_MODULE_1__xml_helper__["a" /* Text */](' '), new __WEBPACK_IMPORTED_MODULE_1__xml_helper__["b" /* Tag */](_MESSAGE_TAG, attrs, visitor.serialize(message.customNodesStorage)), new __WEBPACK_IMPORTED_MODULE_1__xml_helper__["a" /* Text */]('\n')); }); return __WEBPACK_IMPORTED_MODULE_1__xml_helper__["c" /* serialize */]([ new __WEBPACK_IMPORTED_MODULE_1__xml_helper__["d" /* Declaration */]({ version: '1.0', encoding: 'UTF-8' }), @@ -34513,7 +34513,7 @@ function finishView(view, targetStatements) { view.afterNodes(); createViewTopLevelStmts(view, targetStatements); - view.nodes.forEach(function (node) { + view.customNodesStorage.forEach(function (node) { if (node instanceof __WEBPACK_IMPORTED_MODULE_10__compile_element__["a" /* CompileElement */] && node.hasEmbeddedView) { finishView(node.embeddedView, targetStatements); } @@ -34567,17 +34567,17 @@ return this._visitText(ast, ast.value, parent); }; ViewBuilderVisitor.prototype._visitText = function (ast, value, parent) { - var fieldName = "_text_" + this.view.nodes.length; + var fieldName = "_text_" + this.view.customNodesStorage.length; this.view.fields.push(new __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["s" /* ClassField */](fieldName, __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["c" /* importType */](this.view.genConfig.renderTypes.renderText))); var renderNode = __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["n" /* THIS_EXPR */].prop(fieldName); - var compileNode = new __WEBPACK_IMPORTED_MODULE_10__compile_element__["b" /* CompileNode */](parent, this.view, this.view.nodes.length, renderNode, ast); + var compileNode = new __WEBPACK_IMPORTED_MODULE_10__compile_element__["b" /* CompileNode */](parent, this.view, this.view.customNodesStorage.length, renderNode, ast); var createRenderNode = __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["n" /* THIS_EXPR */].prop(fieldName) .set(__WEBPACK_IMPORTED_MODULE_12__constants__["c" /* ViewProperties */].renderer.callMethod('createText', [ this._getParentRenderNode(parent), __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["a" /* literal */](value), - this.view.createMethod.resetDebugInfoExpr(this.view.nodes.length, ast) + this.view.createMethod.resetDebugInfoExpr(this.view.customNodesStorage.length, ast) ])) .toStmt(); - this.view.nodes.push(compileNode); + this.view.customNodesStorage.push(compileNode); this.view.createMethod.addStmt(createRenderNode); this._addRootNodeAndProject(compileNode); return renderNode; @@ -34612,7 +34612,7 @@ }; ViewBuilderVisitor.prototype.visitElement = function (ast, parent) { var _this = this; - var nodeIndex = this.view.nodes.length; + var nodeIndex = this.view.customNodesStorage.length; var createRenderNodeExpr; var debugContextExpr = this.view.createMethod.resetDebugInfoExpr(nodeIndex, ast); if (nodeIndex === 0 && this.view.viewType === __WEBPACK_IMPORTED_MODULE_7__private_import_core__["j" /* ViewType */].HOST) { @@ -34645,7 +34645,7 @@ } } var compileElement = new __WEBPACK_IMPORTED_MODULE_10__compile_element__["a" /* CompileElement */](parent, this.view, nodeIndex, renderNode, ast, component, directives, ast.providers, ast.hasViewContainer, false, ast.references); - this.view.nodes.push(compileElement); + this.view.customNodesStorage.push(compileElement); var compViewExpr = null; if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__facade_lang__["a" /* isPresent */])(component)) { var nestedComponentIdentifier = new __WEBPACK_IMPORTED_MODULE_2__compile_metadata__["a" /* CompileIdentifierMetadata */]({ name: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_13__util__["d" /* getViewFactoryName */])(component, 0) }); @@ -34667,7 +34667,7 @@ compileElement.beforeChildren(); this._addRootNodeAndProject(compileElement); __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__template_parser_template_ast__["c" /* templateVisitAll */])(this, ast.children, compileElement); - compileElement.afterChildren(this.view.nodes.length - nodeIndex - 1); + compileElement.afterChildren(this.view.customNodesStorage.length - nodeIndex - 1); if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__facade_lang__["a" /* isPresent */])(compViewExpr)) { var codeGenContentNodes; if (this.view.component.type.isHost) { @@ -34683,7 +34683,7 @@ return null; }; ViewBuilderVisitor.prototype.visitEmbeddedTemplate = function (ast, parent) { - var nodeIndex = this.view.nodes.length; + var nodeIndex = this.view.customNodesStorage.length; var fieldName = "_anchor_" + nodeIndex; this.view.fields.push(new __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["s" /* ClassField */](fieldName, __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["c" /* importType */](this.view.genConfig.renderTypes.renderComment))); this.view.createMethod.addStmt(__WEBPACK_IMPORTED_MODULE_6__output_output_ast__["n" /* THIS_EXPR */].prop(fieldName) @@ -34696,7 +34696,7 @@ var templateVariableBindings = ast.variables.map(function (varAst) { return [varAst.value.length > 0 ? varAst.value : IMPLICIT_TEMPLATE_VAR, varAst.name]; }); var directives = ast.directives.map(function (directiveAst) { return directiveAst.directive; }); var compileElement = new __WEBPACK_IMPORTED_MODULE_10__compile_element__["a" /* CompileElement */](parent, this.view, nodeIndex, renderNode, ast, null, directives, ast.providers, ast.hasViewContainer, true, ast.references); - this.view.nodes.push(compileElement); + this.view.customNodesStorage.push(compileElement); var compiledAnimations = this._animationCompiler.compileComponent(this.view.component, [ast]); this.nestedViewCount++; var embeddedView = new __WEBPACK_IMPORTED_MODULE_11__compile_view__["a" /* CompileView */](this.view.component, this.view.genConfig, this.view.pipeMetas, __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["h" /* NULL_EXPR */], compiledAnimations.triggers, this.view.viewIndex + this.nestedViewCount, compileElement, templateVariableBindings); @@ -34788,7 +34788,7 @@ if (view.genConfig.genDebugInfo) { nodeDebugInfosVar = __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["e" /* variable */]("nodeDebugInfos_" + view.component.type.name + view.viewIndex); // fix highlighting: ` targetStatements.push(nodeDebugInfosVar - .set(__WEBPACK_IMPORTED_MODULE_6__output_output_ast__["g" /* literalArr */](view.nodes.map(createStaticNodeDebugInfo), new __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["q" /* ArrayType */](new __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["I" /* ExternalType */](__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__identifiers__["d" /* resolveIdentifier */])(__WEBPACK_IMPORTED_MODULE_5__identifiers__["b" /* Identifiers */].StaticNodeDebugInfo)), [__WEBPACK_IMPORTED_MODULE_6__output_output_ast__["d" /* TypeModifier */].Const]))) + .set(__WEBPACK_IMPORTED_MODULE_6__output_output_ast__["g" /* literalArr */](view.customNodesStorage.map(createStaticNodeDebugInfo), new __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["q" /* ArrayType */](new __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["I" /* ExternalType */](__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__identifiers__["d" /* resolveIdentifier */])(__WEBPACK_IMPORTED_MODULE_5__identifiers__["b" /* Identifiers */].StaticNodeDebugInfo)), [__WEBPACK_IMPORTED_MODULE_6__output_output_ast__["d" /* TypeModifier */].Const]))) .toDeclStmt(null, [__WEBPACK_IMPORTED_MODULE_6__output_output_ast__["u" /* StmtModifier */].Final])); } var renderCompTypeVar = __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["e" /* variable */]("renderType_" + view.component.type.name); // fix highlighting: ` @@ -34897,7 +34897,7 @@ } var resultExpr; if (view.viewType === __WEBPACK_IMPORTED_MODULE_7__private_import_core__["j" /* ViewType */].HOST) { - resultExpr = view.nodes[0].appElement; + resultExpr = view.customNodesStorage[0].appElement; } else { resultExpr = __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["h" /* NULL_EXPR */]; @@ -34906,7 +34906,7 @@ __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["n" /* THIS_EXPR */] .callMethod('init', [ __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_13__util__["e" /* createFlatArray */])(view.rootNodesOrAppElements), - __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["g" /* literalArr */](view.nodes.map(function (node) { return node.renderNode; })), __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["g" /* literalArr */](view.disposables), + __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["g" /* literalArr */](view.customNodesStorage.map(function (node) { return node.renderNode; })), __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["g" /* literalArr */](view.disposables), __WEBPACK_IMPORTED_MODULE_6__output_output_ast__["g" /* literalArr */](view.subscriptions) ]) .toStmt(), @@ -50449,7 +50449,7 @@ } var expansionResult = expandNodes(c.expression); errors.push.apply(errors, expansionResult.errors); - return new __WEBPACK_IMPORTED_MODULE_1__ast__["e" /* Element */]("template", [new __WEBPACK_IMPORTED_MODULE_1__ast__["f" /* Attribute */]('ngPluralCase', "" + c.value, c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan); + return new __WEBPACK_IMPORTED_MODULE_1__ast__["e" /* Element */]("template", [new __WEBPACK_IMPORTED_MODULE_1__ast__["f" /* Attribute */]('ngPluralCase', "" + c.value, c.valueSourceSpan)], expansionResult.customNodesStorage, c.sourceSpan, c.sourceSpan, c.sourceSpan); }); var switchAttr = new __WEBPACK_IMPORTED_MODULE_1__ast__["f" /* Attribute */]('[ngPlural]', ast.switchValue, ast.switchValueSourceSpan); return new __WEBPACK_IMPORTED_MODULE_1__ast__["e" /* Element */]('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan); @@ -50458,7 +50458,7 @@ var children = ast.cases.map(function (c) { var expansionResult = expandNodes(c.expression); errors.push.apply(errors, expansionResult.errors); - return new __WEBPACK_IMPORTED_MODULE_1__ast__["e" /* Element */]("template", [new __WEBPACK_IMPORTED_MODULE_1__ast__["f" /* Attribute */]('ngSwitchCase', "" + c.value, c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan); + return new __WEBPACK_IMPORTED_MODULE_1__ast__["e" /* Element */]("template", [new __WEBPACK_IMPORTED_MODULE_1__ast__["f" /* Attribute */]('ngSwitchCase', "" + c.value, c.valueSourceSpan)], expansionResult.customNodesStorage, c.sourceSpan, c.sourceSpan, c.sourceSpan); }); var switchAttr = new __WEBPACK_IMPORTED_MODULE_1__ast__["f" /* Attribute */]('[ngSwitch]', ast.switchValue, ast.switchValueSourceSpan); return new __WEBPACK_IMPORTED_MODULE_1__ast__["e" /* Element */]('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan); @@ -53334,7 +53334,7 @@ animationOutputs.forEach(function (entry) { _this._animationOutputsMap[entry.fullPropertyName] = entry; }); } ViewBinderVisitor.prototype.visitBoundText = function (ast, parent) { - var node = this.view.nodes[this._nodeIndex++]; + var node = this.view.customNodesStorage[this._nodeIndex++]; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__property_binder__["a" /* bindRenderText */])(ast, node, this.view); return null; }; @@ -53345,7 +53345,7 @@ ViewBinderVisitor.prototype.visitNgContent = function (ast, parent) { return null; }; ViewBinderVisitor.prototype.visitElement = function (ast, parent) { var _this = this; - var compileElement = this.view.nodes[this._nodeIndex++]; + var compileElement = this.view.customNodesStorage[this._nodeIndex++]; var eventListeners = []; var animationEventListeners = []; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__event_binder__["a" /* collectEventListeners */])(ast.outputs, ast.directives, compileElement).forEach(function (entry) { @@ -53388,7 +53388,7 @@ return null; }; ViewBinderVisitor.prototype.visitEmbeddedTemplate = function (ast, parent) { - var compileElement = this.view.nodes[this._nodeIndex++]; + var compileElement = this.view.customNodesStorage[this._nodeIndex++]; var eventListeners = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__event_binder__["a" /* collectEventListeners */])(ast.outputs, ast.directives, compileElement); ast.directives.forEach(function (directiveAst) { var directiveInstance = compileElement.instances.get(directiveAst.directive.type.reference); diff --git a/test/unit-tests/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.spec.ts b/test/unit-tests/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.spec.ts index c2116bf6..9d360e76 100644 --- a/test/unit-tests/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.spec.ts +++ b/test/unit-tests/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.spec.ts @@ -1,9 +1,10 @@ import * as ESTree from 'estree'; -import { ICustomNode } from '../../../../src/interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../../../../src/interfaces/IOptions'; import { DEFAULT_PRESET } from '../../../../src/preset-options/DefaultPreset'; +import { CustomNodesStorage } from '../../../../src/storages/custom-nodes/CustomNodesStorage'; import { FunctionDeclarationObfuscator } from '../../../../src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator'; import { NodeMocks } from '../../../mocks/NodeMocks'; import { Options } from '../../../../src/options/Options'; @@ -23,9 +24,11 @@ describe('FunctionDeclarationObfuscator', () => { NodeMocks.getCallExpressionNode(NodeMocks.getIdentifierNode(functionName)) ); + const options: IOptions = new Options(DEFAULT_PRESET); + functionDeclarationObfuscator = new FunctionDeclarationObfuscator( - new Map(), - new Options(DEFAULT_PRESET) + new CustomNodesStorage(options), + options ); functionDeclarationNode = NodeMocks.getFunctionDeclarationNode( diff --git a/test/unit-tests/node-transformers/node-obfuscators/FunctionObfuscator.spec.ts b/test/unit-tests/node-transformers/node-obfuscators/FunctionObfuscator.spec.ts index 8f2dc1f9..fa207e52 100644 --- a/test/unit-tests/node-transformers/node-obfuscators/FunctionObfuscator.spec.ts +++ b/test/unit-tests/node-transformers/node-obfuscators/FunctionObfuscator.spec.ts @@ -1,9 +1,10 @@ import * as ESTree from 'estree'; -import { ICustomNode } from '../../../../src/interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../../../../src/interfaces/IOptions'; import { DEFAULT_PRESET } from '../../../../src/preset-options/DefaultPreset'; +import { CustomNodesStorage } from '../../../../src/storages/custom-nodes/CustomNodesStorage'; import { FunctionObfuscator } from '../../../../src/node-transformers/node-obfuscators/FunctionObfuscator'; import { NodeMocks } from '../../../mocks/NodeMocks'; import { Options } from '../../../../src/options/Options'; @@ -61,9 +62,11 @@ describe('FunctionObfuscator', () => { identifierNode1['parentNode'] = functionDeclarationNode; expressionStatementNode1['parentNode'] = blockStatementNode; + const options: IOptions = new Options(DEFAULT_PRESET); + functionObfuscator = new FunctionObfuscator( - new Map(), - new Options(DEFAULT_PRESET) + new CustomNodesStorage(options), + options ); functionObfuscator.transformNode(functionDeclarationNode);