From a23d7f1b6ab3df5bafee9534951cfc589fd1e9a0 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 29 Aug 2016 21:05:44 +0300 Subject: [PATCH 001/138] wip --- dist/index.js | 97 +++++++++++++++---- package.json | 2 +- src/UnicodeArray.ts | 51 ++++++++++ .../UnicodeArrayCallsWrapper.ts | 9 +- .../UnicodeArrayDecodeNode.ts | 9 +- .../unicode-array-nodes/UnicodeArrayNode.ts | 22 +++-- .../UnicodeArrayRotateFunctionNode.ts | 9 +- src/node-groups/UnicodeArrayNodesGroup.ts | 8 +- src/node-obfuscators/NodeObfuscator.ts | 15 +-- 9 files changed, 170 insertions(+), 52 deletions(-) create mode 100644 src/UnicodeArray.ts diff --git a/dist/index.js b/dist/index.js index 2f83076c..dd578c82 100644 --- a/dist/index.js +++ b/dist/index.js @@ -486,16 +486,16 @@ var NodeObfuscator = function () { throw new ReferenceError('`unicodeArrayNode` node is not found in Map with custom nodes.'); } var unicodeArray = unicodeArrayNode.getNodeData(), - valueIndex = unicodeArray.indexOf(value), - literalValueCallIndex = void 0, + indexOfExistingValue = unicodeArray.getIndexOf(value), + indexOfValue = void 0, hexadecimalIndex = void 0; - if (valueIndex >= 0) { - literalValueCallIndex = valueIndex; + if (indexOfExistingValue >= 0) { + indexOfValue = indexOfExistingValue; } else { - literalValueCallIndex = unicodeArray.length; + indexOfValue = unicodeArray.getLength(); unicodeArrayNode.updateNodeData(value); } - hexadecimalIndex = this.replaceLiteralNumberWithHexadecimalValue(literalValueCallIndex); + hexadecimalIndex = this.replaceLiteralNumberWithHexadecimalValue(indexOfValue); if (this.options.wrapUnicodeArrayCalls) { var unicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); if (!unicodeArrayCallsWrapper) { @@ -1687,7 +1687,7 @@ var UnicodeArrayCallsWrapper = function (_Node_1$Node) { _createClass(UnicodeArrayCallsWrapper, [{ key: "appendNode", value: function appendNode(blockScopeNode) { - if (!this.unicodeArray.length) { + if (!this.unicodeArray.getLength()) { return; } NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); @@ -1763,7 +1763,7 @@ var UnicodeArrayDecodeNode = function (_Node_1$Node) { _createClass(UnicodeArrayDecodeNode, [{ key: "appendNode", value: function appendNode(blockScopeNode) { - if (!this.unicodeArray.length) { + if (!this.unicodeArray.getLength()) { return; } NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); @@ -1822,21 +1822,20 @@ var AppendState_1 = __webpack_require__(2); var UnicodeArrayTemplate_1 = __webpack_require__(58); var Node_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); -var Utils_1 = __webpack_require__(0); var UnicodeArrayNode = function (_Node_1$Node) { _inherits(UnicodeArrayNode, _Node_1$Node); - function UnicodeArrayNode(unicodeArrayName) { - var unicodeArrayRotateValue = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; - var options = arguments[2]; + function UnicodeArrayNode(unicodeArray, unicodeArrayName) { + var unicodeArrayRotateValue = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2]; + var options = arguments[3]; _classCallCheck(this, UnicodeArrayNode); var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayNode).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; - _this.unicodeArray = []; + _this.unicodeArray = unicodeArray; _this.unicodeArrayName = unicodeArrayName; _this.unicodeArrayRotateValue = unicodeArrayRotateValue; return _this; @@ -1845,7 +1844,7 @@ var UnicodeArrayNode = function (_Node_1$Node) { _createClass(UnicodeArrayNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode) { - if (!this.unicodeArray.length) { + if (!this.unicodeArray.getLength()) { return; } NodeUtils_1.NodeUtils.prependNode(blockScopeNode.body, this.getNode()); @@ -1863,20 +1862,20 @@ var UnicodeArrayNode = function (_Node_1$Node) { }, { key: 'getNode', value: function getNode() { - Utils_1.Utils.arrayRotate(this.unicodeArray, this.unicodeArrayRotateValue); + this.unicodeArray.rotateArray(this.unicodeArrayRotateValue); return _get(Object.getPrototypeOf(UnicodeArrayNode.prototype), 'getNode', this).call(this); } }, { key: 'updateNodeData', value: function updateNodeData(data) { - this.unicodeArray.push(data); + this.unicodeArray.addToArray(data); } }, { key: 'getNodeStructure', value: function getNodeStructure() { return NodeUtils_1.NodeUtils.convertCodeToStructure(UnicodeArrayTemplate_1.UnicodeArrayTemplate().formatUnicorn({ unicodeArrayName: this.unicodeArrayName, - unicodeArray: this.unicodeArray.join(',') + unicodeArray: this.unicodeArray.toString() })); } }]); @@ -1932,7 +1931,7 @@ var UnicodeArrayRotateFunctionNode = function (_Node_1$Node) { _createClass(UnicodeArrayRotateFunctionNode, [{ key: "appendNode", value: function appendNode(blockScopeNode) { - if (!this.unicodeArray.length) { + if (!this.unicodeArray.getLength()) { return; } NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); @@ -2101,6 +2100,7 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var NodesGroup_1 = __webpack_require__(12); +var UnicodeArray_1 = __webpack_require__(67); var UnicodeArrayCallsWrapper_1 = __webpack_require__(30); var UnicodeArrayDecodeNode_1 = __webpack_require__(31); var UnicodeArrayNode_1 = __webpack_require__(32); @@ -2128,8 +2128,8 @@ var UnicodeArrayNodesGroup = function (_NodesGroup_1$NodesGr) { } else { _this.unicodeArrayRotateValue = 0; } - var unicodeArrayNode = new UnicodeArrayNode_1.UnicodeArrayNode(_this.unicodeArrayName, _this.unicodeArrayRotateValue, _this.options), - unicodeArray = unicodeArrayNode.getNodeData(); + var unicodeArray = new UnicodeArray_1.UnicodeArray(), + unicodeArrayNode = new UnicodeArrayNode_1.UnicodeArrayNode(unicodeArray, _this.unicodeArrayName, _this.unicodeArrayRotateValue, _this.options); _this.nodes.set('unicodeArrayNode', unicodeArrayNode); if (_this.options.wrapUnicodeArrayCalls) { _this.nodes.set('unicodeArrayCallsWrapper', new UnicodeArrayCallsWrapper_1.UnicodeArrayCallsWrapper(_this.unicodeArrayTranslatorName, _this.unicodeArrayName, unicodeArray, _this.options)); @@ -3185,6 +3185,63 @@ if (!global._babelPolyfill) { } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; +/***/ }, +/* 67 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +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 UnicodeArray = function () { + function UnicodeArray() { + _classCallCheck(this, UnicodeArray); + + this.array = []; + } + + _createClass(UnicodeArray, [{ + key: "addToArray", + value: function addToArray(value) { + this.array.push(value); + } + }, { + key: "getArray", + value: function getArray() { + return this.array; + } + }, { + key: "getIndexOf", + value: function getIndexOf(value) { + return this.array.indexOf(value); + } + }, { + key: "getLength", + value: function getLength() { + return this.array.length; + } + }, { + key: "rotateArray", + value: function rotateArray(rotationValue) { + this.array = Utils_1.Utils.arrayRotate(this.array, rotationValue); + } + }, { + key: "toString", + value: function toString() { + return this.array.toString(); + } + }]); + + return UnicodeArray; +}(); + +exports.UnicodeArray = UnicodeArray; + /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/package.json b/package.json index f977e9b1..6dac2706 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "0.7.0", + "version": "0.8.0-dev.0", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", diff --git a/src/UnicodeArray.ts b/src/UnicodeArray.ts new file mode 100644 index 00000000..7d13f5f0 --- /dev/null +++ b/src/UnicodeArray.ts @@ -0,0 +1,51 @@ +import { Utils } from "./Utils"; + +export class UnicodeArray { + /** + * @type {string[]} + */ + private array: string[] = []; + + /** + * @param value + */ + public addToArray (value: string): void { + this.array.push(value); + } + + /** + * @returns {string[]} + */ + public getArray (): string[] { + return this.array; + } + + /** + * @param value + * @returns {number} + */ + public getIndexOf(value: string): number { + return this.array.indexOf(value); + } + + /** + * @returns {number} + */ + public getLength (): number { + return this.array.length; + } + + /** + * @param rotationValue + */ + public rotateArray (rotationValue: number): void { + this.array = Utils.arrayRotate(this.array, rotationValue); + } + + /** + * @returns {string} + */ + public toString (): string { + return this.array.toString(); + } +} diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts index bc34df79..04ddb92f 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts @@ -11,6 +11,7 @@ import { UnicodeArrayCallsWrapperTemplate } from "../../templates/custom-nodes/u import { Node } from '../Node'; import { NodeUtils } from "../../NodeUtils"; +import { UnicodeArray } from "../../UnicodeArray"; import { Utils } from "../../Utils"; export class UnicodeArrayCallsWrapper extends Node { @@ -20,9 +21,9 @@ export class UnicodeArrayCallsWrapper extends Node { protected appendState: AppendState = AppendState.AfterObfuscation; /** - * @type {string[]} + * @type {UnicodeArray} */ - private unicodeArray: string[]; + private unicodeArray: UnicodeArray; /** * @type {string} @@ -43,7 +44,7 @@ export class UnicodeArrayCallsWrapper extends Node { constructor ( unicodeArrayCallsWrapperName: string, unicodeArrayName: string, - unicodeArray: string[], + unicodeArray: UnicodeArray, options: IOptions ) { super(options); @@ -57,7 +58,7 @@ export class UnicodeArrayCallsWrapper extends Node { * @param blockScopeNode */ public appendNode (blockScopeNode: TNodeWithBlockStatement): void { - if (!this.unicodeArray.length) { + if (!this.unicodeArray.getLength()) { return; } diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts index 32487eb0..60a283fa 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts @@ -16,6 +16,7 @@ import { UnicodeArrayDecodeTemplate } from "../../templates/custom-nodes/unicode import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; import { Node } from '../Node'; import { NodeUtils } from "../../NodeUtils"; +import { UnicodeArray } from "../../UnicodeArray"; export class UnicodeArrayDecodeNode extends Node { /** @@ -24,9 +25,9 @@ export class UnicodeArrayDecodeNode extends Node { protected appendState: AppendState = AppendState.AfterObfuscation; /** - * @type {string[]} + * @type {UnicodeArray} */ - private unicodeArray: string[]; + private unicodeArray: UnicodeArray; /** * @type {string} @@ -40,7 +41,7 @@ export class UnicodeArrayDecodeNode extends Node { */ constructor ( unicodeArrayName: string, - unicodeArray: string[], + unicodeArray: UnicodeArray, options: IOptions ) { super(options); @@ -53,7 +54,7 @@ export class UnicodeArrayDecodeNode extends Node { * @param blockScopeNode */ public appendNode (blockScopeNode: TNodeWithBlockStatement): void { - if (!this.unicodeArray.length) { + if (!this.unicodeArray.getLength()) { return; } diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts index ce0ff9ef..fcd4d590 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts @@ -7,11 +7,12 @@ import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; import { AppendState } from '../../enums/AppendState'; +import { UnicodeArray } from '../../UnicodeArray'; + import { UnicodeArrayTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-node/UnicodeArrayTemplate"; import { Node } from '../Node'; import { NodeUtils } from "../../NodeUtils"; -import { Utils } from '../../Utils'; export class UnicodeArrayNode extends Node { /** @@ -25,9 +26,9 @@ export class UnicodeArrayNode extends Node { protected appendState: AppendState = AppendState.AfterObfuscation; /** - * @type {string[]} + * @type {UnicodeArray} */ - private unicodeArray: string[] = []; + private unicodeArray: UnicodeArray; /** * @type {string} @@ -40,17 +41,20 @@ export class UnicodeArrayNode extends Node { private unicodeArrayRotateValue: number; /** + * @param unicodeArray * @param unicodeArrayName * @param unicodeArrayRotateValue * @param options */ constructor ( + unicodeArray: UnicodeArray, unicodeArrayName: string, unicodeArrayRotateValue: number = 0, options: IOptions ) { super(options); + this.unicodeArray = unicodeArray; this.unicodeArrayName = unicodeArrayName; this.unicodeArrayRotateValue = unicodeArrayRotateValue; } @@ -59,7 +63,7 @@ export class UnicodeArrayNode extends Node { * @param blockScopeNode */ public appendNode (blockScopeNode: TNodeWithBlockStatement): void { - if (!this.unicodeArray.length) { + if (!this.unicodeArray.getLength()) { return; } @@ -74,9 +78,9 @@ export class UnicodeArrayNode extends Node { } /** - * @returns {string[]} + * @returns {UnicodeArray} */ - public getNodeData (): string[] { + public getNodeData (): UnicodeArray { return this.unicodeArray; } @@ -84,7 +88,7 @@ export class UnicodeArrayNode extends Node { * @returns {INode} */ public getNode (): INode { - Utils.arrayRotate (this.unicodeArray, this.unicodeArrayRotateValue); + this.unicodeArray.rotateArray(this.unicodeArrayRotateValue); return super.getNode(); } @@ -93,7 +97,7 @@ export class UnicodeArrayNode extends Node { * @param data */ public updateNodeData (data: string): void { - this.unicodeArray.push(data); + this.unicodeArray.addToArray(data); } /** @@ -103,7 +107,7 @@ export class UnicodeArrayNode extends Node { return NodeUtils.convertCodeToStructure( UnicodeArrayTemplate().formatUnicorn({ unicodeArrayName: this.unicodeArrayName, - unicodeArray: this.unicodeArray.join(',') + unicodeArray: this.unicodeArray.toString() }) ); } diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts index 41809dab..a0f1759c 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts @@ -15,6 +15,7 @@ import { UnicodeArrayRotateFunctionTemplate } from "../../templates/custom-nodes import { JavaScriptObfuscator } from "../../JavaScriptObfuscator"; import { Node } from '../Node'; import { NodeUtils } from "../../NodeUtils"; +import { UnicodeArray } from "../../UnicodeArray"; import { Utils } from "../../Utils"; export class UnicodeArrayRotateFunctionNode extends Node { @@ -24,9 +25,9 @@ export class UnicodeArrayRotateFunctionNode extends Node { protected appendState: AppendState = AppendState.AfterObfuscation; /** - * @type {string[]} + * @type {UnicodeArray} */ - private unicodeArray: string[]; + private unicodeArray: UnicodeArray; /** * @type {string} @@ -46,7 +47,7 @@ export class UnicodeArrayRotateFunctionNode extends Node { */ constructor ( unicodeArrayName: string, - unicodeArray: string[], + unicodeArray: UnicodeArray, unicodeArrayRotateValue: number, options: IOptions ) { @@ -61,7 +62,7 @@ export class UnicodeArrayRotateFunctionNode extends Node { * @param blockScopeNode */ public appendNode (blockScopeNode: TNodeWithBlockStatement): void { - if (!this.unicodeArray.length) { + if (!this.unicodeArray.getLength()) { return; } diff --git a/src/node-groups/UnicodeArrayNodesGroup.ts b/src/node-groups/UnicodeArrayNodesGroup.ts index a8f77638..9db19d24 100644 --- a/src/node-groups/UnicodeArrayNodesGroup.ts +++ b/src/node-groups/UnicodeArrayNodesGroup.ts @@ -1,6 +1,7 @@ import { IOptions } from "../interfaces/IOptions"; import { NodesGroup } from './NodesGroup'; +import { UnicodeArray } from "../UnicodeArray"; import { UnicodeArrayCallsWrapper } from "../custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper"; import { UnicodeArrayDecodeNode } from "../custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode"; import { UnicodeArrayNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayNode'; @@ -42,12 +43,13 @@ export class UnicodeArrayNodesGroup extends NodesGroup { this.unicodeArrayRotateValue = 0; } - let unicodeArrayNode: UnicodeArrayNode = new UnicodeArrayNode( + let unicodeArray: UnicodeArray = new UnicodeArray(), + unicodeArrayNode: UnicodeArrayNode = new UnicodeArrayNode( + unicodeArray, this.unicodeArrayName, this.unicodeArrayRotateValue, this.options - ), - unicodeArray: string [] = unicodeArrayNode.getNodeData(); + ); this.nodes.set( 'unicodeArrayNode', diff --git a/src/node-obfuscators/NodeObfuscator.ts b/src/node-obfuscators/NodeObfuscator.ts index ea042fa0..7bc87dd4 100644 --- a/src/node-obfuscators/NodeObfuscator.ts +++ b/src/node-obfuscators/NodeObfuscator.ts @@ -9,6 +9,7 @@ import { TUnicodeArrayNode } from "../types/custom-nodes/TUnicodeArrayNode"; import { JSFuck } from "../enums/JSFuck"; import { Nodes } from "../Nodes"; +import { UnicodeArray } from "../UnicodeArray"; import { Utils } from '../Utils'; export abstract class NodeObfuscator implements INodeObfuscator { @@ -146,19 +147,19 @@ export abstract class NodeObfuscator implements INodeObfuscator { throw new ReferenceError('`unicodeArrayNode` node is not found in Map with custom nodes.'); } - let unicodeArray: string[] = unicodeArrayNode.getNodeData(), - valueIndex: number = unicodeArray.indexOf(value), - literalValueCallIndex: number, + let unicodeArray: UnicodeArray = unicodeArrayNode.getNodeData(), + indexOfExistingValue: number = unicodeArray.getIndexOf(value), + indexOfValue: number, hexadecimalIndex: string; - if (valueIndex >= 0) { - literalValueCallIndex = valueIndex; + if (indexOfExistingValue >= 0) { + indexOfValue = indexOfExistingValue; } else { - literalValueCallIndex = unicodeArray.length; + indexOfValue = unicodeArray.getLength(); unicodeArrayNode.updateNodeData(value); } - hexadecimalIndex = this.replaceLiteralNumberWithHexadecimalValue(literalValueCallIndex); + hexadecimalIndex = this.replaceLiteralNumberWithHexadecimalValue(indexOfValue); if (this.options.wrapUnicodeArrayCalls) { let unicodeArrayCallsWrapper: TUnicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); From e4ecd3c209e7a67d414a69129aeb79ab107a106c Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 30 Aug 2016 15:42:13 +0300 Subject: [PATCH 002/138] More tests for custom nodes --- dist/index.js | 290 +++++++++--------- ...ConsoleOutputDisableExpressionNode.spec.ts | 29 ++ .../UnicodeArrayCallsWrapper.spec.ts | 29 ++ .../UnicodeArrayDecodeNode.spec.ts | 29 ++ .../UnicodeArrayNode.spec.ts | 29 ++ .../UnicodeArrayRotateFunctionNode.spec.ts | 29 ++ test/index.spec.ts | 5 + 7 files changed, 295 insertions(+), 145 deletions(-) create mode 100644 test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts create mode 100644 test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts create mode 100644 test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts create mode 100644 test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts create mode 100644 test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts diff --git a/dist/index.js b/dist/index.js index dd578c82..d637c6e2 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 = 66); +/******/ return __webpack_require__(__webpack_require__.s = 67); /******/ }) /************************************************************************/ /******/ ([ @@ -102,7 +102,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(61); +var chance_1 = __webpack_require__(62); var JSFuck_1 = __webpack_require__(16); var Utils = function () { @@ -641,7 +641,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var JavaScriptObfuscatorCLI_1 = __webpack_require__(24); +var JavaScriptObfuscatorCLI_1 = __webpack_require__(25); var JavaScriptObfuscatorInternal_1 = __webpack_require__(14); var JavaScriptObfuscator = function () { @@ -758,7 +758,7 @@ var esprima = __webpack_require__(18); var escodegen = __webpack_require__(10); var ObfuscationResult_1 = __webpack_require__(15); var Obfuscator_1 = __webpack_require__(21); -var Options_1 = __webpack_require__(46); +var Options_1 = __webpack_require__(47); var SourceMapCorrector_1 = __webpack_require__(22); var JavaScriptObfuscatorInternal = function () { @@ -982,20 +982,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(4); var AppendState_1 = __webpack_require__(2); var NodeType_1 = __webpack_require__(7); -var CatchClauseObfuscator_1 = __webpack_require__(38); -var ConsoleOutputNodesGroup_1 = __webpack_require__(34); -var DebugProtectionNodesGroup_1 = __webpack_require__(35); -var FunctionDeclarationObfuscator_1 = __webpack_require__(39); -var FunctionObfuscator_1 = __webpack_require__(40); -var LiteralObfuscator_1 = __webpack_require__(41); -var MemberExpressionObfuscator_1 = __webpack_require__(42); -var MethodDefinitionObfuscator_1 = __webpack_require__(43); +var CatchClauseObfuscator_1 = __webpack_require__(39); +var ConsoleOutputNodesGroup_1 = __webpack_require__(35); +var DebugProtectionNodesGroup_1 = __webpack_require__(36); +var FunctionDeclarationObfuscator_1 = __webpack_require__(40); +var FunctionObfuscator_1 = __webpack_require__(41); +var LiteralObfuscator_1 = __webpack_require__(42); +var MemberExpressionObfuscator_1 = __webpack_require__(43); +var MethodDefinitionObfuscator_1 = __webpack_require__(44); var Nodes_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); -var ObjectExpressionObfuscator_1 = __webpack_require__(44); -var SelfDefendingNodesGroup_1 = __webpack_require__(36); -var UnicodeArrayNodesGroup_1 = __webpack_require__(37); -var VariableDeclarationObfuscator_1 = __webpack_require__(45); +var ObjectExpressionObfuscator_1 = __webpack_require__(45); +var SelfDefendingNodesGroup_1 = __webpack_require__(37); +var UnicodeArrayNodesGroup_1 = __webpack_require__(38); +var VariableDeclarationObfuscator_1 = __webpack_require__(46); var Obfuscator = function () { function Obfuscator(options) { @@ -1144,8 +1144,65 @@ 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__(64); -var mkdirp = __webpack_require__(65); +var Utils_1 = __webpack_require__(0); + +var UnicodeArray = function () { + function UnicodeArray() { + _classCallCheck(this, UnicodeArray); + + this.array = []; + } + + _createClass(UnicodeArray, [{ + key: "addToArray", + value: function addToArray(value) { + this.array.push(value); + } + }, { + key: "getArray", + value: function getArray() { + return this.array; + } + }, { + key: "getIndexOf", + value: function getIndexOf(value) { + return this.array.indexOf(value); + } + }, { + key: "getLength", + value: function getLength() { + return this.array.length; + } + }, { + key: "rotateArray", + value: function rotateArray(rotationValue) { + this.array = Utils_1.Utils.arrayRotate(this.array, rotationValue); + } + }, { + key: "toString", + value: function toString() { + return this.array.toString(); + } + }]); + + return UnicodeArray; +}(); + +exports.UnicodeArray = UnicodeArray; + +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var fs = __webpack_require__(65); +var mkdirp = __webpack_require__(66); var path = __webpack_require__(19); var Utils_1 = __webpack_require__(0); @@ -1218,7 +1275,7 @@ CLIUtils.encoding = 'utf8'; exports.CLIUtils = CLIUtils; /***/ }, -/* 24 */ +/* 25 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1228,11 +1285,11 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var commander = __webpack_require__(63); +var commander = __webpack_require__(64); var path = __webpack_require__(19); var SourceMapMode_1 = __webpack_require__(11); var DefaultPreset_1 = __webpack_require__(17); -var CLIUtils_1 = __webpack_require__(23); +var CLIUtils_1 = __webpack_require__(24); var JavaScriptObfuscator_1 = __webpack_require__(9); var JavaScriptObfuscatorInternal_1 = __webpack_require__(14); var Utils_1 = __webpack_require__(0); @@ -1355,7 +1412,7 @@ var JavaScriptObfuscatorCLI = function () { exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; /***/ }, -/* 25 */ +/* 26 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1370,7 +1427,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 AppendState_1 = __webpack_require__(2); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(50); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(51); var Node_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); @@ -1410,7 +1467,7 @@ var ConsoleOutputDisableExpressionNode = function (_Node_1$Node) { exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; /***/ }, -/* 26 */ +/* 27 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1426,7 +1483,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(2); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(51); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(52); var Node_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); @@ -1463,7 +1520,7 @@ var DebugProtectionFunctionCallNode = function (_Node_1$Node) { exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; /***/ }, -/* 27 */ +/* 28 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1479,7 +1536,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(2); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(52); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(53); var Node_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); @@ -1516,7 +1573,7 @@ var DebugProtectionFunctionIntervalNode = function (_Node_1$Node) { exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; /***/ }, -/* 28 */ +/* 29 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1532,7 +1589,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(2); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(53); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(54); var Node_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1580,7 +1637,7 @@ var DebugProtectionFunctionNode = function (_Node_1$Node) { exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; /***/ }, -/* 29 */ +/* 30 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1596,7 +1653,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AppendState_1 = __webpack_require__(2); var NoCustomNodesPreset_1 = __webpack_require__(13); -var SelfDefendingTemplate_1 = __webpack_require__(54); +var SelfDefendingTemplate_1 = __webpack_require__(55); var JavaScriptObfuscator_1 = __webpack_require__(9); var Node_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); @@ -1646,7 +1703,7 @@ var SelfDefendingUnicodeNode = function (_Node_1$Node) { exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 30 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1664,7 +1721,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(2); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(55); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(56); var Node_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1720,7 +1777,7 @@ var UnicodeArrayCallsWrapper = function (_Node_1$Node) { exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; /***/ }, -/* 31 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1739,9 +1796,9 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(2); var NoCustomNodesPreset_1 = __webpack_require__(13); -var AtobTemplate_1 = __webpack_require__(49); -var SelfDefendingTemplate_1 = __webpack_require__(56); -var UnicodeArrayDecodeTemplate_1 = __webpack_require__(57); +var AtobTemplate_1 = __webpack_require__(50); +var SelfDefendingTemplate_1 = __webpack_require__(57); +var UnicodeArrayDecodeTemplate_1 = __webpack_require__(58); var JavaScriptObfuscator_1 = __webpack_require__(9); var Node_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); @@ -1801,7 +1858,7 @@ var UnicodeArrayDecodeNode = function (_Node_1$Node) { exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; /***/ }, -/* 32 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1819,7 +1876,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(2); -var UnicodeArrayTemplate_1 = __webpack_require__(58); +var UnicodeArrayTemplate_1 = __webpack_require__(59); var Node_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); @@ -1887,7 +1944,7 @@ UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH = 4; exports.UnicodeArrayNode = UnicodeArrayNode; /***/ }, -/* 33 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1906,8 +1963,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(2); var NoCustomNodesPreset_1 = __webpack_require__(13); -var SelfDefendingTemplate_1 = __webpack_require__(59); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(60); +var SelfDefendingTemplate_1 = __webpack_require__(60); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(61); var JavaScriptObfuscator_1 = __webpack_require__(9); var Node_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); @@ -1971,7 +2028,7 @@ var UnicodeArrayRotateFunctionNode = function (_Node_1$Node) { exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, -/* 34 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1983,7 +2040,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__(25); +var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(26); var NodesGroup_1 = __webpack_require__(12); var ConsoleOutputNodesGroup = function (_NodesGroup_1$NodesGr) { @@ -2007,7 +2064,7 @@ var ConsoleOutputNodesGroup = function (_NodesGroup_1$NodesGr) { exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; /***/ }, -/* 35 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2019,9 +2076,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__(26); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(27); -var DebugProtectionFunctionNode_1 = __webpack_require__(28); +var DebugProtectionFunctionCallNode_1 = __webpack_require__(27); +var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(28); +var DebugProtectionFunctionNode_1 = __webpack_require__(29); var NodesGroup_1 = __webpack_require__(12); var Utils_1 = __webpack_require__(0); @@ -2051,7 +2108,7 @@ var DebugProtectionNodesGroup = function (_NodesGroup_1$NodesGr) { exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; /***/ }, -/* 36 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2064,7 +2121,7 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var NodesGroup_1 = __webpack_require__(12); -var SelfDefendingUnicodeNode_1 = __webpack_require__(29); +var SelfDefendingUnicodeNode_1 = __webpack_require__(30); var SelfDefendingNodesGroup = function (_NodesGroup_1$NodesGr) { _inherits(SelfDefendingNodesGroup, _NodesGroup_1$NodesGr); @@ -2087,7 +2144,7 @@ var SelfDefendingNodesGroup = function (_NodesGroup_1$NodesGr) { exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; /***/ }, -/* 37 */ +/* 38 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2100,11 +2157,11 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var NodesGroup_1 = __webpack_require__(12); -var UnicodeArray_1 = __webpack_require__(67); -var UnicodeArrayCallsWrapper_1 = __webpack_require__(30); -var UnicodeArrayDecodeNode_1 = __webpack_require__(31); -var UnicodeArrayNode_1 = __webpack_require__(32); -var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(33); +var UnicodeArray_1 = __webpack_require__(23); +var UnicodeArrayCallsWrapper_1 = __webpack_require__(31); +var UnicodeArrayDecodeNode_1 = __webpack_require__(32); +var UnicodeArrayNode_1 = __webpack_require__(33); +var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(34); var Utils_1 = __webpack_require__(0); var UnicodeArrayNodesGroup = function (_NodesGroup_1$NodesGr) { @@ -2149,7 +2206,7 @@ var UnicodeArrayNodesGroup = function (_NodesGroup_1$NodesGr) { exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; /***/ }, -/* 38 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2220,7 +2277,7 @@ var CatchClauseObfuscator = function (_NodeObfuscator_1$Nod) { exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 39 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2297,7 +2354,7 @@ var FunctionDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 40 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2374,7 +2431,7 @@ var FunctionObfuscator = function (_NodeObfuscator_1$Nod) { exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 41 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2439,7 +2496,7 @@ var LiteralObfuscator = function (_NodeObfuscator_1$Nod) { exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 42 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2523,7 +2580,7 @@ var MemberExpressionObfuscator = function (_NodeObfuscator_1$Nod) { exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 43 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2589,7 +2646,7 @@ var MethodDefinitionObfuscator = function (_NodeObfuscator_1$Nod) { exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 44 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2672,7 +2729,7 @@ var ObjectExpressionObfuscator = function (_NodeObfuscator_1$Nod) { exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 45 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2766,7 +2823,7 @@ var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 46 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2787,10 +2844,10 @@ 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__(62); +var class_validator_1 = __webpack_require__(63); var DefaultPreset_1 = __webpack_require__(17); -var OptionsNormalizer_1 = __webpack_require__(47); -var ValidationErrorsFormatter_1 = __webpack_require__(48); +var OptionsNormalizer_1 = __webpack_require__(48); +var ValidationErrorsFormatter_1 = __webpack_require__(49); var Options = function Options(obfuscatorOptions) { _classCallCheck(this, Options); @@ -2826,7 +2883,7 @@ __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], exports.Options = Options; /***/ }, -/* 47 */ +/* 48 */ /***/ function(module, exports) { "use strict"; @@ -2928,7 +2985,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.unicodeArrayRule, Options exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 48 */ +/* 49 */ /***/ function(module, exports) { "use strict"; @@ -2995,7 +3052,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 49 */ +/* 50 */ /***/ function(module, exports) { "use strict"; @@ -3007,7 +3064,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 50 */ +/* 51 */ /***/ function(module, exports) { "use strict"; @@ -3019,7 +3076,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 51 */ +/* 52 */ /***/ function(module, exports) { "use strict"; @@ -3031,7 +3088,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 52 */ +/* 53 */ /***/ function(module, exports) { "use strict"; @@ -3043,7 +3100,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 53 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3056,7 +3113,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 54 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3069,7 +3126,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 55 */ +/* 56 */ /***/ function(module, exports) { "use strict"; @@ -3081,7 +3138,7 @@ function UnicodeArrayCallsWrapperTemplate() { exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 56 */ +/* 57 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3094,7 +3151,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 57 */ +/* 58 */ /***/ function(module, exports) { "use strict"; @@ -3106,7 +3163,7 @@ function UnicodeArrayDecodeTemplate() { exports.UnicodeArrayDecodeTemplate = UnicodeArrayDecodeTemplate; /***/ }, -/* 58 */ +/* 59 */ /***/ function(module, exports) { "use strict"; @@ -3118,7 +3175,7 @@ function UnicodeArrayTemplate() { exports.UnicodeArrayTemplate = UnicodeArrayTemplate; /***/ }, -/* 59 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3131,7 +3188,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 60 */ +/* 61 */ /***/ function(module, exports) { "use strict"; @@ -3143,37 +3200,37 @@ function UnicodeArrayRotateFunctionTemplate() { exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; /***/ }, -/* 61 */ +/* 62 */ /***/ function(module, exports) { module.exports = require("chance"); /***/ }, -/* 62 */ +/* 63 */ /***/ function(module, exports) { module.exports = require("class-validator"); /***/ }, -/* 63 */ +/* 64 */ /***/ function(module, exports) { module.exports = require("commander"); /***/ }, -/* 64 */ +/* 65 */ /***/ function(module, exports) { module.exports = require("fs"); /***/ }, -/* 65 */ +/* 66 */ /***/ function(module, exports) { module.exports = require("mkdirp"); /***/ }, -/* 66 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3185,63 +3242,6 @@ if (!global._babelPolyfill) { } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; -/***/ }, -/* 67 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -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 UnicodeArray = function () { - function UnicodeArray() { - _classCallCheck(this, UnicodeArray); - - this.array = []; - } - - _createClass(UnicodeArray, [{ - key: "addToArray", - value: function addToArray(value) { - this.array.push(value); - } - }, { - key: "getArray", - value: function getArray() { - return this.array; - } - }, { - key: "getIndexOf", - value: function getIndexOf(value) { - return this.array.indexOf(value); - } - }, { - key: "getLength", - value: function getLength() { - return this.array.length; - } - }, { - key: "rotateArray", - value: function rotateArray(rotationValue) { - this.array = Utils_1.Utils.arrayRotate(this.array, rotationValue); - } - }, { - key: "toString", - value: function toString() { - return this.array.toString(); - } - }]); - - return UnicodeArray; -}(); - -exports.UnicodeArray = UnicodeArray; - /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts new file mode 100644 index 00000000..2b33ec53 --- /dev/null +++ b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts @@ -0,0 +1,29 @@ +import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; + +import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; + +const assert: Chai.AssertStatic = require('chai').assert; + +describe('ConsoleOutputDisableExpressionNode', () => { + it('should correctly append `ConsoleOutputDisableExpressionNode` custom node into the obfuscated code if `disableConsoleOutput` option is set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + disableConsoleOutput: true + } + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /_\u0003\.log\u0001\.in/); + }); + + it('should\'t append `ConsoleOutputDisableExpressionNode` custom node into the obfuscated code if `disableConsoleOutput` option is not set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + disableConsoleOutput: false + } + ); + + assert.notMatch(obfuscationResult.getObfuscatedCode(), /_\u0003\.log\u0001\.in/); + }); +}); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts new file mode 100644 index 00000000..762f6e9c --- /dev/null +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts @@ -0,0 +1,29 @@ +import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; + +import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; + +const assert: Chai.AssertStatic = require('chai').assert; + +describe('UnicodeArrayCallsWrapper', () => { + it('should correctly append `UnicodeArrayCallsWrapper` custom node into the obfuscated code if `wrapUnicodeArrayCalls` option is set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + wrapUnicodeArrayCalls: true + } + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){6}, *0x010\)\];/); + }); + + it('should\'t append `UnicodeArrayDecodeNode` custom node into the obfuscated code if `wrapUnicodeArrayCalls` option is not set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + wrapUnicodeArrayCalls: false + } + ); + + assert.notMatch(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){6}, *0x010\)\];/); + }); +}); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts new file mode 100644 index 00000000..3bfe2f82 --- /dev/null +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts @@ -0,0 +1,29 @@ +import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; + +import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; + +const assert: Chai.AssertStatic = require('chai').assert; + +describe('UnicodeArrayDecodeNode', () => { + it('should correctly append `UnicodeArrayDecodeNode` custom node into the obfuscated code if `encodeUnicodeLiterals` option is set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + encodeUnicodeLiterals: true + } + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){6}\]\)\)/); + }); + + it('should\'t append `UnicodeArrayDecodeNode` custom node into the obfuscated code if `encodeUnicodeLiterals` option is not set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + encodeUnicodeLiterals: false + } + ); + + assert.notMatch(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){6}\]\)\)/); + }); +}); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts new file mode 100644 index 00000000..9d5fb2fc --- /dev/null +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts @@ -0,0 +1,29 @@ +import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; + +import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; + +const assert: Chai.AssertStatic = require('chai').assert; + +describe('UnicodeArrayNode', () => { + it('should correctly append `UnicodeArrayNode` custom node into the obfuscated code if `unicodeArray` option is set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + unicodeArray: true + } + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /^var _0x([a-z0-9]){4} *= *\[/); + }); + + it('should\'t append `UnicodeArrayNode` custom node into the obfuscated code if `unicodeArray` option is not set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + unicodeArray: false + } + ); + + assert.notMatch(obfuscationResult.getObfuscatedCode(), /^var _0x([a-z0-9]){4} *= *\[/); + }); +}); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts new file mode 100644 index 00000000..0e0a94aa --- /dev/null +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts @@ -0,0 +1,29 @@ +import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; + +import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; + +const assert: Chai.AssertStatic = require('chai').assert; + +describe('UnicodeArrayRotateFunctionNode', () => { + it('should correctly append `UnicodeArrayRotateFunctionNode` custom node into the obfuscated code if `rotateUnicodeArray` option is set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + rotateUnicodeArray: true + } + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /while *\(-- *_0x([a-z0-9]){6}\) *\{/); + }); + + it('should\'t append `UnicodeArrayRotateFunctionNode` custom node into the obfuscated code if `rotateUnicodeArray` option is not set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + rotateUnicodeArray: false + } + ); + + assert.notMatch(obfuscationResult.getObfuscatedCode(), /while *\(-- *_0x([a-z0-9]){6}\) *\{/); + }); +}); diff --git a/test/index.spec.ts b/test/index.spec.ts index d3c27a5f..f93348ac 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -23,6 +23,11 @@ import './unit-tests/node-obfuscators/FunctionObfuscator.spec'; import './functional-tests/JavaScriptObfuscator.spec'; import './functional-tests/JavaScriptObfuscatorCLI.spec'; import './functional-tests/JavaScriptObfuscatorInternal.spec'; +import './functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec'; +import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec'; +import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec'; +import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec'; +import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec'; import './functional-tests/node-obfuscators/LiteralObfuscator.spec'; import './functional-tests/node-obfuscators/MemberExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec'; From 6bd03bc3aca569c7f07f584cf012ac140707ccdd Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 30 Aug 2016 15:44:07 +0300 Subject: [PATCH 003/138] added `test` folder to `exclude` array --- tsconfig.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 3866be34..18ed4fe5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,5 +22,9 @@ "node", "sinon" ] - } + }, + "exclude": [ + "node_modules", + "test" + ] } \ No newline at end of file From ee1836cd30f37ccc33275fea9082cea10c2564a8 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 30 Aug 2016 16:52:33 +0300 Subject: [PATCH 004/138] Identifier replacer refactoring --- dist/index.js | 312 ++++++++++-------- src/Nodes.ts | 37 +++ src/node-obfuscators/CatchClauseObfuscator.ts | 7 +- .../FunctionDeclarationObfuscator.ts | 7 +- src/node-obfuscators/FunctionObfuscator.ts | 7 +- src/node-obfuscators/NodeObfuscator.ts | 29 +- .../VariableDeclarationObfuscator.ts | 28 +- tsconfig.json | 6 +- 8 files changed, 243 insertions(+), 190 deletions(-) diff --git a/dist/index.js b/dist/index.js index d637c6e2..9f70c022 100644 --- a/dist/index.js +++ b/dist/index.js @@ -219,9 +219,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var escodegen = __webpack_require__(10); var esprima = __webpack_require__(18); -var estraverse = __webpack_require__(4); +var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(7); -var Nodes_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); var NodeUtils = function () { @@ -350,6 +350,100 @@ exports.NodeUtils = NodeUtils; /***/ }, /* 2 */ +/***/ 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 NodeType_1 = __webpack_require__(7); + +var Nodes = function () { + function Nodes() { + _classCallCheck(this, Nodes); + } + + _createClass(Nodes, null, [{ + key: "getProgramNode", + value: function getProgramNode(bodyNode) { + return { + 'type': NodeType_1.NodeType.Program, + 'body': bodyNode, + 'sourceType': 'script' + }; + } + }, { + key: "isArrowFunctionExpressionNode", + value: function isArrowFunctionExpressionNode(node) { + return node.type === NodeType_1.NodeType.ArrowFunctionExpression; + } + }, { + key: "isBlockStatementNode", + value: function isBlockStatementNode(node) { + return node.type === NodeType_1.NodeType.BlockStatement; + } + }, { + key: "isFunctionDeclarationNode", + value: function isFunctionDeclarationNode(node) { + return node.type === NodeType_1.NodeType.FunctionDeclaration; + } + }, { + key: "isFunctionExpressionNode", + value: function isFunctionExpressionNode(node) { + return node.type === NodeType_1.NodeType.FunctionExpression; + } + }, { + key: "isIdentifierNode", + value: function isIdentifierNode(node) { + return node.type === NodeType_1.NodeType.Identifier; + } + }, { + key: "isLiteralNode", + value: function isLiteralNode(node) { + return node.type === NodeType_1.NodeType.Literal; + } + }, { + key: "isMemberExpressionNode", + value: function isMemberExpressionNode(node) { + return node.type === NodeType_1.NodeType.MemberExpression; + } + }, { + key: "isProgramNode", + value: function isProgramNode(node) { + return node.type === NodeType_1.NodeType.Program; + } + }, { + key: "isPropertyNode", + value: function isPropertyNode(node) { + return node.type === NodeType_1.NodeType.Property; + } + }, { + key: "isVariableDeclarationNode", + value: function isVariableDeclarationNode(node) { + return node.type === NodeType_1.NodeType.VariableDeclaration; + } + }, { + key: "isVariableDeclaratorNode", + value: function isVariableDeclaratorNode(node) { + return node.type === NodeType_1.NodeType.VariableDeclarator; + } + }, { + key: "isNodeHasBlockStatement", + value: function isNodeHasBlockStatement(node) { + return node.hasOwnProperty('body') && Array.isArray(node.body); + } + }]); + + return Nodes; +}(); + +exports.Nodes = Nodes; + +/***/ }, +/* 3 */ /***/ function(module, exports) { "use strict"; @@ -362,7 +456,7 @@ exports.NodeUtils = NodeUtils; var AppendState = exports.AppendState; /***/ }, -/* 3 */ +/* 4 */ /***/ function(module, exports) { "use strict"; @@ -397,13 +491,13 @@ var Node = function () { exports.Node = Node; /***/ }, -/* 4 */ +/* 5 */ /***/ function(module, exports) { module.exports = require("estraverse"); /***/ }, -/* 5 */ +/* 6 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -414,7 +508,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 JSFuck_1 = __webpack_require__(16); -var Nodes_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); var NodeObfuscator = function () { @@ -441,15 +535,11 @@ var NodeObfuscator = function () { } }, { key: "replaceIdentifiersWithRandomNames", - value: function replaceIdentifiersWithRandomNames(node, parentNode, namesMap) { - if (Nodes_1.Nodes.isIdentifierNode(node) && namesMap.has(node.name)) { - var parentNodeIsPropertyNode = Nodes_1.Nodes.isPropertyNode(parentNode) && parentNode.key === node, - parentNodeIsMemberExpressionNode = Nodes_1.Nodes.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node; - if (parentNodeIsPropertyNode || parentNodeIsMemberExpressionNode) { - return; - } - node.name = namesMap.get(node.name); + value: function replaceIdentifiersWithRandomNames(node, namesMap) { + if (namesMap.has(node.name)) { + return namesMap.get(node.name); } + return node.name; } }, { key: "replaceLiteralBooleanWithJSFuck", @@ -512,80 +602,6 @@ var NodeObfuscator = function () { exports.NodeObfuscator = NodeObfuscator; -/***/ }, -/* 6 */ -/***/ 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 NodeType_1 = __webpack_require__(7); - -var Nodes = function () { - function Nodes() { - _classCallCheck(this, Nodes); - } - - _createClass(Nodes, null, [{ - key: "getProgramNode", - value: function getProgramNode(bodyNode) { - return { - 'type': NodeType_1.NodeType.Program, - 'body': bodyNode, - 'sourceType': 'script' - }; - } - }, { - key: "isBlockStatementNode", - value: function isBlockStatementNode(node) { - return node.type === NodeType_1.NodeType.BlockStatement; - } - }, { - key: "isIdentifierNode", - value: function isIdentifierNode(node) { - return node.type === NodeType_1.NodeType.Identifier; - } - }, { - key: "isLiteralNode", - value: function isLiteralNode(node) { - return node.type === NodeType_1.NodeType.Literal; - } - }, { - key: "isMemberExpressionNode", - value: function isMemberExpressionNode(node) { - return node.type === NodeType_1.NodeType.MemberExpression; - } - }, { - key: "isProgramNode", - value: function isProgramNode(node) { - return node.type === NodeType_1.NodeType.Program; - } - }, { - key: "isPropertyNode", - value: function isPropertyNode(node) { - return node.type === NodeType_1.NodeType.Property; - } - }, { - key: "isVariableDeclaratorNode", - value: function isVariableDeclaratorNode(node) { - return node.type === NodeType_1.NodeType.VariableDeclarator; - } - }, { - key: "isNodeHasBlockStatement", - value: function isNodeHasBlockStatement(node) { - return node.hasOwnProperty('body') && Array.isArray(node.body); - } - }]); - - return Nodes; -}(); - -exports.Nodes = Nodes; - /***/ }, /* 7 */ /***/ function(module, exports, __webpack_require__) { @@ -979,8 +995,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, 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 AppendState_1 = __webpack_require__(2); +var estraverse = __webpack_require__(5); +var AppendState_1 = __webpack_require__(3); var NodeType_1 = __webpack_require__(7); var CatchClauseObfuscator_1 = __webpack_require__(39); var ConsoleOutputNodesGroup_1 = __webpack_require__(35); @@ -990,7 +1006,7 @@ var FunctionObfuscator_1 = __webpack_require__(41); var LiteralObfuscator_1 = __webpack_require__(42); var MemberExpressionObfuscator_1 = __webpack_require__(43); var MethodDefinitionObfuscator_1 = __webpack_require__(44); -var Nodes_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); var ObjectExpressionObfuscator_1 = __webpack_require__(45); var SelfDefendingNodesGroup_1 = __webpack_require__(37); @@ -1426,9 +1442,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 AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(51); -var Node_1 = __webpack_require__(3); +var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var ConsoleOutputDisableExpressionNode = function (_Node_1$Node) { @@ -1482,9 +1498,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(52); -var Node_1 = __webpack_require__(3); +var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var DebugProtectionFunctionCallNode = function (_Node_1$Node) { @@ -1535,9 +1551,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(53); -var Node_1 = __webpack_require__(3); +var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var DebugProtectionFunctionIntervalNode = function (_Node_1$Node) { @@ -1588,9 +1604,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var DebugProtectionFunctionTemplate_1 = __webpack_require__(54); -var Node_1 = __webpack_require__(3); +var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1651,11 +1667,11 @@ 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 AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var NoCustomNodesPreset_1 = __webpack_require__(13); var SelfDefendingTemplate_1 = __webpack_require__(55); var JavaScriptObfuscator_1 = __webpack_require__(9); -var Node_1 = __webpack_require__(3); +var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1720,9 +1736,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(56); -var Node_1 = __webpack_require__(3); +var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1794,13 +1810,13 @@ 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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var NoCustomNodesPreset_1 = __webpack_require__(13); var AtobTemplate_1 = __webpack_require__(50); var SelfDefendingTemplate_1 = __webpack_require__(57); var UnicodeArrayDecodeTemplate_1 = __webpack_require__(58); var JavaScriptObfuscator_1 = __webpack_require__(9); -var Node_1 = __webpack_require__(3); +var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var UnicodeArrayDecodeNode = function (_Node_1$Node) { @@ -1875,9 +1891,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var UnicodeArrayTemplate_1 = __webpack_require__(59); -var Node_1 = __webpack_require__(3); +var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var UnicodeArrayNode = function (_Node_1$Node) { @@ -1961,12 +1977,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var NoCustomNodesPreset_1 = __webpack_require__(13); var SelfDefendingTemplate_1 = __webpack_require__(60); var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(61); var JavaScriptObfuscator_1 = __webpack_require__(9); -var Node_1 = __webpack_require__(3); +var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2220,8 +2236,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 estraverse = __webpack_require__(4); -var NodeObfuscator_1 = __webpack_require__(5); +var estraverse = __webpack_require__(5); +var NodeObfuscator_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var CatchClauseObfuscator = function (_NodeObfuscator_1$Nod) { _inherits(CatchClauseObfuscator, _NodeObfuscator_1$Nod); @@ -2264,8 +2281,10 @@ var CatchClauseObfuscator = function (_NodeObfuscator_1$Nod) { var _this3 = this; estraverse.replace(catchClauseNode, { - leave: function leave(node, parentNode) { - _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.catchClauseParam); + leave: function leave(node) { + if (Nodes_1.Nodes.isIdentifierNode(node)) { + node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.catchClauseParam); + } } }); } @@ -2291,9 +2310,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 estraverse = __webpack_require__(4); +var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(7); -var NodeObfuscator_1 = __webpack_require__(5); +var NodeObfuscator_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); var FunctionDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { @@ -2341,8 +2361,10 @@ var FunctionDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { var scopeNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(functionDeclarationNode); estraverse.replace(scopeNode, { - enter: function enter(node, parentNode) { - _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.functionName); + enter: function enter(node) { + if (Nodes_1.Nodes.isIdentifierNode(node)) { + node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.functionName); + } } }); } @@ -2368,8 +2390,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 estraverse = __webpack_require__(4); -var NodeObfuscator_1 = __webpack_require__(5); +var estraverse = __webpack_require__(5); +var NodeObfuscator_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var FunctionObfuscator = function (_NodeObfuscator_1$Nod) { _inherits(FunctionObfuscator, _NodeObfuscator_1$Nod); @@ -2414,8 +2437,10 @@ var FunctionObfuscator = function (_NodeObfuscator_1$Nod) { var _this3 = this; var replaceVisitor = { - leave: function leave(node, parentNode) { - _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.functionParams); + leave: function leave(node) { + if (Nodes_1.Nodes.isIdentifierNode(node)) { + node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.functionParams); + } } }; functionNode.params.forEach(function (paramsNode) { @@ -2448,8 +2473,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 escodegen = __webpack_require__(10); -var NodeObfuscator_1 = __webpack_require__(5); -var Nodes_1 = __webpack_require__(6); +var NodeObfuscator_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var LiteralObfuscator = function (_NodeObfuscator_1$Nod) { _inherits(LiteralObfuscator, _NodeObfuscator_1$Nod); @@ -2511,10 +2536,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 escodegen = __webpack_require__(10); -var estraverse = __webpack_require__(4); +var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(7); -var NodeObfuscator_1 = __webpack_require__(5); -var Nodes_1 = __webpack_require__(6); +var NodeObfuscator_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var MemberExpressionObfuscator = function (_NodeObfuscator_1$Nod) { _inherits(MemberExpressionObfuscator, _NodeObfuscator_1$Nod); @@ -2594,9 +2619,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 estraverse = __webpack_require__(4); -var NodeObfuscator_1 = __webpack_require__(5); -var Nodes_1 = __webpack_require__(6); +var estraverse = __webpack_require__(5); +var NodeObfuscator_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); var MethodDefinitionObfuscator = function (_NodeObfuscator_1$Nod) { @@ -2661,10 +2686,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 escodegen = __webpack_require__(10); -var estraverse = __webpack_require__(4); +var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(7); -var NodeObfuscator_1 = __webpack_require__(5); -var Nodes_1 = __webpack_require__(6); +var NodeObfuscator_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); var ObjectExpressionObfuscator = function (_NodeObfuscator_1$Nod) { @@ -2743,11 +2768,11 @@ 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 estraverse = __webpack_require__(4); +var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(7); -var NodeObfuscator_1 = __webpack_require__(5); +var NodeObfuscator_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var Utils_1 = __webpack_require__(0); var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { _inherits(VariableDeclarationObfuscator, _NodeObfuscator_1$Nod); @@ -2797,20 +2822,21 @@ var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { var scopeNode = variableDeclarationNode.kind === 'var' ? NodeUtils_1.NodeUtils.getBlockScopeOfNode(variableDeclarationNode) : variableParentNode, isNodeAfterVariableDeclaratorFlag = false; estraverse.replace(scopeNode, { - enter: function enter(node, parentNode) { - var functionNodes = [NodeType_1.NodeType.ArrowFunctionExpression, NodeType_1.NodeType.FunctionDeclaration, NodeType_1.NodeType.FunctionExpression]; - if (Utils_1.Utils.arrayContains(functionNodes, node.type)) { + enter: function enter(node) { + if (Nodes_1.Nodes.isArrowFunctionExpressionNode(node) || Nodes_1.Nodes.isFunctionDeclarationNode(node) || Nodes_1.Nodes.isFunctionExpressionNode(node)) { estraverse.replace(node, { - enter: function enter(node, parentNode) { - _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.variableNames); + enter: function enter(node) { + if (Nodes_1.Nodes.isIdentifierNode(node)) { + node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.variableNames); + } } }); } - if (node === variableDeclarationNode) { + if (Nodes_1.Nodes.isVariableDeclarationNode(node) && node === variableDeclarationNode) { isNodeAfterVariableDeclaratorFlag = true; } - if (isNodeAfterVariableDeclaratorFlag) { - _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.variableNames); + if (Nodes_1.Nodes.isIdentifierNode(node) && isNodeAfterVariableDeclaratorFlag) { + node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.variableNames); } } }); diff --git a/src/Nodes.ts b/src/Nodes.ts index 0dfba048..ed22f577 100644 --- a/src/Nodes.ts +++ b/src/Nodes.ts @@ -1,10 +1,14 @@ +import { IArrowFunctionExpressionNode } from "./interfaces/nodes/IArrowFunctionExpressionNode"; import { IBlockStatementNode } from "./interfaces/nodes/IBlockStatementNode"; import { IIdentifierNode } from "./interfaces/nodes/IIdentifierNode"; +import { IFunctionDeclarationNode } from "./interfaces/nodes/IFunctionDeclarationNode"; +import { IFunctionExpressionNode } from "./interfaces/nodes/IFunctionExpressionNode"; import { ILiteralNode } from "./interfaces/nodes/ILiteralNode"; import { IMemberExpressionNode } from "./interfaces/nodes/IMemberExpressionNode"; import { INode } from "./interfaces/nodes/INode"; import { IProgramNode } from "./interfaces/nodes/IProgramNode"; import { IPropertyNode } from "./interfaces/nodes/IPropertyNode"; +import { IVariableDeclarationNode } from "./interfaces/nodes/IVariableDeclarationNode"; import { IVariableDeclaratorNode } from "./interfaces/nodes/IVariableDeclaratorNode"; import { TStatement } from "./types/nodes/TStatement"; @@ -26,6 +30,14 @@ export class Nodes { }; } + /** + * @param node + * @returns {boolean} + */ + public static isArrowFunctionExpressionNode (node: INode): node is IArrowFunctionExpressionNode { + return node.type === NodeType.ArrowFunctionExpression; + } + /** * @param node * @returns {boolean} @@ -34,6 +46,22 @@ export class Nodes { return node.type === NodeType.BlockStatement; } + /** + * @param node + * @returns {boolean} + */ + public static isFunctionDeclarationNode (node: INode): node is IFunctionDeclarationNode { + return node.type === NodeType.FunctionDeclaration; + } + + /** + * @param node + * @returns {boolean} + */ + public static isFunctionExpressionNode (node: INode): node is IFunctionExpressionNode { + return node.type === NodeType.FunctionExpression; + } + /** * @param node * @returns {boolean} @@ -76,6 +104,15 @@ export class Nodes { return node.type === NodeType.Property; } + /** + * + * @param node + * @returns {boolean} + */ + public static isVariableDeclarationNode (node: INode): node is IVariableDeclarationNode { + return node.type === NodeType.VariableDeclaration; + } + /** * * @param node diff --git a/src/node-obfuscators/CatchClauseObfuscator.ts b/src/node-obfuscators/CatchClauseObfuscator.ts index 4061484c..d5f92ca1 100644 --- a/src/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-obfuscators/CatchClauseObfuscator.ts @@ -4,6 +4,7 @@ import { ICatchClauseNode } from "../interfaces/nodes/ICatchClauseNode"; import { INode } from '../interfaces/nodes/INode'; import { NodeObfuscator } from './NodeObfuscator'; +import { Nodes } from "../Nodes"; /** * replaces: @@ -41,8 +42,10 @@ export class CatchClauseObfuscator extends NodeObfuscator { */ private replaceCatchClauseParam (catchClauseNode: ICatchClauseNode): void { estraverse.replace(catchClauseNode, { - leave: (node: INode, parentNode: INode): any => { - this.replaceIdentifiersWithRandomNames(node, parentNode, this.catchClauseParam); + leave: (node: INode): any => { + if (Nodes.isIdentifierNode(node)) { + node.name = this.replaceIdentifiersWithRandomNames(node, this.catchClauseParam); + } } }); } diff --git a/src/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-obfuscators/FunctionDeclarationObfuscator.ts index 6cca873a..f52cf950 100644 --- a/src/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -6,6 +6,7 @@ import { INode } from "../interfaces/nodes/INode"; import { NodeType } from "../enums/NodeType"; import { NodeObfuscator } from './NodeObfuscator'; +import { Nodes } from "../Nodes"; import { NodeUtils } from "../NodeUtils"; /** @@ -54,8 +55,10 @@ export class FunctionDeclarationObfuscator extends NodeObfuscator { ); estraverse.replace(scopeNode, { - enter: (node: INode, parentNode: INode): any => { - this.replaceIdentifiersWithRandomNames(node, parentNode, this.functionName); + enter: (node: INode): any => { + if (Nodes.isIdentifierNode(node)) { + node.name = this.replaceIdentifiersWithRandomNames(node, this.functionName); + } } }); } diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index 73117633..436edb5f 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -4,6 +4,7 @@ import { IFunctionNode } from "../interfaces/nodes/IFunctionNode"; import { INode } from "../interfaces/nodes/INode"; import { NodeObfuscator } from './NodeObfuscator'; +import { Nodes } from "../Nodes"; /** * replaces: @@ -44,8 +45,10 @@ export class FunctionObfuscator extends NodeObfuscator { */ private replaceFunctionParams (functionNode: IFunctionNode): void { let replaceVisitor: estraverse.Visitor = { - leave: (node: INode, parentNode: INode): any => { - this.replaceIdentifiersWithRandomNames(node, parentNode, this.functionParams); + leave: (node: INode): any => { + if (Nodes.isIdentifierNode(node)) { + node.name = this.replaceIdentifiersWithRandomNames(node, this.functionParams); + } } }; diff --git a/src/node-obfuscators/NodeObfuscator.ts b/src/node-obfuscators/NodeObfuscator.ts index 7bc87dd4..52c3e68c 100644 --- a/src/node-obfuscators/NodeObfuscator.ts +++ b/src/node-obfuscators/NodeObfuscator.ts @@ -1,4 +1,5 @@ import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; +import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; import { INodeObfuscator } from '../interfaces/INodeObfuscator'; import { INode } from "../interfaces/nodes/INode"; import { IOptions } from "../interfaces/IOptions"; @@ -67,31 +68,15 @@ export abstract class NodeObfuscator implements INodeObfuscator { /** * @param node - * @param parentNode * @param namesMap + * @returns {string} */ - protected replaceIdentifiersWithRandomNames ( - node: INode, - parentNode: INode, - namesMap: Map - ): void { - if (Nodes.isIdentifierNode(node) && namesMap.has(node.name)) { - const parentNodeIsPropertyNode: boolean = ( - Nodes.isPropertyNode(parentNode) && - parentNode.key === node - ), - parentNodeIsMemberExpressionNode: boolean = ( - Nodes.isMemberExpressionNode(parentNode) && - parentNode.computed === false && - parentNode.property === node - ); - - if (parentNodeIsPropertyNode || parentNodeIsMemberExpressionNode) { - return; - } - - node.name = namesMap.get(node.name); + protected replaceIdentifiersWithRandomNames (node: IIdentifierNode, namesMap: Map ): string { + if (namesMap.has(node.name)) { + return namesMap.get(node.name); } + + return node.name; } /** diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index 97f479f5..49c5be6f 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -7,8 +7,8 @@ import { IVariableDeclaratorNode } from "../interfaces/nodes/IVariableDeclarator import { NodeType } from "../enums/NodeType"; import { NodeObfuscator } from './NodeObfuscator'; +import { Nodes } from "../Nodes"; import { NodeUtils } from "../NodeUtils"; -import { Utils } from '../Utils'; /** * replaces: @@ -62,27 +62,27 @@ export class VariableDeclarationObfuscator extends NodeObfuscator { isNodeAfterVariableDeclaratorFlag: boolean = false; estraverse.replace(scopeNode, { - enter: (node: INode, parentNode: INode): any => { - const functionNodes: string[] = [ - NodeType.ArrowFunctionExpression, - NodeType.FunctionDeclaration, - NodeType.FunctionExpression - ]; - - if (Utils.arrayContains(functionNodes, node.type)) { + enter: (node: INode): any => { + if ( + Nodes.isArrowFunctionExpressionNode(node) || + Nodes.isFunctionDeclarationNode(node) || + Nodes.isFunctionExpressionNode(node) + ) { estraverse.replace(node, { - enter: (node: INode, parentNode: INode): any => { - this.replaceIdentifiersWithRandomNames(node, parentNode, this.variableNames); + enter: (node: INode): any => { + if (Nodes.isIdentifierNode(node)) { + node.name = this.replaceIdentifiersWithRandomNames(node, this.variableNames); + } } }); } - if (node === variableDeclarationNode) { + if (Nodes.isVariableDeclarationNode(node) && node === variableDeclarationNode) { isNodeAfterVariableDeclaratorFlag = true; } - if (isNodeAfterVariableDeclaratorFlag) { - this.replaceIdentifiersWithRandomNames(node, parentNode, this.variableNames); + if (Nodes.isIdentifierNode(node) && isNodeAfterVariableDeclaratorFlag) { + node.name = this.replaceIdentifiersWithRandomNames(node, this.variableNames); } } }); diff --git a/tsconfig.json b/tsconfig.json index 18ed4fe5..3866be34 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,9 +22,5 @@ "node", "sinon" ] - }, - "exclude": [ - "node_modules", - "test" - ] + } } \ No newline at end of file From 319d4443b84595e2513c2270c25ace0131646fb6 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 30 Aug 2016 17:32:12 +0300 Subject: [PATCH 005/138] Identifier replacer refactoring --- dist/index.js | 30 +++++++------- src/node-obfuscators/CatchClauseObfuscator.ts | 4 +- .../FunctionDeclarationObfuscator.ts | 4 +- src/node-obfuscators/FunctionObfuscator.ts | 4 +- src/node-obfuscators/NodeObfuscator.ts | 23 +++++++++-- .../VariableDeclarationObfuscator.ts | 8 ++-- .../VariableDeclarationObfuscator.spec.ts | 41 +++++++++++++++++++ 7 files changed, 86 insertions(+), 28 deletions(-) diff --git a/dist/index.js b/dist/index.js index 9f70c022..4a2c98ba 100644 --- a/dist/index.js +++ b/dist/index.js @@ -535,11 +535,13 @@ var NodeObfuscator = function () { } }, { key: "replaceIdentifiersWithRandomNames", - value: function replaceIdentifiersWithRandomNames(node, namesMap) { - if (namesMap.has(node.name)) { - return namesMap.get(node.name); + value: function replaceIdentifiersWithRandomNames(node, parentNode, namesMap) { + var parentNodeIsPropertyNode = Nodes_1.Nodes.isPropertyNode(parentNode) && parentNode.key === node; + var parentNodeIsMemberExpressionNode = Nodes_1.Nodes.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node; + if (parentNodeIsPropertyNode || parentNodeIsMemberExpressionNode || !namesMap.has(node.name)) { + return node.name; } - return node.name; + return namesMap.get(node.name); } }, { key: "replaceLiteralBooleanWithJSFuck", @@ -2281,9 +2283,9 @@ var CatchClauseObfuscator = function (_NodeObfuscator_1$Nod) { var _this3 = this; estraverse.replace(catchClauseNode, { - leave: function leave(node) { + leave: function leave(node, parentNode) { if (Nodes_1.Nodes.isIdentifierNode(node)) { - node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.catchClauseParam); + node.name = _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.catchClauseParam); } } }); @@ -2361,9 +2363,9 @@ var FunctionDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { var scopeNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(functionDeclarationNode); estraverse.replace(scopeNode, { - enter: function enter(node) { + enter: function enter(node, parentNode) { if (Nodes_1.Nodes.isIdentifierNode(node)) { - node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.functionName); + node.name = _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.functionName); } } }); @@ -2437,9 +2439,9 @@ var FunctionObfuscator = function (_NodeObfuscator_1$Nod) { var _this3 = this; var replaceVisitor = { - leave: function leave(node) { + leave: function leave(node, parentNode) { if (Nodes_1.Nodes.isIdentifierNode(node)) { - node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.functionParams); + node.name = _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.functionParams); } } }; @@ -2822,12 +2824,12 @@ var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { var scopeNode = variableDeclarationNode.kind === 'var' ? NodeUtils_1.NodeUtils.getBlockScopeOfNode(variableDeclarationNode) : variableParentNode, isNodeAfterVariableDeclaratorFlag = false; estraverse.replace(scopeNode, { - enter: function enter(node) { + enter: function enter(node, parentNode) { if (Nodes_1.Nodes.isArrowFunctionExpressionNode(node) || Nodes_1.Nodes.isFunctionDeclarationNode(node) || Nodes_1.Nodes.isFunctionExpressionNode(node)) { estraverse.replace(node, { - enter: function enter(node) { + enter: function enter(node, parentNode) { if (Nodes_1.Nodes.isIdentifierNode(node)) { - node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.variableNames); + node.name = _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.variableNames); } } }); @@ -2836,7 +2838,7 @@ var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { isNodeAfterVariableDeclaratorFlag = true; } if (Nodes_1.Nodes.isIdentifierNode(node) && isNodeAfterVariableDeclaratorFlag) { - node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.variableNames); + node.name = _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.variableNames); } } }); diff --git a/src/node-obfuscators/CatchClauseObfuscator.ts b/src/node-obfuscators/CatchClauseObfuscator.ts index d5f92ca1..a7d5ddd4 100644 --- a/src/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-obfuscators/CatchClauseObfuscator.ts @@ -42,9 +42,9 @@ export class CatchClauseObfuscator extends NodeObfuscator { */ private replaceCatchClauseParam (catchClauseNode: ICatchClauseNode): void { estraverse.replace(catchClauseNode, { - leave: (node: INode): any => { + leave: (node: INode, parentNode: INode): any => { if (Nodes.isIdentifierNode(node)) { - node.name = this.replaceIdentifiersWithRandomNames(node, this.catchClauseParam); + node.name = this.replaceIdentifiersWithRandomNames(node, parentNode, this.catchClauseParam); } } }); diff --git a/src/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-obfuscators/FunctionDeclarationObfuscator.ts index f52cf950..1c2103ac 100644 --- a/src/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -55,9 +55,9 @@ export class FunctionDeclarationObfuscator extends NodeObfuscator { ); estraverse.replace(scopeNode, { - enter: (node: INode): any => { + enter: (node: INode, parentNode: INode): any => { if (Nodes.isIdentifierNode(node)) { - node.name = this.replaceIdentifiersWithRandomNames(node, this.functionName); + node.name = this.replaceIdentifiersWithRandomNames(node, parentNode, this.functionName); } } }); diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index 436edb5f..53c80e88 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -45,9 +45,9 @@ export class FunctionObfuscator extends NodeObfuscator { */ private replaceFunctionParams (functionNode: IFunctionNode): void { let replaceVisitor: estraverse.Visitor = { - leave: (node: INode): any => { + leave: (node: INode, parentNode: INode): any => { if (Nodes.isIdentifierNode(node)) { - node.name = this.replaceIdentifiersWithRandomNames(node, this.functionParams); + node.name = this.replaceIdentifiersWithRandomNames(node, parentNode, this.functionParams); } } }; diff --git a/src/node-obfuscators/NodeObfuscator.ts b/src/node-obfuscators/NodeObfuscator.ts index 52c3e68c..4a22ae56 100644 --- a/src/node-obfuscators/NodeObfuscator.ts +++ b/src/node-obfuscators/NodeObfuscator.ts @@ -68,15 +68,30 @@ export abstract class NodeObfuscator implements INodeObfuscator { /** * @param node + * @param parentNode * @param namesMap * @returns {string} */ - protected replaceIdentifiersWithRandomNames (node: IIdentifierNode, namesMap: Map ): string { - if (namesMap.has(node.name)) { - return namesMap.get(node.name); + protected replaceIdentifiersWithRandomNames (node: IIdentifierNode, parentNode: INode, namesMap: Map ): string { + const parentNodeIsPropertyNode: boolean = ( + Nodes.isPropertyNode(parentNode) && + parentNode.key === node + ); + const parentNodeIsMemberExpressionNode: boolean = ( + Nodes.isMemberExpressionNode(parentNode) && + parentNode.computed === false && + parentNode.property === node + ); + + if ( + parentNodeIsPropertyNode || + parentNodeIsMemberExpressionNode || + !namesMap.has(node.name) + ) { + return node.name; } - return node.name; + return namesMap.get(node.name); } /** diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index 49c5be6f..9a3b759b 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -62,16 +62,16 @@ export class VariableDeclarationObfuscator extends NodeObfuscator { isNodeAfterVariableDeclaratorFlag: boolean = false; estraverse.replace(scopeNode, { - enter: (node: INode): any => { + enter: (node: INode, parentNode: INode): any => { if ( Nodes.isArrowFunctionExpressionNode(node) || Nodes.isFunctionDeclarationNode(node) || Nodes.isFunctionExpressionNode(node) ) { estraverse.replace(node, { - enter: (node: INode): any => { + enter: (node: INode, parentNode: INode): any => { if (Nodes.isIdentifierNode(node)) { - node.name = this.replaceIdentifiersWithRandomNames(node, this.variableNames); + node.name = this.replaceIdentifiersWithRandomNames(node, parentNode, this.variableNames); } } }); @@ -82,7 +82,7 @@ export class VariableDeclarationObfuscator extends NodeObfuscator { } if (Nodes.isIdentifierNode(node) && isNodeAfterVariableDeclaratorFlag) { - node.name = this.replaceIdentifiersWithRandomNames(node, this.variableNames); + node.name = this.replaceIdentifiersWithRandomNames(node, parentNode, this.variableNames); } } }); diff --git a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts index 537e58a5..ac7ba2a8 100644 --- a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts @@ -85,4 +85,45 @@ describe('VariableDeclarationObfuscator', () => { assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(abc\);/); }); }); + + describe('wrong replacement', () => { + it('shouldn\'t replace property node identifier', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + ` + function foo () { + var test = 'abc'; + + var object = { + test: 'cde' + }; + + console.log(test); + } + `, + Object.assign({}, NO_CUSTOM_NODES_PRESET) + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){6} *= *\{'\\x74\\x65\\x73\\x74/); + }); + + it('shouldn\'t replace computed member expression identifier', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + ` + function foo () { + var test = 'abc'; + + var object = { + 'test': 'cde' + }; + + console.log(test); + console.log(object.test); + } + `, + Object.assign({}, NO_CUSTOM_NODES_PRESET) + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /_0x([a-z0-9]){6}\['\\x74\\x65\\x73\\x74'\]/); + }); + }); }); From 00e23737df80fbcfa85dc08f25a390bb3c6ecff0 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 30 Aug 2016 17:59:02 +0300 Subject: [PATCH 006/138] Identifier replacer refactoring --- dist/index.js | 5 +++-- src/node-obfuscators/NodeObfuscator.ts | 26 ++++++++++++-------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/dist/index.js b/dist/index.js index 4a2c98ba..13407596 100644 --- a/dist/index.js +++ b/dist/index.js @@ -536,12 +536,13 @@ var NodeObfuscator = function () { }, { key: "replaceIdentifiersWithRandomNames", value: function replaceIdentifiersWithRandomNames(node, parentNode, namesMap) { + var obfuscatedIdentifierName = namesMap.get(node.name); var parentNodeIsPropertyNode = Nodes_1.Nodes.isPropertyNode(parentNode) && parentNode.key === node; var parentNodeIsMemberExpressionNode = Nodes_1.Nodes.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node; - if (parentNodeIsPropertyNode || parentNodeIsMemberExpressionNode || !namesMap.has(node.name)) { + if (parentNodeIsPropertyNode || parentNodeIsMemberExpressionNode || !obfuscatedIdentifierName) { return node.name; } - return namesMap.get(node.name); + return obfuscatedIdentifierName; } }, { key: "replaceLiteralBooleanWithJSFuck", diff --git a/src/node-obfuscators/NodeObfuscator.ts b/src/node-obfuscators/NodeObfuscator.ts index 4a22ae56..99e1d25d 100644 --- a/src/node-obfuscators/NodeObfuscator.ts +++ b/src/node-obfuscators/NodeObfuscator.ts @@ -72,26 +72,24 @@ export abstract class NodeObfuscator implements INodeObfuscator { * @param namesMap * @returns {string} */ - protected replaceIdentifiersWithRandomNames (node: IIdentifierNode, parentNode: INode, namesMap: Map ): string { - const parentNodeIsPropertyNode: boolean = ( - Nodes.isPropertyNode(parentNode) && - parentNode.key === node - ); + protected replaceIdentifiersWithRandomNames ( + node: IIdentifierNode, + parentNode: INode, + namesMap: Map + ): string { + const obfuscatedIdentifierName: string|undefined = namesMap.get(node.name); + const parentNodeIsPropertyNode: boolean = Nodes.isPropertyNode(parentNode) && parentNode.key === node; const parentNodeIsMemberExpressionNode: boolean = ( Nodes.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node ); - if ( - parentNodeIsPropertyNode || - parentNodeIsMemberExpressionNode || - !namesMap.has(node.name) - ) { + if (parentNodeIsPropertyNode || parentNodeIsMemberExpressionNode || !obfuscatedIdentifierName) { return node.name; } - return namesMap.get(node.name); + return obfuscatedIdentifierName; } /** @@ -121,7 +119,7 @@ export abstract class NodeObfuscator implements INodeObfuscator { * @returns {string} */ protected replaceLiteralValueWithUnicodeValue (nodeValue: string): string { - let replaceWithUnicodeArrayFlag: boolean = Math.random() <= this.options.unicodeArrayThreshold; + const replaceWithUnicodeArrayFlag: boolean = Math.random() <= this.options.unicodeArrayThreshold; if (this.options.encodeUnicodeLiterals && replaceWithUnicodeArrayFlag) { nodeValue = Utils.btoa(nodeValue); @@ -141,7 +139,7 @@ export abstract class NodeObfuscator implements INodeObfuscator { * @returns {string} */ protected replaceLiteralValueWithUnicodeArrayCall (value: string): string { - let unicodeArrayNode: TUnicodeArrayNode = this.nodes.get('unicodeArrayNode'); + const unicodeArrayNode: TUnicodeArrayNode = this.nodes.get('unicodeArrayNode'); if (!unicodeArrayNode) { throw new ReferenceError('`unicodeArrayNode` node is not found in Map with custom nodes.'); @@ -162,7 +160,7 @@ export abstract class NodeObfuscator implements INodeObfuscator { hexadecimalIndex = this.replaceLiteralNumberWithHexadecimalValue(indexOfValue); if (this.options.wrapUnicodeArrayCalls) { - let unicodeArrayCallsWrapper: TUnicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); + const unicodeArrayCallsWrapper: TUnicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); if (!unicodeArrayCallsWrapper) { throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); From 3a2d69517509d39cadd5442ab39c311e07b8083c Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 30 Aug 2016 19:33:46 +0300 Subject: [PATCH 007/138] Replacers and refactoring --- dist/index.js | 770 +++++++++++------- src/Nodes.ts | 20 + src/Obfuscator.ts | 2 +- .../{Node.ts => AbstractCustomNode.ts} | 2 +- .../ConsoleOutputDisableExpressionNode.ts | 4 +- .../DebugProtectionFunctionCallNode.ts | 4 +- .../DebugProtectionFunctionIntervalNode.ts | 4 +- .../DebugProtectionFunctionNode.ts | 4 +- .../SelfDefendingUnicodeNode.ts | 4 +- .../UnicodeArrayCallsWrapper.ts | 4 +- .../UnicodeArrayDecodeNode.ts | 4 +- .../unicode-array-nodes/UnicodeArrayNode.ts | 4 +- .../UnicodeArrayRotateFunctionNode.ts | 4 +- src/interfaces/IReplacer.d.ts | 3 + .../{NodesGroup.ts => AbstractNodesGroup.ts} | 4 +- src/node-groups/ConsoleOutputNodesGroup.ts | 4 +- src/node-groups/DebugProtectionNodesGroup.ts | 4 +- src/node-groups/SelfDefendingNodesGroup.ts | 4 +- src/node-groups/UnicodeArrayNodesGroup.ts | 4 +- .../AbstractNodeObfuscator.ts | 61 ++ src/node-obfuscators/CatchClauseObfuscator.ts | 10 +- .../FunctionDeclarationObfuscator.ts | 10 +- src/node-obfuscators/FunctionObfuscator.ts | 10 +- src/node-obfuscators/LiteralObfuscator.ts | 20 +- .../MemberExpressionObfuscator.ts | 9 +- .../MethodDefinitionObfuscator.ts | 8 +- src/node-obfuscators/NodeObfuscator.ts | 174 ---- .../ObjectExpressionObfuscator.ts | 4 +- .../VariableDeclarationObfuscator.ts | 15 +- .../replacers/AbstractReplacer.ts | 31 + .../replacers/BooleanLiteralReplacer.ts | 13 + .../replacers/IdentifierReplacer.ts | 18 + .../replacers/NumberLiteralReplacer.ts | 18 + .../replacers/StringLiteralReplacer.ts | 64 ++ test/unit-tests/NodeUtils.spec.ts | 6 +- 35 files changed, 783 insertions(+), 541 deletions(-) rename src/custom-nodes/{Node.ts => AbstractCustomNode.ts} (93%) create mode 100644 src/interfaces/IReplacer.d.ts rename src/node-groups/{NodesGroup.ts => AbstractNodesGroup.ts} (83%) create mode 100644 src/node-obfuscators/AbstractNodeObfuscator.ts delete mode 100644 src/node-obfuscators/NodeObfuscator.ts create mode 100644 src/node-obfuscators/replacers/AbstractReplacer.ts create mode 100644 src/node-obfuscators/replacers/BooleanLiteralReplacer.ts create mode 100644 src/node-obfuscators/replacers/IdentifierReplacer.ts create mode 100644 src/node-obfuscators/replacers/NumberLiteralReplacer.ts create mode 100644 src/node-obfuscators/replacers/StringLiteralReplacer.ts diff --git a/dist/index.js b/dist/index.js index 13407596..9b19c173 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 = 67); +/******/ return __webpack_require__(__webpack_require__.s = 72); /******/ }) /************************************************************************/ /******/ ([ @@ -102,8 +102,8 @@ 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__(62); -var JSFuck_1 = __webpack_require__(16); +var chance_1 = __webpack_require__(67); +var JSFuck_1 = __webpack_require__(19); var Utils = function () { function Utils() { @@ -218,7 +218,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__(10); -var esprima = __webpack_require__(18); +var esprima = __webpack_require__(22); var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); @@ -420,6 +420,16 @@ var Nodes = function () { value: function isPropertyNode(node) { return node.type === NodeType_1.NodeType.Property; } + }, { + key: "isReplaceableIdentifierNode", + value: function isReplaceableIdentifierNode(node, parentNode) { + if (!Nodes.isIdentifierNode(node)) { + return false; + } + var parentNodeIsPropertyNode = Nodes.isPropertyNode(parentNode) && parentNode.key === node; + var parentNodeIsMemberExpressionNode = Nodes.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node; + return !parentNodeIsPropertyNode && !parentNodeIsMemberExpressionNode; + } }, { key: "isVariableDeclarationNode", value: function isVariableDeclarationNode(node) { @@ -466,14 +476,14 @@ 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 Node = function () { - function Node(options) { - _classCallCheck(this, Node); +var AbstractCustomNode = function () { + function AbstractCustomNode(options) { + _classCallCheck(this, AbstractCustomNode); this.options = options; } - _createClass(Node, [{ + _createClass(AbstractCustomNode, [{ key: "getAppendState", value: function getAppendState() { return this.appendState; @@ -485,10 +495,10 @@ var Node = function () { } }]); - return Node; + return AbstractCustomNode; }(); -exports.Node = Node; +exports.AbstractCustomNode = AbstractCustomNode; /***/ }, /* 5 */ @@ -507,19 +517,18 @@ 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 JSFuck_1 = __webpack_require__(16); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); -var NodeObfuscator = function () { - function NodeObfuscator(nodes, options) { - _classCallCheck(this, NodeObfuscator); +var AbstractNodeObfuscator = function () { + function AbstractNodeObfuscator(nodes, options) { + _classCallCheck(this, AbstractNodeObfuscator); this.nodes = nodes; this.options = options; } - _createClass(NodeObfuscator, [{ + _createClass(AbstractNodeObfuscator, [{ key: "isReservedName", value: function isReservedName(name) { return this.options.reservedNames.some(function (reservedName) { @@ -533,77 +542,12 @@ var NodeObfuscator = function () { namesMap.set(node.name, Utils_1.Utils.getRandomVariableName()); } } - }, { - key: "replaceIdentifiersWithRandomNames", - value: function replaceIdentifiersWithRandomNames(node, parentNode, namesMap) { - var obfuscatedIdentifierName = namesMap.get(node.name); - var parentNodeIsPropertyNode = Nodes_1.Nodes.isPropertyNode(parentNode) && parentNode.key === node; - var parentNodeIsMemberExpressionNode = Nodes_1.Nodes.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node; - if (parentNodeIsPropertyNode || parentNodeIsMemberExpressionNode || !obfuscatedIdentifierName) { - return node.name; - } - return obfuscatedIdentifierName; - } - }, { - key: "replaceLiteralBooleanWithJSFuck", - value: function replaceLiteralBooleanWithJSFuck(nodeValue) { - return nodeValue ? JSFuck_1.JSFuck.True : JSFuck_1.JSFuck.False; - } - }, { - key: "replaceLiteralNumberWithHexadecimalValue", - value: function replaceLiteralNumberWithHexadecimalValue(nodeValue) { - var prefix = '0x'; - if (!Utils_1.Utils.isInteger(nodeValue)) { - return String(nodeValue); - } - return "" + prefix + Utils_1.Utils.decToHex(nodeValue); - } - }, { - key: "replaceLiteralValueWithUnicodeValue", - value: function replaceLiteralValueWithUnicodeValue(nodeValue) { - var replaceWithUnicodeArrayFlag = Math.random() <= this.options.unicodeArrayThreshold; - if (this.options.encodeUnicodeLiterals && replaceWithUnicodeArrayFlag) { - nodeValue = Utils_1.Utils.btoa(nodeValue); - } - nodeValue = Utils_1.Utils.stringToUnicode(nodeValue); - if (this.options.unicodeArray && replaceWithUnicodeArrayFlag) { - return this.replaceLiteralValueWithUnicodeArrayCall(nodeValue); - } - return nodeValue; - } - }, { - key: "replaceLiteralValueWithUnicodeArrayCall", - value: function replaceLiteralValueWithUnicodeArrayCall(value) { - var unicodeArrayNode = this.nodes.get('unicodeArrayNode'); - if (!unicodeArrayNode) { - throw new ReferenceError('`unicodeArrayNode` node is not found in Map with custom nodes.'); - } - var unicodeArray = unicodeArrayNode.getNodeData(), - indexOfExistingValue = unicodeArray.getIndexOf(value), - indexOfValue = void 0, - hexadecimalIndex = void 0; - if (indexOfExistingValue >= 0) { - indexOfValue = indexOfExistingValue; - } else { - indexOfValue = unicodeArray.getLength(); - unicodeArrayNode.updateNodeData(value); - } - hexadecimalIndex = this.replaceLiteralNumberWithHexadecimalValue(indexOfValue); - if (this.options.wrapUnicodeArrayCalls) { - var unicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); - if (!unicodeArrayCallsWrapper) { - throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); - } - return unicodeArrayCallsWrapper.getNodeIdentifier() + "('" + hexadecimalIndex + "')"; - } - return unicodeArrayNode.getNodeIdentifier() + "[" + hexadecimalIndex + "]"; - } }]); - return NodeObfuscator; + return AbstractNodeObfuscator; }(); -exports.NodeObfuscator = NodeObfuscator; +exports.AbstractNodeObfuscator = AbstractNodeObfuscator; /***/ }, /* 7 */ @@ -660,8 +604,8 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var JavaScriptObfuscatorCLI_1 = __webpack_require__(25); -var JavaScriptObfuscatorInternal_1 = __webpack_require__(14); +var JavaScriptObfuscatorCLI_1 = __webpack_require__(29); +var JavaScriptObfuscatorInternal_1 = __webpack_require__(17); var JavaScriptObfuscator = function () { function JavaScriptObfuscator() { @@ -718,28 +662,163 @@ 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 NodesGroup = function () { - function NodesGroup(options) { - _classCallCheck(this, NodesGroup); +var AbstractNodesGroup = function () { + function AbstractNodesGroup(options) { + _classCallCheck(this, AbstractNodesGroup); this.nodes = new Map(); this.options = options; } - _createClass(NodesGroup, [{ + _createClass(AbstractNodesGroup, [{ key: "getNodes", value: function getNodes() { return this.nodes; } }]); - return NodesGroup; + return AbstractNodesGroup; }(); -exports.NodesGroup = NodesGroup; +exports.AbstractNodesGroup = AbstractNodesGroup; /***/ }, /* 13 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var AbstractReplacer = function AbstractReplacer(nodes, options) { + _classCallCheck(this, AbstractReplacer); + + this.nodes = nodes; + this.options = options; +}; + +exports.AbstractReplacer = AbstractReplacer; + +/***/ }, +/* 14 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +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 AbstractReplacer_1 = __webpack_require__(13); + +var IdentifierReplacer = function (_AbstractReplacer_1$A) { + _inherits(IdentifierReplacer, _AbstractReplacer_1$A); + + function IdentifierReplacer() { + _classCallCheck(this, IdentifierReplacer); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(IdentifierReplacer).apply(this, arguments)); + } + + _createClass(IdentifierReplacer, [{ + key: "replace", + value: function replace(nodeValue, namesMap) { + var obfuscatedIdentifierName = namesMap.get(nodeValue); + if (!obfuscatedIdentifierName) { + return nodeValue; + } + return obfuscatedIdentifierName; + } + }]); + + return IdentifierReplacer; +}(AbstractReplacer_1.AbstractReplacer); + +exports.IdentifierReplacer = IdentifierReplacer; + +/***/ }, +/* 15 */ +/***/ 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"); } } + +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 AbstractReplacer_1 = __webpack_require__(13); +var NumberLiteralReplacer_1 = __webpack_require__(20); +var Utils_1 = __webpack_require__(0); + +var StringLiteralReplacer = function (_AbstractReplacer_1$A) { + _inherits(StringLiteralReplacer, _AbstractReplacer_1$A); + + function StringLiteralReplacer() { + _classCallCheck(this, StringLiteralReplacer); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(StringLiteralReplacer).apply(this, arguments)); + } + + _createClass(StringLiteralReplacer, [{ + key: "replace", + value: function replace(nodeValue) { + var replaceWithUnicodeArrayFlag = Math.random() <= this.options.unicodeArrayThreshold; + if (this.options.encodeUnicodeLiterals && replaceWithUnicodeArrayFlag) { + nodeValue = Utils_1.Utils.btoa(nodeValue); + } + nodeValue = Utils_1.Utils.stringToUnicode(nodeValue); + if (this.options.unicodeArray && replaceWithUnicodeArrayFlag) { + return this.replaceStringLiteralWithUnicodeArrayCall(nodeValue); + } + return nodeValue; + } + }, { + key: "replaceStringLiteralWithUnicodeArrayCall", + value: function replaceStringLiteralWithUnicodeArrayCall(value) { + var unicodeArrayNode = this.nodes.get('unicodeArrayNode'); + if (!unicodeArrayNode) { + throw new ReferenceError('`unicodeArrayNode` node is not found in Map with custom nodes.'); + } + var unicodeArray = unicodeArrayNode.getNodeData(), + indexOfExistingValue = unicodeArray.getIndexOf(value), + indexOfValue = void 0, + hexadecimalIndex = void 0; + if (indexOfExistingValue >= 0) { + indexOfValue = indexOfExistingValue; + } else { + indexOfValue = unicodeArray.getLength(); + unicodeArrayNode.updateNodeData(value); + } + hexadecimalIndex = new NumberLiteralReplacer_1.NumberLiteralReplacer(this.nodes, this.options).replace(indexOfValue); + if (this.options.wrapUnicodeArrayCalls) { + var unicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); + if (!unicodeArrayCallsWrapper) { + throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); + } + return unicodeArrayCallsWrapper.getNodeIdentifier() + "('" + hexadecimalIndex + "')"; + } + return unicodeArrayNode.getNodeIdentifier() + "[" + hexadecimalIndex + "]"; + } + }]); + + return StringLiteralReplacer; +}(AbstractReplacer_1.AbstractReplacer); + +exports.StringLiteralReplacer = StringLiteralReplacer; + +/***/ }, +/* 16 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -763,7 +842,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ }); /***/ }, -/* 14 */ +/* 17 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -773,12 +852,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 esprima = __webpack_require__(18); +var esprima = __webpack_require__(22); var escodegen = __webpack_require__(10); -var ObfuscationResult_1 = __webpack_require__(15); -var Obfuscator_1 = __webpack_require__(21); -var Options_1 = __webpack_require__(47); -var SourceMapCorrector_1 = __webpack_require__(22); +var ObfuscationResult_1 = __webpack_require__(18); +var Obfuscator_1 = __webpack_require__(25); +var Options_1 = __webpack_require__(52); +var SourceMapCorrector_1 = __webpack_require__(26); var JavaScriptObfuscatorInternal = function () { function JavaScriptObfuscatorInternal(sourceCode, obfuscatorOptions) { @@ -838,7 +917,7 @@ JavaScriptObfuscatorInternal.escodegenParams = { exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; /***/ }, -/* 15 */ +/* 18 */ /***/ function(module, exports) { "use strict"; @@ -879,7 +958,7 @@ var ObfuscationResult = function () { exports.ObfuscationResult = ObfuscationResult; /***/ }, -/* 16 */ +/* 19 */ /***/ function(module, exports) { "use strict"; @@ -944,7 +1023,50 @@ exports.JSFuck = { }; /***/ }, -/* 17 */ +/* 20 */ +/***/ 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"); } } + +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 AbstractReplacer_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(0); + +var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { + _inherits(NumberLiteralReplacer, _AbstractReplacer_1$A); + + function NumberLiteralReplacer() { + _classCallCheck(this, NumberLiteralReplacer); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(NumberLiteralReplacer).apply(this, arguments)); + } + + _createClass(NumberLiteralReplacer, [{ + key: "replace", + value: function replace(nodeValue) { + var prefix = '0x'; + if (!Utils_1.Utils.isInteger(nodeValue)) { + return String(nodeValue); + } + return "" + prefix + Utils_1.Utils.decToHex(nodeValue); + } + }]); + + return NumberLiteralReplacer; +}(AbstractReplacer_1.AbstractReplacer); + +exports.NumberLiteralReplacer = NumberLiteralReplacer; + +/***/ }, +/* 21 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -968,25 +1090,25 @@ exports.DEFAULT_PRESET = Object.freeze({ }); /***/ }, -/* 18 */ +/* 22 */ /***/ function(module, exports) { module.exports = require("esprima"); /***/ }, -/* 19 */ +/* 23 */ /***/ function(module, exports) { module.exports = require("path"); /***/ }, -/* 20 */ +/* 24 */ /***/ function(module, exports) { module.exports = require("babel-polyfill"); /***/ }, -/* 21 */ +/* 25 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1001,20 +1123,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(5); var AppendState_1 = __webpack_require__(3); var NodeType_1 = __webpack_require__(7); -var CatchClauseObfuscator_1 = __webpack_require__(39); -var ConsoleOutputNodesGroup_1 = __webpack_require__(35); -var DebugProtectionNodesGroup_1 = __webpack_require__(36); -var FunctionDeclarationObfuscator_1 = __webpack_require__(40); -var FunctionObfuscator_1 = __webpack_require__(41); -var LiteralObfuscator_1 = __webpack_require__(42); -var MemberExpressionObfuscator_1 = __webpack_require__(43); -var MethodDefinitionObfuscator_1 = __webpack_require__(44); +var CatchClauseObfuscator_1 = __webpack_require__(43); +var ConsoleOutputNodesGroup_1 = __webpack_require__(39); +var DebugProtectionNodesGroup_1 = __webpack_require__(40); +var FunctionDeclarationObfuscator_1 = __webpack_require__(44); +var FunctionObfuscator_1 = __webpack_require__(45); +var LiteralObfuscator_1 = __webpack_require__(46); +var MemberExpressionObfuscator_1 = __webpack_require__(47); +var MethodDefinitionObfuscator_1 = __webpack_require__(48); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var ObjectExpressionObfuscator_1 = __webpack_require__(45); -var SelfDefendingNodesGroup_1 = __webpack_require__(37); -var UnicodeArrayNodesGroup_1 = __webpack_require__(38); -var VariableDeclarationObfuscator_1 = __webpack_require__(46); +var ObjectExpressionObfuscator_1 = __webpack_require__(49); +var SelfDefendingNodesGroup_1 = __webpack_require__(41); +var UnicodeArrayNodesGroup_1 = __webpack_require__(42); +var VariableDeclarationObfuscator_1 = __webpack_require__(50); var Obfuscator = function () { function Obfuscator(options) { @@ -1087,7 +1209,7 @@ var Obfuscator = function () { exports.Obfuscator = Obfuscator; /***/ }, -/* 22 */ +/* 26 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1098,7 +1220,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 SourceMapMode_1 = __webpack_require__(11); -var ObfuscationResult_1 = __webpack_require__(15); +var ObfuscationResult_1 = __webpack_require__(18); var Utils_1 = __webpack_require__(0); var SourceMapCorrector = function () { @@ -1153,7 +1275,7 @@ var SourceMapCorrector = function () { exports.SourceMapCorrector = SourceMapCorrector; /***/ }, -/* 23 */ +/* 27 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1210,7 +1332,7 @@ var UnicodeArray = function () { exports.UnicodeArray = UnicodeArray; /***/ }, -/* 24 */ +/* 28 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1220,9 +1342,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__(65); -var mkdirp = __webpack_require__(66); -var path = __webpack_require__(19); +var fs = __webpack_require__(70); +var mkdirp = __webpack_require__(71); +var path = __webpack_require__(23); var Utils_1 = __webpack_require__(0); var CLIUtils = function () { @@ -1294,7 +1416,7 @@ CLIUtils.encoding = 'utf8'; exports.CLIUtils = CLIUtils; /***/ }, -/* 25 */ +/* 29 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1304,13 +1426,13 @@ 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__(64); -var path = __webpack_require__(19); +var commander = __webpack_require__(69); +var path = __webpack_require__(23); var SourceMapMode_1 = __webpack_require__(11); -var DefaultPreset_1 = __webpack_require__(17); -var CLIUtils_1 = __webpack_require__(24); +var DefaultPreset_1 = __webpack_require__(21); +var CLIUtils_1 = __webpack_require__(28); var JavaScriptObfuscator_1 = __webpack_require__(9); -var JavaScriptObfuscatorInternal_1 = __webpack_require__(14); +var JavaScriptObfuscatorInternal_1 = __webpack_require__(17); var Utils_1 = __webpack_require__(0); var JavaScriptObfuscatorCLI = function () { @@ -1431,7 +1553,7 @@ var JavaScriptObfuscatorCLI = function () { exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; /***/ }, -/* 26 */ +/* 30 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1446,12 +1568,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 AppendState_1 = __webpack_require__(3); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(51); -var Node_1 = __webpack_require__(4); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(56); +var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var ConsoleOutputDisableExpressionNode = function (_Node_1$Node) { - _inherits(ConsoleOutputDisableExpressionNode, _Node_1$Node); +var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { + _inherits(ConsoleOutputDisableExpressionNode, _AbstractCustomNode_); function ConsoleOutputDisableExpressionNode() { var _Object$getPrototypeO; @@ -1481,12 +1603,12 @@ var ConsoleOutputDisableExpressionNode = function (_Node_1$Node) { }]); return ConsoleOutputDisableExpressionNode; -}(Node_1.Node); +}(AbstractCustomNode_1.AbstractCustomNode); exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; /***/ }, -/* 27 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1502,12 +1624,12 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(3); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(52); -var Node_1 = __webpack_require__(4); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(57); +var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var DebugProtectionFunctionCallNode = function (_Node_1$Node) { - _inherits(DebugProtectionFunctionCallNode, _Node_1$Node); +var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { + _inherits(DebugProtectionFunctionCallNode, _AbstractCustomNode_); function DebugProtectionFunctionCallNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionCallNode); @@ -1534,12 +1656,12 @@ var DebugProtectionFunctionCallNode = function (_Node_1$Node) { }]); return DebugProtectionFunctionCallNode; -}(Node_1.Node); +}(AbstractCustomNode_1.AbstractCustomNode); exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; /***/ }, -/* 28 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1555,12 +1677,12 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(3); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(53); -var Node_1 = __webpack_require__(4); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(58); +var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var DebugProtectionFunctionIntervalNode = function (_Node_1$Node) { - _inherits(DebugProtectionFunctionIntervalNode, _Node_1$Node); +var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { + _inherits(DebugProtectionFunctionIntervalNode, _AbstractCustomNode_); function DebugProtectionFunctionIntervalNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionIntervalNode); @@ -1587,12 +1709,12 @@ var DebugProtectionFunctionIntervalNode = function (_Node_1$Node) { }]); return DebugProtectionFunctionIntervalNode; -}(Node_1.Node); +}(AbstractCustomNode_1.AbstractCustomNode); exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; /***/ }, -/* 29 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1608,13 +1730,13 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(3); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(54); -var Node_1 = __webpack_require__(4); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(59); +var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var DebugProtectionFunctionNode = function (_Node_1$Node) { - _inherits(DebugProtectionFunctionNode, _Node_1$Node); +var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { + _inherits(DebugProtectionFunctionNode, _AbstractCustomNode_); function DebugProtectionFunctionNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionNode); @@ -1651,12 +1773,12 @@ var DebugProtectionFunctionNode = function (_Node_1$Node) { }]); return DebugProtectionFunctionNode; -}(Node_1.Node); +}(AbstractCustomNode_1.AbstractCustomNode); exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; /***/ }, -/* 30 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1671,15 +1793,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 AppendState_1 = __webpack_require__(3); -var NoCustomNodesPreset_1 = __webpack_require__(13); -var SelfDefendingTemplate_1 = __webpack_require__(55); +var NoCustomNodesPreset_1 = __webpack_require__(16); +var SelfDefendingTemplate_1 = __webpack_require__(60); +var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); -var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var SelfDefendingUnicodeNode = function (_Node_1$Node) { - _inherits(SelfDefendingUnicodeNode, _Node_1$Node); +var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { + _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); function SelfDefendingUnicodeNode() { var _Object$getPrototypeO; @@ -1717,12 +1839,12 @@ var SelfDefendingUnicodeNode = function (_Node_1$Node) { }]); return SelfDefendingUnicodeNode; -}(Node_1.Node); +}(AbstractCustomNode_1.AbstractCustomNode); exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 31 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1740,13 +1862,13 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(3); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(56); -var Node_1 = __webpack_require__(4); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(61); +var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var UnicodeArrayCallsWrapper = function (_Node_1$Node) { - _inherits(UnicodeArrayCallsWrapper, _Node_1$Node); +var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { + _inherits(UnicodeArrayCallsWrapper, _AbstractCustomNode_); function UnicodeArrayCallsWrapper(unicodeArrayCallsWrapperName, unicodeArrayName, unicodeArray, options) { _classCallCheck(this, UnicodeArrayCallsWrapper); @@ -1791,12 +1913,12 @@ var UnicodeArrayCallsWrapper = function (_Node_1$Node) { }]); return UnicodeArrayCallsWrapper; -}(Node_1.Node); +}(AbstractCustomNode_1.AbstractCustomNode); exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; /***/ }, -/* 32 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1814,16 +1936,16 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(3); -var NoCustomNodesPreset_1 = __webpack_require__(13); -var AtobTemplate_1 = __webpack_require__(50); -var SelfDefendingTemplate_1 = __webpack_require__(57); -var UnicodeArrayDecodeTemplate_1 = __webpack_require__(58); +var NoCustomNodesPreset_1 = __webpack_require__(16); +var AtobTemplate_1 = __webpack_require__(55); +var SelfDefendingTemplate_1 = __webpack_require__(62); +var UnicodeArrayDecodeTemplate_1 = __webpack_require__(63); +var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); -var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var UnicodeArrayDecodeNode = function (_Node_1$Node) { - _inherits(UnicodeArrayDecodeNode, _Node_1$Node); +var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { + _inherits(UnicodeArrayDecodeNode, _AbstractCustomNode_); function UnicodeArrayDecodeNode(unicodeArrayName, unicodeArray, options) { _classCallCheck(this, UnicodeArrayDecodeNode); @@ -1872,12 +1994,12 @@ var UnicodeArrayDecodeNode = function (_Node_1$Node) { }]); return UnicodeArrayDecodeNode; -}(Node_1.Node); +}(AbstractCustomNode_1.AbstractCustomNode); exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; /***/ }, -/* 33 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1895,12 +2017,12 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(3); -var UnicodeArrayTemplate_1 = __webpack_require__(59); -var Node_1 = __webpack_require__(4); +var UnicodeArrayTemplate_1 = __webpack_require__(64); +var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var UnicodeArrayNode = function (_Node_1$Node) { - _inherits(UnicodeArrayNode, _Node_1$Node); +var UnicodeArrayNode = function (_AbstractCustomNode_) { + _inherits(UnicodeArrayNode, _AbstractCustomNode_); function UnicodeArrayNode(unicodeArray, unicodeArrayName) { var unicodeArrayRotateValue = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2]; @@ -1957,13 +2079,13 @@ var UnicodeArrayNode = function (_Node_1$Node) { }]); return UnicodeArrayNode; -}(Node_1.Node); +}(AbstractCustomNode_1.AbstractCustomNode); UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH = 4; exports.UnicodeArrayNode = UnicodeArrayNode; /***/ }, -/* 34 */ +/* 38 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1981,16 +2103,16 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(3); -var NoCustomNodesPreset_1 = __webpack_require__(13); -var SelfDefendingTemplate_1 = __webpack_require__(60); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(61); +var NoCustomNodesPreset_1 = __webpack_require__(16); +var SelfDefendingTemplate_1 = __webpack_require__(65); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(66); +var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); -var Node_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var UnicodeArrayRotateFunctionNode = function (_Node_1$Node) { - _inherits(UnicodeArrayRotateFunctionNode, _Node_1$Node); +var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { + _inherits(UnicodeArrayRotateFunctionNode, _AbstractCustomNode_); function UnicodeArrayRotateFunctionNode(unicodeArrayName, unicodeArray, unicodeArrayRotateValue, options) { _classCallCheck(this, UnicodeArrayRotateFunctionNode); @@ -2042,12 +2164,12 @@ var UnicodeArrayRotateFunctionNode = function (_Node_1$Node) { }]); return UnicodeArrayRotateFunctionNode; -}(Node_1.Node); +}(AbstractCustomNode_1.AbstractCustomNode); exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, -/* 35 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2059,11 +2181,11 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(26); -var NodesGroup_1 = __webpack_require__(12); +var AbstractNodesGroup_1 = __webpack_require__(12); +var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(30); -var ConsoleOutputNodesGroup = function (_NodesGroup_1$NodesGr) { - _inherits(ConsoleOutputNodesGroup, _NodesGroup_1$NodesGr); +var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { + _inherits(ConsoleOutputNodesGroup, _AbstractNodesGroup_); function ConsoleOutputNodesGroup(options) { _classCallCheck(this, ConsoleOutputNodesGroup); @@ -2078,12 +2200,12 @@ var ConsoleOutputNodesGroup = function (_NodesGroup_1$NodesGr) { } return ConsoleOutputNodesGroup; -}(NodesGroup_1.NodesGroup); +}(AbstractNodesGroup_1.AbstractNodesGroup); exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; /***/ }, -/* 36 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2095,14 +2217,14 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var DebugProtectionFunctionCallNode_1 = __webpack_require__(27); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(28); -var DebugProtectionFunctionNode_1 = __webpack_require__(29); -var NodesGroup_1 = __webpack_require__(12); +var DebugProtectionFunctionCallNode_1 = __webpack_require__(31); +var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(32); +var DebugProtectionFunctionNode_1 = __webpack_require__(33); +var AbstractNodesGroup_1 = __webpack_require__(12); var Utils_1 = __webpack_require__(0); -var DebugProtectionNodesGroup = function (_NodesGroup_1$NodesGr) { - _inherits(DebugProtectionNodesGroup, _NodesGroup_1$NodesGr); +var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { + _inherits(DebugProtectionNodesGroup, _AbstractNodesGroup_); function DebugProtectionNodesGroup(options) { _classCallCheck(this, DebugProtectionNodesGroup); @@ -2122,12 +2244,12 @@ var DebugProtectionNodesGroup = function (_NodesGroup_1$NodesGr) { } return DebugProtectionNodesGroup; -}(NodesGroup_1.NodesGroup); +}(AbstractNodesGroup_1.AbstractNodesGroup); exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; /***/ }, -/* 37 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2139,11 +2261,11 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var NodesGroup_1 = __webpack_require__(12); -var SelfDefendingUnicodeNode_1 = __webpack_require__(30); +var AbstractNodesGroup_1 = __webpack_require__(12); +var SelfDefendingUnicodeNode_1 = __webpack_require__(34); -var SelfDefendingNodesGroup = function (_NodesGroup_1$NodesGr) { - _inherits(SelfDefendingNodesGroup, _NodesGroup_1$NodesGr); +var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { + _inherits(SelfDefendingNodesGroup, _AbstractNodesGroup_); function SelfDefendingNodesGroup(options) { _classCallCheck(this, SelfDefendingNodesGroup); @@ -2158,12 +2280,12 @@ var SelfDefendingNodesGroup = function (_NodesGroup_1$NodesGr) { } return SelfDefendingNodesGroup; -}(NodesGroup_1.NodesGroup); +}(AbstractNodesGroup_1.AbstractNodesGroup); exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; /***/ }, -/* 38 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2175,16 +2297,16 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var NodesGroup_1 = __webpack_require__(12); -var UnicodeArray_1 = __webpack_require__(23); -var UnicodeArrayCallsWrapper_1 = __webpack_require__(31); -var UnicodeArrayDecodeNode_1 = __webpack_require__(32); -var UnicodeArrayNode_1 = __webpack_require__(33); -var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(34); +var AbstractNodesGroup_1 = __webpack_require__(12); +var UnicodeArray_1 = __webpack_require__(27); +var UnicodeArrayCallsWrapper_1 = __webpack_require__(35); +var UnicodeArrayDecodeNode_1 = __webpack_require__(36); +var UnicodeArrayNode_1 = __webpack_require__(37); +var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(38); var Utils_1 = __webpack_require__(0); -var UnicodeArrayNodesGroup = function (_NodesGroup_1$NodesGr) { - _inherits(UnicodeArrayNodesGroup, _NodesGroup_1$NodesGr); +var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { + _inherits(UnicodeArrayNodesGroup, _AbstractNodesGroup_); function UnicodeArrayNodesGroup(options) { _classCallCheck(this, UnicodeArrayNodesGroup); @@ -2220,12 +2342,12 @@ var UnicodeArrayNodesGroup = function (_NodesGroup_1$NodesGr) { } return UnicodeArrayNodesGroup; -}(NodesGroup_1.NodesGroup); +}(AbstractNodesGroup_1.AbstractNodesGroup); exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; /***/ }, -/* 39 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2240,11 +2362,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 estraverse = __webpack_require__(5); -var NodeObfuscator_1 = __webpack_require__(6); +var AbstractNodeObfuscator_1 = __webpack_require__(6); +var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); -var CatchClauseObfuscator = function (_NodeObfuscator_1$Nod) { - _inherits(CatchClauseObfuscator, _NodeObfuscator_1$Nod); +var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { + _inherits(CatchClauseObfuscator, _AbstractNodeObfuscat); function CatchClauseObfuscator() { var _Object$getPrototypeO; @@ -2285,8 +2408,8 @@ var CatchClauseObfuscator = function (_NodeObfuscator_1$Nod) { estraverse.replace(catchClauseNode, { leave: function leave(node, parentNode) { - if (Nodes_1.Nodes.isIdentifierNode(node)) { - node.name = _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.catchClauseParam); + if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { + node.name = new IdentifierReplacer_1.IdentifierReplacer(_this3.nodes, _this3.options).replace(node.name, _this3.catchClauseParam); } } }); @@ -2294,12 +2417,12 @@ var CatchClauseObfuscator = function (_NodeObfuscator_1$Nod) { }]); return CatchClauseObfuscator; -}(NodeObfuscator_1.NodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 40 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2315,12 +2438,13 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(7); -var NodeObfuscator_1 = __webpack_require__(6); +var AbstractNodeObfuscator_1 = __webpack_require__(6); +var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var FunctionDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { - _inherits(FunctionDeclarationObfuscator, _NodeObfuscator_1$Nod); +var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { + _inherits(FunctionDeclarationObfuscator, _AbstractNodeObfuscat); function FunctionDeclarationObfuscator() { var _Object$getPrototypeO; @@ -2365,8 +2489,8 @@ var FunctionDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { var scopeNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(functionDeclarationNode); estraverse.replace(scopeNode, { enter: function enter(node, parentNode) { - if (Nodes_1.Nodes.isIdentifierNode(node)) { - node.name = _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.functionName); + if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { + node.name = new IdentifierReplacer_1.IdentifierReplacer(_this3.nodes, _this3.options).replace(node.name, _this3.functionName); } } }); @@ -2374,12 +2498,12 @@ var FunctionDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { }]); return FunctionDeclarationObfuscator; -}(NodeObfuscator_1.NodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 41 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2394,11 +2518,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 estraverse = __webpack_require__(5); -var NodeObfuscator_1 = __webpack_require__(6); +var AbstractNodeObfuscator_1 = __webpack_require__(6); +var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); -var FunctionObfuscator = function (_NodeObfuscator_1$Nod) { - _inherits(FunctionObfuscator, _NodeObfuscator_1$Nod); +var FunctionObfuscator = function (_AbstractNodeObfuscat) { + _inherits(FunctionObfuscator, _AbstractNodeObfuscat); function FunctionObfuscator() { var _Object$getPrototypeO; @@ -2441,8 +2566,8 @@ var FunctionObfuscator = function (_NodeObfuscator_1$Nod) { var replaceVisitor = { leave: function leave(node, parentNode) { - if (Nodes_1.Nodes.isIdentifierNode(node)) { - node.name = _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.functionParams); + if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { + node.name = new IdentifierReplacer_1.IdentifierReplacer(_this3.nodes, _this3.options).replace(node.name, _this3.functionParams); } } }; @@ -2454,12 +2579,12 @@ var FunctionObfuscator = function (_NodeObfuscator_1$Nod) { }]); return FunctionObfuscator; -}(NodeObfuscator_1.NodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 42 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2476,11 +2601,14 @@ 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__(10); -var NodeObfuscator_1 = __webpack_require__(6); +var AbstractNodeObfuscator_1 = __webpack_require__(6); +var BooleanLiteralReplacer_1 = __webpack_require__(51); var Nodes_1 = __webpack_require__(2); +var NumberLiteralReplacer_1 = __webpack_require__(20); +var StringLiteralReplacer_1 = __webpack_require__(15); -var LiteralObfuscator = function (_NodeObfuscator_1$Nod) { - _inherits(LiteralObfuscator, _NodeObfuscator_1$Nod); +var LiteralObfuscator = function (_AbstractNodeObfuscat) { + _inherits(LiteralObfuscator, _AbstractNodeObfuscat); function LiteralObfuscator() { _classCallCheck(this, LiteralObfuscator); @@ -2500,13 +2628,13 @@ var LiteralObfuscator = function (_NodeObfuscator_1$Nod) { var content = void 0; switch (_typeof(literalNode.value)) { case 'boolean': - content = this.replaceLiteralBooleanWithJSFuck(literalNode.value); + content = new BooleanLiteralReplacer_1.BooleanLiteralReplacer(this.nodes, this.options).replace(literalNode.value); break; case 'number': - content = this.replaceLiteralNumberWithHexadecimalValue(literalNode.value); + content = new NumberLiteralReplacer_1.NumberLiteralReplacer(this.nodes, this.options).replace(literalNode.value); break; case 'string': - content = this.replaceLiteralValueWithUnicodeValue(literalNode.value); + content = new StringLiteralReplacer_1.StringLiteralReplacer(this.nodes, this.options).replace(literalNode.value); break; default: return; @@ -2519,12 +2647,12 @@ var LiteralObfuscator = function (_NodeObfuscator_1$Nod) { }]); return LiteralObfuscator; -}(NodeObfuscator_1.NodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 43 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2541,11 +2669,12 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(10); var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(7); -var NodeObfuscator_1 = __webpack_require__(6); +var AbstractNodeObfuscator_1 = __webpack_require__(6); var Nodes_1 = __webpack_require__(2); +var StringLiteralReplacer_1 = __webpack_require__(15); -var MemberExpressionObfuscator = function (_NodeObfuscator_1$Nod) { - _inherits(MemberExpressionObfuscator, _NodeObfuscator_1$Nod); +var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { + _inherits(MemberExpressionObfuscator, _AbstractNodeObfuscat); function MemberExpressionObfuscator() { _classCallCheck(this, MemberExpressionObfuscator); @@ -2581,7 +2710,7 @@ var MemberExpressionObfuscator = function (_NodeObfuscator_1$Nod) { literalNode = { raw: '\'' + nodeValue + '\'', 'x-verbatim-property': { - content: this.replaceLiteralValueWithUnicodeValue(nodeValue), + content: new StringLiteralReplacer_1.StringLiteralReplacer(this.nodes, this.options).replace(nodeValue), precedence: escodegen.Precedence.Primary }, type: NodeType_1.NodeType.Literal, @@ -2595,7 +2724,7 @@ var MemberExpressionObfuscator = function (_NodeObfuscator_1$Nod) { value: function obfuscateLiteralProperty(node) { if (typeof node.value === 'string' && !node['x-verbatim-property']) { node['x-verbatim-property'] = { - content: this.replaceLiteralValueWithUnicodeValue(node.value), + content: new StringLiteralReplacer_1.StringLiteralReplacer(this.nodes, this.options).replace(node.value), precedence: escodegen.Precedence.Primary }; } @@ -2603,12 +2732,12 @@ var MemberExpressionObfuscator = function (_NodeObfuscator_1$Nod) { }]); return MemberExpressionObfuscator; -}(NodeObfuscator_1.NodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 44 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2623,12 +2752,13 @@ 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 estraverse = __webpack_require__(5); -var NodeObfuscator_1 = __webpack_require__(6); +var AbstractNodeObfuscator_1 = __webpack_require__(6); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); +var StringLiteralReplacer_1 = __webpack_require__(15); -var MethodDefinitionObfuscator = function (_NodeObfuscator_1$Nod) { - _inherits(MethodDefinitionObfuscator, _NodeObfuscator_1$Nod); +var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { + _inherits(MethodDefinitionObfuscator, _AbstractNodeObfuscat); function MethodDefinitionObfuscator() { var _Object$getPrototypeO; @@ -2659,7 +2789,7 @@ var MethodDefinitionObfuscator = function (_NodeObfuscator_1$Nod) { leave: function leave(node) { if (Nodes_1.Nodes.isIdentifierNode(node) && !Utils_1.Utils.arrayContains(_this2.ignoredNames, node.name) && methodDefinitionNode.computed === false) { methodDefinitionNode.computed = true; - node.name = _this2.replaceLiteralValueWithUnicodeValue(node.name); + node.name = new StringLiteralReplacer_1.StringLiteralReplacer(_this2.nodes, _this2.options).replace(node.name); return; } return estraverse.VisitorOption.Skip; @@ -2669,12 +2799,12 @@ var MethodDefinitionObfuscator = function (_NodeObfuscator_1$Nod) { }]); return MethodDefinitionObfuscator; -}(NodeObfuscator_1.NodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 45 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2691,12 +2821,12 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(10); var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(7); -var NodeObfuscator_1 = __webpack_require__(6); +var AbstractNodeObfuscator_1 = __webpack_require__(6); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); -var ObjectExpressionObfuscator = function (_NodeObfuscator_1$Nod) { - _inherits(ObjectExpressionObfuscator, _NodeObfuscator_1$Nod); +var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { + _inherits(ObjectExpressionObfuscator, _AbstractNodeObfuscat); function ObjectExpressionObfuscator() { _classCallCheck(this, ObjectExpressionObfuscator); @@ -2752,12 +2882,12 @@ var ObjectExpressionObfuscator = function (_NodeObfuscator_1$Nod) { }]); return ObjectExpressionObfuscator; -}(NodeObfuscator_1.NodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 46 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2773,12 +2903,13 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(7); -var NodeObfuscator_1 = __webpack_require__(6); +var AbstractNodeObfuscator_1 = __webpack_require__(6); +var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { - _inherits(VariableDeclarationObfuscator, _NodeObfuscator_1$Nod); +var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { + _inherits(VariableDeclarationObfuscator, _AbstractNodeObfuscat); function VariableDeclarationObfuscator() { var _Object$getPrototypeO; @@ -2829,8 +2960,8 @@ var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { if (Nodes_1.Nodes.isArrowFunctionExpressionNode(node) || Nodes_1.Nodes.isFunctionDeclarationNode(node) || Nodes_1.Nodes.isFunctionExpressionNode(node)) { estraverse.replace(node, { enter: function enter(node, parentNode) { - if (Nodes_1.Nodes.isIdentifierNode(node)) { - node.name = _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.variableNames); + if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { + node.name = new IdentifierReplacer_1.IdentifierReplacer(_this3.nodes, _this3.options).replace(node.name, _this3.variableNames); } } }); @@ -2838,8 +2969,8 @@ var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { if (Nodes_1.Nodes.isVariableDeclarationNode(node) && node === variableDeclarationNode) { isNodeAfterVariableDeclaratorFlag = true; } - if (Nodes_1.Nodes.isIdentifierNode(node) && isNodeAfterVariableDeclaratorFlag) { - node.name = _this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.variableNames); + if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode) && isNodeAfterVariableDeclaratorFlag) { + node.name = new IdentifierReplacer_1.IdentifierReplacer(_this3.nodes, _this3.options).replace(node.name, _this3.variableNames); } } }); @@ -2847,12 +2978,51 @@ var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) { }]); return VariableDeclarationObfuscator; -}(NodeObfuscator_1.NodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 47 */ +/* 51 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +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 JSFuck_1 = __webpack_require__(19); +var AbstractReplacer_1 = __webpack_require__(13); + +var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { + _inherits(BooleanLiteralReplacer, _AbstractReplacer_1$A); + + function BooleanLiteralReplacer() { + _classCallCheck(this, BooleanLiteralReplacer); + + return _possibleConstructorReturn(this, Object.getPrototypeOf(BooleanLiteralReplacer).apply(this, arguments)); + } + + _createClass(BooleanLiteralReplacer, [{ + key: "replace", + value: function replace(nodeValue) { + return nodeValue ? JSFuck_1.JSFuck.True : JSFuck_1.JSFuck.False; + } + }]); + + return BooleanLiteralReplacer; +}(AbstractReplacer_1.AbstractReplacer); + +exports.BooleanLiteralReplacer = BooleanLiteralReplacer; + +/***/ }, +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2873,10 +3043,10 @@ 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__(63); -var DefaultPreset_1 = __webpack_require__(17); -var OptionsNormalizer_1 = __webpack_require__(48); -var ValidationErrorsFormatter_1 = __webpack_require__(49); +var class_validator_1 = __webpack_require__(68); +var DefaultPreset_1 = __webpack_require__(21); +var OptionsNormalizer_1 = __webpack_require__(53); +var ValidationErrorsFormatter_1 = __webpack_require__(54); var Options = function Options(obfuscatorOptions) { _classCallCheck(this, Options); @@ -2912,7 +3082,7 @@ __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], exports.Options = Options; /***/ }, -/* 48 */ +/* 53 */ /***/ function(module, exports) { "use strict"; @@ -3014,7 +3184,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.unicodeArrayRule, Options exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 49 */ +/* 54 */ /***/ function(module, exports) { "use strict"; @@ -3081,7 +3251,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 50 */ +/* 55 */ /***/ function(module, exports) { "use strict"; @@ -3093,7 +3263,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 51 */ +/* 56 */ /***/ function(module, exports) { "use strict"; @@ -3105,7 +3275,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 52 */ +/* 57 */ /***/ function(module, exports) { "use strict"; @@ -3117,7 +3287,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 53 */ +/* 58 */ /***/ function(module, exports) { "use strict"; @@ -3129,7 +3299,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 54 */ +/* 59 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3142,7 +3312,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 55 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3155,7 +3325,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 56 */ +/* 61 */ /***/ function(module, exports) { "use strict"; @@ -3167,7 +3337,7 @@ function UnicodeArrayCallsWrapperTemplate() { exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 57 */ +/* 62 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3180,7 +3350,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 58 */ +/* 63 */ /***/ function(module, exports) { "use strict"; @@ -3192,7 +3362,7 @@ function UnicodeArrayDecodeTemplate() { exports.UnicodeArrayDecodeTemplate = UnicodeArrayDecodeTemplate; /***/ }, -/* 59 */ +/* 64 */ /***/ function(module, exports) { "use strict"; @@ -3204,7 +3374,7 @@ function UnicodeArrayTemplate() { exports.UnicodeArrayTemplate = UnicodeArrayTemplate; /***/ }, -/* 60 */ +/* 65 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3217,7 +3387,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 61 */ +/* 66 */ /***/ function(module, exports) { "use strict"; @@ -3229,37 +3399,37 @@ function UnicodeArrayRotateFunctionTemplate() { exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; /***/ }, -/* 62 */ +/* 67 */ /***/ function(module, exports) { module.exports = require("chance"); /***/ }, -/* 63 */ +/* 68 */ /***/ function(module, exports) { module.exports = require("class-validator"); /***/ }, -/* 64 */ +/* 69 */ /***/ function(module, exports) { module.exports = require("commander"); /***/ }, -/* 65 */ +/* 70 */ /***/ function(module, exports) { module.exports = require("fs"); /***/ }, -/* 66 */ +/* 71 */ /***/ function(module, exports) { module.exports = require("mkdirp"); /***/ }, -/* 67 */ +/* 72 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3267,7 +3437,7 @@ module.exports = require("mkdirp"); var JavaScriptObfuscator_1 = __webpack_require__(9); if (!global._babelPolyfill) { - __webpack_require__(20); + __webpack_require__(24); } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; diff --git a/src/Nodes.ts b/src/Nodes.ts index ed22f577..ddf56020 100644 --- a/src/Nodes.ts +++ b/src/Nodes.ts @@ -104,6 +104,26 @@ export class Nodes { return node.type === NodeType.Property; } + /** + * @param node + * @param parentNode + * @returns {boolean} + */ + public static isReplaceableIdentifierNode (node: INode, parentNode: INode): node is IIdentifierNode { + if (!Nodes.isIdentifierNode(node)) { + return false; + } + + const parentNodeIsPropertyNode: boolean = Nodes.isPropertyNode(parentNode) && parentNode.key === node; + const parentNodeIsMemberExpressionNode: boolean = ( + Nodes.isMemberExpressionNode(parentNode) && + parentNode.computed === false && + parentNode.property === node + ); + + return !parentNodeIsPropertyNode && !parentNodeIsMemberExpressionNode; + } + /** * * @param node diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index fbc1e86b..e30b2796 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -27,7 +27,7 @@ import { VariableDeclarationObfuscator } from './node-obfuscators/VariableDeclar export class Obfuscator implements IObfuscator { /** - * @type {Map} + * @type {Map} */ private nodes: Map ; diff --git a/src/custom-nodes/Node.ts b/src/custom-nodes/AbstractCustomNode.ts similarity index 93% rename from src/custom-nodes/Node.ts rename to src/custom-nodes/AbstractCustomNode.ts index 51f281fe..ab7181fc 100644 --- a/src/custom-nodes/Node.ts +++ b/src/custom-nodes/AbstractCustomNode.ts @@ -4,7 +4,7 @@ import { IOptions } from "../interfaces/IOptions"; import { AppendState } from '../enums/AppendState'; -export abstract class Node implements ICustomNode { +export abstract class AbstractCustomNode implements ICustomNode { /** * @type {AppendState} */ diff --git a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts index de979e16..16f7dceb 100644 --- a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts +++ b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts @@ -6,10 +6,10 @@ import { AppendState } from "../../enums/AppendState"; import { ConsoleOutputDisableExpressionTemplate } from "../../templates/custom-nodes/console-output-nodes/console-output-disable-expression-node/ConsoleOutputDisableExpressionTemplate"; -import { Node } from '../Node'; +import { AbstractCustomNode } from '../AbstractCustomNode'; import { NodeUtils } from "../../NodeUtils"; -export class ConsoleOutputDisableExpressionNode extends Node { +export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { /** * @type {AppendState} */ diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts index db237d7c..52ef11e1 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts @@ -9,10 +9,10 @@ import { AppendState } from "../../enums/AppendState"; import { DebugProtectionFunctionCallTemplate } from "../../templates/custom-nodes/debug-protection-nodes/debug-protection-function-call-node/DebufProtectionFunctionCallTemplate"; -import { Node } from '../Node'; +import { AbstractCustomNode } from '../AbstractCustomNode'; import { NodeUtils } from "../../NodeUtils"; -export class DebugProtectionFunctionCallNode extends Node { +export class DebugProtectionFunctionCallNode extends AbstractCustomNode { /** * @type {AppendState} */ diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts index f6f958bf..9df06e7d 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts @@ -9,10 +9,10 @@ import { AppendState } from "../../enums/AppendState"; import { DebugProtectionFunctionIntervalTemplate } from "../../templates/custom-nodes/debug-protection-nodes/debug-protection-function-interval-node/DebugProtectionFunctionIntervalTemplate"; -import { Node } from '../Node'; +import { AbstractCustomNode } from '../AbstractCustomNode'; import { NodeUtils } from '../../NodeUtils'; -export class DebugProtectionFunctionIntervalNode extends Node { +export class DebugProtectionFunctionIntervalNode extends AbstractCustomNode { /** * @type {AppendState} */ diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts index 0bff73ac..70455ba2 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts @@ -9,11 +9,11 @@ import { AppendState } from "../../enums/AppendState"; import { DebugProtectionFunctionTemplate } from "../../templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate"; -import { Node } from '../Node'; +import { AbstractCustomNode } from '../AbstractCustomNode'; import { NodeUtils } from '../../NodeUtils'; import { Utils } from "../../Utils"; -export class DebugProtectionFunctionNode extends Node { +export class DebugProtectionFunctionNode extends AbstractCustomNode { /** * @type {AppendState} */ diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index e10b5b8c..5aa405d8 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts @@ -8,12 +8,12 @@ import { NO_CUSTOM_NODES_PRESET } from "../../preset-options/NoCustomNodesPreset import { SelfDefendingTemplate } from "../../templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate"; +import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from "../../JavaScriptObfuscator"; -import { Node } from '../Node'; import { NodeUtils } from "../../NodeUtils"; import { Utils } from "../../Utils"; -export class SelfDefendingUnicodeNode extends Node { +export class SelfDefendingUnicodeNode extends AbstractCustomNode { /** * @type {AppendState} */ diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts index 04ddb92f..40470f4a 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts @@ -9,12 +9,12 @@ import { AppendState } from "../../enums/AppendState"; import { UnicodeArrayCallsWrapperTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate"; -import { Node } from '../Node'; +import { AbstractCustomNode } from '../AbstractCustomNode'; import { NodeUtils } from "../../NodeUtils"; import { UnicodeArray } from "../../UnicodeArray"; import { Utils } from "../../Utils"; -export class UnicodeArrayCallsWrapper extends Node { +export class UnicodeArrayCallsWrapper extends AbstractCustomNode { /** * @type {AppendState} */ diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts index 60a283fa..4082cdea 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts @@ -13,12 +13,12 @@ import { AtobTemplate } from "../../templates/custom-nodes/AtobTemplate"; import { SelfDefendingTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate"; import { UnicodeArrayDecodeTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeTemplate"; +import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; -import { Node } from '../Node'; import { NodeUtils } from "../../NodeUtils"; import { UnicodeArray } from "../../UnicodeArray"; -export class UnicodeArrayDecodeNode extends Node { +export class UnicodeArrayDecodeNode extends AbstractCustomNode { /** * @type {AppendState} */ diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts index fcd4d590..239aecf5 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts @@ -11,10 +11,10 @@ import { UnicodeArray } from '../../UnicodeArray'; import { UnicodeArrayTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-node/UnicodeArrayTemplate"; -import { Node } from '../Node'; +import { AbstractCustomNode } from '../AbstractCustomNode'; import { NodeUtils } from "../../NodeUtils"; -export class UnicodeArrayNode extends Node { +export class UnicodeArrayNode extends AbstractCustomNode { /** * @type {number} */ diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts index a0f1759c..abafb85c 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts @@ -12,13 +12,13 @@ import { NO_CUSTOM_NODES_PRESET } from "../../preset-options/NoCustomNodesPreset import { SelfDefendingTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate"; import { UnicodeArrayRotateFunctionTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/UnicodeArrayRotateFunctionTemplate"; +import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from "../../JavaScriptObfuscator"; -import { Node } from '../Node'; import { NodeUtils } from "../../NodeUtils"; import { UnicodeArray } from "../../UnicodeArray"; import { Utils } from "../../Utils"; -export class UnicodeArrayRotateFunctionNode extends Node { +export class UnicodeArrayRotateFunctionNode extends AbstractCustomNode { /** * @type {AppendState} */ diff --git a/src/interfaces/IReplacer.d.ts b/src/interfaces/IReplacer.d.ts new file mode 100644 index 00000000..4cb487d1 --- /dev/null +++ b/src/interfaces/IReplacer.d.ts @@ -0,0 +1,3 @@ +export interface IReplacer { + replace (nodeValue: any, namesMap?: Map ): string; +} diff --git a/src/node-groups/NodesGroup.ts b/src/node-groups/AbstractNodesGroup.ts similarity index 83% rename from src/node-groups/NodesGroup.ts rename to src/node-groups/AbstractNodesGroup.ts index 1e8a0a0d..34ffb998 100644 --- a/src/node-groups/NodesGroup.ts +++ b/src/node-groups/AbstractNodesGroup.ts @@ -3,9 +3,9 @@ import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { INodesGroup } from '../interfaces/INodesGroup'; import { IOptions } from "../interfaces/IOptions"; -export abstract class NodesGroup implements INodesGroup { +export abstract class AbstractNodesGroup implements INodesGroup { /** - * @type {Map} + * @type {Map} */ protected nodes: Map = new Map (); diff --git a/src/node-groups/ConsoleOutputNodesGroup.ts b/src/node-groups/ConsoleOutputNodesGroup.ts index 5d0bc958..2cc61fe5 100644 --- a/src/node-groups/ConsoleOutputNodesGroup.ts +++ b/src/node-groups/ConsoleOutputNodesGroup.ts @@ -1,9 +1,9 @@ import { IOptions } from "../interfaces/IOptions"; +import { AbstractNodesGroup } from './AbstractNodesGroup'; import { ConsoleOutputDisableExpressionNode } from "../custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode"; -import { NodesGroup } from './NodesGroup'; -export class ConsoleOutputNodesGroup extends NodesGroup { +export class ConsoleOutputNodesGroup extends AbstractNodesGroup { /** * @param options */ diff --git a/src/node-groups/DebugProtectionNodesGroup.ts b/src/node-groups/DebugProtectionNodesGroup.ts index 9f6b6c50..c9ae367f 100644 --- a/src/node-groups/DebugProtectionNodesGroup.ts +++ b/src/node-groups/DebugProtectionNodesGroup.ts @@ -4,10 +4,10 @@ import { DebugProtectionFunctionCallNode } from "../custom-nodes/debug-protectio import { DebugProtectionFunctionIntervalNode } from "../custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode"; import { DebugProtectionFunctionNode } from "../custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode"; -import { NodesGroup } from './NodesGroup'; +import { AbstractNodesGroup } from './AbstractNodesGroup'; import { Utils } from '../Utils'; -export class DebugProtectionNodesGroup extends NodesGroup { +export class DebugProtectionNodesGroup extends AbstractNodesGroup { /** * @type {string} */ diff --git a/src/node-groups/SelfDefendingNodesGroup.ts b/src/node-groups/SelfDefendingNodesGroup.ts index c250aa30..3c0adcad 100644 --- a/src/node-groups/SelfDefendingNodesGroup.ts +++ b/src/node-groups/SelfDefendingNodesGroup.ts @@ -1,9 +1,9 @@ import { IOptions } from "../interfaces/IOptions"; -import { NodesGroup } from './NodesGroup'; +import { AbstractNodesGroup } from './AbstractNodesGroup'; import { SelfDefendingUnicodeNode } from "../custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode"; -export class SelfDefendingNodesGroup extends NodesGroup { +export class SelfDefendingNodesGroup extends AbstractNodesGroup { /** * @param options */ diff --git a/src/node-groups/UnicodeArrayNodesGroup.ts b/src/node-groups/UnicodeArrayNodesGroup.ts index 9db19d24..937855b9 100644 --- a/src/node-groups/UnicodeArrayNodesGroup.ts +++ b/src/node-groups/UnicodeArrayNodesGroup.ts @@ -1,6 +1,6 @@ import { IOptions } from "../interfaces/IOptions"; -import { NodesGroup } from './NodesGroup'; +import { AbstractNodesGroup } from './AbstractNodesGroup'; import { UnicodeArray } from "../UnicodeArray"; import { UnicodeArrayCallsWrapper } from "../custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper"; import { UnicodeArrayDecodeNode } from "../custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode"; @@ -8,7 +8,7 @@ import { UnicodeArrayNode } from '../custom-nodes/unicode-array-nodes/UnicodeArr import { UnicodeArrayRotateFunctionNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode'; import { Utils } from '../Utils'; -export class UnicodeArrayNodesGroup extends NodesGroup { +export class UnicodeArrayNodesGroup extends AbstractNodesGroup { /** * @type {string} */ diff --git a/src/node-obfuscators/AbstractNodeObfuscator.ts b/src/node-obfuscators/AbstractNodeObfuscator.ts new file mode 100644 index 00000000..9598c95f --- /dev/null +++ b/src/node-obfuscators/AbstractNodeObfuscator.ts @@ -0,0 +1,61 @@ +import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; +import { INodeObfuscator } from '../interfaces/INodeObfuscator'; +import { INode } from "../interfaces/nodes/INode"; +import { IOptions } from "../interfaces/IOptions"; + +import { Nodes } from "../Nodes"; +import { Utils } from '../Utils'; + +export abstract class AbstractNodeObfuscator implements INodeObfuscator { + /** + * @type Map + */ + protected nodes: Map ; + + /** + * @type {IOptions} + */ + protected options: IOptions; + + /** + * @param nodes + * @param options + */ + constructor(nodes: Map , options: IOptions) { + this.nodes = nodes; + this.options = options; + } + + /** + * @param node + * @param parentNode + */ + public abstract obfuscateNode (node: INode, parentNode?: INode): void; + + /** + * @param name + * @returns {boolean} + */ + protected isReservedName (name: string): boolean { + return this.options.reservedNames + .some((reservedName: string) => { + return new RegExp(reservedName, 'g').test(name); + }); + } + + /** + * Store all identifiers names as keys in given `namesMap` with random names as value. + * Reserved names will be ignored. + * + * @param node + * @param namesMap + */ + protected storeIdentifiersNames ( + node: INode, + namesMap: Map + ): void { + if (Nodes.isIdentifierNode(node) && !this.isReservedName(node.name)) { + namesMap.set(node.name, Utils.getRandomVariableName()); + } + } +} diff --git a/src/node-obfuscators/CatchClauseObfuscator.ts b/src/node-obfuscators/CatchClauseObfuscator.ts index a7d5ddd4..0715725a 100644 --- a/src/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-obfuscators/CatchClauseObfuscator.ts @@ -3,7 +3,8 @@ import * as estraverse from 'estraverse'; import { ICatchClauseNode } from "../interfaces/nodes/ICatchClauseNode"; import { INode } from '../interfaces/nodes/INode'; -import { NodeObfuscator } from './NodeObfuscator'; +import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; +import { IdentifierReplacer } from "./replacers/IdentifierReplacer"; import { Nodes } from "../Nodes"; /** @@ -14,7 +15,7 @@ import { Nodes } from "../Nodes"; * try {} catch (_0x12d45f) { console.log(_0x12d45f); }; * */ -export class CatchClauseObfuscator extends NodeObfuscator { +export class CatchClauseObfuscator extends AbstractNodeObfuscator { /** * @type {Map} */ @@ -43,8 +44,9 @@ export class CatchClauseObfuscator extends NodeObfuscator { private replaceCatchClauseParam (catchClauseNode: ICatchClauseNode): void { estraverse.replace(catchClauseNode, { leave: (node: INode, parentNode: INode): any => { - if (Nodes.isIdentifierNode(node)) { - node.name = this.replaceIdentifiersWithRandomNames(node, parentNode, this.catchClauseParam); + if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { + node.name = new IdentifierReplacer(this.nodes, this.options) + .replace(node.name, this.catchClauseParam); } } }); diff --git a/src/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-obfuscators/FunctionDeclarationObfuscator.ts index 1c2103ac..aa39eb80 100644 --- a/src/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -5,7 +5,8 @@ import { INode } from "../interfaces/nodes/INode"; import { NodeType } from "../enums/NodeType"; -import { NodeObfuscator } from './NodeObfuscator'; +import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; +import { IdentifierReplacer } from "./replacers/IdentifierReplacer"; import { Nodes } from "../Nodes"; import { NodeUtils } from "../NodeUtils"; @@ -18,7 +19,7 @@ import { NodeUtils } from "../NodeUtils"; * function _0x12d45f () { //... }; * _0x12d45f(); */ -export class FunctionDeclarationObfuscator extends NodeObfuscator { +export class FunctionDeclarationObfuscator extends AbstractNodeObfuscator { /** * @type {Map} */ @@ -56,8 +57,9 @@ export class FunctionDeclarationObfuscator extends NodeObfuscator { estraverse.replace(scopeNode, { enter: (node: INode, parentNode: INode): any => { - if (Nodes.isIdentifierNode(node)) { - node.name = this.replaceIdentifiersWithRandomNames(node, parentNode, this.functionName); + if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { + node.name = new IdentifierReplacer(this.nodes, this.options) + .replace(node.name, this.functionName); } } }); diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index 53c80e88..457dac2b 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -3,7 +3,8 @@ import * as estraverse from 'estraverse'; import { IFunctionNode } from "../interfaces/nodes/IFunctionNode"; import { INode } from "../interfaces/nodes/INode"; -import { NodeObfuscator } from './NodeObfuscator'; +import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; +import { IdentifierReplacer } from "./replacers/IdentifierReplacer"; import { Nodes } from "../Nodes"; /** @@ -14,7 +15,7 @@ import { Nodes } from "../Nodes"; * function foo (_0x12d45f) { return _0x12d45f; }; * */ -export class FunctionObfuscator extends NodeObfuscator { +export class FunctionObfuscator extends AbstractNodeObfuscator { /** * @type {Map} */ @@ -46,8 +47,9 @@ export class FunctionObfuscator extends NodeObfuscator { private replaceFunctionParams (functionNode: IFunctionNode): void { let replaceVisitor: estraverse.Visitor = { leave: (node: INode, parentNode: INode): any => { - if (Nodes.isIdentifierNode(node)) { - node.name = this.replaceIdentifiersWithRandomNames(node, parentNode, this.functionParams); + if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { + node.name = new IdentifierReplacer(this.nodes, this.options) + .replace(node.name, this.functionParams); } } }; diff --git a/src/node-obfuscators/LiteralObfuscator.ts b/src/node-obfuscators/LiteralObfuscator.ts index bff831a1..138ef9a5 100644 --- a/src/node-obfuscators/LiteralObfuscator.ts +++ b/src/node-obfuscators/LiteralObfuscator.ts @@ -1,12 +1,15 @@ import * as escodegen from 'escodegen'; import { ILiteralNode } from "../interfaces/nodes/ILiteralNode"; - import { INode } from "../interfaces/nodes/INode"; -import { NodeObfuscator } from './NodeObfuscator'; -import { Nodes } from "../Nodes"; -export class LiteralObfuscator extends NodeObfuscator { +import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; +import { BooleanLiteralReplacer } from "./replacers/BooleanLiteralReplacer"; +import { Nodes } from "../Nodes"; +import { NumberLiteralReplacer } from "./replacers/NumberLiteralReplacer"; +import { StringLiteralReplacer } from "./replacers/StringLiteralReplacer"; + +export class LiteralObfuscator extends AbstractNodeObfuscator { /** * @param literalNode * @param parentNode @@ -24,18 +27,21 @@ export class LiteralObfuscator extends NodeObfuscator { switch (typeof literalNode.value) { case 'boolean': - content = this.replaceLiteralBooleanWithJSFuck(literalNode.value); + content = new BooleanLiteralReplacer(this.nodes, this.options) + .replace(literalNode.value); break; case 'number': - content = this.replaceLiteralNumberWithHexadecimalValue(literalNode.value); + content = new NumberLiteralReplacer(this.nodes, this.options) + .replace(literalNode.value); break; case 'string': - content = this.replaceLiteralValueWithUnicodeValue(literalNode.value); + content = new StringLiteralReplacer(this.nodes, this.options) + .replace(literalNode.value); break; diff --git a/src/node-obfuscators/MemberExpressionObfuscator.ts b/src/node-obfuscators/MemberExpressionObfuscator.ts index 3507c121..b35b32df 100644 --- a/src/node-obfuscators/MemberExpressionObfuscator.ts +++ b/src/node-obfuscators/MemberExpressionObfuscator.ts @@ -8,10 +8,11 @@ import { INode } from "../interfaces/nodes/INode"; import { NodeType } from "../enums/NodeType"; -import { NodeObfuscator } from './NodeObfuscator'; +import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { Nodes } from "../Nodes"; +import { StringLiteralReplacer } from "./replacers/StringLiteralReplacer"; -export class MemberExpressionObfuscator extends NodeObfuscator { +export class MemberExpressionObfuscator extends AbstractNodeObfuscator { /** * @param memberExpressionNode */ @@ -53,7 +54,7 @@ export class MemberExpressionObfuscator extends NodeObfuscator { literalNode: ILiteralNode = { raw: `'${nodeValue}'`, 'x-verbatim-property': { - content : this.replaceLiteralValueWithUnicodeValue(nodeValue), + content : new StringLiteralReplacer(this.nodes, this.options).replace(nodeValue), precedence: escodegen.Precedence.Primary }, type: NodeType.Literal, @@ -77,7 +78,7 @@ export class MemberExpressionObfuscator extends NodeObfuscator { private obfuscateLiteralProperty (node: ILiteralNode): void { if (typeof node.value === 'string' && !node['x-verbatim-property']) { node['x-verbatim-property'] = { - content : this.replaceLiteralValueWithUnicodeValue(node.value), + content : new StringLiteralReplacer(this.nodes, this.options).replace(node.value), precedence: escodegen.Precedence.Primary }; } diff --git a/src/node-obfuscators/MethodDefinitionObfuscator.ts b/src/node-obfuscators/MethodDefinitionObfuscator.ts index 4c2e06de..ab6036f9 100644 --- a/src/node-obfuscators/MethodDefinitionObfuscator.ts +++ b/src/node-obfuscators/MethodDefinitionObfuscator.ts @@ -3,9 +3,10 @@ import * as estraverse from 'estraverse'; import { IMethodDefinitionNode } from "../interfaces/nodes/IMethodDefinitionNode"; import { INode } from "../interfaces/nodes/INode"; -import { NodeObfuscator } from './NodeObfuscator'; +import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { Nodes } from "../Nodes"; import { Utils } from "../Utils"; +import { StringLiteralReplacer } from "./replacers/StringLiteralReplacer"; /** * replaces: @@ -14,7 +15,7 @@ import { Utils } from "../Utils"; * on: * [_0x9a4e('0x0')] { //... }; */ -export class MethodDefinitionObfuscator extends NodeObfuscator { +export class MethodDefinitionObfuscator extends AbstractNodeObfuscator { /** * @type {string[]} */ @@ -40,7 +41,8 @@ export class MethodDefinitionObfuscator extends NodeObfuscator { methodDefinitionNode.computed === false ) { methodDefinitionNode.computed = true; - node.name = this.replaceLiteralValueWithUnicodeValue(node.name); + node.name = new StringLiteralReplacer(this.nodes, this.options) + .replace(node.name); return; } diff --git a/src/node-obfuscators/NodeObfuscator.ts b/src/node-obfuscators/NodeObfuscator.ts deleted file mode 100644 index 99e1d25d..00000000 --- a/src/node-obfuscators/NodeObfuscator.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; -import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; -import { INodeObfuscator } from '../interfaces/INodeObfuscator'; -import { INode } from "../interfaces/nodes/INode"; -import { IOptions } from "../interfaces/IOptions"; - -import { TUnicodeArrayCallsWrapper } from "../types/custom-nodes/TUnicodeArrayCallsWrapper"; -import { TUnicodeArrayNode } from "../types/custom-nodes/TUnicodeArrayNode"; - -import { JSFuck } from "../enums/JSFuck"; - -import { Nodes } from "../Nodes"; -import { UnicodeArray } from "../UnicodeArray"; -import { Utils } from '../Utils'; - -export abstract class NodeObfuscator implements INodeObfuscator { - /** - * @type Map - */ - protected nodes: Map ; - - /** - * @type {IOptions} - */ - protected options: IOptions; - - /** - * @param nodes - * @param options - */ - constructor(nodes: Map , options: IOptions) { - this.nodes = nodes; - this.options = options; - } - - /** - * @param node - * @param parentNode - */ - public abstract obfuscateNode (node: INode, parentNode?: INode): void; - - /** - * @param name - * @returns {boolean} - */ - protected isReservedName (name: string): boolean { - return this.options.reservedNames - .some((reservedName: string) => { - return new RegExp(reservedName, 'g').test(name); - }); - } - - /** - * Store all identifiers names as keys in given `namesMap` with random names as value. - * Reserved names will be ignored. - * - * @param node - * @param namesMap - */ - protected storeIdentifiersNames ( - node: INode, - namesMap: Map - ): void { - if (Nodes.isIdentifierNode(node) && !this.isReservedName(node.name)) { - namesMap.set(node.name, Utils.getRandomVariableName()); - } - } - - /** - * @param node - * @param parentNode - * @param namesMap - * @returns {string} - */ - protected replaceIdentifiersWithRandomNames ( - node: IIdentifierNode, - parentNode: INode, - namesMap: Map - ): string { - const obfuscatedIdentifierName: string|undefined = namesMap.get(node.name); - const parentNodeIsPropertyNode: boolean = Nodes.isPropertyNode(parentNode) && parentNode.key === node; - const parentNodeIsMemberExpressionNode: boolean = ( - Nodes.isMemberExpressionNode(parentNode) && - parentNode.computed === false && - parentNode.property === node - ); - - if (parentNodeIsPropertyNode || parentNodeIsMemberExpressionNode || !obfuscatedIdentifierName) { - return node.name; - } - - return obfuscatedIdentifierName; - } - - /** - * @param nodeValue - * @returns {string} - */ - protected replaceLiteralBooleanWithJSFuck (nodeValue: boolean): string { - return nodeValue ? JSFuck.True : JSFuck.False; - } - - /** - * @param nodeValue - * @returns {string} - */ - protected replaceLiteralNumberWithHexadecimalValue (nodeValue: number): string { - const prefix: string = '0x'; - - if (!Utils.isInteger(nodeValue)) { - return String(nodeValue); - } - - return `${prefix}${Utils.decToHex(nodeValue)}`; - } - - /** - * @param nodeValue - * @returns {string} - */ - protected replaceLiteralValueWithUnicodeValue (nodeValue: string): string { - const replaceWithUnicodeArrayFlag: boolean = Math.random() <= this.options.unicodeArrayThreshold; - - if (this.options.encodeUnicodeLiterals && replaceWithUnicodeArrayFlag) { - nodeValue = Utils.btoa(nodeValue); - } - - nodeValue = Utils.stringToUnicode(nodeValue); - - if (this.options.unicodeArray && replaceWithUnicodeArrayFlag) { - return this.replaceLiteralValueWithUnicodeArrayCall(nodeValue); - } - - return nodeValue; - } - - /** - * @param value - * @returns {string} - */ - protected replaceLiteralValueWithUnicodeArrayCall (value: string): string { - const unicodeArrayNode: TUnicodeArrayNode = this.nodes.get('unicodeArrayNode'); - - if (!unicodeArrayNode) { - throw new ReferenceError('`unicodeArrayNode` node is not found in Map with custom nodes.'); - } - - let unicodeArray: UnicodeArray = unicodeArrayNode.getNodeData(), - indexOfExistingValue: number = unicodeArray.getIndexOf(value), - indexOfValue: number, - hexadecimalIndex: string; - - if (indexOfExistingValue >= 0) { - indexOfValue = indexOfExistingValue; - } else { - indexOfValue = unicodeArray.getLength(); - unicodeArrayNode.updateNodeData(value); - } - - hexadecimalIndex = this.replaceLiteralNumberWithHexadecimalValue(indexOfValue); - - if (this.options.wrapUnicodeArrayCalls) { - const unicodeArrayCallsWrapper: TUnicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); - - if (!unicodeArrayCallsWrapper) { - throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); - } - - return `${unicodeArrayCallsWrapper.getNodeIdentifier()}('${hexadecimalIndex}')`; - } - - return `${unicodeArrayNode.getNodeIdentifier()}[${hexadecimalIndex}]`; - } -} diff --git a/src/node-obfuscators/ObjectExpressionObfuscator.ts b/src/node-obfuscators/ObjectExpressionObfuscator.ts index 895f241e..2da315f9 100644 --- a/src/node-obfuscators/ObjectExpressionObfuscator.ts +++ b/src/node-obfuscators/ObjectExpressionObfuscator.ts @@ -9,7 +9,7 @@ import { INode } from "../interfaces/nodes/INode"; import { NodeType } from "../enums/NodeType"; -import { NodeObfuscator } from './NodeObfuscator'; +import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { Nodes } from "../Nodes"; import { Utils } from '../Utils'; @@ -23,7 +23,7 @@ import { Utils } from '../Utils'; * on: * var object = { '\u0050\u0053\u0045\u0055\u0044\u004f': 1 }; */ -export class ObjectExpressionObfuscator extends NodeObfuscator { +export class ObjectExpressionObfuscator extends AbstractNodeObfuscator { /** * @param objectExpressionNode */ diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index 9a3b759b..756b0c14 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -6,7 +6,8 @@ import { IVariableDeclaratorNode } from "../interfaces/nodes/IVariableDeclarator import { NodeType } from "../enums/NodeType"; -import { NodeObfuscator } from './NodeObfuscator'; +import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; +import { IdentifierReplacer } from "./replacers/IdentifierReplacer"; import { Nodes } from "../Nodes"; import { NodeUtils } from "../NodeUtils"; @@ -20,7 +21,7 @@ import { NodeUtils } from "../NodeUtils"; * _0x12d45f++; * */ -export class VariableDeclarationObfuscator extends NodeObfuscator { +export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { /** * @type {Map} */ @@ -70,8 +71,9 @@ export class VariableDeclarationObfuscator extends NodeObfuscator { ) { estraverse.replace(node, { enter: (node: INode, parentNode: INode): any => { - if (Nodes.isIdentifierNode(node)) { - node.name = this.replaceIdentifiersWithRandomNames(node, parentNode, this.variableNames); + if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { + node.name = new IdentifierReplacer(this.nodes, this.options) + .replace(node.name, this.variableNames); } } }); @@ -81,8 +83,9 @@ export class VariableDeclarationObfuscator extends NodeObfuscator { isNodeAfterVariableDeclaratorFlag = true; } - if (Nodes.isIdentifierNode(node) && isNodeAfterVariableDeclaratorFlag) { - node.name = this.replaceIdentifiersWithRandomNames(node, parentNode, this.variableNames); + if (Nodes.isReplaceableIdentifierNode(node, parentNode) && isNodeAfterVariableDeclaratorFlag) { + node.name = new IdentifierReplacer(this.nodes, this.options) + .replace(node.name, this.variableNames); } } }); diff --git a/src/node-obfuscators/replacers/AbstractReplacer.ts b/src/node-obfuscators/replacers/AbstractReplacer.ts new file mode 100644 index 00000000..89af3620 --- /dev/null +++ b/src/node-obfuscators/replacers/AbstractReplacer.ts @@ -0,0 +1,31 @@ +import { ICustomNode } from "../../interfaces/custom-nodes/ICustomNode"; +import { IOptions } from "../../interfaces/IOptions"; +import { IReplacer } from "../../interfaces/IReplacer"; + +export abstract class AbstractReplacer implements IReplacer { + /** + * @type Map + */ + protected nodes: Map ; + + /** + * @type {IOptions} + */ + protected options : IOptions; + + /** + * @param nodes + * @param options + */ + constructor (nodes: Map , options: IOptions) { + this.nodes = nodes; + this.options = options; + } + + /** + * @param nodeValue + * @param namesMap + * @returns {string} + */ + public abstract replace (nodeValue: any, namesMap?: Map ): string; +} diff --git a/src/node-obfuscators/replacers/BooleanLiteralReplacer.ts b/src/node-obfuscators/replacers/BooleanLiteralReplacer.ts new file mode 100644 index 00000000..20cf292a --- /dev/null +++ b/src/node-obfuscators/replacers/BooleanLiteralReplacer.ts @@ -0,0 +1,13 @@ +import { JSFuck } from "../../enums/JSFuck"; + +import { AbstractReplacer } from "./AbstractReplacer"; + +export class BooleanLiteralReplacer extends AbstractReplacer { + /** + * @param nodeValue + * @returns {string} + */ + public replace (nodeValue: boolean): string { + return nodeValue ? JSFuck.True : JSFuck.False; + } +} diff --git a/src/node-obfuscators/replacers/IdentifierReplacer.ts b/src/node-obfuscators/replacers/IdentifierReplacer.ts new file mode 100644 index 00000000..d4ed5b9e --- /dev/null +++ b/src/node-obfuscators/replacers/IdentifierReplacer.ts @@ -0,0 +1,18 @@ +import { AbstractReplacer } from "./AbstractReplacer"; + +export class IdentifierReplacer extends AbstractReplacer { + /** + * @param nodeValue + * @param namesMap + * @returns {string} + */ + public replace (nodeValue: string, namesMap: Map ): string { + const obfuscatedIdentifierName: string|undefined = namesMap.get(nodeValue); + + if (!obfuscatedIdentifierName) { + return nodeValue; + } + + return obfuscatedIdentifierName; + } +} diff --git a/src/node-obfuscators/replacers/NumberLiteralReplacer.ts b/src/node-obfuscators/replacers/NumberLiteralReplacer.ts new file mode 100644 index 00000000..f454eb52 --- /dev/null +++ b/src/node-obfuscators/replacers/NumberLiteralReplacer.ts @@ -0,0 +1,18 @@ +import { AbstractReplacer } from "./AbstractReplacer"; +import { Utils } from "../../Utils"; + +export class NumberLiteralReplacer extends AbstractReplacer { + /** + * @param nodeValue + * @returns {string} + */ + public replace (nodeValue: number): string { + const prefix: string = '0x'; + + if (!Utils.isInteger(nodeValue)) { + return String(nodeValue); + } + + return `${prefix}${Utils.decToHex(nodeValue)}`; + } +} diff --git a/src/node-obfuscators/replacers/StringLiteralReplacer.ts b/src/node-obfuscators/replacers/StringLiteralReplacer.ts new file mode 100644 index 00000000..8974b21b --- /dev/null +++ b/src/node-obfuscators/replacers/StringLiteralReplacer.ts @@ -0,0 +1,64 @@ +import { TUnicodeArrayCallsWrapper } from "../../types/custom-nodes/TUnicodeArrayCallsWrapper"; +import { TUnicodeArrayNode } from "../../types/custom-nodes/TUnicodeArrayNode"; + +import { AbstractReplacer } from "./AbstractReplacer"; +import { NumberLiteralReplacer } from "./NumberLiteralReplacer"; +import { UnicodeArray } from "../../UnicodeArray"; +import { Utils } from "../../Utils"; + +export class StringLiteralReplacer extends AbstractReplacer { + /** + * @param nodeValue + * @returns {string} + */ + public replace (nodeValue: string): string { + const replaceWithUnicodeArrayFlag: boolean = Math.random() <= this.options.unicodeArrayThreshold; + + if (this.options.encodeUnicodeLiterals && replaceWithUnicodeArrayFlag) { + nodeValue = Utils.btoa(nodeValue); + } + + nodeValue = Utils.stringToUnicode(nodeValue); + + if (this.options.unicodeArray && replaceWithUnicodeArrayFlag) { + return this.replaceStringLiteralWithUnicodeArrayCall(nodeValue); + } + + return nodeValue; + } + + private replaceStringLiteralWithUnicodeArrayCall (value: string): string { + const unicodeArrayNode: TUnicodeArrayNode = this.nodes.get('unicodeArrayNode'); + + if (!unicodeArrayNode) { + throw new ReferenceError('`unicodeArrayNode` node is not found in Map with custom nodes.'); + } + + let unicodeArray: UnicodeArray = unicodeArrayNode.getNodeData(), + indexOfExistingValue: number = unicodeArray.getIndexOf(value), + indexOfValue: number, + hexadecimalIndex: string; + + if (indexOfExistingValue >= 0) { + indexOfValue = indexOfExistingValue; + } else { + indexOfValue = unicodeArray.getLength(); + unicodeArrayNode.updateNodeData(value); + } + + hexadecimalIndex = new NumberLiteralReplacer(this.nodes, this.options) + .replace(indexOfValue); + + if (this.options.wrapUnicodeArrayCalls) { + const unicodeArrayCallsWrapper: TUnicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); + + if (!unicodeArrayCallsWrapper) { + throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); + } + + return `${unicodeArrayCallsWrapper.getNodeIdentifier()}('${hexadecimalIndex}')`; + } + + return `${unicodeArrayNode.getNodeIdentifier()}[${hexadecimalIndex}]`; + } +} diff --git a/test/unit-tests/NodeUtils.spec.ts b/test/unit-tests/NodeUtils.spec.ts index ba13a0b3..d10eceb8 100644 --- a/test/unit-tests/NodeUtils.spec.ts +++ b/test/unit-tests/NodeUtils.spec.ts @@ -58,7 +58,7 @@ describe('NodeUtils', () => { assert.deepEqual(blockStatementNode, expectedBlockStatementNode); }); - it('should does not change `BlockStatement` node body if given node is not a valid Node', () => { + it('should does not change `BlockStatement` node body if given node is not a valid AbstractCustomNode', () => { assert.doesNotChange( () => NodeUtils.appendNode(blockStatementNode.body, {}), blockStatementNode, @@ -227,7 +227,7 @@ describe('NodeUtils', () => { assert.deepEqual(blockStatementNode, expectedBlockStatementNode); }); - it('should does not change `BlockStatement` node body if given node is not a valid Node', () => { + it('should does not change `BlockStatement` node body if given node is not a valid AbstractCustomNode', () => { assert.doesNotChange( () => NodeUtils.insertNodeAtIndex(blockStatementNode.body, {}, 1), blockStatementNode, @@ -310,7 +310,7 @@ describe('NodeUtils', () => { assert.deepEqual(blockStatementNode, expectedBlockStatementNode); }); - it('should does not change `BlockStatement` node body if given node is not a valid Node', () => { + it('should does not change `BlockStatement` node body if given node is not a valid AbstractCustomNode', () => { assert.doesNotChange( () => NodeUtils.prependNode(blockStatementNode.body, {}), blockStatementNode, From daef273cf23a6ea94b6aa9a3784697a3ac94fadb Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 30 Aug 2016 19:42:35 +0300 Subject: [PATCH 008/138] fixed specs descriptions --- test/unit-tests/NodeUtils.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unit-tests/NodeUtils.spec.ts b/test/unit-tests/NodeUtils.spec.ts index d10eceb8..ba13a0b3 100644 --- a/test/unit-tests/NodeUtils.spec.ts +++ b/test/unit-tests/NodeUtils.spec.ts @@ -58,7 +58,7 @@ describe('NodeUtils', () => { assert.deepEqual(blockStatementNode, expectedBlockStatementNode); }); - it('should does not change `BlockStatement` node body if given node is not a valid AbstractCustomNode', () => { + it('should does not change `BlockStatement` node body if given node is not a valid Node', () => { assert.doesNotChange( () => NodeUtils.appendNode(blockStatementNode.body, {}), blockStatementNode, @@ -227,7 +227,7 @@ describe('NodeUtils', () => { assert.deepEqual(blockStatementNode, expectedBlockStatementNode); }); - it('should does not change `BlockStatement` node body if given node is not a valid AbstractCustomNode', () => { + it('should does not change `BlockStatement` node body if given node is not a valid Node', () => { assert.doesNotChange( () => NodeUtils.insertNodeAtIndex(blockStatementNode.body, {}, 1), blockStatementNode, @@ -310,7 +310,7 @@ describe('NodeUtils', () => { assert.deepEqual(blockStatementNode, expectedBlockStatementNode); }); - it('should does not change `BlockStatement` node body if given node is not a valid AbstractCustomNode', () => { + it('should does not change `BlockStatement` node body if given node is not a valid Node', () => { assert.doesNotChange( () => NodeUtils.prependNode(blockStatementNode.body, {}), blockStatementNode, From 09adc3ca3837ef29a9aaa91a00d7686483fddfb8 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 30 Aug 2016 19:47:02 +0300 Subject: [PATCH 009/138] doc block --- src/node-obfuscators/replacers/StringLiteralReplacer.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/node-obfuscators/replacers/StringLiteralReplacer.ts b/src/node-obfuscators/replacers/StringLiteralReplacer.ts index 8974b21b..78927f96 100644 --- a/src/node-obfuscators/replacers/StringLiteralReplacer.ts +++ b/src/node-obfuscators/replacers/StringLiteralReplacer.ts @@ -27,6 +27,10 @@ export class StringLiteralReplacer extends AbstractReplacer { return nodeValue; } + /** + * @param value + * @returns {string} + */ private replaceStringLiteralWithUnicodeArrayCall (value: string): string { const unicodeArrayNode: TUnicodeArrayNode = this.nodes.get('unicodeArrayNode'); From e0c46e091b542482ff2018ee1f37cbcd8c54fc5f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 30 Aug 2016 21:47:51 +0300 Subject: [PATCH 010/138] WIP --- dist/index.js | 177 +++++++++--------- src/NodeUtils.ts | 54 +++++- .../AbstractNodeObfuscator.ts | 30 --- src/node-obfuscators/CatchClauseObfuscator.ts | 31 ++- .../FunctionDeclarationObfuscator.ts | 28 ++- src/node-obfuscators/FunctionObfuscator.ts | 31 ++- .../VariableDeclarationObfuscator.ts | 31 ++- .../replacers/IdentifierReplacer.ts | 25 +++ 8 files changed, 260 insertions(+), 147 deletions(-) diff --git a/dist/index.js b/dist/index.js index 9b19c173..ea8ba9a0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -232,14 +232,12 @@ var NodeUtils = function () { _createClass(NodeUtils, null, [{ key: 'addXVerbatimPropertyToLiterals', value: function addXVerbatimPropertyToLiterals(node) { - estraverse.replace(node, { - enter: function enter(node, parentNode) { - if (Nodes_1.Nodes.isLiteralNode(node)) { - node['x-verbatim-property'] = { - content: node.raw, - precedence: escodegen.Precedence.Primary - }; - } + NodeUtils.typedReplace(node, NodeType_1.NodeType.Literal, { + leave: function leave(node) { + node['x-verbatim-property'] = { + content: node.raw, + precedence: escodegen.Precedence.Primary + }; } }); } @@ -335,6 +333,29 @@ var NodeUtils = function () { } blockScopeBody.unshift(node); } + }, { + key: 'typedReplace', + value: function typedReplace(node, nodeType, visitor) { + NodeUtils.typedTraverse(node, nodeType, visitor, 'replace'); + } + }, { + key: 'typedTraverse', + value: function typedTraverse(node, nodeType, visitor) { + var traverseType = arguments.length <= 3 || arguments[3] === undefined ? 'traverse' : arguments[3]; + + estraverse[traverseType](node, { + enter: function enter(node) { + if (node.type === nodeType && visitor.enter) { + visitor.enter(node); + } + }, + leave: function leave(node) { + if (node.type === nodeType && visitor.leave) { + visitor.leave(node); + } + } + }); + } }, { key: 'validateNode', value: function validateNode(node) { @@ -508,44 +529,19 @@ module.exports = require("estraverse"); /***/ }, /* 6 */ -/***/ function(module, exports, __webpack_require__) { +/***/ function(module, exports) { "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var Nodes_1 = __webpack_require__(2); -var Utils_1 = __webpack_require__(0); +var AbstractNodeObfuscator = function AbstractNodeObfuscator(nodes, options) { + _classCallCheck(this, AbstractNodeObfuscator); -var AbstractNodeObfuscator = function () { - function AbstractNodeObfuscator(nodes, options) { - _classCallCheck(this, AbstractNodeObfuscator); - - this.nodes = nodes; - this.options = options; - } - - _createClass(AbstractNodeObfuscator, [{ - key: "isReservedName", - value: function isReservedName(name) { - return this.options.reservedNames.some(function (reservedName) { - return new RegExp(reservedName, 'g').test(name); - }); - } - }, { - key: "storeIdentifiersNames", - value: function storeIdentifiersNames(node, namesMap) { - if (Nodes_1.Nodes.isIdentifierNode(node) && !this.isReservedName(node.name)) { - namesMap.set(node.name, Utils_1.Utils.getRandomVariableName()); - } - } - }]); - - return AbstractNodeObfuscator; -}(); + this.nodes = nodes; + this.options = options; +}; exports.AbstractNodeObfuscator = AbstractNodeObfuscator; @@ -716,6 +712,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 AbstractReplacer_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(0); var IdentifierReplacer = function (_AbstractReplacer_1$A) { _inherits(IdentifierReplacer, _AbstractReplacer_1$A); @@ -735,6 +732,20 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { } return obfuscatedIdentifierName; } + }, { + key: "storeNames", + value: function storeNames(nodeName, namesMap) { + if (!this.isReservedName(nodeName)) { + namesMap.set(nodeName, Utils_1.Utils.getRandomVariableName()); + } + } + }, { + key: "isReservedName", + value: function isReservedName(name) { + return this.options.reservedNames.some(function (reservedName) { + return new RegExp(reservedName, 'g').test(name); + }); + } }]); return IdentifierReplacer; @@ -2362,54 +2373,51 @@ 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 estraverse = __webpack_require__(5); +var NodeType_1 = __webpack_require__(7); var AbstractNodeObfuscator_1 = __webpack_require__(6); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); +var NodeUtils_1 = __webpack_require__(1); var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { _inherits(CatchClauseObfuscator, _AbstractNodeObfuscat); - function CatchClauseObfuscator() { - var _Object$getPrototypeO; - + function CatchClauseObfuscator(nodes, options) { _classCallCheck(this, CatchClauseObfuscator); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(CatchClauseObfuscator)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(CatchClauseObfuscator).call(this, nodes, options)); _this.catchClauseParam = new Map(); + _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; } _createClass(CatchClauseObfuscator, [{ - key: 'obfuscateNode', + key: "obfuscateNode", value: function obfuscateNode(catchClauseNode) { this.storeCatchClauseParam(catchClauseNode); this.replaceCatchClauseParam(catchClauseNode); } }, { - key: 'storeCatchClauseParam', + key: "storeCatchClauseParam", value: function storeCatchClauseParam(catchClauseNode) { var _this2 = this; - estraverse.traverse(catchClauseNode.param, { + NodeUtils_1.NodeUtils.typedReplace(catchClauseNode.param, NodeType_1.NodeType.Identifier, { leave: function leave(node) { - return _this2.storeIdentifiersNames(node, _this2.catchClauseParam); + _this2.identifierReplacer.storeNames(node.name, _this2.catchClauseParam); } }); } }, { - key: 'replaceCatchClauseParam', + key: "replaceCatchClauseParam", value: function replaceCatchClauseParam(catchClauseNode) { var _this3 = this; estraverse.replace(catchClauseNode, { leave: function leave(node, parentNode) { if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = new IdentifierReplacer_1.IdentifierReplacer(_this3.nodes, _this3.options).replace(node.name, _this3.catchClauseParam); + node.name = _this3.identifierReplacer.replace(node.name, _this3.catchClauseParam); } } }); @@ -2446,18 +2454,13 @@ var NodeUtils_1 = __webpack_require__(1); var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { _inherits(FunctionDeclarationObfuscator, _AbstractNodeObfuscat); - function FunctionDeclarationObfuscator() { - var _Object$getPrototypeO; - + function FunctionDeclarationObfuscator(nodes, options) { _classCallCheck(this, FunctionDeclarationObfuscator); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(FunctionDeclarationObfuscator)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionDeclarationObfuscator).call(this, nodes, options)); _this.functionName = new Map(); + _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; } @@ -2475,9 +2478,9 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { value: function storeFunctionName(functionDeclarationNode) { var _this2 = this; - estraverse.traverse(functionDeclarationNode.id, { + NodeUtils_1.NodeUtils.typedReplace(functionDeclarationNode.id, NodeType_1.NodeType.Identifier, { leave: function leave(node) { - return _this2.storeIdentifiersNames(node, _this2.functionName); + _this2.identifierReplacer.storeNames(node.name, _this2.functionName); } }); } @@ -2490,7 +2493,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { estraverse.replace(scopeNode, { enter: function enter(node, parentNode) { if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = new IdentifierReplacer_1.IdentifierReplacer(_this3.nodes, _this3.options).replace(node.name, _this3.functionName); + node.name = _this3.identifierReplacer.replace(node.name, _this3.functionName); } } }); @@ -2518,56 +2521,53 @@ 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 estraverse = __webpack_require__(5); +var NodeType_1 = __webpack_require__(7); var AbstractNodeObfuscator_1 = __webpack_require__(6); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); +var NodeUtils_1 = __webpack_require__(1); var FunctionObfuscator = function (_AbstractNodeObfuscat) { _inherits(FunctionObfuscator, _AbstractNodeObfuscat); - function FunctionObfuscator() { - var _Object$getPrototypeO; - + function FunctionObfuscator(nodes, options) { _classCallCheck(this, FunctionObfuscator); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(FunctionObfuscator)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionObfuscator).call(this, nodes, options)); _this.functionParams = new Map(); + _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; } _createClass(FunctionObfuscator, [{ - key: 'obfuscateNode', + key: "obfuscateNode", value: function obfuscateNode(functionNode) { this.storeFunctionParams(functionNode); this.replaceFunctionParams(functionNode); } }, { - key: 'storeFunctionParams', + key: "storeFunctionParams", value: function storeFunctionParams(functionNode) { var _this2 = this; functionNode.params.forEach(function (paramsNode) { - estraverse.traverse(paramsNode, { + NodeUtils_1.NodeUtils.typedReplace(paramsNode, NodeType_1.NodeType.Identifier, { leave: function leave(node) { - return _this2.storeIdentifiersNames(node, _this2.functionParams); + _this2.identifierReplacer.storeNames(node.name, _this2.functionParams); } }); }); } }, { - key: 'replaceFunctionParams', + key: "replaceFunctionParams", value: function replaceFunctionParams(functionNode) { var _this3 = this; var replaceVisitor = { leave: function leave(node, parentNode) { if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = new IdentifierReplacer_1.IdentifierReplacer(_this3.nodes, _this3.options).replace(node.name, _this3.functionParams); + node.name = _this3.identifierReplacer.replace(node.name, _this3.functionParams); } } }; @@ -2911,18 +2911,13 @@ var NodeUtils_1 = __webpack_require__(1); var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { _inherits(VariableDeclarationObfuscator, _AbstractNodeObfuscat); - function VariableDeclarationObfuscator() { - var _Object$getPrototypeO; - + function VariableDeclarationObfuscator(nodes, options) { _classCallCheck(this, VariableDeclarationObfuscator); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(VariableDeclarationObfuscator)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(VariableDeclarationObfuscator).call(this, nodes, options)); _this.variableNames = new Map(); + _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; } @@ -2941,9 +2936,9 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { var _this2 = this; variableDeclarationNode.declarations.forEach(function (declarationNode) { - estraverse.traverse(declarationNode.id, { - enter: function enter(node) { - return _this2.storeIdentifiersNames(node, _this2.variableNames); + NodeUtils_1.NodeUtils.typedReplace(declarationNode.id, NodeType_1.NodeType.Identifier, { + leave: function leave(node) { + _this2.identifierReplacer.storeNames(node.name, _this2.variableNames); } }); }); @@ -2961,7 +2956,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { estraverse.replace(node, { enter: function enter(node, parentNode) { if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = new IdentifierReplacer_1.IdentifierReplacer(_this3.nodes, _this3.options).replace(node.name, _this3.variableNames); + node.name = _this3.identifierReplacer.replace(node.name, _this3.variableNames); } } }); @@ -2970,7 +2965,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { isNodeAfterVariableDeclaratorFlag = true; } if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode) && isNodeAfterVariableDeclaratorFlag) { - node.name = new IdentifierReplacer_1.IdentifierReplacer(_this3.nodes, _this3.options).replace(node.name, _this3.variableNames); + node.name = _this3.identifierReplacer.replace(node.name, _this3.variableNames); } } }); diff --git a/src/NodeUtils.ts b/src/NodeUtils.ts index e616e776..7e1def16 100644 --- a/src/NodeUtils.ts +++ b/src/NodeUtils.ts @@ -2,6 +2,7 @@ import * as escodegen from 'escodegen'; import * as esprima from 'esprima'; import * as estraverse from 'estraverse'; +import { ILiteralNode } from "./interfaces/nodes/ILiteralNode"; import { INode } from './interfaces/nodes/INode'; import { TNodeWithBlockStatement } from "./types/TNodeWithBlockStatement"; @@ -28,14 +29,12 @@ export class NodeUtils { * @param node */ public static addXVerbatimPropertyToLiterals (node: INode): void { - estraverse.replace(node, { - enter: (node: INode, parentNode: INode): any => { - if (Nodes.isLiteralNode(node)) { - node['x-verbatim-property'] = { - content : node.raw, - precedence: escodegen.Precedence.Primary - }; - } + NodeUtils.typedReplace(node, NodeType.Literal, { + leave: (node: ILiteralNode) => { + node['x-verbatim-property'] = { + content : node.raw, + precedence: escodegen.Precedence.Primary + }; } }); } @@ -168,6 +167,45 @@ export class NodeUtils { blockScopeBody.unshift(node); } + /** + * @param node + * @param nodeType + * @param visitor + */ + public static typedReplace ( + node: INode, + nodeType: string, + visitor: {enter?: (node: INode) => void, leave?: (node: INode) => void}, + ): void { + NodeUtils.typedTraverse(node, nodeType, visitor, 'replace'); + } + + /** + * @param node + * @param nodeType + * @param visitor + * @param traverseType + */ + public static typedTraverse ( + node: INode, + nodeType: string, + visitor: {enter?: (node: INode) => void, leave?: (node: INode) => void}, + traverseType: string = 'traverse' + ): void { + (estraverse)[traverseType](node, { + enter: (node: INode): any => { + if (node.type === nodeType && visitor.enter) { + visitor.enter(node) + } + }, + leave: (node: INode): any => { + if (node.type === nodeType && visitor.leave) { + visitor.leave(node) + } + } + }); + } + /** * @param node * @returns {boolean} diff --git a/src/node-obfuscators/AbstractNodeObfuscator.ts b/src/node-obfuscators/AbstractNodeObfuscator.ts index 9598c95f..b1e13ee1 100644 --- a/src/node-obfuscators/AbstractNodeObfuscator.ts +++ b/src/node-obfuscators/AbstractNodeObfuscator.ts @@ -3,9 +3,6 @@ import { INodeObfuscator } from '../interfaces/INodeObfuscator'; import { INode } from "../interfaces/nodes/INode"; import { IOptions } from "../interfaces/IOptions"; -import { Nodes } from "../Nodes"; -import { Utils } from '../Utils'; - export abstract class AbstractNodeObfuscator implements INodeObfuscator { /** * @type Map @@ -31,31 +28,4 @@ export abstract class AbstractNodeObfuscator implements INodeObfuscator { * @param parentNode */ public abstract obfuscateNode (node: INode, parentNode?: INode): void; - - /** - * @param name - * @returns {boolean} - */ - protected isReservedName (name: string): boolean { - return this.options.reservedNames - .some((reservedName: string) => { - return new RegExp(reservedName, 'g').test(name); - }); - } - - /** - * Store all identifiers names as keys in given `namesMap` with random names as value. - * Reserved names will be ignored. - * - * @param node - * @param namesMap - */ - protected storeIdentifiersNames ( - node: INode, - namesMap: Map - ): void { - if (Nodes.isIdentifierNode(node) && !this.isReservedName(node.name)) { - namesMap.set(node.name, Utils.getRandomVariableName()); - } - } } diff --git a/src/node-obfuscators/CatchClauseObfuscator.ts b/src/node-obfuscators/CatchClauseObfuscator.ts index 0715725a..055ead34 100644 --- a/src/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-obfuscators/CatchClauseObfuscator.ts @@ -1,11 +1,18 @@ import * as estraverse from 'estraverse'; import { ICatchClauseNode } from "../interfaces/nodes/ICatchClauseNode"; +import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; +import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; import { INode } from '../interfaces/nodes/INode'; +import { IOptions } from "../interfaces/IOptions"; +import { IReplacer } from "../interfaces/IReplacer"; + +import { NodeType } from "../enums/NodeType"; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { IdentifierReplacer } from "./replacers/IdentifierReplacer"; import { Nodes } from "../Nodes"; +import { NodeUtils } from "../NodeUtils"; /** * replaces: @@ -21,6 +28,21 @@ export class CatchClauseObfuscator extends AbstractNodeObfuscator { */ private catchClauseParam: Map = new Map (); + /** + * @type {IReplacer&IdentifierReplacer} + */ + private identifierReplacer: IReplacer&IdentifierReplacer; + + /** + * @param nodes + * @param options + */ + constructor(nodes: Map , options: IOptions) { + super(nodes, options); + + this.identifierReplacer = new IdentifierReplacer(this.nodes, this.options); + } + /** * @param catchClauseNode */ @@ -33,8 +55,10 @@ export class CatchClauseObfuscator extends AbstractNodeObfuscator { * @param catchClauseNode */ private storeCatchClauseParam (catchClauseNode: ICatchClauseNode): void { - estraverse.traverse(catchClauseNode.param, { - leave: (node: INode): any => this.storeIdentifiersNames(node, this.catchClauseParam) + NodeUtils.typedReplace(catchClauseNode.param, NodeType.Identifier, { + leave: (node: IIdentifierNode) => { + this.identifierReplacer.storeNames(node.name, this.catchClauseParam) + } }); } @@ -45,8 +69,7 @@ export class CatchClauseObfuscator extends AbstractNodeObfuscator { estraverse.replace(catchClauseNode, { leave: (node: INode, parentNode: INode): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = new IdentifierReplacer(this.nodes, this.options) - .replace(node.name, this.catchClauseParam); + node.name = this.identifierReplacer.replace(node.name, this.catchClauseParam); } } }); diff --git a/src/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-obfuscators/FunctionDeclarationObfuscator.ts index aa39eb80..86ecc7c8 100644 --- a/src/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -1,7 +1,11 @@ import * as estraverse from 'estraverse'; +import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; import { IFunctionDeclarationNode } from "../interfaces/nodes/IFunctionDeclarationNode"; +import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; import { INode } from "../interfaces/nodes/INode"; +import { IOptions } from "../interfaces/IOptions"; +import { IReplacer } from "../interfaces/IReplacer"; import { NodeType } from "../enums/NodeType"; @@ -25,6 +29,21 @@ export class FunctionDeclarationObfuscator extends AbstractNodeObfuscator { */ private functionName: Map = new Map (); + /** + * @type {IReplacer&IdentifierReplacer} + */ + private identifierReplacer: IReplacer&IdentifierReplacer; + + /** + * @param nodes + * @param options + */ + constructor(nodes: Map , options: IOptions) { + super(nodes, options); + + this.identifierReplacer = new IdentifierReplacer(this.nodes, this.options); + } + /** * @param functionDeclarationNode * @param parentNode @@ -42,8 +61,10 @@ export class FunctionDeclarationObfuscator extends AbstractNodeObfuscator { * @param functionDeclarationNode */ private storeFunctionName (functionDeclarationNode: IFunctionDeclarationNode): void { - estraverse.traverse(functionDeclarationNode.id, { - leave: (node: INode): any => this.storeIdentifiersNames(node, this.functionName) + NodeUtils.typedReplace(functionDeclarationNode.id, NodeType.Identifier, { + leave: (node: IIdentifierNode) => { + this.identifierReplacer.storeNames(node.name, this.functionName) + } }); } @@ -58,8 +79,7 @@ export class FunctionDeclarationObfuscator extends AbstractNodeObfuscator { estraverse.replace(scopeNode, { enter: (node: INode, parentNode: INode): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = new IdentifierReplacer(this.nodes, this.options) - .replace(node.name, this.functionName); + node.name = this.identifierReplacer.replace(node.name, this.functionName); } } }); diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index 457dac2b..ff6882c7 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -1,11 +1,18 @@ import * as estraverse from 'estraverse'; +import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; import { IFunctionNode } from "../interfaces/nodes/IFunctionNode"; +import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; import { INode } from "../interfaces/nodes/INode"; +import { IOptions } from "../interfaces/IOptions"; +import { IReplacer } from "../interfaces/IReplacer"; + +import { NodeType } from "../enums/NodeType"; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { IdentifierReplacer } from "./replacers/IdentifierReplacer"; import { Nodes } from "../Nodes"; +import { NodeUtils } from "../NodeUtils"; /** * replaces: @@ -21,6 +28,21 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { */ private functionParams: Map = new Map (); + /** + * @type {IReplacer&IdentifierReplacer} + */ + private identifierReplacer: IReplacer&IdentifierReplacer; + + /** + * @param nodes + * @param options + */ + constructor(nodes: Map , options: IOptions) { + super(nodes, options); + + this.identifierReplacer = new IdentifierReplacer(this.nodes, this.options); + } + /** * @param functionNode */ @@ -35,8 +57,10 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { private storeFunctionParams (functionNode: IFunctionNode): void { functionNode.params .forEach((paramsNode: INode) => { - estraverse.traverse(paramsNode, { - leave: (node: INode): any => this.storeIdentifiersNames(node, this.functionParams) + NodeUtils.typedReplace(paramsNode, NodeType.Identifier, { + leave: (node: IIdentifierNode) => { + this.identifierReplacer.storeNames(node.name, this.functionParams) + } }); }); } @@ -48,8 +72,7 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { let replaceVisitor: estraverse.Visitor = { leave: (node: INode, parentNode: INode): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = new IdentifierReplacer(this.nodes, this.options) - .replace(node.name, this.functionParams); + node.name = this.identifierReplacer.replace(node.name, this.functionParams); } } }; diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index 756b0c14..e69a2be6 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -1,6 +1,10 @@ import * as estraverse from 'estraverse'; +import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; +import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; import { INode } from "../interfaces/nodes/INode"; +import { IOptions } from "../interfaces/IOptions"; +import { IReplacer } from "../interfaces/IReplacer"; import { IVariableDeclarationNode } from "../interfaces/nodes/IVariableDeclarationNode"; import { IVariableDeclaratorNode } from "../interfaces/nodes/IVariableDeclaratorNode"; @@ -22,11 +26,26 @@ import { NodeUtils } from "../NodeUtils"; * */ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { + /** + * @type {IReplacer&IdentifierReplacer} + */ + private identifierReplacer: IReplacer&IdentifierReplacer; + /** * @type {Map} */ private variableNames: Map = new Map (); + /** + * @param nodes + * @param options + */ + constructor(nodes: Map , options: IOptions) { + super(nodes, options); + + this.identifierReplacer = new IdentifierReplacer(this.nodes, this.options); + } + /** * @param variableDeclarationNode * @param parentNode @@ -46,8 +65,10 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { private storeVariableNames (variableDeclarationNode: IVariableDeclarationNode): void { variableDeclarationNode.declarations .forEach((declarationNode: IVariableDeclaratorNode) => { - estraverse.traverse(declarationNode.id, { - enter: (node: INode): any => this.storeIdentifiersNames(node, this.variableNames) + NodeUtils.typedReplace(declarationNode.id, NodeType.Identifier, { + leave: (node: IIdentifierNode) => { + this.identifierReplacer.storeNames(node.name, this.variableNames) + } }); }); } @@ -72,8 +93,7 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { estraverse.replace(node, { enter: (node: INode, parentNode: INode): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = new IdentifierReplacer(this.nodes, this.options) - .replace(node.name, this.variableNames); + node.name = this.identifierReplacer.replace(node.name, this.variableNames); } } }); @@ -84,8 +104,7 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { } if (Nodes.isReplaceableIdentifierNode(node, parentNode) && isNodeAfterVariableDeclaratorFlag) { - node.name = new IdentifierReplacer(this.nodes, this.options) - .replace(node.name, this.variableNames); + node.name = this.identifierReplacer.replace(node.name, this.variableNames); } } }); diff --git a/src/node-obfuscators/replacers/IdentifierReplacer.ts b/src/node-obfuscators/replacers/IdentifierReplacer.ts index d4ed5b9e..aa3d5311 100644 --- a/src/node-obfuscators/replacers/IdentifierReplacer.ts +++ b/src/node-obfuscators/replacers/IdentifierReplacer.ts @@ -1,4 +1,5 @@ import { AbstractReplacer } from "./AbstractReplacer"; +import { Utils } from "../../Utils"; export class IdentifierReplacer extends AbstractReplacer { /** @@ -15,4 +16,28 @@ export class IdentifierReplacer extends AbstractReplacer { return obfuscatedIdentifierName; } + + /** + * Store all identifiers names as keys in given `namesMap` with random names as value. + * Reserved names will be ignored. + * + * @param nodeName + * @param namesMap + */ + public storeNames (nodeName: string, namesMap: Map ): void { + if (!this.isReservedName(nodeName)) { + namesMap.set(nodeName, Utils.getRandomVariableName()); + } + } + + /** + * @param name + * @returns {boolean} + */ + private isReservedName (name: string): boolean { + return this.options.reservedNames + .some((reservedName: string) => { + return new RegExp(reservedName, 'g').test(name); + }); + } } From fdf1338511a95e4e0f0d023002874bd01052e794 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 30 Aug 2016 22:00:24 +0300 Subject: [PATCH 011/138] WIP --- dist/index.js | 41 +++++++++++-------- src/node-obfuscators/CatchClauseObfuscator.ts | 14 ++----- .../FunctionDeclarationObfuscator.ts | 14 ++----- src/node-obfuscators/FunctionObfuscator.ts | 14 ++----- .../VariableDeclarationObfuscator.ts | 16 +++----- .../replacers/IdentifierReplacer.ts | 15 ++++--- 6 files changed, 49 insertions(+), 65 deletions(-) diff --git a/dist/index.js b/dist/index.js index ea8ba9a0..4ccb232d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -718,15 +718,24 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { _inherits(IdentifierReplacer, _AbstractReplacer_1$A); function IdentifierReplacer() { + var _Object$getPrototypeO; + _classCallCheck(this, IdentifierReplacer); - return _possibleConstructorReturn(this, Object.getPrototypeOf(IdentifierReplacer).apply(this, arguments)); + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(IdentifierReplacer)).call.apply(_Object$getPrototypeO, [this].concat(args))); + + _this.namesMap = new Map(); + return _this; } _createClass(IdentifierReplacer, [{ key: "replace", - value: function replace(nodeValue, namesMap) { - var obfuscatedIdentifierName = namesMap.get(nodeValue); + value: function replace(nodeValue) { + var obfuscatedIdentifierName = this.namesMap.get(nodeValue); if (!obfuscatedIdentifierName) { return nodeValue; } @@ -734,9 +743,9 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { } }, { key: "storeNames", - value: function storeNames(nodeName, namesMap) { + value: function storeNames(nodeName) { if (!this.isReservedName(nodeName)) { - namesMap.set(nodeName, Utils_1.Utils.getRandomVariableName()); + this.namesMap.set(nodeName, Utils_1.Utils.getRandomVariableName()); } } }, { @@ -2387,7 +2396,6 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(CatchClauseObfuscator).call(this, nodes, options)); - _this.catchClauseParam = new Map(); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; } @@ -2405,7 +2413,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { NodeUtils_1.NodeUtils.typedReplace(catchClauseNode.param, NodeType_1.NodeType.Identifier, { leave: function leave(node) { - _this2.identifierReplacer.storeNames(node.name, _this2.catchClauseParam); + _this2.identifierReplacer.storeNames(node.name); } }); } @@ -2417,7 +2425,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { estraverse.replace(catchClauseNode, { leave: function leave(node, parentNode) { if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = _this3.identifierReplacer.replace(node.name, _this3.catchClauseParam); + node.name = _this3.identifierReplacer.replace(node.name); } } }); @@ -2459,7 +2467,6 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionDeclarationObfuscator).call(this, nodes, options)); - _this.functionName = new Map(); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; } @@ -2480,7 +2487,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { NodeUtils_1.NodeUtils.typedReplace(functionDeclarationNode.id, NodeType_1.NodeType.Identifier, { leave: function leave(node) { - _this2.identifierReplacer.storeNames(node.name, _this2.functionName); + _this2.identifierReplacer.storeNames(node.name); } }); } @@ -2493,7 +2500,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { estraverse.replace(scopeNode, { enter: function enter(node, parentNode) { if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = _this3.identifierReplacer.replace(node.name, _this3.functionName); + node.name = _this3.identifierReplacer.replace(node.name); } } }); @@ -2535,7 +2542,6 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionObfuscator).call(this, nodes, options)); - _this.functionParams = new Map(); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; } @@ -2554,7 +2560,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { functionNode.params.forEach(function (paramsNode) { NodeUtils_1.NodeUtils.typedReplace(paramsNode, NodeType_1.NodeType.Identifier, { leave: function leave(node) { - _this2.identifierReplacer.storeNames(node.name, _this2.functionParams); + _this2.identifierReplacer.storeNames(node.name); } }); }); @@ -2567,7 +2573,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { var replaceVisitor = { leave: function leave(node, parentNode) { if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = _this3.identifierReplacer.replace(node.name, _this3.functionParams); + node.name = _this3.identifierReplacer.replace(node.name); } } }; @@ -2916,7 +2922,6 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(VariableDeclarationObfuscator).call(this, nodes, options)); - _this.variableNames = new Map(); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; } @@ -2938,7 +2943,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { variableDeclarationNode.declarations.forEach(function (declarationNode) { NodeUtils_1.NodeUtils.typedReplace(declarationNode.id, NodeType_1.NodeType.Identifier, { leave: function leave(node) { - _this2.identifierReplacer.storeNames(node.name, _this2.variableNames); + _this2.identifierReplacer.storeNames(node.name); } }); }); @@ -2956,7 +2961,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { estraverse.replace(node, { enter: function enter(node, parentNode) { if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = _this3.identifierReplacer.replace(node.name, _this3.variableNames); + node.name = _this3.identifierReplacer.replace(node.name); } } }); @@ -2965,7 +2970,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { isNodeAfterVariableDeclaratorFlag = true; } if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode) && isNodeAfterVariableDeclaratorFlag) { - node.name = _this3.identifierReplacer.replace(node.name, _this3.variableNames); + node.name = _this3.identifierReplacer.replace(node.name); } } }); diff --git a/src/node-obfuscators/CatchClauseObfuscator.ts b/src/node-obfuscators/CatchClauseObfuscator.ts index 055ead34..ec379afc 100644 --- a/src/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-obfuscators/CatchClauseObfuscator.ts @@ -5,7 +5,6 @@ import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; import { INode } from '../interfaces/nodes/INode'; import { IOptions } from "../interfaces/IOptions"; -import { IReplacer } from "../interfaces/IReplacer"; import { NodeType } from "../enums/NodeType"; @@ -24,14 +23,9 @@ import { NodeUtils } from "../NodeUtils"; */ export class CatchClauseObfuscator extends AbstractNodeObfuscator { /** - * @type {Map} + * @type {IdentifierReplacer} */ - private catchClauseParam: Map = new Map (); - - /** - * @type {IReplacer&IdentifierReplacer} - */ - private identifierReplacer: IReplacer&IdentifierReplacer; + private identifierReplacer: IdentifierReplacer; /** * @param nodes @@ -57,7 +51,7 @@ export class CatchClauseObfuscator extends AbstractNodeObfuscator { private storeCatchClauseParam (catchClauseNode: ICatchClauseNode): void { NodeUtils.typedReplace(catchClauseNode.param, NodeType.Identifier, { leave: (node: IIdentifierNode) => { - this.identifierReplacer.storeNames(node.name, this.catchClauseParam) + this.identifierReplacer.storeNames(node.name) } }); } @@ -69,7 +63,7 @@ export class CatchClauseObfuscator extends AbstractNodeObfuscator { estraverse.replace(catchClauseNode, { leave: (node: INode, parentNode: INode): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = this.identifierReplacer.replace(node.name, this.catchClauseParam); + node.name = this.identifierReplacer.replace(node.name); } } }); diff --git a/src/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-obfuscators/FunctionDeclarationObfuscator.ts index 86ecc7c8..e30f37bf 100644 --- a/src/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -5,7 +5,6 @@ import { IFunctionDeclarationNode } from "../interfaces/nodes/IFunctionDeclarati import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; import { INode } from "../interfaces/nodes/INode"; import { IOptions } from "../interfaces/IOptions"; -import { IReplacer } from "../interfaces/IReplacer"; import { NodeType } from "../enums/NodeType"; @@ -25,14 +24,9 @@ import { NodeUtils } from "../NodeUtils"; */ export class FunctionDeclarationObfuscator extends AbstractNodeObfuscator { /** - * @type {Map} + * @type {IdentifierReplacer} */ - private functionName: Map = new Map (); - - /** - * @type {IReplacer&IdentifierReplacer} - */ - private identifierReplacer: IReplacer&IdentifierReplacer; + private identifierReplacer: IdentifierReplacer; /** * @param nodes @@ -63,7 +57,7 @@ export class FunctionDeclarationObfuscator extends AbstractNodeObfuscator { private storeFunctionName (functionDeclarationNode: IFunctionDeclarationNode): void { NodeUtils.typedReplace(functionDeclarationNode.id, NodeType.Identifier, { leave: (node: IIdentifierNode) => { - this.identifierReplacer.storeNames(node.name, this.functionName) + this.identifierReplacer.storeNames(node.name) } }); } @@ -79,7 +73,7 @@ export class FunctionDeclarationObfuscator extends AbstractNodeObfuscator { estraverse.replace(scopeNode, { enter: (node: INode, parentNode: INode): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = this.identifierReplacer.replace(node.name, this.functionName); + node.name = this.identifierReplacer.replace(node.name); } } }); diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index ff6882c7..36f8bc03 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -5,7 +5,6 @@ import { IFunctionNode } from "../interfaces/nodes/IFunctionNode"; import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; import { INode } from "../interfaces/nodes/INode"; import { IOptions } from "../interfaces/IOptions"; -import { IReplacer } from "../interfaces/IReplacer"; import { NodeType } from "../enums/NodeType"; @@ -24,14 +23,9 @@ import { NodeUtils } from "../NodeUtils"; */ export class FunctionObfuscator extends AbstractNodeObfuscator { /** - * @type {Map} + * @type {IdentifierReplacer} */ - private functionParams: Map = new Map (); - - /** - * @type {IReplacer&IdentifierReplacer} - */ - private identifierReplacer: IReplacer&IdentifierReplacer; + private identifierReplacer: IdentifierReplacer; /** * @param nodes @@ -59,7 +53,7 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { .forEach((paramsNode: INode) => { NodeUtils.typedReplace(paramsNode, NodeType.Identifier, { leave: (node: IIdentifierNode) => { - this.identifierReplacer.storeNames(node.name, this.functionParams) + this.identifierReplacer.storeNames(node.name) } }); }); @@ -72,7 +66,7 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { let replaceVisitor: estraverse.Visitor = { leave: (node: INode, parentNode: INode): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = this.identifierReplacer.replace(node.name, this.functionParams); + node.name = this.identifierReplacer.replace(node.name); } } }; diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index e69a2be6..a47d8a39 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -4,7 +4,6 @@ import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; import { INode } from "../interfaces/nodes/INode"; import { IOptions } from "../interfaces/IOptions"; -import { IReplacer } from "../interfaces/IReplacer"; import { IVariableDeclarationNode } from "../interfaces/nodes/IVariableDeclarationNode"; import { IVariableDeclaratorNode } from "../interfaces/nodes/IVariableDeclaratorNode"; @@ -27,14 +26,9 @@ import { NodeUtils } from "../NodeUtils"; */ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { /** - * @type {IReplacer&IdentifierReplacer} + * @type {IdentifierReplacer} */ - private identifierReplacer: IReplacer&IdentifierReplacer; - - /** - * @type {Map} - */ - private variableNames: Map = new Map (); + private identifierReplacer: IdentifierReplacer; /** * @param nodes @@ -67,7 +61,7 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { .forEach((declarationNode: IVariableDeclaratorNode) => { NodeUtils.typedReplace(declarationNode.id, NodeType.Identifier, { leave: (node: IIdentifierNode) => { - this.identifierReplacer.storeNames(node.name, this.variableNames) + this.identifierReplacer.storeNames(node.name) } }); }); @@ -93,7 +87,7 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { estraverse.replace(node, { enter: (node: INode, parentNode: INode): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = this.identifierReplacer.replace(node.name, this.variableNames); + node.name = this.identifierReplacer.replace(node.name); } } }); @@ -104,7 +98,7 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { } if (Nodes.isReplaceableIdentifierNode(node, parentNode) && isNodeAfterVariableDeclaratorFlag) { - node.name = this.identifierReplacer.replace(node.name, this.variableNames); + node.name = this.identifierReplacer.replace(node.name); } } }); diff --git a/src/node-obfuscators/replacers/IdentifierReplacer.ts b/src/node-obfuscators/replacers/IdentifierReplacer.ts index aa3d5311..5266c505 100644 --- a/src/node-obfuscators/replacers/IdentifierReplacer.ts +++ b/src/node-obfuscators/replacers/IdentifierReplacer.ts @@ -2,13 +2,17 @@ import { AbstractReplacer } from "./AbstractReplacer"; import { Utils } from "../../Utils"; export class IdentifierReplacer extends AbstractReplacer { + /** + * @type {Map} + */ + private namesMap: Map = new Map(); + /** * @param nodeValue - * @param namesMap * @returns {string} */ - public replace (nodeValue: string, namesMap: Map ): string { - const obfuscatedIdentifierName: string|undefined = namesMap.get(nodeValue); + public replace (nodeValue: string): string { + const obfuscatedIdentifierName: string|undefined = this.namesMap.get(nodeValue); if (!obfuscatedIdentifierName) { return nodeValue; @@ -22,11 +26,10 @@ export class IdentifierReplacer extends AbstractReplacer { * Reserved names will be ignored. * * @param nodeName - * @param namesMap */ - public storeNames (nodeName: string, namesMap: Map ): void { + public storeNames (nodeName: string): void { if (!this.isReservedName(nodeName)) { - namesMap.set(nodeName, Utils.getRandomVariableName()); + this.namesMap.set(nodeName, Utils.getRandomVariableName()); } } From af0fa0bd38dea5bc28a8c40d285796ee03a677d0 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 1 Sep 2016 16:44:04 +0300 Subject: [PATCH 012/138] WIP --- dist/index.js | 100 +++++++++--------- ...neratorOutput.ts => IGeneratorOutput.d.ts} | 0 ...{IPackageConfig.ts => IPackageConfig.d.ts} | 0 3 files changed, 50 insertions(+), 50 deletions(-) rename src/interfaces/{IGeneratorOutput.ts => IGeneratorOutput.d.ts} (100%) rename src/interfaces/{IPackageConfig.ts => IPackageConfig.d.ts} (100%) diff --git a/dist/index.js b/dist/index.js index 4ccb232d..276eee00 100644 --- a/dist/index.js +++ b/dist/index.js @@ -219,8 +219,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var escodegen = __webpack_require__(10); var esprima = __webpack_require__(22); -var estraverse = __webpack_require__(5); -var NodeType_1 = __webpack_require__(7); +var estraverse = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); @@ -380,7 +380,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 NodeType_1 = __webpack_require__(7); +var NodeType_1 = __webpack_require__(5); var Nodes = function () { function Nodes() { @@ -523,30 +523,6 @@ exports.AbstractCustomNode = AbstractCustomNode; /***/ }, /* 5 */ -/***/ function(module, exports) { - -module.exports = require("estraverse"); - -/***/ }, -/* 6 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var AbstractNodeObfuscator = function AbstractNodeObfuscator(nodes, options) { - _classCallCheck(this, AbstractNodeObfuscator); - - this.nodes = nodes; - this.options = options; -}; - -exports.AbstractNodeObfuscator = AbstractNodeObfuscator; - -/***/ }, -/* 7 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -583,6 +559,30 @@ exports.NodeType = Utils_1.Utils.strEnumify({ WhileStatement: 'WhileStatement' }); +/***/ }, +/* 6 */ +/***/ function(module, exports) { + +module.exports = require("estraverse"); + +/***/ }, +/* 7 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var AbstractNodeObfuscator = function AbstractNodeObfuscator(nodes, options) { + _classCallCheck(this, AbstractNodeObfuscator); + + this.nodes = nodes; + this.options = options; +}; + +exports.AbstractNodeObfuscator = AbstractNodeObfuscator; + /***/ }, /* 8 */ /***/ function(module, exports) { @@ -1140,9 +1140,9 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var estraverse = __webpack_require__(5); +var estraverse = __webpack_require__(6); var AppendState_1 = __webpack_require__(3); -var NodeType_1 = __webpack_require__(7); +var NodeType_1 = __webpack_require__(5); var CatchClauseObfuscator_1 = __webpack_require__(43); var ConsoleOutputNodesGroup_1 = __webpack_require__(39); var DebugProtectionNodesGroup_1 = __webpack_require__(40); @@ -2381,9 +2381,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 estraverse = __webpack_require__(5); -var NodeType_1 = __webpack_require__(7); -var AbstractNodeObfuscator_1 = __webpack_require__(6); +var estraverse = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); +var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); @@ -2452,9 +2452,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 estraverse = __webpack_require__(5); -var NodeType_1 = __webpack_require__(7); -var AbstractNodeObfuscator_1 = __webpack_require__(6); +var estraverse = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); +var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); @@ -2527,9 +2527,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 estraverse = __webpack_require__(5); -var NodeType_1 = __webpack_require__(7); -var AbstractNodeObfuscator_1 = __webpack_require__(6); +var estraverse = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); +var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); @@ -2607,7 +2607,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 escodegen = __webpack_require__(10); -var AbstractNodeObfuscator_1 = __webpack_require__(6); +var AbstractNodeObfuscator_1 = __webpack_require__(7); var BooleanLiteralReplacer_1 = __webpack_require__(51); var Nodes_1 = __webpack_require__(2); var NumberLiteralReplacer_1 = __webpack_require__(20); @@ -2673,9 +2673,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__(10); -var estraverse = __webpack_require__(5); -var NodeType_1 = __webpack_require__(7); -var AbstractNodeObfuscator_1 = __webpack_require__(6); +var estraverse = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); +var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var StringLiteralReplacer_1 = __webpack_require__(15); @@ -2757,8 +2757,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 estraverse = __webpack_require__(5); -var AbstractNodeObfuscator_1 = __webpack_require__(6); +var estraverse = __webpack_require__(6); +var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); var StringLiteralReplacer_1 = __webpack_require__(15); @@ -2825,9 +2825,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__(10); -var estraverse = __webpack_require__(5); -var NodeType_1 = __webpack_require__(7); -var AbstractNodeObfuscator_1 = __webpack_require__(6); +var estraverse = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); +var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); @@ -2907,9 +2907,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 estraverse = __webpack_require__(5); -var NodeType_1 = __webpack_require__(7); -var AbstractNodeObfuscator_1 = __webpack_require__(6); +var estraverse = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); +var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); diff --git a/src/interfaces/IGeneratorOutput.ts b/src/interfaces/IGeneratorOutput.d.ts similarity index 100% rename from src/interfaces/IGeneratorOutput.ts rename to src/interfaces/IGeneratorOutput.d.ts diff --git a/src/interfaces/IPackageConfig.ts b/src/interfaces/IPackageConfig.d.ts similarity index 100% rename from src/interfaces/IPackageConfig.ts rename to src/interfaces/IPackageConfig.d.ts From 5d72fc08eaab858d46a84d4e5d319663376d332a Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 1 Sep 2016 17:03:04 +0300 Subject: [PATCH 013/138] webpack config for travis and test for build fail --- dist/index.js | 1 + src/node-groups/ConsoleOutputNodesGroup.ts | 2 ++ webpack.config.js | 26 ++++++++++++++-------- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/dist/index.js b/dist/index.js index 276eee00..2b1697bb 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2216,6 +2216,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { return _possibleConstructorReturn(_this); } _this.nodes.set('consoleOutputDisableExpressionNode', new ConsoleOutputDisableExpressionNode_1.ConsoleOutputDisableExpressionNode(_this.options)); + var t = {}; return _this; } diff --git a/src/node-groups/ConsoleOutputNodesGroup.ts b/src/node-groups/ConsoleOutputNodesGroup.ts index 2cc61fe5..7c055ed9 100644 --- a/src/node-groups/ConsoleOutputNodesGroup.ts +++ b/src/node-groups/ConsoleOutputNodesGroup.ts @@ -18,5 +18,7 @@ export class ConsoleOutputNodesGroup extends AbstractNodesGroup { 'consoleOutputDisableExpressionNode', new ConsoleOutputDisableExpressionNode(this.options) ); + + var t = {}; } } diff --git a/webpack.config.js b/webpack.config.js index 036f0f17..b3d2861e 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -12,7 +12,23 @@ ${fs.readFileSync('./LICENSE.BSD', 'utf8')} */`; } +const isTravisEnv = process.env.TRAVIS ? JSON.parse(process.env.TRAVIS) : false; +const plugins = [ + new webpack.BannerPlugin( + { + banner: `${getLicenseText()}\n\nrequire("source-map-support").install();\n`, + raw: true, + entryOnly: false + } + ) +]; + +if (isTravisEnv) { + plugins.push(new webpack.NoErrorsPlugin()); +} + module.exports = { + bail: isTravisEnv, entry: { 'index': './index.ts' }, @@ -28,15 +44,7 @@ module.exports = { extensions: ['', '.ts'], modulesDirectories: ['./src', './node_modules'] }, - plugins: [ - new webpack.BannerPlugin( - { - banner: `${getLicenseText()}\n\nrequire("source-map-support").install();\n`, - raw: true, - entryOnly: false - } - ) - ], + plugins: plugins, output: { path: './dist', filename: '[name].js', From e6221119415cb7569fb198d4d7c5c3b11cb881f4 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 1 Sep 2016 17:29:34 +0300 Subject: [PATCH 014/138] fixed scripts --- scripts/build | 4 ++-- scripts/test-compile | 2 +- scripts/test-coveralls | 6 +++--- scripts/test-full | 6 +++--- scripts/test-mocha | 4 ++-- scripts/travis | 2 +- webpack.config.js | 26 +++++++++----------------- 7 files changed, 21 insertions(+), 29 deletions(-) diff --git a/scripts/build b/scripts/build index a3dccd46..3c551801 100755 --- a/scripts/build +++ b/scripts/build @@ -1,5 +1,5 @@ #!/bin/bash -npm run webpack -npm run tslint +npm run webpack && +npm run tslint && npm test \ No newline at end of file diff --git a/scripts/test-compile b/scripts/test-compile index 5fc04bec..6d0ca7fa 100755 --- a/scripts/test-compile +++ b/scripts/test-compile @@ -1,4 +1,4 @@ #!/bin/bash -$(npm bin)/tsc -p tsconfig-test.json +$(npm bin)/tsc -p tsconfig-test.json && $(npm bin)/babel test-tmp --out-dir test-tmp --source-maps inline --presets es2015 \ No newline at end of file diff --git a/scripts/test-coveralls b/scripts/test-coveralls index 03e4615a..dbeffbe4 100755 --- a/scripts/test-coveralls +++ b/scripts/test-coveralls @@ -1,6 +1,6 @@ #!/bin/bash -npm run test:compile -$(npm bin)/istanbul cover $(npm bin)/_mocha -- test-tmp/test/index.spec.js --report lcovonly -cat ./coverage/lcov.info | $(npm bin)/coveralls +npm run test:compile && +$(npm bin)/istanbul cover $(npm bin)/_mocha -- test-tmp/test/index.spec.js --report lcovonly && +cat ./coverage/lcov.info | $(npm bin)/coveralls && npm run test:removeTmpDir \ No newline at end of file diff --git a/scripts/test-full b/scripts/test-full index e7cfc94f..bd2a5535 100755 --- a/scripts/test-full +++ b/scripts/test-full @@ -1,6 +1,6 @@ #!/bin/bash -npm run test:compile -node test-tmp/test/dev/test.js -$(npm bin)/istanbul cover $(npm bin)/_mocha -- test-tmp/test/index.spec.js +npm run test:compile && +node test-tmp/test/dev/test.js && +$(npm bin)/istanbul cover $(npm bin)/_mocha -- test-tmp/test/index.spec.js && npm run test:removeTmpDir \ No newline at end of file diff --git a/scripts/test-mocha b/scripts/test-mocha index 03570593..b6523b91 100755 --- a/scripts/test-mocha +++ b/scripts/test-mocha @@ -1,5 +1,5 @@ #!/bin/bash -npm run test:compile -$(npm bin)/mocha test-tmp/test/index.spec.js +npm run test:compile && +$(npm bin)/mocha test-tmp/test/index.spec.js && npm run test:removeTmpDir \ No newline at end of file diff --git a/scripts/travis b/scripts/travis index 2d4e4775..8ebc6706 100755 --- a/scripts/travis +++ b/scripts/travis @@ -1,4 +1,4 @@ #!/bin/bash -npm run tslint +npm run tslint && npm test \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index b3d2861e..036f0f17 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -12,23 +12,7 @@ ${fs.readFileSync('./LICENSE.BSD', 'utf8')} */`; } -const isTravisEnv = process.env.TRAVIS ? JSON.parse(process.env.TRAVIS) : false; -const plugins = [ - new webpack.BannerPlugin( - { - banner: `${getLicenseText()}\n\nrequire("source-map-support").install();\n`, - raw: true, - entryOnly: false - } - ) -]; - -if (isTravisEnv) { - plugins.push(new webpack.NoErrorsPlugin()); -} - module.exports = { - bail: isTravisEnv, entry: { 'index': './index.ts' }, @@ -44,7 +28,15 @@ module.exports = { extensions: ['', '.ts'], modulesDirectories: ['./src', './node_modules'] }, - plugins: plugins, + plugins: [ + new webpack.BannerPlugin( + { + banner: `${getLicenseText()}\n\nrequire("source-map-support").install();\n`, + raw: true, + entryOnly: false + } + ) + ], output: { path: './dist', filename: '[name].js', From 1bc241a9b49ee702be458a17bc259488f2979fc7 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 1 Sep 2016 17:32:10 +0300 Subject: [PATCH 015/138] fixed scripts --- dist/index.js | 1 - src/node-groups/ConsoleOutputNodesGroup.ts | 2 -- 2 files changed, 3 deletions(-) diff --git a/dist/index.js b/dist/index.js index 2b1697bb..276eee00 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2216,7 +2216,6 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { return _possibleConstructorReturn(_this); } _this.nodes.set('consoleOutputDisableExpressionNode', new ConsoleOutputDisableExpressionNode_1.ConsoleOutputDisableExpressionNode(_this.options)); - var t = {}; return _this; } diff --git a/src/node-groups/ConsoleOutputNodesGroup.ts b/src/node-groups/ConsoleOutputNodesGroup.ts index 7c055ed9..2cc61fe5 100644 --- a/src/node-groups/ConsoleOutputNodesGroup.ts +++ b/src/node-groups/ConsoleOutputNodesGroup.ts @@ -18,7 +18,5 @@ export class ConsoleOutputNodesGroup extends AbstractNodesGroup { 'consoleOutputDisableExpressionNode', new ConsoleOutputDisableExpressionNode(this.options) ); - - var t = {}; } } From d764720e62d476771e6a530b8869e24efbc6da36 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 1 Sep 2016 17:46:37 +0300 Subject: [PATCH 016/138] fixed tests and codestyle --- dist/index.js | 8 ++++---- src/node-obfuscators/CatchClauseObfuscator.ts | 4 +--- .../FunctionDeclarationObfuscator.ts | 4 +--- src/node-obfuscators/FunctionObfuscator.ts | 4 +--- .../VariableDeclarationObfuscator.ts | 4 +--- .../VariableDeclarationObfuscator.spec.ts | 12 ++++++------ 6 files changed, 14 insertions(+), 22 deletions(-) diff --git a/dist/index.js b/dist/index.js index 276eee00..00ecb006 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2413,7 +2413,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { NodeUtils_1.NodeUtils.typedReplace(catchClauseNode.param, NodeType_1.NodeType.Identifier, { leave: function leave(node) { - _this2.identifierReplacer.storeNames(node.name); + return _this2.identifierReplacer.storeNames(node.name); } }); } @@ -2487,7 +2487,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { NodeUtils_1.NodeUtils.typedReplace(functionDeclarationNode.id, NodeType_1.NodeType.Identifier, { leave: function leave(node) { - _this2.identifierReplacer.storeNames(node.name); + return _this2.identifierReplacer.storeNames(node.name); } }); } @@ -2560,7 +2560,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { functionNode.params.forEach(function (paramsNode) { NodeUtils_1.NodeUtils.typedReplace(paramsNode, NodeType_1.NodeType.Identifier, { leave: function leave(node) { - _this2.identifierReplacer.storeNames(node.name); + return _this2.identifierReplacer.storeNames(node.name); } }); }); @@ -2943,7 +2943,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { variableDeclarationNode.declarations.forEach(function (declarationNode) { NodeUtils_1.NodeUtils.typedReplace(declarationNode.id, NodeType_1.NodeType.Identifier, { leave: function leave(node) { - _this2.identifierReplacer.storeNames(node.name); + return _this2.identifierReplacer.storeNames(node.name); } }); }); diff --git a/src/node-obfuscators/CatchClauseObfuscator.ts b/src/node-obfuscators/CatchClauseObfuscator.ts index ec379afc..e09da399 100644 --- a/src/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-obfuscators/CatchClauseObfuscator.ts @@ -50,9 +50,7 @@ export class CatchClauseObfuscator extends AbstractNodeObfuscator { */ private storeCatchClauseParam (catchClauseNode: ICatchClauseNode): void { NodeUtils.typedReplace(catchClauseNode.param, NodeType.Identifier, { - leave: (node: IIdentifierNode) => { - this.identifierReplacer.storeNames(node.name) - } + leave: (node: IIdentifierNode) => this.identifierReplacer.storeNames(node.name) }); } diff --git a/src/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-obfuscators/FunctionDeclarationObfuscator.ts index e30f37bf..89810dd0 100644 --- a/src/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -56,9 +56,7 @@ export class FunctionDeclarationObfuscator extends AbstractNodeObfuscator { */ private storeFunctionName (functionDeclarationNode: IFunctionDeclarationNode): void { NodeUtils.typedReplace(functionDeclarationNode.id, NodeType.Identifier, { - leave: (node: IIdentifierNode) => { - this.identifierReplacer.storeNames(node.name) - } + leave: (node: IIdentifierNode) => this.identifierReplacer.storeNames(node.name) }); } diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index 36f8bc03..2ec3340a 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -52,9 +52,7 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { functionNode.params .forEach((paramsNode: INode) => { NodeUtils.typedReplace(paramsNode, NodeType.Identifier, { - leave: (node: IIdentifierNode) => { - this.identifierReplacer.storeNames(node.name) - } + leave: (node: IIdentifierNode) => this.identifierReplacer.storeNames(node.name) }); }); } diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index a47d8a39..6f9a9dde 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -60,9 +60,7 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { variableDeclarationNode.declarations .forEach((declarationNode: IVariableDeclaratorNode) => { NodeUtils.typedReplace(declarationNode.id, NodeType.Identifier, { - leave: (node: IIdentifierNode) => { - this.identifierReplacer.storeNames(node.name) - } + leave: (node: IIdentifierNode) => this.identifierReplacer.storeNames(node.name) }); }); } diff --git a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts index ac7ba2a8..cfbf7d10 100644 --- a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts @@ -18,8 +18,8 @@ describe('VariableDeclarationObfuscator', () => { Object.assign({}, NO_CUSTOM_NODES_PRESET) ); - assert.match(obfuscationResult.getObfuscatedCode(), /var *_0x([a-z0-9]){6} *= *'\\x61\\x62\\x63';/); - assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){6}\);/); + assert.match(obfuscationResult.getObfuscatedCode(), /var *_0x([a-z0-9]){5,6} *= *'\\x61\\x62\\x63';/); + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){5,6}\);/); }); it('should obfuscate variable call (`identifier` node) outside of block scope of node in which this variable was declared with `var` kind', () => { @@ -35,7 +35,7 @@ describe('VariableDeclarationObfuscator', () => { Object.assign({}, NO_CUSTOM_NODES_PRESET) ); - assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){6}\);/); + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){5,6}\);/); }); it('should not obfuscate variable call (`identifier` node) outside of block scope of node in which this variable was declared with `let` kind', () => { @@ -78,7 +78,7 @@ describe('VariableDeclarationObfuscator', () => { }); it('should obfuscate variable call (`identifier` node) before variable declaration if this call is inside function body', () => { - assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){6}\['\\x69\\x74\\x65\\x6d'\]\);/); + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){5,6}\['\\x69\\x74\\x65\\x6d'\]\);/); }); it('should not obfuscate variable call (`identifier` node) before variable declaration', () => { @@ -103,7 +103,7 @@ describe('VariableDeclarationObfuscator', () => { Object.assign({}, NO_CUSTOM_NODES_PRESET) ); - assert.match(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){6} *= *\{'\\x74\\x65\\x73\\x74/); + assert.match(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){5,6} *= *\{'\\x74\\x65\\x73\\x74/); }); it('shouldn\'t replace computed member expression identifier', () => { @@ -123,7 +123,7 @@ describe('VariableDeclarationObfuscator', () => { Object.assign({}, NO_CUSTOM_NODES_PRESET) ); - assert.match(obfuscationResult.getObfuscatedCode(), /_0x([a-z0-9]){6}\['\\x74\\x65\\x73\\x74'\]/); + assert.match(obfuscationResult.getObfuscatedCode(), /_0x([a-z0-9]){5,6}\['\\x74\\x65\\x73\\x74'\]/); }); }); }); From a70f192a1cefd9fe4584922208760d73c343da03 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 1 Sep 2016 18:36:03 +0300 Subject: [PATCH 017/138] Merge branch 'domain-lock' of https://github.com/slig/javascript-obfuscator into slig-domain-lock # Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. # # Lines starting with '#' will be ignored, and an empty message aborts # the commit. DomainLock feature WIP --- dist/index.js | 438 ++++++++++++------ src/Obfuscator.ts | 4 +- src/Utils.ts | 44 +- src/cli/JavaScriptObfuscatorCLI.ts | 1 + .../domain-lock-nodes/DomainLockNode.ts | 42 ++ src/interfaces/IObfuscatorOptions.d.ts | 1 + src/interfaces/IOptions.d.ts | 1 + src/node-groups/DomainLockNodesGroup.ts | 22 + src/options/Options.ts | 8 + src/preset-options/DefaultPreset.ts | 1 + src/preset-options/NoCustomNodesPreset.ts | 1 + .../DomainLockNodeTemplate.ts | 51 ++ test/dev/test.ts | 1 + .../UnicodeArrayCallsWrapper.spec.ts | 4 +- .../UnicodeArrayDecodeNode.spec.ts | 4 +- .../UnicodeArrayRotateFunctionNode.spec.ts | 4 +- test/unit-tests/Utils.spec.ts | 11 + 17 files changed, 486 insertions(+), 152 deletions(-) create mode 100644 src/custom-nodes/domain-lock-nodes/DomainLockNode.ts create mode 100644 src/node-groups/DomainLockNodesGroup.ts create mode 100644 src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts diff --git a/dist/index.js b/dist/index.js index 00ecb006..0a3afc11 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 = 72); +/******/ return __webpack_require__(__webpack_require__.s = 75); /******/ }) /************************************************************************/ /******/ ([ @@ -102,7 +102,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(67); +var chance_1 = __webpack_require__(70); var JSFuck_1 = __webpack_require__(19); var Utils = function () { @@ -163,6 +163,33 @@ var Utils = function () { max: rangeMaxInteger })).substr(0, length); } + }, { + key: 'hideString', + value: function hideString(str, length) { + var escapeRegExp = function escapeRegExp(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + }; + var randomMerge = function randomMerge(s1, s2) { + var i1 = -1, + i2 = -1, + result = ''; + while (i1 < s1.length || i2 < s2.length) { + if (Math.random() < 0.5 && i2 < s2.length) { + result += s2.charAt(++i2); + } else { + result += s1.charAt(++i1); + } + } + return result; + }; + var customPool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + var randomString = Utils.randomGenerator.string({ length: length, pool: customPool }); + var randomStringDiff = randomString.replace(new RegExp('[' + escapeRegExp(str) + ']', 'g'), ''); + var randomStringDiffArray = randomStringDiff.split(''); + Utils.randomGenerator.shuffle(randomStringDiffArray); + randomStringDiff = randomStringDiffArray.join(''); + return [randomMerge(str, randomStringDiff), randomStringDiff]; + } }, { key: 'isInteger', value: function isInteger(number) { @@ -217,11 +244,11 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var escodegen = __webpack_require__(10); +var escodegen = __webpack_require__(11); var esprima = __webpack_require__(22); var estraverse = __webpack_require__(6); var NodeType_1 = __webpack_require__(5); -var Nodes_1 = __webpack_require__(2); +var Nodes_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); var NodeUtils = function () { @@ -371,6 +398,19 @@ exports.NodeUtils = NodeUtils; /***/ }, /* 2 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +(function (AppendState) { + AppendState[AppendState["AfterObfuscation"] = 0] = "AfterObfuscation"; + AppendState[AppendState["BeforeObfuscation"] = 1] = "BeforeObfuscation"; +})(exports.AppendState || (exports.AppendState = {})); +var AppendState = exports.AppendState; + +/***/ }, +/* 3 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -473,19 +513,6 @@ var Nodes = function () { exports.Nodes = Nodes; -/***/ }, -/* 3 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -(function (AppendState) { - AppendState[AppendState["AfterObfuscation"] = 0] = "AfterObfuscation"; - AppendState[AppendState["BeforeObfuscation"] = 1] = "BeforeObfuscation"; -})(exports.AppendState || (exports.AppendState = {})); -var AppendState = exports.AppendState; - /***/ }, /* 4 */ /***/ function(module, exports) { @@ -633,24 +660,6 @@ exports.JavaScriptObfuscator = JavaScriptObfuscator; /* 10 */ /***/ function(module, exports) { -module.exports = require("escodegen"); - -/***/ }, -/* 11 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -exports.SourceMapMode = { - Inline: 'inline', - Separate: 'separate' -}; - -/***/ }, -/* 12 */ -/***/ function(module, exports) { - "use strict"; "use strict"; @@ -678,6 +687,24 @@ var AbstractNodesGroup = function () { exports.AbstractNodesGroup = AbstractNodesGroup; +/***/ }, +/* 11 */ +/***/ function(module, exports) { + +module.exports = require("escodegen"); + +/***/ }, +/* 12 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +exports.SourceMapMode = { + Inline: 'inline', + Separate: 'separate' +}; + /***/ }, /* 13 */ /***/ function(module, exports) { @@ -844,12 +871,13 @@ exports.StringLiteralReplacer = StringLiteralReplacer; "use strict"; "use strict"; -var SourceMapMode_1 = __webpack_require__(11); +var SourceMapMode_1 = __webpack_require__(12); exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ compact: true, debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: false, + domainLock: [], encodeUnicodeLiterals: false, reservedNames: [], rotateUnicodeArray: false, @@ -873,10 +901,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 esprima = __webpack_require__(22); -var escodegen = __webpack_require__(10); +var escodegen = __webpack_require__(11); var ObfuscationResult_1 = __webpack_require__(18); var Obfuscator_1 = __webpack_require__(25); -var Options_1 = __webpack_require__(52); +var Options_1 = __webpack_require__(54); var SourceMapCorrector_1 = __webpack_require__(26); var JavaScriptObfuscatorInternal = function () { @@ -1092,12 +1120,13 @@ exports.NumberLiteralReplacer = NumberLiteralReplacer; "use strict"; "use strict"; -var SourceMapMode_1 = __webpack_require__(11); +var SourceMapMode_1 = __webpack_require__(12); exports.DEFAULT_PRESET = Object.freeze({ compact: true, debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: true, + domainLock: [], encodeUnicodeLiterals: false, reservedNames: [], rotateUnicodeArray: true, @@ -1141,22 +1170,23 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var estraverse = __webpack_require__(6); -var AppendState_1 = __webpack_require__(3); +var AppendState_1 = __webpack_require__(2); var NodeType_1 = __webpack_require__(5); -var CatchClauseObfuscator_1 = __webpack_require__(43); -var ConsoleOutputNodesGroup_1 = __webpack_require__(39); -var DebugProtectionNodesGroup_1 = __webpack_require__(40); -var FunctionDeclarationObfuscator_1 = __webpack_require__(44); -var FunctionObfuscator_1 = __webpack_require__(45); -var LiteralObfuscator_1 = __webpack_require__(46); -var MemberExpressionObfuscator_1 = __webpack_require__(47); -var MethodDefinitionObfuscator_1 = __webpack_require__(48); -var Nodes_1 = __webpack_require__(2); +var CatchClauseObfuscator_1 = __webpack_require__(45); +var ConsoleOutputNodesGroup_1 = __webpack_require__(40); +var DebugProtectionNodesGroup_1 = __webpack_require__(41); +var DomainLockNodesGroup_1 = __webpack_require__(42); +var FunctionDeclarationObfuscator_1 = __webpack_require__(46); +var FunctionObfuscator_1 = __webpack_require__(47); +var LiteralObfuscator_1 = __webpack_require__(48); +var MemberExpressionObfuscator_1 = __webpack_require__(49); +var MethodDefinitionObfuscator_1 = __webpack_require__(50); +var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); -var ObjectExpressionObfuscator_1 = __webpack_require__(49); -var SelfDefendingNodesGroup_1 = __webpack_require__(41); -var UnicodeArrayNodesGroup_1 = __webpack_require__(42); -var VariableDeclarationObfuscator_1 = __webpack_require__(50); +var ObjectExpressionObfuscator_1 = __webpack_require__(51); +var SelfDefendingNodesGroup_1 = __webpack_require__(43); +var UnicodeArrayNodesGroup_1 = __webpack_require__(44); +var VariableDeclarationObfuscator_1 = __webpack_require__(52); var Obfuscator = function () { function Obfuscator(options) { @@ -1164,7 +1194,7 @@ var Obfuscator = function () { this.nodeObfuscators = new Map([[NodeType_1.NodeType.ArrowFunctionExpression, [FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.ClassDeclaration, [FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator]], [NodeType_1.NodeType.CatchClause, [CatchClauseObfuscator_1.CatchClauseObfuscator]], [NodeType_1.NodeType.FunctionDeclaration, [FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator, FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.FunctionExpression, [FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.MemberExpression, [MemberExpressionObfuscator_1.MemberExpressionObfuscator]], [NodeType_1.NodeType.MethodDefinition, [MethodDefinitionObfuscator_1.MethodDefinitionObfuscator]], [NodeType_1.NodeType.ObjectExpression, [ObjectExpressionObfuscator_1.ObjectExpressionObfuscator]], [NodeType_1.NodeType.VariableDeclaration, [VariableDeclarationObfuscator_1.VariableDeclarationObfuscator]], [NodeType_1.NodeType.Literal, [LiteralObfuscator_1.LiteralObfuscator]]]); this.options = options; - this.nodes = new Map([].concat(_toConsumableArray(new SelfDefendingNodesGroup_1.SelfDefendingNodesGroup(this.options).getNodes()), _toConsumableArray(new ConsoleOutputNodesGroup_1.ConsoleOutputNodesGroup(this.options).getNodes()), _toConsumableArray(new DebugProtectionNodesGroup_1.DebugProtectionNodesGroup(this.options).getNodes()), _toConsumableArray(new UnicodeArrayNodesGroup_1.UnicodeArrayNodesGroup(this.options).getNodes()))); + this.nodes = new Map([].concat(_toConsumableArray(new SelfDefendingNodesGroup_1.SelfDefendingNodesGroup(this.options).getNodes()), _toConsumableArray(new ConsoleOutputNodesGroup_1.ConsoleOutputNodesGroup(this.options).getNodes()), _toConsumableArray(new DebugProtectionNodesGroup_1.DebugProtectionNodesGroup(this.options).getNodes()), _toConsumableArray(new UnicodeArrayNodesGroup_1.UnicodeArrayNodesGroup(this.options).getNodes()), _toConsumableArray(new DomainLockNodesGroup_1.DomainLockNodesGroup(this.options).getNodes()))); } _createClass(Obfuscator, [{ @@ -1239,7 +1269,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 SourceMapMode_1 = __webpack_require__(11); +var SourceMapMode_1 = __webpack_require__(12); var ObfuscationResult_1 = __webpack_require__(18); var Utils_1 = __webpack_require__(0); @@ -1362,8 +1392,8 @@ 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__(70); -var mkdirp = __webpack_require__(71); +var fs = __webpack_require__(73); +var mkdirp = __webpack_require__(74); var path = __webpack_require__(23); var Utils_1 = __webpack_require__(0); @@ -1446,9 +1476,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 commander = __webpack_require__(69); +var commander = __webpack_require__(72); var path = __webpack_require__(23); -var SourceMapMode_1 = __webpack_require__(11); +var SourceMapMode_1 = __webpack_require__(12); var DefaultPreset_1 = __webpack_require__(21); var CLIUtils_1 = __webpack_require__(28); var JavaScriptObfuscator_1 = __webpack_require__(9); @@ -1498,7 +1528,9 @@ var JavaScriptObfuscatorCLI = function () { value: function configureCommands() { this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); - }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).parse(this.rawArguments); + }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { + return val.split(','); + }).parse(this.rawArguments); this.commands.on('--help', function () { console.log(' Examples:\n'); console.log(' %> javascript-obfuscator in.js --compact true --selfDefending false'); @@ -1587,8 +1619,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 AppendState_1 = __webpack_require__(3); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(56); +var AppendState_1 = __webpack_require__(2); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(58); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); @@ -1643,8 +1675,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(57); +var AppendState_1 = __webpack_require__(2); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(59); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); @@ -1696,8 +1728,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(58); +var AppendState_1 = __webpack_require__(2); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(60); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); @@ -1749,8 +1781,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(59); +var AppendState_1 = __webpack_require__(2); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(61); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1804,6 +1836,8 @@ exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; "use strict"; "use strict"; +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + var _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"); } } @@ -1812,9 +1846,76 @@ 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 AppendState_1 = __webpack_require__(3); +var AppendState_1 = __webpack_require__(2); +var DomainLockNodeTemplate_1 = __webpack_require__(62); +var AbstractCustomNode_1 = __webpack_require__(4); +var NodeUtils_1 = __webpack_require__(1); +var Utils_1 = __webpack_require__(0); + +var DomainLockNode = function (_AbstractCustomNode_) { + _inherits(DomainLockNode, _AbstractCustomNode_); + + function DomainLockNode() { + var _Object$getPrototypeO; + + _classCallCheck(this, DomainLockNode); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(DomainLockNode)).call.apply(_Object$getPrototypeO, [this].concat(args))); + + _this.appendState = AppendState_1.AppendState.BeforeObfuscation; + return _this; + } + + _createClass(DomainLockNode, [{ + key: "appendNode", + value: function appendNode(blockScopeNode) { + NodeUtils_1.NodeUtils.prependNode(blockScopeNode.body, this.getNode()); + } + }, { + key: "getNodeStructure", + value: function getNodeStructure() { + var domainsString = this.options.domainLock.join(';'); + var _Utils_1$Utils$hideSt = Utils_1.Utils.hideString(domainsString, domainsString.length * 3); + + var _Utils_1$Utils$hideSt2 = _slicedToArray(_Utils_1$Utils$hideSt, 2); + + var hiddenDomainsString = _Utils_1$Utils$hideSt2[0]; + var diff = _Utils_1$Utils$hideSt2[1]; + + return NodeUtils_1.NodeUtils.convertCodeToStructure(DomainLockNodeTemplate_1.DomainLockNodeTemplate().formatUnicorn({ + domains: Utils_1.Utils.stringToUnicode(hiddenDomainsString), + diff: diff + })); + } + }]); + + return DomainLockNode; +}(AbstractCustomNode_1.AbstractCustomNode); + +exports.DomainLockNode = DomainLockNode; + +/***/ }, +/* 35 */ +/***/ 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"); } } + +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 AppendState_1 = __webpack_require__(2); var NoCustomNodesPreset_1 = __webpack_require__(16); -var SelfDefendingTemplate_1 = __webpack_require__(60); +var SelfDefendingTemplate_1 = __webpack_require__(63); var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -1864,7 +1965,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 35 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1881,8 +1982,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(61); +var AppendState_1 = __webpack_require__(2); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(64); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1938,7 +2039,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; /***/ }, -/* 36 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1955,11 +2056,11 @@ 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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); +var AppendState_1 = __webpack_require__(2); var NoCustomNodesPreset_1 = __webpack_require__(16); -var AtobTemplate_1 = __webpack_require__(55); -var SelfDefendingTemplate_1 = __webpack_require__(62); -var UnicodeArrayDecodeTemplate_1 = __webpack_require__(63); +var AtobTemplate_1 = __webpack_require__(57); +var SelfDefendingTemplate_1 = __webpack_require__(65); +var UnicodeArrayDecodeTemplate_1 = __webpack_require__(66); var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2019,7 +2120,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; /***/ }, -/* 37 */ +/* 38 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2036,8 +2137,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); -var UnicodeArrayTemplate_1 = __webpack_require__(64); +var AppendState_1 = __webpack_require__(2); +var UnicodeArrayTemplate_1 = __webpack_require__(67); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); @@ -2105,7 +2206,7 @@ UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH = 4; exports.UnicodeArrayNode = UnicodeArrayNode; /***/ }, -/* 38 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2122,10 +2223,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); +var AppendState_1 = __webpack_require__(2); var NoCustomNodesPreset_1 = __webpack_require__(16); -var SelfDefendingTemplate_1 = __webpack_require__(65); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(66); +var SelfDefendingTemplate_1 = __webpack_require__(68); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(69); var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2189,7 +2290,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, -/* 39 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2201,7 +2302,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 AbstractNodesGroup_1 = __webpack_require__(12); +var AbstractNodesGroup_1 = __webpack_require__(10); var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(30); var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { @@ -2225,7 +2326,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; /***/ }, -/* 40 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2240,7 +2341,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var DebugProtectionFunctionCallNode_1 = __webpack_require__(31); var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(32); var DebugProtectionFunctionNode_1 = __webpack_require__(33); -var AbstractNodesGroup_1 = __webpack_require__(12); +var AbstractNodesGroup_1 = __webpack_require__(10); var Utils_1 = __webpack_require__(0); var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { @@ -2269,7 +2370,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; /***/ }, -/* 41 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2281,8 +2382,44 @@ 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 AbstractNodesGroup_1 = __webpack_require__(12); -var SelfDefendingUnicodeNode_1 = __webpack_require__(34); +var AbstractNodesGroup_1 = __webpack_require__(10); +var DomainLockNode_1 = __webpack_require__(34); + +var DomainLockNodesGroup = function (_AbstractNodesGroup_) { + _inherits(DomainLockNodesGroup, _AbstractNodesGroup_); + + function DomainLockNodesGroup(options) { + _classCallCheck(this, DomainLockNodesGroup); + + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DomainLockNodesGroup).call(this, options)); + + if (!_this.options.domainLock.length) { + return _possibleConstructorReturn(_this); + } + _this.nodes.set('DomainLockNode', new DomainLockNode_1.DomainLockNode(_this.options)); + return _this; + } + + return DomainLockNodesGroup; +}(AbstractNodesGroup_1.AbstractNodesGroup); + +exports.DomainLockNodesGroup = DomainLockNodesGroup; + +/***/ }, +/* 43 */ +/***/ 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 AbstractNodesGroup_1 = __webpack_require__(10); +var SelfDefendingUnicodeNode_1 = __webpack_require__(35); var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { _inherits(SelfDefendingNodesGroup, _AbstractNodesGroup_); @@ -2305,7 +2442,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; /***/ }, -/* 42 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2317,12 +2454,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 AbstractNodesGroup_1 = __webpack_require__(12); +var AbstractNodesGroup_1 = __webpack_require__(10); var UnicodeArray_1 = __webpack_require__(27); -var UnicodeArrayCallsWrapper_1 = __webpack_require__(35); -var UnicodeArrayDecodeNode_1 = __webpack_require__(36); -var UnicodeArrayNode_1 = __webpack_require__(37); -var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(38); +var UnicodeArrayCallsWrapper_1 = __webpack_require__(36); +var UnicodeArrayDecodeNode_1 = __webpack_require__(37); +var UnicodeArrayNode_1 = __webpack_require__(38); +var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(39); var Utils_1 = __webpack_require__(0); var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { @@ -2367,7 +2504,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; /***/ }, -/* 43 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2385,7 +2522,7 @@ var estraverse = __webpack_require__(6); var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(2); +var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { @@ -2438,7 +2575,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 44 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2456,7 +2593,7 @@ var estraverse = __webpack_require__(6); var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(2); +var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { @@ -2513,7 +2650,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 45 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2531,7 +2668,7 @@ var estraverse = __webpack_require__(6); var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(2); +var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); var FunctionObfuscator = function (_AbstractNodeObfuscat) { @@ -2590,7 +2727,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 46 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2606,10 +2743,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 escodegen = __webpack_require__(10); +var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var BooleanLiteralReplacer_1 = __webpack_require__(51); -var Nodes_1 = __webpack_require__(2); +var BooleanLiteralReplacer_1 = __webpack_require__(53); +var Nodes_1 = __webpack_require__(3); var NumberLiteralReplacer_1 = __webpack_require__(20); var StringLiteralReplacer_1 = __webpack_require__(15); @@ -2658,7 +2795,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 47 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2672,11 +2809,11 @@ 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__(10); +var escodegen = __webpack_require__(11); var estraverse = __webpack_require__(6); var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var Nodes_1 = __webpack_require__(2); +var Nodes_1 = __webpack_require__(3); var StringLiteralReplacer_1 = __webpack_require__(15); var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { @@ -2743,7 +2880,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 48 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2759,7 +2896,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var estraverse = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var Nodes_1 = __webpack_require__(2); +var Nodes_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); var StringLiteralReplacer_1 = __webpack_require__(15); @@ -2810,7 +2947,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 49 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2824,11 +2961,11 @@ 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__(10); +var escodegen = __webpack_require__(11); var estraverse = __webpack_require__(6); var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var Nodes_1 = __webpack_require__(2); +var Nodes_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { @@ -2893,7 +3030,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 50 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2911,7 +3048,7 @@ var estraverse = __webpack_require__(6); var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(2); +var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { @@ -2983,7 +3120,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 51 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3022,7 +3159,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 52 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3043,10 +3180,10 @@ 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__(68); +var class_validator_1 = __webpack_require__(71); var DefaultPreset_1 = __webpack_require__(21); -var OptionsNormalizer_1 = __webpack_require__(53); -var ValidationErrorsFormatter_1 = __webpack_require__(54); +var OptionsNormalizer_1 = __webpack_require__(55); +var ValidationErrorsFormatter_1 = __webpack_require__(56); var Options = function Options(obfuscatorOptions) { _classCallCheck(this, Options); @@ -3068,6 +3205,9 @@ __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "debugProtection", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "debugProtectionInterval", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "disableConsoleOutput", void 0); +__decorate([class_validator_1.IsString({ + each: true +}), __metadata('design:type', Array)], Options.prototype, "domainLock", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "encodeUnicodeLiterals", void 0); __decorate([class_validator_1.IsString({ each: true @@ -3082,7 +3222,7 @@ __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], exports.Options = Options; /***/ }, -/* 53 */ +/* 55 */ /***/ function(module, exports) { "use strict"; @@ -3184,7 +3324,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.unicodeArrayRule, Options exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 54 */ +/* 56 */ /***/ function(module, exports) { "use strict"; @@ -3251,7 +3391,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 55 */ +/* 57 */ /***/ function(module, exports) { "use strict"; @@ -3263,7 +3403,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 56 */ +/* 58 */ /***/ function(module, exports) { "use strict"; @@ -3275,7 +3415,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 57 */ +/* 59 */ /***/ function(module, exports) { "use strict"; @@ -3287,7 +3427,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 58 */ +/* 60 */ /***/ function(module, exports) { "use strict"; @@ -3299,7 +3439,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 59 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3312,7 +3452,19 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 60 */ +/* 62 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function DomainLockNodeTemplate() { + return "\n (function () {\n var domains = {domains}.replace(/[{diff}]/g, \"\").split(\";\");\n var eval = [][\"forEach\"][\"constructor\"];\n var window = eval(\"return this\")();\n \n for (var d in window) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n break;\n }\n }\n \n for (var d1 in window[d]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n break;\n }\n }\n \n var currentDomain = window[d][d1];\n \n if (!currentDomain) {\n return;\n }\n \n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n eval('throw new Error()')();\n }\n })();\n "; +} +exports.DomainLockNodeTemplate = DomainLockNodeTemplate; + +/***/ }, +/* 63 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3325,7 +3477,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 61 */ +/* 64 */ /***/ function(module, exports) { "use strict"; @@ -3337,7 +3489,7 @@ function UnicodeArrayCallsWrapperTemplate() { exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 62 */ +/* 65 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3350,7 +3502,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 63 */ +/* 66 */ /***/ function(module, exports) { "use strict"; @@ -3362,7 +3514,7 @@ function UnicodeArrayDecodeTemplate() { exports.UnicodeArrayDecodeTemplate = UnicodeArrayDecodeTemplate; /***/ }, -/* 64 */ +/* 67 */ /***/ function(module, exports) { "use strict"; @@ -3374,7 +3526,7 @@ function UnicodeArrayTemplate() { exports.UnicodeArrayTemplate = UnicodeArrayTemplate; /***/ }, -/* 65 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3387,7 +3539,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 66 */ +/* 69 */ /***/ function(module, exports) { "use strict"; @@ -3399,37 +3551,37 @@ function UnicodeArrayRotateFunctionTemplate() { exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; /***/ }, -/* 67 */ +/* 70 */ /***/ function(module, exports) { module.exports = require("chance"); /***/ }, -/* 68 */ +/* 71 */ /***/ function(module, exports) { module.exports = require("class-validator"); /***/ }, -/* 69 */ +/* 72 */ /***/ function(module, exports) { module.exports = require("commander"); /***/ }, -/* 70 */ +/* 73 */ /***/ function(module, exports) { module.exports = require("fs"); /***/ }, -/* 71 */ +/* 74 */ /***/ function(module, exports) { module.exports = require("mkdirp"); /***/ }, -/* 72 */ +/* 75 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index e30b2796..a5565941 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -13,6 +13,7 @@ import { NodeType } from './enums/NodeType'; import { CatchClauseObfuscator } from './node-obfuscators/CatchClauseObfuscator'; import { ConsoleOutputNodesGroup } from "./node-groups/ConsoleOutputNodesGroup"; import { DebugProtectionNodesGroup } from './node-groups/DebugProtectionNodesGroup'; +import { DomainLockNodesGroup } from './node-groups/DomainLockNodesGroup'; import { FunctionDeclarationObfuscator } from './node-obfuscators/FunctionDeclarationObfuscator'; import { FunctionObfuscator } from './node-obfuscators/FunctionObfuscator'; import { LiteralObfuscator } from './node-obfuscators/LiteralObfuscator'; @@ -65,7 +66,8 @@ export class Obfuscator implements IObfuscator { ...new SelfDefendingNodesGroup(this.options).getNodes(), ...new ConsoleOutputNodesGroup(this.options).getNodes(), ...new DebugProtectionNodesGroup(this.options).getNodes(), - ...new UnicodeArrayNodesGroup(this.options).getNodes() + ...new UnicodeArrayNodesGroup(this.options).getNodes(), + ...new DomainLockNodesGroup(this.options).getNodes() ]); } diff --git a/src/Utils.ts b/src/Utils.ts index 5dbaaeb9..1a55555a 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -88,6 +88,46 @@ export class Utils { ).substr(0, length)}`; } + /** + * @param length + * @param charSet + * @returns string + */ + public static hideString(str: string, length: number): [string, string] { + + // from http://stackoverflow.com/a/3561711 + const escapeRegExp = (s: string) => + s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + + const randomMerge = function (s1: string, s2: string): string { + let i1 = -1, i2 = -1, result = ''; + while (i1 < s1.length || i2 < s2.length) { + if (Math.random() < 0.5 && i2 < s2.length) { + result += s2.charAt(++i2); + } else { + result += s1.charAt(++i1); + } + } + return result; + } + + // here we need a custom pool parameter because the default on from Change.string + // can return chars that break the RegExp + const customPool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + let randomString = Utils.randomGenerator.string({length: length, pool: customPool}); + + let randomStringDiff = randomString.replace( + new RegExp('[' + escapeRegExp(str) + ']', 'g'), + ''); + + let randomStringDiffArray = randomStringDiff.split(''); + Utils.randomGenerator.shuffle(randomStringDiffArray); + randomStringDiff = randomStringDiffArray.join(''); + + return [randomMerge(str, randomStringDiff), randomStringDiff]; + + } + /** * @param number * @returns {boolean} @@ -134,9 +174,9 @@ export class Utils { template = '0'.repeat(2); } else { prefix = '\\u'; - template = '0'.repeat(4); + template = '0'.repeat(4); } - + return `${prefix}${(template + escape.charCodeAt(0).toString(radix)).slice(-template.length)}`; })}'`; } diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index 47fe95e3..9f550da6 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -140,6 +140,7 @@ export class JavaScriptObfuscatorCLI { .option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean) .option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat) .option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean) + .option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', (val: string) => val.split(',')) .parse(this.rawArguments); this.commands.on('--help', () => { diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts new file mode 100644 index 00000000..20a5e613 --- /dev/null +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -0,0 +1,42 @@ +// import { Utils } from "../../Utils"; + +import { INode } from "../../interfaces/nodes/INode"; + +import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; + +import { AppendState } from "../../enums/AppendState"; + +import { DomainLockNodeTemplate } from "../../templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate"; + +import { AbstractCustomNode } from "../AbstractCustomNode"; +import { NodeUtils } from "../../NodeUtils"; +import { Utils } from "../../Utils"; + +export class DomainLockNode extends AbstractCustomNode { + /** + * @type {AppendState} + */ + protected appendState: AppendState = AppendState.BeforeObfuscation; + + /** + * @param blockScopeNode + */ + public appendNode (blockScopeNode: TNodeWithBlockStatement): void { + NodeUtils.prependNode(blockScopeNode.body, this.getNode()); + } + + /** + * @returns {INode} + */ + protected getNodeStructure (): INode { + let domainsString = this.options.domainLock.join(';'), + [hiddenDomainsString, diff] = Utils.hideString(domainsString, domainsString.length * 3); + + return NodeUtils.convertCodeToStructure( + DomainLockNodeTemplate().formatUnicorn({ + domains: Utils.stringToUnicode(hiddenDomainsString), + diff: diff + }) + ); + } +} diff --git a/src/interfaces/IObfuscatorOptions.d.ts b/src/interfaces/IObfuscatorOptions.d.ts index b4cb8808..a6671830 100644 --- a/src/interfaces/IObfuscatorOptions.d.ts +++ b/src/interfaces/IObfuscatorOptions.d.ts @@ -14,5 +14,6 @@ export interface IObfuscatorOptions { unicodeArray?: boolean; unicodeArrayThreshold?: number; wrapUnicodeArrayCalls?: boolean; + domainLock?: string[]; [key: string]: any; } diff --git a/src/interfaces/IOptions.d.ts b/src/interfaces/IOptions.d.ts index 687ffcf1..7e078265 100644 --- a/src/interfaces/IOptions.d.ts +++ b/src/interfaces/IOptions.d.ts @@ -14,4 +14,5 @@ export interface IOptions { readonly unicodeArray: boolean; readonly unicodeArrayThreshold: number; readonly wrapUnicodeArrayCalls: boolean; + readonly domainLock: string[]; } diff --git a/src/node-groups/DomainLockNodesGroup.ts b/src/node-groups/DomainLockNodesGroup.ts new file mode 100644 index 00000000..dd8c4c0d --- /dev/null +++ b/src/node-groups/DomainLockNodesGroup.ts @@ -0,0 +1,22 @@ +import { IOptions } from "../interfaces/IOptions"; + +import { AbstractNodesGroup } from "./AbstractNodesGroup"; +import { DomainLockNode } from "../custom-nodes/domain-lock-nodes/DomainLockNode"; + +export class DomainLockNodesGroup extends AbstractNodesGroup { + /** + * @param options + */ + constructor (options: IOptions) { + super(options); + + if (!this.options.domainLock.length) { + return; + } + + this.nodes.set( + 'DomainLockNode', + new DomainLockNode(this.options) + ); + } +} diff --git a/src/options/Options.ts b/src/options/Options.ts index 36110219..cc7133f3 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -44,6 +44,14 @@ export class Options implements IOptions { @IsBoolean() public readonly disableConsoleOutput: boolean; + /** + * @type {string[]} + */ + @IsString({ + each: true + }) + public readonly domainLock: string[]; + /** * @type {boolean} */ diff --git a/src/preset-options/DefaultPreset.ts b/src/preset-options/DefaultPreset.ts index 1e91a707..dde82d4a 100644 --- a/src/preset-options/DefaultPreset.ts +++ b/src/preset-options/DefaultPreset.ts @@ -7,6 +7,7 @@ export const DEFAULT_PRESET: IObfuscatorOptions = Object.freeze({ debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: true, + domainLock: [], encodeUnicodeLiterals: false, reservedNames: [], rotateUnicodeArray: true, diff --git a/src/preset-options/NoCustomNodesPreset.ts b/src/preset-options/NoCustomNodesPreset.ts index 2765a04f..2232c1a3 100644 --- a/src/preset-options/NoCustomNodesPreset.ts +++ b/src/preset-options/NoCustomNodesPreset.ts @@ -7,6 +7,7 @@ export const NO_CUSTOM_NODES_PRESET: IObfuscatorOptions = Object.freeze({ debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: false, + domainLock: [], encodeUnicodeLiterals: false, reservedNames: [], rotateUnicodeArray: false, diff --git a/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts b/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts new file mode 100644 index 00000000..ef076d41 --- /dev/null +++ b/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts @@ -0,0 +1,51 @@ +/** + * @returns {string} + */ +export function DomainLockNodeTemplate (): string { + return ` + (function () { + var domains = {domains}.replace(/[{diff}]/g, "").split(";"); + var eval = []["forEach"]["constructor"]; + var window = eval("return this")(); + + for (var d in window) { + if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) { + break; + } + } + + for (var d1 in window[d]) { + if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) { + break; + } + } + + var currentDomain = window[d][d1]; + + if (!currentDomain) { + return; + } + + var ok = false; + + for (var i = 0; i < domains.length; i++) { + var domain = domains[i]; + var position = currentDomain.length - domain.length; + var lastIndex = currentDomain.indexOf(domain, position); + var endsWith = lastIndex !== -1 && lastIndex === position; + + if (endsWith) { + if (currentDomain.length == domain.length || domain.indexOf(".") === 0) { + ok = true; + } + + break; + } + } + + if (!ok) { + eval('throw new Error()')(); + } + })(); + `; +} diff --git a/test/dev/test.ts b/test/dev/test.ts index d5aedbb5..8dff35d0 100644 --- a/test/dev/test.ts +++ b/test/dev/test.ts @@ -64,6 +64,7 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( `, { disableConsoleOutput: false, + domainLock: ['.google.ru'], encodeUnicodeLiterals: true } ).getObfuscatedCode(); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts index 762f6e9c..6955adb4 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts @@ -13,7 +13,7 @@ describe('UnicodeArrayCallsWrapper', () => { } ); - assert.match(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){6}, *0x010\)\];/); + assert.match(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){5,6}, *0x010\)\];/); }); it('should\'t append `UnicodeArrayDecodeNode` custom node into the obfuscated code if `wrapUnicodeArrayCalls` option is not set', () => { @@ -24,6 +24,6 @@ describe('UnicodeArrayCallsWrapper', () => { } ); - assert.notMatch(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){6}, *0x010\)\];/); + assert.notMatch(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){5,6}, *0x010\)\];/); }); }); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts index 3bfe2f82..33a793e5 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts @@ -13,7 +13,7 @@ describe('UnicodeArrayDecodeNode', () => { } ); - assert.match(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){6}\]\)\)/); + assert.match(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){5,6}\]\)\)/); }); it('should\'t append `UnicodeArrayDecodeNode` custom node into the obfuscated code if `encodeUnicodeLiterals` option is not set', () => { @@ -24,6 +24,6 @@ describe('UnicodeArrayDecodeNode', () => { } ); - assert.notMatch(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){6}\]\)\)/); + assert.notMatch(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){5,6}\]\)\)/); }); }); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts index 0e0a94aa..45074153 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts @@ -13,7 +13,7 @@ describe('UnicodeArrayRotateFunctionNode', () => { } ); - assert.match(obfuscationResult.getObfuscatedCode(), /while *\(-- *_0x([a-z0-9]){6}\) *\{/); + assert.match(obfuscationResult.getObfuscatedCode(), /while *\(-- *_0x([a-z0-9]){5,6}\) *\{/); }); it('should\'t append `UnicodeArrayRotateFunctionNode` custom node into the obfuscated code if `rotateUnicodeArray` option is not set', () => { @@ -24,6 +24,6 @@ describe('UnicodeArrayRotateFunctionNode', () => { } ); - assert.notMatch(obfuscationResult.getObfuscatedCode(), /while *\(-- *_0x([a-z0-9]){6}\) *\{/); + assert.notMatch(obfuscationResult.getObfuscatedCode(), /while *\(-- *_0x([a-z0-9]){5,6}\) *\{/); }); }); diff --git a/test/unit-tests/Utils.spec.ts b/test/unit-tests/Utils.spec.ts index 1b95e05a..5d59bf71 100644 --- a/test/unit-tests/Utils.spec.ts +++ b/test/unit-tests/Utils.spec.ts @@ -80,4 +80,15 @@ describe('Utils', () => { assert.equal(Utils.stringToUnicode('string'), expected); }); }); + + describe('hideString (str: string, length: number): [string, string]', () => { + let original1: string = 'example.com', + [str1, diff] = Utils.hideString(original1, 30); + + it('should return a string with the original string within', () => { + assert.isTrue(str1.length > original1.length); + assert.equal(str1.replace(new RegExp('[' + diff + ']', 'g'), ''), original1); + }); + + }); }); From 2a4a9f83276a0f9da158c2de78316e41b36b4142 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 1 Sep 2016 19:37:26 +0300 Subject: [PATCH 018/138] DomainLock feature WIP --- dist/index.js | 12 +++++------- src/Obfuscator.ts | 4 ++-- src/custom-nodes/domain-lock-nodes/DomainLockNode.ts | 8 ++++---- src/node-obfuscators/LiteralObfuscator.ts | 4 ---- .../domain-lock-node/DomainLockNodeTemplate.ts | 3 ++- test/dev/test.ts | 1 - 6 files changed, 13 insertions(+), 19 deletions(-) diff --git a/dist/index.js b/dist/index.js index 0a3afc11..e5433643 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1194,7 +1194,7 @@ var Obfuscator = function () { this.nodeObfuscators = new Map([[NodeType_1.NodeType.ArrowFunctionExpression, [FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.ClassDeclaration, [FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator]], [NodeType_1.NodeType.CatchClause, [CatchClauseObfuscator_1.CatchClauseObfuscator]], [NodeType_1.NodeType.FunctionDeclaration, [FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator, FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.FunctionExpression, [FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.MemberExpression, [MemberExpressionObfuscator_1.MemberExpressionObfuscator]], [NodeType_1.NodeType.MethodDefinition, [MethodDefinitionObfuscator_1.MethodDefinitionObfuscator]], [NodeType_1.NodeType.ObjectExpression, [ObjectExpressionObfuscator_1.ObjectExpressionObfuscator]], [NodeType_1.NodeType.VariableDeclaration, [VariableDeclarationObfuscator_1.VariableDeclarationObfuscator]], [NodeType_1.NodeType.Literal, [LiteralObfuscator_1.LiteralObfuscator]]]); this.options = options; - this.nodes = new Map([].concat(_toConsumableArray(new SelfDefendingNodesGroup_1.SelfDefendingNodesGroup(this.options).getNodes()), _toConsumableArray(new ConsoleOutputNodesGroup_1.ConsoleOutputNodesGroup(this.options).getNodes()), _toConsumableArray(new DebugProtectionNodesGroup_1.DebugProtectionNodesGroup(this.options).getNodes()), _toConsumableArray(new UnicodeArrayNodesGroup_1.UnicodeArrayNodesGroup(this.options).getNodes()), _toConsumableArray(new DomainLockNodesGroup_1.DomainLockNodesGroup(this.options).getNodes()))); + this.nodes = new Map([].concat(_toConsumableArray(new DomainLockNodesGroup_1.DomainLockNodesGroup(this.options).getNodes()), _toConsumableArray(new SelfDefendingNodesGroup_1.SelfDefendingNodesGroup(this.options).getNodes()), _toConsumableArray(new ConsoleOutputNodesGroup_1.ConsoleOutputNodesGroup(this.options).getNodes()), _toConsumableArray(new DebugProtectionNodesGroup_1.DebugProtectionNodesGroup(this.options).getNodes()), _toConsumableArray(new UnicodeArrayNodesGroup_1.UnicodeArrayNodesGroup(this.options).getNodes()))); } _createClass(Obfuscator, [{ @@ -1846,6 +1846,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; } +__webpack_require__(8); var AppendState_1 = __webpack_require__(2); var DomainLockNodeTemplate_1 = __webpack_require__(62); var AbstractCustomNode_1 = __webpack_require__(4); @@ -1887,8 +1888,8 @@ var DomainLockNode = function (_AbstractCustomNode_) { var diff = _Utils_1$Utils$hideSt2[1]; return NodeUtils_1.NodeUtils.convertCodeToStructure(DomainLockNodeTemplate_1.DomainLockNodeTemplate().formatUnicorn({ - domains: Utils_1.Utils.stringToUnicode(hiddenDomainsString), - diff: diff + diff: diff, + domains: hiddenDomainsString })); } }]); @@ -2765,9 +2766,6 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { if (Nodes_1.Nodes.isPropertyNode(parentNode) && parentNode.key === literalNode) { return; } - if (literalNode['x-verbatim-property']) { - return; - } var content = void 0; switch (_typeof(literalNode.value)) { case 'boolean': @@ -3459,7 +3457,7 @@ exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; "use strict"; function DomainLockNodeTemplate() { - return "\n (function () {\n var domains = {domains}.replace(/[{diff}]/g, \"\").split(\";\");\n var eval = [][\"forEach\"][\"constructor\"];\n var window = eval(\"return this\")();\n \n for (var d in window) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n break;\n }\n }\n \n for (var d1 in window[d]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n break;\n }\n }\n \n var currentDomain = window[d][d1];\n \n if (!currentDomain) {\n return;\n }\n \n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n eval('throw new Error()')();\n }\n })();\n "; + return "\n (function () {\n var regExp = new RegExp(\"[{diff}]\", \"g\");\n var domains = \"{domains}\".replace(regExp, \"\").split(\";\");\n var eval = [][\"forEach\"][\"constructor\"];\n var window = eval(\"return this\")();\n \n for (var d in window) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n break;\n }\n }\n \n for (var d1 in window[d]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n break;\n }\n }\n \n var currentDomain = window[d][d1];\n \n if (!currentDomain) {\n return;\n }\n \n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n eval('throw new Error()')();\n }\n })();\n "; } exports.DomainLockNodeTemplate = DomainLockNodeTemplate; diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index a5565941..de9c5157 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -63,11 +63,11 @@ export class Obfuscator implements IObfuscator { this.options = options; this.nodes = new Map ([ + ...new DomainLockNodesGroup(this.options).getNodes(), ...new SelfDefendingNodesGroup(this.options).getNodes(), ...new ConsoleOutputNodesGroup(this.options).getNodes(), ...new DebugProtectionNodesGroup(this.options).getNodes(), - ...new UnicodeArrayNodesGroup(this.options).getNodes(), - ...new DomainLockNodesGroup(this.options).getNodes() + ...new UnicodeArrayNodesGroup(this.options).getNodes() ]); } diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts index 20a5e613..61fe96ca 100644 --- a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -1,4 +1,4 @@ -// import { Utils } from "../../Utils"; +import 'format-unicorn'; import { INode } from "../../interfaces/nodes/INode"; @@ -30,12 +30,12 @@ export class DomainLockNode extends AbstractCustomNode { */ protected getNodeStructure (): INode { let domainsString = this.options.domainLock.join(';'), - [hiddenDomainsString, diff] = Utils.hideString(domainsString, domainsString.length * 3); + [hiddenDomainsString, diff] = Utils.hideString(domainsString, domainsString.length * 3); return NodeUtils.convertCodeToStructure( DomainLockNodeTemplate().formatUnicorn({ - domains: Utils.stringToUnicode(hiddenDomainsString), - diff: diff + diff: diff, + domains: hiddenDomainsString }) ); } diff --git a/src/node-obfuscators/LiteralObfuscator.ts b/src/node-obfuscators/LiteralObfuscator.ts index 138ef9a5..5efdd15f 100644 --- a/src/node-obfuscators/LiteralObfuscator.ts +++ b/src/node-obfuscators/LiteralObfuscator.ts @@ -19,10 +19,6 @@ export class LiteralObfuscator extends AbstractNodeObfuscator { return; } - if (literalNode['x-verbatim-property']) { - return; - } - let content: string; switch (typeof literalNode.value) { diff --git a/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts b/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts index ef076d41..bfefde85 100644 --- a/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts +++ b/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts @@ -4,7 +4,8 @@ export function DomainLockNodeTemplate (): string { return ` (function () { - var domains = {domains}.replace(/[{diff}]/g, "").split(";"); + var regExp = new RegExp("[{diff}]", "g"); + var domains = "{domains}".replace(regExp, "").split(";"); var eval = []["forEach"]["constructor"]; var window = eval("return this")(); diff --git a/test/dev/test.ts b/test/dev/test.ts index 8dff35d0..d5aedbb5 100644 --- a/test/dev/test.ts +++ b/test/dev/test.ts @@ -64,7 +64,6 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( `, { disableConsoleOutput: false, - domainLock: ['.google.ru'], encodeUnicodeLiterals: true } ).getObfuscatedCode(); From ad6706154422ebea3fc5df7d63dd33e020e9bc78 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 1 Sep 2016 20:35:54 +0300 Subject: [PATCH 019/138] DomainLock feature WIP --- ...ConsoleOutputDisableExpressionNode.spec.ts | 4 +-- .../domain-lock-nodes/DomainLockNode.spec.ts | 29 +++++++++++++++++++ test/index.spec.ts | 1 + 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts diff --git a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts index 2b33ec53..5d0b997a 100644 --- a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts +++ b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts @@ -13,7 +13,7 @@ describe('ConsoleOutputDisableExpressionNode', () => { } ); - assert.match(obfuscationResult.getObfuscatedCode(), /_\u0003\.log\u0001\.in/); + assert.match(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){5,6} in _0x([a-z0-9]){5,6} *= *_0x([a-z0-9]){4}\('0xc'\)\)/); }); it('should\'t append `ConsoleOutputDisableExpressionNode` custom node into the obfuscated code if `disableConsoleOutput` option is not set', () => { @@ -24,6 +24,6 @@ describe('ConsoleOutputDisableExpressionNode', () => { } ); - assert.notMatch(obfuscationResult.getObfuscatedCode(), /_\u0003\.log\u0001\.in/); + assert.notMatch(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){5,6} in _0x([a-z0-9]){5,6} *= *_0x([a-z0-9]){4}\('0xc'\)\)/); }); }); diff --git a/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts b/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts new file mode 100644 index 00000000..9a272eb2 --- /dev/null +++ b/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts @@ -0,0 +1,29 @@ +import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; + +import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; + +const assert: Chai.AssertStatic = require('chai').assert; + +describe('DomainLockNode', () => { + it('should correctly append `DomainLockNode` custom node into the obfuscated code if `domainLock` option is set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + domainLock: ['.example.com'] + } + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){5,6} *= *new RegExp/); + }); + + it('should\'t append `DomainLockNode` custom node into the obfuscated code if `domainLock` option is not set', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + { + domainLock: [] + } + ); + + assert.notMatch(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){5,6} *= *new RegExp/); + }); +}); diff --git a/test/index.spec.ts b/test/index.spec.ts index f93348ac..4bf2d57a 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -24,6 +24,7 @@ import './functional-tests/JavaScriptObfuscator.spec'; import './functional-tests/JavaScriptObfuscatorCLI.spec'; import './functional-tests/JavaScriptObfuscatorInternal.spec'; import './functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec'; +import './functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec'; import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec'; import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec'; import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec'; From 060bd432c38de31a273c0061d279f66877b068ac Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 1 Sep 2016 20:40:36 +0300 Subject: [PATCH 020/138] DomainLock feature WIP fix test --- .../ConsoleOutputDisableExpressionNode.spec.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts index 5d0b997a..34c0795f 100644 --- a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts +++ b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts @@ -9,21 +9,23 @@ describe('ConsoleOutputDisableExpressionNode', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { - disableConsoleOutput: true + disableConsoleOutput: true, + unicodeArrayThreshold: 1 } ); - assert.match(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){5,6} in _0x([a-z0-9]){5,6} *= *_0x([a-z0-9]){4}\('0xc'\)\)/); + assert.match(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){5,6} in _0x([a-z0-9]){5,6} *= *_0x([a-z0-9]){4}\('0x.*'\)\)/); }); it('should\'t append `ConsoleOutputDisableExpressionNode` custom node into the obfuscated code if `disableConsoleOutput` option is not set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { - disableConsoleOutput: false + disableConsoleOutput: false, + unicodeArrayThreshold: 1 } ); - assert.notMatch(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){5,6} in _0x([a-z0-9]){5,6} *= *_0x([a-z0-9]){4}\('0xc'\)\)/); + assert.notMatch(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){5,6} in _0x([a-z0-9]){5,6} *= *_0x([a-z0-9]){4}\('0x.*'\)\)/); }); }); From 136fd705ee4a40c32fa05b919a0326d1f1a8439f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 1 Sep 2016 22:43:02 +0300 Subject: [PATCH 021/138] IE Fix --- CHANGELOG.md | 4 ++++ src/enums/JSFuck.ts | 18 +++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a977709..9fee049b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ Change Log === +v0.7.1 +--- +* IE error fix [#14](https://github.com/sanex3339/javascript-obfuscator/issues/14) + v0.7.0-dev.3 --- * Obfuscator now returns an empty string instead of obfuscated code if source code is empty diff --git a/src/enums/JSFuck.ts b/src/enums/JSFuck.ts index 4a0f52d7..f211463f 100644 --- a/src/enums/JSFuck.ts +++ b/src/enums/JSFuck.ts @@ -11,25 +11,25 @@ export const JSFuck: any = { e: '(true+"")[3]', f: '(false+"")[0]', g: '(false+[0]+String)[20]', - h: '(+(101))["to"+String["name"]](21)[1]', + h: '(+(101))["toString"](21)[1]', i: '([false]+undefined)[10]', j: '([]["entries"]()+"")[3]', - k: '(+(20))["to"+String["name"]](21)', + k: '(+(20))["toString"](21)', l: '(false+"")[2]', m: '(Number+"")[11]', n: '(undefined+"")[1]', o: '(true+[]["fill"])[10]', - p: '(+(211))["to"+String["name"]](31)[1]', - q: '(+(212))["to"+String["name"]](31)[1]', + p: '(+(211))["toString"](31)[1]', + q: '(+(212))["toString"](31)[1]', r: '(true+"")[1]', s: '(false+"")[3]', t: '(true+"")[0]', u: '(undefined+"")[0]', - v: '(+(31))["to"+String["name"]](32)', - w: '(+(32))["to"+String["name"]](33)', - x: '(+(101))["to"+String["name"]](34)[1]', + v: '(+(31))["toString"](32)', + w: '(+(32))["toString"](33)', + x: '(+(101))["toString"](34)[1]', y: '(NaN+[Infinity])[10]', - z: '(+(35))["to"+String["name"]](36)', + z: '(+(35))["toString"](36)', A: '(+[]+Array)[10]', B: '(+[]+Boolean)[10]', @@ -51,7 +51,7 @@ export const JSFuck: any = { R: '(+[]+RegExp)[10]', S: '(+[]+String)[10]', T: '(NaN+Function("return Date")()())[30]', - U: '(NaN+Function("return{}")()["to"+String["name"]]["call"]())[11]', + U: '(NaN+Function("return{}")()["toString"]["call"]())[11]', V: `'V'`, W: `'W'`, X: `'X'`, From 5d2220c18a50f5e059d505a1da6a14f303ef9b2f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 12 Sep 2016 19:52:48 +0300 Subject: [PATCH 022/138] Migrate to ESTree WIP BROKEN --- dist/index.js | 90 +++++++-------- package.json | 24 ++-- src/JavaScriptObfuscatorInternal.ts | 6 +- src/NodeUtils.ts | 61 +++++----- src/Nodes.ts | 45 +++----- src/Obfuscator.ts | 16 +-- src/custom-nodes/AbstractCustomNode.ts | 13 ++- .../ConsoleOutputDisableExpressionNode.ts | 6 +- .../DebugProtectionFunctionCallNode.ts | 7 +- .../DebugProtectionFunctionIntervalNode.ts | 7 +- .../DebugProtectionFunctionNode.ts | 7 +- .../domain-lock-nodes/DomainLockNode.ts | 8 +- .../SelfDefendingUnicodeNode.ts | 6 +- .../UnicodeArrayCallsWrapper.ts | 11 +- .../UnicodeArrayDecodeNode.ts | 11 +- .../unicode-array-nodes/UnicodeArrayNode.ts | 11 +- .../UnicodeArrayRotateFunctionNode.ts | 11 +- src/interfaces/INodeObfuscator.d.ts | 4 +- src/interfaces/IObfuscator.d.ts | 4 +- .../nodes/IArrowFunctionExpressionNode.d.ts | 3 - src/interfaces/nodes/IBlockStatementNode.d.ts | 7 -- src/interfaces/nodes/ICallExpressionNode.d.ts | 9 -- src/interfaces/nodes/ICatchClauseNode.d.ts | 8 -- .../nodes/IExpressionStatementNode.d.ts | 7 -- .../nodes/IFunctionDeclarationNode.d.ts | 3 - .../nodes/IFunctionExpressionNode.d.ts | 3 - src/interfaces/nodes/IFunctionNode.d.ts | 14 --- src/interfaces/nodes/IIdentifierNode.d.ts | 5 - src/interfaces/nodes/IIfStatementNode.ts | 8 -- src/interfaces/nodes/ILiteral.d.ts | 5 + src/interfaces/nodes/ILiteralNode.d.ts | 7 -- .../nodes/IMemberExpressionNode.d.ts | 9 -- .../nodes/IMethodDefinitionNode.d.ts | 12 -- src/interfaces/nodes/INode.d.ts | 7 +- .../nodes/IObjectExpressionNode.d.ts | 6 - src/interfaces/nodes/IProgramNode.d.ts | 8 -- src/interfaces/nodes/IPropertyNode.d.ts | 12 -- src/interfaces/nodes/ISpreadElementNode.d.ts | 7 -- .../nodes/IVariableDeclarationNode.d.ts | 7 -- .../nodes/IVariableDeclaratorNode.d.ts | 7 -- .../AbstractNodeObfuscator.ts | 5 +- src/node-obfuscators/CatchClauseObfuscator.ts | 14 +-- .../FunctionDeclarationObfuscator.ts | 16 ++- src/node-obfuscators/FunctionObfuscator.ts | 18 ++- src/node-obfuscators/LiteralObfuscator.ts | 6 +- .../MemberExpressionObfuscator.ts | 16 +-- .../MethodDefinitionObfuscator.ts | 10 +- .../ObjectExpressionObfuscator.ts | 19 ++-- .../VariableDeclarationObfuscator.ts | 21 ++-- src/types/TNodeWithBlockStatement.d.ts | 5 +- src/types/TOptionsNormalizerRule.d.ts | 2 +- src/types/nodes/TExpression.d.ts | 9 -- src/types/nodes/TStatement.d.ts | 7 -- test/mocks/NodeMocks.ts | 82 ++++++-------- test/unit-tests/NodeUtils.spec.ts | 104 ++++++++---------- .../CatchClauseObfuscator.spec.ts | 8 +- .../FunctionDeclarationObfuscator.spec.ts | 16 ++- .../FunctionObfuscator.spec.ts | 23 ++-- 58 files changed, 335 insertions(+), 548 deletions(-) delete mode 100644 src/interfaces/nodes/IArrowFunctionExpressionNode.d.ts delete mode 100644 src/interfaces/nodes/IBlockStatementNode.d.ts delete mode 100644 src/interfaces/nodes/ICallExpressionNode.d.ts delete mode 100644 src/interfaces/nodes/ICatchClauseNode.d.ts delete mode 100644 src/interfaces/nodes/IExpressionStatementNode.d.ts delete mode 100644 src/interfaces/nodes/IFunctionDeclarationNode.d.ts delete mode 100644 src/interfaces/nodes/IFunctionExpressionNode.d.ts delete mode 100644 src/interfaces/nodes/IFunctionNode.d.ts delete mode 100644 src/interfaces/nodes/IIdentifierNode.d.ts delete mode 100644 src/interfaces/nodes/IIfStatementNode.ts create mode 100644 src/interfaces/nodes/ILiteral.d.ts delete mode 100644 src/interfaces/nodes/ILiteralNode.d.ts delete mode 100644 src/interfaces/nodes/IMemberExpressionNode.d.ts delete mode 100644 src/interfaces/nodes/IMethodDefinitionNode.d.ts delete mode 100644 src/interfaces/nodes/IObjectExpressionNode.d.ts delete mode 100644 src/interfaces/nodes/IProgramNode.d.ts delete mode 100644 src/interfaces/nodes/IPropertyNode.d.ts delete mode 100644 src/interfaces/nodes/ISpreadElementNode.d.ts delete mode 100644 src/interfaces/nodes/IVariableDeclarationNode.d.ts delete mode 100644 src/interfaces/nodes/IVariableDeclaratorNode.d.ts delete mode 100644 src/types/nodes/TExpression.d.ts delete mode 100644 src/types/nodes/TStatement.d.ts diff --git a/dist/index.js b/dist/index.js index e5433643..cae3de23 100644 --- a/dist/index.js +++ b/dist/index.js @@ -745,7 +745,7 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { _inherits(IdentifierReplacer, _AbstractReplacer_1$A); function IdentifierReplacer() { - var _Object$getPrototypeO; + var _ref; _classCallCheck(this, IdentifierReplacer); @@ -753,7 +753,7 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(IdentifierReplacer)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_ref = IdentifierReplacer.__proto__ || Object.getPrototypeOf(IdentifierReplacer)).call.apply(_ref, [this].concat(args))); _this.namesMap = new Map(); return _this; @@ -814,7 +814,7 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { function StringLiteralReplacer() { _classCallCheck(this, StringLiteralReplacer); - return _possibleConstructorReturn(this, Object.getPrototypeOf(StringLiteralReplacer).apply(this, arguments)); + return _possibleConstructorReturn(this, (StringLiteralReplacer.__proto__ || Object.getPrototypeOf(StringLiteralReplacer)).apply(this, arguments)); } _createClass(StringLiteralReplacer, [{ @@ -1023,25 +1023,25 @@ exports.JSFuck = { e: '(true+"")[3]', f: '(false+"")[0]', g: '(false+[0]+String)[20]', - h: '(+(101))["to"+String["name"]](21)[1]', + h: '(+(101))["toString"](21)[1]', i: '([false]+undefined)[10]', j: '([]["entries"]()+"")[3]', - k: '(+(20))["to"+String["name"]](21)', + k: '(+(20))["toString"](21)', l: '(false+"")[2]', m: '(Number+"")[11]', n: '(undefined+"")[1]', o: '(true+[]["fill"])[10]', - p: '(+(211))["to"+String["name"]](31)[1]', - q: '(+(212))["to"+String["name"]](31)[1]', + p: '(+(211))["toString"](31)[1]', + q: '(+(212))["toString"](31)[1]', r: '(true+"")[1]', s: '(false+"")[3]', t: '(true+"")[0]', u: '(undefined+"")[0]', - v: '(+(31))["to"+String["name"]](32)', - w: '(+(32))["to"+String["name"]](33)', - x: '(+(101))["to"+String["name"]](34)[1]', + v: '(+(31))["toString"](32)', + w: '(+(32))["toString"](33)', + x: '(+(101))["toString"](34)[1]', y: '(NaN+[Infinity])[10]', - z: '(+(35))["to"+String["name"]](36)', + z: '(+(35))["toString"](36)', A: '(+[]+Array)[10]', B: '(+[]+Boolean)[10]', C: 'Function("return escape")()(("")["italics"]())[2]', @@ -1062,7 +1062,7 @@ exports.JSFuck = { R: '(+[]+RegExp)[10]', S: '(+[]+String)[10]', T: '(NaN+Function("return Date")()())[30]', - U: '(NaN+Function("return{}")()["to"+String["name"]]["call"]())[11]', + U: '(NaN+Function("return{}")()["toString"]["call"]())[11]', V: '\'V\'', W: '\'W\'', X: '\'X\'', @@ -1094,7 +1094,7 @@ var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { function NumberLiteralReplacer() { _classCallCheck(this, NumberLiteralReplacer); - return _possibleConstructorReturn(this, Object.getPrototypeOf(NumberLiteralReplacer).apply(this, arguments)); + return _possibleConstructorReturn(this, (NumberLiteralReplacer.__proto__ || Object.getPrototypeOf(NumberLiteralReplacer)).apply(this, arguments)); } _createClass(NumberLiteralReplacer, [{ @@ -1628,7 +1628,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { _inherits(ConsoleOutputDisableExpressionNode, _AbstractCustomNode_); function ConsoleOutputDisableExpressionNode() { - var _Object$getPrototypeO; + var _ref; _classCallCheck(this, ConsoleOutputDisableExpressionNode); @@ -1636,7 +1636,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(ConsoleOutputDisableExpressionNode)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_ref = ConsoleOutputDisableExpressionNode.__proto__ || Object.getPrototypeOf(ConsoleOutputDisableExpressionNode)).call.apply(_ref, [this].concat(args))); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; return _this; @@ -1686,7 +1686,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { function DebugProtectionFunctionCallNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionCallNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionFunctionCallNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (DebugProtectionFunctionCallNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionCallNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; _this.debugProtectionFunctionName = debugProtectionFunctionName; @@ -1739,7 +1739,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { function DebugProtectionFunctionIntervalNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionIntervalNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionFunctionIntervalNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (DebugProtectionFunctionIntervalNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionIntervalNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; _this.debugProtectionFunctionName = debugProtectionFunctionName; @@ -1793,7 +1793,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { function DebugProtectionFunctionNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionFunctionNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (DebugProtectionFunctionNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; _this.debugProtectionFunctionName = debugProtectionFunctionName; @@ -1857,7 +1857,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { _inherits(DomainLockNode, _AbstractCustomNode_); function DomainLockNode() { - var _Object$getPrototypeO; + var _ref; _classCallCheck(this, DomainLockNode); @@ -1865,7 +1865,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(DomainLockNode)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_ref = DomainLockNode.__proto__ || Object.getPrototypeOf(DomainLockNode)).call.apply(_ref, [this].concat(args))); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; return _this; @@ -1926,7 +1926,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); function SelfDefendingUnicodeNode() { - var _Object$getPrototypeO; + var _ref; _classCallCheck(this, SelfDefendingUnicodeNode); @@ -1934,7 +1934,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(SelfDefendingUnicodeNode)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_ref = SelfDefendingUnicodeNode.__proto__ || Object.getPrototypeOf(SelfDefendingUnicodeNode)).call.apply(_ref, [this].concat(args))); _this.appendState = AppendState_1.AppendState.AfterObfuscation; return _this; @@ -1995,7 +1995,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { function UnicodeArrayCallsWrapper(unicodeArrayCallsWrapperName, unicodeArrayName, unicodeArray, options) { _classCallCheck(this, UnicodeArrayCallsWrapper); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayCallsWrapper).call(this, options)); + var _this = _possibleConstructorReturn(this, (UnicodeArrayCallsWrapper.__proto__ || Object.getPrototypeOf(UnicodeArrayCallsWrapper)).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArrayCallsWrapperName = unicodeArrayCallsWrapperName; @@ -2020,7 +2020,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { }, { key: "getNode", value: function getNode() { - return _get(Object.getPrototypeOf(UnicodeArrayCallsWrapper.prototype), "getNode", this).call(this); + return _get(UnicodeArrayCallsWrapper.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayCallsWrapper.prototype), "getNode", this).call(this); } }, { key: "getNodeStructure", @@ -2072,7 +2072,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { function UnicodeArrayDecodeNode(unicodeArrayName, unicodeArray, options) { _classCallCheck(this, UnicodeArrayDecodeNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayDecodeNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (UnicodeArrayDecodeNode.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArrayName = unicodeArrayName; @@ -2091,7 +2091,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { }, { key: "getNode", value: function getNode() { - return _get(Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), "getNode", this).call(this); + return _get(UnicodeArrayDecodeNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), "getNode", this).call(this); } }, { key: "getNodeStructure", @@ -2152,7 +2152,7 @@ var UnicodeArrayNode = function (_AbstractCustomNode_) { _classCallCheck(this, UnicodeArrayNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (UnicodeArrayNode.__proto__ || Object.getPrototypeOf(UnicodeArrayNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArray = unicodeArray; @@ -2183,7 +2183,7 @@ var UnicodeArrayNode = function (_AbstractCustomNode_) { key: 'getNode', value: function getNode() { this.unicodeArray.rotateArray(this.unicodeArrayRotateValue); - return _get(Object.getPrototypeOf(UnicodeArrayNode.prototype), 'getNode', this).call(this); + return _get(UnicodeArrayNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayNode.prototype), 'getNode', this).call(this); } }, { key: 'updateNodeData', @@ -2239,7 +2239,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { function UnicodeArrayRotateFunctionNode(unicodeArrayName, unicodeArray, unicodeArrayRotateValue, options) { _classCallCheck(this, UnicodeArrayRotateFunctionNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayRotateFunctionNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (UnicodeArrayRotateFunctionNode.__proto__ || Object.getPrototypeOf(UnicodeArrayRotateFunctionNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArrayName = unicodeArrayName; @@ -2259,7 +2259,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { }, { key: "getNode", value: function getNode() { - return _get(Object.getPrototypeOf(UnicodeArrayRotateFunctionNode.prototype), "getNode", this).call(this); + return _get(UnicodeArrayRotateFunctionNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayRotateFunctionNode.prototype), "getNode", this).call(this); } }, { key: "getNodeStructure", @@ -2312,7 +2312,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { function ConsoleOutputNodesGroup(options) { _classCallCheck(this, ConsoleOutputNodesGroup); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ConsoleOutputNodesGroup).call(this, options)); + var _this = _possibleConstructorReturn(this, (ConsoleOutputNodesGroup.__proto__ || Object.getPrototypeOf(ConsoleOutputNodesGroup)).call(this, options)); if (!_this.options.disableConsoleOutput) { return _possibleConstructorReturn(_this); @@ -2351,7 +2351,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { function DebugProtectionNodesGroup(options) { _classCallCheck(this, DebugProtectionNodesGroup); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionNodesGroup).call(this, options)); + var _this = _possibleConstructorReturn(this, (DebugProtectionNodesGroup.__proto__ || Object.getPrototypeOf(DebugProtectionNodesGroup)).call(this, options)); _this.debugProtectionFunctionIdentifier = Utils_1.Utils.getRandomVariableName(); if (!_this.options.debugProtection) { @@ -2392,7 +2392,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { function DomainLockNodesGroup(options) { _classCallCheck(this, DomainLockNodesGroup); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DomainLockNodesGroup).call(this, options)); + var _this = _possibleConstructorReturn(this, (DomainLockNodesGroup.__proto__ || Object.getPrototypeOf(DomainLockNodesGroup)).call(this, options)); if (!_this.options.domainLock.length) { return _possibleConstructorReturn(_this); @@ -2428,7 +2428,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { function SelfDefendingNodesGroup(options) { _classCallCheck(this, SelfDefendingNodesGroup); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(SelfDefendingNodesGroup).call(this, options)); + var _this = _possibleConstructorReturn(this, (SelfDefendingNodesGroup.__proto__ || Object.getPrototypeOf(SelfDefendingNodesGroup)).call(this, options)); if (!_this.options.selfDefending) { return _possibleConstructorReturn(_this); @@ -2469,7 +2469,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { function UnicodeArrayNodesGroup(options) { _classCallCheck(this, UnicodeArrayNodesGroup); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayNodesGroup).call(this, options)); + var _this = _possibleConstructorReturn(this, (UnicodeArrayNodesGroup.__proto__ || Object.getPrototypeOf(UnicodeArrayNodesGroup)).call(this, options)); _this.unicodeArrayName = Utils_1.Utils.getRandomVariableName(UnicodeArrayNode_1.UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH); _this.unicodeArrayTranslatorName = Utils_1.Utils.getRandomVariableName(UnicodeArrayNode_1.UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH); @@ -2532,7 +2532,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { function CatchClauseObfuscator(nodes, options) { _classCallCheck(this, CatchClauseObfuscator); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(CatchClauseObfuscator).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (CatchClauseObfuscator.__proto__ || Object.getPrototypeOf(CatchClauseObfuscator)).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -2603,7 +2603,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { function FunctionDeclarationObfuscator(nodes, options) { _classCallCheck(this, FunctionDeclarationObfuscator); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionDeclarationObfuscator).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (FunctionDeclarationObfuscator.__proto__ || Object.getPrototypeOf(FunctionDeclarationObfuscator)).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -2678,7 +2678,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { function FunctionObfuscator(nodes, options) { _classCallCheck(this, FunctionObfuscator); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionObfuscator).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (FunctionObfuscator.__proto__ || Object.getPrototypeOf(FunctionObfuscator)).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -2757,7 +2757,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { function LiteralObfuscator() { _classCallCheck(this, LiteralObfuscator); - return _possibleConstructorReturn(this, Object.getPrototypeOf(LiteralObfuscator).apply(this, arguments)); + return _possibleConstructorReturn(this, (LiteralObfuscator.__proto__ || Object.getPrototypeOf(LiteralObfuscator)).apply(this, arguments)); } _createClass(LiteralObfuscator, [{ @@ -2820,7 +2820,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { function MemberExpressionObfuscator() { _classCallCheck(this, MemberExpressionObfuscator); - return _possibleConstructorReturn(this, Object.getPrototypeOf(MemberExpressionObfuscator).apply(this, arguments)); + return _possibleConstructorReturn(this, (MemberExpressionObfuscator.__proto__ || Object.getPrototypeOf(MemberExpressionObfuscator)).apply(this, arguments)); } _createClass(MemberExpressionObfuscator, [{ @@ -2902,7 +2902,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MethodDefinitionObfuscator, _AbstractNodeObfuscat); function MethodDefinitionObfuscator() { - var _Object$getPrototypeO; + var _ref; _classCallCheck(this, MethodDefinitionObfuscator); @@ -2910,7 +2910,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(MethodDefinitionObfuscator)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_ref = MethodDefinitionObfuscator.__proto__ || Object.getPrototypeOf(MethodDefinitionObfuscator)).call.apply(_ref, [this].concat(args))); _this.ignoredNames = ['constructor']; return _this; @@ -2972,7 +2972,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { function ObjectExpressionObfuscator() { _classCallCheck(this, ObjectExpressionObfuscator); - return _possibleConstructorReturn(this, Object.getPrototypeOf(ObjectExpressionObfuscator).apply(this, arguments)); + return _possibleConstructorReturn(this, (ObjectExpressionObfuscator.__proto__ || Object.getPrototypeOf(ObjectExpressionObfuscator)).apply(this, arguments)); } _createClass(ObjectExpressionObfuscator, [{ @@ -3055,7 +3055,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { function VariableDeclarationObfuscator(nodes, options) { _classCallCheck(this, VariableDeclarationObfuscator); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(VariableDeclarationObfuscator).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (VariableDeclarationObfuscator.__proto__ || Object.getPrototypeOf(VariableDeclarationObfuscator)).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -3141,7 +3141,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { function BooleanLiteralReplacer() { _classCallCheck(this, BooleanLiteralReplacer); - return _possibleConstructorReturn(this, Object.getPrototypeOf(BooleanLiteralReplacer).apply(this, arguments)); + return _possibleConstructorReturn(this, (BooleanLiteralReplacer.__proto__ || Object.getPrototypeOf(BooleanLiteralReplacer)).apply(this, arguments)); } _createClass(BooleanLiteralReplacer, [{ diff --git a/package.json b/package.json index 6dac2706..dd43d4b0 100644 --- a/package.json +++ b/package.json @@ -25,26 +25,26 @@ "class-validator": "^0.5.0", "commander": "^2.9.0", "escodegen": "^1.8.1", - "esprima": "^2.7.2", + "esprima": "^3.0.0", "estraverse": "^4.2.0", "format-unicorn": "^1.1.0", "mkdirp": "^0.5.1", "source-map-support": "^0.4.2" }, "devDependencies": { - "@types/chai": "^3.4.31", + "@types/chai": "^3.4.32", "@types/chance": "^0.7.28", "@types/commander": "^2.3.29", - "@types/escodegen": "^0.0.3", - "@types/esprima": "^2.1.30", - "@types/estraverse": "^0.0.3", + "@types/escodegen": "^0.0.5", + "@types/esprima": "^2.1.31", + "@types/estraverse": "^0.0.5", "@types/format-unicorn": "^0.0.28", - "@types/joi": "^9.0.30", + "@types/joi": "^9.0.31", "@types/mkdirp": "^0.3.28", - "@types/mocha": "^2.2.30", - "@types/node": "^4.0.30", - "@types/sinon": "^1.16.28", - "babel-cli": "^6.11.4", + "@types/mocha": "^2.2.31", + "@types/node": "^6.0.38", + "@types/sinon": "^1.16.29", + "babel-cli": "^6.14.0", "babel-loader": "^6.2.5", "babel-preset-es2015": "^6.13.2", "chai": "^3.5.0", @@ -55,9 +55,9 @@ "sinon": "^2.0.0-pre.2", "ts-loader": "^0.8.2", "ts-node": "^1.3.0", - "tslint": "^3.14.0", + "tslint": "^3.15.1", "typescript": "^2.0.0", - "webpack": "^2.1.0-beta.21", + "webpack": "^2.1.0-beta.22", "webpack-node-externals": "^1.3.3" }, "repository": { diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index 2367ae70..951c14f4 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/src/JavaScriptObfuscatorInternal.ts @@ -1,9 +1,9 @@ import * as esprima from 'esprima'; import * as escodegen from 'escodegen'; +import * as ESTree from 'estree'; import { IObfuscatorOptions } from "./interfaces/IObfuscatorOptions"; import { IGeneratorOutput } from "./interfaces/IGeneratorOutput"; -import { INode } from './interfaces/nodes/INode'; import { IObfuscationResult } from "./interfaces/IObfuscationResult"; import { IOptions } from './interfaces/IOptions'; @@ -58,7 +58,7 @@ export class JavaScriptObfuscatorInternal { * @param astTree * @param options */ - private static generateCode (sourceCode: string, astTree: INode, options: IOptions): IGeneratorOutput { + private static generateCode (sourceCode: string, astTree: ESTree.Node, options: IOptions): IGeneratorOutput { let escodegenParams: escodegen.GenerateOptions = Object.assign( {}, JavaScriptObfuscatorInternal.escodegenParams @@ -95,7 +95,7 @@ export class JavaScriptObfuscatorInternal { } public obfuscate (): void { - let astTree: INode = esprima.parse(this.sourceCode, { + let astTree: ESTree.Node = esprima.parse(this.sourceCode, { loc: true }); diff --git a/src/NodeUtils.ts b/src/NodeUtils.ts index 7e1def16..95e28959 100644 --- a/src/NodeUtils.ts +++ b/src/NodeUtils.ts @@ -1,12 +1,9 @@ import * as escodegen from 'escodegen'; import * as esprima from 'esprima'; import * as estraverse from 'estraverse'; - -import { ILiteralNode } from "./interfaces/nodes/ILiteralNode"; -import { INode } from './interfaces/nodes/INode'; +import * as ESTree from 'estree'; import { TNodeWithBlockStatement } from "./types/TNodeWithBlockStatement"; -import { TStatement } from "./types/nodes/TStatement"; import { NodeType } from "./enums/NodeType"; @@ -28,9 +25,9 @@ export class NodeUtils { /** * @param node */ - public static addXVerbatimPropertyToLiterals (node: INode): void { + public static addXVerbatimPropertyToLiterals (node: ESTree.Node): void { NodeUtils.typedReplace(node, NodeType.Literal, { - leave: (node: ILiteralNode) => { + leave: (node: ESTree.Literal) => { node['x-verbatim-property'] = { content : node.raw, precedence: escodegen.Precedence.Primary @@ -43,7 +40,7 @@ export class NodeUtils { * @param blockScopeBody * @param node */ - public static appendNode (blockScopeBody: INode[], node: INode): void { + public static appendNode (blockScopeBody: ESTree.Node[], node: ESTree.Node): void { if (!NodeUtils.validateNode(node)) { return; } @@ -53,10 +50,10 @@ export class NodeUtils { /** * @param code - * @returns {INode} + * @returns {ESTree.Node} */ - public static convertCodeToStructure (code: string): INode { - let structure: INode = esprima.parse(code); + public static convertCodeToStructure (code: string): ESTree.Node { + let structure: ESTree.Node = esprima.parse(code); NodeUtils.addXVerbatimPropertyToLiterals(structure); NodeUtils.parentize(structure); @@ -67,9 +64,9 @@ export class NodeUtils { /** * @param node * @param index - * @returns {INode} + * @returns {ESTree.Node} */ - public static getBlockStatementNodeByIndex (node: INode, index: number = 0): INode { + public static getBlockStatementNodeByIndex (node: ESTree.Node, index: number = 0): ESTree.Node { if (Nodes.isNodeHasBlockStatement(node)) { if (node.body[index] === undefined) { throw new ReferenceError(`Wrong index \`${index}\`. Block-statement body length is \`${node.body.length}\``); @@ -84,21 +81,21 @@ export class NodeUtils { /** * @param node * @param depth - * @returns {INode} + * @returns {ESTree.Node} */ - public static getBlockScopeOfNode (node: INode, depth: number = 0): TNodeWithBlockStatement { - let parentNode: INode | undefined = node.parentNode; + public static getBlockScopeOfNode (node: ESTree.Node, depth: number = 0): TNodeWithBlockStatement { + let parentNode: ESTree.Node | undefined = node['parentNode']; if (!parentNode) { throw new ReferenceError('`parentNode` property of given node is `undefined`'); } if (Nodes.isBlockStatementNode(parentNode)) { - if (!parentNode.parentNode) { + if (!parentNode['parentNode']) { throw new ReferenceError('`parentNode` property of `parentNode` of given node is `undefined`'); } - if (!Utils.arrayContains(NodeUtils.nodesWithBlockScope, parentNode.parentNode.type)) { + if (!Utils.arrayContains(NodeUtils.nodesWithBlockScope, parentNode['parentNode'].type)) { return NodeUtils.getBlockScopeOfNode(parentNode, depth); } else if (depth > 0) { return NodeUtils.getBlockScopeOfNode(parentNode, --depth); @@ -119,7 +116,7 @@ export class NodeUtils { * @param node * @param index */ - public static insertNodeAtIndex (blockScopeBody: INode[], node: INode, index: number): void { + public static insertNodeAtIndex (blockScopeBody: ESTree.Node[], node: ESTree.Node, index: number): void { if (!NodeUtils.validateNode(node)) { return; } @@ -130,18 +127,18 @@ export class NodeUtils { /** * @param node */ - public static parentize (node: INode): void { + public static parentize (node: ESTree.Node): void { let isRootNode: boolean = true; estraverse.replace(node, { - enter: (node: INode, parentNode: INode): any => { - let value: INode; + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { + let value: ESTree.Node; if (isRootNode) { if (node.type === NodeType.Program) { value = node; } else { - value = Nodes.getProgramNode([node]); + value = Nodes.getProgramNode([node]); value['parentNode'] = value; } @@ -159,7 +156,7 @@ export class NodeUtils { * @param blockScopeBody * @param node */ - public static prependNode (blockScopeBody: INode[], node: INode): void { + public static prependNode (blockScopeBody: ESTree.Node[], node: ESTree.Node): void { if (!NodeUtils.validateNode(node)) { return; } @@ -173,9 +170,9 @@ export class NodeUtils { * @param visitor */ public static typedReplace ( - node: INode, + node: ESTree.Node, nodeType: string, - visitor: {enter?: (node: INode) => void, leave?: (node: INode) => void}, + visitor: {enter?: (node: ESTree.Node) => void, leave?: (node: ESTree.Node) => void}, ): void { NodeUtils.typedTraverse(node, nodeType, visitor, 'replace'); } @@ -187,20 +184,20 @@ export class NodeUtils { * @param traverseType */ public static typedTraverse ( - node: INode, + node: ESTree.Node, nodeType: string, - visitor: {enter?: (node: INode) => void, leave?: (node: INode) => void}, + visitor: {enter?: (node: ESTree.Node) => void, leave?: (node: ESTree.Node) => void}, traverseType: string = 'traverse' ): void { (estraverse)[traverseType](node, { - enter: (node: INode): any => { + enter: (node: ESTree.Node): any => { if (node.type === nodeType && visitor.enter) { - visitor.enter(node) + visitor.enter(node); } }, - leave: (node: INode): any => { + leave: (node: ESTree.Node): any => { if (node.type === nodeType && visitor.leave) { - visitor.leave(node) + visitor.leave(node); } } }); @@ -210,7 +207,7 @@ export class NodeUtils { * @param node * @returns {boolean} */ - private static validateNode (node: INode): boolean { + private static validateNode (node: ESTree.Node): boolean { return !!node && node.hasOwnProperty('type'); } } diff --git a/src/Nodes.ts b/src/Nodes.ts index ddf56020..930e6063 100644 --- a/src/Nodes.ts +++ b/src/Nodes.ts @@ -1,17 +1,4 @@ -import { IArrowFunctionExpressionNode } from "./interfaces/nodes/IArrowFunctionExpressionNode"; -import { IBlockStatementNode } from "./interfaces/nodes/IBlockStatementNode"; -import { IIdentifierNode } from "./interfaces/nodes/IIdentifierNode"; -import { IFunctionDeclarationNode } from "./interfaces/nodes/IFunctionDeclarationNode"; -import { IFunctionExpressionNode } from "./interfaces/nodes/IFunctionExpressionNode"; -import { ILiteralNode } from "./interfaces/nodes/ILiteralNode"; -import { IMemberExpressionNode } from "./interfaces/nodes/IMemberExpressionNode"; -import { INode } from "./interfaces/nodes/INode"; -import { IProgramNode } from "./interfaces/nodes/IProgramNode"; -import { IPropertyNode } from "./interfaces/nodes/IPropertyNode"; -import { IVariableDeclarationNode } from "./interfaces/nodes/IVariableDeclarationNode"; -import { IVariableDeclaratorNode } from "./interfaces/nodes/IVariableDeclaratorNode"; - -import { TStatement } from "./types/nodes/TStatement"; +import * as ESTree from 'estree'; import { TNodeWithBlockStatement } from "./types/TNodeWithBlockStatement"; @@ -20,9 +7,9 @@ import { NodeType } from "./enums/NodeType"; export class Nodes { /** * @param bodyNode - * @returns IProgramNode + * @returns ESTree.Program */ - public static getProgramNode (bodyNode: TStatement[]): IProgramNode { + public static getProgramNode (bodyNode: ESTree.Statement[]): ESTree.Program { return { 'type': NodeType.Program, 'body': bodyNode, @@ -34,7 +21,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isArrowFunctionExpressionNode (node: INode): node is IArrowFunctionExpressionNode { + public static isArrowFunctionExpressionNode (node: ESTree.Node): node is ESTree.ArrowFunctionExpression { return node.type === NodeType.ArrowFunctionExpression; } @@ -42,7 +29,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isBlockStatementNode (node: INode): node is IBlockStatementNode { + public static isBlockStatementNode (node: ESTree.Node): node is ESTree.BlockStatement { return node.type === NodeType.BlockStatement; } @@ -50,7 +37,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isFunctionDeclarationNode (node: INode): node is IFunctionDeclarationNode { + public static isFunctionDeclarationNode (node: ESTree.Node): node is ESTree.FunctionDeclaration { return node.type === NodeType.FunctionDeclaration; } @@ -58,7 +45,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isFunctionExpressionNode (node: INode): node is IFunctionExpressionNode { + public static isFunctionExpressionNode (node: ESTree.Node): node is ESTree.FunctionExpression { return node.type === NodeType.FunctionExpression; } @@ -66,7 +53,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isIdentifierNode (node: INode): node is IIdentifierNode { + public static isIdentifierNode (node: ESTree.Node): node is ESTree.Identifier { return node.type === NodeType.Identifier; } @@ -74,7 +61,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isLiteralNode (node: INode): node is ILiteralNode { + public static isLiteralNode (node: ESTree.Node): node is ESTree.Literal { return node.type === NodeType.Literal; } @@ -82,7 +69,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isMemberExpressionNode (node: INode): node is IMemberExpressionNode { + public static isMemberExpressionNode (node: ESTree.Node): node is ESTree.MemberExpression { return node.type === NodeType.MemberExpression; } @@ -91,7 +78,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isProgramNode (node: INode): node is IProgramNode { + public static isProgramNode (node: ESTree.Node): node is ESTree.Program { return node.type === NodeType.Program; } @@ -100,7 +87,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isPropertyNode (node: INode): node is IPropertyNode { + public static isPropertyNode (node: ESTree.Node): node is ESTree.Property { return node.type === NodeType.Property; } @@ -109,7 +96,7 @@ export class Nodes { * @param parentNode * @returns {boolean} */ - public static isReplaceableIdentifierNode (node: INode, parentNode: INode): node is IIdentifierNode { + public static isReplaceableIdentifierNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.Identifier { if (!Nodes.isIdentifierNode(node)) { return false; } @@ -129,7 +116,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isVariableDeclarationNode (node: INode): node is IVariableDeclarationNode { + public static isVariableDeclarationNode (node: ESTree.Node): node is ESTree.VariableDeclaration { return node.type === NodeType.VariableDeclaration; } @@ -138,7 +125,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isVariableDeclaratorNode (node: INode): node is IVariableDeclaratorNode { + public static isVariableDeclaratorNode (node: ESTree.Node): node is ESTree.VariableDeclarator { return node.type === NodeType.VariableDeclarator; } @@ -146,7 +133,7 @@ export class Nodes { * @param node * @returns {boolean} */ - public static isNodeHasBlockStatement (node: INode): node is TNodeWithBlockStatement { + public static isNodeHasBlockStatement (node: ESTree.Node): node is TNodeWithBlockStatement { return node.hasOwnProperty('body') && Array.isArray((node).body); } } diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index de9c5157..261d2fa2 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -1,7 +1,7 @@ import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; import { ICustomNode } from './interfaces/custom-nodes/ICustomNode'; -import { INode } from './interfaces/nodes/INode'; import { IObfuscator } from "./interfaces/IObfuscator"; import { IOptions } from "./interfaces/IOptions"; @@ -73,9 +73,9 @@ export class Obfuscator implements IObfuscator { /** * @param node - * @returns {INode} + * @returns {ESTree.Node} */ - public obfuscateNode (node: INode): INode { + public obfuscateNode (node: ESTree.Node): ESTree.Node { if (Nodes.isProgramNode(node) && !node.body.length) { return node; } @@ -92,7 +92,7 @@ export class Obfuscator implements IObfuscator { /** * @param astTree */ - private afterObfuscation (astTree: INode): void { + private afterObfuscation (astTree: ESTree.Node): void { this.nodes.forEach((node: ICustomNode) => { if (node.getAppendState() === AppendState.AfterObfuscation) { node.appendNode(astTree); @@ -103,7 +103,7 @@ export class Obfuscator implements IObfuscator { /** * @param astTree */ - private beforeObfuscation (astTree: INode): void { + private beforeObfuscation (astTree: ESTree.Node): void { this.nodes.forEach((node: ICustomNode) => { if (node.getAppendState() === AppendState.BeforeObfuscation) { node.appendNode(astTree); @@ -116,7 +116,7 @@ export class Obfuscator implements IObfuscator { * @param node * @param parentNode */ - private initializeNodeObfuscators (node: INode, parentNode: INode): void { + private initializeNodeObfuscators (node: ESTree.Node, parentNode: ESTree.Node): void { let nodeObfuscators: TNodeObfuscator[] | undefined = this.nodeObfuscators.get(node.type); if (!nodeObfuscators) { @@ -131,9 +131,9 @@ export class Obfuscator implements IObfuscator { /** * @param node */ - private obfuscate (node: INode): void { + private obfuscate (node: ESTree.Node): void { estraverse.replace(node, { - leave: (node: INode, parentNode: INode): any => { + leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { this.initializeNodeObfuscators(node, parentNode); } }); diff --git a/src/custom-nodes/AbstractCustomNode.ts b/src/custom-nodes/AbstractCustomNode.ts index ab7181fc..e2a92ea0 100644 --- a/src/custom-nodes/AbstractCustomNode.ts +++ b/src/custom-nodes/AbstractCustomNode.ts @@ -1,5 +1,6 @@ +import * as ESTree from 'estree'; + import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; -import { INode } from '../interfaces/nodes/INode'; import { IOptions } from "../interfaces/IOptions"; import { AppendState } from '../enums/AppendState'; @@ -25,7 +26,7 @@ export abstract class AbstractCustomNode implements ICustomNode { /** * @param astTree */ - public abstract appendNode (astTree: INode): void; + public abstract appendNode (astTree: ESTree.Node): void; /** * @returns {AppendState} @@ -35,14 +36,14 @@ export abstract class AbstractCustomNode implements ICustomNode { } /** - * @returns {INode} + * @returns {ESTree.Node} */ - public getNode (): INode { + public getNode (): ESTree.Node { return this.getNodeStructure(); } /** - * @returns {INode} + * @returns {ESTree.Node} */ - protected abstract getNodeStructure (): INode; + protected abstract getNodeStructure (): ESTree.Node; } diff --git a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts index 16f7dceb..dc53c392 100644 --- a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts +++ b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts @@ -1,4 +1,4 @@ -import { INode } from "../../interfaces/nodes/INode"; +import * as ESTree from 'estree'; import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; @@ -36,9 +36,9 @@ export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { * _console * })(); * - * @returns {INode} + * @returns {ESTree.Node} */ - protected getNodeStructure (): INode { + protected getNodeStructure (): ESTree.Node { return NodeUtils.convertCodeToStructure( ConsoleOutputDisableExpressionTemplate() ); diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts index 52ef11e1..a41d4df8 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts @@ -1,6 +1,7 @@ +import * as ESTree from 'estree'; + import 'format-unicorn'; -import { INode } from "../../interfaces/nodes/INode"; import { IOptions } from "../../interfaces/IOptions"; import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; @@ -41,9 +42,9 @@ export class DebugProtectionFunctionCallNode extends AbstractCustomNode { } /** - * @returns {INode} + * @returns {ESTree.Node} */ - protected getNodeStructure (): INode { + protected getNodeStructure (): ESTree.Node { return NodeUtils.convertCodeToStructure( DebugProtectionFunctionCallTemplate().formatUnicorn({ debugProtectionFunctionName: this.debugProtectionFunctionName diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts index 9df06e7d..2ede7386 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts @@ -1,6 +1,7 @@ +import * as ESTree from 'estree'; + import 'format-unicorn'; -import { INode } from "../../interfaces/nodes/INode"; import { IOptions } from "../../interfaces/IOptions"; import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; @@ -41,9 +42,9 @@ export class DebugProtectionFunctionIntervalNode extends AbstractCustomNode { } /** - * @returns {INode} + * @returns {ESTree.Node} */ - protected getNodeStructure (): INode { + protected getNodeStructure (): ESTree.Node { return NodeUtils.convertCodeToStructure( DebugProtectionFunctionIntervalTemplate().formatUnicorn({ debugProtectionFunctionName: this.debugProtectionFunctionName diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts index 70455ba2..c82e017c 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts @@ -1,6 +1,7 @@ +import * as ESTree from 'estree'; + import 'format-unicorn'; -import { INode } from "../../interfaces/nodes/INode"; import { IOptions } from "../../interfaces/IOptions"; import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; @@ -57,9 +58,9 @@ export class DebugProtectionFunctionNode extends AbstractCustomNode { /** * Found this trick in JScrambler * - * @returns {INode} + * @returns {ESTree.Node} */ - protected getNodeStructure (): INode { + protected getNodeStructure (): ESTree.Node { return NodeUtils.convertCodeToStructure( DebugProtectionFunctionTemplate().formatUnicorn({ debugProtectionFunctionName: this.debugProtectionFunctionName diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts index 61fe96ca..350c2095 100644 --- a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -1,6 +1,6 @@ -import 'format-unicorn'; +import * as ESTree from 'estree'; -import { INode } from "../../interfaces/nodes/INode"; +import 'format-unicorn'; import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; @@ -26,9 +26,9 @@ export class DomainLockNode extends AbstractCustomNode { } /** - * @returns {INode} + * @returns {ESTree.Node} */ - protected getNodeStructure (): INode { + protected getNodeStructure (): ESTree.Node { let domainsString = this.options.domainLock.join(';'), [hiddenDomainsString, diff] = Utils.hideString(domainsString, domainsString.length * 3); diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index 5aa405d8..4136a75c 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts @@ -1,4 +1,4 @@ -import { INode } from "../../interfaces/nodes/INode"; +import * as ESTree from 'estree'; import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; @@ -37,9 +37,9 @@ export class SelfDefendingUnicodeNode extends AbstractCustomNode { } /** - * @returns {INode} + * @returns {ESTree.Node} */ - protected getNodeStructure (): INode { + protected getNodeStructure (): ESTree.Node { return NodeUtils.convertCodeToStructure( JavaScriptObfuscator.obfuscate( SelfDefendingTemplate(), diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts index 40470f4a..99ab1821 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts @@ -1,6 +1,7 @@ +import * as ESTree from 'estree'; + import 'format-unicorn'; -import { INode } from "../../interfaces/nodes/INode"; import { IOptions } from "../../interfaces/IOptions"; import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; @@ -73,16 +74,16 @@ export class UnicodeArrayCallsWrapper extends AbstractCustomNode { }; /** - * @returns {INode} + * @returns {ESTree.Node} */ - public getNode (): INode { + public getNode (): ESTree.Node { return super.getNode(); } /** - * @returns {INode} + * @returns {ESTree.Node} */ - protected getNodeStructure (): INode { + protected getNodeStructure (): ESTree.Node { let keyName: string = Utils.getRandomVariableName(); return NodeUtils.convertCodeToStructure( diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts index 4082cdea..c38e81b4 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts @@ -1,6 +1,7 @@ +import * as ESTree from 'estree'; + import 'format-unicorn'; -import { INode } from "../../interfaces/nodes/INode"; import { IOptions } from "../../interfaces/IOptions"; import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; @@ -62,16 +63,16 @@ export class UnicodeArrayDecodeNode extends AbstractCustomNode { } /** - * @returns {INode} + * @returns {ESTree.Node} */ - public getNode (): INode { + public getNode (): ESTree.Node { return super.getNode(); } /** - * @returns {INode} + * @returns {ESTree.Node} */ - protected getNodeStructure (): INode { + protected getNodeStructure (): ESTree.Node { const forLoopFunctionName: string = 'forLoopFunc'; let code: string; diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts index 239aecf5..07ba3a5a 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts @@ -1,6 +1,7 @@ +import * as ESTree from 'estree'; + import 'format-unicorn'; -import { INode } from '../../interfaces/nodes/INode'; import { IOptions } from "../../interfaces/IOptions"; import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; @@ -85,9 +86,9 @@ export class UnicodeArrayNode extends AbstractCustomNode { } /** - * @returns {INode} + * @returns {ESTree.Node} */ - public getNode (): INode { + public getNode (): ESTree.Node { this.unicodeArray.rotateArray(this.unicodeArrayRotateValue); return super.getNode(); @@ -101,9 +102,9 @@ export class UnicodeArrayNode extends AbstractCustomNode { } /** - * @returns {INode} + * @returns {ESTree.Node} */ - protected getNodeStructure (): INode { + protected getNodeStructure (): ESTree.Node { return NodeUtils.convertCodeToStructure( UnicodeArrayTemplate().formatUnicorn({ unicodeArrayName: this.unicodeArrayName, diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts index abafb85c..1d175426 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts @@ -1,6 +1,7 @@ +import * as ESTree from 'estree'; + import 'format-unicorn'; -import { INode } from "../../interfaces/nodes/INode"; import { IOptions } from "../../interfaces/IOptions"; import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; @@ -70,16 +71,16 @@ export class UnicodeArrayRotateFunctionNode extends AbstractCustomNode { } /** - * @returns {INode} + * @returns {ESTree.Node} */ - public getNode (): INode { + public getNode (): ESTree.Node { return super.getNode(); } /** - * @returns {INode} + * @returns {ESTree.Node} */ - protected getNodeStructure (): INode { + protected getNodeStructure (): ESTree.Node { let code: string = '', timesName: string = Utils.getRandomVariableName(), whileFunctionName: string = Utils.getRandomVariableName(); diff --git a/src/interfaces/INodeObfuscator.d.ts b/src/interfaces/INodeObfuscator.d.ts index e9b0d073..614c7481 100644 --- a/src/interfaces/INodeObfuscator.d.ts +++ b/src/interfaces/INodeObfuscator.d.ts @@ -1,9 +1,9 @@ -import { INode } from '../interfaces/nodes/INode'; +import * as ESTree from 'estree'; export interface INodeObfuscator { /** * @param node * @param parentNode */ - obfuscateNode (node: INode, parentNode?: INode): void; + obfuscateNode (node: ESTree.Node, parentNode?: ESTree.Node): void; } diff --git a/src/interfaces/IObfuscator.d.ts b/src/interfaces/IObfuscator.d.ts index df16a8fd..25f1fbbb 100644 --- a/src/interfaces/IObfuscator.d.ts +++ b/src/interfaces/IObfuscator.d.ts @@ -1,5 +1,5 @@ -import { INode } from "./nodes/INode"; +import * as ESTree from 'estree'; export interface IObfuscator { - obfuscateNode (node: INode): INode; + obfuscateNode (node: ESTree.Node): ESTree.Node; } diff --git a/src/interfaces/nodes/IArrowFunctionExpressionNode.d.ts b/src/interfaces/nodes/IArrowFunctionExpressionNode.d.ts deleted file mode 100644 index 83b7ae93..00000000 --- a/src/interfaces/nodes/IArrowFunctionExpressionNode.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { IFunctionNode } from "./IFunctionNode"; - -export interface IArrowFunctionExpressionNode extends IFunctionNode {} diff --git a/src/interfaces/nodes/IBlockStatementNode.d.ts b/src/interfaces/nodes/IBlockStatementNode.d.ts deleted file mode 100644 index 9f6931e3..00000000 --- a/src/interfaces/nodes/IBlockStatementNode.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { TStatement } from "../../types/nodes/TStatement"; - -import { INode } from "./INode"; - -export interface IBlockStatementNode extends INode { - body: TStatement[]; -} diff --git a/src/interfaces/nodes/ICallExpressionNode.d.ts b/src/interfaces/nodes/ICallExpressionNode.d.ts deleted file mode 100644 index 90e52d29..00000000 --- a/src/interfaces/nodes/ICallExpressionNode.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { TExpression } from "../../types/nodes/TExpression"; - -import { INode } from "./INode"; -import { ISpreadElementNode } from "./ISpreadElementNode"; - -export interface ICallExpressionNode extends INode { - callee: TExpression; - arguments: TExpression[] | ISpreadElementNode[]; -} diff --git a/src/interfaces/nodes/ICatchClauseNode.d.ts b/src/interfaces/nodes/ICatchClauseNode.d.ts deleted file mode 100644 index 12a9c689..00000000 --- a/src/interfaces/nodes/ICatchClauseNode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IBlockStatementNode } from "./IBlockStatementNode"; -import { IIdentifierNode } from "./IIdentifierNode"; -import { INode } from "./INode"; - -export interface ICatchClauseNode extends INode { - param: IIdentifierNode; - body: IBlockStatementNode; -} diff --git a/src/interfaces/nodes/IExpressionStatementNode.d.ts b/src/interfaces/nodes/IExpressionStatementNode.d.ts deleted file mode 100644 index ca18e5cc..00000000 --- a/src/interfaces/nodes/IExpressionStatementNode.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { TExpression } from "../../types/nodes/TExpression"; - -import { INode } from "./INode"; - -export interface IExpressionStatementNode extends INode { - expression: TExpression; -} diff --git a/src/interfaces/nodes/IFunctionDeclarationNode.d.ts b/src/interfaces/nodes/IFunctionDeclarationNode.d.ts deleted file mode 100644 index bbe63c66..00000000 --- a/src/interfaces/nodes/IFunctionDeclarationNode.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { IFunctionNode } from "./IFunctionNode"; - -export interface IFunctionDeclarationNode extends IFunctionNode {} diff --git a/src/interfaces/nodes/IFunctionExpressionNode.d.ts b/src/interfaces/nodes/IFunctionExpressionNode.d.ts deleted file mode 100644 index 96e85013..00000000 --- a/src/interfaces/nodes/IFunctionExpressionNode.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { IFunctionNode } from "./IFunctionNode"; - -export interface IFunctionExpressionNode extends IFunctionNode {} diff --git a/src/interfaces/nodes/IFunctionNode.d.ts b/src/interfaces/nodes/IFunctionNode.d.ts deleted file mode 100644 index fbbdd084..00000000 --- a/src/interfaces/nodes/IFunctionNode.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TExpression } from "../../types/nodes/TExpression"; - -import { IBlockStatementNode } from "./IBlockStatementNode"; -import { IIdentifierNode } from "./IIdentifierNode"; -import { INode } from "./INode"; - -export interface IFunctionNode extends INode { - id: IIdentifierNode; - params: IIdentifierNode[]; - defaults?: TExpression[]; - body: IBlockStatementNode; - generator: boolean; - expression: boolean; -} diff --git a/src/interfaces/nodes/IIdentifierNode.d.ts b/src/interfaces/nodes/IIdentifierNode.d.ts deleted file mode 100644 index 857bdc31..00000000 --- a/src/interfaces/nodes/IIdentifierNode.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { INode } from "./INode"; - -export interface IIdentifierNode extends INode { - name: string; -} diff --git a/src/interfaces/nodes/IIfStatementNode.ts b/src/interfaces/nodes/IIfStatementNode.ts deleted file mode 100644 index 0510c752..00000000 --- a/src/interfaces/nodes/IIfStatementNode.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IBlockStatementNode } from "./IBlockStatementNode"; -import { INode } from "./INode"; - -export interface IIfStatementNode extends INode { - test: any; - consequent: IBlockStatementNode; - alternate: IBlockStatementNode | null; -} diff --git a/src/interfaces/nodes/ILiteral.d.ts b/src/interfaces/nodes/ILiteral.d.ts new file mode 100644 index 00000000..417bc966 --- /dev/null +++ b/src/interfaces/nodes/ILiteral.d.ts @@ -0,0 +1,5 @@ +import * as ESTree from 'estree'; + +interface ILiteral extends ESTree.SimpleLiteral { + 'x-verbatim-property'?: any; +} diff --git a/src/interfaces/nodes/ILiteralNode.d.ts b/src/interfaces/nodes/ILiteralNode.d.ts deleted file mode 100644 index 7e10d0ba..00000000 --- a/src/interfaces/nodes/ILiteralNode.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { INode } from "./INode"; - -export interface ILiteralNode extends INode { - value: boolean|number|string; - raw: string; - 'x-verbatim-property'?: any; -} diff --git a/src/interfaces/nodes/IMemberExpressionNode.d.ts b/src/interfaces/nodes/IMemberExpressionNode.d.ts deleted file mode 100644 index 75620c51..00000000 --- a/src/interfaces/nodes/IMemberExpressionNode.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IIdentifierNode } from "./IIdentifierNode"; -import { ILiteralNode } from "./ILiteralNode"; -import { INode } from "./INode"; - -export interface IMemberExpressionNode extends INode { - computed: boolean; - object: IIdentifierNode; - property: IIdentifierNode|ILiteralNode; -} diff --git a/src/interfaces/nodes/IMethodDefinitionNode.d.ts b/src/interfaces/nodes/IMethodDefinitionNode.d.ts deleted file mode 100644 index 3dfbf1c9..00000000 --- a/src/interfaces/nodes/IMethodDefinitionNode.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { IFunctionExpressionNode } from "./IFunctionExpressionNode"; -import { IIdentifierNode } from "./IIdentifierNode"; -import { ILiteralNode } from "./ILiteralNode"; -import { INode } from "./INode"; - -export interface IMethodDefinitionNode extends INode { - key: IIdentifierNode|ILiteralNode; - computed: boolean; - value: IFunctionExpressionNode; - kind: string; - static: boolean; -} diff --git a/src/interfaces/nodes/INode.d.ts b/src/interfaces/nodes/INode.d.ts index 468e02df..9fa3e893 100644 --- a/src/interfaces/nodes/INode.d.ts +++ b/src/interfaces/nodes/INode.d.ts @@ -1,4 +1,5 @@ -export interface INode { - type: string; - parentNode?: INode; +import * as ESTree from 'estree'; + +export interface INode extends ESTree.BaseNode { + parentNode?: ESTree.Node; } diff --git a/src/interfaces/nodes/IObjectExpressionNode.d.ts b/src/interfaces/nodes/IObjectExpressionNode.d.ts deleted file mode 100644 index 45049551..00000000 --- a/src/interfaces/nodes/IObjectExpressionNode.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { IPropertyNode } from "./IPropertyNode"; -import { INode } from "./INode"; - -export interface IObjectExpressionNode extends INode { - properties: IPropertyNode[]; -} diff --git a/src/interfaces/nodes/IProgramNode.d.ts b/src/interfaces/nodes/IProgramNode.d.ts deleted file mode 100644 index b11ce39c..00000000 --- a/src/interfaces/nodes/IProgramNode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TStatement } from "../../types/nodes/TStatement"; - -import { INode } from "./INode"; - -export interface IProgramNode extends INode { - body: TStatement[]; - sourceType: string; -} diff --git a/src/interfaces/nodes/IPropertyNode.d.ts b/src/interfaces/nodes/IPropertyNode.d.ts deleted file mode 100644 index 47dc7361..00000000 --- a/src/interfaces/nodes/IPropertyNode.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { IIdentifierNode } from "./IIdentifierNode"; -import { ILiteralNode } from "./ILiteralNode"; -import { INode } from "./INode"; - -export interface IPropertyNode extends INode { - key: IIdentifierNode|ILiteralNode; - computed: boolean; - value: IIdentifierNode|ILiteralNode; - kind: string; - method: boolean; - shorthand: boolean; -} diff --git a/src/interfaces/nodes/ISpreadElementNode.d.ts b/src/interfaces/nodes/ISpreadElementNode.d.ts deleted file mode 100644 index e8e21f81..00000000 --- a/src/interfaces/nodes/ISpreadElementNode.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { TExpression } from "../../types/nodes/TExpression"; - -import { INode } from "./INode"; - -export interface ISpreadElementNode extends INode { - argument: TExpression; -} diff --git a/src/interfaces/nodes/IVariableDeclarationNode.d.ts b/src/interfaces/nodes/IVariableDeclarationNode.d.ts deleted file mode 100644 index fa6f29dd..00000000 --- a/src/interfaces/nodes/IVariableDeclarationNode.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { INode } from "./INode"; -import { IVariableDeclaratorNode } from "./IVariableDeclaratorNode"; - -export interface IVariableDeclarationNode extends INode { - declarations: IVariableDeclaratorNode[]; - kind: string; -} diff --git a/src/interfaces/nodes/IVariableDeclaratorNode.d.ts b/src/interfaces/nodes/IVariableDeclaratorNode.d.ts deleted file mode 100644 index a1fe82a0..00000000 --- a/src/interfaces/nodes/IVariableDeclaratorNode.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IIdentifierNode } from "./IIdentifierNode"; -import { INode } from "./INode"; - -export interface IVariableDeclaratorNode extends INode { - id: IIdentifierNode; - init: any; -} diff --git a/src/node-obfuscators/AbstractNodeObfuscator.ts b/src/node-obfuscators/AbstractNodeObfuscator.ts index b1e13ee1..c1bdf3d3 100644 --- a/src/node-obfuscators/AbstractNodeObfuscator.ts +++ b/src/node-obfuscators/AbstractNodeObfuscator.ts @@ -1,6 +1,7 @@ +import * as ESTree from 'estree'; + import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { INodeObfuscator } from '../interfaces/INodeObfuscator'; -import { INode } from "../interfaces/nodes/INode"; import { IOptions } from "../interfaces/IOptions"; export abstract class AbstractNodeObfuscator implements INodeObfuscator { @@ -27,5 +28,5 @@ export abstract class AbstractNodeObfuscator implements INodeObfuscator { * @param node * @param parentNode */ - public abstract obfuscateNode (node: INode, parentNode?: INode): void; + public abstract obfuscateNode (node: ESTree.Node, parentNode?: ESTree.Node): void; } diff --git a/src/node-obfuscators/CatchClauseObfuscator.ts b/src/node-obfuscators/CatchClauseObfuscator.ts index e09da399..48241724 100644 --- a/src/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-obfuscators/CatchClauseObfuscator.ts @@ -1,9 +1,7 @@ import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; -import { ICatchClauseNode } from "../interfaces/nodes/ICatchClauseNode"; import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; -import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; -import { INode } from '../interfaces/nodes/INode'; import { IOptions } from "../interfaces/IOptions"; import { NodeType } from "../enums/NodeType"; @@ -40,7 +38,7 @@ export class CatchClauseObfuscator extends AbstractNodeObfuscator { /** * @param catchClauseNode */ - public obfuscateNode (catchClauseNode: ICatchClauseNode): void { + public obfuscateNode (catchClauseNode: ESTree.CatchClause): void { this.storeCatchClauseParam(catchClauseNode); this.replaceCatchClauseParam(catchClauseNode); } @@ -48,18 +46,18 @@ export class CatchClauseObfuscator extends AbstractNodeObfuscator { /** * @param catchClauseNode */ - private storeCatchClauseParam (catchClauseNode: ICatchClauseNode): void { + private storeCatchClauseParam (catchClauseNode: ESTree.CatchClause): void { NodeUtils.typedReplace(catchClauseNode.param, NodeType.Identifier, { - leave: (node: IIdentifierNode) => this.identifierReplacer.storeNames(node.name) + leave: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) }); } /** * @param catchClauseNode */ - private replaceCatchClauseParam (catchClauseNode: ICatchClauseNode): void { + private replaceCatchClauseParam (catchClauseNode: ESTree.CatchClause): void { estraverse.replace(catchClauseNode, { - leave: (node: INode, parentNode: INode): any => { + leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { node.name = this.identifierReplacer.replace(node.name); } diff --git a/src/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-obfuscators/FunctionDeclarationObfuscator.ts index 89810dd0..2d4905f5 100644 --- a/src/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -1,9 +1,7 @@ import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; -import { IFunctionDeclarationNode } from "../interfaces/nodes/IFunctionDeclarationNode"; -import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; -import { INode } from "../interfaces/nodes/INode"; import { IOptions } from "../interfaces/IOptions"; import { NodeType } from "../enums/NodeType"; @@ -42,7 +40,7 @@ export class FunctionDeclarationObfuscator extends AbstractNodeObfuscator { * @param functionDeclarationNode * @param parentNode */ - public obfuscateNode (functionDeclarationNode: IFunctionDeclarationNode, parentNode: INode): void { + public obfuscateNode (functionDeclarationNode: ESTree.FunctionDeclaration, parentNode: ESTree.Node): void { if (parentNode.type === NodeType.Program) { return; } @@ -54,22 +52,22 @@ export class FunctionDeclarationObfuscator extends AbstractNodeObfuscator { /** * @param functionDeclarationNode */ - private storeFunctionName (functionDeclarationNode: IFunctionDeclarationNode): void { + private storeFunctionName (functionDeclarationNode: ESTree.FunctionDeclaration): void { NodeUtils.typedReplace(functionDeclarationNode.id, NodeType.Identifier, { - leave: (node: IIdentifierNode) => this.identifierReplacer.storeNames(node.name) + leave: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) }); } /** * @param functionDeclarationNode */ - private replaceFunctionName (functionDeclarationNode: IFunctionDeclarationNode): void { - let scopeNode: INode = NodeUtils.getBlockScopeOfNode( + private replaceFunctionName (functionDeclarationNode: ESTree.FunctionDeclaration): void { + let scopeNode: ESTree.Node = NodeUtils.getBlockScopeOfNode( functionDeclarationNode ); estraverse.replace(scopeNode, { - enter: (node: INode, parentNode: INode): any => { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { node.name = this.identifierReplacer.replace(node.name); } diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index 2ec3340a..84c10816 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -1,9 +1,7 @@ import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; -import { IFunctionNode } from "../interfaces/nodes/IFunctionNode"; -import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; -import { INode } from "../interfaces/nodes/INode"; import { IOptions } from "../interfaces/IOptions"; import { NodeType } from "../enums/NodeType"; @@ -40,7 +38,7 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { /** * @param functionNode */ - public obfuscateNode (functionNode: IFunctionNode): void { + public obfuscateNode (functionNode: ESTree.Function): void { this.storeFunctionParams(functionNode); this.replaceFunctionParams(functionNode); } @@ -48,11 +46,11 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { /** * @param functionNode */ - private storeFunctionParams (functionNode: IFunctionNode): void { + private storeFunctionParams (functionNode: ESTree.Function): void { functionNode.params - .forEach((paramsNode: INode) => { + .forEach((paramsNode: ESTree.Node) => { NodeUtils.typedReplace(paramsNode, NodeType.Identifier, { - leave: (node: IIdentifierNode) => this.identifierReplacer.storeNames(node.name) + leave: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) }); }); } @@ -60,9 +58,9 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { /** * @param functionNode */ - private replaceFunctionParams (functionNode: IFunctionNode): void { + private replaceFunctionParams (functionNode: ESTree.Function): void { let replaceVisitor: estraverse.Visitor = { - leave: (node: INode, parentNode: INode): any => { + leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { node.name = this.identifierReplacer.replace(node.name); } @@ -70,7 +68,7 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { }; functionNode.params - .forEach((paramsNode: INode) => { + .forEach((paramsNode: ESTree.Node) => { estraverse.replace(paramsNode, replaceVisitor); }); diff --git a/src/node-obfuscators/LiteralObfuscator.ts b/src/node-obfuscators/LiteralObfuscator.ts index 5efdd15f..32ed8b98 100644 --- a/src/node-obfuscators/LiteralObfuscator.ts +++ b/src/node-obfuscators/LiteralObfuscator.ts @@ -1,7 +1,5 @@ import * as escodegen from 'escodegen'; - -import { ILiteralNode } from "../interfaces/nodes/ILiteralNode"; -import { INode } from "../interfaces/nodes/INode"; +import * as ESTree from 'estree'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { BooleanLiteralReplacer } from "./replacers/BooleanLiteralReplacer"; @@ -14,7 +12,7 @@ export class LiteralObfuscator extends AbstractNodeObfuscator { * @param literalNode * @param parentNode */ - public obfuscateNode (literalNode: ILiteralNode, parentNode: INode): void { + public obfuscateNode (literalNode: ESTree.Literal, parentNode: ESTree.Node): void { if (Nodes.isPropertyNode(parentNode) && parentNode.key === literalNode) { return; } diff --git a/src/node-obfuscators/MemberExpressionObfuscator.ts b/src/node-obfuscators/MemberExpressionObfuscator.ts index b35b32df..856c1e49 100644 --- a/src/node-obfuscators/MemberExpressionObfuscator.ts +++ b/src/node-obfuscators/MemberExpressionObfuscator.ts @@ -1,10 +1,6 @@ import * as escodegen from 'escodegen'; import * as estraverse from 'estraverse'; - -import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; -import { ILiteralNode } from "../interfaces/nodes/ILiteralNode"; -import { IMemberExpressionNode } from "../interfaces/nodes/IMemberExpressionNode"; -import { INode } from "../interfaces/nodes/INode"; +import * as ESTree from 'estree'; import { NodeType } from "../enums/NodeType"; @@ -16,9 +12,9 @@ export class MemberExpressionObfuscator extends AbstractNodeObfuscator { /** * @param memberExpressionNode */ - public obfuscateNode (memberExpressionNode: IMemberExpressionNode): void { + public obfuscateNode (memberExpressionNode: ESTree.MemberExpression): void { estraverse.replace(memberExpressionNode.property, { - leave: (node: INode, parentNode: INode): any => { + leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Nodes.isLiteralNode(node)) { this.obfuscateLiteralProperty(node); @@ -49,9 +45,9 @@ export class MemberExpressionObfuscator extends AbstractNodeObfuscator { * * @param node */ - private obfuscateIdentifierProperty (node: IIdentifierNode): void { + private obfuscateIdentifierProperty (node: ESTree.Identifier): void { let nodeValue: string = node.name, - literalNode: ILiteralNode = { + literalNode: ESTree.Literal = { raw: `'${nodeValue}'`, 'x-verbatim-property': { content : new StringLiteralReplacer(this.nodes, this.options).replace(nodeValue), @@ -75,7 +71,7 @@ export class MemberExpressionObfuscator extends AbstractNodeObfuscator { * * @param node */ - private obfuscateLiteralProperty (node: ILiteralNode): void { + 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), diff --git a/src/node-obfuscators/MethodDefinitionObfuscator.ts b/src/node-obfuscators/MethodDefinitionObfuscator.ts index ab6036f9..d11d0c82 100644 --- a/src/node-obfuscators/MethodDefinitionObfuscator.ts +++ b/src/node-obfuscators/MethodDefinitionObfuscator.ts @@ -1,7 +1,5 @@ import * as estraverse from 'estraverse'; - -import { IMethodDefinitionNode } from "../interfaces/nodes/IMethodDefinitionNode"; -import { INode } from "../interfaces/nodes/INode"; +import * as ESTree from 'estree'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { Nodes } from "../Nodes"; @@ -25,16 +23,16 @@ export class MethodDefinitionObfuscator extends AbstractNodeObfuscator { * @param methodDefinitionNode * @param parentNode */ - public obfuscateNode (methodDefinitionNode: IMethodDefinitionNode, parentNode: INode): void { + public obfuscateNode (methodDefinitionNode: ESTree.MethodDefinition, parentNode: ESTree.Node): void { this.replaceMethodName(methodDefinitionNode); } /** * @param methodDefinitionNode */ - private replaceMethodName (methodDefinitionNode: IMethodDefinitionNode): void { + private replaceMethodName (methodDefinitionNode: ESTree.MethodDefinition): void { estraverse.replace(methodDefinitionNode.key, { - leave: (node: INode): any => { + leave: (node: ESTree.Node): any => { if ( Nodes.isIdentifierNode(node) && !Utils.arrayContains(this.ignoredNames, node.name) && diff --git a/src/node-obfuscators/ObjectExpressionObfuscator.ts b/src/node-obfuscators/ObjectExpressionObfuscator.ts index 2da315f9..266e93a2 100644 --- a/src/node-obfuscators/ObjectExpressionObfuscator.ts +++ b/src/node-obfuscators/ObjectExpressionObfuscator.ts @@ -1,11 +1,6 @@ import * as escodegen from 'escodegen'; import * as estraverse from 'estraverse'; - -import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; -import { ILiteralNode } from "../interfaces/nodes/ILiteralNode"; -import { IObjectExpressionNode } from "../interfaces/nodes/IObjectExpressionNode"; -import { IPropertyNode } from "../interfaces/nodes/IPropertyNode"; -import { INode } from "../interfaces/nodes/INode"; +import * as ESTree from 'estree'; import { NodeType } from "../enums/NodeType"; @@ -27,11 +22,11 @@ export class ObjectExpressionObfuscator extends AbstractNodeObfuscator { /** * @param objectExpressionNode */ - public obfuscateNode (objectExpressionNode: IObjectExpressionNode): void { + public obfuscateNode (objectExpressionNode: ESTree.ObjectExpression): void { objectExpressionNode.properties - .forEach((property: IPropertyNode) => { + .forEach((property: ESTree.Property) => { estraverse.replace(property.key, { - leave: (node: INode, parentNode: INode): any => { + leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Nodes.isLiteralNode(node)) { this.obfuscateLiteralPropertyKey(node); @@ -49,7 +44,7 @@ export class ObjectExpressionObfuscator extends AbstractNodeObfuscator { /** * @param node */ - private obfuscateLiteralPropertyKey (node: ILiteralNode): void { + private obfuscateLiteralPropertyKey (node: ESTree.Literal): void { if (typeof node.value === 'string' && !node['x-verbatim-property']) { node['x-verbatim-property'] = { content : Utils.stringToUnicode(node.value), @@ -61,9 +56,9 @@ export class ObjectExpressionObfuscator extends AbstractNodeObfuscator { /** * @param node */ - private obfuscateIdentifierPropertyKey (node: IIdentifierNode): void { + private obfuscateIdentifierPropertyKey (node: ESTree.Identifier): void { let nodeValue: string = node.name, - literalNode: ILiteralNode = { + literalNode: ESTree.Literal = { raw: `'${nodeValue}'`, 'x-verbatim-property': { content : Utils.stringToUnicode(nodeValue), diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index 6f9a9dde..6e79a47f 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -1,11 +1,8 @@ import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; -import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode"; -import { INode } from "../interfaces/nodes/INode"; import { IOptions } from "../interfaces/IOptions"; -import { IVariableDeclarationNode } from "../interfaces/nodes/IVariableDeclarationNode"; -import { IVariableDeclaratorNode } from "../interfaces/nodes/IVariableDeclaratorNode"; import { NodeType } from "../enums/NodeType"; @@ -44,7 +41,7 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { * @param variableDeclarationNode * @param parentNode */ - public obfuscateNode (variableDeclarationNode: IVariableDeclarationNode, parentNode: INode): void { + public obfuscateNode (variableDeclarationNode: ESTree.VariableDeclaration, parentNode: ESTree.Node): void { if (parentNode.type === NodeType.Program) { return; } @@ -56,11 +53,11 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { /** * @param variableDeclarationNode */ - private storeVariableNames (variableDeclarationNode: IVariableDeclarationNode): void { + private storeVariableNames (variableDeclarationNode: ESTree.VariableDeclaration): void { variableDeclarationNode.declarations - .forEach((declarationNode: IVariableDeclaratorNode) => { + .forEach((declarationNode: ESTree.VariableDeclarator) => { NodeUtils.typedReplace(declarationNode.id, NodeType.Identifier, { - leave: (node: IIdentifierNode) => this.identifierReplacer.storeNames(node.name) + leave: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) }); }); } @@ -69,21 +66,21 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { * @param variableDeclarationNode * @param variableParentNode */ - private replaceVariableNames (variableDeclarationNode: IVariableDeclarationNode, variableParentNode: INode): void { - let scopeNode: INode = variableDeclarationNode.kind === 'var' ? NodeUtils.getBlockScopeOfNode( + private replaceVariableNames (variableDeclarationNode: ESTree.VariableDeclaration, variableParentNode: ESTree.Node): void { + let scopeNode: ESTree.Node = variableDeclarationNode.kind === 'var' ? NodeUtils.getBlockScopeOfNode( variableDeclarationNode ) : variableParentNode, isNodeAfterVariableDeclaratorFlag: boolean = false; estraverse.replace(scopeNode, { - enter: (node: INode, parentNode: INode): any => { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if ( Nodes.isArrowFunctionExpressionNode(node) || Nodes.isFunctionDeclarationNode(node) || Nodes.isFunctionExpressionNode(node) ) { estraverse.replace(node, { - enter: (node: INode, parentNode: INode): any => { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { node.name = this.identifierReplacer.replace(node.name); } diff --git a/src/types/TNodeWithBlockStatement.d.ts b/src/types/TNodeWithBlockStatement.d.ts index 12bf23d5..07a38285 100644 --- a/src/types/TNodeWithBlockStatement.d.ts +++ b/src/types/TNodeWithBlockStatement.d.ts @@ -1,4 +1,3 @@ -import { IBlockStatementNode } from "../interfaces/nodes/IBlockStatementNode"; -import { IProgramNode } from "../interfaces/nodes/IProgramNode"; +import * as ESTree from 'estree'; -export type TNodeWithBlockStatement = IBlockStatementNode|IProgramNode; +export type TNodeWithBlockStatement = ESTree.BlockStatement|ESTree.Program; diff --git a/src/types/TOptionsNormalizerRule.d.ts b/src/types/TOptionsNormalizerRule.d.ts index 1c79197a..62a5c2ea 100644 --- a/src/types/TOptionsNormalizerRule.d.ts +++ b/src/types/TOptionsNormalizerRule.d.ts @@ -1,3 +1,3 @@ -import {IOptions} from "../interfaces/IOptions"; +import { IOptions } from "../interfaces/IOptions"; export type TOptionsNormalizerRule = (options: IOptions) => IOptions; diff --git a/src/types/nodes/TExpression.d.ts b/src/types/nodes/TExpression.d.ts deleted file mode 100644 index 9a7d22fa..00000000 --- a/src/types/nodes/TExpression.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IArrowFunctionExpressionNode } from "../../interfaces/nodes/IArrowFunctionExpressionNode"; -import { ICallExpressionNode } from "../../interfaces/nodes/ICallExpressionNode"; -import { IFunctionExpressionNode } from "../../interfaces/nodes/IFunctionExpressionNode"; -import { IIdentifierNode } from "../../interfaces/nodes/IIdentifierNode"; -import { ILiteralNode } from "../../interfaces/nodes/ILiteralNode"; -import { IMemberExpressionNode } from "../../interfaces/nodes/IMemberExpressionNode"; - -export type TExpression = IArrowFunctionExpressionNode | ICallExpressionNode | IFunctionExpressionNode | - IIdentifierNode | ILiteralNode | IMemberExpressionNode; diff --git a/src/types/nodes/TStatement.d.ts b/src/types/nodes/TStatement.d.ts deleted file mode 100644 index 916ba877..00000000 --- a/src/types/nodes/TStatement.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IExpressionStatementNode } from "../../interfaces/nodes/IExpressionStatementNode"; -import { IFunctionDeclarationNode } from "../../interfaces/nodes/IFunctionDeclarationNode"; -import { IIfStatementNode } from "../../interfaces/nodes/IIfStatementNode"; -import { IVariableDeclarationNode } from "../../interfaces/nodes/IVariableDeclarationNode"; - -export type TStatement = IExpressionStatementNode | IFunctionDeclarationNode | IIfStatementNode | - IVariableDeclarationNode; diff --git a/test/mocks/NodeMocks.ts b/test/mocks/NodeMocks.ts index 48fd7a25..575f1470 100644 --- a/test/mocks/NodeMocks.ts +++ b/test/mocks/NodeMocks.ts @@ -1,30 +1,14 @@ import * as escodegen from 'escodegen'; - -import { TExpression } from "../../src/types/nodes/TExpression"; -import { TStatement } from "../../src/types/nodes/TStatement"; - -import { IBlockStatementNode } from "../../src/interfaces/nodes/IBlockStatementNode"; -import { ICallExpressionNode } from "../../src/interfaces/nodes/ICallExpressionNode"; -import { ICatchClauseNode } from "../../src/interfaces/nodes/ICatchClauseNode"; -import { IExpressionStatementNode } from "../../src/interfaces/nodes/IExpressionStatementNode"; -import { IFunctionDeclarationNode } from "../../src/interfaces/nodes/IFunctionDeclarationNode"; -import { IIdentifierNode } from "../../src/interfaces/nodes/IIdentifierNode"; -import { IIfStatementNode } from "../../src/interfaces/nodes/IIfStatementNode"; -import { ILiteralNode } from "../../src/interfaces/nodes/ILiteralNode"; -import { IMemberExpressionNode } from "../../src/interfaces/nodes/IMemberExpressionNode"; -import { IProgramNode } from "../../src/interfaces/nodes/IProgramNode"; -import { ISpreadElementNode } from "../../src/interfaces/nodes/ISpreadElementNode"; -import { IVariableDeclarationNode } from "../../src/interfaces/nodes/IVariableDeclarationNode"; -import { IVariableDeclaratorNode } from "../../src/interfaces/nodes/IVariableDeclaratorNode"; +import * as ESTree from 'estree'; import { NodeType } from "../../src/enums/NodeType"; export class NodeMocks { /** * @param bodyNodes - * @returns {IProgramNode} + * @returns {ESTree.Program} */ - public static getProgramNode (bodyNodes: TStatement[] = []): IProgramNode { + public static getProgramNode (bodyNodes: ESTree.Statement[] = []): ESTree.Program { return { type: NodeType.Program, body: bodyNodes, @@ -34,9 +18,9 @@ export class NodeMocks { /** * @param bodyNodes - * @returns {IBlockStatementNode} + * @returns {ESTree.BlockStatement} */ - public static getBlockStatementNode (bodyNodes: TStatement[] = []): IBlockStatementNode { + public static getBlockStatementNode (bodyNodes: ESTree.Statement[] = []): ESTree.BlockStatement { return { type: NodeType.BlockStatement, body: bodyNodes @@ -45,9 +29,9 @@ export class NodeMocks { /** * @param bodyNodes - * @returns {ICatchClauseNode} + * @returns {ESTree.CatchClause} */ - public static getCatchClauseNode (bodyNodes: TStatement[] = []): ICatchClauseNode { + public static getCatchClauseNode (bodyNodes: ESTree.Statement[] = []): ESTree.CatchClause { return { type: NodeType.CatchClause, param: NodeMocks.getIdentifierNode('err'), @@ -58,12 +42,12 @@ export class NodeMocks { /** * @param callee * @param args - * @returns {ICallExpressionNode} + * @returns {ESTree.CallExpression} */ public static getCallExpressionNode ( - callee: TExpression, - args: TExpression[] | ISpreadElementNode[] = [] - ): ICallExpressionNode { + callee: ESTree.Expression, + args: ESTree.Expression[] | ESTree.SpreadElement[] = [] + ): ESTree.CallExpression { return { type: NodeType.CallExpression, callee: callee, @@ -73,11 +57,11 @@ export class NodeMocks { /** * @param expression - * @returns {IExpressionStatementNode} + * @returns {ESTree.ExpressionStatement} */ public static getExpressionStatementNode ( - expression: TExpression = NodeMocks.getIdentifierNode() - ): IExpressionStatementNode { + expression: ESTree.Expression = NodeMocks.getIdentifierNode() + ): ESTree.ExpressionStatement { return { type: NodeType.ExpressionStatement, expression: expression @@ -88,13 +72,13 @@ export class NodeMocks { * @param functionName * @param blockStatementNode * @param params - * @returns {IFunctionDeclarationNode} + * @returns {ESTree.FunctionDeclaration} */ public static getFunctionDeclarationNode ( functionName: string, - blockStatementNode: IBlockStatementNode, - params: IIdentifierNode[] = [] - ): IFunctionDeclarationNode { + blockStatementNode: ESTree.BlockStatement, + params: ESTree.Identifier[] = [] + ): ESTree.FunctionDeclaration { return { type: NodeType.FunctionDeclaration, id: NodeMocks.getIdentifierNode(functionName), @@ -107,9 +91,9 @@ export class NodeMocks { /** * @param blockStatementNode - * @returns {IIfStatementNode} + * @returns {ESTree.IfStatement} */ - public static getIfStatementNode (blockStatementNode: IBlockStatementNode): IIfStatementNode { + public static getIfStatementNode (blockStatementNode: ESTree.BlockStatement): ESTree.IfStatement { return { type: 'IfStatement', test: { @@ -124,9 +108,9 @@ export class NodeMocks { /** * @param identifierName - * @returns {IIdentifierNode} + * @returns {ESTree.Identifier} */ - public static getIdentifierNode (identifierName: string = 'identifier'): IIdentifierNode { + public static getIdentifierNode (identifierName: string = 'identifier'): ESTree.Identifier { return { type: NodeType.Identifier, name: identifierName, @@ -135,9 +119,9 @@ export class NodeMocks { /** * @param value - * @returns {ILiteralNode} + * @returns {ESTree.Literal} */ - public static getLiteralNode (value: boolean|number|string = 'value'): ILiteralNode { + public static getLiteralNode (value: boolean|number|string = 'value'): ESTree.Literal { return { type: NodeType.Literal, value: value, @@ -152,12 +136,12 @@ export class NodeMocks { /** * @param object * @param property - * @return {IMemberExpressionNode} + * @return {ESTree.MemberExpression} */ public static getMemberExpressionNode ( - object: IIdentifierNode, - property: IIdentifierNode|ILiteralNode - ): IMemberExpressionNode { + object: ESTree.Identifier, + property: ESTree.Identifier|ESTree.Literal + ): ESTree.MemberExpression { return { type: NodeType.MemberExpression, computed: false, @@ -169,12 +153,12 @@ export class NodeMocks { /** * @param declarations * @param kind - * @returns {IVariableDeclarationNode} + * @returns {ESTree.VariableDeclaration} */ public static getVariableDeclarationNode ( - declarations: IVariableDeclaratorNode[] = [], + declarations: ESTree.VariableDeclarator[] = [], kind: string = 'var' - ): IVariableDeclarationNode { + ): ESTree.VariableDeclaration { return { type: NodeType.VariableDeclaration, declarations: declarations, @@ -185,9 +169,9 @@ export class NodeMocks { /** * @param id * @param init - * @returns {IVariableDeclaratorNode} + * @returns {ESTree.VariableDeclarator} */ - public static getVariableDeclaratorNode (id: IIdentifierNode, init: any): IVariableDeclaratorNode { + public static getVariableDeclaratorNode (id: ESTree.Identifier, init: any): ESTree.VariableDeclarator { return { type: NodeType.VariableDeclarator, id: id, diff --git a/test/unit-tests/NodeUtils.spec.ts b/test/unit-tests/NodeUtils.spec.ts index ba13a0b3..245bd47c 100644 --- a/test/unit-tests/NodeUtils.spec.ts +++ b/test/unit-tests/NodeUtils.spec.ts @@ -1,15 +1,5 @@ import * as chai from 'chai'; - -import { IBlockStatementNode } from "../../src/interfaces/nodes/IBlockStatementNode"; -import { IExpressionStatementNode } from "../../src/interfaces/nodes/IExpressionStatementNode"; -import { IFunctionDeclarationNode } from "../../src/interfaces/nodes/IFunctionDeclarationNode"; -import { IIdentifierNode } from "../../src/interfaces/nodes/IIdentifierNode"; -import { IIfStatementNode } from "../../src/interfaces/nodes/IIfStatementNode"; -import { ILiteralNode } from "../../src/interfaces/nodes/ILiteralNode"; -import { INode } from "../../src/interfaces/nodes/INode"; -import { IProgramNode } from "../../src/interfaces/nodes/IProgramNode"; -import { IVariableDeclarationNode } from "../../src/interfaces/nodes/IVariableDeclarationNode"; -import { IVariableDeclaratorNode } from "../../src/interfaces/nodes/IVariableDeclaratorNode"; +import * as ESTree from 'estree'; import { NodeMocks } from '../mocks/NodeMocks'; import { NodeUtils } from '../../src/NodeUtils'; @@ -19,7 +9,7 @@ chai.use(require('chai-members-deep')); const assert: any = chai.assert; describe('NodeUtils', () => { - describe('addXVerbatimPropertyToLiterals (node: INode): void', () => { + describe('addXVerbatimPropertyToLiterals (node: ESTree.Node): void', () => { let literalNode: any, expectedLiteralNode: any; @@ -37,10 +27,10 @@ describe('NodeUtils', () => { }); }); - describe('appendNode (blockScopeBody: INode[], node: INode): void', () => { - let blockStatementNode: IBlockStatementNode, - expectedBlockStatementNode: IBlockStatementNode, - expressionStatementNode: IExpressionStatementNode; + describe('appendNode (blockScopeBody: ESTree.Node[], node: ESTree.Node): void', () => { + let blockStatementNode: ESTree.BlockStatement, + expectedBlockStatementNode: ESTree.BlockStatement, + expressionStatementNode: ESTree.ExpressionStatement; beforeEach(() => { expressionStatementNode = NodeMocks.getExpressionStatementNode(); @@ -60,20 +50,20 @@ describe('NodeUtils', () => { it('should does not change `BlockStatement` node body if given node is not a valid Node', () => { assert.doesNotChange( - () => NodeUtils.appendNode(blockStatementNode.body, {}), + () => NodeUtils.appendNode(blockStatementNode.body, {}), blockStatementNode, 'body' ); }); }); - describe('convertCodeToStructure (code: string): INode', () => { + describe('convertCodeToStructure (code: string): ESTree.Node', () => { let code: string, - identifierNode: IIdentifierNode, - literalNode: ILiteralNode, - programNode: IProgramNode, - variableDeclarationNode: IVariableDeclarationNode, - variableDeclaratorNode: IVariableDeclaratorNode; + identifierNode: ESTree.Identifier, + literalNode: ESTree.Literal, + programNode: ESTree.Program, + variableDeclarationNode: ESTree.VariableDeclaration, + variableDeclaratorNode: ESTree.VariableDeclarator; beforeEach(() => { code = ` @@ -101,15 +91,15 @@ describe('NodeUtils', () => { literalNode['parentNode'] = variableDeclaratorNode; }); - it('should convert code to `INode` structure', () => { + it('should convert code to `ESTree.Node` structure', () => { assert.deepEqualIdent(NodeUtils.convertCodeToStructure(code), variableDeclarationNode); }); }); - describe('getBlockStatementNodeByIndex (node: INode, index: number = 0): INode', () => { - let blockStatementNode: IBlockStatementNode, - expressionStatementNode1: IExpressionStatementNode, - expressionStatementNode2: IExpressionStatementNode; + describe('getBlockStatementNodeByIndex (node: ESTree.Node, index: number = 0): ESTree.Node', () => { + let blockStatementNode: ESTree.BlockStatemen, + expressionStatementNode1: ESTree.ExpressionStatement, + expressionStatementNode2: ESTree.ExpressionStatement; beforeEach(() => { expressionStatementNode1 = NodeMocks.getExpressionStatementNode(); @@ -135,17 +125,17 @@ describe('NodeUtils', () => { }); }); - describe('getBlockScopeOfNode (node: INode, depth: number = 0): TNodeWithBlockStatement', () => { - let functionDeclarationBlockStatementNode: IBlockStatementNode, - ifStatementBlockStatementNode1: IBlockStatementNode, - ifStatementBlockStatementNode2: IBlockStatementNode, - ifStatementNode1: IIfStatementNode, - ifStatementNode2: IIfStatementNode, - expressionStatementNode1: IExpressionStatementNode, - expressionStatementNode2: IExpressionStatementNode, - expressionStatementNode3: IExpressionStatementNode, - functionDeclarationNode: IFunctionDeclarationNode, - programNode: IProgramNode; + describe('getBlockScopeOfNode (node: ESTree.Node, depth: number = 0): TNodeWithBlockStatement', () => { + let functionDeclarationBlockStatementNode: ESTree.BlockStatement, + ifStatementBlockStatementNode1: ESTree.BlockStatement, + ifStatementBlockStatementNode2: ESTree.BlockStatement, + ifStatementNode1: ESTree.IfStatement, + ifStatementNode2: ESTree.IfStatement, + expressionStatementNode1: ESTree.ExpressionStatement, + expressionStatementNode2: ESTree.ExpressionStatement, + expressionStatementNode3: ESTree.ExpressionStatement, + functionDeclarationNode: ESTree.FunctionDeclaration, + programNode: ESTree.Program; beforeEach(() => { expressionStatementNode1 = NodeMocks.getExpressionStatementNode(); @@ -201,11 +191,11 @@ describe('NodeUtils', () => { }); }); - describe('insertNodeAtIndex (blockScopeBody: INode[], node: INode, index: number): void', () => { - let blockStatementNode: IBlockStatementNode, - expectedBlockStatementNode: IBlockStatementNode, - expressionStatementNode1: IExpressionStatementNode, - expressionStatementNode2: IExpressionStatementNode; + describe('insertNodeAtIndex (blockScopeBody: ESTree.Node[], node: ESTree.Node, index: number): void', () => { + let blockStatementNode: ESTree.BlockStatement, + expectedBlockStatementNode: ESTree.BlockStatement, + expressionStatementNode1: ESTree.ExpressionStatement, + expressionStatementNode2: ESTree.ExpressionStatement; beforeEach(() => { expressionStatementNode1 = NodeMocks.getExpressionStatementNode(); @@ -229,19 +219,19 @@ describe('NodeUtils', () => { it('should does not change `BlockStatement` node body if given node is not a valid Node', () => { assert.doesNotChange( - () => NodeUtils.insertNodeAtIndex(blockStatementNode.body, {}, 1), + () => NodeUtils.insertNodeAtIndex(blockStatementNode.body, {}, 1), blockStatementNode, 'body' ); }); }); - describe('parentize (node: INode): void', () => { - let ifStatementNode: IIfStatementNode, - ifStatementBlockStatementNode: IBlockStatementNode, - expressionStatementNode1: IExpressionStatementNode, - expressionStatementNode2: IExpressionStatementNode, - programNode: IProgramNode; + describe('parentize (node: ESTree.Node): void', () => { + let ifStatementNode: ESTree.IfStatement, + ifStatementBlockStatementNode: ESTree.BlockStatement, + expressionStatementNode1: ESTree.ExpressionStatement, + expressionStatementNode2: ESTree.ExpressionStatement, + programNode: ESTree.Program; beforeEach(() => { expressionStatementNode1 = NodeMocks.getExpressionStatementNode(); @@ -284,11 +274,11 @@ describe('NodeUtils', () => { }); }); - describe('prependNode (blockScopeBody: INode[], node: INode): void', () => { - let blockStatementNode: IBlockStatementNode, - expectedBlockStatementNode: IBlockStatementNode, - expressionStatementNode1: IExpressionStatementNode, - expressionStatementNode2: IExpressionStatementNode; + describe('prependNode (blockScopeBody: ESTree.Node[], node: ESTree.Node): void', () => { + let blockStatementNode: ESTree.BlockStatement, + expectedBlockStatementNode: ESTree.BlockStatement, + expressionStatementNode1: ESTree.ExpressionStatement, + expressionStatementNode2: ESTree.ExpressionStatement; beforeEach(() => { expressionStatementNode1 = NodeMocks.getExpressionStatementNode(); @@ -312,7 +302,7 @@ describe('NodeUtils', () => { it('should does not change `BlockStatement` node body if given node is not a valid Node', () => { assert.doesNotChange( - () => NodeUtils.prependNode(blockStatementNode.body, {}), + () => NodeUtils.prependNode(blockStatementNode.body, {}), blockStatementNode, 'body' ); diff --git a/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts b/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts index 12291926..841de1e4 100644 --- a/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts +++ b/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts @@ -1,6 +1,6 @@ -import { ICatchClauseNode } from "../../../src/interfaces/nodes/ICatchClauseNode"; +import * as ESTree from 'estree'; + import { ICustomNode } from "../../../src/interfaces/custom-nodes/ICustomNode"; -import { IExpressionStatementNode } from "../../../src/interfaces/nodes/IExpressionStatementNode"; import { DEFAULT_PRESET } from "../../../src/preset-options/DefaultPreset"; @@ -15,10 +15,10 @@ const assert: Chai.AssertStatic = require('chai').assert; describe('CatchClauseObfuscator', () => { describe('obfuscateNode (catchClauseNode: ICatchClauseNode): void', () => { let catchClauseObfuscator: CatchClauseObfuscator, - catchClauseNode: ICatchClauseNode; + catchClauseNode: ESTree.CatchClause; beforeEach(() => { - let expressionStatementNode: IExpressionStatementNode = { + let expressionStatementNode: ESTree.ExpressionStatement = { type: NodeType.ExpressionStatement, expression: { type: NodeType.CallExpression, diff --git a/test/unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec.ts b/test/unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec.ts index c23132a3..61ccbc32 100644 --- a/test/unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec.ts +++ b/test/unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec.ts @@ -1,8 +1,6 @@ -import { IBlockStatementNode } from "../../../src/interfaces/nodes/IBlockStatementNode"; +import * as ESTree from 'estree'; + import { ICustomNode } from "../../../src/interfaces/custom-nodes/ICustomNode"; -import { IExpressionStatementNode } from "../../../src/interfaces/nodes/IExpressionStatementNode"; -import { IFunctionDeclarationNode } from "../../../src/interfaces/nodes/IFunctionDeclarationNode"; -import { IProgramNode } from "../../../src/interfaces/nodes/IProgramNode"; import { DEFAULT_PRESET } from "../../../src/preset-options/DefaultPreset"; @@ -14,11 +12,11 @@ const assert: Chai.AssertStatic = require('chai').assert; describe('FunctionDeclarationObfuscator', () => { describe('obfuscateNode (functionDeclarationNode: IFunctionDeclarationNode, parentNode: INode): void', () => { - let expressionStatementNode: IExpressionStatementNode, + let expressionStatementNode: ESTree.ExpressionStatement, functionDeclarationObfuscator: FunctionDeclarationObfuscator, - functionDeclarationNode: IFunctionDeclarationNode, + functionDeclarationNode: ESTree.FunctionDeclaration, functionName: string = 'functionDeclaration', - programNode: IProgramNode; + programNode: ESTree.Program; beforeEach(() => { expressionStatementNode = NodeMocks.getExpressionStatementNode( @@ -37,8 +35,8 @@ describe('FunctionDeclarationObfuscator', () => { }); describe('if `functionDeclaration` node parent node is not a Program node', () => { - let blockStatementNode: IBlockStatementNode, - functionDeclarationParentNode: IFunctionDeclarationNode; + let blockStatementNode: ESTree.BlockStatement, + functionDeclarationParentNode: ESTree.FunctionDeclaration; beforeEach(() => { blockStatementNode = NodeMocks.getBlockStatementNode([ diff --git a/test/unit-tests/node-obfuscators/FunctionObfuscator.spec.ts b/test/unit-tests/node-obfuscators/FunctionObfuscator.spec.ts index 65feca2b..0f12c141 100644 --- a/test/unit-tests/node-obfuscators/FunctionObfuscator.spec.ts +++ b/test/unit-tests/node-obfuscators/FunctionObfuscator.spec.ts @@ -1,9 +1,6 @@ -import { IBlockStatementNode } from "../../../src/interfaces/nodes/IBlockStatementNode"; +import * as ESTree from 'estree'; + import { ICustomNode } from "../../../src/interfaces/custom-nodes/ICustomNode"; -import { IExpressionStatementNode } from "../../../src/interfaces/nodes/IExpressionStatementNode"; -import { IFunctionDeclarationNode } from "../../../src/interfaces/nodes/IFunctionDeclarationNode"; -import { IIdentifierNode } from "../../../src/interfaces/nodes/IIdentifierNode"; -import { IProgramNode } from "../../../src/interfaces/nodes/IProgramNode"; import { DEFAULT_PRESET } from "../../../src/preset-options/DefaultPreset"; @@ -16,18 +13,18 @@ const assert: Chai.AssertStatic = require('chai').assert; describe('FunctionObfuscator', () => { describe('obfuscateNode (functionNode: IFunctionNode): void', () => { - let blockStatementNode: IBlockStatementNode, - expressionStatementNode1: IExpressionStatementNode, - expressionStatementNode2: IExpressionStatementNode, + let blockStatementNode: ESTree.BlockStatement, + expressionStatementNode1: ESTree.ExpressionStatement, + expressionStatementNode2: ESTree.ExpressionStatement, functionObfuscator: FunctionObfuscator, - functionDeclarationNode: IFunctionDeclarationNode, + functionDeclarationNode: ESTree.FunctionDeclaration, functionName: string = 'functionDeclaration', identifierName: string = 'identifierName', - identifierNode1: IIdentifierNode, - identifierNode2: IIdentifierNode, - identifierNode3: IIdentifierNode, + identifierNode1: ESTree.Identifier, + identifierNode2: ESTree.Identifier, + identifierNode3: ESTree.Identifier, paramName: string = 'param1', - programNode: IProgramNode; + programNode: ESTree.Program; before(() => { identifierNode1 = NodeMocks.getIdentifierNode(paramName); From bd441260d9e33a591b07247de974d1789abac848 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 12 Sep 2016 23:28:02 +0300 Subject: [PATCH 023/138] Migration to ESTree --- dist/index.js | 72 +++++++++---------- package.json | 3 +- src/NodeUtils.ts | 6 +- src/declarations/ESTree.d.ts | 17 +++++ src/interfaces/custom-nodes/ICustomNode.d.ts | 6 +- src/interfaces/nodes/ILiteral.d.ts | 5 -- src/interfaces/nodes/INode.d.ts | 5 -- test/mocks/NodeMocks.ts | 8 +-- test/unit-tests/NodeUtils.spec.ts | 6 +- .../CatchClauseObfuscator.spec.ts | 2 +- 10 files changed, 66 insertions(+), 64 deletions(-) create mode 100644 src/declarations/ESTree.d.ts delete mode 100644 src/interfaces/nodes/ILiteral.d.ts delete mode 100644 src/interfaces/nodes/INode.d.ts diff --git a/dist/index.js b/dist/index.js index cae3de23..01ebd910 100644 --- a/dist/index.js +++ b/dist/index.js @@ -745,7 +745,7 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { _inherits(IdentifierReplacer, _AbstractReplacer_1$A); function IdentifierReplacer() { - var _ref; + var _Object$getPrototypeO; _classCallCheck(this, IdentifierReplacer); @@ -753,7 +753,7 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_ref = IdentifierReplacer.__proto__ || Object.getPrototypeOf(IdentifierReplacer)).call.apply(_ref, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(IdentifierReplacer)).call.apply(_Object$getPrototypeO, [this].concat(args))); _this.namesMap = new Map(); return _this; @@ -814,7 +814,7 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { function StringLiteralReplacer() { _classCallCheck(this, StringLiteralReplacer); - return _possibleConstructorReturn(this, (StringLiteralReplacer.__proto__ || Object.getPrototypeOf(StringLiteralReplacer)).apply(this, arguments)); + return _possibleConstructorReturn(this, Object.getPrototypeOf(StringLiteralReplacer).apply(this, arguments)); } _createClass(StringLiteralReplacer, [{ @@ -1094,7 +1094,7 @@ var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { function NumberLiteralReplacer() { _classCallCheck(this, NumberLiteralReplacer); - return _possibleConstructorReturn(this, (NumberLiteralReplacer.__proto__ || Object.getPrototypeOf(NumberLiteralReplacer)).apply(this, arguments)); + return _possibleConstructorReturn(this, Object.getPrototypeOf(NumberLiteralReplacer).apply(this, arguments)); } _createClass(NumberLiteralReplacer, [{ @@ -1628,7 +1628,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { _inherits(ConsoleOutputDisableExpressionNode, _AbstractCustomNode_); function ConsoleOutputDisableExpressionNode() { - var _ref; + var _Object$getPrototypeO; _classCallCheck(this, ConsoleOutputDisableExpressionNode); @@ -1636,7 +1636,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_ref = ConsoleOutputDisableExpressionNode.__proto__ || Object.getPrototypeOf(ConsoleOutputDisableExpressionNode)).call.apply(_ref, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(ConsoleOutputDisableExpressionNode)).call.apply(_Object$getPrototypeO, [this].concat(args))); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; return _this; @@ -1686,7 +1686,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { function DebugProtectionFunctionCallNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionCallNode); - var _this = _possibleConstructorReturn(this, (DebugProtectionFunctionCallNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionCallNode)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionFunctionCallNode).call(this, options)); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; _this.debugProtectionFunctionName = debugProtectionFunctionName; @@ -1739,7 +1739,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { function DebugProtectionFunctionIntervalNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionIntervalNode); - var _this = _possibleConstructorReturn(this, (DebugProtectionFunctionIntervalNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionIntervalNode)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionFunctionIntervalNode).call(this, options)); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; _this.debugProtectionFunctionName = debugProtectionFunctionName; @@ -1793,7 +1793,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { function DebugProtectionFunctionNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionNode); - var _this = _possibleConstructorReturn(this, (DebugProtectionFunctionNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionNode)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionFunctionNode).call(this, options)); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; _this.debugProtectionFunctionName = debugProtectionFunctionName; @@ -1857,7 +1857,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { _inherits(DomainLockNode, _AbstractCustomNode_); function DomainLockNode() { - var _ref; + var _Object$getPrototypeO; _classCallCheck(this, DomainLockNode); @@ -1865,7 +1865,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_ref = DomainLockNode.__proto__ || Object.getPrototypeOf(DomainLockNode)).call.apply(_ref, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(DomainLockNode)).call.apply(_Object$getPrototypeO, [this].concat(args))); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; return _this; @@ -1926,7 +1926,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); function SelfDefendingUnicodeNode() { - var _ref; + var _Object$getPrototypeO; _classCallCheck(this, SelfDefendingUnicodeNode); @@ -1934,7 +1934,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_ref = SelfDefendingUnicodeNode.__proto__ || Object.getPrototypeOf(SelfDefendingUnicodeNode)).call.apply(_ref, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(SelfDefendingUnicodeNode)).call.apply(_Object$getPrototypeO, [this].concat(args))); _this.appendState = AppendState_1.AppendState.AfterObfuscation; return _this; @@ -1995,7 +1995,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { function UnicodeArrayCallsWrapper(unicodeArrayCallsWrapperName, unicodeArrayName, unicodeArray, options) { _classCallCheck(this, UnicodeArrayCallsWrapper); - var _this = _possibleConstructorReturn(this, (UnicodeArrayCallsWrapper.__proto__ || Object.getPrototypeOf(UnicodeArrayCallsWrapper)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayCallsWrapper).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArrayCallsWrapperName = unicodeArrayCallsWrapperName; @@ -2020,7 +2020,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { }, { key: "getNode", value: function getNode() { - return _get(UnicodeArrayCallsWrapper.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayCallsWrapper.prototype), "getNode", this).call(this); + return _get(Object.getPrototypeOf(UnicodeArrayCallsWrapper.prototype), "getNode", this).call(this); } }, { key: "getNodeStructure", @@ -2072,7 +2072,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { function UnicodeArrayDecodeNode(unicodeArrayName, unicodeArray, options) { _classCallCheck(this, UnicodeArrayDecodeNode); - var _this = _possibleConstructorReturn(this, (UnicodeArrayDecodeNode.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayDecodeNode).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArrayName = unicodeArrayName; @@ -2091,7 +2091,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { }, { key: "getNode", value: function getNode() { - return _get(UnicodeArrayDecodeNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), "getNode", this).call(this); + return _get(Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), "getNode", this).call(this); } }, { key: "getNodeStructure", @@ -2152,7 +2152,7 @@ var UnicodeArrayNode = function (_AbstractCustomNode_) { _classCallCheck(this, UnicodeArrayNode); - var _this = _possibleConstructorReturn(this, (UnicodeArrayNode.__proto__ || Object.getPrototypeOf(UnicodeArrayNode)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayNode).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArray = unicodeArray; @@ -2183,7 +2183,7 @@ var UnicodeArrayNode = function (_AbstractCustomNode_) { key: 'getNode', value: function getNode() { this.unicodeArray.rotateArray(this.unicodeArrayRotateValue); - return _get(UnicodeArrayNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayNode.prototype), 'getNode', this).call(this); + return _get(Object.getPrototypeOf(UnicodeArrayNode.prototype), 'getNode', this).call(this); } }, { key: 'updateNodeData', @@ -2239,7 +2239,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { function UnicodeArrayRotateFunctionNode(unicodeArrayName, unicodeArray, unicodeArrayRotateValue, options) { _classCallCheck(this, UnicodeArrayRotateFunctionNode); - var _this = _possibleConstructorReturn(this, (UnicodeArrayRotateFunctionNode.__proto__ || Object.getPrototypeOf(UnicodeArrayRotateFunctionNode)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayRotateFunctionNode).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArrayName = unicodeArrayName; @@ -2259,7 +2259,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { }, { key: "getNode", value: function getNode() { - return _get(UnicodeArrayRotateFunctionNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayRotateFunctionNode.prototype), "getNode", this).call(this); + return _get(Object.getPrototypeOf(UnicodeArrayRotateFunctionNode.prototype), "getNode", this).call(this); } }, { key: "getNodeStructure", @@ -2312,7 +2312,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { function ConsoleOutputNodesGroup(options) { _classCallCheck(this, ConsoleOutputNodesGroup); - var _this = _possibleConstructorReturn(this, (ConsoleOutputNodesGroup.__proto__ || Object.getPrototypeOf(ConsoleOutputNodesGroup)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ConsoleOutputNodesGroup).call(this, options)); if (!_this.options.disableConsoleOutput) { return _possibleConstructorReturn(_this); @@ -2351,7 +2351,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { function DebugProtectionNodesGroup(options) { _classCallCheck(this, DebugProtectionNodesGroup); - var _this = _possibleConstructorReturn(this, (DebugProtectionNodesGroup.__proto__ || Object.getPrototypeOf(DebugProtectionNodesGroup)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionNodesGroup).call(this, options)); _this.debugProtectionFunctionIdentifier = Utils_1.Utils.getRandomVariableName(); if (!_this.options.debugProtection) { @@ -2392,7 +2392,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { function DomainLockNodesGroup(options) { _classCallCheck(this, DomainLockNodesGroup); - var _this = _possibleConstructorReturn(this, (DomainLockNodesGroup.__proto__ || Object.getPrototypeOf(DomainLockNodesGroup)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DomainLockNodesGroup).call(this, options)); if (!_this.options.domainLock.length) { return _possibleConstructorReturn(_this); @@ -2428,7 +2428,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { function SelfDefendingNodesGroup(options) { _classCallCheck(this, SelfDefendingNodesGroup); - var _this = _possibleConstructorReturn(this, (SelfDefendingNodesGroup.__proto__ || Object.getPrototypeOf(SelfDefendingNodesGroup)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(SelfDefendingNodesGroup).call(this, options)); if (!_this.options.selfDefending) { return _possibleConstructorReturn(_this); @@ -2469,7 +2469,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { function UnicodeArrayNodesGroup(options) { _classCallCheck(this, UnicodeArrayNodesGroup); - var _this = _possibleConstructorReturn(this, (UnicodeArrayNodesGroup.__proto__ || Object.getPrototypeOf(UnicodeArrayNodesGroup)).call(this, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayNodesGroup).call(this, options)); _this.unicodeArrayName = Utils_1.Utils.getRandomVariableName(UnicodeArrayNode_1.UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH); _this.unicodeArrayTranslatorName = Utils_1.Utils.getRandomVariableName(UnicodeArrayNode_1.UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH); @@ -2532,7 +2532,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { function CatchClauseObfuscator(nodes, options) { _classCallCheck(this, CatchClauseObfuscator); - var _this = _possibleConstructorReturn(this, (CatchClauseObfuscator.__proto__ || Object.getPrototypeOf(CatchClauseObfuscator)).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(CatchClauseObfuscator).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -2603,7 +2603,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { function FunctionDeclarationObfuscator(nodes, options) { _classCallCheck(this, FunctionDeclarationObfuscator); - var _this = _possibleConstructorReturn(this, (FunctionDeclarationObfuscator.__proto__ || Object.getPrototypeOf(FunctionDeclarationObfuscator)).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionDeclarationObfuscator).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -2678,7 +2678,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { function FunctionObfuscator(nodes, options) { _classCallCheck(this, FunctionObfuscator); - var _this = _possibleConstructorReturn(this, (FunctionObfuscator.__proto__ || Object.getPrototypeOf(FunctionObfuscator)).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionObfuscator).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -2757,7 +2757,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { function LiteralObfuscator() { _classCallCheck(this, LiteralObfuscator); - return _possibleConstructorReturn(this, (LiteralObfuscator.__proto__ || Object.getPrototypeOf(LiteralObfuscator)).apply(this, arguments)); + return _possibleConstructorReturn(this, Object.getPrototypeOf(LiteralObfuscator).apply(this, arguments)); } _createClass(LiteralObfuscator, [{ @@ -2820,7 +2820,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { function MemberExpressionObfuscator() { _classCallCheck(this, MemberExpressionObfuscator); - return _possibleConstructorReturn(this, (MemberExpressionObfuscator.__proto__ || Object.getPrototypeOf(MemberExpressionObfuscator)).apply(this, arguments)); + return _possibleConstructorReturn(this, Object.getPrototypeOf(MemberExpressionObfuscator).apply(this, arguments)); } _createClass(MemberExpressionObfuscator, [{ @@ -2902,7 +2902,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MethodDefinitionObfuscator, _AbstractNodeObfuscat); function MethodDefinitionObfuscator() { - var _ref; + var _Object$getPrototypeO; _classCallCheck(this, MethodDefinitionObfuscator); @@ -2910,7 +2910,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_ref = MethodDefinitionObfuscator.__proto__ || Object.getPrototypeOf(MethodDefinitionObfuscator)).call.apply(_ref, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(MethodDefinitionObfuscator)).call.apply(_Object$getPrototypeO, [this].concat(args))); _this.ignoredNames = ['constructor']; return _this; @@ -2972,7 +2972,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { function ObjectExpressionObfuscator() { _classCallCheck(this, ObjectExpressionObfuscator); - return _possibleConstructorReturn(this, (ObjectExpressionObfuscator.__proto__ || Object.getPrototypeOf(ObjectExpressionObfuscator)).apply(this, arguments)); + return _possibleConstructorReturn(this, Object.getPrototypeOf(ObjectExpressionObfuscator).apply(this, arguments)); } _createClass(ObjectExpressionObfuscator, [{ @@ -3055,7 +3055,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { function VariableDeclarationObfuscator(nodes, options) { _classCallCheck(this, VariableDeclarationObfuscator); - var _this = _possibleConstructorReturn(this, (VariableDeclarationObfuscator.__proto__ || Object.getPrototypeOf(VariableDeclarationObfuscator)).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(VariableDeclarationObfuscator).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -3141,7 +3141,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { function BooleanLiteralReplacer() { _classCallCheck(this, BooleanLiteralReplacer); - return _possibleConstructorReturn(this, (BooleanLiteralReplacer.__proto__ || Object.getPrototypeOf(BooleanLiteralReplacer)).apply(this, arguments)); + return _possibleConstructorReturn(this, Object.getPrototypeOf(BooleanLiteralReplacer).apply(this, arguments)); } _createClass(BooleanLiteralReplacer, [{ diff --git a/package.json b/package.json index dd43d4b0..c546f53f 100644 --- a/package.json +++ b/package.json @@ -42,13 +42,12 @@ "@types/joi": "^9.0.31", "@types/mkdirp": "^0.3.28", "@types/mocha": "^2.2.31", - "@types/node": "^6.0.38", + "@types/node": "^4.0.30", "@types/sinon": "^1.16.29", "babel-cli": "^6.14.0", "babel-loader": "^6.2.5", "babel-preset-es2015": "^6.13.2", "chai": "^3.5.0", - "chai-members-deep": "^1.1.0", "coveralls": "^2.11.12", "istanbul": "1.1.0-alpha.1", "mocha": "^3.0.2", diff --git a/src/NodeUtils.ts b/src/NodeUtils.ts index 95e28959..cf83cecf 100644 --- a/src/NodeUtils.ts +++ b/src/NodeUtils.ts @@ -84,18 +84,18 @@ export class NodeUtils { * @returns {ESTree.Node} */ public static getBlockScopeOfNode (node: ESTree.Node, depth: number = 0): TNodeWithBlockStatement { - let parentNode: ESTree.Node | undefined = node['parentNode']; + let parentNode: ESTree.Node | undefined = node.parentNode; if (!parentNode) { throw new ReferenceError('`parentNode` property of given node is `undefined`'); } if (Nodes.isBlockStatementNode(parentNode)) { - if (!parentNode['parentNode']) { + if (!parentNode.parentNode) { throw new ReferenceError('`parentNode` property of `parentNode` of given node is `undefined`'); } - if (!Utils.arrayContains(NodeUtils.nodesWithBlockScope, parentNode['parentNode'].type)) { + if (!Utils.arrayContains(NodeUtils.nodesWithBlockScope, parentNode.parentNode.type)) { return NodeUtils.getBlockScopeOfNode(parentNode, depth); } else if (depth > 0) { return NodeUtils.getBlockScopeOfNode(parentNode, --depth); diff --git a/src/declarations/ESTree.d.ts b/src/declarations/ESTree.d.ts new file mode 100644 index 00000000..3fa92514 --- /dev/null +++ b/src/declarations/ESTree.d.ts @@ -0,0 +1,17 @@ +/* tslint:disable:interface-name */ + +import * as ESTree from 'estree'; + +declare module 'estree' { + interface BaseNode { + parentNode?: ESTree.Node; + } + + interface SimpleLiteral extends ESTree.BaseNode, ESTree.BaseExpression { + 'x-verbatim-property'?: any; + } + + interface RegExpLiteral extends ESTree.BaseNode, ESTree.BaseExpression { + 'x-verbatim-property'?: any; + } +} diff --git a/src/interfaces/custom-nodes/ICustomNode.d.ts b/src/interfaces/custom-nodes/ICustomNode.d.ts index 30108054..b9c70ace 100644 --- a/src/interfaces/custom-nodes/ICustomNode.d.ts +++ b/src/interfaces/custom-nodes/ICustomNode.d.ts @@ -1,4 +1,4 @@ -import { INode } from '../nodes/INode'; +import * as ESTree from 'estree'; import { AppendState } from '../../enums/AppendState'; @@ -6,7 +6,7 @@ export interface ICustomNode { /** * @param astTree */ - appendNode (astTree: INode): void; + appendNode (astTree: ESTree.Node): void; /** * @returns {AppendState} @@ -16,5 +16,5 @@ export interface ICustomNode { /** * @returns INode */ - getNode (): INode; + getNode (): ESTree.Node; } diff --git a/src/interfaces/nodes/ILiteral.d.ts b/src/interfaces/nodes/ILiteral.d.ts deleted file mode 100644 index 417bc966..00000000 --- a/src/interfaces/nodes/ILiteral.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as ESTree from 'estree'; - -interface ILiteral extends ESTree.SimpleLiteral { - 'x-verbatim-property'?: any; -} diff --git a/src/interfaces/nodes/INode.d.ts b/src/interfaces/nodes/INode.d.ts deleted file mode 100644 index 9fa3e893..00000000 --- a/src/interfaces/nodes/INode.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as ESTree from 'estree'; - -export interface INode extends ESTree.BaseNode { - parentNode?: ESTree.Node; -} diff --git a/test/mocks/NodeMocks.ts b/test/mocks/NodeMocks.ts index 575f1470..499b52c2 100644 --- a/test/mocks/NodeMocks.ts +++ b/test/mocks/NodeMocks.ts @@ -84,8 +84,7 @@ export class NodeMocks { id: NodeMocks.getIdentifierNode(functionName), params: params, body: blockStatementNode, - generator: false, - expression: false + generator: false }; } @@ -101,8 +100,7 @@ export class NodeMocks { value: true, raw: 'true' }, - consequent: blockStatementNode, - alternate: null + consequent: blockStatementNode }; } @@ -157,7 +155,7 @@ export class NodeMocks { */ public static getVariableDeclarationNode ( declarations: ESTree.VariableDeclarator[] = [], - kind: string = 'var' + kind: 'var' | 'let' | 'const' = 'var' ): ESTree.VariableDeclaration { return { type: NodeType.VariableDeclaration, diff --git a/test/unit-tests/NodeUtils.spec.ts b/test/unit-tests/NodeUtils.spec.ts index 245bd47c..8586360e 100644 --- a/test/unit-tests/NodeUtils.spec.ts +++ b/test/unit-tests/NodeUtils.spec.ts @@ -4,8 +4,6 @@ import * as ESTree from 'estree'; import { NodeMocks } from '../mocks/NodeMocks'; import { NodeUtils } from '../../src/NodeUtils'; -chai.use(require('chai-members-deep')); - const assert: any = chai.assert; describe('NodeUtils', () => { @@ -92,12 +90,12 @@ describe('NodeUtils', () => { }); it('should convert code to `ESTree.Node` structure', () => { - assert.deepEqualIdent(NodeUtils.convertCodeToStructure(code), variableDeclarationNode); + assert.deepEqual(NodeUtils.convertCodeToStructure(code), variableDeclarationNode); }); }); describe('getBlockStatementNodeByIndex (node: ESTree.Node, index: number = 0): ESTree.Node', () => { - let blockStatementNode: ESTree.BlockStatemen, + let blockStatementNode: ESTree.BlockStatement, expressionStatementNode1: ESTree.ExpressionStatement, expressionStatementNode2: ESTree.ExpressionStatement; diff --git a/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts b/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts index 841de1e4..5c33508d 100644 --- a/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts +++ b/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts @@ -64,7 +64,7 @@ describe('CatchClauseObfuscator', () => { it('should obfuscate catch clause param calls in catch clause node body', () => { assert.match( - catchClauseNode.param.name, + (catchClauseNode.param).name, /^_0x\w+$/ ); }); From 1a4f753b8dcdfeae5eae04fa41f0430811917400 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 12 Sep 2016 23:48:03 +0300 Subject: [PATCH 024/138] Migration to ESTree --- package.json | 1 + webpack.config.js | 10 +++------- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index c546f53f..a9d26512 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@types/escodegen": "^0.0.5", "@types/esprima": "^2.1.31", "@types/estraverse": "^0.0.5", + "@types/estree": "^0.0.32", "@types/format-unicorn": "^0.0.28", "@types/joi": "^9.0.31", "@types/mkdirp": "^0.3.28", diff --git a/webpack.config.js b/webpack.config.js index 036f0f17..2689f82d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,15 +1,11 @@ 'use strict'; -let fs = require("fs"), +var fs = require("fs"), nodeExternals = require('webpack-node-externals'), webpack = require('webpack'); function getLicenseText () { - return `/* -Copyright (C) 2016 Timofey Kachalov - -${fs.readFileSync('./LICENSE.BSD', 'utf8')} -*/`; + return "/*\nCopyright (C) 2016 Timofey Kachalov \n\n" + fs.readFileSync('./LICENSE.BSD', 'utf8') + "\n*/"; } module.exports = { @@ -31,7 +27,7 @@ module.exports = { plugins: [ new webpack.BannerPlugin( { - banner: `${getLicenseText()}\n\nrequire("source-map-support").install();\n`, + banner: getLicenseText() + '\n\nrequire("source-map-support").install();\n', raw: true, entryOnly: false } From 2dd6f91b7ff03e9acfec67727ee0186b8b541f77 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 18 Sep 2016 13:33:29 +0300 Subject: [PATCH 025/138] `sourceMapBaseUrl` wip implementation --- README.md | 7 ++ dist/index.js | 84 +++++++++++++++++-- package.json | 2 +- src/JavaScriptObfuscatorInternal.ts | 4 + src/Utils.ts | 72 +++++++++------- src/cli/JavaScriptObfuscatorCLI.ts | 1 + src/interfaces/IObfuscatorOptions.d.ts | 1 + src/interfaces/IOptions.d.ts | 1 + src/options/Options.ts | 25 +++++- src/options/OptionsNormalizer.ts | 43 ++++++++++ src/preset-options/DefaultPreset.ts | 1 + src/preset-options/NoCustomNodesPreset.ts | 1 + .../JavaScriptObfuscatorCLI.spec.ts | 27 ++++++ .../JavaScriptObfuscatorInternal.spec.ts | 28 ++++++- test/unit-tests/OptionsNormalizer.spec.ts | 6 ++ test/unit-tests/Utils.spec.ts | 10 +++ 16 files changed, 273 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index b847c398..f33e5557 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,7 @@ Following options available for the JS Obfuscator: rotateUnicodeArray: true, selfDefending: true, sourceMap: false, + sourceMapBaseUrl: '', sourceMapMode: 'separate', unicodeArray: true, unicodeArrayThreshold: 0.8, @@ -137,6 +138,7 @@ Following options available for the JS Obfuscator: --rotateUnicodeArray --selfDefending --sourceMap + --sourceMapBaseUrl --sourceMapMode [inline, separate] --unicodeArray --unicodeArrayThreshold @@ -220,6 +222,11 @@ Type: `boolean` Default: `false` Enables source map generation for obfuscated code. +### `sourceMapBaseUrl` +Type: `string` Default: `` + +Inserts custom Url for source map + ### `sourceMapMode` Type: `string` Default: `separate` diff --git a/dist/index.js b/dist/index.js index 01ebd910..e158075a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -145,6 +145,18 @@ var Utils = function () { var radix = 16; return Number(dec).toString(radix); } + }, { + key: 'extractDomainFromUrl', + value: function extractDomainFromUrl(url) { + var domain = void 0; + if (url.indexOf('://') > -1 || url.indexOf('//') === 0) { + domain = url.split('/')[2]; + } else { + domain = url.split('/')[0]; + } + domain = domain.split(':')[0]; + return domain; + } }, { key: 'getRandomGenerator', value: function getRandomGenerator() { @@ -183,9 +195,9 @@ var Utils = function () { return result; }; var customPool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; - var randomString = Utils.randomGenerator.string({ length: length, pool: customPool }); - var randomStringDiff = randomString.replace(new RegExp('[' + escapeRegExp(str) + ']', 'g'), ''); - var randomStringDiffArray = randomStringDiff.split(''); + var randomString = Utils.randomGenerator.string({ length: length, pool: customPool }), + randomStringDiff = randomString.replace(new RegExp('[' + escapeRegExp(str) + ']', 'g'), ''), + randomStringDiffArray = randomStringDiff.split(''); Utils.randomGenerator.shuffle(randomStringDiffArray); randomStringDiff = randomStringDiffArray.join(''); return [randomMerge(str, randomStringDiff), randomStringDiff]; @@ -883,6 +895,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ rotateUnicodeArray: false, selfDefending: false, sourceMap: false, + sourceMapBaseUrl: '', sourceMapMode: SourceMapMode_1.SourceMapMode.Separate, unicodeArray: false, unicodeArrayThreshold: 0, @@ -921,6 +934,9 @@ var JavaScriptObfuscatorInternal = function () { _createClass(JavaScriptObfuscatorInternal, [{ key: 'getObfuscationResult', value: function getObfuscationResult() { + if (this.options.sourceMapBaseUrl) { + this.setSourceMapUrl(this.options.sourceMapBaseUrl); + } return new SourceMapCorrector_1.SourceMapCorrector(new ObfuscationResult_1.ObfuscationResult(this.generatorOutput.code, this.generatorOutput.map), this.sourceMapUrl, this.options.sourceMapMode).correct(); } }, { @@ -1132,6 +1148,7 @@ exports.DEFAULT_PRESET = Object.freeze({ rotateUnicodeArray: true, selfDefending: true, sourceMap: false, + sourceMapBaseUrl: '', sourceMapMode: SourceMapMode_1.SourceMapMode.Separate, unicodeArray: true, unicodeArrayThreshold: 0.8, @@ -1528,7 +1545,7 @@ var JavaScriptObfuscatorCLI = function () { value: function configureCommands() { this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); - }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { + }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Inserts custom Url for source map').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); }).parse(this.rawArguments); this.commands.on('--help', function () { @@ -3213,6 +3230,12 @@ __decorate([class_validator_1.IsString({ __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "rotateUnicodeArray", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "selfDefending", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "sourceMap", void 0); +__decorate([class_validator_1.IsString(), class_validator_1.ValidateIf(function (options) { + return Boolean(options.sourceMapBaseUrl); +}), class_validator_1.IsUrl({ + require_protocol: false, + require_valid_protocol: true +}), __metadata('design:type', String)], Options.prototype, "sourceMapBaseUrl", void 0); __decorate([class_validator_1.IsIn(['inline', 'separate']), __metadata('design:type', String)], Options.prototype, "sourceMapMode", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "unicodeArray", void 0); __decorate([class_validator_1.IsNumber(), class_validator_1.Min(0), class_validator_1.Max(1), __metadata('design:type', Number)], Options.prototype, "unicodeArrayThreshold", void 0); @@ -3221,7 +3244,7 @@ exports.Options = Options; /***/ }, /* 55 */ -/***/ function(module, exports) { +/***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; @@ -3230,6 +3253,8 @@ 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 Utils_1 = __webpack_require__(0); + var OptionsNormalizer = function () { function OptionsNormalizer() { _classCallCheck(this, OptionsNormalizer); @@ -3266,6 +3291,42 @@ var OptionsNormalizer = function () { return normalizedOptions; } + }, { + key: "domainLockRule", + value: function domainLockRule(options) { + if (options.domainLock.length) { + var normalizedDomains = []; + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = options.domainLock[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var domain = _step2.value; + + normalizedDomains.push(Utils_1.Utils.extractDomainFromUrl(domain)); + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + Object.assign(options, { + domainLock: normalizedDomains + }); + } + return options; + } }, { key: "encodeUnicodeLiteralsRule", value: function encodeUnicodeLiteralsRule(options) { @@ -3282,6 +3343,14 @@ var OptionsNormalizer = function () { } return options; } + }, { + key: "sourceMapBaseUrl", + value: function sourceMapBaseUrl(options) { + if (options.sourceMapBaseUrl) { + Object.assign(options, OptionsNormalizer.SOURCE_MAP_BASE_URL_OPTIONS); + } + return options; + } }, { key: "unicodeArrayRule", value: function unicodeArrayRule(options) { @@ -3318,7 +3387,10 @@ OptionsNormalizer.SELF_DEFENDING_OPTIONS = { compact: true, selfDefending: true }; -OptionsNormalizer.normalizerRules = [OptionsNormalizer.unicodeArrayRule, OptionsNormalizer.unicodeArrayThresholdRule, OptionsNormalizer.encodeUnicodeLiteralsRule, OptionsNormalizer.selfDefendingRule]; +OptionsNormalizer.SOURCE_MAP_BASE_URL_OPTIONS = { + sourceMapMode: 'separate' +}; +OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNormalizer.unicodeArrayRule, OptionsNormalizer.unicodeArrayThresholdRule, OptionsNormalizer.encodeUnicodeLiteralsRule, OptionsNormalizer.sourceMapBaseUrl, OptionsNormalizer.selfDefendingRule]; exports.OptionsNormalizer = OptionsNormalizer; /***/ }, diff --git a/package.json b/package.json index a9d26512..23cc3680 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "dependencies": { "babel-polyfill": "^6.13.0", "chance": "^1.0.4", - "class-validator": "^0.5.0", + "class-validator": "next", "commander": "^2.9.0", "escodegen": "^1.8.1", "esprima": "^3.0.0", diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index 951c14f4..73ff8f58 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/src/JavaScriptObfuscatorInternal.ts @@ -84,6 +84,10 @@ export class JavaScriptObfuscatorInternal { * @returns {IObfuscationResult} */ public getObfuscationResult (): IObfuscationResult { + if (this.options.sourceMapBaseUrl) { + this.setSourceMapUrl(this.options.sourceMapBaseUrl); + } + return new SourceMapCorrector( new ObfuscationResult( this.generatorOutput.code, diff --git a/src/Utils.ts b/src/Utils.ts index 1a55555a..c891c92f 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -62,6 +62,24 @@ export class Utils { return Number(dec).toString(radix); } + /** + * @param url + * @returns {string} + */ + public static extractDomainFromUrl (url: string): string { + let domain: string; + + if (url.indexOf('://') > -1 || url.indexOf('//') === 0) { + domain = url.split('/')[2]; + } else { + domain = url.split('/')[0]; + } + + domain = domain.split(':')[0]; + + return domain; + } + /** * @returns {Chance.Chance} */ @@ -71,7 +89,7 @@ export class Utils { /** * @param length - * @returns any + * @returns {string} */ public static getRandomVariableName (length: number = 6): string { const rangeMinInteger: number = 10000, @@ -89,42 +107,40 @@ export class Utils { } /** + * @param str * @param length - * @param charSet - * @returns string + * @returns {string[]} */ public static hideString(str: string, length: number): [string, string] { + const escapeRegExp = (s: string) => + s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - // from http://stackoverflow.com/a/3561711 - const escapeRegExp = (s: string) => - s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + const randomMerge = function (s1: string, s2: string): string { + let i1 = -1, i2 = -1, result = ''; - const randomMerge = function (s1: string, s2: string): string { - let i1 = -1, i2 = -1, result = ''; - while (i1 < s1.length || i2 < s2.length) { - if (Math.random() < 0.5 && i2 < s2.length) { - result += s2.charAt(++i2); - } else { - result += s1.charAt(++i1); - } - } - return result; - } + while (i1 < s1.length || i2 < s2.length) { + if (Math.random() < 0.5 && i2 < s2.length) { + result += s2.charAt(++i2); + } else { + result += s1.charAt(++i1); + } + } - // here we need a custom pool parameter because the default on from Change.string - // can return chars that break the RegExp - const customPool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; - let randomString = Utils.randomGenerator.string({length: length, pool: customPool}); + return result; + }; - let randomStringDiff = randomString.replace( - new RegExp('[' + escapeRegExp(str) + ']', 'g'), - ''); + const customPool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; - let randomStringDiffArray = randomStringDiff.split(''); - Utils.randomGenerator.shuffle(randomStringDiffArray); - randomStringDiff = randomStringDiffArray.join(''); + let randomString = Utils.randomGenerator.string({length: length, pool: customPool}), + randomStringDiff = randomString.replace( + new RegExp('[' + escapeRegExp(str) + ']', 'g'), + ''), + randomStringDiffArray = randomStringDiff.split(''); - return [randomMerge(str, randomStringDiff), randomStringDiff]; + Utils.randomGenerator.shuffle(randomStringDiffArray); + randomStringDiff = randomStringDiffArray.join(''); + + return [randomMerge(str, randomStringDiff), randomStringDiff]; } diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index 9f550da6..ebe7e550 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -132,6 +132,7 @@ export class JavaScriptObfuscatorCLI { .option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean) .option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean) .option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean) + .option('--sourceMapBaseUrl ', 'Inserts custom Url for source map') .option( '--sourceMapMode [inline, separate]', 'Specify source map output mode', diff --git a/src/interfaces/IObfuscatorOptions.d.ts b/src/interfaces/IObfuscatorOptions.d.ts index a6671830..751100e8 100644 --- a/src/interfaces/IObfuscatorOptions.d.ts +++ b/src/interfaces/IObfuscatorOptions.d.ts @@ -10,6 +10,7 @@ export interface IObfuscatorOptions { rotateUnicodeArray?: boolean; selfDefending?: boolean; sourceMap?: boolean; + sourceMapBaseUrl?: string; sourceMapMode?: TSourceMapMode; unicodeArray?: boolean; unicodeArrayThreshold?: number; diff --git a/src/interfaces/IOptions.d.ts b/src/interfaces/IOptions.d.ts index 7e078265..509af4db 100644 --- a/src/interfaces/IOptions.d.ts +++ b/src/interfaces/IOptions.d.ts @@ -10,6 +10,7 @@ export interface IOptions { readonly rotateUnicodeArray: boolean; readonly selfDefending: boolean; readonly sourceMap: boolean; + readonly sourceMapBaseUrl: string; readonly sourceMapMode: TSourceMapMode; readonly unicodeArray: boolean; readonly unicodeArrayThreshold: number; diff --git a/src/options/Options.ts b/src/options/Options.ts index cc7133f3..740cbd18 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -1,4 +1,16 @@ -import { IsBoolean, IsIn, IsNumber, IsString, Min, Max, validateSync, ValidationError, ValidatorOptions } from 'class-validator'; +import { + IsBoolean, + IsIn, + IsNumber, + IsString, + IsUrl, + Min, + Max, + ValidateIf, + validateSync, + ValidationError, + ValidatorOptions +} from 'class-validator'; import { IObfuscatorOptions } from "../interfaces/IObfuscatorOptions"; import { IOptions } from "../interfaces/IOptions"; @@ -84,6 +96,17 @@ export class Options implements IOptions { @IsBoolean() public readonly sourceMap: boolean; + /** + * @type {boolean} + */ + @IsString() + @ValidateIf((options: IOptions) => Boolean(options.sourceMapBaseUrl)) + @IsUrl({ + require_protocol: false, + require_valid_protocol: true + }) + public readonly sourceMapBaseUrl: string; + /** * @type {TSourceMapMode} */ diff --git a/src/options/OptionsNormalizer.ts b/src/options/OptionsNormalizer.ts index 08cc401d..caec3a04 100644 --- a/src/options/OptionsNormalizer.ts +++ b/src/options/OptionsNormalizer.ts @@ -3,6 +3,8 @@ import { IOptions } from "../interfaces/IOptions"; import { TOptionsNormalizerRule } from "../types/TOptionsNormalizerRule"; +import { Utils } from "../Utils"; + export class OptionsNormalizer { /** * @type {IObfuscatorOptions} @@ -31,13 +33,22 @@ export class OptionsNormalizer { selfDefending: true }; + /** + * @type {IObfuscatorOptions} + */ + private static SOURCE_MAP_BASE_URL_OPTIONS: IObfuscatorOptions = { + sourceMapMode: 'separate' + }; + /** * @type {TOptionsNormalizerRule[]} */ private static normalizerRules: TOptionsNormalizerRule[] = [ + OptionsNormalizer.domainLockRule, OptionsNormalizer.unicodeArrayRule, OptionsNormalizer.unicodeArrayThresholdRule, OptionsNormalizer.encodeUnicodeLiteralsRule, + OptionsNormalizer.sourceMapBaseUrl, OptionsNormalizer.selfDefendingRule ]; @@ -55,6 +66,26 @@ export class OptionsNormalizer { return normalizedOptions; } + /** + * @param options + * @returns {IOptions} + */ + private static domainLockRule (options: IOptions): IOptions { + if (options.domainLock.length) { + let normalizedDomains: string[] = []; + + for (let domain of options.domainLock) { + normalizedDomains.push(Utils.extractDomainFromUrl(domain)); + } + + Object.assign(options, { + domainLock: normalizedDomains + }); + } + + return options; + } + /** * @param options * @returns {IOptions} @@ -79,6 +110,18 @@ export class OptionsNormalizer { return options; } + /** + * @param options + * @returns {IOptions} + */ + private static sourceMapBaseUrl (options: IOptions): IOptions { + if (options.sourceMapBaseUrl) { + Object.assign(options, OptionsNormalizer.SOURCE_MAP_BASE_URL_OPTIONS); + } + + return options; + } + /** * @param options * @returns {IOptions} diff --git a/src/preset-options/DefaultPreset.ts b/src/preset-options/DefaultPreset.ts index dde82d4a..d6427ba7 100644 --- a/src/preset-options/DefaultPreset.ts +++ b/src/preset-options/DefaultPreset.ts @@ -13,6 +13,7 @@ export const DEFAULT_PRESET: IObfuscatorOptions = Object.freeze({ rotateUnicodeArray: true, selfDefending: true, sourceMap: false, + sourceMapBaseUrl: '', sourceMapMode: SourceMapMode.Separate, unicodeArray: true, unicodeArrayThreshold: 0.8, diff --git a/src/preset-options/NoCustomNodesPreset.ts b/src/preset-options/NoCustomNodesPreset.ts index 2232c1a3..4cf59083 100644 --- a/src/preset-options/NoCustomNodesPreset.ts +++ b/src/preset-options/NoCustomNodesPreset.ts @@ -13,6 +13,7 @@ export const NO_CUSTOM_NODES_PRESET: IObfuscatorOptions = Object.freeze({ rotateUnicodeArray: false, selfDefending: false, sourceMap: false, + sourceMapBaseUrl: '', sourceMapMode: SourceMapMode.Separate, unicodeArray: false, unicodeArrayThreshold: 0, diff --git a/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts b/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts index 094df58b..19ef7707 100644 --- a/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts +++ b/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts @@ -112,6 +112,33 @@ describe('JavaScriptObfuscatorCLI', function (): void { assert.property(sourceMap, 'names'); }); + it('should creates file with source map in the same directory as output file if `sourceMapBaseUrl` is set', () => { + JavaScriptObfuscator.runCLI([ + 'node', + 'javascript-obfuscator', + fixtureFilePath, + '--output', + outputFilePath, + '--compact', + 'true', + '--selfDefending', + '0', + '--sourceMap', + 'true', + '--sourceMapBaseUrl', + 'http://localhost:9000/' + ]); + + assert.equal(fs.existsSync(outputSourceMapPath), true); + + const content: string = fs.readFileSync(outputSourceMapPath, { encoding: 'utf8' }), + sourceMap: any = JSON.parse(content); + + assert.property(sourceMap, 'version'); + assert.property(sourceMap, 'sources'); + assert.property(sourceMap, 'names'); + }); + afterEach(() => { fs.unlinkSync(outputFilePath); fs.unlinkSync(outputSourceMapPath); diff --git a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts b/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts index 5df61fbb..1ff2372f 100644 --- a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts +++ b/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts @@ -10,9 +10,10 @@ describe('JavaScriptObfuscatorInternal', () => { describe(`setSourceMapUrl (url: string)`, () => { let javaScriptObfuscator: JavaScriptObfuscatorInternal, obfuscationResult: IObfuscationResult, - sourceMapUrl: string = 'test.map.js'; + sourceMapUrl: string; - beforeEach(() => { + it('should link obfuscated code with source map', () => { + sourceMapUrl = 'test.map.js'; javaScriptObfuscator = new JavaScriptObfuscatorInternal( `var test = 1;`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { @@ -24,14 +25,33 @@ describe('JavaScriptObfuscatorInternal', () => { javaScriptObfuscator.setSourceMapUrl(sourceMapUrl); obfuscationResult = javaScriptObfuscator.getObfuscationResult(); - }); - it('should link obfuscated code with source map', () => { assert.match( obfuscationResult.getObfuscatedCode(), new RegExp(`sourceMappingURL=${sourceMapUrl}`)) ; assert.isOk(JSON.parse(obfuscationResult.getSourceMap()).mappings); }); + + it('should properly add source map import to the obfuscated code if `sourceMapBaseUrl` is set', () => { + sourceMapUrl = 'http://localhost:9000/'; + javaScriptObfuscator = new JavaScriptObfuscatorInternal( + `var test = 1;`, + Object.assign({}, NO_CUSTOM_NODES_PRESET, { + sourceMap: true, + sourceMapBaseUrl: sourceMapUrl + }) + ); + + javaScriptObfuscator.obfuscate(); + + obfuscationResult = javaScriptObfuscator.getObfuscationResult(); + + assert.match( + obfuscationResult.getObfuscatedCode(), + new RegExp(`sourceMappingURL=${sourceMapUrl}$`)) + ; + assert.isOk(JSON.parse(obfuscationResult.getSourceMap()).mappings); + }); }); }); diff --git a/test/unit-tests/OptionsNormalizer.spec.ts b/test/unit-tests/OptionsNormalizer.spec.ts index 590a4bd1..6c9c6de4 100644 --- a/test/unit-tests/OptionsNormalizer.spec.ts +++ b/test/unit-tests/OptionsNormalizer.spec.ts @@ -30,11 +30,14 @@ describe('OptionsNormalizer', () => { }); optionsPreset2 = Object.assign({}, DEFAULT_PRESET, { rotateUnicodeArray: true, + sourceMapBaseUrl: 'http://localhost:9000', + sourceMapMode: 'inline', unicodeArray: true, unicodeArrayThreshold: 0, wrapUnicodeArrayCalls: true }); optionsPreset3 = Object.assign({}, DEFAULT_PRESET, { + domainLock: ['//localhost:9000', 'https://google.ru/abc?cde=fgh'], unicodeArray: true, encodeUnicodeLiterals: true, wrapUnicodeArrayCalls: false @@ -49,11 +52,14 @@ describe('OptionsNormalizer', () => { }); expectedOptionsPreset2 = Object.assign({}, DEFAULT_PRESET, { rotateUnicodeArray: false, + sourceMapBaseUrl: 'http://localhost:9000', + sourceMapMode: 'separate', unicodeArray: false, unicodeArrayThreshold: 0, wrapUnicodeArrayCalls: false }); expectedOptionsPreset3 = Object.assign({}, DEFAULT_PRESET, { + domainLock: ['localhost', 'google.ru'], unicodeArray: true, encodeUnicodeLiterals: true, wrapUnicodeArrayCalls: true diff --git a/test/unit-tests/Utils.spec.ts b/test/unit-tests/Utils.spec.ts index 5d59bf71..43cdb53e 100644 --- a/test/unit-tests/Utils.spec.ts +++ b/test/unit-tests/Utils.spec.ts @@ -50,6 +50,16 @@ describe('Utils', () => { }); }); + describe('extractDomainFromUrl (url: string): string', () => { + it('should extract domain from the given URL', () => { + assert.equal(Utils.extractDomainFromUrl('http://google.ru'), 'google.ru'); + assert.equal(Utils.extractDomainFromUrl('http://www.google.ru'), 'www.google.ru'); + assert.equal(Utils.extractDomainFromUrl('https://www.google.ru:9000'), 'www.google.ru'); + assert.equal(Utils.extractDomainFromUrl('//google.ru/abc'), 'google.ru'); + assert.equal(Utils.extractDomainFromUrl('//localhost:9000'), 'localhost'); + }); + }); + describe('getRandomVariableName (length: number = 6): string', () => { it('should return a string of given length with random variable name', () => { assert.match(Utils.getRandomVariableName(4), /^_0x(\w){4}$/); From bc1d4ef609ce0f35623f30716fd0352aba0347de Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 18 Sep 2016 14:25:35 +0300 Subject: [PATCH 026/138] `sourceMapBaseUrl` wip implementation --- README.md | 14 ++++++++++++- dist/index.js | 21 ++++++++++++------- src/JavaScriptObfuscatorInternal.ts | 4 ++-- src/Utils.ts | 12 +++++++++++ src/cli/JavaScriptObfuscatorCLI.ts | 2 +- src/options/OptionsNormalizer.ts | 11 +++------- .../JavaScriptObfuscatorInternal.spec.ts | 13 ++++++------ test/unit-tests/OptionsNormalizer.spec.ts | 4 +--- test/unit-tests/Utils.spec.ts | 6 ++++++ 9 files changed, 59 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index f33e5557..4905922d 100644 --- a/README.md +++ b/README.md @@ -225,7 +225,19 @@ Enables source map generation for obfuscated code. ### `sourceMapBaseUrl` Type: `string` Default: `` -Inserts custom Url for source map +Adds base url to the source map import url when `sourceMapMode: 'separate'`. + +##### :warning: this option designed for CLI usage + +CLI example: +``` +javascript-obfuscator input.js --output out.js --sourceMap true --sourceMapBaseUrl 'http://localhost:9000' +``` + +Result import: +``` +//# sourceMappingURL=http://localhost:9000/out.js.map +``` ### `sourceMapMode` Type: `string` Default: `separate` diff --git a/dist/index.js b/dist/index.js index e158075a..acfe6699 100644 --- a/dist/index.js +++ b/dist/index.js @@ -207,6 +207,14 @@ var Utils = function () { value: function isInteger(number) { return number % 1 === 0; } + }, { + key: 'normalizeUrl', + value: function normalizeUrl(url) { + if (!url.endsWith('/')) { + url += '/'; + } + return url; + } }, { key: 'strEnumify', value: function strEnumify(obj) { @@ -934,8 +942,8 @@ var JavaScriptObfuscatorInternal = function () { _createClass(JavaScriptObfuscatorInternal, [{ key: 'getObfuscationResult', value: function getObfuscationResult() { - if (this.options.sourceMapBaseUrl) { - this.setSourceMapUrl(this.options.sourceMapBaseUrl); + if (this.sourceMapUrl) { + this.sourceMapUrl = this.options.sourceMapBaseUrl + this.sourceMapUrl; } return new SourceMapCorrector_1.SourceMapCorrector(new ObfuscationResult_1.ObfuscationResult(this.generatorOutput.code, this.generatorOutput.map), this.sourceMapUrl, this.options.sourceMapMode).correct(); } @@ -1545,7 +1553,7 @@ var JavaScriptObfuscatorCLI = function () { value: function configureCommands() { this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); - }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Inserts custom Url for source map').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { + }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Adds base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); }).parse(this.rawArguments); this.commands.on('--help', function () { @@ -3347,7 +3355,9 @@ var OptionsNormalizer = function () { key: "sourceMapBaseUrl", value: function sourceMapBaseUrl(options) { if (options.sourceMapBaseUrl) { - Object.assign(options, OptionsNormalizer.SOURCE_MAP_BASE_URL_OPTIONS); + Object.assign(options, { + sourceMapBaseUrl: Utils_1.Utils.normalizeUrl(options.sourceMapBaseUrl) + }); } return options; } @@ -3387,9 +3397,6 @@ OptionsNormalizer.SELF_DEFENDING_OPTIONS = { compact: true, selfDefending: true }; -OptionsNormalizer.SOURCE_MAP_BASE_URL_OPTIONS = { - sourceMapMode: 'separate' -}; OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNormalizer.unicodeArrayRule, OptionsNormalizer.unicodeArrayThresholdRule, OptionsNormalizer.encodeUnicodeLiteralsRule, OptionsNormalizer.sourceMapBaseUrl, OptionsNormalizer.selfDefendingRule]; exports.OptionsNormalizer = OptionsNormalizer; diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index 73ff8f58..c59a1b16 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/src/JavaScriptObfuscatorInternal.ts @@ -84,8 +84,8 @@ export class JavaScriptObfuscatorInternal { * @returns {IObfuscationResult} */ public getObfuscationResult (): IObfuscationResult { - if (this.options.sourceMapBaseUrl) { - this.setSourceMapUrl(this.options.sourceMapBaseUrl); + if (this.sourceMapUrl) { + this.sourceMapUrl = this.options.sourceMapBaseUrl + this.sourceMapUrl; } return new SourceMapCorrector( diff --git a/src/Utils.ts b/src/Utils.ts index c891c92f..260deb95 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -152,6 +152,18 @@ export class Utils { return number % 1 === 0; } + /** + * @param url + * @returns {string} + */ + public static normalizeUrl (url: string): string { + if (!url.endsWith('/')) { + url += '/'; + } + + return url; + } + /** * @param obj * @returns {T} diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index ebe7e550..4dfd1f4b 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -132,7 +132,7 @@ export class JavaScriptObfuscatorCLI { .option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean) .option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean) .option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean) - .option('--sourceMapBaseUrl ', 'Inserts custom Url for source map') + .option('--sourceMapBaseUrl ', 'Adds base url to the source map import url when `--sourceMapMode=separate`') .option( '--sourceMapMode [inline, separate]', 'Specify source map output mode', diff --git a/src/options/OptionsNormalizer.ts b/src/options/OptionsNormalizer.ts index caec3a04..d4f4e0fc 100644 --- a/src/options/OptionsNormalizer.ts +++ b/src/options/OptionsNormalizer.ts @@ -33,13 +33,6 @@ export class OptionsNormalizer { selfDefending: true }; - /** - * @type {IObfuscatorOptions} - */ - private static SOURCE_MAP_BASE_URL_OPTIONS: IObfuscatorOptions = { - sourceMapMode: 'separate' - }; - /** * @type {TOptionsNormalizerRule[]} */ @@ -116,7 +109,9 @@ export class OptionsNormalizer { */ private static sourceMapBaseUrl (options: IOptions): IOptions { if (options.sourceMapBaseUrl) { - Object.assign(options, OptionsNormalizer.SOURCE_MAP_BASE_URL_OPTIONS); + Object.assign(options, { + sourceMapBaseUrl: Utils.normalizeUrl(options.sourceMapBaseUrl) + }); } return options; diff --git a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts b/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts index 1ff2372f..e367df2b 100644 --- a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts +++ b/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts @@ -10,10 +10,9 @@ describe('JavaScriptObfuscatorInternal', () => { describe(`setSourceMapUrl (url: string)`, () => { let javaScriptObfuscator: JavaScriptObfuscatorInternal, obfuscationResult: IObfuscationResult, - sourceMapUrl: string; + sourceMapUrl: string = 'test.map.js'; it('should link obfuscated code with source map', () => { - sourceMapUrl = 'test.map.js'; javaScriptObfuscator = new JavaScriptObfuscatorInternal( `var test = 1;`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { @@ -33,23 +32,25 @@ describe('JavaScriptObfuscatorInternal', () => { assert.isOk(JSON.parse(obfuscationResult.getSourceMap()).mappings); }); - it('should properly add source map import to the obfuscated code if `sourceMapBaseUrl` is set', () => { - sourceMapUrl = 'http://localhost:9000/'; + it('should properly add base url to source map import inside obfuscated code if `sourceMapBaseUrl` is set', () => { + let sourceMapBaseUrl: string = 'http://localhost:9000'; + javaScriptObfuscator = new JavaScriptObfuscatorInternal( `var test = 1;`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { sourceMap: true, - sourceMapBaseUrl: sourceMapUrl + sourceMapBaseUrl: sourceMapBaseUrl }) ); javaScriptObfuscator.obfuscate(); + javaScriptObfuscator.setSourceMapUrl(sourceMapUrl); obfuscationResult = javaScriptObfuscator.getObfuscationResult(); assert.match( obfuscationResult.getObfuscatedCode(), - new RegExp(`sourceMappingURL=${sourceMapUrl}$`)) + new RegExp(`sourceMappingURL=${sourceMapBaseUrl}/${sourceMapUrl}$`)) ; assert.isOk(JSON.parse(obfuscationResult.getSourceMap()).mappings); }); diff --git a/test/unit-tests/OptionsNormalizer.spec.ts b/test/unit-tests/OptionsNormalizer.spec.ts index 6c9c6de4..fd9d22d3 100644 --- a/test/unit-tests/OptionsNormalizer.spec.ts +++ b/test/unit-tests/OptionsNormalizer.spec.ts @@ -31,7 +31,6 @@ describe('OptionsNormalizer', () => { optionsPreset2 = Object.assign({}, DEFAULT_PRESET, { rotateUnicodeArray: true, sourceMapBaseUrl: 'http://localhost:9000', - sourceMapMode: 'inline', unicodeArray: true, unicodeArrayThreshold: 0, wrapUnicodeArrayCalls: true @@ -52,8 +51,7 @@ describe('OptionsNormalizer', () => { }); expectedOptionsPreset2 = Object.assign({}, DEFAULT_PRESET, { rotateUnicodeArray: false, - sourceMapBaseUrl: 'http://localhost:9000', - sourceMapMode: 'separate', + sourceMapBaseUrl: 'http://localhost:9000/', unicodeArray: false, unicodeArrayThreshold: 0, wrapUnicodeArrayCalls: false diff --git a/test/unit-tests/Utils.spec.ts b/test/unit-tests/Utils.spec.ts index 43cdb53e..6650ba0a 100644 --- a/test/unit-tests/Utils.spec.ts +++ b/test/unit-tests/Utils.spec.ts @@ -75,6 +75,12 @@ describe('Utils', () => { }); }); + describe('normalizeUrl (url: string): string', () => { + it('should normalize given url', () => { + assert.equal(Utils.normalizeUrl('http://localhost:9000'), 'http://localhost:9000/'); + }); + }); + describe('stringToJSFuck (string: string): string', () => { let expected: string = `${JSFuck.s} + ${JSFuck.t} + ${JSFuck.r} + ${JSFuck.i} + ${JSFuck.n} + ${JSFuck.g}`; From 42381552e16ace525af64d49409d46281eefff48 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 18 Sep 2016 14:36:49 +0300 Subject: [PATCH 027/138] `sourceMapBaseUrl` wip implementation --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4905922d..d5c013bb 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,6 @@ Following options available for the JS Obfuscator: rotateUnicodeArray: true, selfDefending: true, sourceMap: false, - sourceMapBaseUrl: '', sourceMapMode: 'separate', unicodeArray: true, unicodeArrayThreshold: 0.8, @@ -127,7 +126,9 @@ Following options available for the JS Obfuscator: -v, --version -h, --help + // CLI specific -o, --output + --sourceMapBaseUrl --compact --debugProtection @@ -138,7 +139,6 @@ Following options available for the JS Obfuscator: --rotateUnicodeArray --selfDefending --sourceMap - --sourceMapBaseUrl --sourceMapMode [inline, separate] --unicodeArray --unicodeArrayThreshold From 1eeaf7df2b9daeac5e29fb5dcd8352bdf1e8cf72 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 19 Sep 2016 01:02:27 +0300 Subject: [PATCH 028/138] `sourceMapBaseUrl` and `sourceMapFileName` wip implementation --- README.md | 21 ++- dist/index.js | 90 +++++------ src/JavaScriptObfuscatorInternal.ts | 18 +-- src/SourceMapCorrector.ts | 25 +-- src/Utils.ts | 12 -- src/cli/CLIUtils.ts | 23 ++- src/cli/JavaScriptObfuscatorCLI.ts | 27 ++-- src/interfaces/IObfuscatorOptions.d.ts | 1 + src/interfaces/IOptions.d.ts | 1 + src/options/Options.ts | 8 +- src/options/OptionsNormalizer.ts | 25 ++- src/preset-options/DefaultPreset.ts | 1 + src/preset-options/NoCustomNodesPreset.ts | 1 + .../JavaScriptObfuscator.spec.ts | 4 +- .../JavaScriptObfuscatorCLI.spec.ts | 150 +++++++++++++----- .../JavaScriptObfuscatorInternal.spec.ts | 10 +- test/unit-tests/OptionsNormalizer.spec.ts | 4 + test/unit-tests/SourceMapCorrector.spec.ts | 4 - test/unit-tests/Utils.spec.ts | 6 - 19 files changed, 251 insertions(+), 180 deletions(-) diff --git a/README.md b/README.md index d5c013bb..079ed903 100644 --- a/README.md +++ b/README.md @@ -225,20 +225,33 @@ Enables source map generation for obfuscated code. ### `sourceMapBaseUrl` Type: `string` Default: `` -Adds base url to the source map import url when `sourceMapMode: 'separate'`. +Sets base url to the source map import url when `sourceMapMode: 'separate'`. -##### :warning: this option designed for CLI usage - CLI example: ``` javascript-obfuscator input.js --output out.js --sourceMap true --sourceMapBaseUrl 'http://localhost:9000' ``` -Result import: +Result: ``` //# sourceMappingURL=http://localhost:9000/out.js.map ``` +### `sourceMapFileName` +Type: `string` Default: `` + +Sets file name for output source map when `sourceMapMode: 'separate'`. + +CLI example: +``` +javascript-obfuscator input.js --output out.js --sourceMap true --sourceMapBaseUrl 'http://localhost:9000' --sourceMapFileName example +``` + +Result: +``` +//# sourceMappingURL=http://localhost:9000/example.js.map +``` + ### `sourceMapMode` Type: `string` Default: `separate` diff --git a/dist/index.js b/dist/index.js index acfe6699..d45b78b0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -207,14 +207,6 @@ var Utils = function () { value: function isInteger(number) { return number % 1 === 0; } - }, { - key: 'normalizeUrl', - value: function normalizeUrl(url) { - if (!url.endsWith('/')) { - url += '/'; - } - return url; - } }, { key: 'strEnumify', value: function strEnumify(obj) { @@ -904,6 +896,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ selfDefending: false, sourceMap: false, sourceMapBaseUrl: '', + sourceMapFileName: '', sourceMapMode: SourceMapMode_1.SourceMapMode.Separate, unicodeArray: false, unicodeArrayThreshold: 0, @@ -932,7 +925,6 @@ var JavaScriptObfuscatorInternal = function () { function JavaScriptObfuscatorInternal(sourceCode, obfuscatorOptions) { _classCallCheck(this, JavaScriptObfuscatorInternal); - this.sourceMapUrl = ''; this.sourceCode = sourceCode; if (obfuscatorOptions) { this.options = new Options_1.Options(obfuscatorOptions); @@ -942,10 +934,7 @@ var JavaScriptObfuscatorInternal = function () { _createClass(JavaScriptObfuscatorInternal, [{ key: 'getObfuscationResult', value: function getObfuscationResult() { - if (this.sourceMapUrl) { - this.sourceMapUrl = this.options.sourceMapBaseUrl + this.sourceMapUrl; - } - return new SourceMapCorrector_1.SourceMapCorrector(new ObfuscationResult_1.ObfuscationResult(this.generatorOutput.code, this.generatorOutput.map), this.sourceMapUrl, this.options.sourceMapMode).correct(); + return new SourceMapCorrector_1.SourceMapCorrector(new ObfuscationResult_1.ObfuscationResult(this.generatorOutput.code, this.generatorOutput.map), this.options.sourceMapBaseUrl + this.options.sourceMapFileName, this.options.sourceMapMode).correct(); } }, { key: 'obfuscate', @@ -956,11 +945,6 @@ var JavaScriptObfuscatorInternal = function () { astTree = new Obfuscator_1.Obfuscator(this.options).obfuscateNode(astTree); this.generatorOutput = JavaScriptObfuscatorInternal.generateCode(this.sourceCode, astTree, this.options); } - }, { - key: 'setSourceMapUrl', - value: function setSourceMapUrl(url) { - this.sourceMapUrl = url; - } }], [{ key: 'generateCode', value: function generateCode(sourceCode, astTree, options) { @@ -1157,6 +1141,7 @@ exports.DEFAULT_PRESET = Object.freeze({ selfDefending: true, sourceMap: false, sourceMapBaseUrl: '', + sourceMapFileName: '', sourceMapMode: SourceMapMode_1.SourceMapMode.Separate, unicodeArray: true, unicodeArrayThreshold: 0.8, @@ -1311,7 +1296,7 @@ var SourceMapCorrector = function () { _createClass(SourceMapCorrector, [{ key: "correct", value: function correct() { - return new ObfuscationResult_1.ObfuscationResult(this.correctObfuscatedCode(), this.correctSourceMap()); + return new ObfuscationResult_1.ObfuscationResult(this.correctObfuscatedCode(), this.sourceMap); } }, { key: "correctObfuscatedCode", @@ -1322,26 +1307,18 @@ var SourceMapCorrector = function () { var sourceMappingUrl = '//# sourceMappingURL='; switch (this.sourceMapMode) { case SourceMapMode_1.SourceMapMode.Inline: - sourceMappingUrl += "data:application/json;base64," + Utils_1.Utils.btoa(this.sourceMapUrl || this.sourceMap, false); + sourceMappingUrl += "data:application/json;base64," + Utils_1.Utils.btoa(this.sourceMap, false); break; case SourceMapMode_1.SourceMapMode.Separate: default: - if (this.sourceMapUrl) { - sourceMappingUrl += this.sourceMapUrl; - break; + if (!this.sourceMapUrl) { + return this.obfuscatedCode; } - return this.obfuscatedCode; + sourceMappingUrl += this.sourceMapUrl; + break; } return this.obfuscatedCode + "\n" + sourceMappingUrl; } - }, { - key: "correctSourceMap", - value: function correctSourceMap() { - if (this.sourceMapMode === SourceMapMode_1.SourceMapMode.Inline) { - return ''; - } - return this.sourceMap; - } }]); return SourceMapCorrector; @@ -1440,9 +1417,17 @@ var CLIUtils = function () { }, { key: 'getOutputSourceMapPath', value: function getOutputSourceMapPath(outputCodePath) { - return outputCodePath.split('.').map(function (value, index, array) { - return index === array.length - 1 ? value + '.map' : value; - }).join('.'); + var sourceMapFileName = arguments.length <= 1 || arguments[1] === undefined ? '' : arguments[1]; + + if (sourceMapFileName) { + outputCodePath = outputCodePath.substr(0, outputCodePath.lastIndexOf('/')) + '/' + sourceMapFileName; + } + if (!/\.js\.map$/.test(outputCodePath)) { + outputCodePath = outputCodePath.split('.')[0] + '.js.map'; + } else if (/\.js$/.test(outputCodePath)) { + outputCodePath += '.map'; + } + return outputCodePath; } }, { key: 'getPackageConfig', @@ -1553,7 +1538,7 @@ var JavaScriptObfuscatorCLI = function () { value: function configureCommands() { this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); - }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Adds base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { + }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); }).parse(this.rawArguments); this.commands.on('--help', function () { @@ -1588,16 +1573,13 @@ var JavaScriptObfuscatorCLI = function () { }, { key: 'processDataWithSourceMap', value: function processDataWithSourceMap(outputCodePath, options) { - var javaScriptObfuscator = new JavaScriptObfuscatorInternal_1.JavaScriptObfuscatorInternal(this.data, options), - obfuscationResult = void 0, - outputSourceMapPath = CLIUtils_1.CLIUtils.getOutputSourceMapPath(outputCodePath); + var outputSourceMapPath = CLIUtils_1.CLIUtils.getOutputSourceMapPath(outputCodePath, options.sourceMapFileName ? options.sourceMapFileName : ''); + options.sourceMapFileName = path.basename(outputSourceMapPath); + var javaScriptObfuscator = new JavaScriptObfuscatorInternal_1.JavaScriptObfuscatorInternal(this.data, options); javaScriptObfuscator.obfuscate(); - if (options.sourceMapMode === SourceMapMode_1.SourceMapMode.Separate) { - javaScriptObfuscator.setSourceMapUrl(path.basename(outputSourceMapPath)); - } - obfuscationResult = javaScriptObfuscator.getObfuscationResult(); + var obfuscationResult = javaScriptObfuscator.getObfuscationResult(); CLIUtils_1.CLIUtils.writeFile(outputCodePath, obfuscationResult.getObfuscatedCode()); - if (obfuscationResult.getSourceMap()) { + if (options.sourceMapMode === 'separate' && obfuscationResult.getSourceMap()) { CLIUtils_1.CLIUtils.writeFile(outputSourceMapPath, obfuscationResult.getSourceMap()); } } @@ -3244,6 +3226,7 @@ __decorate([class_validator_1.IsString(), class_validator_1.ValidateIf(function require_protocol: false, require_valid_protocol: true }), __metadata('design:type', String)], Options.prototype, "sourceMapBaseUrl", void 0); +__decorate([class_validator_1.IsString(), __metadata('design:type', String)], Options.prototype, "sourceMapFileName", void 0); __decorate([class_validator_1.IsIn(['inline', 'separate']), __metadata('design:type', String)], Options.prototype, "sourceMapMode", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "unicodeArray", void 0); __decorate([class_validator_1.IsNumber(), class_validator_1.Min(0), class_validator_1.Max(1), __metadata('design:type', Number)], Options.prototype, "unicodeArrayThreshold", void 0); @@ -3354,9 +3337,22 @@ var OptionsNormalizer = function () { }, { key: "sourceMapBaseUrl", value: function sourceMapBaseUrl(options) { - if (options.sourceMapBaseUrl) { + var sourceMapBaseUrl = options.sourceMapBaseUrl; + if (sourceMapBaseUrl && !sourceMapBaseUrl.endsWith('/')) { Object.assign(options, { - sourceMapBaseUrl: Utils_1.Utils.normalizeUrl(options.sourceMapBaseUrl) + sourceMapBaseUrl: sourceMapBaseUrl + "/" + }); + } + return options; + } + }, { + key: "sourceMapFileName", + value: function sourceMapFileName(options) { + var sourceMapFileName = options.sourceMapFileName; + if (sourceMapFileName) { + sourceMapFileName = sourceMapFileName.split('.')[0]; + Object.assign(options, { + sourceMapFileName: sourceMapFileName + ".js.map" }); } return options; @@ -3397,7 +3393,7 @@ OptionsNormalizer.SELF_DEFENDING_OPTIONS = { compact: true, selfDefending: true }; -OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNormalizer.unicodeArrayRule, OptionsNormalizer.unicodeArrayThresholdRule, OptionsNormalizer.encodeUnicodeLiteralsRule, OptionsNormalizer.sourceMapBaseUrl, OptionsNormalizer.selfDefendingRule]; +OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNormalizer.unicodeArrayRule, OptionsNormalizer.unicodeArrayThresholdRule, OptionsNormalizer.encodeUnicodeLiteralsRule, OptionsNormalizer.sourceMapBaseUrl, OptionsNormalizer.sourceMapFileName, OptionsNormalizer.selfDefendingRule]; exports.OptionsNormalizer = OptionsNormalizer; /***/ }, diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index c59a1b16..97601637 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/src/JavaScriptObfuscatorInternal.ts @@ -36,11 +36,6 @@ export class JavaScriptObfuscatorInternal { */ private sourceCode: string; - /** - * @type {string} - */ - private sourceMapUrl: string = ''; - /** * @param sourceCode * @param obfuscatorOptions @@ -84,16 +79,12 @@ export class JavaScriptObfuscatorInternal { * @returns {IObfuscationResult} */ public getObfuscationResult (): IObfuscationResult { - if (this.sourceMapUrl) { - this.sourceMapUrl = this.options.sourceMapBaseUrl + this.sourceMapUrl; - } - return new SourceMapCorrector( new ObfuscationResult( this.generatorOutput.code, this.generatorOutput.map ), - this.sourceMapUrl, + this.options.sourceMapBaseUrl + this.options.sourceMapFileName, this.options.sourceMapMode ).correct(); } @@ -107,11 +98,4 @@ export class JavaScriptObfuscatorInternal { this.generatorOutput = JavaScriptObfuscatorInternal.generateCode(this.sourceCode, astTree, this.options); } - - /** - * @param url - */ - public setSourceMapUrl (url: string): void { - this.sourceMapUrl = url; - } } diff --git a/src/SourceMapCorrector.ts b/src/SourceMapCorrector.ts index ec9f33d9..edb96c8f 100644 --- a/src/SourceMapCorrector.ts +++ b/src/SourceMapCorrector.ts @@ -52,7 +52,7 @@ export class SourceMapCorrector implements ISourceMapCorrector { public correct (): IObfuscationResult { return new ObfuscationResult( this.correctObfuscatedCode(), - this.correctSourceMap() + this.sourceMap ); } @@ -68,32 +68,21 @@ export class SourceMapCorrector implements ISourceMapCorrector { switch (this.sourceMapMode) { case SourceMapMode.Inline: - sourceMappingUrl += `data:application/json;base64,${Utils.btoa(this.sourceMapUrl || this.sourceMap, false)}`; + sourceMappingUrl += `data:application/json;base64,${Utils.btoa(this.sourceMap, false)}`; break; case SourceMapMode.Separate: default: - if (this.sourceMapUrl) { - sourceMappingUrl += this.sourceMapUrl; - - break; + if (!this.sourceMapUrl) { + return this.obfuscatedCode; } - return this.obfuscatedCode; + sourceMappingUrl += this.sourceMapUrl; + + break; } return `${this.obfuscatedCode}\n${sourceMappingUrl}`; }; - - /** - * @returns {string} - */ - private correctSourceMap (): string { - if (this.sourceMapMode === SourceMapMode.Inline) { - return ''; - } - - return this.sourceMap; - } } diff --git a/src/Utils.ts b/src/Utils.ts index 260deb95..c891c92f 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -152,18 +152,6 @@ export class Utils { return number % 1 === 0; } - /** - * @param url - * @returns {string} - */ - public static normalizeUrl (url: string): string { - if (!url.endsWith('/')) { - url += '/'; - } - - return url; - } - /** * @param obj * @returns {T} diff --git a/src/cli/CLIUtils.ts b/src/cli/CLIUtils.ts index 6b0bbc75..ea795b56 100644 --- a/src/cli/CLIUtils.ts +++ b/src/cli/CLIUtils.ts @@ -38,15 +38,24 @@ export class CLIUtils { } /** + * @param outputCodePath + * @param sourceMapFileName * @returns {string} */ - public static getOutputSourceMapPath (outputCodePath: string): string { - return outputCodePath - .split('.') - .map((value: string, index: number, array: string[]) => { - return index === array.length - 1 ? `${value}.map` : value; - }) - .join('.'); + public static getOutputSourceMapPath (outputCodePath: string, sourceMapFileName: string = ''): string { + if (sourceMapFileName) { + outputCodePath = `${outputCodePath.substr( + 0, outputCodePath.lastIndexOf('/') + )}/${sourceMapFileName}`; + } + + if (!/\.js\.map$/.test(outputCodePath)) { + outputCodePath = `${outputCodePath.split('.')[0]}.js.map`; + } else if (/\.js$/.test(outputCodePath)) { + outputCodePath += '.map'; + } + + return outputCodePath; } /** diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index 4dfd1f4b..a7a0c592 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -132,7 +132,8 @@ export class JavaScriptObfuscatorCLI { .option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean) .option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean) .option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean) - .option('--sourceMapBaseUrl ', 'Adds base url to the source map import url when `--sourceMapMode=separate`') + .option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`') + .option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`') .option( '--sourceMapMode [inline, separate]', 'Specify source map output mode', @@ -182,23 +183,25 @@ export class JavaScriptObfuscatorCLI { * @param options */ private processDataWithSourceMap (outputCodePath: string, options: IObfuscatorOptions): void { - let javaScriptObfuscator: JavaScriptObfuscatorInternal = new JavaScriptObfuscatorInternal(this.data, options), - obfuscationResult: IObfuscationResult, - outputSourceMapPath: string = CLIUtils.getOutputSourceMapPath(outputCodePath); + let outputSourceMapPath: string = CLIUtils.getOutputSourceMapPath( + outputCodePath, + options.sourceMapFileName ? options.sourceMapFileName : '' + ); + + options.sourceMapFileName = path.basename(outputSourceMapPath); + + const javaScriptObfuscator: JavaScriptObfuscatorInternal = new JavaScriptObfuscatorInternal( + this.data, + options + ); javaScriptObfuscator.obfuscate(); - if (options.sourceMapMode === SourceMapMode.Separate) { - javaScriptObfuscator.setSourceMapUrl( - path.basename(outputSourceMapPath) - ); - } - - obfuscationResult = javaScriptObfuscator.getObfuscationResult(); + const obfuscationResult: IObfuscationResult = javaScriptObfuscator.getObfuscationResult(); CLIUtils.writeFile(outputCodePath, obfuscationResult.getObfuscatedCode()); - if (obfuscationResult.getSourceMap()) { + if (options.sourceMapMode === 'separate' && obfuscationResult.getSourceMap()) { CLIUtils.writeFile(outputSourceMapPath, obfuscationResult.getSourceMap()); } } diff --git a/src/interfaces/IObfuscatorOptions.d.ts b/src/interfaces/IObfuscatorOptions.d.ts index 751100e8..58940d1a 100644 --- a/src/interfaces/IObfuscatorOptions.d.ts +++ b/src/interfaces/IObfuscatorOptions.d.ts @@ -11,6 +11,7 @@ export interface IObfuscatorOptions { selfDefending?: boolean; sourceMap?: boolean; sourceMapBaseUrl?: string; + sourceMapFileName?: string; sourceMapMode?: TSourceMapMode; unicodeArray?: boolean; unicodeArrayThreshold?: number; diff --git a/src/interfaces/IOptions.d.ts b/src/interfaces/IOptions.d.ts index 509af4db..3d7afb2f 100644 --- a/src/interfaces/IOptions.d.ts +++ b/src/interfaces/IOptions.d.ts @@ -11,6 +11,7 @@ export interface IOptions { readonly selfDefending: boolean; readonly sourceMap: boolean; readonly sourceMapBaseUrl: string; + readonly sourceMapFileName: string; readonly sourceMapMode: TSourceMapMode; readonly unicodeArray: boolean; readonly unicodeArrayThreshold: number; diff --git a/src/options/Options.ts b/src/options/Options.ts index 740cbd18..40b7ae65 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -97,7 +97,7 @@ export class Options implements IOptions { public readonly sourceMap: boolean; /** - * @type {boolean} + * @type {string} */ @IsString() @ValidateIf((options: IOptions) => Boolean(options.sourceMapBaseUrl)) @@ -107,6 +107,12 @@ export class Options implements IOptions { }) public readonly sourceMapBaseUrl: string; + /** + * @type {string} + */ + @IsString() + public readonly sourceMapFileName: string; + /** * @type {TSourceMapMode} */ diff --git a/src/options/OptionsNormalizer.ts b/src/options/OptionsNormalizer.ts index d4f4e0fc..5891e4aa 100644 --- a/src/options/OptionsNormalizer.ts +++ b/src/options/OptionsNormalizer.ts @@ -42,6 +42,7 @@ export class OptionsNormalizer { OptionsNormalizer.unicodeArrayThresholdRule, OptionsNormalizer.encodeUnicodeLiteralsRule, OptionsNormalizer.sourceMapBaseUrl, + OptionsNormalizer.sourceMapFileName, OptionsNormalizer.selfDefendingRule ]; @@ -108,9 +109,29 @@ export class OptionsNormalizer { * @returns {IOptions} */ private static sourceMapBaseUrl (options: IOptions): IOptions { - if (options.sourceMapBaseUrl) { + let sourceMapBaseUrl: string = options.sourceMapBaseUrl; + + if (sourceMapBaseUrl && !sourceMapBaseUrl.endsWith('/')) { Object.assign(options, { - sourceMapBaseUrl: Utils.normalizeUrl(options.sourceMapBaseUrl) + sourceMapBaseUrl: `${sourceMapBaseUrl}/` + }); + } + + return options; + } + + /** + * @param options + * @returns {IOptions} + */ + private static sourceMapFileName (options: IOptions): IOptions { + let sourceMapFileName: string = options.sourceMapFileName; + + if (sourceMapFileName) { + sourceMapFileName = sourceMapFileName.split('.')[0]; + + Object.assign(options, { + sourceMapFileName: `${sourceMapFileName}.js.map` }); } diff --git a/src/preset-options/DefaultPreset.ts b/src/preset-options/DefaultPreset.ts index d6427ba7..fd1f97c8 100644 --- a/src/preset-options/DefaultPreset.ts +++ b/src/preset-options/DefaultPreset.ts @@ -14,6 +14,7 @@ export const DEFAULT_PRESET: IObfuscatorOptions = Object.freeze({ selfDefending: true, sourceMap: false, sourceMapBaseUrl: '', + sourceMapFileName: '', sourceMapMode: SourceMapMode.Separate, unicodeArray: true, unicodeArrayThreshold: 0.8, diff --git a/src/preset-options/NoCustomNodesPreset.ts b/src/preset-options/NoCustomNodesPreset.ts index 4cf59083..faac40bc 100644 --- a/src/preset-options/NoCustomNodesPreset.ts +++ b/src/preset-options/NoCustomNodesPreset.ts @@ -14,6 +14,7 @@ export const NO_CUSTOM_NODES_PRESET: IObfuscatorOptions = Object.freeze({ selfDefending: false, sourceMap: false, sourceMapBaseUrl: '', + sourceMapFileName: '', sourceMapMode: SourceMapMode.Separate, unicodeArray: false, unicodeArrayThreshold: 0, diff --git a/test/functional-tests/JavaScriptObfuscator.spec.ts b/test/functional-tests/JavaScriptObfuscator.spec.ts index e0c5a697..ea8bd591 100644 --- a/test/functional-tests/JavaScriptObfuscator.spec.ts +++ b/test/functional-tests/JavaScriptObfuscator.spec.ts @@ -33,7 +33,7 @@ describe('JavaScriptObfuscator', () => { assert.isOk(JSON.parse(obfuscationResult.getSourceMap()).mappings); }); - it('should returns object with obfuscated code with inline source map and empty `sourceMap` if `sourceMapMode` is `inline', () => { + it('should returns object with obfuscated code with inline source map as Base64 string', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 1;`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { @@ -47,7 +47,7 @@ describe('JavaScriptObfuscator', () => { obfuscationResult.getObfuscatedCode(), /sourceMappingURL=data:application\/json;base64/ ); - assert.isNotOk(obfuscationResult.getSourceMap()); + assert.isOk(obfuscationResult.getSourceMap()); }); it('should returns object with empty obfuscated code and source map with empty data if source code is empty', () => { diff --git a/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts b/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts index 19ef7707..b532f5bb 100644 --- a/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts +++ b/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts @@ -87,61 +87,125 @@ describe('JavaScriptObfuscatorCLI', function (): void { describe('--sourceMap option is set', () => { let outputSourceMapPath: string = `${outputFilePath}.map`; - it('should creates file with source map in the same directory as output file', () => { - JavaScriptObfuscator.runCLI([ - 'node', - 'javascript-obfuscator', - fixtureFilePath, - '--output', - outputFilePath, - '--compact', - 'true', - '--selfDefending', - '0', - '--sourceMap', - 'true' - ]); + describe('--sourceMapMode option is `separate`', () => { + it('should creates file with source map in the same directory as output file', () => { + JavaScriptObfuscator.runCLI([ + 'node', + 'javascript-obfuscator', + fixtureFilePath, + '--output', + outputFilePath, + '--compact', + 'true', + '--selfDefending', + '0', + '--sourceMap', + 'true' + ]); - assert.equal(fs.existsSync(outputSourceMapPath), true); + assert.equal(fs.existsSync(outputSourceMapPath), true); - const content: string = fs.readFileSync(outputSourceMapPath, { encoding: 'utf8' }), - sourceMap: any = JSON.parse(content); + const content: string = fs.readFileSync(outputSourceMapPath, { encoding: 'utf8' }), + sourceMap: any = JSON.parse(content); - assert.property(sourceMap, 'version'); - assert.property(sourceMap, 'sources'); - assert.property(sourceMap, 'names'); + assert.property(sourceMap, 'version'); + assert.property(sourceMap, 'sources'); + assert.property(sourceMap, 'names'); + }); + + it('should creates file with source map in the same directory as output file if `sourceMapBaseUrl` is set', () => { + JavaScriptObfuscator.runCLI([ + 'node', + 'javascript-obfuscator', + fixtureFilePath, + '--output', + outputFilePath, + '--compact', + 'true', + '--selfDefending', + '0', + '--sourceMap', + 'true', + '--sourceMapBaseUrl', + 'http://localhost:9000/' + ]); + + assert.equal(fs.existsSync(outputSourceMapPath), true); + + const content: string = fs.readFileSync(outputSourceMapPath, { encoding: 'utf8' }), + sourceMap: any = JSON.parse(content); + + assert.property(sourceMap, 'version'); + assert.property(sourceMap, 'sources'); + assert.property(sourceMap, 'names'); + }); + + afterEach(() => { + fs.unlinkSync(outputSourceMapPath); + }); }); - it('should creates file with source map in the same directory as output file if `sourceMapBaseUrl` is set', () => { - JavaScriptObfuscator.runCLI([ - 'node', - 'javascript-obfuscator', - fixtureFilePath, - '--output', - outputFilePath, - '--compact', - 'true', - '--selfDefending', - '0', - '--sourceMap', - 'true', - '--sourceMapBaseUrl', - 'http://localhost:9000/' - ]); + describe('--sourceMapFileName option is set', () => { + let sourceMapFileName: string = 'test', + sourceMapFilePath: string = `${sourceMapFileName}.js.map`, + outputSourceMapFilePath: string = `${outputDirName}/${sourceMapFilePath}`; - assert.equal(fs.existsSync(outputSourceMapPath), true); + it('should creates source map file with given name in the same directory as output file', () => { + JavaScriptObfuscator.runCLI([ + 'node', + 'javascript-obfuscator', + fixtureFilePath, + '--output', + outputFilePath, + '--compact', + 'true', + '--selfDefending', + '0', + '--sourceMap', + 'true', + '--sourceMapFileName', + sourceMapFileName + ]); - const content: string = fs.readFileSync(outputSourceMapPath, { encoding: 'utf8' }), - sourceMap: any = JSON.parse(content); + assert.equal(fs.existsSync(outputSourceMapFilePath), true); - assert.property(sourceMap, 'version'); - assert.property(sourceMap, 'sources'); - assert.property(sourceMap, 'names'); + const content: string = fs.readFileSync(outputSourceMapFilePath, { encoding: 'utf8' }), + sourceMap: any = JSON.parse(content); + + assert.property(sourceMap, 'version'); + assert.property(sourceMap, 'sources'); + assert.property(sourceMap, 'names'); + }); + + afterEach(() => { + fs.unlinkSync(outputSourceMapFilePath); + }); + }); + + describe('--sourceMapMode option is `inline`', () => { + it('shouldn\'t create file with source map if `sourceMapMode` is `inline`', () => { + JavaScriptObfuscator.runCLI([ + 'node', + 'javascript-obfuscator', + fixtureFilePath, + '--output', + outputFilePath, + '--compact', + 'true', + '--selfDefending', + '0', + '--sourceMap', + 'true', + '--sourceMapMode', + 'inline' + ]); + + assert.equal(fs.existsSync(outputSourceMapPath), false); + }); }); afterEach(() => { fs.unlinkSync(outputFilePath); - fs.unlinkSync(outputSourceMapPath); }); }); diff --git a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts b/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts index e367df2b..c829ac37 100644 --- a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts +++ b/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts @@ -10,18 +10,18 @@ describe('JavaScriptObfuscatorInternal', () => { describe(`setSourceMapUrl (url: string)`, () => { let javaScriptObfuscator: JavaScriptObfuscatorInternal, obfuscationResult: IObfuscationResult, - sourceMapUrl: string = 'test.map.js'; + sourceMapUrl: string = 'test.js.map'; it('should link obfuscated code with source map', () => { javaScriptObfuscator = new JavaScriptObfuscatorInternal( `var test = 1;`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { - sourceMap: true + sourceMap: true, + sourceMapFileName: sourceMapUrl }) ); javaScriptObfuscator.obfuscate(); - javaScriptObfuscator.setSourceMapUrl(sourceMapUrl); obfuscationResult = javaScriptObfuscator.getObfuscationResult(); @@ -39,12 +39,12 @@ describe('JavaScriptObfuscatorInternal', () => { `var test = 1;`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { sourceMap: true, - sourceMapBaseUrl: sourceMapBaseUrl + sourceMapBaseUrl: sourceMapBaseUrl, + sourceMapFileName: sourceMapUrl }) ); javaScriptObfuscator.obfuscate(); - javaScriptObfuscator.setSourceMapUrl(sourceMapUrl); obfuscationResult = javaScriptObfuscator.getObfuscationResult(); diff --git a/test/unit-tests/OptionsNormalizer.spec.ts b/test/unit-tests/OptionsNormalizer.spec.ts index fd9d22d3..d1ab308d 100644 --- a/test/unit-tests/OptionsNormalizer.spec.ts +++ b/test/unit-tests/OptionsNormalizer.spec.ts @@ -31,12 +31,14 @@ describe('OptionsNormalizer', () => { optionsPreset2 = Object.assign({}, DEFAULT_PRESET, { rotateUnicodeArray: true, sourceMapBaseUrl: 'http://localhost:9000', + sourceMapFileName: 'outputSourceMapName', unicodeArray: true, unicodeArrayThreshold: 0, wrapUnicodeArrayCalls: true }); optionsPreset3 = Object.assign({}, DEFAULT_PRESET, { domainLock: ['//localhost:9000', 'https://google.ru/abc?cde=fgh'], + sourceMapFileName: 'outputSourceMapName.map', unicodeArray: true, encodeUnicodeLiterals: true, wrapUnicodeArrayCalls: false @@ -52,12 +54,14 @@ describe('OptionsNormalizer', () => { expectedOptionsPreset2 = Object.assign({}, DEFAULT_PRESET, { rotateUnicodeArray: false, sourceMapBaseUrl: 'http://localhost:9000/', + sourceMapFileName: 'outputSourceMapName.js.map', unicodeArray: false, unicodeArrayThreshold: 0, wrapUnicodeArrayCalls: false }); expectedOptionsPreset3 = Object.assign({}, DEFAULT_PRESET, { domainLock: ['localhost', 'google.ru'], + sourceMapFileName: 'outputSourceMapName.js.map', unicodeArray: true, encodeUnicodeLiterals: true, wrapUnicodeArrayCalls: true diff --git a/test/unit-tests/SourceMapCorrector.spec.ts b/test/unit-tests/SourceMapCorrector.spec.ts index 7fee8dd0..6ee98be0 100644 --- a/test/unit-tests/SourceMapCorrector.spec.ts +++ b/test/unit-tests/SourceMapCorrector.spec.ts @@ -57,10 +57,6 @@ describe('SourceMapCorrector', () => { it('should add source map to obfuscated code as base64 encoded string', () => { assert.match(expectedObfuscationResult.getObfuscatedCode(), /data:application\/json;base64/); }); - - it('should clear original source map', () => { - assert.equal(expectedObfuscationResult.getSourceMap(), ''); - }); }); it('should add source map import to obfuscated code if source map mode is `separate`', () => { diff --git a/test/unit-tests/Utils.spec.ts b/test/unit-tests/Utils.spec.ts index 6650ba0a..43cdb53e 100644 --- a/test/unit-tests/Utils.spec.ts +++ b/test/unit-tests/Utils.spec.ts @@ -75,12 +75,6 @@ describe('Utils', () => { }); }); - describe('normalizeUrl (url: string): string', () => { - it('should normalize given url', () => { - assert.equal(Utils.normalizeUrl('http://localhost:9000'), 'http://localhost:9000/'); - }); - }); - describe('stringToJSFuck (string: string): string', () => { let expected: string = `${JSFuck.s} + ${JSFuck.t} + ${JSFuck.r} + ${JSFuck.i} + ${JSFuck.n} + ${JSFuck.g}`; From 826ad3ba01ad86e23818470981d19616a1cd16a0 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 19 Sep 2016 01:04:12 +0300 Subject: [PATCH 029/138] readme update --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 079ed903..e471f49f 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,8 @@ Following options available for the JS Obfuscator: rotateUnicodeArray: true, selfDefending: true, sourceMap: false, + sourceMapBaseUrl: '', + sourceMapFileName: '', sourceMapMode: 'separate', unicodeArray: true, unicodeArrayThreshold: 0.8, @@ -126,9 +128,7 @@ Following options available for the JS Obfuscator: -v, --version -h, --help - // CLI specific -o, --output - --sourceMapBaseUrl --compact --debugProtection @@ -139,6 +139,8 @@ Following options available for the JS Obfuscator: --rotateUnicodeArray --selfDefending --sourceMap + --sourceMapBaseUrl + --sourceMapFileName --sourceMapMode [inline, separate] --unicodeArray --unicodeArrayThreshold From 5069ec213be2992ef3d3c14b97e5848ba1fe5f9b Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 19 Sep 2016 08:39:30 +0300 Subject: [PATCH 030/138] `sourceMapBaseUrl` and `sourceMapFileName` wip implementation --- dist/index.js | 8 +++++++- src/options/OptionsNormalizer.ts | 12 +++++++++++- test/unit-tests/OptionsNormalizer.spec.ts | 6 ++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index d45b78b0..3bb89c81 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3338,6 +3338,12 @@ var OptionsNormalizer = function () { key: "sourceMapBaseUrl", value: function sourceMapBaseUrl(options) { var sourceMapBaseUrl = options.sourceMapBaseUrl; + if (!options.sourceMapFileName) { + Object.assign(options, { + sourceMapBaseUrl: '' + }); + return options; + } if (sourceMapBaseUrl && !sourceMapBaseUrl.endsWith('/')) { Object.assign(options, { sourceMapBaseUrl: sourceMapBaseUrl + "/" @@ -3350,7 +3356,7 @@ var OptionsNormalizer = function () { value: function sourceMapFileName(options) { var sourceMapFileName = options.sourceMapFileName; if (sourceMapFileName) { - sourceMapFileName = sourceMapFileName.split('.')[0]; + sourceMapFileName = sourceMapFileName.replace(/^\/+/, '').split('.')[0]; Object.assign(options, { sourceMapFileName: sourceMapFileName + ".js.map" }); diff --git a/src/options/OptionsNormalizer.ts b/src/options/OptionsNormalizer.ts index 5891e4aa..33dd7abb 100644 --- a/src/options/OptionsNormalizer.ts +++ b/src/options/OptionsNormalizer.ts @@ -111,6 +111,14 @@ export class OptionsNormalizer { private static sourceMapBaseUrl (options: IOptions): IOptions { let sourceMapBaseUrl: string = options.sourceMapBaseUrl; + if (!options.sourceMapFileName) { + Object.assign(options, { + sourceMapBaseUrl: '' + }); + + return options; + } + if (sourceMapBaseUrl && !sourceMapBaseUrl.endsWith('/')) { Object.assign(options, { sourceMapBaseUrl: `${sourceMapBaseUrl}/` @@ -128,7 +136,9 @@ export class OptionsNormalizer { let sourceMapFileName: string = options.sourceMapFileName; if (sourceMapFileName) { - sourceMapFileName = sourceMapFileName.split('.')[0]; + sourceMapFileName = sourceMapFileName + .replace(/^\/+/, '') + .split('.')[0]; Object.assign(options, { sourceMapFileName: `${sourceMapFileName}.js.map` diff --git a/test/unit-tests/OptionsNormalizer.spec.ts b/test/unit-tests/OptionsNormalizer.spec.ts index d1ab308d..f57a1293 100644 --- a/test/unit-tests/OptionsNormalizer.spec.ts +++ b/test/unit-tests/OptionsNormalizer.spec.ts @@ -24,6 +24,7 @@ describe('OptionsNormalizer', () => { optionsPreset1 = Object.assign({}, DEFAULT_PRESET, { compact: false, rotateUnicodeArray: true, + sourceMapBaseUrl: 'http://localhost:9000', unicodeArray: false, unicodeArrayThreshold: 0.5, wrapUnicodeArrayCalls: true @@ -31,14 +32,14 @@ describe('OptionsNormalizer', () => { optionsPreset2 = Object.assign({}, DEFAULT_PRESET, { rotateUnicodeArray: true, sourceMapBaseUrl: 'http://localhost:9000', - sourceMapFileName: 'outputSourceMapName', + sourceMapFileName: '//outputSourceMapName', unicodeArray: true, unicodeArrayThreshold: 0, wrapUnicodeArrayCalls: true }); optionsPreset3 = Object.assign({}, DEFAULT_PRESET, { domainLock: ['//localhost:9000', 'https://google.ru/abc?cde=fgh'], - sourceMapFileName: 'outputSourceMapName.map', + sourceMapFileName: '/outputSourceMapName.map', unicodeArray: true, encodeUnicodeLiterals: true, wrapUnicodeArrayCalls: false @@ -47,6 +48,7 @@ describe('OptionsNormalizer', () => { expectedOptionsPreset1 = Object.assign({}, DEFAULT_PRESET, { compact: true, rotateUnicodeArray: false, + sourceMapBaseUrl: '', unicodeArray: false, unicodeArrayThreshold: 0, wrapUnicodeArrayCalls: false From 19bfbd451425d27267606c0462e53ed728c38589 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 19 Sep 2016 23:52:54 +0300 Subject: [PATCH 031/138] DomainLockNodeTemplate spec --- dist/index.js | 2 +- .../domain-lock-nodes/DomainLockNode.ts | 4 +- .../DomainLockNodeTemplate.ts | 4 +- .../domain-lock-nodes/DomainLockNode.spec.ts | 74 +++++++++++++++++++ test/index.spec.ts | 1 + 5 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts diff --git a/dist/index.js b/dist/index.js index 3bb89c81..f29082d7 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3538,7 +3538,7 @@ exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; "use strict"; function DomainLockNodeTemplate() { - return "\n (function () {\n var regExp = new RegExp(\"[{diff}]\", \"g\");\n var domains = \"{domains}\".replace(regExp, \"\").split(\";\");\n var eval = [][\"forEach\"][\"constructor\"];\n var window = eval(\"return this\")();\n \n for (var d in window) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n break;\n }\n }\n \n for (var d1 in window[d]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n break;\n }\n }\n \n var currentDomain = window[d][d1];\n \n if (!currentDomain) {\n return;\n }\n \n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n eval('throw new Error()')();\n }\n })();\n "; + return "\n (function () {\n var regExp = new RegExp(\"[{diff}]\", \"g\");\n var domains = \"{domains}\".replace(regExp, \"\").split(\";\");\n var eval = [][\"forEach\"][\"constructor\"];\n var window = eval(\"return this\")();\n \n for (var d in window) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n break;\n }\n }\n\n for (var d1 in window[d]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n break;\n }\n }\n\n var currentDomain = window[d][d1];\n \n if (!currentDomain) {\n return;\n }\n \n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n eval('throw new Error()')();\n }\n })();\n "; } exports.DomainLockNodeTemplate = DomainLockNodeTemplate; diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts index 350c2095..92c76cc9 100644 --- a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -29,8 +29,8 @@ export class DomainLockNode extends AbstractCustomNode { * @returns {ESTree.Node} */ protected getNodeStructure (): ESTree.Node { - let domainsString = this.options.domainLock.join(';'), - [hiddenDomainsString, diff] = Utils.hideString(domainsString, domainsString.length * 3); + let domainsString: string = this.options.domainLock.join(';'), + [hiddenDomainsString, diff]: string[] = Utils.hideString(domainsString, domainsString.length * 3); return NodeUtils.convertCodeToStructure( DomainLockNodeTemplate().formatUnicorn({ diff --git a/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts b/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts index bfefde85..90c291ce 100644 --- a/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts +++ b/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts @@ -14,13 +14,13 @@ export function DomainLockNodeTemplate (): string { break; } } - + for (var d1 in window[d]) { if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) { break; } } - + var currentDomain = window[d][d1]; if (!currentDomain) { diff --git a/test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts b/test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts new file mode 100644 index 00000000..bace8a86 --- /dev/null +++ b/test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts @@ -0,0 +1,74 @@ +import 'format-unicorn'; + +import { DomainLockNodeTemplate } from "../../../../../src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate"; + +import { Utils } from "../../../../../src/Utils"; + + +const assert: Chai.AssertStatic = require('chai').assert; + +/** + * @param templateData + * @param currentDomain + * @returns {Function} + */ +function getFunctionFromTemplate (templateData: any, currentDomain: string) { + let domainLockTemplate: string = DomainLockNodeTemplate().formatUnicorn(templateData); + + return Function(` + document = { + domain: '${currentDomain}' + }; + + ${domainLockTemplate} + `)(); +} + +describe('DomainLockNodeTemplate (): string', () => { + let domainsString: string, + currentDomain: string, + hiddenDomainsString: string, + diff: string; + + it('should correctly runs code inside template if current domain matches with `domainsString`', () => { + domainsString = ['www.example.com'].join(';'); + currentDomain = 'www.example.com'; + [ + hiddenDomainsString, + diff + ] = Utils.hideString(domainsString, domainsString.length * 3); + + assert.doesNotThrow(() => getFunctionFromTemplate({ + diff: diff, + domains: hiddenDomainsString + }, currentDomain)); + }); + + it('should correctly runs code inside template if current domain matches with base domain of `domainsString` item', () => { + domainsString = ['www.test.com', '.example.com'].join(';'); + currentDomain = 'subdomain.example.com'; + [ + hiddenDomainsString, + diff + ] = Utils.hideString(domainsString, domainsString.length * 3); + + assert.doesNotThrow(() => getFunctionFromTemplate({ + diff: diff, + domains: hiddenDomainsString + }, currentDomain)); + }); + + it('should throw an error if current domain doesn\'t match with `domainsString`', () => { + domainsString = ['www.example.com'].join(';'); + currentDomain = 'www.test.com'; + [ + hiddenDomainsString, + diff + ] = Utils.hideString(domainsString, domainsString.length * 3); + + assert.throws(() => getFunctionFromTemplate({ + diff: diff, + domains: hiddenDomainsString + }, currentDomain)); + }); +}); diff --git a/test/index.spec.ts b/test/index.spec.ts index 4bf2d57a..cbdf2166 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -34,3 +34,4 @@ import './functional-tests/node-obfuscators/MemberExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec'; import './functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec'; +import './functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNode.spec'; From c59be538f2bd99ef69f4948e531ed253e7d1cd83 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 20 Sep 2016 00:39:07 +0300 Subject: [PATCH 032/138] UnicodeArrayDecodeNodeTemplate spec + deps update --- dist/index.js | 8 ++-- package.json | 10 ++--- .../UnicodeArrayDecodeNode.ts | 4 +- ...e.ts => UnicodeArrayDecodeNodeTemplate.ts} | 2 +- ...spec.ts => DomainLockNodeTemplate.spec.ts} | 0 .../UnicodeArrayDecodeNodeTemplate.spec.ts | 41 +++++++++++++++++++ test/index.spec.ts | 3 +- 7 files changed, 55 insertions(+), 13 deletions(-) rename src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/{UnicodeArrayDecodeTemplate.ts => UnicodeArrayDecodeNodeTemplate.ts} (88%) rename test/functional-tests/templates/custom-nodes/domain-lock-nodes/{DomainLockNode.spec.ts => DomainLockNodeTemplate.spec.ts} (100%) create mode 100644 test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts diff --git a/dist/index.js b/dist/index.js index f29082d7..9cd2773b 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2068,7 +2068,7 @@ var AppendState_1 = __webpack_require__(2); var NoCustomNodesPreset_1 = __webpack_require__(16); var AtobTemplate_1 = __webpack_require__(57); var SelfDefendingTemplate_1 = __webpack_require__(65); -var UnicodeArrayDecodeTemplate_1 = __webpack_require__(66); +var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(66); var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2113,7 +2113,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { } else { code = forLoopFunctionName + "();"; } - return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(UnicodeArrayDecodeTemplate_1.UnicodeArrayDecodeTemplate().formatUnicorn({ + return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(UnicodeArrayDecodeNodeTemplate_1.UnicodeArrayDecodeNodeTemplate().formatUnicorn({ atobPolyfill: AtobTemplate_1.AtobTemplate(), code: code, forLoopFunctionName: forLoopFunctionName, @@ -3587,10 +3587,10 @@ exports.SelfDefendingTemplate = SelfDefendingTemplate; "use strict"; "use strict"; -function UnicodeArrayDecodeTemplate() { +function UnicodeArrayDecodeNodeTemplate() { return "\n (function () {\n {atobPolyfill}\n \n var {forLoopFunctionName} = function () {\n var array = [];\n \n for (var i in {unicodeArrayName}) {\n array['push'](decodeURI(atob({unicodeArrayName}[i])));\n }\n \n {unicodeArrayName} = array;\n };\n \n {code}\n })();\n "; } -exports.UnicodeArrayDecodeTemplate = UnicodeArrayDecodeTemplate; +exports.UnicodeArrayDecodeNodeTemplate = UnicodeArrayDecodeNodeTemplate; /***/ }, /* 67 */ diff --git a/package.json b/package.json index 23cc3680..31ecf8b0 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "dependencies": { "babel-polyfill": "^6.13.0", "chance": "^1.0.4", - "class-validator": "next", + "class-validator": "^0.6.0", "commander": "^2.9.0", "escodegen": "^1.8.1", "esprima": "^3.0.0", @@ -47,18 +47,18 @@ "@types/sinon": "^1.16.29", "babel-cli": "^6.14.0", "babel-loader": "^6.2.5", - "babel-preset-es2015": "^6.13.2", + "babel-preset-es2015": "^6.14.0", "chai": "^3.5.0", - "coveralls": "^2.11.12", + "coveralls": "^2.11.14", "istanbul": "1.1.0-alpha.1", "mocha": "^3.0.2", - "sinon": "^2.0.0-pre.2", + "sinon": "^2.0.0-pre.3", "ts-loader": "^0.8.2", "ts-node": "^1.3.0", "tslint": "^3.15.1", "typescript": "^2.0.0", "webpack": "^2.1.0-beta.22", - "webpack-node-externals": "^1.3.3" + "webpack-node-externals": "^1.4.3" }, "repository": { "type": "git", diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts index c38e81b4..fb76d1cb 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts @@ -12,7 +12,7 @@ import { NO_CUSTOM_NODES_PRESET } from "../../preset-options/NoCustomNodesPreset import { AtobTemplate } from "../../templates/custom-nodes/AtobTemplate"; import { SelfDefendingTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate"; -import { UnicodeArrayDecodeTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeTemplate"; +import { UnicodeArrayDecodeNodeTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate"; import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; @@ -88,7 +88,7 @@ export class UnicodeArrayDecodeNode extends AbstractCustomNode { return NodeUtils.convertCodeToStructure( JavaScriptObfuscator.obfuscate( - UnicodeArrayDecodeTemplate().formatUnicorn({ + UnicodeArrayDecodeNodeTemplate().formatUnicorn({ atobPolyfill: AtobTemplate(), code, forLoopFunctionName, diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate.ts similarity index 88% rename from src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeTemplate.ts rename to src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate.ts index 7c1872a1..cc10a3e3 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate.ts @@ -1,7 +1,7 @@ /** * @returns {string} */ -export function UnicodeArrayDecodeTemplate (): string { +export function UnicodeArrayDecodeNodeTemplate (): string { return ` (function () { {atobPolyfill} diff --git a/test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts b/test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNodeTemplate.spec.ts similarity index 100% rename from test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts rename to test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNodeTemplate.spec.ts diff --git a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts new file mode 100644 index 00000000..541eb3a0 --- /dev/null +++ b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts @@ -0,0 +1,41 @@ +import 'format-unicorn'; + +import { AtobTemplate } from "../../../../../src/templates/custom-nodes/AtobTemplate"; +import { UnicodeArrayDecodeNodeTemplate } from "../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate"; + +import { Utils } from "../../../../../src/Utils"; + +const assert: Chai.AssertStatic = require('chai').assert; + +/** + * @param templateData + * @param unicodeArrayName + * @returns {Function} + */ +function getFunctionFromTemplate (templateData: any, unicodeArrayName: string) { + let domainLockTemplate: string = UnicodeArrayDecodeNodeTemplate().formatUnicorn(templateData); + + return Function(` + var ${unicodeArrayName} = ['${Utils.btoa('test1')}', '${Utils.btoa('test2')}']; + + ${domainLockTemplate} + + return ${unicodeArrayName}; + `)(); +} + +describe('UnicodeArrayDecodeNodeTemplate (): string', () => { + let forLoopFunctionName: string = 'forLoop', + code: string = `${forLoopFunctionName}();`, + unicodeArrayName: string = 'unicodeArray'; + + it('should correctly decode unicode array items from Base64', () => { + assert.deepEqual(getFunctionFromTemplate({ + atobPolyfill: AtobTemplate(), + code, + forLoopFunctionName, + unicodeArrayName: unicodeArrayName + }, unicodeArrayName), ['test1', 'test2']); + }); + +}); diff --git a/test/index.spec.ts b/test/index.spec.ts index cbdf2166..f81b4eb3 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -34,4 +34,5 @@ import './functional-tests/node-obfuscators/MemberExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec'; import './functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec'; -import './functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNode.spec'; +import './functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNodeTemplate.spec'; +import './functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec'; From 694b4056d56bbefda9a87dff9858da969aacf24c Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 20 Sep 2016 00:45:18 +0300 Subject: [PATCH 033/138] Small refactoring --- dist/index.js | 7 ++----- src/cli/JavaScriptObfuscatorCLI.ts | 12 ++---------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/dist/index.js b/dist/index.js index 9cd2773b..566d3698 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1492,7 +1492,6 @@ var SourceMapMode_1 = __webpack_require__(12); var DefaultPreset_1 = __webpack_require__(21); var CLIUtils_1 = __webpack_require__(28); var JavaScriptObfuscator_1 = __webpack_require__(9); -var JavaScriptObfuscatorInternal_1 = __webpack_require__(17); var Utils_1 = __webpack_require__(0); var JavaScriptObfuscatorCLI = function () { @@ -1573,11 +1572,9 @@ var JavaScriptObfuscatorCLI = function () { }, { key: 'processDataWithSourceMap', value: function processDataWithSourceMap(outputCodePath, options) { - var outputSourceMapPath = CLIUtils_1.CLIUtils.getOutputSourceMapPath(outputCodePath, options.sourceMapFileName ? options.sourceMapFileName : ''); + var outputSourceMapPath = CLIUtils_1.CLIUtils.getOutputSourceMapPath(outputCodePath, options.sourceMapFileName || ''); options.sourceMapFileName = path.basename(outputSourceMapPath); - var javaScriptObfuscator = new JavaScriptObfuscatorInternal_1.JavaScriptObfuscatorInternal(this.data, options); - javaScriptObfuscator.obfuscate(); - var obfuscationResult = javaScriptObfuscator.getObfuscationResult(); + var obfuscationResult = JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(this.data, options); CLIUtils_1.CLIUtils.writeFile(outputCodePath, obfuscationResult.getObfuscatedCode()); if (options.sourceMapMode === 'separate' && obfuscationResult.getSourceMap()) { CLIUtils_1.CLIUtils.writeFile(outputSourceMapPath, obfuscationResult.getSourceMap()); diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index a7a0c592..4a4453c4 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -10,7 +10,6 @@ import { DEFAULT_PRESET } from "../preset-options/DefaultPreset"; import { CLIUtils } from "./CLIUtils"; import { JavaScriptObfuscator } from "../JavaScriptObfuscator"; -import { JavaScriptObfuscatorInternal } from "../JavaScriptObfuscatorInternal"; import { Utils } from "../Utils"; export class JavaScriptObfuscatorCLI { @@ -185,19 +184,12 @@ export class JavaScriptObfuscatorCLI { private processDataWithSourceMap (outputCodePath: string, options: IObfuscatorOptions): void { let outputSourceMapPath: string = CLIUtils.getOutputSourceMapPath( outputCodePath, - options.sourceMapFileName ? options.sourceMapFileName : '' + options.sourceMapFileName || '' ); options.sourceMapFileName = path.basename(outputSourceMapPath); - const javaScriptObfuscator: JavaScriptObfuscatorInternal = new JavaScriptObfuscatorInternal( - this.data, - options - ); - - javaScriptObfuscator.obfuscate(); - - const obfuscationResult: IObfuscationResult = javaScriptObfuscator.getObfuscationResult(); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(this.data, options); CLIUtils.writeFile(outputCodePath, obfuscationResult.getObfuscatedCode()); From 5910fa50f213c39b60e0e916d128faeb5c30118b Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 20 Sep 2016 09:06:00 +0300 Subject: [PATCH 034/138] Small refactoring --- dist/index.js | 245 ++++++++++++++-------------- src/JavaScriptObfuscatorInternal.ts | 19 +-- 2 files changed, 130 insertions(+), 134 deletions(-) diff --git a/dist/index.js b/dist/index.js index 566d3698..1695bde8 100644 --- a/dist/index.js +++ b/dist/index.js @@ -103,7 +103,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var chance_1 = __webpack_require__(70); -var JSFuck_1 = __webpack_require__(19); +var JSFuck_1 = __webpack_require__(18); var Utils = function () { function Utils() { @@ -257,7 +257,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__(22); +var esprima = __webpack_require__(21); var estraverse = __webpack_require__(6); var NodeType_1 = __webpack_require__(5); var Nodes_1 = __webpack_require__(3); @@ -640,7 +640,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var JavaScriptObfuscatorCLI_1 = __webpack_require__(29); -var JavaScriptObfuscatorInternal_1 = __webpack_require__(17); +var JavaScriptObfuscatorInternal_1 = __webpack_require__(24); var JavaScriptObfuscator = function () { function JavaScriptObfuscator() { @@ -757,7 +757,7 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { _inherits(IdentifierReplacer, _AbstractReplacer_1$A); function IdentifierReplacer() { - var _Object$getPrototypeO; + var _ref; _classCallCheck(this, IdentifierReplacer); @@ -765,7 +765,7 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(IdentifierReplacer)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_ref = IdentifierReplacer.__proto__ || Object.getPrototypeOf(IdentifierReplacer)).call.apply(_ref, [this].concat(args))); _this.namesMap = new Map(); return _this; @@ -817,7 +817,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 AbstractReplacer_1 = __webpack_require__(13); -var NumberLiteralReplacer_1 = __webpack_require__(20); +var NumberLiteralReplacer_1 = __webpack_require__(19); var Utils_1 = __webpack_require__(0); var StringLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -826,7 +826,7 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { function StringLiteralReplacer() { _classCallCheck(this, StringLiteralReplacer); - return _possibleConstructorReturn(this, Object.getPrototypeOf(StringLiteralReplacer).apply(this, arguments)); + return _possibleConstructorReturn(this, (StringLiteralReplacer.__proto__ || Object.getPrototypeOf(StringLiteralReplacer)).apply(this, arguments)); } _createClass(StringLiteralReplacer, [{ @@ -905,75 +905,6 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ /***/ }, /* 17 */ -/***/ 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__(22); -var escodegen = __webpack_require__(11); -var ObfuscationResult_1 = __webpack_require__(18); -var Obfuscator_1 = __webpack_require__(25); -var Options_1 = __webpack_require__(54); -var SourceMapCorrector_1 = __webpack_require__(26); - -var JavaScriptObfuscatorInternal = function () { - function JavaScriptObfuscatorInternal(sourceCode, obfuscatorOptions) { - _classCallCheck(this, JavaScriptObfuscatorInternal); - - this.sourceCode = sourceCode; - if (obfuscatorOptions) { - this.options = new Options_1.Options(obfuscatorOptions); - } - } - - _createClass(JavaScriptObfuscatorInternal, [{ - key: 'getObfuscationResult', - value: function getObfuscationResult() { - return new SourceMapCorrector_1.SourceMapCorrector(new ObfuscationResult_1.ObfuscationResult(this.generatorOutput.code, this.generatorOutput.map), this.options.sourceMapBaseUrl + this.options.sourceMapFileName, this.options.sourceMapMode).correct(); - } - }, { - key: 'obfuscate', - value: function obfuscate() { - var astTree = esprima.parse(this.sourceCode, { - loc: true - }); - astTree = new Obfuscator_1.Obfuscator(this.options).obfuscateNode(astTree); - this.generatorOutput = JavaScriptObfuscatorInternal.generateCode(this.sourceCode, astTree, this.options); - } - }], [{ - key: 'generateCode', - value: function generateCode(sourceCode, astTree, options) { - var escodegenParams = Object.assign({}, JavaScriptObfuscatorInternal.escodegenParams), - generatorOutput = void 0; - if (options.sourceMap) { - escodegenParams.sourceMap = 'sourceMap'; - escodegenParams.sourceContent = sourceCode; - } - escodegenParams.format = { - compact: options.compact - }; - generatorOutput = escodegen.generate(astTree, escodegenParams); - generatorOutput.map = generatorOutput.map ? generatorOutput.map.toString() : ''; - return generatorOutput; - } - }]); - - return JavaScriptObfuscatorInternal; -}(); - -JavaScriptObfuscatorInternal.escodegenParams = { - verbatim: 'x-verbatim-property', - sourceMapWithCode: true -}; -exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; - -/***/ }, -/* 18 */ /***/ function(module, exports) { "use strict"; @@ -1014,7 +945,7 @@ var ObfuscationResult = function () { exports.ObfuscationResult = ObfuscationResult; /***/ }, -/* 19 */ +/* 18 */ /***/ function(module, exports) { "use strict"; @@ -1079,7 +1010,7 @@ exports.JSFuck = { }; /***/ }, -/* 20 */ +/* 19 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1102,7 +1033,7 @@ var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { function NumberLiteralReplacer() { _classCallCheck(this, NumberLiteralReplacer); - return _possibleConstructorReturn(this, Object.getPrototypeOf(NumberLiteralReplacer).apply(this, arguments)); + return _possibleConstructorReturn(this, (NumberLiteralReplacer.__proto__ || Object.getPrototypeOf(NumberLiteralReplacer)).apply(this, arguments)); } _createClass(NumberLiteralReplacer, [{ @@ -1122,7 +1053,7 @@ var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { exports.NumberLiteralReplacer = NumberLiteralReplacer; /***/ }, -/* 21 */ +/* 20 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1149,23 +1080,91 @@ exports.DEFAULT_PRESET = Object.freeze({ }); /***/ }, -/* 22 */ +/* 21 */ /***/ function(module, exports) { module.exports = require("esprima"); /***/ }, -/* 23 */ +/* 22 */ /***/ function(module, exports) { module.exports = require("path"); /***/ }, -/* 24 */ +/* 23 */ /***/ function(module, exports) { module.exports = require("babel-polyfill"); +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var esprima = __webpack_require__(21); +var escodegen = __webpack_require__(11); +var ObfuscationResult_1 = __webpack_require__(17); +var Obfuscator_1 = __webpack_require__(25); +var Options_1 = __webpack_require__(54); +var SourceMapCorrector_1 = __webpack_require__(26); + +var JavaScriptObfuscatorInternal = function () { + function JavaScriptObfuscatorInternal(sourceCode) { + var obfuscatorOptions = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + _classCallCheck(this, JavaScriptObfuscatorInternal); + + this.sourceCode = sourceCode; + this.options = new Options_1.Options(obfuscatorOptions); + } + + _createClass(JavaScriptObfuscatorInternal, [{ + key: 'getObfuscationResult', + value: function getObfuscationResult() { + return new SourceMapCorrector_1.SourceMapCorrector(new ObfuscationResult_1.ObfuscationResult(this.generatorOutput.code, this.generatorOutput.map), this.options.sourceMapBaseUrl + this.options.sourceMapFileName, this.options.sourceMapMode).correct(); + } + }, { + key: 'obfuscate', + value: function obfuscate() { + var astTree = esprima.parse(this.sourceCode, { + loc: true + }); + astTree = new Obfuscator_1.Obfuscator(this.options).obfuscateNode(astTree); + this.generatorOutput = JavaScriptObfuscatorInternal.generateCode(this.sourceCode, astTree, this.options); + } + }], [{ + key: 'generateCode', + value: function generateCode(sourceCode, astTree, options) { + var escodegenParams = Object.assign({}, JavaScriptObfuscatorInternal.escodegenParams); + if (options.sourceMap) { + escodegenParams.sourceMap = 'sourceMap'; + escodegenParams.sourceContent = sourceCode; + } + escodegenParams.format = { + compact: options.compact + }; + var generatorOutput = escodegen.generate(astTree, escodegenParams); + generatorOutput.map = generatorOutput.map ? generatorOutput.map.toString() : ''; + return generatorOutput; + } + }]); + + return JavaScriptObfuscatorInternal; +}(); + +JavaScriptObfuscatorInternal.escodegenParams = { + verbatim: 'x-verbatim-property', + sourceMapWithCode: true +}; +exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; + /***/ }, /* 25 */ /***/ function(module, exports, __webpack_require__) { @@ -1280,7 +1279,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 SourceMapMode_1 = __webpack_require__(12); -var ObfuscationResult_1 = __webpack_require__(18); +var ObfuscationResult_1 = __webpack_require__(17); var Utils_1 = __webpack_require__(0); var SourceMapCorrector = function () { @@ -1396,7 +1395,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var fs = __webpack_require__(73); var mkdirp = __webpack_require__(74); -var path = __webpack_require__(23); +var path = __webpack_require__(22); var Utils_1 = __webpack_require__(0); var CLIUtils = function () { @@ -1487,9 +1486,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 commander = __webpack_require__(72); -var path = __webpack_require__(23); +var path = __webpack_require__(22); var SourceMapMode_1 = __webpack_require__(12); -var DefaultPreset_1 = __webpack_require__(21); +var DefaultPreset_1 = __webpack_require__(20); var CLIUtils_1 = __webpack_require__(28); var JavaScriptObfuscator_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(0); @@ -1632,7 +1631,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { _inherits(ConsoleOutputDisableExpressionNode, _AbstractCustomNode_); function ConsoleOutputDisableExpressionNode() { - var _Object$getPrototypeO; + var _ref; _classCallCheck(this, ConsoleOutputDisableExpressionNode); @@ -1640,7 +1639,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(ConsoleOutputDisableExpressionNode)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_ref = ConsoleOutputDisableExpressionNode.__proto__ || Object.getPrototypeOf(ConsoleOutputDisableExpressionNode)).call.apply(_ref, [this].concat(args))); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; return _this; @@ -1690,7 +1689,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { function DebugProtectionFunctionCallNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionCallNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionFunctionCallNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (DebugProtectionFunctionCallNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionCallNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; _this.debugProtectionFunctionName = debugProtectionFunctionName; @@ -1743,7 +1742,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { function DebugProtectionFunctionIntervalNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionIntervalNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionFunctionIntervalNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (DebugProtectionFunctionIntervalNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionIntervalNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; _this.debugProtectionFunctionName = debugProtectionFunctionName; @@ -1797,7 +1796,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { function DebugProtectionFunctionNode(debugProtectionFunctionName, options) { _classCallCheck(this, DebugProtectionFunctionNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionFunctionNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (DebugProtectionFunctionNode.__proto__ || Object.getPrototypeOf(DebugProtectionFunctionNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; _this.debugProtectionFunctionName = debugProtectionFunctionName; @@ -1861,7 +1860,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { _inherits(DomainLockNode, _AbstractCustomNode_); function DomainLockNode() { - var _Object$getPrototypeO; + var _ref; _classCallCheck(this, DomainLockNode); @@ -1869,7 +1868,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(DomainLockNode)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_ref = DomainLockNode.__proto__ || Object.getPrototypeOf(DomainLockNode)).call.apply(_ref, [this].concat(args))); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; return _this; @@ -1930,7 +1929,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); function SelfDefendingUnicodeNode() { - var _Object$getPrototypeO; + var _ref; _classCallCheck(this, SelfDefendingUnicodeNode); @@ -1938,7 +1937,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(SelfDefendingUnicodeNode)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_ref = SelfDefendingUnicodeNode.__proto__ || Object.getPrototypeOf(SelfDefendingUnicodeNode)).call.apply(_ref, [this].concat(args))); _this.appendState = AppendState_1.AppendState.AfterObfuscation; return _this; @@ -1999,7 +1998,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { function UnicodeArrayCallsWrapper(unicodeArrayCallsWrapperName, unicodeArrayName, unicodeArray, options) { _classCallCheck(this, UnicodeArrayCallsWrapper); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayCallsWrapper).call(this, options)); + var _this = _possibleConstructorReturn(this, (UnicodeArrayCallsWrapper.__proto__ || Object.getPrototypeOf(UnicodeArrayCallsWrapper)).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArrayCallsWrapperName = unicodeArrayCallsWrapperName; @@ -2024,7 +2023,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { }, { key: "getNode", value: function getNode() { - return _get(Object.getPrototypeOf(UnicodeArrayCallsWrapper.prototype), "getNode", this).call(this); + return _get(UnicodeArrayCallsWrapper.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayCallsWrapper.prototype), "getNode", this).call(this); } }, { key: "getNodeStructure", @@ -2076,7 +2075,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { function UnicodeArrayDecodeNode(unicodeArrayName, unicodeArray, options) { _classCallCheck(this, UnicodeArrayDecodeNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayDecodeNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (UnicodeArrayDecodeNode.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArrayName = unicodeArrayName; @@ -2095,7 +2094,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { }, { key: "getNode", value: function getNode() { - return _get(Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), "getNode", this).call(this); + return _get(UnicodeArrayDecodeNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), "getNode", this).call(this); } }, { key: "getNodeStructure", @@ -2156,7 +2155,7 @@ var UnicodeArrayNode = function (_AbstractCustomNode_) { _classCallCheck(this, UnicodeArrayNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (UnicodeArrayNode.__proto__ || Object.getPrototypeOf(UnicodeArrayNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArray = unicodeArray; @@ -2187,7 +2186,7 @@ var UnicodeArrayNode = function (_AbstractCustomNode_) { key: 'getNode', value: function getNode() { this.unicodeArray.rotateArray(this.unicodeArrayRotateValue); - return _get(Object.getPrototypeOf(UnicodeArrayNode.prototype), 'getNode', this).call(this); + return _get(UnicodeArrayNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayNode.prototype), 'getNode', this).call(this); } }, { key: 'updateNodeData', @@ -2243,7 +2242,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { function UnicodeArrayRotateFunctionNode(unicodeArrayName, unicodeArray, unicodeArrayRotateValue, options) { _classCallCheck(this, UnicodeArrayRotateFunctionNode); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayRotateFunctionNode).call(this, options)); + var _this = _possibleConstructorReturn(this, (UnicodeArrayRotateFunctionNode.__proto__ || Object.getPrototypeOf(UnicodeArrayRotateFunctionNode)).call(this, options)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; _this.unicodeArrayName = unicodeArrayName; @@ -2263,7 +2262,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { }, { key: "getNode", value: function getNode() { - return _get(Object.getPrototypeOf(UnicodeArrayRotateFunctionNode.prototype), "getNode", this).call(this); + return _get(UnicodeArrayRotateFunctionNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayRotateFunctionNode.prototype), "getNode", this).call(this); } }, { key: "getNodeStructure", @@ -2316,7 +2315,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { function ConsoleOutputNodesGroup(options) { _classCallCheck(this, ConsoleOutputNodesGroup); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ConsoleOutputNodesGroup).call(this, options)); + var _this = _possibleConstructorReturn(this, (ConsoleOutputNodesGroup.__proto__ || Object.getPrototypeOf(ConsoleOutputNodesGroup)).call(this, options)); if (!_this.options.disableConsoleOutput) { return _possibleConstructorReturn(_this); @@ -2355,7 +2354,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { function DebugProtectionNodesGroup(options) { _classCallCheck(this, DebugProtectionNodesGroup); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DebugProtectionNodesGroup).call(this, options)); + var _this = _possibleConstructorReturn(this, (DebugProtectionNodesGroup.__proto__ || Object.getPrototypeOf(DebugProtectionNodesGroup)).call(this, options)); _this.debugProtectionFunctionIdentifier = Utils_1.Utils.getRandomVariableName(); if (!_this.options.debugProtection) { @@ -2396,7 +2395,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { function DomainLockNodesGroup(options) { _classCallCheck(this, DomainLockNodesGroup); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DomainLockNodesGroup).call(this, options)); + var _this = _possibleConstructorReturn(this, (DomainLockNodesGroup.__proto__ || Object.getPrototypeOf(DomainLockNodesGroup)).call(this, options)); if (!_this.options.domainLock.length) { return _possibleConstructorReturn(_this); @@ -2432,7 +2431,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { function SelfDefendingNodesGroup(options) { _classCallCheck(this, SelfDefendingNodesGroup); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(SelfDefendingNodesGroup).call(this, options)); + var _this = _possibleConstructorReturn(this, (SelfDefendingNodesGroup.__proto__ || Object.getPrototypeOf(SelfDefendingNodesGroup)).call(this, options)); if (!_this.options.selfDefending) { return _possibleConstructorReturn(_this); @@ -2473,7 +2472,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { function UnicodeArrayNodesGroup(options) { _classCallCheck(this, UnicodeArrayNodesGroup); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(UnicodeArrayNodesGroup).call(this, options)); + var _this = _possibleConstructorReturn(this, (UnicodeArrayNodesGroup.__proto__ || Object.getPrototypeOf(UnicodeArrayNodesGroup)).call(this, options)); _this.unicodeArrayName = Utils_1.Utils.getRandomVariableName(UnicodeArrayNode_1.UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH); _this.unicodeArrayTranslatorName = Utils_1.Utils.getRandomVariableName(UnicodeArrayNode_1.UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH); @@ -2536,7 +2535,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { function CatchClauseObfuscator(nodes, options) { _classCallCheck(this, CatchClauseObfuscator); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(CatchClauseObfuscator).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (CatchClauseObfuscator.__proto__ || Object.getPrototypeOf(CatchClauseObfuscator)).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -2607,7 +2606,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { function FunctionDeclarationObfuscator(nodes, options) { _classCallCheck(this, FunctionDeclarationObfuscator); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionDeclarationObfuscator).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (FunctionDeclarationObfuscator.__proto__ || Object.getPrototypeOf(FunctionDeclarationObfuscator)).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -2682,7 +2681,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { function FunctionObfuscator(nodes, options) { _classCallCheck(this, FunctionObfuscator); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(FunctionObfuscator).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (FunctionObfuscator.__proto__ || Object.getPrototypeOf(FunctionObfuscator)).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -2752,7 +2751,7 @@ var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); var BooleanLiteralReplacer_1 = __webpack_require__(53); var Nodes_1 = __webpack_require__(3); -var NumberLiteralReplacer_1 = __webpack_require__(20); +var NumberLiteralReplacer_1 = __webpack_require__(19); var StringLiteralReplacer_1 = __webpack_require__(15); var LiteralObfuscator = function (_AbstractNodeObfuscat) { @@ -2761,7 +2760,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { function LiteralObfuscator() { _classCallCheck(this, LiteralObfuscator); - return _possibleConstructorReturn(this, Object.getPrototypeOf(LiteralObfuscator).apply(this, arguments)); + return _possibleConstructorReturn(this, (LiteralObfuscator.__proto__ || Object.getPrototypeOf(LiteralObfuscator)).apply(this, arguments)); } _createClass(LiteralObfuscator, [{ @@ -2824,7 +2823,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { function MemberExpressionObfuscator() { _classCallCheck(this, MemberExpressionObfuscator); - return _possibleConstructorReturn(this, Object.getPrototypeOf(MemberExpressionObfuscator).apply(this, arguments)); + return _possibleConstructorReturn(this, (MemberExpressionObfuscator.__proto__ || Object.getPrototypeOf(MemberExpressionObfuscator)).apply(this, arguments)); } _createClass(MemberExpressionObfuscator, [{ @@ -2906,7 +2905,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MethodDefinitionObfuscator, _AbstractNodeObfuscat); function MethodDefinitionObfuscator() { - var _Object$getPrototypeO; + var _ref; _classCallCheck(this, MethodDefinitionObfuscator); @@ -2914,7 +2913,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { args[_key] = arguments[_key]; } - var _this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(MethodDefinitionObfuscator)).call.apply(_Object$getPrototypeO, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (_ref = MethodDefinitionObfuscator.__proto__ || Object.getPrototypeOf(MethodDefinitionObfuscator)).call.apply(_ref, [this].concat(args))); _this.ignoredNames = ['constructor']; return _this; @@ -2976,7 +2975,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { function ObjectExpressionObfuscator() { _classCallCheck(this, ObjectExpressionObfuscator); - return _possibleConstructorReturn(this, Object.getPrototypeOf(ObjectExpressionObfuscator).apply(this, arguments)); + return _possibleConstructorReturn(this, (ObjectExpressionObfuscator.__proto__ || Object.getPrototypeOf(ObjectExpressionObfuscator)).apply(this, arguments)); } _createClass(ObjectExpressionObfuscator, [{ @@ -3059,7 +3058,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { function VariableDeclarationObfuscator(nodes, options) { _classCallCheck(this, VariableDeclarationObfuscator); - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(VariableDeclarationObfuscator).call(this, nodes, options)); + var _this = _possibleConstructorReturn(this, (VariableDeclarationObfuscator.__proto__ || Object.getPrototypeOf(VariableDeclarationObfuscator)).call(this, nodes, options)); _this.identifierReplacer = new IdentifierReplacer_1.IdentifierReplacer(_this.nodes, _this.options); return _this; @@ -3136,7 +3135,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 JSFuck_1 = __webpack_require__(19); +var JSFuck_1 = __webpack_require__(18); var AbstractReplacer_1 = __webpack_require__(13); var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -3145,7 +3144,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { function BooleanLiteralReplacer() { _classCallCheck(this, BooleanLiteralReplacer); - return _possibleConstructorReturn(this, Object.getPrototypeOf(BooleanLiteralReplacer).apply(this, arguments)); + return _possibleConstructorReturn(this, (BooleanLiteralReplacer.__proto__ || Object.getPrototypeOf(BooleanLiteralReplacer)).apply(this, arguments)); } _createClass(BooleanLiteralReplacer, [{ @@ -3183,7 +3182,7 @@ 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__(71); -var DefaultPreset_1 = __webpack_require__(21); +var DefaultPreset_1 = __webpack_require__(20); var OptionsNormalizer_1 = __webpack_require__(55); var ValidationErrorsFormatter_1 = __webpack_require__(56); @@ -3665,7 +3664,7 @@ module.exports = require("mkdirp"); var JavaScriptObfuscator_1 = __webpack_require__(9); if (!global._babelPolyfill) { - __webpack_require__(24); + __webpack_require__(23); } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index 97601637..508e9317 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/src/JavaScriptObfuscatorInternal.ts @@ -40,12 +40,9 @@ export class JavaScriptObfuscatorInternal { * @param sourceCode * @param obfuscatorOptions */ - constructor (sourceCode: string, obfuscatorOptions?: IObfuscatorOptions) { + constructor (sourceCode: string, obfuscatorOptions: IObfuscatorOptions = {}) { this.sourceCode = sourceCode; - - if (obfuscatorOptions) { - this.options = new Options(obfuscatorOptions); - } + this.options = new Options(obfuscatorOptions); } /** @@ -54,11 +51,10 @@ export class JavaScriptObfuscatorInternal { * @param options */ private static generateCode (sourceCode: string, astTree: ESTree.Node, options: IOptions): IGeneratorOutput { - let escodegenParams: escodegen.GenerateOptions = Object.assign( - {}, - JavaScriptObfuscatorInternal.escodegenParams - ), - generatorOutput: IGeneratorOutput; + const escodegenParams: escodegen.GenerateOptions = Object.assign( + {}, + JavaScriptObfuscatorInternal.escodegenParams + ); if (options.sourceMap) { escodegenParams.sourceMap = 'sourceMap'; @@ -69,7 +65,8 @@ export class JavaScriptObfuscatorInternal { compact: options.compact }; - generatorOutput = escodegen.generate(astTree, escodegenParams); + const generatorOutput: IGeneratorOutput = escodegen.generate(astTree, escodegenParams); + generatorOutput.map = generatorOutput.map ? generatorOutput.map.toString() : ''; return generatorOutput; From 472a97a98cb059f2c8ca4661f4c8668a3e80549f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Wed, 21 Sep 2016 23:15:09 +0300 Subject: [PATCH 035/138] webpack beta 25 update --- package.json | 2 +- webpack.config.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 31ecf8b0..17eb4ada 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "ts-node": "^1.3.0", "tslint": "^3.15.1", "typescript": "^2.0.0", - "webpack": "^2.1.0-beta.22", + "webpack": "^2.1.0-beta.25", "webpack-node-externals": "^1.4.3" }, "repository": { diff --git a/webpack.config.js b/webpack.config.js index 2689f82d..c0fab5f2 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -21,8 +21,7 @@ module.exports = { ] }, resolve: { - extensions: ['', '.ts'], - modulesDirectories: ['./src', './node_modules'] + extensions: ['.ts'] }, plugins: [ new webpack.BannerPlugin( From 3ce50f9e755a73ba564a92b9893be9a27c64528f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 22 Sep 2016 08:58:53 +0300 Subject: [PATCH 036/138] Fixed `reservedNames` validation --- src/options/Options.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/options/Options.ts b/src/options/Options.ts index 40b7ae65..b643f43c 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -1,4 +1,5 @@ import { + ArrayUnique, IsBoolean, IsIn, IsNumber, @@ -73,6 +74,7 @@ export class Options implements IOptions { /** * @type {string[]} */ + @ArrayUnique() @IsString({ each: true }) From 13041d35074059c08e5bf47f75556979d8918558 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 22 Sep 2016 09:02:39 +0300 Subject: [PATCH 037/138] Fixed `domainLock` array validation --- dist/index.js | 4 ++-- src/options/Options.ts | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index 1695bde8..16947d40 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3206,11 +3206,11 @@ __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "debugProtection", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "debugProtectionInterval", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "disableConsoleOutput", void 0); -__decorate([class_validator_1.IsString({ +__decorate([class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true }), __metadata('design:type', Array)], Options.prototype, "domainLock", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "encodeUnicodeLiterals", void 0); -__decorate([class_validator_1.IsString({ +__decorate([class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true }), __metadata('design:type', Array)], Options.prototype, "reservedNames", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "rotateUnicodeArray", void 0); diff --git a/src/options/Options.ts b/src/options/Options.ts index b643f43c..903636cf 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -60,6 +60,7 @@ export class Options implements IOptions { /** * @type {string[]} */ + @ArrayUnique() @IsString({ each: true }) From 5469d4d3eda59d4f480aa19f36697c16e2e3c2d8 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 23 Sep 2016 15:05:35 +0300 Subject: [PATCH 038/138] wip runtime error fix --- dist/index.js | 82 ++++++------------- src/NodeUtils.ts | 11 +-- src/Nodes.ts | 11 ++- src/declarations/ESTree.d.ts | 1 + src/node-obfuscators/FunctionObfuscator.ts | 9 +- .../VariableDeclarationObfuscator.ts | 23 +----- .../FunctionObfuscator.spec.ts | 20 +++++ .../VariableDeclarationObfuscator.spec.ts | 60 +++++++++++++- test/mocks/NodeMocks.ts | 37 ++++++--- webpack.config.js | 3 +- 10 files changed, 157 insertions(+), 100 deletions(-) create mode 100644 test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts diff --git a/dist/index.js b/dist/index.js index 16947d40..2fbe118c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -361,6 +361,7 @@ var NodeUtils = function () { value = parentNode || node; } node['parentNode'] = value; + node['obfuscated'] = false; } }); } @@ -383,14 +384,14 @@ var NodeUtils = function () { var traverseType = arguments.length <= 3 || arguments[3] === undefined ? 'traverse' : arguments[3]; estraverse[traverseType](node, { - enter: function enter(node) { + enter: function enter(node, parentNode) { if (node.type === nodeType && visitor.enter) { - visitor.enter(node); + visitor.enter(node, parentNode); } }, - leave: function leave(node) { + leave: function leave(node, parentNode) { if (node.type === nodeType && visitor.leave) { - visitor.leave(node); + visitor.leave(node, parentNode); } } }); @@ -445,7 +446,8 @@ var Nodes = function () { return { 'type': NodeType_1.NodeType.Program, 'body': bodyNode, - 'sourceType': 'script' + 'sourceType': 'script', + 'obfuscated': false }; } }, { @@ -458,6 +460,11 @@ var Nodes = function () { value: function isBlockStatementNode(node) { return node.type === NodeType_1.NodeType.BlockStatement; } + }, { + key: "isCallExpressionNode", + value: function isCallExpressionNode(node) { + return node.type === NodeType_1.NodeType.CallExpression; + } }, { key: "isFunctionDeclarationNode", value: function isFunctionDeclarationNode(node) { @@ -757,15 +764,9 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { _inherits(IdentifierReplacer, _AbstractReplacer_1$A); function IdentifierReplacer() { - var _ref; - _classCallCheck(this, IdentifierReplacer); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var _this = _possibleConstructorReturn(this, (_ref = IdentifierReplacer.__proto__ || Object.getPrototypeOf(IdentifierReplacer)).call.apply(_ref, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (IdentifierReplacer.__proto__ || Object.getPrototypeOf(IdentifierReplacer)).apply(this, arguments)); _this.namesMap = new Map(); return _this; @@ -1631,15 +1632,9 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { _inherits(ConsoleOutputDisableExpressionNode, _AbstractCustomNode_); function ConsoleOutputDisableExpressionNode() { - var _ref; - _classCallCheck(this, ConsoleOutputDisableExpressionNode); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var _this = _possibleConstructorReturn(this, (_ref = ConsoleOutputDisableExpressionNode.__proto__ || Object.getPrototypeOf(ConsoleOutputDisableExpressionNode)).call.apply(_ref, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (ConsoleOutputDisableExpressionNode.__proto__ || Object.getPrototypeOf(ConsoleOutputDisableExpressionNode)).apply(this, arguments)); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; return _this; @@ -1860,15 +1855,9 @@ var DomainLockNode = function (_AbstractCustomNode_) { _inherits(DomainLockNode, _AbstractCustomNode_); function DomainLockNode() { - var _ref; - _classCallCheck(this, DomainLockNode); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var _this = _possibleConstructorReturn(this, (_ref = DomainLockNode.__proto__ || Object.getPrototypeOf(DomainLockNode)).call.apply(_ref, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (DomainLockNode.__proto__ || Object.getPrototypeOf(DomainLockNode)).apply(this, arguments)); _this.appendState = AppendState_1.AppendState.BeforeObfuscation; return _this; @@ -1929,15 +1918,9 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); function SelfDefendingUnicodeNode() { - var _ref; - _classCallCheck(this, SelfDefendingUnicodeNode); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var _this = _possibleConstructorReturn(this, (_ref = SelfDefendingUnicodeNode.__proto__ || Object.getPrototypeOf(SelfDefendingUnicodeNode)).call.apply(_ref, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (SelfDefendingUnicodeNode.__proto__ || Object.getPrototypeOf(SelfDefendingUnicodeNode)).apply(this, arguments)); _this.appendState = AppendState_1.AppendState.AfterObfuscation; return _this; @@ -2712,9 +2695,13 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { var _this3 = this; var replaceVisitor = { - leave: function leave(node, parentNode) { + enter: function enter(node, parentNode) { if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = _this3.identifierReplacer.replace(node.name); + var newNodeName = _this3.identifierReplacer.replace(node.name); + if (node.name !== newNodeName) { + node.name = newNodeName; + node.obfuscated = true; + } } } }; @@ -2905,15 +2892,9 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MethodDefinitionObfuscator, _AbstractNodeObfuscat); function MethodDefinitionObfuscator() { - var _ref; - _classCallCheck(this, MethodDefinitionObfuscator); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var _this = _possibleConstructorReturn(this, (_ref = MethodDefinitionObfuscator.__proto__ || Object.getPrototypeOf(MethodDefinitionObfuscator)).call.apply(_ref, [this].concat(args))); + var _this = _possibleConstructorReturn(this, (MethodDefinitionObfuscator.__proto__ || Object.getPrototypeOf(MethodDefinitionObfuscator)).apply(this, arguments)); _this.ignoredNames = ['constructor']; return _this; @@ -3091,23 +3072,10 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { value: function replaceVariableNames(variableDeclarationNode, variableParentNode) { var _this3 = this; - var scopeNode = variableDeclarationNode.kind === 'var' ? NodeUtils_1.NodeUtils.getBlockScopeOfNode(variableDeclarationNode) : variableParentNode, - isNodeAfterVariableDeclaratorFlag = false; + var scopeNode = variableDeclarationNode.kind === 'var' ? NodeUtils_1.NodeUtils.getBlockScopeOfNode(variableDeclarationNode) : variableParentNode; estraverse.replace(scopeNode, { enter: function enter(node, parentNode) { - if (Nodes_1.Nodes.isArrowFunctionExpressionNode(node) || Nodes_1.Nodes.isFunctionDeclarationNode(node) || Nodes_1.Nodes.isFunctionExpressionNode(node)) { - estraverse.replace(node, { - enter: function enter(node, parentNode) { - if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = _this3.identifierReplacer.replace(node.name); - } - } - }); - } - if (Nodes_1.Nodes.isVariableDeclarationNode(node) && node === variableDeclarationNode) { - isNodeAfterVariableDeclaratorFlag = true; - } - if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode) && isNodeAfterVariableDeclaratorFlag) { + if (!node.obfuscated && Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { node.name = _this3.identifierReplacer.replace(node.name); } } diff --git a/src/NodeUtils.ts b/src/NodeUtils.ts index cf83cecf..c0dc25e4 100644 --- a/src/NodeUtils.ts +++ b/src/NodeUtils.ts @@ -148,6 +148,7 @@ export class NodeUtils { } node['parentNode'] = value; + node['obfuscated'] = false; } }); } @@ -186,18 +187,18 @@ export class NodeUtils { public static typedTraverse ( node: ESTree.Node, nodeType: string, - visitor: {enter?: (node: ESTree.Node) => void, leave?: (node: ESTree.Node) => void}, + visitor: estraverse.Visitor, traverseType: string = 'traverse' ): void { (estraverse)[traverseType](node, { - enter: (node: ESTree.Node): any => { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (node.type === nodeType && visitor.enter) { - visitor.enter(node); + visitor.enter(node, parentNode); } }, - leave: (node: ESTree.Node): any => { + leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (node.type === nodeType && visitor.leave) { - visitor.leave(node); + visitor.leave(node, parentNode); } } }); diff --git a/src/Nodes.ts b/src/Nodes.ts index 930e6063..c1fea144 100644 --- a/src/Nodes.ts +++ b/src/Nodes.ts @@ -13,7 +13,8 @@ export class Nodes { return { 'type': NodeType.Program, 'body': bodyNode, - 'sourceType': 'script' + 'sourceType': 'script', + 'obfuscated': false }; } @@ -33,6 +34,14 @@ export class Nodes { return node.type === NodeType.BlockStatement; } + /** + * @param node + * @returns {boolean} + */ + public static isCallExpressionNode (node: ESTree.Node): node is ESTree.CallExpression { + return node.type === NodeType.CallExpression; + } + /** * @param node * @returns {boolean} diff --git a/src/declarations/ESTree.d.ts b/src/declarations/ESTree.d.ts index 3fa92514..8671ff59 100644 --- a/src/declarations/ESTree.d.ts +++ b/src/declarations/ESTree.d.ts @@ -5,6 +5,7 @@ import * as ESTree from 'estree'; declare module 'estree' { interface BaseNode { parentNode?: ESTree.Node; + obfuscated?: boolean; } interface SimpleLiteral extends ESTree.BaseNode, ESTree.BaseExpression { diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index 84c10816..3f046e2f 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -60,9 +60,14 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { */ private replaceFunctionParams (functionNode: ESTree.Function): void { let replaceVisitor: estraverse.Visitor = { - leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = this.identifierReplacer.replace(node.name); + const newNodeName: string = this.identifierReplacer.replace(node.name); + + if (node.name !== newNodeName) { + node.name = newNodeName; + node.obfuscated = true; + } } } }; diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index 6e79a47f..7540b477 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -69,30 +69,11 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { private replaceVariableNames (variableDeclarationNode: ESTree.VariableDeclaration, variableParentNode: ESTree.Node): void { let scopeNode: ESTree.Node = variableDeclarationNode.kind === 'var' ? NodeUtils.getBlockScopeOfNode( variableDeclarationNode - ) : variableParentNode, - isNodeAfterVariableDeclaratorFlag: boolean = false; + ) : variableParentNode; estraverse.replace(scopeNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { - if ( - Nodes.isArrowFunctionExpressionNode(node) || - Nodes.isFunctionDeclarationNode(node) || - Nodes.isFunctionExpressionNode(node) - ) { - estraverse.replace(node, { - enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { - if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { - node.name = this.identifierReplacer.replace(node.name); - } - } - }); - } - - if (Nodes.isVariableDeclarationNode(node) && node === variableDeclarationNode) { - isNodeAfterVariableDeclaratorFlag = true; - } - - if (Nodes.isReplaceableIdentifierNode(node, parentNode) && isNodeAfterVariableDeclaratorFlag) { + if (!node.obfuscated && Nodes.isReplaceableIdentifierNode(node, parentNode)) { node.name = this.identifierReplacer.replace(node.name); } } diff --git a/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts b/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts new file mode 100644 index 00000000..fa05728d --- /dev/null +++ b/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts @@ -0,0 +1,20 @@ +import { IObfuscationResult } from "../../../src/interfaces/IObfuscationResult"; + +import { NO_CUSTOM_NODES_PRESET } from "../../../src/preset-options/NoCustomNodesPreset"; + +import { JavaScriptObfuscator } from "../../../src/JavaScriptObfuscator"; + +const assert: Chai.AssertStatic = require('chai').assert; + +describe('FunctionObfuscator', () => { + describe('obfuscation of identifiers of FunctionDeclaration and FunctionExpression node body', () => { + it('should replace identifier name with obfuscated one', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + Object.assign({}, NO_CUSTOM_NODES_PRESET) + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /^var *test *= *'\\x74\\x65\\x73\\x74';$/); + }); + }); +}); diff --git a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts index cfbf7d10..2a850310 100644 --- a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts @@ -82,7 +82,65 @@ describe('VariableDeclarationObfuscator', () => { }); it('should not obfuscate variable call (`identifier` node) before variable declaration', () => { - assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(abc\);/); + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){5,6}\);/); + }); + }); + + describe(`variable calls before variable declaration when function param has the same name as variables name`, () => { + let obfuscationResult: IObfuscationResult, + functionParamIdentifierName: string|null, + innerFunctionParamIdentifierName: string|null, + constructorIdentifierName: string|null, + objectIdentifierName: string|null, + variableDeclarationIdentifierName: string|null; + + beforeEach(() => { + obfuscationResult = JavaScriptObfuscator.obfuscate( + ` + (function () { + function foo (t, e) { + return function () { + function baz (t) { + console.log(t); + } + + return {t: t}; + var t; + }(); + } + })(); + `, + Object.assign({}, NO_CUSTOM_NODES_PRESET) + ); + }); + + it('blablabla', () => { + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + const functionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/function *_0x[a-z0-9]{5,6} *\((_0x[a-z0-9]{5,6})\,(_0x[a-z0-9]{5,6})\) *\{/); + const innerFunctionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/function _0x[a-z0-9]{5,6} *\((_0x[a-z0-9]{5,6})\) *\{/); + const constructorIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/console\['\\x6c\\x6f\\x67'\]\((_0x[a-z0-9]{5,6})\)/); + const objectIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/return\{'\\x74':(_0x[a-z0-9]{5,6})\}/); + const variableDeclarationIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/var *(_0x[a-z0-9]{5,6});/); + + functionParamIdentifierName = (functionParamIdentifierMatch)[1]; + innerFunctionParamIdentifierName = (innerFunctionParamIdentifierMatch)[1]; + constructorIdentifierName = (constructorIdentifierMatch)[1]; + objectIdentifierName = (objectIdentifierMatch)[1]; + variableDeclarationIdentifierName = (variableDeclarationIdentifierMatch)[1]; + + assert.notEqual(functionParamIdentifierName, constructorIdentifierName); + assert.notEqual(functionParamIdentifierName, innerFunctionParamIdentifierName); + + assert.notEqual(functionParamIdentifierName, objectIdentifierName); + assert.notEqual(functionParamIdentifierName, variableDeclarationIdentifierName); + + assert.equal(innerFunctionParamIdentifierName, constructorIdentifierName); + assert.equal(variableDeclarationIdentifierName, objectIdentifierName); }); }); diff --git a/test/mocks/NodeMocks.ts b/test/mocks/NodeMocks.ts index 499b52c2..916b8f8b 100644 --- a/test/mocks/NodeMocks.ts +++ b/test/mocks/NodeMocks.ts @@ -12,7 +12,8 @@ export class NodeMocks { return { type: NodeType.Program, body: bodyNodes, - sourceType: 'script' + sourceType: 'script', + obfuscated: false }; } @@ -23,7 +24,8 @@ export class NodeMocks { public static getBlockStatementNode (bodyNodes: ESTree.Statement[] = []): ESTree.BlockStatement { return { type: NodeType.BlockStatement, - body: bodyNodes + body: bodyNodes, + obfuscated: false }; } @@ -35,7 +37,8 @@ export class NodeMocks { return { type: NodeType.CatchClause, param: NodeMocks.getIdentifierNode('err'), - body: NodeMocks.getBlockStatementNode(bodyNodes) + body: NodeMocks.getBlockStatementNode(bodyNodes), + obfuscated: false }; } @@ -51,7 +54,8 @@ export class NodeMocks { return { type: NodeType.CallExpression, callee: callee, - arguments: args + arguments: args, + obfuscated: false }; } @@ -64,7 +68,8 @@ export class NodeMocks { ): ESTree.ExpressionStatement { return { type: NodeType.ExpressionStatement, - expression: expression + expression: expression, + obfuscated: false }; } @@ -84,7 +89,8 @@ export class NodeMocks { id: NodeMocks.getIdentifierNode(functionName), params: params, body: blockStatementNode, - generator: false + generator: false, + obfuscated: false }; } @@ -98,9 +104,11 @@ export class NodeMocks { test: { type: 'Literal', value: true, - raw: 'true' + raw: 'true', + obfuscated: false }, - consequent: blockStatementNode + consequent: blockStatementNode, + obfuscated: false }; } @@ -112,6 +120,7 @@ export class NodeMocks { return { type: NodeType.Identifier, name: identifierName, + obfuscated: false }; } @@ -127,7 +136,8 @@ export class NodeMocks { 'x-verbatim-property': { content: `'${value}'`, precedence: escodegen.Precedence.Primary - } + }, + obfuscated: false }; } @@ -144,7 +154,8 @@ export class NodeMocks { type: NodeType.MemberExpression, computed: false, object: object, - property: property + property: property, + obfuscated: false }; } @@ -160,7 +171,8 @@ export class NodeMocks { return { type: NodeType.VariableDeclaration, declarations: declarations, - kind: kind + kind: kind, + obfuscated: false }; } @@ -173,7 +185,8 @@ export class NodeMocks { return { type: NodeType.VariableDeclarator, id: id, - init: init + init: init, + obfuscated: false }; } } diff --git a/webpack.config.js b/webpack.config.js index c0fab5f2..7403c637 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -5,7 +5,8 @@ var fs = require("fs"), webpack = require('webpack'); function getLicenseText () { - return "/*\nCopyright (C) 2016 Timofey Kachalov \n\n" + fs.readFileSync('./LICENSE.BSD', 'utf8') + "\n*/"; + return "/*\nCopyright (C) 2016 Timofey Kachalov \n\n" + + fs.readFileSync('./LICENSE.BSD', 'utf8') + "\n*/"; } module.exports = { From 3809f5445ad2634105e9c4b70a248efd8a27d6d8 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 23 Sep 2016 15:50:59 +0300 Subject: [PATCH 039/138] wip runtime error fix --- dist/index.js | 16 +++++----- src/Obfuscator.ts | 2 +- src/node-obfuscators/CatchClauseObfuscator.ts | 4 +-- .../FunctionDeclarationObfuscator.ts | 2 +- src/node-obfuscators/FunctionObfuscator.ts | 2 +- .../MemberExpressionObfuscator.ts | 2 +- .../MethodDefinitionObfuscator.ts | 2 +- .../VariableDeclarationObfuscator.ts | 2 +- .../FunctionObfuscator.spec.ts | 32 ++++++++++++++++--- .../VariableDeclarationObfuscator.spec.ts | 6 ++-- test/index.spec.ts | 1 + 11 files changed, 47 insertions(+), 24 deletions(-) diff --git a/dist/index.js b/dist/index.js index 2fbe118c..7c54291b 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1256,7 +1256,7 @@ var Obfuscator = function () { var _this2 = this; estraverse.replace(node, { - leave: function leave(node, parentNode) { + enter: function enter(node, parentNode) { _this2.initializeNodeObfuscators(node, parentNode); } }); @@ -2536,7 +2536,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { var _this2 = this; NodeUtils_1.NodeUtils.typedReplace(catchClauseNode.param, NodeType_1.NodeType.Identifier, { - leave: function leave(node) { + enter: function enter(node) { return _this2.identifierReplacer.storeNames(node.name); } }); @@ -2547,7 +2547,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { var _this3 = this; estraverse.replace(catchClauseNode, { - leave: function leave(node, parentNode) { + enter: function enter(node, parentNode) { if (Nodes_1.Nodes.isReplaceableIdentifierNode(node, parentNode)) { node.name = _this3.identifierReplacer.replace(node.name); } @@ -2610,7 +2610,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { var _this2 = this; NodeUtils_1.NodeUtils.typedReplace(functionDeclarationNode.id, NodeType_1.NodeType.Identifier, { - leave: function leave(node) { + enter: function enter(node) { return _this2.identifierReplacer.storeNames(node.name); } }); @@ -2683,7 +2683,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { functionNode.params.forEach(function (paramsNode) { NodeUtils_1.NodeUtils.typedReplace(paramsNode, NodeType_1.NodeType.Identifier, { - leave: function leave(node) { + enter: function enter(node) { return _this2.identifierReplacer.storeNames(node.name); } }); @@ -2819,7 +2819,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { var _this2 = this; estraverse.replace(memberExpressionNode.property, { - leave: function leave(node, parentNode) { + enter: function enter(node, parentNode) { if (Nodes_1.Nodes.isLiteralNode(node)) { _this2.obfuscateLiteralProperty(node); return; @@ -2911,7 +2911,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { var _this2 = this; estraverse.replace(methodDefinitionNode.key, { - leave: function leave(node) { + enter: function enter(node) { if (Nodes_1.Nodes.isIdentifierNode(node) && !Utils_1.Utils.arrayContains(_this2.ignoredNames, node.name) && methodDefinitionNode.computed === false) { methodDefinitionNode.computed = true; node.name = new StringLiteralReplacer_1.StringLiteralReplacer(_this2.nodes, _this2.options).replace(node.name); @@ -3061,7 +3061,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { variableDeclarationNode.declarations.forEach(function (declarationNode) { NodeUtils_1.NodeUtils.typedReplace(declarationNode.id, NodeType_1.NodeType.Identifier, { - leave: function leave(node) { + enter: function enter(node) { return _this2.identifierReplacer.storeNames(node.name); } }); diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index 261d2fa2..61fc3317 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -133,7 +133,7 @@ export class Obfuscator implements IObfuscator { */ private obfuscate (node: ESTree.Node): void { estraverse.replace(node, { - leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { this.initializeNodeObfuscators(node, parentNode); } }); diff --git a/src/node-obfuscators/CatchClauseObfuscator.ts b/src/node-obfuscators/CatchClauseObfuscator.ts index 48241724..b36f8b4e 100644 --- a/src/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-obfuscators/CatchClauseObfuscator.ts @@ -48,7 +48,7 @@ export class CatchClauseObfuscator extends AbstractNodeObfuscator { */ private storeCatchClauseParam (catchClauseNode: ESTree.CatchClause): void { NodeUtils.typedReplace(catchClauseNode.param, NodeType.Identifier, { - leave: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) + enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) }); } @@ -57,7 +57,7 @@ export class CatchClauseObfuscator extends AbstractNodeObfuscator { */ private replaceCatchClauseParam (catchClauseNode: ESTree.CatchClause): void { estraverse.replace(catchClauseNode, { - leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Nodes.isReplaceableIdentifierNode(node, parentNode)) { node.name = this.identifierReplacer.replace(node.name); } diff --git a/src/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-obfuscators/FunctionDeclarationObfuscator.ts index 2d4905f5..05b1ac1e 100644 --- a/src/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -54,7 +54,7 @@ export class FunctionDeclarationObfuscator extends AbstractNodeObfuscator { */ private storeFunctionName (functionDeclarationNode: ESTree.FunctionDeclaration): void { NodeUtils.typedReplace(functionDeclarationNode.id, NodeType.Identifier, { - leave: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) + enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) }); } diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index 3f046e2f..dcc50576 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -50,7 +50,7 @@ export class FunctionObfuscator extends AbstractNodeObfuscator { functionNode.params .forEach((paramsNode: ESTree.Node) => { NodeUtils.typedReplace(paramsNode, NodeType.Identifier, { - leave: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) + enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) }); }); } diff --git a/src/node-obfuscators/MemberExpressionObfuscator.ts b/src/node-obfuscators/MemberExpressionObfuscator.ts index 856c1e49..ed5e6669 100644 --- a/src/node-obfuscators/MemberExpressionObfuscator.ts +++ b/src/node-obfuscators/MemberExpressionObfuscator.ts @@ -14,7 +14,7 @@ export class MemberExpressionObfuscator extends AbstractNodeObfuscator { */ public obfuscateNode (memberExpressionNode: ESTree.MemberExpression): void { estraverse.replace(memberExpressionNode.property, { - leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Nodes.isLiteralNode(node)) { this.obfuscateLiteralProperty(node); diff --git a/src/node-obfuscators/MethodDefinitionObfuscator.ts b/src/node-obfuscators/MethodDefinitionObfuscator.ts index d11d0c82..2902d9c9 100644 --- a/src/node-obfuscators/MethodDefinitionObfuscator.ts +++ b/src/node-obfuscators/MethodDefinitionObfuscator.ts @@ -32,7 +32,7 @@ export class MethodDefinitionObfuscator extends AbstractNodeObfuscator { */ private replaceMethodName (methodDefinitionNode: ESTree.MethodDefinition): void { estraverse.replace(methodDefinitionNode.key, { - leave: (node: ESTree.Node): any => { + enter: (node: ESTree.Node): any => { if ( Nodes.isIdentifierNode(node) && !Utils.arrayContains(this.ignoredNames, node.name) && diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index 7540b477..e583ed12 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -57,7 +57,7 @@ export class VariableDeclarationObfuscator extends AbstractNodeObfuscator { variableDeclarationNode.declarations .forEach((declarationNode: ESTree.VariableDeclarator) => { NodeUtils.typedReplace(declarationNode.id, NodeType.Identifier, { - leave: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) + enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name) }); }); } diff --git a/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts b/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts index fa05728d..368dcccd 100644 --- a/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts @@ -7,14 +7,36 @@ import { JavaScriptObfuscator } from "../../../src/JavaScriptObfuscator"; const assert: Chai.AssertStatic = require('chai').assert; describe('FunctionObfuscator', () => { - describe('obfuscation of identifiers of FunctionDeclaration and FunctionExpression node body', () => { - it('should replace identifier name with obfuscated one', () => { - let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( - `var test = 'test';`, + describe('identifiers obfuscation inside `FunctionDeclaration` and `FunctionExpression` node body', () => { + it('should correct obfuscate both function parameter identifier and function body identifier with same name', () => { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + ` + (function () { + var test = function (test) { + console.log(test); + + if (true) { + var test = 5 + } + + return test; + } + })(); + `, Object.assign({}, NO_CUSTOM_NODES_PRESET) ); - assert.match(obfuscationResult.getObfuscatedCode(), /^var *test *= *'\\x74\\x65\\x73\\x74';$/); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + + const functionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/var _0x[a-z0-9]{5,6} *= *function *\((_0x[a-z0-9]{5,6})\) *\{/); + const functionBodyIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/console\['\\x6c\\x6f\\x67'\]\((_0x[a-z0-9]{5,6})\)/); + + const functionParamIdentifierName: string = (functionParamIdentifierMatch)[1]; + const functionBodyIdentifierName: string = (functionBodyIdentifierMatch)[1]; + + assert.equal(functionParamIdentifierName, functionBodyIdentifierName); }); }); }); diff --git a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts index 2a850310..794c2a42 100644 --- a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts @@ -114,7 +114,7 @@ describe('VariableDeclarationObfuscator', () => { ); }); - it('blablabla', () => { + it('should correct obfuscate variables inside function body', () => { const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); const functionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode .match(/function *_0x[a-z0-9]{5,6} *\((_0x[a-z0-9]{5,6})\,(_0x[a-z0-9]{5,6})\) *\{/); @@ -136,8 +136,8 @@ describe('VariableDeclarationObfuscator', () => { assert.notEqual(functionParamIdentifierName, constructorIdentifierName); assert.notEqual(functionParamIdentifierName, innerFunctionParamIdentifierName); - assert.notEqual(functionParamIdentifierName, objectIdentifierName); - assert.notEqual(functionParamIdentifierName, variableDeclarationIdentifierName); + assert.equal(functionParamIdentifierName, objectIdentifierName); + assert.equal(functionParamIdentifierName, variableDeclarationIdentifierName); assert.equal(innerFunctionParamIdentifierName, constructorIdentifierName); assert.equal(variableDeclarationIdentifierName, objectIdentifierName); diff --git a/test/index.spec.ts b/test/index.spec.ts index f81b4eb3..5136a0d4 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -29,6 +29,7 @@ import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWra import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec'; import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec'; import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec'; +import './functional-tests/node-obfuscators/FunctionObfuscator.spec'; import './functional-tests/node-obfuscators/LiteralObfuscator.spec'; import './functional-tests/node-obfuscators/MemberExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec'; From 7c23e9fc048e65603d2e003017797c89c93f8d3c Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 23 Sep 2016 16:35:59 +0300 Subject: [PATCH 040/138] Applying optimize-js for obfuscated code --- dist/index.js | 338 +++++++++++----------- package.json | 4 +- src/JavaScriptObfuscatorInternal.ts | 6 + src/interfaces/IObfuscatorOptions.d.ts | 1 + src/interfaces/IOptions.d.ts | 1 + src/options/Options.ts | 6 + src/preset-options/DefaultPreset.ts | 1 + src/preset-options/NoCustomNodesPreset.ts | 1 + webpack.config.js | 8 +- 9 files changed, 194 insertions(+), 172 deletions(-) diff --git a/dist/index.js b/dist/index.js index 7c54291b..a63a431f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -28,41 +28,41 @@ module.exports = /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; -/******/ + /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ + /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; -/******/ + /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; -/******/ + /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ + /******/ // Flag the module as loaded /******/ module.l = true; -/******/ + /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ + + /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; -/******/ + /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; -/******/ + /******/ // identity function for calling harmory imports with the correct context /******/ __webpack_require__.i = function(value) { return value; }; -/******/ + /******/ // define getter function for harmory exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ Object.defineProperty(exports, name, { @@ -71,7 +71,7 @@ module.exports = /******/ get: getter /******/ }); /******/ }; -/******/ + /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -80,13 +80,13 @@ module.exports = /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; -/******/ + /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ + /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; -/******/ + /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 75); /******/ }) @@ -98,14 +98,14 @@ module.exports = "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var chance_1 = __webpack_require__(70); var JSFuck_1 = __webpack_require__(18); -var Utils = function () { +var Utils = (function () { function Utils() { _classCallCheck(this, Utils); } @@ -215,9 +215,9 @@ var Utils = function () { }, { key: 'stringToJSFuck', value: function stringToJSFuck(string) { - return Array.from(string).map(function (character) { + return Array.from(string).map((function (character) { return JSFuck_1.JSFuck[character] || character; - }).join(' + '); + })).join(' + '); } }, { key: 'stringToUnicode', @@ -226,7 +226,7 @@ var Utils = function () { var prefix = void 0, regexp = new RegExp('[\x00-\x7F]'), template = void 0; - return '\'' + string.replace(/[\s\S]/g, function (escape) { + return '\'' + string.replace(/[\s\S]/g, (function (escape) { if (regexp.test(escape)) { prefix = '\\x'; template = '0'.repeat(2); @@ -235,12 +235,12 @@ var Utils = function () { template = '0'.repeat(4); } return '' + prefix + (template + escape.charCodeAt(0).toString(radix)).slice(-template.length); - }) + '\''; + })) + '\''; } }]); return Utils; -}(); +})(); Utils.randomGenerator = new chance_1.Chance(); exports.Utils = Utils; @@ -252,7 +252,7 @@ exports.Utils = Utils; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -263,7 +263,7 @@ var NodeType_1 = __webpack_require__(5); var Nodes_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); -var NodeUtils = function () { +var NodeUtils = (function () { function NodeUtils() { _classCallCheck(this, NodeUtils); } @@ -404,7 +404,7 @@ var NodeUtils = function () { }]); return NodeUtils; -}(); +})(); NodeUtils.nodesWithBlockScope = [NodeType_1.NodeType.ArrowFunctionExpression, NodeType_1.NodeType.FunctionDeclaration, NodeType_1.NodeType.FunctionExpression, NodeType_1.NodeType.MethodDefinition, NodeType_1.NodeType.Program]; exports.NodeUtils = NodeUtils; @@ -429,13 +429,13 @@ var AppendState = exports.AppendState; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var NodeType_1 = __webpack_require__(5); -var Nodes = function () { +var Nodes = (function () { function Nodes() { _classCallCheck(this, Nodes); } @@ -528,7 +528,7 @@ var Nodes = function () { }]); return Nodes; -}(); +})(); exports.Nodes = Nodes; @@ -539,11 +539,11 @@ exports.Nodes = Nodes; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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 AbstractCustomNode = function () { +var AbstractCustomNode = (function () { function AbstractCustomNode(options) { _classCallCheck(this, AbstractCustomNode); @@ -563,7 +563,7 @@ var AbstractCustomNode = function () { }]); return AbstractCustomNode; -}(); +})(); exports.AbstractCustomNode = AbstractCustomNode; @@ -642,14 +642,14 @@ module.exports = require("format-unicorn"); "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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 JavaScriptObfuscatorCLI_1 = __webpack_require__(29); var JavaScriptObfuscatorInternal_1 = __webpack_require__(24); -var JavaScriptObfuscator = function () { +var JavaScriptObfuscator = (function () { function JavaScriptObfuscator() { _classCallCheck(this, JavaScriptObfuscator); } @@ -671,7 +671,7 @@ var JavaScriptObfuscator = function () { }]); return JavaScriptObfuscator; -}(); +})(); exports.JavaScriptObfuscator = JavaScriptObfuscator; @@ -682,11 +682,11 @@ exports.JavaScriptObfuscator = JavaScriptObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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 AbstractNodesGroup = function () { +var AbstractNodesGroup = (function () { function AbstractNodesGroup(options) { _classCallCheck(this, AbstractNodesGroup); @@ -702,7 +702,7 @@ var AbstractNodesGroup = function () { }]); return AbstractNodesGroup; -}(); +})(); exports.AbstractNodesGroup = AbstractNodesGroup; @@ -749,7 +749,7 @@ exports.AbstractReplacer = AbstractReplacer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -760,7 +760,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractReplacer_1 = __webpack_require__(13); var Utils_1 = __webpack_require__(0); -var IdentifierReplacer = function (_AbstractReplacer_1$A) { +var IdentifierReplacer = (function (_AbstractReplacer_1$A) { _inherits(IdentifierReplacer, _AbstractReplacer_1$A); function IdentifierReplacer() { @@ -791,14 +791,14 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { }, { key: "isReservedName", value: function isReservedName(name) { - return this.options.reservedNames.some(function (reservedName) { + return this.options.reservedNames.some((function (reservedName) { return new RegExp(reservedName, 'g').test(name); - }); + })); } }]); return IdentifierReplacer; -}(AbstractReplacer_1.AbstractReplacer); +})(AbstractReplacer_1.AbstractReplacer); exports.IdentifierReplacer = IdentifierReplacer; @@ -809,7 +809,7 @@ exports.IdentifierReplacer = IdentifierReplacer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -821,7 +821,7 @@ var AbstractReplacer_1 = __webpack_require__(13); var NumberLiteralReplacer_1 = __webpack_require__(19); var Utils_1 = __webpack_require__(0); -var StringLiteralReplacer = function (_AbstractReplacer_1$A) { +var StringLiteralReplacer = (function (_AbstractReplacer_1$A) { _inherits(StringLiteralReplacer, _AbstractReplacer_1$A); function StringLiteralReplacer() { @@ -873,7 +873,7 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { }]); return StringLiteralReplacer; -}(AbstractReplacer_1.AbstractReplacer); +})(AbstractReplacer_1.AbstractReplacer); exports.StringLiteralReplacer = StringLiteralReplacer; @@ -911,11 +911,11 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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 ObfuscationResult = function () { +var ObfuscationResult = (function () { function ObfuscationResult(obfuscatedCode, sourceMap) { _classCallCheck(this, ObfuscationResult); @@ -941,7 +941,7 @@ var ObfuscationResult = function () { }]); return ObfuscationResult; -}(); +})(); exports.ObfuscationResult = ObfuscationResult; @@ -1017,7 +1017,7 @@ exports.JSFuck = { "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1028,7 +1028,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractReplacer_1 = __webpack_require__(13); var Utils_1 = __webpack_require__(0); -var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { +var NumberLiteralReplacer = (function (_AbstractReplacer_1$A) { _inherits(NumberLiteralReplacer, _AbstractReplacer_1$A); function NumberLiteralReplacer() { @@ -1049,7 +1049,7 @@ var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { }]); return NumberLiteralReplacer; -}(AbstractReplacer_1.AbstractReplacer); +})(AbstractReplacer_1.AbstractReplacer); exports.NumberLiteralReplacer = NumberLiteralReplacer; @@ -1105,7 +1105,7 @@ module.exports = require("babel-polyfill"); "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1116,7 +1116,7 @@ var Obfuscator_1 = __webpack_require__(25); var Options_1 = __webpack_require__(54); var SourceMapCorrector_1 = __webpack_require__(26); -var JavaScriptObfuscatorInternal = function () { +var JavaScriptObfuscatorInternal = (function () { function JavaScriptObfuscatorInternal(sourceCode) { var obfuscatorOptions = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; @@ -1158,7 +1158,7 @@ var JavaScriptObfuscatorInternal = function () { }]); return JavaScriptObfuscatorInternal; -}(); +})(); JavaScriptObfuscatorInternal.escodegenParams = { verbatim: 'x-verbatim-property', @@ -1173,7 +1173,7 @@ exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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); } } @@ -1198,7 +1198,7 @@ var SelfDefendingNodesGroup_1 = __webpack_require__(43); var UnicodeArrayNodesGroup_1 = __webpack_require__(44); var VariableDeclarationObfuscator_1 = __webpack_require__(52); -var Obfuscator = function () { +var Obfuscator = (function () { function Obfuscator(options) { _classCallCheck(this, Obfuscator); @@ -1222,20 +1222,20 @@ var Obfuscator = function () { }, { key: 'afterObfuscation', value: function afterObfuscation(astTree) { - this.nodes.forEach(function (node) { + this.nodes.forEach((function (node) { if (node.getAppendState() === AppendState_1.AppendState.AfterObfuscation) { node.appendNode(astTree); } - }); + })); } }, { key: 'beforeObfuscation', value: function beforeObfuscation(astTree) { - this.nodes.forEach(function (node) { + this.nodes.forEach((function (node) { if (node.getAppendState() === AppendState_1.AppendState.BeforeObfuscation) { node.appendNode(astTree); } - }); + })); } }, { key: 'initializeNodeObfuscators', @@ -1246,9 +1246,9 @@ var Obfuscator = function () { if (!nodeObfuscators) { return; } - nodeObfuscators.forEach(function (obfuscator) { + nodeObfuscators.forEach((function (obfuscator) { new obfuscator(_this.nodes, _this.options).obfuscateNode(node, parentNode); - }); + })); } }, { key: 'obfuscate', @@ -1264,7 +1264,7 @@ var Obfuscator = function () { }]); return Obfuscator; -}(); +})(); exports.Obfuscator = Obfuscator; @@ -1275,7 +1275,7 @@ exports.Obfuscator = Obfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1283,7 +1283,7 @@ var SourceMapMode_1 = __webpack_require__(12); var ObfuscationResult_1 = __webpack_require__(17); var Utils_1 = __webpack_require__(0); -var SourceMapCorrector = function () { +var SourceMapCorrector = (function () { function SourceMapCorrector(obfuscationResult, sourceMapUrl, sourceMapMode) { _classCallCheck(this, SourceMapCorrector); @@ -1322,7 +1322,7 @@ var SourceMapCorrector = function () { }]); return SourceMapCorrector; -}(); +})(); exports.SourceMapCorrector = SourceMapCorrector; @@ -1333,13 +1333,13 @@ exports.SourceMapCorrector = SourceMapCorrector; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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 UnicodeArray = function () { +var UnicodeArray = (function () { function UnicodeArray() { _classCallCheck(this, UnicodeArray); @@ -1379,7 +1379,7 @@ var UnicodeArray = function () { }]); return UnicodeArray; -}(); +})(); exports.UnicodeArray = UnicodeArray; @@ -1390,7 +1390,7 @@ exports.UnicodeArray = UnicodeArray; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1399,7 +1399,7 @@ var mkdirp = __webpack_require__(74); var path = __webpack_require__(22); var Utils_1 = __webpack_require__(0); -var CLIUtils = function () { +var CLIUtils = (function () { function CLIUtils() { _classCallCheck(this, CLIUtils); } @@ -1410,9 +1410,9 @@ var CLIUtils = function () { if (outputPath) { return outputPath; } - return inputPath.split('.').map(function (value, index) { + return inputPath.split('.').map((function (value, index) { return index === 0 ? value + '-obfuscated' : value; - }).join('.'); + })).join('.'); } }, { key: 'getOutputSourceMapPath', @@ -1469,7 +1469,7 @@ var CLIUtils = function () { }]); return CLIUtils; -}(); +})(); CLIUtils.availableInputExtensions = ['.js']; CLIUtils.encoding = 'utf8'; @@ -1482,7 +1482,7 @@ exports.CLIUtils = CLIUtils; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1494,7 +1494,7 @@ var CLIUtils_1 = __webpack_require__(28); var JavaScriptObfuscator_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(0); -var JavaScriptObfuscatorCLI = function () { +var JavaScriptObfuscatorCLI = (function () { function JavaScriptObfuscatorCLI(argv) { _classCallCheck(this, JavaScriptObfuscatorCLI); @@ -1535,17 +1535,17 @@ var JavaScriptObfuscatorCLI = function () { }, { key: 'configureCommands', value: function configureCommands() { - this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { + this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', (function (val) { return val.split(','); - }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { + })).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', (function (val) { return val.split(','); - }).parse(this.rawArguments); - this.commands.on('--help', function () { + })).parse(this.rawArguments); + this.commands.on('--help', (function () { console.log(' Examples:\n'); console.log(' %> javascript-obfuscator in.js --compact true --selfDefending false'); console.log(' %> javascript-obfuscator in.js --output out.js --compact true --selfDefending false'); console.log(''); - }); + })); } }, { key: 'getData', @@ -1593,9 +1593,9 @@ var JavaScriptObfuscatorCLI = function () { }, { key: 'parseSourceMapMode', value: function parseSourceMapMode(value) { - var availableMode = Object.keys(SourceMapMode_1.SourceMapMode).some(function (key) { + var availableMode = Object.keys(SourceMapMode_1.SourceMapMode).some((function (key) { return SourceMapMode_1.SourceMapMode[key] === value; - }); + })); if (!availableMode) { throw new ReferenceError('Invalid value of `--sourceMapMode` option'); } @@ -1604,7 +1604,7 @@ var JavaScriptObfuscatorCLI = function () { }]); return JavaScriptObfuscatorCLI; -}(); +})(); exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; @@ -1615,7 +1615,7 @@ exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1628,7 +1628,7 @@ var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(58); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { +var ConsoleOutputDisableExpressionNode = (function (_AbstractCustomNode_) { _inherits(ConsoleOutputDisableExpressionNode, _AbstractCustomNode_); function ConsoleOutputDisableExpressionNode() { @@ -1653,7 +1653,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { }]); return ConsoleOutputDisableExpressionNode; -}(AbstractCustomNode_1.AbstractCustomNode); +})(AbstractCustomNode_1.AbstractCustomNode); exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; @@ -1664,7 +1664,7 @@ exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1678,7 +1678,7 @@ var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(59); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { +var DebugProtectionFunctionCallNode = (function (_AbstractCustomNode_) { _inherits(DebugProtectionFunctionCallNode, _AbstractCustomNode_); function DebugProtectionFunctionCallNode(debugProtectionFunctionName, options) { @@ -1706,7 +1706,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { }]); return DebugProtectionFunctionCallNode; -}(AbstractCustomNode_1.AbstractCustomNode); +})(AbstractCustomNode_1.AbstractCustomNode); exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; @@ -1717,7 +1717,7 @@ exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1731,7 +1731,7 @@ var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(60); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { +var DebugProtectionFunctionIntervalNode = (function (_AbstractCustomNode_) { _inherits(DebugProtectionFunctionIntervalNode, _AbstractCustomNode_); function DebugProtectionFunctionIntervalNode(debugProtectionFunctionName, options) { @@ -1759,7 +1759,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { }]); return DebugProtectionFunctionIntervalNode; -}(AbstractCustomNode_1.AbstractCustomNode); +})(AbstractCustomNode_1.AbstractCustomNode); exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; @@ -1770,7 +1770,7 @@ exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNod "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1785,7 +1785,7 @@ var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { +var DebugProtectionFunctionNode = (function (_AbstractCustomNode_) { _inherits(DebugProtectionFunctionNode, _AbstractCustomNode_); function DebugProtectionFunctionNode(debugProtectionFunctionName, options) { @@ -1823,7 +1823,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { }]); return DebugProtectionFunctionNode; -}(AbstractCustomNode_1.AbstractCustomNode); +})(AbstractCustomNode_1.AbstractCustomNode); exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; @@ -1834,9 +1834,9 @@ exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; "use strict"; "use strict"; -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); +var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +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"); } } @@ -1851,7 +1851,7 @@ var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var DomainLockNode = function (_AbstractCustomNode_) { +var DomainLockNode = (function (_AbstractCustomNode_) { _inherits(DomainLockNode, _AbstractCustomNode_); function DomainLockNode() { @@ -1887,7 +1887,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { }]); return DomainLockNode; -}(AbstractCustomNode_1.AbstractCustomNode); +})(AbstractCustomNode_1.AbstractCustomNode); exports.DomainLockNode = DomainLockNode; @@ -1898,7 +1898,7 @@ exports.DomainLockNode = DomainLockNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1914,7 +1914,7 @@ var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { +var SelfDefendingUnicodeNode = (function (_AbstractCustomNode_) { _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); function SelfDefendingUnicodeNode() { @@ -1947,7 +1947,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { }]); return SelfDefendingUnicodeNode; -}(AbstractCustomNode_1.AbstractCustomNode); +})(AbstractCustomNode_1.AbstractCustomNode); exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; @@ -1958,7 +1958,7 @@ exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; @@ -1975,7 +1975,7 @@ var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { +var UnicodeArrayCallsWrapper = (function (_AbstractCustomNode_) { _inherits(UnicodeArrayCallsWrapper, _AbstractCustomNode_); function UnicodeArrayCallsWrapper(unicodeArrayCallsWrapperName, unicodeArrayName, unicodeArray, options) { @@ -2021,7 +2021,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { }]); return UnicodeArrayCallsWrapper; -}(AbstractCustomNode_1.AbstractCustomNode); +})(AbstractCustomNode_1.AbstractCustomNode); exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; @@ -2032,7 +2032,7 @@ exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; @@ -2052,7 +2052,7 @@ var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); -var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { +var UnicodeArrayDecodeNode = (function (_AbstractCustomNode_) { _inherits(UnicodeArrayDecodeNode, _AbstractCustomNode_); function UnicodeArrayDecodeNode(unicodeArrayName, unicodeArray, options) { @@ -2102,7 +2102,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { }]); return UnicodeArrayDecodeNode; -}(AbstractCustomNode_1.AbstractCustomNode); +})(AbstractCustomNode_1.AbstractCustomNode); exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; @@ -2113,7 +2113,7 @@ exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; @@ -2129,7 +2129,7 @@ var UnicodeArrayTemplate_1 = __webpack_require__(67); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var UnicodeArrayNode = function (_AbstractCustomNode_) { +var UnicodeArrayNode = (function (_AbstractCustomNode_) { _inherits(UnicodeArrayNode, _AbstractCustomNode_); function UnicodeArrayNode(unicodeArray, unicodeArrayName) { @@ -2187,7 +2187,7 @@ var UnicodeArrayNode = function (_AbstractCustomNode_) { }]); return UnicodeArrayNode; -}(AbstractCustomNode_1.AbstractCustomNode); +})(AbstractCustomNode_1.AbstractCustomNode); UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH = 4; exports.UnicodeArrayNode = UnicodeArrayNode; @@ -2199,7 +2199,7 @@ exports.UnicodeArrayNode = UnicodeArrayNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; @@ -2219,7 +2219,7 @@ var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { +var UnicodeArrayRotateFunctionNode = (function (_AbstractCustomNode_) { _inherits(UnicodeArrayRotateFunctionNode, _AbstractCustomNode_); function UnicodeArrayRotateFunctionNode(unicodeArrayName, unicodeArray, unicodeArrayRotateValue, options) { @@ -2272,7 +2272,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { }]); return UnicodeArrayRotateFunctionNode; -}(AbstractCustomNode_1.AbstractCustomNode); +})(AbstractCustomNode_1.AbstractCustomNode); exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; @@ -2292,7 +2292,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractNodesGroup_1 = __webpack_require__(10); var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(30); -var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { +var ConsoleOutputNodesGroup = (function (_AbstractNodesGroup_) { _inherits(ConsoleOutputNodesGroup, _AbstractNodesGroup_); function ConsoleOutputNodesGroup(options) { @@ -2308,7 +2308,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { } return ConsoleOutputNodesGroup; -}(AbstractNodesGroup_1.AbstractNodesGroup); +})(AbstractNodesGroup_1.AbstractNodesGroup); exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; @@ -2331,7 +2331,7 @@ var DebugProtectionFunctionNode_1 = __webpack_require__(33); var AbstractNodesGroup_1 = __webpack_require__(10); var Utils_1 = __webpack_require__(0); -var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { +var DebugProtectionNodesGroup = (function (_AbstractNodesGroup_) { _inherits(DebugProtectionNodesGroup, _AbstractNodesGroup_); function DebugProtectionNodesGroup(options) { @@ -2352,7 +2352,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { } return DebugProtectionNodesGroup; -}(AbstractNodesGroup_1.AbstractNodesGroup); +})(AbstractNodesGroup_1.AbstractNodesGroup); exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; @@ -2372,7 +2372,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractNodesGroup_1 = __webpack_require__(10); var DomainLockNode_1 = __webpack_require__(34); -var DomainLockNodesGroup = function (_AbstractNodesGroup_) { +var DomainLockNodesGroup = (function (_AbstractNodesGroup_) { _inherits(DomainLockNodesGroup, _AbstractNodesGroup_); function DomainLockNodesGroup(options) { @@ -2388,7 +2388,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { } return DomainLockNodesGroup; -}(AbstractNodesGroup_1.AbstractNodesGroup); +})(AbstractNodesGroup_1.AbstractNodesGroup); exports.DomainLockNodesGroup = DomainLockNodesGroup; @@ -2408,7 +2408,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractNodesGroup_1 = __webpack_require__(10); var SelfDefendingUnicodeNode_1 = __webpack_require__(35); -var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { +var SelfDefendingNodesGroup = (function (_AbstractNodesGroup_) { _inherits(SelfDefendingNodesGroup, _AbstractNodesGroup_); function SelfDefendingNodesGroup(options) { @@ -2424,7 +2424,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { } return SelfDefendingNodesGroup; -}(AbstractNodesGroup_1.AbstractNodesGroup); +})(AbstractNodesGroup_1.AbstractNodesGroup); exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; @@ -2449,7 +2449,7 @@ var UnicodeArrayNode_1 = __webpack_require__(38); var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(39); var Utils_1 = __webpack_require__(0); -var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { +var UnicodeArrayNodesGroup = (function (_AbstractNodesGroup_) { _inherits(UnicodeArrayNodesGroup, _AbstractNodesGroup_); function UnicodeArrayNodesGroup(options) { @@ -2486,7 +2486,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { } return UnicodeArrayNodesGroup; -}(AbstractNodesGroup_1.AbstractNodesGroup); +})(AbstractNodesGroup_1.AbstractNodesGroup); exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; @@ -2497,7 +2497,7 @@ exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2512,7 +2512,7 @@ var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); -var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { +var CatchClauseObfuscator = (function (_AbstractNodeObfuscat) { _inherits(CatchClauseObfuscator, _AbstractNodeObfuscat); function CatchClauseObfuscator(nodes, options) { @@ -2557,7 +2557,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { }]); return CatchClauseObfuscator; -}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.CatchClauseObfuscator = CatchClauseObfuscator; @@ -2568,7 +2568,7 @@ exports.CatchClauseObfuscator = CatchClauseObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2583,7 +2583,7 @@ var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); -var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { +var FunctionDeclarationObfuscator = (function (_AbstractNodeObfuscat) { _inherits(FunctionDeclarationObfuscator, _AbstractNodeObfuscat); function FunctionDeclarationObfuscator(nodes, options) { @@ -2632,7 +2632,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { }]); return FunctionDeclarationObfuscator; -}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; @@ -2643,7 +2643,7 @@ exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2658,7 +2658,7 @@ var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); -var FunctionObfuscator = function (_AbstractNodeObfuscat) { +var FunctionObfuscator = (function (_AbstractNodeObfuscat) { _inherits(FunctionObfuscator, _AbstractNodeObfuscat); function FunctionObfuscator(nodes, options) { @@ -2681,13 +2681,13 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { value: function storeFunctionParams(functionNode) { var _this2 = this; - functionNode.params.forEach(function (paramsNode) { + functionNode.params.forEach((function (paramsNode) { NodeUtils_1.NodeUtils.typedReplace(paramsNode, NodeType_1.NodeType.Identifier, { enter: function enter(node) { return _this2.identifierReplacer.storeNames(node.name); } }); - }); + })); } }, { key: "replaceFunctionParams", @@ -2705,15 +2705,15 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { } } }; - functionNode.params.forEach(function (paramsNode) { + functionNode.params.forEach((function (paramsNode) { estraverse.replace(paramsNode, replaceVisitor); - }); + })); estraverse.replace(functionNode.body, replaceVisitor); } }]); return FunctionObfuscator; -}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.FunctionObfuscator = FunctionObfuscator; @@ -2726,7 +2726,7 @@ exports.FunctionObfuscator = FunctionObfuscator; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +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"); } } @@ -2741,7 +2741,7 @@ var Nodes_1 = __webpack_require__(3); var NumberLiteralReplacer_1 = __webpack_require__(19); var StringLiteralReplacer_1 = __webpack_require__(15); -var LiteralObfuscator = function (_AbstractNodeObfuscat) { +var LiteralObfuscator = (function (_AbstractNodeObfuscat) { _inherits(LiteralObfuscator, _AbstractNodeObfuscat); function LiteralObfuscator() { @@ -2778,7 +2778,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { }]); return LiteralObfuscator; -}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.LiteralObfuscator = LiteralObfuscator; @@ -2789,7 +2789,7 @@ exports.LiteralObfuscator = LiteralObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2804,7 +2804,7 @@ var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(3); var StringLiteralReplacer_1 = __webpack_require__(15); -var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { +var MemberExpressionObfuscator = (function (_AbstractNodeObfuscat) { _inherits(MemberExpressionObfuscator, _AbstractNodeObfuscat); function MemberExpressionObfuscator() { @@ -2863,7 +2863,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { }]); return MemberExpressionObfuscator; -}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.MemberExpressionObfuscator = MemberExpressionObfuscator; @@ -2874,7 +2874,7 @@ exports.MemberExpressionObfuscator = MemberExpressionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2888,7 +2888,7 @@ var Nodes_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); var StringLiteralReplacer_1 = __webpack_require__(15); -var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { +var MethodDefinitionObfuscator = (function (_AbstractNodeObfuscat) { _inherits(MethodDefinitionObfuscator, _AbstractNodeObfuscat); function MethodDefinitionObfuscator() { @@ -2924,7 +2924,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { }]); return MethodDefinitionObfuscator; -}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; @@ -2935,7 +2935,7 @@ exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2950,7 +2950,7 @@ var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); -var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { +var ObjectExpressionObfuscator = (function (_AbstractNodeObfuscat) { _inherits(ObjectExpressionObfuscator, _AbstractNodeObfuscat); function ObjectExpressionObfuscator() { @@ -2964,7 +2964,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { value: function obfuscateNode(objectExpressionNode) { var _this2 = this; - objectExpressionNode.properties.forEach(function (property) { + objectExpressionNode.properties.forEach((function (property) { estraverse.replace(property.key, { leave: function leave(node, parentNode) { if (Nodes_1.Nodes.isLiteralNode(node)) { @@ -2976,7 +2976,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { } } }); - }); + })); } }, { key: 'obfuscateLiteralPropertyKey', @@ -3007,7 +3007,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { }]); return ObjectExpressionObfuscator; -}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; @@ -3018,7 +3018,7 @@ exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3033,7 +3033,7 @@ var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); -var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { +var VariableDeclarationObfuscator = (function (_AbstractNodeObfuscat) { _inherits(VariableDeclarationObfuscator, _AbstractNodeObfuscat); function VariableDeclarationObfuscator(nodes, options) { @@ -3059,13 +3059,13 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { value: function storeVariableNames(variableDeclarationNode) { var _this2 = this; - variableDeclarationNode.declarations.forEach(function (declarationNode) { + variableDeclarationNode.declarations.forEach((function (declarationNode) { NodeUtils_1.NodeUtils.typedReplace(declarationNode.id, NodeType_1.NodeType.Identifier, { enter: function enter(node) { return _this2.identifierReplacer.storeNames(node.name); } }); - }); + })); } }, { key: "replaceVariableNames", @@ -3084,7 +3084,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { }]); return VariableDeclarationObfuscator; -}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; @@ -3095,7 +3095,7 @@ exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3106,7 +3106,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var JSFuck_1 = __webpack_require__(18); var AbstractReplacer_1 = __webpack_require__(13); -var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { +var BooleanLiteralReplacer = (function (_AbstractReplacer_1$A) { _inherits(BooleanLiteralReplacer, _AbstractReplacer_1$A); function BooleanLiteralReplacer() { @@ -3123,7 +3123,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { }]); return BooleanLiteralReplacer; -}(AbstractReplacer_1.AbstractReplacer); +})(AbstractReplacer_1.AbstractReplacer); exports.BooleanLiteralReplacer = BooleanLiteralReplacer; @@ -3184,9 +3184,9 @@ __decorate([class_validator_1.ArrayUnique(), class_validator_1.IsString({ __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "rotateUnicodeArray", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "selfDefending", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "sourceMap", void 0); -__decorate([class_validator_1.IsString(), class_validator_1.ValidateIf(function (options) { +__decorate([class_validator_1.IsString(), class_validator_1.ValidateIf((function (options) { return Boolean(options.sourceMapBaseUrl); -}), class_validator_1.IsUrl({ +})), class_validator_1.IsUrl({ require_protocol: false, require_valid_protocol: true }), __metadata('design:type', String)], Options.prototype, "sourceMapBaseUrl", void 0); @@ -3204,13 +3204,13 @@ exports.Options = Options; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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 OptionsNormalizer = function () { +var OptionsNormalizer = (function () { function OptionsNormalizer() { _classCallCheck(this, OptionsNormalizer); } @@ -3346,7 +3346,7 @@ var OptionsNormalizer = function () { }]); return OptionsNormalizer; -}(); +})(); OptionsNormalizer.DISABLED_UNICODE_ARRAY_OPTIONS = { encodeUnicodeLiterals: false, @@ -3373,11 +3373,11 @@ exports.OptionsNormalizer = OptionsNormalizer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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 ValidationErrorsFormatter = function () { +var ValidationErrorsFormatter = (function () { function ValidationErrorsFormatter() { _classCallCheck(this, ValidationErrorsFormatter); } @@ -3429,7 +3429,7 @@ var ValidationErrorsFormatter = function () { }]); return ValidationErrorsFormatter; -}(); +})(); exports.ValidationErrorsFormatter = ValidationErrorsFormatter; @@ -3638,4 +3638,4 @@ module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; /***/ } /******/ ]); -//# sourceMappingURL=index.js.map \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbbnVsbF0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQW9HbUIsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7O1lBT3JpQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQ0E4RzhCLENBQUE7O2FBRTdCLENBQUE7Ozs7Ozs7OztvREFTdUMsQ0FBQTs7Ozs7Ozs7O2FBU3ZDLENBQUE7Ozs7O0NBS1osQ0FBQTs7Ozs7Ozs7Ozs7O21CQVlrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7O2dCQVdqaUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNklmLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBeUJrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7OztZQU1yaUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNkZYLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7eUJBSXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CeEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkErRWtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7OzsyQkFPdGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQjFCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7eUJBSXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0J4QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkErQ2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7eUJBV3hoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21EQStCMEIsQ0FBQTs7YUFFdEMsQ0FBQTs7Ozs7Q0FLWixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7NEJBWXJoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0QzQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkFzQ2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozt3QkFJemhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMEJ2QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQTRFa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs0QkFXcmhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCM0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBd0RrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7O21DQVc5Z0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMENsQyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7bUJBZWtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQkF5QmhpQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0JBd0JjLENBQUE7Ozs7YUFJbEIsQ0FBQTs7Ozs7K0JBS2tCLENBQUE7Ozs7YUFJbEIsQ0FBQTs7Ozs7Ozs7Ozs7b0NBV3VCLENBQUE7O2FBRXZCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQlosQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7eUJBUXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F1Q3hCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7OzttQkFNOWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3Q2xCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7OztlQVNsaUIsQ0FBQTs7Ozs7Ozs7Ozs7NENBVzZCLENBQUE7O2FBRS9CLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXlEWixDQUFBOzs7Ozs7Ozs7Ozs7O21CQWFrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs4QkFZbmhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3FzQ0F5Q3VxQyxDQUFBOzthQUV4ckMsQ0FBQSw2MUNBQTYxQyxDQUFBOzthQUU3MUMsQ0FBQTt1Q0FDMEIsQ0FBQTs7Ozs7YUFLMUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dGQWdEbUUsQ0FBQTs7YUFFbkUsQ0FBQTs7Ozs7Ozs7O0NBU1osQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozt5Q0FheGdCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5QnhDLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7O3NDQWMzZ0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTRCckMsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7MENBY3ZnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNEJ6QyxDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7a0NBZS9nQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXNDakMsQ0FBQTs7Ozs7Ozs7Ozs7cUJBV29CLENBQUEsZ29CQUFnb0IsQ0FBQTs7bUJBRWxvQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztxQkFlNWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9DcEIsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7OzsrQkFnQmxoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpQzlCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OytCQWlCbGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QzlCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQW9CcGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0Q1QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O3VCQWdCMWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EwRHRCLENBQUE7Ozs7Ozs7Ozs7OzttQkFZa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxQ0FvQjVnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFEcEMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OEJBb0I2QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0I3QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQ0F1QitCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCL0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBb0IwQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0IxQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4QkFvQjZCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQjdCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJBeUI0QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUM1QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7NEJBZXJoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2QzNCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztvQ0FlN2dCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpRG5DLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozt5QkFleGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dDQXVCZSxDQUFBOzs7Ozs7YUFNM0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dDQWtCMkIsQ0FBQTs7YUFFM0IsQ0FBQTs7Ozs7O0NBTVosQ0FBQTs7Ozs7Ozs7Ozs7OzttQkFha0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7d0JBZXpoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUN2QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7aUNBZWhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTJEaEMsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7aUNBY2hoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQ2hDLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztpQ0FlaGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7O29EQWNtQixDQUFBOzs7Ozs7Ozs7Ozs7YUFZdkMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQStCWixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7b0NBZTdnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt5REEwQnFCLENBQUE7Ozs7OzthQU01QyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBbUJaLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7OzZCQVdwaEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpQjVCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dUVBNkRzRSxDQUFBOztDQUV0RSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBa0JrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozt3QkFNemhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3SXZCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkEyQmtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7OztnQ0FJamhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvRC9CLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0= \ No newline at end of file diff --git a/package.json b/package.json index 17eb4ada..5fe0082f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "0.8.0-dev.0", + "version": "0.8.0-dev.1", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", @@ -29,6 +29,7 @@ "estraverse": "^4.2.0", "format-unicorn": "^1.1.0", "mkdirp": "^0.5.1", + "optimize-js": "^1.0.1", "source-map-support": "^0.4.2" }, "devDependencies": { @@ -52,6 +53,7 @@ "coveralls": "^2.11.14", "istanbul": "1.1.0-alpha.1", "mocha": "^3.0.2", + "optimize-js-plugin": "0.0.4", "sinon": "^2.0.0-pre.3", "ts-loader": "^0.8.2", "ts-node": "^1.3.0", diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index 508e9317..d84c82a2 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/src/JavaScriptObfuscatorInternal.ts @@ -12,6 +12,8 @@ import { Obfuscator } from "./Obfuscator"; import { Options } from "./options/Options"; import { SourceMapCorrector } from "./SourceMapCorrector"; +const optimizeJs = require('optimize-js'); + export class JavaScriptObfuscatorInternal { /** * @type {GenerateOptions} @@ -67,6 +69,10 @@ export class JavaScriptObfuscatorInternal { const generatorOutput: IGeneratorOutput = escodegen.generate(astTree, escodegenParams); + if (options.optimize) { + generatorOutput.code = optimizeJs(generatorOutput.code); + } + generatorOutput.map = generatorOutput.map ? generatorOutput.map.toString() : ''; return generatorOutput; diff --git a/src/interfaces/IObfuscatorOptions.d.ts b/src/interfaces/IObfuscatorOptions.d.ts index 58940d1a..c9a22b99 100644 --- a/src/interfaces/IObfuscatorOptions.d.ts +++ b/src/interfaces/IObfuscatorOptions.d.ts @@ -6,6 +6,7 @@ export interface IObfuscatorOptions { debugProtectionInterval?: boolean; disableConsoleOutput?: boolean; encodeUnicodeLiterals?: boolean; + optimize?: boolean; reservedNames?: string[]; rotateUnicodeArray?: boolean; selfDefending?: boolean; diff --git a/src/interfaces/IOptions.d.ts b/src/interfaces/IOptions.d.ts index 3d7afb2f..7505168d 100644 --- a/src/interfaces/IOptions.d.ts +++ b/src/interfaces/IOptions.d.ts @@ -6,6 +6,7 @@ export interface IOptions { readonly debugProtectionInterval: boolean; readonly disableConsoleOutput: boolean; readonly encodeUnicodeLiterals: boolean; + readonly optimize: boolean; readonly reservedNames: string[]; readonly rotateUnicodeArray: boolean; readonly selfDefending: boolean; diff --git a/src/options/Options.ts b/src/options/Options.ts index 903636cf..f1c1ab02 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -72,6 +72,12 @@ export class Options implements IOptions { @IsBoolean() public readonly encodeUnicodeLiterals: boolean; + /** + * @type {boolean} + */ + @IsBoolean() + public readonly optimize: boolean; + /** * @type {string[]} */ diff --git a/src/preset-options/DefaultPreset.ts b/src/preset-options/DefaultPreset.ts index fd1f97c8..bf1747e5 100644 --- a/src/preset-options/DefaultPreset.ts +++ b/src/preset-options/DefaultPreset.ts @@ -9,6 +9,7 @@ export const DEFAULT_PRESET: IObfuscatorOptions = Object.freeze({ disableConsoleOutput: true, domainLock: [], encodeUnicodeLiterals: false, + optimize: true, reservedNames: [], rotateUnicodeArray: true, selfDefending: true, diff --git a/src/preset-options/NoCustomNodesPreset.ts b/src/preset-options/NoCustomNodesPreset.ts index faac40bc..5b89ecc2 100644 --- a/src/preset-options/NoCustomNodesPreset.ts +++ b/src/preset-options/NoCustomNodesPreset.ts @@ -9,6 +9,7 @@ export const NO_CUSTOM_NODES_PRESET: IObfuscatorOptions = Object.freeze({ disableConsoleOutput: false, domainLock: [], encodeUnicodeLiterals: false, + optimize: false, reservedNames: [], rotateUnicodeArray: false, selfDefending: false, diff --git a/webpack.config.js b/webpack.config.js index 7403c637..c8fb092e 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,7 +2,8 @@ var fs = require("fs"), nodeExternals = require('webpack-node-externals'), - webpack = require('webpack'); + webpack = require('webpack'), + OptimizeJSPlugin = require('optimize-js-plugin'); function getLicenseText () { return "/*\nCopyright (C) 2016 Timofey Kachalov \n\n" + @@ -31,7 +32,10 @@ module.exports = { raw: true, entryOnly: false } - ) + ), + /*new OptimizeJSPlugin({ + sourceMap: true + })*/ ], output: { path: './dist', From 77434922bf51d97a4dd1f311459556dbf933430c Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 23 Sep 2016 16:36:49 +0300 Subject: [PATCH 041/138] Applying optimize-js for obfuscated code --- dist/index.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index a63a431f..1b74f4a4 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 = 75); +/******/ return __webpack_require__(__webpack_require__.s = 76); /******/ }) /************************************************************************/ /******/ ([ @@ -892,6 +892,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ disableConsoleOutput: false, domainLock: [], encodeUnicodeLiterals: false, + optimize: false, reservedNames: [], rotateUnicodeArray: false, selfDefending: false, @@ -1068,6 +1069,7 @@ exports.DEFAULT_PRESET = Object.freeze({ disableConsoleOutput: true, domainLock: [], encodeUnicodeLiterals: false, + optimize: true, reservedNames: [], rotateUnicodeArray: true, selfDefending: true, @@ -1115,6 +1117,7 @@ var ObfuscationResult_1 = __webpack_require__(17); var Obfuscator_1 = __webpack_require__(25); var Options_1 = __webpack_require__(54); var SourceMapCorrector_1 = __webpack_require__(26); +var optimizeJs = __webpack_require__(75); var JavaScriptObfuscatorInternal = (function () { function JavaScriptObfuscatorInternal(sourceCode) { @@ -1152,6 +1155,9 @@ var JavaScriptObfuscatorInternal = (function () { compact: options.compact }; var generatorOutput = escodegen.generate(astTree, escodegenParams); + if (options.optimize) { + generatorOutput.code = optimizeJs(generatorOutput.code); + } generatorOutput.map = generatorOutput.map ? generatorOutput.map.toString() : ''; return generatorOutput; } @@ -3178,6 +3184,7 @@ __decorate([class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true }), __metadata('design:type', Array)], Options.prototype, "domainLock", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "encodeUnicodeLiterals", void 0); +__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "optimize", void 0); __decorate([class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true }), __metadata('design:type', Array)], Options.prototype, "reservedNames", void 0); @@ -3625,6 +3632,12 @@ module.exports = require("mkdirp"); /***/ }, /* 75 */ +/***/ function(module, exports) { + +module.exports = require("optimize-js"); + +/***/ }, +/* 76 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3638,4 +3651,4 @@ module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; /***/ } /******/ ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbbnVsbF0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQW9HbUIsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7O1lBT3JpQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQ0E4RzhCLENBQUE7O2FBRTdCLENBQUE7Ozs7Ozs7OztvREFTdUMsQ0FBQTs7Ozs7Ozs7O2FBU3ZDLENBQUE7Ozs7O0NBS1osQ0FBQTs7Ozs7Ozs7Ozs7O21CQVlrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7O2dCQVdqaUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNklmLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBeUJrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7OztZQU1yaUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNkZYLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7eUJBSXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CeEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkErRWtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7OzsyQkFPdGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQjFCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7eUJBSXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0J4QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkErQ2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7eUJBV3hoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21EQStCMEIsQ0FBQTs7YUFFdEMsQ0FBQTs7Ozs7Q0FLWixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7NEJBWXJoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0QzQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkFzQ2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozt3QkFJemhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMEJ2QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQTRFa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs0QkFXcmhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCM0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBd0RrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7O21DQVc5Z0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMENsQyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7bUJBZWtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQkF5QmhpQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0JBd0JjLENBQUE7Ozs7YUFJbEIsQ0FBQTs7Ozs7K0JBS2tCLENBQUE7Ozs7YUFJbEIsQ0FBQTs7Ozs7Ozs7Ozs7b0NBV3VCLENBQUE7O2FBRXZCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQlosQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7eUJBUXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F1Q3hCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7OzttQkFNOWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3Q2xCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7OztlQVNsaUIsQ0FBQTs7Ozs7Ozs7Ozs7NENBVzZCLENBQUE7O2FBRS9CLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXlEWixDQUFBOzs7Ozs7Ozs7Ozs7O21CQWFrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs4QkFZbmhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3FzQ0F5Q3VxQyxDQUFBOzthQUV4ckMsQ0FBQSw2MUNBQTYxQyxDQUFBOzthQUU3MUMsQ0FBQTt1Q0FDMEIsQ0FBQTs7Ozs7YUFLMUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dGQWdEbUUsQ0FBQTs7YUFFbkUsQ0FBQTs7Ozs7Ozs7O0NBU1osQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozt5Q0FheGdCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5QnhDLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7O3NDQWMzZ0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTRCckMsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7MENBY3ZnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNEJ6QyxDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7a0NBZS9nQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXNDakMsQ0FBQTs7Ozs7Ozs7Ozs7cUJBV29CLENBQUEsZ29CQUFnb0IsQ0FBQTs7bUJBRWxvQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztxQkFlNWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9DcEIsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7OzsrQkFnQmxoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpQzlCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OytCQWlCbGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QzlCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQW9CcGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0Q1QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O3VCQWdCMWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EwRHRCLENBQUE7Ozs7Ozs7Ozs7OzttQkFZa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxQ0FvQjVnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFEcEMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OEJBb0I2QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0I3QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQ0F1QitCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCL0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBb0IwQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0IxQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4QkFvQjZCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQjdCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJBeUI0QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUM1QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7NEJBZXJoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2QzNCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztvQ0FlN2dCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpRG5DLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozt5QkFleGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dDQXVCZSxDQUFBOzs7Ozs7YUFNM0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dDQWtCMkIsQ0FBQTs7YUFFM0IsQ0FBQTs7Ozs7O0NBTVosQ0FBQTs7Ozs7Ozs7Ozs7OzttQkFha0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7d0JBZXpoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUN2QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7aUNBZWhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTJEaEMsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7aUNBY2hoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQ2hDLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztpQ0FlaGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7O29EQWNtQixDQUFBOzs7Ozs7Ozs7Ozs7YUFZdkMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQStCWixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7b0NBZTdnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt5REEwQnFCLENBQUE7Ozs7OzthQU01QyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBbUJaLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7OzZCQVdwaEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpQjVCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dUVBNkRzRSxDQUFBOztDQUV0RSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBa0JrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozt3QkFNemhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3SXZCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkEyQmtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7OztnQ0FJamhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvRC9CLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbbnVsbF0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQW9HbUIsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7O1lBT3JpQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQ0E4RzhCLENBQUE7O2FBRTdCLENBQUE7Ozs7Ozs7OztvREFTdUMsQ0FBQTs7Ozs7Ozs7O2FBU3ZDLENBQUE7Ozs7O0NBS1osQ0FBQTs7Ozs7Ozs7Ozs7O21CQVlrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7O2dCQVdqaUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNklmLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBeUJrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7OztZQU1yaUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNkZYLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7eUJBSXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CeEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkErRWtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7OzsyQkFPdGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQjFCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7eUJBSXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0J4QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkErQ2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7eUJBV3hoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21EQStCMEIsQ0FBQTs7YUFFdEMsQ0FBQTs7Ozs7Q0FLWixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7NEJBWXJoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0QzQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBdUNrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7d0JBSXpoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTBCdkIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkE0RWtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7NEJBV3JoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FxQjNCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkF5RGtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7O21DQVk5Z0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNkNsQyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7bUJBZWtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQkF5QmhpQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0JBd0JjLENBQUE7Ozs7YUFJbEIsQ0FBQTs7Ozs7K0JBS2tCLENBQUE7Ozs7YUFJbEIsQ0FBQTs7Ozs7Ozs7Ozs7b0NBV3VCLENBQUE7O2FBRXZCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQlosQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7eUJBUXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F1Q3hCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7OzttQkFNOWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3Q2xCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7OztlQVNsaUIsQ0FBQTs7Ozs7Ozs7Ozs7NENBVzZCLENBQUE7O2FBRS9CLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXlEWixDQUFBOzs7Ozs7Ozs7Ozs7O21CQWFrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs4QkFZbmhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3FzQ0F5Q3VxQyxDQUFBOzthQUV4ckMsQ0FBQSw2MUNBQTYxQyxDQUFBOzthQUU3MUMsQ0FBQTt1Q0FDMEIsQ0FBQTs7Ozs7YUFLMUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dGQWdEbUUsQ0FBQTs7YUFFbkUsQ0FBQTs7Ozs7Ozs7O0NBU1osQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozt5Q0FheGdCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5QnhDLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7O3NDQWMzZ0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTRCckMsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7MENBY3ZnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNEJ6QyxDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7a0NBZS9nQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXNDakMsQ0FBQTs7Ozs7Ozs7Ozs7cUJBV29CLENBQUEsZ29CQUFnb0IsQ0FBQTs7bUJBRWxvQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztxQkFlNWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9DcEIsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7OzsrQkFnQmxoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpQzlCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OytCQWlCbGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QzlCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQW9CcGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0Q1QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O3VCQWdCMWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EwRHRCLENBQUE7Ozs7Ozs7Ozs7OzttQkFZa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxQ0FvQjVnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFEcEMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OEJBb0I2QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0I3QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQ0F1QitCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCL0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBb0IwQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0IxQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4QkFvQjZCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQjdCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJBeUI0QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUM1QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7NEJBZXJoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2QzNCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztvQ0FlN2dCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpRG5DLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozt5QkFleGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dDQXVCZSxDQUFBOzs7Ozs7YUFNM0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dDQWtCMkIsQ0FBQTs7YUFFM0IsQ0FBQTs7Ozs7O0NBTVosQ0FBQTs7Ozs7Ozs7Ozs7OzttQkFha0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7d0JBZXpoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUN2QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7aUNBZWhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTJEaEMsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7aUNBY2hoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQ2hDLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztpQ0FlaGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7O29EQWNtQixDQUFBOzs7Ozs7Ozs7Ozs7YUFZdkMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQStCWixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7b0NBZTdnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt5REEwQnFCLENBQUE7Ozs7OzthQU01QyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBbUJaLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7OzZCQVdwaEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpQjVCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VFQThEc0UsQ0FBQTs7Q0FFdEUsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQWtCa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7d0JBTXpoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBd0l2QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBMkJrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Z0NBSWpoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0QvQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9 \ No newline at end of file From 7ad0ac00e83e9e5f32fd4e798ea9e2443cd2565f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 23 Sep 2016 16:39:02 +0300 Subject: [PATCH 042/138] Applying optimize-js for obfuscated code --- dist/index.js | 338 +++++++++++++++++++++++++------------------------- 1 file changed, 169 insertions(+), 169 deletions(-) diff --git a/dist/index.js b/dist/index.js index 1b74f4a4..7dfca1af 100644 --- a/dist/index.js +++ b/dist/index.js @@ -28,41 +28,41 @@ module.exports = /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; - +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { - +/******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; - +/******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; - +/******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - +/******/ /******/ // Flag the module as loaded /******/ module.l = true; - +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } - - +/******/ +/******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; - +/******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; - +/******/ /******/ // identity function for calling harmory imports with the correct context /******/ __webpack_require__.i = function(value) { return value; }; - +/******/ /******/ // define getter function for harmory exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ Object.defineProperty(exports, name, { @@ -71,7 +71,7 @@ module.exports = /******/ get: getter /******/ }); /******/ }; - +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -80,13 +80,13 @@ module.exports = /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; - +/******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; - +/******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; - +/******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 76); /******/ }) @@ -98,14 +98,14 @@ module.exports = "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var chance_1 = __webpack_require__(70); var JSFuck_1 = __webpack_require__(18); -var Utils = (function () { +var Utils = function () { function Utils() { _classCallCheck(this, Utils); } @@ -215,9 +215,9 @@ var Utils = (function () { }, { key: 'stringToJSFuck', value: function stringToJSFuck(string) { - return Array.from(string).map((function (character) { + return Array.from(string).map(function (character) { return JSFuck_1.JSFuck[character] || character; - })).join(' + '); + }).join(' + '); } }, { key: 'stringToUnicode', @@ -226,7 +226,7 @@ var Utils = (function () { var prefix = void 0, regexp = new RegExp('[\x00-\x7F]'), template = void 0; - return '\'' + string.replace(/[\s\S]/g, (function (escape) { + return '\'' + string.replace(/[\s\S]/g, function (escape) { if (regexp.test(escape)) { prefix = '\\x'; template = '0'.repeat(2); @@ -235,12 +235,12 @@ var Utils = (function () { template = '0'.repeat(4); } return '' + prefix + (template + escape.charCodeAt(0).toString(radix)).slice(-template.length); - })) + '\''; + }) + '\''; } }]); return Utils; -})(); +}(); Utils.randomGenerator = new chance_1.Chance(); exports.Utils = Utils; @@ -252,7 +252,7 @@ exports.Utils = Utils; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -263,7 +263,7 @@ var NodeType_1 = __webpack_require__(5); var Nodes_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); -var NodeUtils = (function () { +var NodeUtils = function () { function NodeUtils() { _classCallCheck(this, NodeUtils); } @@ -404,7 +404,7 @@ var NodeUtils = (function () { }]); return NodeUtils; -})(); +}(); NodeUtils.nodesWithBlockScope = [NodeType_1.NodeType.ArrowFunctionExpression, NodeType_1.NodeType.FunctionDeclaration, NodeType_1.NodeType.FunctionExpression, NodeType_1.NodeType.MethodDefinition, NodeType_1.NodeType.Program]; exports.NodeUtils = NodeUtils; @@ -429,13 +429,13 @@ var AppendState = exports.AppendState; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var NodeType_1 = __webpack_require__(5); -var Nodes = (function () { +var Nodes = function () { function Nodes() { _classCallCheck(this, Nodes); } @@ -528,7 +528,7 @@ var Nodes = (function () { }]); return Nodes; -})(); +}(); exports.Nodes = Nodes; @@ -539,11 +539,11 @@ exports.Nodes = Nodes; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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 AbstractCustomNode = (function () { +var AbstractCustomNode = function () { function AbstractCustomNode(options) { _classCallCheck(this, AbstractCustomNode); @@ -563,7 +563,7 @@ var AbstractCustomNode = (function () { }]); return AbstractCustomNode; -})(); +}(); exports.AbstractCustomNode = AbstractCustomNode; @@ -642,14 +642,14 @@ module.exports = require("format-unicorn"); "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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 JavaScriptObfuscatorCLI_1 = __webpack_require__(29); var JavaScriptObfuscatorInternal_1 = __webpack_require__(24); -var JavaScriptObfuscator = (function () { +var JavaScriptObfuscator = function () { function JavaScriptObfuscator() { _classCallCheck(this, JavaScriptObfuscator); } @@ -671,7 +671,7 @@ var JavaScriptObfuscator = (function () { }]); return JavaScriptObfuscator; -})(); +}(); exports.JavaScriptObfuscator = JavaScriptObfuscator; @@ -682,11 +682,11 @@ exports.JavaScriptObfuscator = JavaScriptObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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 AbstractNodesGroup = (function () { +var AbstractNodesGroup = function () { function AbstractNodesGroup(options) { _classCallCheck(this, AbstractNodesGroup); @@ -702,7 +702,7 @@ var AbstractNodesGroup = (function () { }]); return AbstractNodesGroup; -})(); +}(); exports.AbstractNodesGroup = AbstractNodesGroup; @@ -749,7 +749,7 @@ exports.AbstractReplacer = AbstractReplacer; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -760,7 +760,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractReplacer_1 = __webpack_require__(13); var Utils_1 = __webpack_require__(0); -var IdentifierReplacer = (function (_AbstractReplacer_1$A) { +var IdentifierReplacer = function (_AbstractReplacer_1$A) { _inherits(IdentifierReplacer, _AbstractReplacer_1$A); function IdentifierReplacer() { @@ -791,14 +791,14 @@ var IdentifierReplacer = (function (_AbstractReplacer_1$A) { }, { key: "isReservedName", value: function isReservedName(name) { - return this.options.reservedNames.some((function (reservedName) { + return this.options.reservedNames.some(function (reservedName) { return new RegExp(reservedName, 'g').test(name); - })); + }); } }]); return IdentifierReplacer; -})(AbstractReplacer_1.AbstractReplacer); +}(AbstractReplacer_1.AbstractReplacer); exports.IdentifierReplacer = IdentifierReplacer; @@ -809,7 +809,7 @@ exports.IdentifierReplacer = IdentifierReplacer; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -821,7 +821,7 @@ var AbstractReplacer_1 = __webpack_require__(13); var NumberLiteralReplacer_1 = __webpack_require__(19); var Utils_1 = __webpack_require__(0); -var StringLiteralReplacer = (function (_AbstractReplacer_1$A) { +var StringLiteralReplacer = function (_AbstractReplacer_1$A) { _inherits(StringLiteralReplacer, _AbstractReplacer_1$A); function StringLiteralReplacer() { @@ -873,7 +873,7 @@ var StringLiteralReplacer = (function (_AbstractReplacer_1$A) { }]); return StringLiteralReplacer; -})(AbstractReplacer_1.AbstractReplacer); +}(AbstractReplacer_1.AbstractReplacer); exports.StringLiteralReplacer = StringLiteralReplacer; @@ -912,11 +912,11 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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 ObfuscationResult = (function () { +var ObfuscationResult = function () { function ObfuscationResult(obfuscatedCode, sourceMap) { _classCallCheck(this, ObfuscationResult); @@ -942,7 +942,7 @@ var ObfuscationResult = (function () { }]); return ObfuscationResult; -})(); +}(); exports.ObfuscationResult = ObfuscationResult; @@ -1018,7 +1018,7 @@ exports.JSFuck = { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1029,7 +1029,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractReplacer_1 = __webpack_require__(13); var Utils_1 = __webpack_require__(0); -var NumberLiteralReplacer = (function (_AbstractReplacer_1$A) { +var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { _inherits(NumberLiteralReplacer, _AbstractReplacer_1$A); function NumberLiteralReplacer() { @@ -1050,7 +1050,7 @@ var NumberLiteralReplacer = (function (_AbstractReplacer_1$A) { }]); return NumberLiteralReplacer; -})(AbstractReplacer_1.AbstractReplacer); +}(AbstractReplacer_1.AbstractReplacer); exports.NumberLiteralReplacer = NumberLiteralReplacer; @@ -1107,7 +1107,7 @@ module.exports = require("babel-polyfill"); "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1119,7 +1119,7 @@ var Options_1 = __webpack_require__(54); var SourceMapCorrector_1 = __webpack_require__(26); var optimizeJs = __webpack_require__(75); -var JavaScriptObfuscatorInternal = (function () { +var JavaScriptObfuscatorInternal = function () { function JavaScriptObfuscatorInternal(sourceCode) { var obfuscatorOptions = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; @@ -1164,7 +1164,7 @@ var JavaScriptObfuscatorInternal = (function () { }]); return JavaScriptObfuscatorInternal; -})(); +}(); JavaScriptObfuscatorInternal.escodegenParams = { verbatim: 'x-verbatim-property', @@ -1179,7 +1179,7 @@ exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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); } } @@ -1204,7 +1204,7 @@ var SelfDefendingNodesGroup_1 = __webpack_require__(43); var UnicodeArrayNodesGroup_1 = __webpack_require__(44); var VariableDeclarationObfuscator_1 = __webpack_require__(52); -var Obfuscator = (function () { +var Obfuscator = function () { function Obfuscator(options) { _classCallCheck(this, Obfuscator); @@ -1228,20 +1228,20 @@ var Obfuscator = (function () { }, { key: 'afterObfuscation', value: function afterObfuscation(astTree) { - this.nodes.forEach((function (node) { + this.nodes.forEach(function (node) { if (node.getAppendState() === AppendState_1.AppendState.AfterObfuscation) { node.appendNode(astTree); } - })); + }); } }, { key: 'beforeObfuscation', value: function beforeObfuscation(astTree) { - this.nodes.forEach((function (node) { + this.nodes.forEach(function (node) { if (node.getAppendState() === AppendState_1.AppendState.BeforeObfuscation) { node.appendNode(astTree); } - })); + }); } }, { key: 'initializeNodeObfuscators', @@ -1252,9 +1252,9 @@ var Obfuscator = (function () { if (!nodeObfuscators) { return; } - nodeObfuscators.forEach((function (obfuscator) { + nodeObfuscators.forEach(function (obfuscator) { new obfuscator(_this.nodes, _this.options).obfuscateNode(node, parentNode); - })); + }); } }, { key: 'obfuscate', @@ -1270,7 +1270,7 @@ var Obfuscator = (function () { }]); return Obfuscator; -})(); +}(); exports.Obfuscator = Obfuscator; @@ -1281,7 +1281,7 @@ exports.Obfuscator = Obfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1289,7 +1289,7 @@ var SourceMapMode_1 = __webpack_require__(12); var ObfuscationResult_1 = __webpack_require__(17); var Utils_1 = __webpack_require__(0); -var SourceMapCorrector = (function () { +var SourceMapCorrector = function () { function SourceMapCorrector(obfuscationResult, sourceMapUrl, sourceMapMode) { _classCallCheck(this, SourceMapCorrector); @@ -1328,7 +1328,7 @@ var SourceMapCorrector = (function () { }]); return SourceMapCorrector; -})(); +}(); exports.SourceMapCorrector = SourceMapCorrector; @@ -1339,13 +1339,13 @@ exports.SourceMapCorrector = SourceMapCorrector; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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 UnicodeArray = (function () { +var UnicodeArray = function () { function UnicodeArray() { _classCallCheck(this, UnicodeArray); @@ -1385,7 +1385,7 @@ var UnicodeArray = (function () { }]); return UnicodeArray; -})(); +}(); exports.UnicodeArray = UnicodeArray; @@ -1396,7 +1396,7 @@ exports.UnicodeArray = UnicodeArray; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1405,7 +1405,7 @@ var mkdirp = __webpack_require__(74); var path = __webpack_require__(22); var Utils_1 = __webpack_require__(0); -var CLIUtils = (function () { +var CLIUtils = function () { function CLIUtils() { _classCallCheck(this, CLIUtils); } @@ -1416,9 +1416,9 @@ var CLIUtils = (function () { if (outputPath) { return outputPath; } - return inputPath.split('.').map((function (value, index) { + return inputPath.split('.').map(function (value, index) { return index === 0 ? value + '-obfuscated' : value; - })).join('.'); + }).join('.'); } }, { key: 'getOutputSourceMapPath', @@ -1475,7 +1475,7 @@ var CLIUtils = (function () { }]); return CLIUtils; -})(); +}(); CLIUtils.availableInputExtensions = ['.js']; CLIUtils.encoding = 'utf8'; @@ -1488,7 +1488,7 @@ exports.CLIUtils = CLIUtils; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1500,7 +1500,7 @@ var CLIUtils_1 = __webpack_require__(28); var JavaScriptObfuscator_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(0); -var JavaScriptObfuscatorCLI = (function () { +var JavaScriptObfuscatorCLI = function () { function JavaScriptObfuscatorCLI(argv) { _classCallCheck(this, JavaScriptObfuscatorCLI); @@ -1541,17 +1541,17 @@ var JavaScriptObfuscatorCLI = (function () { }, { key: 'configureCommands', value: function configureCommands() { - this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', (function (val) { + this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); - })).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', (function (val) { + }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); - })).parse(this.rawArguments); - this.commands.on('--help', (function () { + }).parse(this.rawArguments); + this.commands.on('--help', function () { console.log(' Examples:\n'); console.log(' %> javascript-obfuscator in.js --compact true --selfDefending false'); console.log(' %> javascript-obfuscator in.js --output out.js --compact true --selfDefending false'); console.log(''); - })); + }); } }, { key: 'getData', @@ -1599,9 +1599,9 @@ var JavaScriptObfuscatorCLI = (function () { }, { key: 'parseSourceMapMode', value: function parseSourceMapMode(value) { - var availableMode = Object.keys(SourceMapMode_1.SourceMapMode).some((function (key) { + var availableMode = Object.keys(SourceMapMode_1.SourceMapMode).some(function (key) { return SourceMapMode_1.SourceMapMode[key] === value; - })); + }); if (!availableMode) { throw new ReferenceError('Invalid value of `--sourceMapMode` option'); } @@ -1610,7 +1610,7 @@ var JavaScriptObfuscatorCLI = (function () { }]); return JavaScriptObfuscatorCLI; -})(); +}(); exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; @@ -1621,7 +1621,7 @@ exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1634,7 +1634,7 @@ var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(58); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var ConsoleOutputDisableExpressionNode = (function (_AbstractCustomNode_) { +var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { _inherits(ConsoleOutputDisableExpressionNode, _AbstractCustomNode_); function ConsoleOutputDisableExpressionNode() { @@ -1659,7 +1659,7 @@ var ConsoleOutputDisableExpressionNode = (function (_AbstractCustomNode_) { }]); return ConsoleOutputDisableExpressionNode; -})(AbstractCustomNode_1.AbstractCustomNode); +}(AbstractCustomNode_1.AbstractCustomNode); exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; @@ -1670,7 +1670,7 @@ exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1684,7 +1684,7 @@ var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(59); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var DebugProtectionFunctionCallNode = (function (_AbstractCustomNode_) { +var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { _inherits(DebugProtectionFunctionCallNode, _AbstractCustomNode_); function DebugProtectionFunctionCallNode(debugProtectionFunctionName, options) { @@ -1712,7 +1712,7 @@ var DebugProtectionFunctionCallNode = (function (_AbstractCustomNode_) { }]); return DebugProtectionFunctionCallNode; -})(AbstractCustomNode_1.AbstractCustomNode); +}(AbstractCustomNode_1.AbstractCustomNode); exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; @@ -1723,7 +1723,7 @@ exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1737,7 +1737,7 @@ var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(60); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var DebugProtectionFunctionIntervalNode = (function (_AbstractCustomNode_) { +var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { _inherits(DebugProtectionFunctionIntervalNode, _AbstractCustomNode_); function DebugProtectionFunctionIntervalNode(debugProtectionFunctionName, options) { @@ -1765,7 +1765,7 @@ var DebugProtectionFunctionIntervalNode = (function (_AbstractCustomNode_) { }]); return DebugProtectionFunctionIntervalNode; -})(AbstractCustomNode_1.AbstractCustomNode); +}(AbstractCustomNode_1.AbstractCustomNode); exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; @@ -1776,7 +1776,7 @@ exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNod "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1791,7 +1791,7 @@ var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var DebugProtectionFunctionNode = (function (_AbstractCustomNode_) { +var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { _inherits(DebugProtectionFunctionNode, _AbstractCustomNode_); function DebugProtectionFunctionNode(debugProtectionFunctionName, options) { @@ -1829,7 +1829,7 @@ var DebugProtectionFunctionNode = (function (_AbstractCustomNode_) { }]); return DebugProtectionFunctionNode; -})(AbstractCustomNode_1.AbstractCustomNode); +}(AbstractCustomNode_1.AbstractCustomNode); exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; @@ -1840,9 +1840,9 @@ exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; "use strict"; "use strict"; -var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +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"); } } @@ -1857,7 +1857,7 @@ var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var DomainLockNode = (function (_AbstractCustomNode_) { +var DomainLockNode = function (_AbstractCustomNode_) { _inherits(DomainLockNode, _AbstractCustomNode_); function DomainLockNode() { @@ -1893,7 +1893,7 @@ var DomainLockNode = (function (_AbstractCustomNode_) { }]); return DomainLockNode; -})(AbstractCustomNode_1.AbstractCustomNode); +}(AbstractCustomNode_1.AbstractCustomNode); exports.DomainLockNode = DomainLockNode; @@ -1904,7 +1904,7 @@ exports.DomainLockNode = DomainLockNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1920,7 +1920,7 @@ var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var SelfDefendingUnicodeNode = (function (_AbstractCustomNode_) { +var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); function SelfDefendingUnicodeNode() { @@ -1953,7 +1953,7 @@ var SelfDefendingUnicodeNode = (function (_AbstractCustomNode_) { }]); return SelfDefendingUnicodeNode; -})(AbstractCustomNode_1.AbstractCustomNode); +}(AbstractCustomNode_1.AbstractCustomNode); exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; @@ -1964,7 +1964,7 @@ exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; @@ -1981,7 +1981,7 @@ var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var UnicodeArrayCallsWrapper = (function (_AbstractCustomNode_) { +var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { _inherits(UnicodeArrayCallsWrapper, _AbstractCustomNode_); function UnicodeArrayCallsWrapper(unicodeArrayCallsWrapperName, unicodeArrayName, unicodeArray, options) { @@ -2027,7 +2027,7 @@ var UnicodeArrayCallsWrapper = (function (_AbstractCustomNode_) { }]); return UnicodeArrayCallsWrapper; -})(AbstractCustomNode_1.AbstractCustomNode); +}(AbstractCustomNode_1.AbstractCustomNode); exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; @@ -2038,7 +2038,7 @@ exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; @@ -2058,7 +2058,7 @@ var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); -var UnicodeArrayDecodeNode = (function (_AbstractCustomNode_) { +var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { _inherits(UnicodeArrayDecodeNode, _AbstractCustomNode_); function UnicodeArrayDecodeNode(unicodeArrayName, unicodeArray, options) { @@ -2108,7 +2108,7 @@ var UnicodeArrayDecodeNode = (function (_AbstractCustomNode_) { }]); return UnicodeArrayDecodeNode; -})(AbstractCustomNode_1.AbstractCustomNode); +}(AbstractCustomNode_1.AbstractCustomNode); exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; @@ -2119,7 +2119,7 @@ exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; @@ -2135,7 +2135,7 @@ var UnicodeArrayTemplate_1 = __webpack_require__(67); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); -var UnicodeArrayNode = (function (_AbstractCustomNode_) { +var UnicodeArrayNode = function (_AbstractCustomNode_) { _inherits(UnicodeArrayNode, _AbstractCustomNode_); function UnicodeArrayNode(unicodeArray, unicodeArrayName) { @@ -2193,7 +2193,7 @@ var UnicodeArrayNode = (function (_AbstractCustomNode_) { }]); return UnicodeArrayNode; -})(AbstractCustomNode_1.AbstractCustomNode); +}(AbstractCustomNode_1.AbstractCustomNode); UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH = 4; exports.UnicodeArrayNode = UnicodeArrayNode; @@ -2205,7 +2205,7 @@ exports.UnicodeArrayNode = UnicodeArrayNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; @@ -2225,7 +2225,7 @@ var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); -var UnicodeArrayRotateFunctionNode = (function (_AbstractCustomNode_) { +var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { _inherits(UnicodeArrayRotateFunctionNode, _AbstractCustomNode_); function UnicodeArrayRotateFunctionNode(unicodeArrayName, unicodeArray, unicodeArrayRotateValue, options) { @@ -2278,7 +2278,7 @@ var UnicodeArrayRotateFunctionNode = (function (_AbstractCustomNode_) { }]); return UnicodeArrayRotateFunctionNode; -})(AbstractCustomNode_1.AbstractCustomNode); +}(AbstractCustomNode_1.AbstractCustomNode); exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; @@ -2298,7 +2298,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractNodesGroup_1 = __webpack_require__(10); var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(30); -var ConsoleOutputNodesGroup = (function (_AbstractNodesGroup_) { +var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { _inherits(ConsoleOutputNodesGroup, _AbstractNodesGroup_); function ConsoleOutputNodesGroup(options) { @@ -2314,7 +2314,7 @@ var ConsoleOutputNodesGroup = (function (_AbstractNodesGroup_) { } return ConsoleOutputNodesGroup; -})(AbstractNodesGroup_1.AbstractNodesGroup); +}(AbstractNodesGroup_1.AbstractNodesGroup); exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; @@ -2337,7 +2337,7 @@ var DebugProtectionFunctionNode_1 = __webpack_require__(33); var AbstractNodesGroup_1 = __webpack_require__(10); var Utils_1 = __webpack_require__(0); -var DebugProtectionNodesGroup = (function (_AbstractNodesGroup_) { +var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { _inherits(DebugProtectionNodesGroup, _AbstractNodesGroup_); function DebugProtectionNodesGroup(options) { @@ -2358,7 +2358,7 @@ var DebugProtectionNodesGroup = (function (_AbstractNodesGroup_) { } return DebugProtectionNodesGroup; -})(AbstractNodesGroup_1.AbstractNodesGroup); +}(AbstractNodesGroup_1.AbstractNodesGroup); exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; @@ -2378,7 +2378,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractNodesGroup_1 = __webpack_require__(10); var DomainLockNode_1 = __webpack_require__(34); -var DomainLockNodesGroup = (function (_AbstractNodesGroup_) { +var DomainLockNodesGroup = function (_AbstractNodesGroup_) { _inherits(DomainLockNodesGroup, _AbstractNodesGroup_); function DomainLockNodesGroup(options) { @@ -2394,7 +2394,7 @@ var DomainLockNodesGroup = (function (_AbstractNodesGroup_) { } return DomainLockNodesGroup; -})(AbstractNodesGroup_1.AbstractNodesGroup); +}(AbstractNodesGroup_1.AbstractNodesGroup); exports.DomainLockNodesGroup = DomainLockNodesGroup; @@ -2414,7 +2414,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractNodesGroup_1 = __webpack_require__(10); var SelfDefendingUnicodeNode_1 = __webpack_require__(35); -var SelfDefendingNodesGroup = (function (_AbstractNodesGroup_) { +var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { _inherits(SelfDefendingNodesGroup, _AbstractNodesGroup_); function SelfDefendingNodesGroup(options) { @@ -2430,7 +2430,7 @@ var SelfDefendingNodesGroup = (function (_AbstractNodesGroup_) { } return SelfDefendingNodesGroup; -})(AbstractNodesGroup_1.AbstractNodesGroup); +}(AbstractNodesGroup_1.AbstractNodesGroup); exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; @@ -2455,7 +2455,7 @@ var UnicodeArrayNode_1 = __webpack_require__(38); var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(39); var Utils_1 = __webpack_require__(0); -var UnicodeArrayNodesGroup = (function (_AbstractNodesGroup_) { +var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { _inherits(UnicodeArrayNodesGroup, _AbstractNodesGroup_); function UnicodeArrayNodesGroup(options) { @@ -2492,7 +2492,7 @@ var UnicodeArrayNodesGroup = (function (_AbstractNodesGroup_) { } return UnicodeArrayNodesGroup; -})(AbstractNodesGroup_1.AbstractNodesGroup); +}(AbstractNodesGroup_1.AbstractNodesGroup); exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; @@ -2503,7 +2503,7 @@ exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -2518,7 +2518,7 @@ var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); -var CatchClauseObfuscator = (function (_AbstractNodeObfuscat) { +var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { _inherits(CatchClauseObfuscator, _AbstractNodeObfuscat); function CatchClauseObfuscator(nodes, options) { @@ -2563,7 +2563,7 @@ var CatchClauseObfuscator = (function (_AbstractNodeObfuscat) { }]); return CatchClauseObfuscator; -})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.CatchClauseObfuscator = CatchClauseObfuscator; @@ -2574,7 +2574,7 @@ exports.CatchClauseObfuscator = CatchClauseObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -2589,7 +2589,7 @@ var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); -var FunctionDeclarationObfuscator = (function (_AbstractNodeObfuscat) { +var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { _inherits(FunctionDeclarationObfuscator, _AbstractNodeObfuscat); function FunctionDeclarationObfuscator(nodes, options) { @@ -2638,7 +2638,7 @@ var FunctionDeclarationObfuscator = (function (_AbstractNodeObfuscat) { }]); return FunctionDeclarationObfuscator; -})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; @@ -2649,7 +2649,7 @@ exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -2664,7 +2664,7 @@ var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); -var FunctionObfuscator = (function (_AbstractNodeObfuscat) { +var FunctionObfuscator = function (_AbstractNodeObfuscat) { _inherits(FunctionObfuscator, _AbstractNodeObfuscat); function FunctionObfuscator(nodes, options) { @@ -2687,13 +2687,13 @@ var FunctionObfuscator = (function (_AbstractNodeObfuscat) { value: function storeFunctionParams(functionNode) { var _this2 = this; - functionNode.params.forEach((function (paramsNode) { + functionNode.params.forEach(function (paramsNode) { NodeUtils_1.NodeUtils.typedReplace(paramsNode, NodeType_1.NodeType.Identifier, { enter: function enter(node) { return _this2.identifierReplacer.storeNames(node.name); } }); - })); + }); } }, { key: "replaceFunctionParams", @@ -2711,15 +2711,15 @@ var FunctionObfuscator = (function (_AbstractNodeObfuscat) { } } }; - functionNode.params.forEach((function (paramsNode) { + functionNode.params.forEach(function (paramsNode) { estraverse.replace(paramsNode, replaceVisitor); - })); + }); estraverse.replace(functionNode.body, replaceVisitor); } }]); return FunctionObfuscator; -})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.FunctionObfuscator = FunctionObfuscator; @@ -2732,7 +2732,7 @@ exports.FunctionObfuscator = FunctionObfuscator; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +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"); } } @@ -2747,7 +2747,7 @@ var Nodes_1 = __webpack_require__(3); var NumberLiteralReplacer_1 = __webpack_require__(19); var StringLiteralReplacer_1 = __webpack_require__(15); -var LiteralObfuscator = (function (_AbstractNodeObfuscat) { +var LiteralObfuscator = function (_AbstractNodeObfuscat) { _inherits(LiteralObfuscator, _AbstractNodeObfuscat); function LiteralObfuscator() { @@ -2784,7 +2784,7 @@ var LiteralObfuscator = (function (_AbstractNodeObfuscat) { }]); return LiteralObfuscator; -})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.LiteralObfuscator = LiteralObfuscator; @@ -2795,7 +2795,7 @@ exports.LiteralObfuscator = LiteralObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -2810,7 +2810,7 @@ var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(3); var StringLiteralReplacer_1 = __webpack_require__(15); -var MemberExpressionObfuscator = (function (_AbstractNodeObfuscat) { +var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MemberExpressionObfuscator, _AbstractNodeObfuscat); function MemberExpressionObfuscator() { @@ -2869,7 +2869,7 @@ var MemberExpressionObfuscator = (function (_AbstractNodeObfuscat) { }]); return MemberExpressionObfuscator; -})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.MemberExpressionObfuscator = MemberExpressionObfuscator; @@ -2880,7 +2880,7 @@ exports.MemberExpressionObfuscator = MemberExpressionObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -2894,7 +2894,7 @@ var Nodes_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); var StringLiteralReplacer_1 = __webpack_require__(15); -var MethodDefinitionObfuscator = (function (_AbstractNodeObfuscat) { +var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MethodDefinitionObfuscator, _AbstractNodeObfuscat); function MethodDefinitionObfuscator() { @@ -2930,7 +2930,7 @@ var MethodDefinitionObfuscator = (function (_AbstractNodeObfuscat) { }]); return MethodDefinitionObfuscator; -})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; @@ -2941,7 +2941,7 @@ exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -2956,7 +2956,7 @@ var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); -var ObjectExpressionObfuscator = (function (_AbstractNodeObfuscat) { +var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { _inherits(ObjectExpressionObfuscator, _AbstractNodeObfuscat); function ObjectExpressionObfuscator() { @@ -2970,7 +2970,7 @@ var ObjectExpressionObfuscator = (function (_AbstractNodeObfuscat) { value: function obfuscateNode(objectExpressionNode) { var _this2 = this; - objectExpressionNode.properties.forEach((function (property) { + objectExpressionNode.properties.forEach(function (property) { estraverse.replace(property.key, { leave: function leave(node, parentNode) { if (Nodes_1.Nodes.isLiteralNode(node)) { @@ -2982,7 +2982,7 @@ var ObjectExpressionObfuscator = (function (_AbstractNodeObfuscat) { } } }); - })); + }); } }, { key: 'obfuscateLiteralPropertyKey', @@ -3013,7 +3013,7 @@ var ObjectExpressionObfuscator = (function (_AbstractNodeObfuscat) { }]); return ObjectExpressionObfuscator; -})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; @@ -3024,7 +3024,7 @@ exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -3039,7 +3039,7 @@ var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(3); var NodeUtils_1 = __webpack_require__(1); -var VariableDeclarationObfuscator = (function (_AbstractNodeObfuscat) { +var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { _inherits(VariableDeclarationObfuscator, _AbstractNodeObfuscat); function VariableDeclarationObfuscator(nodes, options) { @@ -3065,13 +3065,13 @@ var VariableDeclarationObfuscator = (function (_AbstractNodeObfuscat) { value: function storeVariableNames(variableDeclarationNode) { var _this2 = this; - variableDeclarationNode.declarations.forEach((function (declarationNode) { + variableDeclarationNode.declarations.forEach(function (declarationNode) { NodeUtils_1.NodeUtils.typedReplace(declarationNode.id, NodeType_1.NodeType.Identifier, { enter: function enter(node) { return _this2.identifierReplacer.storeNames(node.name); } }); - })); + }); } }, { key: "replaceVariableNames", @@ -3090,7 +3090,7 @@ var VariableDeclarationObfuscator = (function (_AbstractNodeObfuscat) { }]); return VariableDeclarationObfuscator; -})(AbstractNodeObfuscator_1.AbstractNodeObfuscator); +}(AbstractNodeObfuscator_1.AbstractNodeObfuscator); exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; @@ -3101,7 +3101,7 @@ exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -3112,7 +3112,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var JSFuck_1 = __webpack_require__(18); var AbstractReplacer_1 = __webpack_require__(13); -var BooleanLiteralReplacer = (function (_AbstractReplacer_1$A) { +var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { _inherits(BooleanLiteralReplacer, _AbstractReplacer_1$A); function BooleanLiteralReplacer() { @@ -3129,7 +3129,7 @@ var BooleanLiteralReplacer = (function (_AbstractReplacer_1$A) { }]); return BooleanLiteralReplacer; -})(AbstractReplacer_1.AbstractReplacer); +}(AbstractReplacer_1.AbstractReplacer); exports.BooleanLiteralReplacer = BooleanLiteralReplacer; @@ -3191,9 +3191,9 @@ __decorate([class_validator_1.ArrayUnique(), class_validator_1.IsString({ __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "rotateUnicodeArray", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "selfDefending", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "sourceMap", void 0); -__decorate([class_validator_1.IsString(), class_validator_1.ValidateIf((function (options) { +__decorate([class_validator_1.IsString(), class_validator_1.ValidateIf(function (options) { return Boolean(options.sourceMapBaseUrl); -})), class_validator_1.IsUrl({ +}), class_validator_1.IsUrl({ require_protocol: false, require_valid_protocol: true }), __metadata('design:type', String)], Options.prototype, "sourceMapBaseUrl", void 0); @@ -3211,13 +3211,13 @@ exports.Options = Options; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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 OptionsNormalizer = (function () { +var OptionsNormalizer = function () { function OptionsNormalizer() { _classCallCheck(this, OptionsNormalizer); } @@ -3353,7 +3353,7 @@ var OptionsNormalizer = (function () { }]); return OptionsNormalizer; -})(); +}(); OptionsNormalizer.DISABLED_UNICODE_ARRAY_OPTIONS = { encodeUnicodeLiterals: false, @@ -3380,11 +3380,11 @@ exports.OptionsNormalizer = OptionsNormalizer; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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 ValidationErrorsFormatter = (function () { +var ValidationErrorsFormatter = function () { function ValidationErrorsFormatter() { _classCallCheck(this, ValidationErrorsFormatter); } @@ -3436,7 +3436,7 @@ var ValidationErrorsFormatter = (function () { }]); return ValidationErrorsFormatter; -})(); +}(); exports.ValidationErrorsFormatter = ValidationErrorsFormatter; @@ -3651,4 +3651,4 @@ module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; /***/ } /******/ ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbbnVsbF0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQW9HbUIsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7O1lBT3JpQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQ0E4RzhCLENBQUE7O2FBRTdCLENBQUE7Ozs7Ozs7OztvREFTdUMsQ0FBQTs7Ozs7Ozs7O2FBU3ZDLENBQUE7Ozs7O0NBS1osQ0FBQTs7Ozs7Ozs7Ozs7O21CQVlrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7O2dCQVdqaUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNklmLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBeUJrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7OztZQU1yaUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNkZYLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7eUJBSXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CeEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkErRWtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7OzsyQkFPdGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQjFCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7eUJBSXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0J4QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkErQ2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7eUJBV3hoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21EQStCMEIsQ0FBQTs7YUFFdEMsQ0FBQTs7Ozs7Q0FLWixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7NEJBWXJoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0QzQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBdUNrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7d0JBSXpoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTBCdkIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkE0RWtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7NEJBV3JoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FxQjNCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkF5RGtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7O21DQVk5Z0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNkNsQyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7bUJBZWtCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQkF5QmhpQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0JBd0JjLENBQUE7Ozs7YUFJbEIsQ0FBQTs7Ozs7K0JBS2tCLENBQUE7Ozs7YUFJbEIsQ0FBQTs7Ozs7Ozs7Ozs7b0NBV3VCLENBQUE7O2FBRXZCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQlosQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7eUJBUXhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F1Q3hCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7OzttQkFNOWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3Q2xCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7OztlQVNsaUIsQ0FBQTs7Ozs7Ozs7Ozs7NENBVzZCLENBQUE7O2FBRS9CLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXlEWixDQUFBOzs7Ozs7Ozs7Ozs7O21CQWFrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs4QkFZbmhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3FzQ0F5Q3VxQyxDQUFBOzthQUV4ckMsQ0FBQSw2MUNBQTYxQyxDQUFBOzthQUU3MUMsQ0FBQTt1Q0FDMEIsQ0FBQTs7Ozs7YUFLMUIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dGQWdEbUUsQ0FBQTs7YUFFbkUsQ0FBQTs7Ozs7Ozs7O0NBU1osQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozt5Q0FheGdCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5QnhDLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7O3NDQWMzZ0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTRCckMsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7MENBY3ZnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNEJ6QyxDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7a0NBZS9nQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXNDakMsQ0FBQTs7Ozs7Ozs7Ozs7cUJBV29CLENBQUEsZ29CQUFnb0IsQ0FBQTs7bUJBRWxvQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztxQkFlNWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9DcEIsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7OzsrQkFnQmxoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpQzlCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OytCQWlCbGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QzlCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQW9CcGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0Q1QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O3VCQWdCMWhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EwRHRCLENBQUE7Ozs7Ozs7Ozs7OzttQkFZa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxQ0FvQjVnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFEcEMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OEJBb0I2QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0I3QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQ0F1QitCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCL0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBb0IwQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0NBZ0IxQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4QkFvQjZCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQjdCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJBeUI0QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUM1QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7NEJBZXJoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2QzNCLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztvQ0FlN2dCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpRG5DLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozt5QkFleGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dDQXVCZSxDQUFBOzs7Ozs7YUFNM0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dDQWtCMkIsQ0FBQTs7YUFFM0IsQ0FBQTs7Ozs7O0NBTVosQ0FBQTs7Ozs7Ozs7Ozs7OzttQkFha0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7d0JBZXpoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUN2QixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7aUNBZWhoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTJEaEMsQ0FBQTs7Ozs7Ozs7Ozs7bUJBV2tCLENBQUEsOGhCQUE4aEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7aUNBY2hoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FvQ2hDLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7OztpQ0FlaGhCLENBQUE7Ozs7Ozs7Ozs7Ozs7O29EQWNtQixDQUFBOzs7Ozs7Ozs7Ozs7YUFZdkMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQStCWixDQUFBOzs7Ozs7Ozs7OzttQkFXa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7b0NBZTdnQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt5REEwQnFCLENBQUE7Ozs7OzthQU01QyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBbUJaLENBQUE7Ozs7Ozs7Ozs7O21CQVdrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Ozs7Ozs7OzZCQVdwaEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpQjVCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VFQThEc0UsQ0FBQTs7Q0FFdEUsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQWtCa0IsQ0FBQSw4aEJBQThoQixDQUFBOzs7Ozs7d0JBTXpoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBd0l2QixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBMkJrQixDQUFBLDhoQkFBOGhCLENBQUE7Ozs7Z0NBSWpoQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0QvQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9 \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file From e28f615b97cb7a97a05a7543fb390e100f819f33 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 23 Sep 2016 17:16:22 +0300 Subject: [PATCH 043/138] Applying optimize-js for obfuscated code --- dist/index.js | 5 ++++- src/JavaScriptObfuscatorInternal.ts | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index 7dfca1af..8003cba2 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1113,6 +1113,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var esprima = __webpack_require__(21); var escodegen = __webpack_require__(11); +var SourceMapMode_1 = __webpack_require__(12); var ObfuscationResult_1 = __webpack_require__(17); var Obfuscator_1 = __webpack_require__(25); var Options_1 = __webpack_require__(54); @@ -1156,7 +1157,9 @@ var JavaScriptObfuscatorInternal = function () { }; var generatorOutput = escodegen.generate(astTree, escodegenParams); if (options.optimize) { - generatorOutput.code = optimizeJs(generatorOutput.code); + generatorOutput.code = optimizeJs(generatorOutput.code, { + sourceMap: options.sourceMap && options.sourceMapMode === SourceMapMode_1.SourceMapMode.Inline + }); } generatorOutput.map = generatorOutput.map ? generatorOutput.map.toString() : ''; return generatorOutput; diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index d84c82a2..27f74c15 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/src/JavaScriptObfuscatorInternal.ts @@ -7,6 +7,8 @@ import { IGeneratorOutput } from "./interfaces/IGeneratorOutput"; import { IObfuscationResult } from "./interfaces/IObfuscationResult"; import { IOptions } from './interfaces/IOptions'; +import { SourceMapMode } from "./enums/SourceMapMode"; + import { ObfuscationResult } from "./ObfuscationResult"; import { Obfuscator } from "./Obfuscator"; import { Options } from "./options/Options"; @@ -70,7 +72,9 @@ export class JavaScriptObfuscatorInternal { const generatorOutput: IGeneratorOutput = escodegen.generate(astTree, escodegenParams); if (options.optimize) { - generatorOutput.code = optimizeJs(generatorOutput.code); + generatorOutput.code = optimizeJs(generatorOutput.code, { + sourceMap: options.sourceMap && options.sourceMapMode === SourceMapMode.Inline + }); } generatorOutput.map = generatorOutput.map ? generatorOutput.map.toString() : ''; From c4e560c5a651fc780851e7ac3fa3c3e04ea1db5e Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 23 Sep 2016 17:45:17 +0300 Subject: [PATCH 044/138] Applying optimize-js for obfuscated code --- README.md | 7 +++++++ dist/index.js | 4 ++-- src/cli/JavaScriptObfuscatorCLI.ts | 1 + src/preset-options/DefaultPreset.ts | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e471f49f..f6c24352 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,7 @@ Following options available for the JS Obfuscator: debugProtectionInterval: false, disableConsoleOutput: true, encodeUnicodeLiterals: false, + optimize: false, reservedNames: [], rotateUnicodeArray: true, selfDefending: true, @@ -135,6 +136,7 @@ Following options available for the JS Obfuscator: --debugProtectionInterval --disableConsoleOutput --encodeUnicodeLiterals + --optimize --reservedNames (comma separated) --rotateUnicodeArray --selfDefending @@ -186,6 +188,11 @@ This option can slightly slow down your code speed. All literals in Unicode array become encoded in Base64. To decode strings, a special function will be inserted on the page under `unicodeArray` node. +### `optimize` +Type: `boolean` Default: `false` + +Enables optimizations for obfuscated code with help of [optimize-js](https://github.com/nolanlawson/optimize-js) + ### `reservedNames` Type: `string[]` Default: `[]` diff --git a/dist/index.js b/dist/index.js index 8003cba2..3299bf63 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1069,7 +1069,7 @@ exports.DEFAULT_PRESET = Object.freeze({ disableConsoleOutput: true, domainLock: [], encodeUnicodeLiterals: false, - optimize: true, + optimize: false, reservedNames: [], rotateUnicodeArray: true, selfDefending: true, @@ -1544,7 +1544,7 @@ var JavaScriptObfuscatorCLI = function () { }, { key: 'configureCommands', value: function configureCommands() { - this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { + this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--optimize ', 'Enables optimizations for obfuscated code with help of `optimize-js`', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index 4a4453c4..8fa81be6 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -127,6 +127,7 @@ export class JavaScriptObfuscatorCLI { .option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean) .option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean) .option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean) + .option('--optimize ', 'Enables optimizations for obfuscated code with help of `optimize-js`', JavaScriptObfuscatorCLI.parseBoolean) .option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', (val: string) => val.split(',')) .option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean) .option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean) diff --git a/src/preset-options/DefaultPreset.ts b/src/preset-options/DefaultPreset.ts index bf1747e5..2a784a4f 100644 --- a/src/preset-options/DefaultPreset.ts +++ b/src/preset-options/DefaultPreset.ts @@ -9,7 +9,7 @@ export const DEFAULT_PRESET: IObfuscatorOptions = Object.freeze({ disableConsoleOutput: true, domainLock: [], encodeUnicodeLiterals: false, - optimize: true, + optimize: false, reservedNames: [], rotateUnicodeArray: true, selfDefending: true, From 7d27fb1583e1f0b7a33749387539b1420d09eec4 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 23 Sep 2016 18:01:39 +0300 Subject: [PATCH 045/138] moved `optimize-js` to separate branch temporary --- README.md | 5 ----- package.json | 1 - src/JavaScriptObfuscatorInternal.ts | 10 ---------- src/cli/JavaScriptObfuscatorCLI.ts | 1 - src/interfaces/IObfuscatorOptions.d.ts | 1 - src/interfaces/IOptions.d.ts | 1 - src/options/Options.ts | 6 ------ src/preset-options/DefaultPreset.ts | 1 - src/preset-options/NoCustomNodesPreset.ts | 1 - 9 files changed, 27 deletions(-) diff --git a/README.md b/README.md index f6c24352..151df6cb 100644 --- a/README.md +++ b/README.md @@ -188,11 +188,6 @@ This option can slightly slow down your code speed. All literals in Unicode array become encoded in Base64. To decode strings, a special function will be inserted on the page under `unicodeArray` node. -### `optimize` -Type: `boolean` Default: `false` - -Enables optimizations for obfuscated code with help of [optimize-js](https://github.com/nolanlawson/optimize-js) - ### `reservedNames` Type: `string[]` Default: `[]` diff --git a/package.json b/package.json index 5fe0082f..9743df53 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "estraverse": "^4.2.0", "format-unicorn": "^1.1.0", "mkdirp": "^0.5.1", - "optimize-js": "^1.0.1", "source-map-support": "^0.4.2" }, "devDependencies": { diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index 27f74c15..508e9317 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/src/JavaScriptObfuscatorInternal.ts @@ -7,15 +7,11 @@ import { IGeneratorOutput } from "./interfaces/IGeneratorOutput"; import { IObfuscationResult } from "./interfaces/IObfuscationResult"; import { IOptions } from './interfaces/IOptions'; -import { SourceMapMode } from "./enums/SourceMapMode"; - import { ObfuscationResult } from "./ObfuscationResult"; import { Obfuscator } from "./Obfuscator"; import { Options } from "./options/Options"; import { SourceMapCorrector } from "./SourceMapCorrector"; -const optimizeJs = require('optimize-js'); - export class JavaScriptObfuscatorInternal { /** * @type {GenerateOptions} @@ -71,12 +67,6 @@ export class JavaScriptObfuscatorInternal { const generatorOutput: IGeneratorOutput = escodegen.generate(astTree, escodegenParams); - if (options.optimize) { - generatorOutput.code = optimizeJs(generatorOutput.code, { - sourceMap: options.sourceMap && options.sourceMapMode === SourceMapMode.Inline - }); - } - generatorOutput.map = generatorOutput.map ? generatorOutput.map.toString() : ''; return generatorOutput; diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index 8fa81be6..4a4453c4 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -127,7 +127,6 @@ export class JavaScriptObfuscatorCLI { .option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean) .option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean) .option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean) - .option('--optimize ', 'Enables optimizations for obfuscated code with help of `optimize-js`', JavaScriptObfuscatorCLI.parseBoolean) .option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', (val: string) => val.split(',')) .option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean) .option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean) diff --git a/src/interfaces/IObfuscatorOptions.d.ts b/src/interfaces/IObfuscatorOptions.d.ts index c9a22b99..58940d1a 100644 --- a/src/interfaces/IObfuscatorOptions.d.ts +++ b/src/interfaces/IObfuscatorOptions.d.ts @@ -6,7 +6,6 @@ export interface IObfuscatorOptions { debugProtectionInterval?: boolean; disableConsoleOutput?: boolean; encodeUnicodeLiterals?: boolean; - optimize?: boolean; reservedNames?: string[]; rotateUnicodeArray?: boolean; selfDefending?: boolean; diff --git a/src/interfaces/IOptions.d.ts b/src/interfaces/IOptions.d.ts index 7505168d..3d7afb2f 100644 --- a/src/interfaces/IOptions.d.ts +++ b/src/interfaces/IOptions.d.ts @@ -6,7 +6,6 @@ export interface IOptions { readonly debugProtectionInterval: boolean; readonly disableConsoleOutput: boolean; readonly encodeUnicodeLiterals: boolean; - readonly optimize: boolean; readonly reservedNames: string[]; readonly rotateUnicodeArray: boolean; readonly selfDefending: boolean; diff --git a/src/options/Options.ts b/src/options/Options.ts index f1c1ab02..903636cf 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -72,12 +72,6 @@ export class Options implements IOptions { @IsBoolean() public readonly encodeUnicodeLiterals: boolean; - /** - * @type {boolean} - */ - @IsBoolean() - public readonly optimize: boolean; - /** * @type {string[]} */ diff --git a/src/preset-options/DefaultPreset.ts b/src/preset-options/DefaultPreset.ts index 2a784a4f..fd1f97c8 100644 --- a/src/preset-options/DefaultPreset.ts +++ b/src/preset-options/DefaultPreset.ts @@ -9,7 +9,6 @@ export const DEFAULT_PRESET: IObfuscatorOptions = Object.freeze({ disableConsoleOutput: true, domainLock: [], encodeUnicodeLiterals: false, - optimize: false, reservedNames: [], rotateUnicodeArray: true, selfDefending: true, diff --git a/src/preset-options/NoCustomNodesPreset.ts b/src/preset-options/NoCustomNodesPreset.ts index 5b89ecc2..faac40bc 100644 --- a/src/preset-options/NoCustomNodesPreset.ts +++ b/src/preset-options/NoCustomNodesPreset.ts @@ -9,7 +9,6 @@ export const NO_CUSTOM_NODES_PRESET: IObfuscatorOptions = Object.freeze({ disableConsoleOutput: false, domainLock: [], encodeUnicodeLiterals: false, - optimize: false, reservedNames: [], rotateUnicodeArray: false, selfDefending: false, From 05732c4fccc01b01cfd9db39392ca9ec452139ec Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 23 Sep 2016 18:58:40 +0300 Subject: [PATCH 046/138] convert shorthand object expression to non-shorthand --- dist/index.js | 24 +++++-------------- .../ObjectExpressionObfuscator.ts | 6 ++++- ...ConsoleOutputDisableExpressionNode.spec.ts | 4 ++-- .../domain-lock-nodes/DomainLockNode.spec.ts | 4 ++-- .../UnicodeArrayCallsWrapper.spec.ts | 4 ++-- .../UnicodeArrayDecodeNode.spec.ts | 4 ++-- .../UnicodeArrayRotateFunctionNode.spec.ts | 4 ++-- .../FunctionObfuscator.spec.ts | 4 ++-- .../ObjectExpressionObfuscator.spec.ts | 22 +++++++++++++++-- .../VariableDeclarationObfuscator.spec.ts | 24 +++++++++---------- 10 files changed, 55 insertions(+), 45 deletions(-) diff --git a/dist/index.js b/dist/index.js index 3299bf63..8421d158 100644 --- a/dist/index.js +++ b/dist/index.js @@ -892,7 +892,6 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ disableConsoleOutput: false, domainLock: [], encodeUnicodeLiterals: false, - optimize: false, reservedNames: [], rotateUnicodeArray: false, selfDefending: false, @@ -1069,7 +1068,6 @@ exports.DEFAULT_PRESET = Object.freeze({ disableConsoleOutput: true, domainLock: [], encodeUnicodeLiterals: false, - optimize: false, reservedNames: [], rotateUnicodeArray: true, selfDefending: true, @@ -1113,12 +1111,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var esprima = __webpack_require__(21); var escodegen = __webpack_require__(11); -var SourceMapMode_1 = __webpack_require__(12); var ObfuscationResult_1 = __webpack_require__(17); var Obfuscator_1 = __webpack_require__(25); var Options_1 = __webpack_require__(54); var SourceMapCorrector_1 = __webpack_require__(26); -var optimizeJs = __webpack_require__(75); var JavaScriptObfuscatorInternal = function () { function JavaScriptObfuscatorInternal(sourceCode) { @@ -1156,11 +1152,6 @@ var JavaScriptObfuscatorInternal = function () { compact: options.compact }; var generatorOutput = escodegen.generate(astTree, escodegenParams); - if (options.optimize) { - generatorOutput.code = optimizeJs(generatorOutput.code, { - sourceMap: options.sourceMap && options.sourceMapMode === SourceMapMode_1.SourceMapMode.Inline - }); - } generatorOutput.map = generatorOutput.map ? generatorOutput.map.toString() : ''; return generatorOutput; } @@ -1544,7 +1535,7 @@ var JavaScriptObfuscatorCLI = function () { }, { key: 'configureCommands', value: function configureCommands() { - this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--optimize ', 'Enables optimizations for obfuscated code with help of `optimize-js`', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { + this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); @@ -2974,8 +2965,11 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { var _this2 = this; objectExpressionNode.properties.forEach(function (property) { + if (property.shorthand) { + property.shorthand = false; + } estraverse.replace(property.key, { - leave: function leave(node, parentNode) { + enter: function enter(node, parentNode) { if (Nodes_1.Nodes.isLiteralNode(node)) { _this2.obfuscateLiteralPropertyKey(node); return; @@ -3187,7 +3181,6 @@ __decorate([class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true }), __metadata('design:type', Array)], Options.prototype, "domainLock", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "encodeUnicodeLiterals", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "optimize", void 0); __decorate([class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true }), __metadata('design:type', Array)], Options.prototype, "reservedNames", void 0); @@ -3634,12 +3627,7 @@ module.exports = require("fs"); module.exports = require("mkdirp"); /***/ }, -/* 75 */ -/***/ function(module, exports) { - -module.exports = require("optimize-js"); - -/***/ }, +/* 75 */, /* 76 */ /***/ function(module, exports, __webpack_require__) { diff --git a/src/node-obfuscators/ObjectExpressionObfuscator.ts b/src/node-obfuscators/ObjectExpressionObfuscator.ts index 266e93a2..51a9e9a5 100644 --- a/src/node-obfuscators/ObjectExpressionObfuscator.ts +++ b/src/node-obfuscators/ObjectExpressionObfuscator.ts @@ -25,8 +25,12 @@ export class ObjectExpressionObfuscator extends AbstractNodeObfuscator { public obfuscateNode (objectExpressionNode: ESTree.ObjectExpression): void { objectExpressionNode.properties .forEach((property: ESTree.Property) => { + if (property.shorthand) { + property.shorthand = false; + } + estraverse.replace(property.key, { - leave: (node: ESTree.Node, parentNode: ESTree.Node): any => { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if (Nodes.isLiteralNode(node)) { this.obfuscateLiteralPropertyKey(node); diff --git a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts index 34c0795f..e15a217e 100644 --- a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts +++ b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts @@ -14,7 +14,7 @@ describe('ConsoleOutputDisableExpressionNode', () => { } ); - assert.match(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){5,6} in _0x([a-z0-9]){5,6} *= *_0x([a-z0-9]){4}\('0x.*'\)\)/); + assert.match(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){4,6} in _0x([a-z0-9]){4,6} *= *_0x([a-z0-9]){4}\('0x.*'\)\)/); }); it('should\'t append `ConsoleOutputDisableExpressionNode` custom node into the obfuscated code if `disableConsoleOutput` option is not set', () => { @@ -26,6 +26,6 @@ describe('ConsoleOutputDisableExpressionNode', () => { } ); - assert.notMatch(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){5,6} in _0x([a-z0-9]){5,6} *= *_0x([a-z0-9]){4}\('0x.*'\)\)/); + assert.notMatch(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){4,6} in _0x([a-z0-9]){4,6} *= *_0x([a-z0-9]){4}\('0x.*'\)\)/); }); }); diff --git a/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts b/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts index 9a272eb2..493adc49 100644 --- a/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts +++ b/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts @@ -13,7 +13,7 @@ describe('DomainLockNode', () => { } ); - assert.match(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){5,6} *= *new RegExp/); + assert.match(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){4,6} *= *new RegExp/); }); it('should\'t append `DomainLockNode` custom node into the obfuscated code if `domainLock` option is not set', () => { @@ -24,6 +24,6 @@ describe('DomainLockNode', () => { } ); - assert.notMatch(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){5,6} *= *new RegExp/); + assert.notMatch(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){4,6} *= *new RegExp/); }); }); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts index 6955adb4..29a24d0e 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts @@ -13,7 +13,7 @@ describe('UnicodeArrayCallsWrapper', () => { } ); - assert.match(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){5,6}, *0x010\)\];/); + assert.match(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){4,6}, *0x010\)\];/); }); it('should\'t append `UnicodeArrayDecodeNode` custom node into the obfuscated code if `wrapUnicodeArrayCalls` option is not set', () => { @@ -24,6 +24,6 @@ describe('UnicodeArrayCallsWrapper', () => { } ); - assert.notMatch(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){5,6}, *0x010\)\];/); + assert.notMatch(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){4,6}, *0x010\)\];/); }); }); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts index 33a793e5..74a81f69 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts @@ -13,7 +13,7 @@ describe('UnicodeArrayDecodeNode', () => { } ); - assert.match(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){5,6}\]\)\)/); + assert.match(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){4,6}\]\)\)/); }); it('should\'t append `UnicodeArrayDecodeNode` custom node into the obfuscated code if `encodeUnicodeLiterals` option is not set', () => { @@ -24,6 +24,6 @@ describe('UnicodeArrayDecodeNode', () => { } ); - assert.notMatch(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){5,6}\]\)\)/); + assert.notMatch(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){4,6}\]\)\)/); }); }); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts index 45074153..8d89a96a 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts @@ -13,7 +13,7 @@ describe('UnicodeArrayRotateFunctionNode', () => { } ); - assert.match(obfuscationResult.getObfuscatedCode(), /while *\(-- *_0x([a-z0-9]){5,6}\) *\{/); + assert.match(obfuscationResult.getObfuscatedCode(), /while *\(-- *_0x([a-z0-9]){4,6}\) *\{/); }); it('should\'t append `UnicodeArrayRotateFunctionNode` custom node into the obfuscated code if `rotateUnicodeArray` option is not set', () => { @@ -24,6 +24,6 @@ describe('UnicodeArrayRotateFunctionNode', () => { } ); - assert.notMatch(obfuscationResult.getObfuscatedCode(), /while *\(-- *_0x([a-z0-9]){5,6}\) *\{/); + assert.notMatch(obfuscationResult.getObfuscatedCode(), /while *\(-- *_0x([a-z0-9]){4,6}\) *\{/); }); }); diff --git a/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts b/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts index 368dcccd..44770099 100644 --- a/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts @@ -29,9 +29,9 @@ describe('FunctionObfuscator', () => { const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); const functionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/var _0x[a-z0-9]{5,6} *= *function *\((_0x[a-z0-9]{5,6})\) *\{/); + .match(/var _0x[a-z0-9]{4,6} *= *function *\((_0x[a-z0-9]{4,6})\) *\{/); const functionBodyIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/console\['\\x6c\\x6f\\x67'\]\((_0x[a-z0-9]{5,6})\)/); + .match(/console\['\\x6c\\x6f\\x67'\]\((_0x[a-z0-9]{4,6})\)/); const functionParamIdentifierName: string = (functionParamIdentifierMatch)[1]; const functionBodyIdentifierName: string = (functionBodyIdentifierMatch)[1]; diff --git a/test/functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec.ts b/test/functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec.ts index 581a3dbb..c09b6b4d 100644 --- a/test/functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec.ts @@ -13,7 +13,7 @@ describe('ObjectExpressionObfuscator', () => { Object.assign({}, NO_CUSTOM_NODES_PRESET) ); - assert.match(obfuscationResult.getObfuscatedCode(), /^var *test *= *\{'\\x66\\x6f\\x6f':0x0\};$/); + assert.match(obfuscationResult.getObfuscatedCode(), /var *test *= *\{'\\x66\\x6f\\x6f':0x0\};/); }); it('should replace object expression node `key` property with identifier value by unicode value', () => { @@ -22,6 +22,24 @@ describe('ObjectExpressionObfuscator', () => { Object.assign({}, NO_CUSTOM_NODES_PRESET) ); - assert.match(obfuscationResult.getObfuscatedCode(), /^var *test *= *\{'\\x66\\x6f\\x6f':0x0\};$/); + assert.match(obfuscationResult.getObfuscatedCode(), /var *test *= *\{'\\x66\\x6f\\x6f':0x0\};/); + }); + + it('should correct convert shorthand ES6 object expression to non-shorthand object expression', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + ` + (function () { + let a = 0; + let b = 0; + var test = {a, b}; + })(); + `, + Object.assign({}, NO_CUSTOM_NODES_PRESET) + ); + + assert.match( + obfuscationResult.getObfuscatedCode(), + /var *_0x[a-z0-9]{4,6} *= *\{'\\x61': *_0x[a-z0-9]{4,6}\, *'\\x62': *_0x[a-z0-9]{4,6}\};/ + ); }); }); diff --git a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts index 794c2a42..491414c3 100644 --- a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts @@ -18,8 +18,8 @@ describe('VariableDeclarationObfuscator', () => { Object.assign({}, NO_CUSTOM_NODES_PRESET) ); - assert.match(obfuscationResult.getObfuscatedCode(), /var *_0x([a-z0-9]){5,6} *= *'\\x61\\x62\\x63';/); - assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){5,6}\);/); + assert.match(obfuscationResult.getObfuscatedCode(), /var *_0x([a-z0-9]){4,6} *= *'\\x61\\x62\\x63';/); + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){4,6}\);/); }); it('should obfuscate variable call (`identifier` node) outside of block scope of node in which this variable was declared with `var` kind', () => { @@ -35,7 +35,7 @@ describe('VariableDeclarationObfuscator', () => { Object.assign({}, NO_CUSTOM_NODES_PRESET) ); - assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){5,6}\);/); + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){4,6}\);/); }); it('should not obfuscate variable call (`identifier` node) outside of block scope of node in which this variable was declared with `let` kind', () => { @@ -78,11 +78,11 @@ describe('VariableDeclarationObfuscator', () => { }); it('should obfuscate variable call (`identifier` node) before variable declaration if this call is inside function body', () => { - assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){5,6}\['\\x69\\x74\\x65\\x6d'\]\);/); + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){4,6}\['\\x69\\x74\\x65\\x6d'\]\);/); }); it('should not obfuscate variable call (`identifier` node) before variable declaration', () => { - assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){5,6}\);/); + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){4,6}\);/); }); }); @@ -117,15 +117,15 @@ describe('VariableDeclarationObfuscator', () => { it('should correct obfuscate variables inside function body', () => { const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); const functionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/function *_0x[a-z0-9]{5,6} *\((_0x[a-z0-9]{5,6})\,(_0x[a-z0-9]{5,6})\) *\{/); + .match(/function *_0x[a-z0-9]{4,6} *\((_0x[a-z0-9]{4,6})\,(_0x[a-z0-9]{4,6})\) *\{/); const innerFunctionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/function _0x[a-z0-9]{5,6} *\((_0x[a-z0-9]{5,6})\) *\{/); + .match(/function _0x[a-z0-9]{4,6} *\((_0x[a-z0-9]{4,6})\) *\{/); const constructorIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/console\['\\x6c\\x6f\\x67'\]\((_0x[a-z0-9]{5,6})\)/); + .match(/console\['\\x6c\\x6f\\x67'\]\((_0x[a-z0-9]{4,6})\)/); const objectIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/return\{'\\x74':(_0x[a-z0-9]{5,6})\}/); + .match(/return\{'\\x74':(_0x[a-z0-9]{4,6})\}/); const variableDeclarationIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/var *(_0x[a-z0-9]{5,6});/); + .match(/var *(_0x[a-z0-9]{4,6});/); functionParamIdentifierName = (functionParamIdentifierMatch)[1]; innerFunctionParamIdentifierName = (innerFunctionParamIdentifierMatch)[1]; @@ -161,7 +161,7 @@ describe('VariableDeclarationObfuscator', () => { Object.assign({}, NO_CUSTOM_NODES_PRESET) ); - assert.match(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){5,6} *= *\{'\\x74\\x65\\x73\\x74/); + assert.match(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){4,6} *= *\{'\\x74\\x65\\x73\\x74/); }); it('shouldn\'t replace computed member expression identifier', () => { @@ -181,7 +181,7 @@ describe('VariableDeclarationObfuscator', () => { Object.assign({}, NO_CUSTOM_NODES_PRESET) ); - assert.match(obfuscationResult.getObfuscatedCode(), /_0x([a-z0-9]){5,6}\['\\x74\\x65\\x73\\x74'\]/); + assert.match(obfuscationResult.getObfuscatedCode(), /_0x([a-z0-9]){4,6}\['\\x74\\x65\\x73\\x74'\]/); }); }); }); From 39310380327cf253c59716148c4b2314a2383f07 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 23 Sep 2016 19:03:05 +0300 Subject: [PATCH 047/138] update dev test --- dist/index.js | 5 ++--- test/dev/test.ts | 5 +++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/dist/index.js b/dist/index.js index 8421d158..70b9adf6 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 = 76); +/******/ return __webpack_require__(__webpack_require__.s = 75); /******/ }) /************************************************************************/ /******/ ([ @@ -3627,8 +3627,7 @@ module.exports = require("fs"); module.exports = require("mkdirp"); /***/ }, -/* 75 */, -/* 76 */ +/* 75 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/test/dev/test.ts b/test/dev/test.ts index d5aedbb5..2d9ef22d 100644 --- a/test/dev/test.ts +++ b/test/dev/test.ts @@ -56,6 +56,11 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( console.log(105.4); console.log(true, false); + var sA = 'shorthand1'; + var sB = 'shorthand2'; + + console.log({sA, sB}); + try { } catch (error) { console.log(error); From 8b5dcc38a97610e7215fecbd1b719f5c23c3fe92 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 26 Sep 2016 00:41:52 +0300 Subject: [PATCH 048/138] `class-validator` version update --- package.json | 6 +++--- src/options/Options.ts | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 9743df53..61a1259f 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "dependencies": { "babel-polyfill": "^6.13.0", "chance": "^1.0.4", - "class-validator": "^0.6.0", + "class-validator": "^0.6.1", "commander": "^2.9.0", "escodegen": "^1.8.1", "esprima": "^3.0.0", @@ -35,9 +35,9 @@ "@types/chai": "^3.4.32", "@types/chance": "^0.7.28", "@types/commander": "^2.3.29", - "@types/escodegen": "^0.0.5", + "@types/escodegen": "^0.0.6", "@types/esprima": "^2.1.31", - "@types/estraverse": "^0.0.5", + "@types/estraverse": "^0.0.6", "@types/estree": "^0.0.32", "@types/format-unicorn": "^0.0.28", "@types/joi": "^9.0.31", diff --git a/src/options/Options.ts b/src/options/Options.ts index 903636cf..96e68412 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -1,6 +1,7 @@ import { ArrayUnique, IsBoolean, + IsArray, IsIn, IsNumber, IsString, @@ -60,6 +61,7 @@ export class Options implements IOptions { /** * @type {string[]} */ + @IsArray() @ArrayUnique() @IsString({ each: true @@ -75,6 +77,7 @@ export class Options implements IOptions { /** * @type {string[]} */ + @IsArray() @ArrayUnique() @IsString({ each: true From 9a2ec9f5a0dfe24b023359d8ef670a98bec8ed69 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 2 Oct 2016 01:50:47 +0300 Subject: [PATCH 049/138] deps update, finally moved on latest @type/node --- dist/index.js | 22 +++++++++++----------- package.json | 28 ++++++++++++++-------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/dist/index.js b/dist/index.js index 70b9adf6..32ad403c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -135,7 +135,7 @@ var Utils = function () { }, { key: 'btoa', value: function btoa(string) { - var encode = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; + var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; return new Buffer(encode ? encodeURI(string) : string).toString('base64'); } @@ -165,7 +165,7 @@ var Utils = function () { }, { key: 'getRandomVariableName', value: function getRandomVariableName() { - var length = arguments.length <= 0 || arguments[0] === undefined ? 6 : arguments[0]; + var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 6; var rangeMinInteger = 10000, rangeMaxInteger = 99999999, @@ -299,7 +299,7 @@ var NodeUtils = function () { }, { key: 'getBlockStatementNodeByIndex', value: function getBlockStatementNodeByIndex(node) { - var index = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; + var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; if (Nodes_1.Nodes.isNodeHasBlockStatement(node)) { if (node.body[index] === undefined) { @@ -312,7 +312,7 @@ var NodeUtils = function () { }, { key: 'getBlockScopeOfNode', value: function getBlockScopeOfNode(node) { - var depth = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; + var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var parentNode = node.parentNode; if (!parentNode) { @@ -381,7 +381,7 @@ var NodeUtils = function () { }, { key: 'typedTraverse', value: function typedTraverse(node, nodeType, visitor) { - var traverseType = arguments.length <= 3 || arguments[3] === undefined ? 'traverse' : arguments[3]; + var traverseType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'traverse'; estraverse[traverseType](node, { enter: function enter(node, parentNode) { @@ -657,7 +657,7 @@ var JavaScriptObfuscator = function () { _createClass(JavaScriptObfuscator, null, [{ key: "obfuscate", value: function obfuscate(sourceCode) { - var obfuscatorOptions = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + var obfuscatorOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var javaScriptObfuscator = new JavaScriptObfuscatorInternal_1.JavaScriptObfuscatorInternal(sourceCode, obfuscatorOptions); javaScriptObfuscator.obfuscate(); @@ -1118,7 +1118,7 @@ var SourceMapCorrector_1 = __webpack_require__(26); var JavaScriptObfuscatorInternal = function () { function JavaScriptObfuscatorInternal(sourceCode) { - var obfuscatorOptions = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + var obfuscatorOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck(this, JavaScriptObfuscatorInternal); @@ -1417,7 +1417,7 @@ var CLIUtils = function () { }, { key: 'getOutputSourceMapPath', value: function getOutputSourceMapPath(outputCodePath) { - var sourceMapFileName = arguments.length <= 1 || arguments[1] === undefined ? '' : arguments[1]; + var sourceMapFileName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; if (sourceMapFileName) { outputCodePath = outputCodePath.substr(0, outputCodePath.lastIndexOf('/')) + '/' + sourceMapFileName; @@ -2133,7 +2133,7 @@ var UnicodeArrayNode = function (_AbstractCustomNode_) { _inherits(UnicodeArrayNode, _AbstractCustomNode_); function UnicodeArrayNode(unicodeArray, unicodeArrayName) { - var unicodeArrayRotateValue = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2]; + var unicodeArrayRotateValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var options = arguments[3]; _classCallCheck(this, UnicodeArrayNode); @@ -3177,11 +3177,11 @@ __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "debugProtection", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "debugProtectionInterval", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "disableConsoleOutput", void 0); -__decorate([class_validator_1.ArrayUnique(), class_validator_1.IsString({ +__decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true }), __metadata('design:type', Array)], Options.prototype, "domainLock", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "encodeUnicodeLiterals", void 0); -__decorate([class_validator_1.ArrayUnique(), class_validator_1.IsString({ +__decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true }), __metadata('design:type', Array)], Options.prototype, "reservedNames", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "rotateUnicodeArray", void 0); diff --git a/package.json b/package.json index 61a1259f..800eee74 100644 --- a/package.json +++ b/package.json @@ -29,29 +29,29 @@ "estraverse": "^4.2.0", "format-unicorn": "^1.1.0", "mkdirp": "^0.5.1", - "source-map-support": "^0.4.2" + "source-map-support": "^0.4.3" }, "devDependencies": { - "@types/chai": "^3.4.32", - "@types/chance": "^0.7.28", - "@types/commander": "^2.3.29", + "@types/chai": "^3.4.34", + "@types/chance": "^0.7.30", + "@types/commander": "^2.3.30", "@types/escodegen": "^0.0.6", - "@types/esprima": "^2.1.31", + "@types/esprima": "^2.1.33", "@types/estraverse": "^0.0.6", "@types/estree": "^0.0.32", - "@types/format-unicorn": "^0.0.28", - "@types/joi": "^9.0.31", - "@types/mkdirp": "^0.3.28", - "@types/mocha": "^2.2.31", - "@types/node": "^4.0.30", - "@types/sinon": "^1.16.29", - "babel-cli": "^6.14.0", + "@types/format-unicorn": "^0.0.29", + "@types/joi": "^9.0.32", + "@types/mkdirp": "^0.3.29", + "@types/mocha": "^2.2.32", + "@types/node": "^6.0.41", + "@types/sinon": "^1.16.31", + "babel-cli": "^6.16.0", "babel-loader": "^6.2.5", - "babel-preset-es2015": "^6.14.0", + "babel-preset-es2015": "^6.16.0", "chai": "^3.5.0", "coveralls": "^2.11.14", "istanbul": "1.1.0-alpha.1", - "mocha": "^3.0.2", + "mocha": "^3.1.0", "optimize-js-plugin": "0.0.4", "sinon": "^2.0.0-pre.3", "ts-loader": "^0.8.2", From 43a70d3e27fd98f821b94a4f1fecb1108fee457e Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 2 Oct 2016 14:28:15 +0300 Subject: [PATCH 050/138] move to awesome-typescript-loader (BROKEN) --- dist/index.js | 174 +++++++++--------- package.json | 2 +- src/JavaScriptObfuscator.ts | 8 +- src/JavaScriptObfuscatorInternal.ts | 14 +- src/NodeUtils.ts | 8 +- src/Nodes.ts | 4 +- src/ObfuscationResult.ts | 2 +- src/Obfuscator.ts | 14 +- src/SourceMapCorrector.ts | 12 +- src/UnicodeArray.ts | 2 +- src/cli/CLIUtils.ts | 4 +- src/cli/JavaScriptObfuscatorCLI.ts | 14 +- src/custom-nodes/AbstractCustomNode.ts | 6 +- .../ConsoleOutputDisableExpressionNode.ts | 10 +- .../DebugProtectionFunctionCallNode.ts | 12 +- .../DebugProtectionFunctionIntervalNode.ts | 12 +- .../DebugProtectionFunctionNode.ts | 14 +- .../domain-lock-nodes/DomainLockNode.ts | 12 +- .../SelfDefendingUnicodeNode.ts | 16 +- .../UnicodeArrayCallsWrapper.ts | 16 +- .../UnicodeArrayDecodeNode.ts | 22 +-- .../unicode-array-nodes/UnicodeArrayNode.ts | 14 +- .../UnicodeArrayRotateFunctionNode.ts | 22 +-- src/enums/NodeType.ts | 2 +- src/interfaces/IGenerator.d.ts | 2 +- src/interfaces/IObfuscatorOptions.d.ts | 2 +- src/interfaces/IOptions.d.ts | 2 +- src/interfaces/ISourceMapCorrector.d.ts | 2 +- src/interfaces/custom-nodes/ICustomNode.d.ts | 2 +- .../custom-nodes/ICustomNodeWithData.d.ts | 2 +- .../ICustomNodeWithIdentifier.d.ts | 2 +- src/node-groups/AbstractNodesGroup.ts | 6 +- src/node-groups/ConsoleOutputNodesGroup.ts | 4 +- src/node-groups/DebugProtectionNodesGroup.ts | 10 +- src/node-groups/DomainLockNodesGroup.ts | 6 +- src/node-groups/SelfDefendingNodesGroup.ts | 4 +- src/node-groups/UnicodeArrayNodesGroup.ts | 14 +- .../AbstractNodeObfuscator.ts | 6 +- src/node-obfuscators/CatchClauseObfuscator.ts | 12 +- .../FunctionDeclarationObfuscator.ts | 12 +- src/node-obfuscators/FunctionObfuscator.ts | 12 +- src/node-obfuscators/LiteralObfuscator.ts | 8 +- .../MemberExpressionObfuscator.ts | 6 +- .../MethodDefinitionObfuscator.ts | 6 +- .../ObjectExpressionObfuscator.ts | 6 +- .../VariableDeclarationObfuscator.ts | 12 +- .../replacers/AbstractReplacer.ts | 6 +- .../replacers/BooleanLiteralReplacer.ts | 4 +- .../replacers/IdentifierReplacer.ts | 4 +- .../replacers/NumberLiteralReplacer.ts | 4 +- .../replacers/StringLiteralReplacer.ts | 12 +- src/options/Options.ts | 12 +- src/options/OptionsNormalizer.ts | 8 +- src/preset-options/DefaultPreset.ts | 4 +- src/preset-options/NoCustomNodesPreset.ts | 4 +- .../DebugProtectionFunctionTemplate.ts | 2 +- .../SelfDefendingTemplate.ts | 2 +- .../SelfDefendingTemplate.ts | 2 +- .../SelfDefendingTemplate.ts | 2 +- src/types/TNodeObfuscator.d.ts | 6 +- src/types/TOptionsNormalizerRule.d.ts | 2 +- src/types/TSourceMapMode.d.ts | 2 +- .../TUnicodeArrayCallsWrapper.d.ts | 2 +- src/types/custom-nodes/TUnicodeArrayNode.d.ts | 4 +- tsconfig-test.json | 15 +- tsconfig.json | 19 +- webpack.config.js | 24 ++- 67 files changed, 342 insertions(+), 352 deletions(-) diff --git a/dist/index.js b/dist/index.js index 32ad403c..0d56482b 100644 --- a/dist/index.js +++ b/dist/index.js @@ -441,7 +441,7 @@ var Nodes = function () { } _createClass(Nodes, null, [{ - key: "getProgramNode", + key: 'getProgramNode', value: function getProgramNode(bodyNode) { return { 'type': NodeType_1.NodeType.Program, @@ -451,57 +451,57 @@ var Nodes = function () { }; } }, { - key: "isArrowFunctionExpressionNode", + key: 'isArrowFunctionExpressionNode', value: function isArrowFunctionExpressionNode(node) { return node.type === NodeType_1.NodeType.ArrowFunctionExpression; } }, { - key: "isBlockStatementNode", + key: 'isBlockStatementNode', value: function isBlockStatementNode(node) { return node.type === NodeType_1.NodeType.BlockStatement; } }, { - key: "isCallExpressionNode", + key: 'isCallExpressionNode', value: function isCallExpressionNode(node) { return node.type === NodeType_1.NodeType.CallExpression; } }, { - key: "isFunctionDeclarationNode", + key: 'isFunctionDeclarationNode', value: function isFunctionDeclarationNode(node) { return node.type === NodeType_1.NodeType.FunctionDeclaration; } }, { - key: "isFunctionExpressionNode", + key: 'isFunctionExpressionNode', value: function isFunctionExpressionNode(node) { return node.type === NodeType_1.NodeType.FunctionExpression; } }, { - key: "isIdentifierNode", + key: 'isIdentifierNode', value: function isIdentifierNode(node) { return node.type === NodeType_1.NodeType.Identifier; } }, { - key: "isLiteralNode", + key: 'isLiteralNode', value: function isLiteralNode(node) { return node.type === NodeType_1.NodeType.Literal; } }, { - key: "isMemberExpressionNode", + key: 'isMemberExpressionNode', value: function isMemberExpressionNode(node) { return node.type === NodeType_1.NodeType.MemberExpression; } }, { - key: "isProgramNode", + key: 'isProgramNode', value: function isProgramNode(node) { return node.type === NodeType_1.NodeType.Program; } }, { - key: "isPropertyNode", + key: 'isPropertyNode', value: function isPropertyNode(node) { return node.type === NodeType_1.NodeType.Property; } }, { - key: "isReplaceableIdentifierNode", + key: 'isReplaceableIdentifierNode', value: function isReplaceableIdentifierNode(node, parentNode) { if (!Nodes.isIdentifierNode(node)) { return false; @@ -511,17 +511,17 @@ var Nodes = function () { return !parentNodeIsPropertyNode && !parentNodeIsMemberExpressionNode; } }, { - key: "isVariableDeclarationNode", + key: 'isVariableDeclarationNode', value: function isVariableDeclarationNode(node) { return node.type === NodeType_1.NodeType.VariableDeclaration; } }, { - key: "isVariableDeclaratorNode", + key: 'isVariableDeclaratorNode', value: function isVariableDeclaratorNode(node) { return node.type === NodeType_1.NodeType.VariableDeclarator; } }, { - key: "isNodeHasBlockStatement", + key: 'isNodeHasBlockStatement', value: function isNodeHasBlockStatement(node) { return node.hasOwnProperty('body') && Array.isArray(node.body); } @@ -655,7 +655,7 @@ var JavaScriptObfuscator = function () { } _createClass(JavaScriptObfuscator, null, [{ - key: "obfuscate", + key: 'obfuscate', value: function obfuscate(sourceCode) { var obfuscatorOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; @@ -664,7 +664,7 @@ var JavaScriptObfuscator = function () { return javaScriptObfuscator.getObfuscationResult(); } }, { - key: "runCLI", + key: 'runCLI', value: function runCLI(argv) { new JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI(argv).run(); } @@ -773,7 +773,7 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { } _createClass(IdentifierReplacer, [{ - key: "replace", + key: 'replace', value: function replace(nodeValue) { var obfuscatedIdentifierName = this.namesMap.get(nodeValue); if (!obfuscatedIdentifierName) { @@ -782,14 +782,14 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { return obfuscatedIdentifierName; } }, { - key: "storeNames", + key: 'storeNames', value: function storeNames(nodeName) { if (!this.isReservedName(nodeName)) { this.namesMap.set(nodeName, Utils_1.Utils.getRandomVariableName()); } } }, { - key: "isReservedName", + key: 'isReservedName', value: function isReservedName(name) { return this.options.reservedNames.some(function (reservedName) { return new RegExp(reservedName, 'g').test(name); @@ -831,7 +831,7 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { } _createClass(StringLiteralReplacer, [{ - key: "replace", + key: 'replace', value: function replace(nodeValue) { var replaceWithUnicodeArrayFlag = Math.random() <= this.options.unicodeArrayThreshold; if (this.options.encodeUnicodeLiterals && replaceWithUnicodeArrayFlag) { @@ -844,7 +844,7 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { return nodeValue; } }, { - key: "replaceStringLiteralWithUnicodeArrayCall", + key: 'replaceStringLiteralWithUnicodeArrayCall', value: function replaceStringLiteralWithUnicodeArrayCall(value) { var unicodeArrayNode = this.nodes.get('unicodeArrayNode'); if (!unicodeArrayNode) { @@ -866,9 +866,9 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { if (!unicodeArrayCallsWrapper) { throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); } - return unicodeArrayCallsWrapper.getNodeIdentifier() + "('" + hexadecimalIndex + "')"; + return unicodeArrayCallsWrapper.getNodeIdentifier() + '(\'' + hexadecimalIndex + '\')'; } - return unicodeArrayNode.getNodeIdentifier() + "[" + hexadecimalIndex + "]"; + return unicodeArrayNode.getNodeIdentifier() + '[' + hexadecimalIndex + ']'; } }]); @@ -1038,13 +1038,13 @@ var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { } _createClass(NumberLiteralReplacer, [{ - key: "replace", + key: 'replace', value: function replace(nodeValue) { var prefix = '0x'; if (!Utils_1.Utils.isInteger(nodeValue)) { return String(nodeValue); } - return "" + prefix + Utils_1.Utils.decToHex(nodeValue); + return '' + prefix + Utils_1.Utils.decToHex(nodeValue); } }]); @@ -1294,12 +1294,12 @@ var SourceMapCorrector = function () { } _createClass(SourceMapCorrector, [{ - key: "correct", + key: 'correct', value: function correct() { return new ObfuscationResult_1.ObfuscationResult(this.correctObfuscatedCode(), this.sourceMap); } }, { - key: "correctObfuscatedCode", + key: 'correctObfuscatedCode', value: function correctObfuscatedCode() { if (!this.sourceMap) { return this.obfuscatedCode; @@ -1307,7 +1307,7 @@ var SourceMapCorrector = function () { var sourceMappingUrl = '//# sourceMappingURL='; switch (this.sourceMapMode) { case SourceMapMode_1.SourceMapMode.Inline: - sourceMappingUrl += "data:application/json;base64," + Utils_1.Utils.btoa(this.sourceMap, false); + sourceMappingUrl += 'data:application/json;base64,' + Utils_1.Utils.btoa(this.sourceMap, false); break; case SourceMapMode_1.SourceMapMode.Separate: default: @@ -1317,7 +1317,7 @@ var SourceMapCorrector = function () { sourceMappingUrl += this.sourceMapUrl; break; } - return this.obfuscatedCode + "\n" + sourceMappingUrl; + return this.obfuscatedCode + '\n' + sourceMappingUrl; } }]); @@ -1641,12 +1641,12 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { } _createClass(ConsoleOutputDisableExpressionNode, [{ - key: "appendNode", + key: 'appendNode', value: function appendNode(blockScopeNode) { NodeUtils_1.NodeUtils.prependNode(blockScopeNode.body, this.getNode()); } }, { - key: "getNodeStructure", + key: 'getNodeStructure', value: function getNodeStructure() { return NodeUtils_1.NodeUtils.convertCodeToStructure(ConsoleOutputDisableExpressionTemplate_1.ConsoleOutputDisableExpressionTemplate()); } @@ -1692,12 +1692,12 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { } _createClass(DebugProtectionFunctionCallNode, [{ - key: "appendNode", + key: 'appendNode', value: function appendNode(blockScopeNode) { NodeUtils_1.NodeUtils.appendNode(blockScopeNode.body, this.getNode()); } }, { - key: "getNodeStructure", + key: 'getNodeStructure', value: function getNodeStructure() { return NodeUtils_1.NodeUtils.convertCodeToStructure(DebufProtectionFunctionCallTemplate_1.DebugProtectionFunctionCallTemplate().formatUnicorn({ debugProtectionFunctionName: this.debugProtectionFunctionName @@ -1745,12 +1745,12 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { } _createClass(DebugProtectionFunctionIntervalNode, [{ - key: "appendNode", + key: 'appendNode', value: function appendNode(blockScopeNode) { NodeUtils_1.NodeUtils.appendNode(blockScopeNode.body, this.getNode()); } }, { - key: "getNodeStructure", + key: 'getNodeStructure', value: function getNodeStructure() { return NodeUtils_1.NodeUtils.convertCodeToStructure(DebugProtectionFunctionIntervalTemplate_1.DebugProtectionFunctionIntervalTemplate().formatUnicorn({ debugProtectionFunctionName: this.debugProtectionFunctionName @@ -1799,7 +1799,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { } _createClass(DebugProtectionFunctionNode, [{ - key: "appendNode", + key: 'appendNode', value: function appendNode(blockScopeNode) { var programBodyLength = blockScopeNode.body.length, randomIndex = Utils_1.Utils.getRandomGenerator().integer({ @@ -1809,12 +1809,12 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), randomIndex); } }, { - key: "getNodeIdentifier", + key: 'getNodeIdentifier', value: function getNodeIdentifier() { return this.debugProtectionFunctionName; } }, { - key: "getNodeStructure", + key: 'getNodeStructure', value: function getNodeStructure() { return NodeUtils_1.NodeUtils.convertCodeToStructure(DebugProtectionFunctionTemplate_1.DebugProtectionFunctionTemplate().formatUnicorn({ debugProtectionFunctionName: this.debugProtectionFunctionName @@ -1864,12 +1864,12 @@ var DomainLockNode = function (_AbstractCustomNode_) { } _createClass(DomainLockNode, [{ - key: "appendNode", + key: 'appendNode', value: function appendNode(blockScopeNode) { NodeUtils_1.NodeUtils.prependNode(blockScopeNode.body, this.getNode()); } }, { - key: "getNodeStructure", + key: 'getNodeStructure', value: function getNodeStructure() { var domainsString = this.options.domainLock.join(';'); var _Utils_1$Utils$hideSt = Utils_1.Utils.hideString(domainsString, domainsString.length * 3); @@ -1927,7 +1927,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { } _createClass(SelfDefendingUnicodeNode, [{ - key: "appendNode", + key: 'appendNode', value: function appendNode(blockScopeNode) { var programBodyLength = blockScopeNode.body.length, randomIndex = 0; @@ -1940,7 +1940,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), randomIndex); } }, { - key: "getNodeStructure", + key: 'getNodeStructure', value: function getNodeStructure() { return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(SelfDefendingTemplate_1.SelfDefendingTemplate(), NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET).getObfuscatedCode()); } @@ -1991,7 +1991,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { } _createClass(UnicodeArrayCallsWrapper, [{ - key: "appendNode", + key: 'appendNode', value: function appendNode(blockScopeNode) { if (!this.unicodeArray.getLength()) { return; @@ -1999,17 +1999,17 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); } }, { - key: "getNodeIdentifier", + key: 'getNodeIdentifier', value: function getNodeIdentifier() { return this.unicodeArrayCallsWrapperName; } }, { - key: "getNode", + key: 'getNode', value: function getNode() { - return _get(UnicodeArrayCallsWrapper.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayCallsWrapper.prototype), "getNode", this).call(this); + return _get(UnicodeArrayCallsWrapper.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayCallsWrapper.prototype), 'getNode', this).call(this); } }, { - key: "getNodeStructure", + key: 'getNodeStructure', value: function getNodeStructure() { var keyName = Utils_1.Utils.getRandomVariableName(); return NodeUtils_1.NodeUtils.convertCodeToStructure(UnicodeArrayCallsWrapperTemplate_1.UnicodeArrayCallsWrapperTemplate().formatUnicorn({ @@ -2067,7 +2067,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { } _createClass(UnicodeArrayDecodeNode, [{ - key: "appendNode", + key: 'appendNode', value: function appendNode(blockScopeNode) { if (!this.unicodeArray.getLength()) { return; @@ -2075,12 +2075,12 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); } }, { - key: "getNode", + key: 'getNode', value: function getNode() { - return _get(UnicodeArrayDecodeNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), "getNode", this).call(this); + return _get(UnicodeArrayDecodeNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), 'getNode', this).call(this); } }, { - key: "getNodeStructure", + key: 'getNodeStructure', value: function getNodeStructure() { var forLoopFunctionName = 'forLoopFunc'; var code = void 0; @@ -2090,7 +2090,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { unicodeArrayName: this.unicodeArrayName }); } else { - code = forLoopFunctionName + "();"; + code = forLoopFunctionName + '();'; } return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(UnicodeArrayDecodeNodeTemplate_1.UnicodeArrayDecodeNodeTemplate().formatUnicorn({ atobPolyfill: AtobTemplate_1.AtobTemplate(), @@ -2235,7 +2235,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { } _createClass(UnicodeArrayRotateFunctionNode, [{ - key: "appendNode", + key: 'appendNode', value: function appendNode(blockScopeNode) { if (!this.unicodeArray.getLength()) { return; @@ -2243,12 +2243,12 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); } }, { - key: "getNode", + key: 'getNode', value: function getNode() { - return _get(UnicodeArrayRotateFunctionNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayRotateFunctionNode.prototype), "getNode", this).call(this); + return _get(UnicodeArrayRotateFunctionNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayRotateFunctionNode.prototype), 'getNode', this).call(this); } }, { - key: "getNodeStructure", + key: 'getNodeStructure', value: function getNodeStructure() { var code = '', timesName = Utils_1.Utils.getRandomVariableName(), @@ -2259,7 +2259,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { whileFunctionName: whileFunctionName }); } else { - code = whileFunctionName + "(++" + timesName + ")"; + code = whileFunctionName + '(++' + timesName + ')'; } return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(UnicodeArrayRotateFunctionTemplate_1.UnicodeArrayRotateFunctionTemplate().formatUnicorn({ code: code, @@ -2525,13 +2525,13 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { } _createClass(CatchClauseObfuscator, [{ - key: "obfuscateNode", + key: 'obfuscateNode', value: function obfuscateNode(catchClauseNode) { this.storeCatchClauseParam(catchClauseNode); this.replaceCatchClauseParam(catchClauseNode); } }, { - key: "storeCatchClauseParam", + key: 'storeCatchClauseParam', value: function storeCatchClauseParam(catchClauseNode) { var _this2 = this; @@ -2542,7 +2542,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { }); } }, { - key: "replaceCatchClauseParam", + key: 'replaceCatchClauseParam', value: function replaceCatchClauseParam(catchClauseNode) { var _this3 = this; @@ -2596,7 +2596,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { } _createClass(FunctionDeclarationObfuscator, [{ - key: "obfuscateNode", + key: 'obfuscateNode', value: function obfuscateNode(functionDeclarationNode, parentNode) { if (parentNode.type === NodeType_1.NodeType.Program) { return; @@ -2605,7 +2605,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { this.replaceFunctionName(functionDeclarationNode); } }, { - key: "storeFunctionName", + key: 'storeFunctionName', value: function storeFunctionName(functionDeclarationNode) { var _this2 = this; @@ -2616,7 +2616,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { }); } }, { - key: "replaceFunctionName", + key: 'replaceFunctionName', value: function replaceFunctionName(functionDeclarationNode) { var _this3 = this; @@ -2671,13 +2671,13 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { } _createClass(FunctionObfuscator, [{ - key: "obfuscateNode", + key: 'obfuscateNode', value: function obfuscateNode(functionNode) { this.storeFunctionParams(functionNode); this.replaceFunctionParams(functionNode); } }, { - key: "storeFunctionParams", + key: 'storeFunctionParams', value: function storeFunctionParams(functionNode) { var _this2 = this; @@ -2690,7 +2690,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { }); } }, { - key: "replaceFunctionParams", + key: 'replaceFunctionParams', value: function replaceFunctionParams(functionNode) { var _this3 = this; @@ -3049,7 +3049,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { } _createClass(VariableDeclarationObfuscator, [{ - key: "obfuscateNode", + key: 'obfuscateNode', value: function obfuscateNode(variableDeclarationNode, parentNode) { if (parentNode.type === NodeType_1.NodeType.Program) { return; @@ -3058,7 +3058,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { this.replaceVariableNames(variableDeclarationNode, parentNode); } }, { - key: "storeVariableNames", + key: 'storeVariableNames', value: function storeVariableNames(variableDeclarationNode) { var _this2 = this; @@ -3071,7 +3071,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { }); } }, { - key: "replaceVariableNames", + key: 'replaceVariableNames', value: function replaceVariableNames(variableDeclarationNode, variableParentNode) { var _this3 = this; @@ -3119,7 +3119,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { } _createClass(BooleanLiteralReplacer, [{ - key: "replace", + key: 'replace', value: function replace(nodeValue) { return nodeValue ? JSFuck_1.JSFuck.True : JSFuck_1.JSFuck.False; } @@ -3153,6 +3153,7 @@ 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__(71); +var TSourceMapMode_1 = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"app/types/TSourceMapMode\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); var DefaultPreset_1 = __webpack_require__(20); var OptionsNormalizer_1 = __webpack_require__(55); var ValidationErrorsFormatter_1 = __webpack_require__(56); @@ -3194,11 +3195,12 @@ __decorate([class_validator_1.IsString(), class_validator_1.ValidateIf(function require_valid_protocol: true }), __metadata('design:type', String)], Options.prototype, "sourceMapBaseUrl", void 0); __decorate([class_validator_1.IsString(), __metadata('design:type', String)], Options.prototype, "sourceMapFileName", void 0); -__decorate([class_validator_1.IsIn(['inline', 'separate']), __metadata('design:type', String)], Options.prototype, "sourceMapMode", void 0); +__decorate([class_validator_1.IsIn(['inline', 'separate']), __metadata('design:type', typeof (_a = typeof TSourceMapMode_1.TSourceMapMode !== 'undefined' && TSourceMapMode_1.TSourceMapMode) === 'function' && _a || Object)], Options.prototype, "sourceMapMode", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "unicodeArray", void 0); __decorate([class_validator_1.IsNumber(), class_validator_1.Min(0), class_validator_1.Max(1), __metadata('design:type', Number)], Options.prototype, "unicodeArrayThreshold", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "wrapUnicodeArrayCalls", void 0); exports.Options = Options; +var _a; /***/ }, /* 55 */ @@ -3219,7 +3221,7 @@ var OptionsNormalizer = function () { } _createClass(OptionsNormalizer, null, [{ - key: "normalizeOptions", + key: 'normalizeOptions', value: function normalizeOptions(options) { var normalizedOptions = Object.assign({}, options); var _iteratorNormalCompletion = true; @@ -3250,7 +3252,7 @@ var OptionsNormalizer = function () { return normalizedOptions; } }, { - key: "domainLockRule", + key: 'domainLockRule', value: function domainLockRule(options) { if (options.domainLock.length) { var normalizedDomains = []; @@ -3286,7 +3288,7 @@ var OptionsNormalizer = function () { return options; } }, { - key: "encodeUnicodeLiteralsRule", + key: 'encodeUnicodeLiteralsRule', value: function encodeUnicodeLiteralsRule(options) { if (options.unicodeArray && options.encodeUnicodeLiterals) { Object.assign(options, OptionsNormalizer.ENCODE_UNICODE_LITERALS_OPTIONS); @@ -3294,7 +3296,7 @@ var OptionsNormalizer = function () { return options; } }, { - key: "selfDefendingRule", + key: 'selfDefendingRule', value: function selfDefendingRule(options) { if (options.selfDefending) { Object.assign(options, OptionsNormalizer.SELF_DEFENDING_OPTIONS); @@ -3302,7 +3304,7 @@ var OptionsNormalizer = function () { return options; } }, { - key: "sourceMapBaseUrl", + key: 'sourceMapBaseUrl', value: function sourceMapBaseUrl(options) { var sourceMapBaseUrl = options.sourceMapBaseUrl; if (!options.sourceMapFileName) { @@ -3313,25 +3315,25 @@ var OptionsNormalizer = function () { } if (sourceMapBaseUrl && !sourceMapBaseUrl.endsWith('/')) { Object.assign(options, { - sourceMapBaseUrl: sourceMapBaseUrl + "/" + sourceMapBaseUrl: sourceMapBaseUrl + '/' }); } return options; } }, { - key: "sourceMapFileName", + key: 'sourceMapFileName', value: function sourceMapFileName(options) { var sourceMapFileName = options.sourceMapFileName; if (sourceMapFileName) { sourceMapFileName = sourceMapFileName.replace(/^\/+/, '').split('.')[0]; Object.assign(options, { - sourceMapFileName: sourceMapFileName + ".js.map" + sourceMapFileName: sourceMapFileName + '.js.map' }); } return options; } }, { - key: "unicodeArrayRule", + key: 'unicodeArrayRule', value: function unicodeArrayRule(options) { if (!options.unicodeArray) { Object.assign(options, OptionsNormalizer.DISABLED_UNICODE_ARRAY_OPTIONS); @@ -3339,7 +3341,7 @@ var OptionsNormalizer = function () { return options; } }, { - key: "unicodeArrayThresholdRule", + key: 'unicodeArrayThresholdRule', value: function unicodeArrayThresholdRule(options) { if (options.unicodeArrayThreshold === 0) { Object.assign(options, OptionsNormalizer.DISABLED_UNICODE_ARRAY_OPTIONS); @@ -3493,7 +3495,7 @@ exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionInterva var Utils_1 = __webpack_require__(0); function DebugProtectionFunctionTemplate() { - return "\n var {debugProtectionFunctionName} = function () {\n function debuggerProtection (counter) {\n if (('' + counter / counter)['length'] !== 1 || counter % 20 === 0) {\n (function () {}.constructor('debugger')());\n } else {\n [].filter.constructor(" + Utils_1.Utils.stringToJSFuck('debugger') + ")();\n }\n \n debuggerProtection(++counter);\n }\n \n try {\n debuggerProtection(0);\n } catch (y) {}\n };\n "; + return '\n var {debugProtectionFunctionName} = function () {\n function debuggerProtection (counter) {\n if ((\'\' + counter / counter)[\'length\'] !== 1 || counter % 20 === 0) {\n (function () {}.constructor(\'debugger\')());\n } else {\n [].filter.constructor(' + Utils_1.Utils.stringToJSFuck('debugger') + ')();\n }\n \n debuggerProtection(++counter);\n }\n \n try {\n debuggerProtection(0);\n } catch (y) {}\n };\n '; } exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; @@ -3518,7 +3520,7 @@ exports.DomainLockNodeTemplate = DomainLockNodeTemplate; var Utils_1 = __webpack_require__(0); function SelfDefendingTemplate() { - return "\n (function () { \n var func = function(){return 'dev';},\n func2 = function () {\n return 'window';\n };\n \n !Function(" + Utils_1.Utils.stringToUnicode("return/\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}/") + ")().test(func.toString()) ? Function(" + Utils_1.Utils.stringToUnicode("return/(\\\\[x|u](\\w){2,4})+/") + ")().test(func2.toString()) ? []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(false){}')() : []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(true){}')() : []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(false){}')();\n })();\n "; + return '\n (function () { \n var func = function(){return \'dev\';},\n func2 = function () {\n return \'window\';\n };\n \n !Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')().test(func.toString()) ? Function(' + Utils_1.Utils.stringToUnicode('return/(\\\\[x|u](\\w){2,4})+/') + ')().test(func2.toString()) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')();\n })();\n '; } exports.SelfDefendingTemplate = SelfDefendingTemplate; @@ -3543,7 +3545,7 @@ exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; var Utils_1 = __webpack_require__(0); function SelfDefendingTemplate() { - return "\n var func = function(){return 'dev';};\n \n Function(" + Utils_1.Utils.stringToUnicode("return/\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}/") + ")()['test'](func['toString']()) !== true && !{unicodeArrayName}++ ? []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(true){}')() : Function('a', atob(" + Utils_1.Utils.stringToUnicode(Utils_1.Utils.btoa('a.call()')) + "))({forLoopFunctionName}) ? []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(false){}')() : []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(false){}')();\n "; + return '\n var func = function(){return \'dev\';};\n \n Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')()[\'test\'](func[\'toString\']()) !== true && !{unicodeArrayName}++ ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : Function(\'a\', atob(' + Utils_1.Utils.stringToUnicode(Utils_1.Utils.btoa('a.call()')) + '))({forLoopFunctionName}) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')();\n '; } exports.SelfDefendingTemplate = SelfDefendingTemplate; @@ -3580,7 +3582,7 @@ exports.UnicodeArrayTemplate = UnicodeArrayTemplate; var Utils_1 = __webpack_require__(0); function SelfDefendingTemplate() { - return "(function () {\n var func = function(){return 'dev';};\n \n !Function(" + Utils_1.Utils.stringToUnicode("return/\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}/") + ")().test(func.toString()) ? []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(true){}')() : Function('a', 'b', 'a(++b)')({whileFunctionName}, {timesName}) ? []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(false){}')() : []['filter']['constructor'](" + Utils_1.Utils.stringToJSFuck('while') + " + '(false){}')();\n })();"; + return '(function () {\n var func = function(){return \'dev\';};\n \n !Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')().test(func.toString()) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : Function(\'a\', \'b\', \'a(++b)\')({whileFunctionName}, {timesName}) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')();\n })();'; } exports.SelfDefendingTemplate = SelfDefendingTemplate; diff --git a/package.json b/package.json index 800eee74..1b97df16 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "@types/mocha": "^2.2.32", "@types/node": "^6.0.41", "@types/sinon": "^1.16.31", + "awesome-typescript-loader": "^2.2.4", "babel-cli": "^6.16.0", "babel-loader": "^6.2.5", "babel-preset-es2015": "^6.16.0", @@ -54,7 +55,6 @@ "mocha": "^3.1.0", "optimize-js-plugin": "0.0.4", "sinon": "^2.0.0-pre.3", - "ts-loader": "^0.8.2", "ts-node": "^1.3.0", "tslint": "^3.15.1", "typescript": "^2.0.0", diff --git a/src/JavaScriptObfuscator.ts b/src/JavaScriptObfuscator.ts index edb08f75..561e4d6b 100644 --- a/src/JavaScriptObfuscator.ts +++ b/src/JavaScriptObfuscator.ts @@ -1,8 +1,8 @@ -import { IObfuscationResult } from "./interfaces/IObfuscationResult"; -import { IObfuscatorOptions } from "./interfaces/IObfuscatorOptions"; +import { IObfuscationResult } from './interfaces/IObfuscationResult'; +import { IObfuscatorOptions } from './interfaces/IObfuscatorOptions'; -import { JavaScriptObfuscatorCLI } from "./cli/JavaScriptObfuscatorCLI"; -import { JavaScriptObfuscatorInternal } from "./JavaScriptObfuscatorInternal"; +import { JavaScriptObfuscatorCLI } from './cli/JavaScriptObfuscatorCLI'; +import { JavaScriptObfuscatorInternal } from './JavaScriptObfuscatorInternal'; export class JavaScriptObfuscator { /** diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index 508e9317..4c32e958 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/src/JavaScriptObfuscatorInternal.ts @@ -2,15 +2,15 @@ import * as esprima from 'esprima'; import * as escodegen from 'escodegen'; import * as ESTree from 'estree'; -import { IObfuscatorOptions } from "./interfaces/IObfuscatorOptions"; -import { IGeneratorOutput } from "./interfaces/IGeneratorOutput"; -import { IObfuscationResult } from "./interfaces/IObfuscationResult"; +import { IObfuscatorOptions } from './interfaces/IObfuscatorOptions'; +import { IGeneratorOutput } from './interfaces/IGeneratorOutput'; +import { IObfuscationResult } from './interfaces/IObfuscationResult'; import { IOptions } from './interfaces/IOptions'; -import { ObfuscationResult } from "./ObfuscationResult"; -import { Obfuscator } from "./Obfuscator"; -import { Options } from "./options/Options"; -import { SourceMapCorrector } from "./SourceMapCorrector"; +import { ObfuscationResult } from './ObfuscationResult'; +import { Obfuscator } from './Obfuscator'; +import { Options } from './options/Options'; +import { SourceMapCorrector } from './SourceMapCorrector'; export class JavaScriptObfuscatorInternal { /** diff --git a/src/NodeUtils.ts b/src/NodeUtils.ts index c0dc25e4..ea0725cc 100644 --- a/src/NodeUtils.ts +++ b/src/NodeUtils.ts @@ -3,12 +3,12 @@ import * as esprima from 'esprima'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from "./types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from './types/TNodeWithBlockStatement'; -import { NodeType } from "./enums/NodeType"; +import { NodeType } from './enums/NodeType'; -import { Nodes } from "./Nodes"; -import { Utils } from "./Utils"; +import { Nodes } from './Nodes'; +import { Utils } from './Utils'; export class NodeUtils { /** diff --git a/src/Nodes.ts b/src/Nodes.ts index c1fea144..59b6076d 100644 --- a/src/Nodes.ts +++ b/src/Nodes.ts @@ -1,8 +1,8 @@ import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from "./types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from './types/TNodeWithBlockStatement'; -import { NodeType } from "./enums/NodeType"; +import { NodeType } from './enums/NodeType'; export class Nodes { /** diff --git a/src/ObfuscationResult.ts b/src/ObfuscationResult.ts index 86859809..9e1dc282 100644 --- a/src/ObfuscationResult.ts +++ b/src/ObfuscationResult.ts @@ -1,4 +1,4 @@ -import { IObfuscationResult } from "./interfaces/IObfuscationResult"; +import { IObfuscationResult } from './interfaces/IObfuscationResult'; export class ObfuscationResult implements IObfuscationResult { /** diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index 61fc3317..236c43e2 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -2,16 +2,16 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { ICustomNode } from './interfaces/custom-nodes/ICustomNode'; -import { IObfuscator } from "./interfaces/IObfuscator"; -import { IOptions } from "./interfaces/IOptions"; +import { IObfuscator } from './interfaces/IObfuscator'; +import { IOptions } from './interfaces/IOptions'; -import { TNodeObfuscator } from "./types/TNodeObfuscator"; +import { TNodeObfuscator } from './types/TNodeObfuscator'; import { AppendState } from './enums/AppendState'; import { NodeType } from './enums/NodeType'; import { CatchClauseObfuscator } from './node-obfuscators/CatchClauseObfuscator'; -import { ConsoleOutputNodesGroup } from "./node-groups/ConsoleOutputNodesGroup"; +import { ConsoleOutputNodesGroup } from './node-groups/ConsoleOutputNodesGroup'; import { DebugProtectionNodesGroup } from './node-groups/DebugProtectionNodesGroup'; import { DomainLockNodesGroup } from './node-groups/DomainLockNodesGroup'; import { FunctionDeclarationObfuscator } from './node-obfuscators/FunctionDeclarationObfuscator'; @@ -19,10 +19,10 @@ import { FunctionObfuscator } from './node-obfuscators/FunctionObfuscator'; import { LiteralObfuscator } from './node-obfuscators/LiteralObfuscator'; import { MemberExpressionObfuscator } from './node-obfuscators/MemberExpressionObfuscator'; import { MethodDefinitionObfuscator } from './node-obfuscators/MethodDefinitionObfuscator'; -import { Nodes } from "./Nodes"; -import { NodeUtils } from "./NodeUtils"; +import { Nodes } from './Nodes'; +import { NodeUtils } from './NodeUtils'; import { ObjectExpressionObfuscator } from './node-obfuscators/ObjectExpressionObfuscator'; -import { SelfDefendingNodesGroup } from "./node-groups/SelfDefendingNodesGroup"; +import { SelfDefendingNodesGroup } from './node-groups/SelfDefendingNodesGroup'; import { UnicodeArrayNodesGroup } from './node-groups/UnicodeArrayNodesGroup'; import { VariableDeclarationObfuscator } from './node-obfuscators/VariableDeclarationObfuscator'; diff --git a/src/SourceMapCorrector.ts b/src/SourceMapCorrector.ts index edb96c8f..b8e1b4fc 100644 --- a/src/SourceMapCorrector.ts +++ b/src/SourceMapCorrector.ts @@ -1,12 +1,12 @@ -import { IObfuscationResult } from "./interfaces/IObfuscationResult"; -import { ISourceMapCorrector } from "./interfaces/ISourceMapCorrector"; +import { IObfuscationResult } from './interfaces/IObfuscationResult'; +import { ISourceMapCorrector } from './interfaces/ISourceMapCorrector'; -import { TSourceMapMode } from "./types/TSourceMapMode"; +import { TSourceMapMode } from './types/TSourceMapMode'; -import { SourceMapMode } from "./enums/SourceMapMode"; +import { SourceMapMode } from './enums/SourceMapMode'; -import { ObfuscationResult } from "./ObfuscationResult"; -import { Utils } from "./Utils"; +import { ObfuscationResult } from './ObfuscationResult'; +import { Utils } from './Utils'; export class SourceMapCorrector implements ISourceMapCorrector { /** diff --git a/src/UnicodeArray.ts b/src/UnicodeArray.ts index 7d13f5f0..fe0dbb64 100644 --- a/src/UnicodeArray.ts +++ b/src/UnicodeArray.ts @@ -1,4 +1,4 @@ -import { Utils } from "./Utils"; +import { Utils } from './Utils'; export class UnicodeArray { /** diff --git a/src/cli/CLIUtils.ts b/src/cli/CLIUtils.ts index ea795b56..e241a778 100644 --- a/src/cli/CLIUtils.ts +++ b/src/cli/CLIUtils.ts @@ -2,9 +2,9 @@ import * as fs from 'fs'; import * as mkdirp from 'mkdirp'; import * as path from 'path'; -import { IPackageConfig } from "../interfaces/IPackageConfig"; +import { IPackageConfig } from 'app/interfaces/IPackageConfig'; -import { Utils } from "../Utils"; +import { Utils } from 'app/Utils'; export class CLIUtils { /** diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index 4a4453c4..2c245a39 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -1,16 +1,16 @@ import * as commander from 'commander'; import * as path from 'path'; -import { IObfuscationResult } from "../interfaces/IObfuscationResult"; -import { IObfuscatorOptions } from "../interfaces/IObfuscatorOptions"; +import { IObfuscationResult } from '../interfaces/IObfuscationResult'; +import { IObfuscatorOptions } from '../interfaces/IObfuscatorOptions'; -import { SourceMapMode } from "../enums/SourceMapMode"; +import { SourceMapMode } from '../enums/SourceMapMode'; -import { DEFAULT_PRESET } from "../preset-options/DefaultPreset"; +import { DEFAULT_PRESET } from '../preset-options/DefaultPreset'; -import { CLIUtils } from "./CLIUtils"; -import { JavaScriptObfuscator } from "../JavaScriptObfuscator"; -import { Utils } from "../Utils"; +import { CLIUtils } from './CLIUtils'; +import { JavaScriptObfuscator } from '../JavaScriptObfuscator'; +import { Utils } from '../Utils'; export class JavaScriptObfuscatorCLI { /** diff --git a/src/custom-nodes/AbstractCustomNode.ts b/src/custom-nodes/AbstractCustomNode.ts index e2a92ea0..012b6693 100644 --- a/src/custom-nodes/AbstractCustomNode.ts +++ b/src/custom-nodes/AbstractCustomNode.ts @@ -1,9 +1,9 @@ import * as ESTree from 'estree'; -import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; -import { IOptions } from "../interfaces/IOptions"; +import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; +import { IOptions } from 'app/interfaces/IOptions'; -import { AppendState } from '../enums/AppendState'; +import { AppendState } from 'app/enums/AppendState'; export abstract class AbstractCustomNode implements ICustomNode { /** diff --git a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts index dc53c392..e8fba09a 100644 --- a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts +++ b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts @@ -1,13 +1,13 @@ import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; -import { AppendState } from "../../enums/AppendState"; +import { AppendState } from 'app/enums/AppendState'; -import { ConsoleOutputDisableExpressionTemplate } from "../../templates/custom-nodes/console-output-nodes/console-output-disable-expression-node/ConsoleOutputDisableExpressionTemplate"; +import { ConsoleOutputDisableExpressionTemplate } from 'app/templates/custom-nodes/console-output-nodes/console-output-disable-expression-node/ConsoleOutputDisableExpressionTemplate'; -import { AbstractCustomNode } from '../AbstractCustomNode'; -import { NodeUtils } from "../../NodeUtils"; +import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; +import { NodeUtils } from 'app/NodeUtils'; export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts index a41d4df8..dcbef3ba 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts @@ -2,16 +2,16 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from "../../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; -import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; -import { AppendState } from "../../enums/AppendState"; +import { AppendState } from 'app/enums/AppendState'; -import { DebugProtectionFunctionCallTemplate } from "../../templates/custom-nodes/debug-protection-nodes/debug-protection-function-call-node/DebufProtectionFunctionCallTemplate"; +import { DebugProtectionFunctionCallTemplate } from 'app/templates/custom-nodes/debug-protection-nodes/debug-protection-function-call-node/DebufProtectionFunctionCallTemplate'; -import { AbstractCustomNode } from '../AbstractCustomNode'; -import { NodeUtils } from "../../NodeUtils"; +import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; +import { NodeUtils } from 'app/NodeUtils'; export class DebugProtectionFunctionCallNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts index 2ede7386..9144b935 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts @@ -2,16 +2,16 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from "../../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; -import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; -import { AppendState } from "../../enums/AppendState"; +import { AppendState } from 'app/enums/AppendState'; -import { DebugProtectionFunctionIntervalTemplate } from "../../templates/custom-nodes/debug-protection-nodes/debug-protection-function-interval-node/DebugProtectionFunctionIntervalTemplate"; +import { DebugProtectionFunctionIntervalTemplate } from 'app/templates/custom-nodes/debug-protection-nodes/debug-protection-function-interval-node/DebugProtectionFunctionIntervalTemplate'; -import { AbstractCustomNode } from '../AbstractCustomNode'; -import { NodeUtils } from '../../NodeUtils'; +import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; +import { NodeUtils } from 'app/NodeUtils'; export class DebugProtectionFunctionIntervalNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts index c82e017c..2e1ff017 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts @@ -2,17 +2,17 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from "../../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; -import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; -import { AppendState } from "../../enums/AppendState"; +import { AppendState } from 'app/enums/AppendState'; -import { DebugProtectionFunctionTemplate } from "../../templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate"; +import { DebugProtectionFunctionTemplate } from 'app/templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate'; -import { AbstractCustomNode } from '../AbstractCustomNode'; -import { NodeUtils } from '../../NodeUtils'; -import { Utils } from "../../Utils"; +import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; +import { NodeUtils } from 'app/NodeUtils'; +import { Utils } from 'app/Utils'; export class DebugProtectionFunctionNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts index 92c76cc9..ef2f2de2 100644 --- a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -2,15 +2,15 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; -import { AppendState } from "../../enums/AppendState"; +import { AppendState } from 'app/enums/AppendState'; -import { DomainLockNodeTemplate } from "../../templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate"; +import { DomainLockNodeTemplate } from 'app/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate'; -import { AbstractCustomNode } from "../AbstractCustomNode"; -import { NodeUtils } from "../../NodeUtils"; -import { Utils } from "../../Utils"; +import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; +import { NodeUtils } from 'app/NodeUtils'; +import { Utils } from 'app/Utils'; export class DomainLockNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index 4136a75c..dc714d50 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts @@ -1,17 +1,17 @@ import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; -import { AppendState } from "../../enums/AppendState"; +import { AppendState } from 'app/enums/AppendState'; -import { NO_CUSTOM_NODES_PRESET } from "../../preset-options/NoCustomNodesPreset"; +import { NO_CUSTOM_NODES_PRESET } from 'app/preset-options/NoCustomNodesPreset'; -import { SelfDefendingTemplate } from "../../templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate"; +import { SelfDefendingTemplate } from 'app/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate'; -import { AbstractCustomNode } from '../AbstractCustomNode'; -import { JavaScriptObfuscator } from "../../JavaScriptObfuscator"; -import { NodeUtils } from "../../NodeUtils"; -import { Utils } from "../../Utils"; +import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; +import { JavaScriptObfuscator } from 'app/JavaScriptObfuscator'; +import { NodeUtils } from 'app/NodeUtils'; +import { Utils } from 'app/Utils'; export class SelfDefendingUnicodeNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts index 99ab1821..d03ec513 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts @@ -2,18 +2,18 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from "../../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; -import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; -import { AppendState } from "../../enums/AppendState"; +import { AppendState } from 'app/enums/AppendState'; -import { UnicodeArrayCallsWrapperTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate"; +import { UnicodeArrayCallsWrapperTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate'; -import { AbstractCustomNode } from '../AbstractCustomNode'; -import { NodeUtils } from "../../NodeUtils"; -import { UnicodeArray } from "../../UnicodeArray"; -import { Utils } from "../../Utils"; +import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; +import { NodeUtils } from 'app/NodeUtils'; +import { UnicodeArray } from 'app/UnicodeArray'; +import { Utils } from 'app/Utils'; export class UnicodeArrayCallsWrapper extends AbstractCustomNode { /** diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts index fb76d1cb..ad6eb334 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts @@ -2,22 +2,22 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from "../../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; -import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; -import { AppendState } from "../../enums/AppendState"; +import { AppendState } from 'app/enums/AppendState'; -import { NO_CUSTOM_NODES_PRESET } from "../../preset-options/NoCustomNodesPreset"; +import { NO_CUSTOM_NODES_PRESET } from 'app/preset-options/NoCustomNodesPreset'; -import { AtobTemplate } from "../../templates/custom-nodes/AtobTemplate"; -import { SelfDefendingTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate"; -import { UnicodeArrayDecodeNodeTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate"; +import { AtobTemplate } from 'app/templates/custom-nodes/AtobTemplate'; +import { SelfDefendingTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate'; +import { UnicodeArrayDecodeNodeTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate'; -import { AbstractCustomNode } from '../AbstractCustomNode'; -import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; -import { NodeUtils } from "../../NodeUtils"; -import { UnicodeArray } from "../../UnicodeArray"; +import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; +import { JavaScriptObfuscator } from 'app/JavaScriptObfuscator'; +import { NodeUtils } from 'app/NodeUtils'; +import { UnicodeArray } from 'app/UnicodeArray'; export class UnicodeArrayDecodeNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts index 07ba3a5a..374250c2 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts @@ -2,18 +2,18 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from "../../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; -import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; -import { AppendState } from '../../enums/AppendState'; +import { AppendState } from 'app/enums/AppendState'; -import { UnicodeArray } from '../../UnicodeArray'; +import { UnicodeArray } from 'app/UnicodeArray'; -import { UnicodeArrayTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-node/UnicodeArrayTemplate"; +import { UnicodeArrayTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-node/UnicodeArrayTemplate'; -import { AbstractCustomNode } from '../AbstractCustomNode'; -import { NodeUtils } from "../../NodeUtils"; +import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; +import { NodeUtils } from 'app/NodeUtils'; export class UnicodeArrayNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts index 1d175426..4d0b5c12 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts @@ -2,22 +2,22 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from "../../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; -import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement"; +import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; -import { AppendState } from "../../enums/AppendState"; +import { AppendState } from 'app/enums/AppendState'; -import { NO_CUSTOM_NODES_PRESET } from "../../preset-options/NoCustomNodesPreset"; +import { NO_CUSTOM_NODES_PRESET } from 'app/preset-options/NoCustomNodesPreset'; -import { SelfDefendingTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate"; -import { UnicodeArrayRotateFunctionTemplate } from "../../templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/UnicodeArrayRotateFunctionTemplate"; +import { SelfDefendingTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate'; +import { UnicodeArrayRotateFunctionTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/UnicodeArrayRotateFunctionTemplate'; -import { AbstractCustomNode } from '../AbstractCustomNode'; -import { JavaScriptObfuscator } from "../../JavaScriptObfuscator"; -import { NodeUtils } from "../../NodeUtils"; -import { UnicodeArray } from "../../UnicodeArray"; -import { Utils } from "../../Utils"; +import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; +import { JavaScriptObfuscator } from 'app/JavaScriptObfuscator'; +import { NodeUtils } from 'app/NodeUtils'; +import { UnicodeArray } from 'app/UnicodeArray'; +import { Utils } from 'app/Utils'; export class UnicodeArrayRotateFunctionNode extends AbstractCustomNode { /** diff --git a/src/enums/NodeType.ts b/src/enums/NodeType.ts index c2b8e3f1..40c966e6 100644 --- a/src/enums/NodeType.ts +++ b/src/enums/NodeType.ts @@ -1,4 +1,4 @@ -import { Utils } from "../Utils"; +import { Utils } from 'app/Utils'; export const NodeType: any = Utils.strEnumify({ ArrayExpression: 'ArrayExpression', diff --git a/src/interfaces/IGenerator.d.ts b/src/interfaces/IGenerator.d.ts index e3815ace..b185892d 100644 --- a/src/interfaces/IGenerator.d.ts +++ b/src/interfaces/IGenerator.d.ts @@ -1,4 +1,4 @@ -import { IGeneratorOutput } from "./IGeneratorOutput"; +import { IGeneratorOutput } from './IGeneratorOutput'; declare module 'escodegen' { export function generate(ast: any, options?: GenerateOptions): IGeneratorOutput; diff --git a/src/interfaces/IObfuscatorOptions.d.ts b/src/interfaces/IObfuscatorOptions.d.ts index 58940d1a..1c2fe9e4 100644 --- a/src/interfaces/IObfuscatorOptions.d.ts +++ b/src/interfaces/IObfuscatorOptions.d.ts @@ -1,4 +1,4 @@ -import { TSourceMapMode } from "../types/TSourceMapMode"; +import { TSourceMapMode } from 'app/types/TSourceMapMode'; export interface IObfuscatorOptions { compact?: boolean; diff --git a/src/interfaces/IOptions.d.ts b/src/interfaces/IOptions.d.ts index 3d7afb2f..461658bd 100644 --- a/src/interfaces/IOptions.d.ts +++ b/src/interfaces/IOptions.d.ts @@ -1,4 +1,4 @@ -import { TSourceMapMode } from "../types/TSourceMapMode"; +import { TSourceMapMode } from '../types/TSourceMapMode'; export interface IOptions { readonly compact: boolean; diff --git a/src/interfaces/ISourceMapCorrector.d.ts b/src/interfaces/ISourceMapCorrector.d.ts index 02360615..56aae140 100644 --- a/src/interfaces/ISourceMapCorrector.d.ts +++ b/src/interfaces/ISourceMapCorrector.d.ts @@ -1,4 +1,4 @@ -import { IObfuscationResult } from "./IObfuscationResult"; +import { IObfuscationResult } from './IObfuscationResult'; export interface ISourceMapCorrector { correct (): IObfuscationResult; diff --git a/src/interfaces/custom-nodes/ICustomNode.d.ts b/src/interfaces/custom-nodes/ICustomNode.d.ts index b9c70ace..8a04d3c1 100644 --- a/src/interfaces/custom-nodes/ICustomNode.d.ts +++ b/src/interfaces/custom-nodes/ICustomNode.d.ts @@ -1,6 +1,6 @@ import * as ESTree from 'estree'; -import { AppendState } from '../../enums/AppendState'; +import { AppendState } from 'app/enums/AppendState'; export interface ICustomNode { /** diff --git a/src/interfaces/custom-nodes/ICustomNodeWithData.d.ts b/src/interfaces/custom-nodes/ICustomNodeWithData.d.ts index b2e8cd1b..a5b0fc6e 100644 --- a/src/interfaces/custom-nodes/ICustomNodeWithData.d.ts +++ b/src/interfaces/custom-nodes/ICustomNodeWithData.d.ts @@ -1,4 +1,4 @@ -import { ICustomNode } from "./ICustomNode"; +import { ICustomNode } from './ICustomNode'; export interface ICustomNodeWithData extends ICustomNode { /** diff --git a/src/interfaces/custom-nodes/ICustomNodeWithIdentifier.d.ts b/src/interfaces/custom-nodes/ICustomNodeWithIdentifier.d.ts index a290ee86..b9f9f80c 100644 --- a/src/interfaces/custom-nodes/ICustomNodeWithIdentifier.d.ts +++ b/src/interfaces/custom-nodes/ICustomNodeWithIdentifier.d.ts @@ -1,4 +1,4 @@ -import { ICustomNode } from "./ICustomNode"; +import { ICustomNode } from './ICustomNode'; export interface ICustomNodeWithIdentifier extends ICustomNode { /** diff --git a/src/node-groups/AbstractNodesGroup.ts b/src/node-groups/AbstractNodesGroup.ts index 34ffb998..54b2418e 100644 --- a/src/node-groups/AbstractNodesGroup.ts +++ b/src/node-groups/AbstractNodesGroup.ts @@ -1,7 +1,7 @@ -import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; +import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; -import { INodesGroup } from '../interfaces/INodesGroup'; -import { IOptions } from "../interfaces/IOptions"; +import { INodesGroup } from 'app/interfaces/INodesGroup'; +import { IOptions } from 'app/interfaces/IOptions'; export abstract class AbstractNodesGroup implements INodesGroup { /** diff --git a/src/node-groups/ConsoleOutputNodesGroup.ts b/src/node-groups/ConsoleOutputNodesGroup.ts index 2cc61fe5..33f81447 100644 --- a/src/node-groups/ConsoleOutputNodesGroup.ts +++ b/src/node-groups/ConsoleOutputNodesGroup.ts @@ -1,7 +1,7 @@ -import { IOptions } from "../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; import { AbstractNodesGroup } from './AbstractNodesGroup'; -import { ConsoleOutputDisableExpressionNode } from "../custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode"; +import { ConsoleOutputDisableExpressionNode } from 'app/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode'; export class ConsoleOutputNodesGroup extends AbstractNodesGroup { /** diff --git a/src/node-groups/DebugProtectionNodesGroup.ts b/src/node-groups/DebugProtectionNodesGroup.ts index c9ae367f..6c3ea520 100644 --- a/src/node-groups/DebugProtectionNodesGroup.ts +++ b/src/node-groups/DebugProtectionNodesGroup.ts @@ -1,11 +1,11 @@ -import { IOptions } from "../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; -import { DebugProtectionFunctionCallNode } from "../custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode"; -import { DebugProtectionFunctionIntervalNode } from "../custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode"; -import { DebugProtectionFunctionNode } from "../custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode"; +import { DebugProtectionFunctionCallNode } from 'app/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode'; +import { DebugProtectionFunctionIntervalNode } from 'app/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode'; +import { DebugProtectionFunctionNode } from 'app/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode'; import { AbstractNodesGroup } from './AbstractNodesGroup'; -import { Utils } from '../Utils'; +import { Utils } from 'app/Utils'; export class DebugProtectionNodesGroup extends AbstractNodesGroup { /** diff --git a/src/node-groups/DomainLockNodesGroup.ts b/src/node-groups/DomainLockNodesGroup.ts index dd8c4c0d..2f110e1c 100644 --- a/src/node-groups/DomainLockNodesGroup.ts +++ b/src/node-groups/DomainLockNodesGroup.ts @@ -1,7 +1,7 @@ -import { IOptions } from "../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; -import { AbstractNodesGroup } from "./AbstractNodesGroup"; -import { DomainLockNode } from "../custom-nodes/domain-lock-nodes/DomainLockNode"; +import { AbstractNodesGroup } from './AbstractNodesGroup'; +import { DomainLockNode } from 'app/custom-nodes/domain-lock-nodes/DomainLockNode'; export class DomainLockNodesGroup extends AbstractNodesGroup { /** diff --git a/src/node-groups/SelfDefendingNodesGroup.ts b/src/node-groups/SelfDefendingNodesGroup.ts index 3c0adcad..9793211e 100644 --- a/src/node-groups/SelfDefendingNodesGroup.ts +++ b/src/node-groups/SelfDefendingNodesGroup.ts @@ -1,7 +1,7 @@ -import { IOptions } from "../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; import { AbstractNodesGroup } from './AbstractNodesGroup'; -import { SelfDefendingUnicodeNode } from "../custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode"; +import { SelfDefendingUnicodeNode } from 'app/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode'; export class SelfDefendingNodesGroup extends AbstractNodesGroup { /** diff --git a/src/node-groups/UnicodeArrayNodesGroup.ts b/src/node-groups/UnicodeArrayNodesGroup.ts index 937855b9..9a21af5e 100644 --- a/src/node-groups/UnicodeArrayNodesGroup.ts +++ b/src/node-groups/UnicodeArrayNodesGroup.ts @@ -1,12 +1,12 @@ -import { IOptions } from "../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; import { AbstractNodesGroup } from './AbstractNodesGroup'; -import { UnicodeArray } from "../UnicodeArray"; -import { UnicodeArrayCallsWrapper } from "../custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper"; -import { UnicodeArrayDecodeNode } from "../custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode"; -import { UnicodeArrayNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayNode'; -import { UnicodeArrayRotateFunctionNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode'; -import { Utils } from '../Utils'; +import { UnicodeArray } from 'app/UnicodeArray'; +import { UnicodeArrayCallsWrapper } from 'app/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper'; +import { UnicodeArrayDecodeNode } from 'app/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode'; +import { UnicodeArrayNode } from 'app/custom-nodes/unicode-array-nodes/UnicodeArrayNode'; +import { UnicodeArrayRotateFunctionNode } from 'app/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode'; +import { Utils } from 'app/Utils'; export class UnicodeArrayNodesGroup extends AbstractNodesGroup { /** diff --git a/src/node-obfuscators/AbstractNodeObfuscator.ts b/src/node-obfuscators/AbstractNodeObfuscator.ts index c1bdf3d3..12e0f9c2 100644 --- a/src/node-obfuscators/AbstractNodeObfuscator.ts +++ b/src/node-obfuscators/AbstractNodeObfuscator.ts @@ -1,8 +1,8 @@ import * as ESTree from 'estree'; -import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; -import { INodeObfuscator } from '../interfaces/INodeObfuscator'; -import { IOptions } from "../interfaces/IOptions"; +import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; +import { INodeObfuscator } from 'app/interfaces/INodeObfuscator'; +import { IOptions } from 'app/interfaces/IOptions'; export abstract class AbstractNodeObfuscator implements INodeObfuscator { /** diff --git a/src/node-obfuscators/CatchClauseObfuscator.ts b/src/node-obfuscators/CatchClauseObfuscator.ts index b36f8b4e..5cc3f227 100644 --- a/src/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-obfuscators/CatchClauseObfuscator.ts @@ -1,15 +1,15 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; -import { IOptions } from "../interfaces/IOptions"; +import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; +import { IOptions } from 'app/interfaces/IOptions'; -import { NodeType } from "../enums/NodeType"; +import { NodeType } from 'app/enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; -import { IdentifierReplacer } from "./replacers/IdentifierReplacer"; -import { Nodes } from "../Nodes"; -import { NodeUtils } from "../NodeUtils"; +import { IdentifierReplacer } from './replacers/IdentifierReplacer'; +import { Nodes } from 'app/Nodes'; +import { NodeUtils } from 'app/NodeUtils'; /** * replaces: diff --git a/src/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-obfuscators/FunctionDeclarationObfuscator.ts index 05b1ac1e..05ef0c13 100644 --- a/src/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -1,15 +1,15 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; -import { IOptions } from "../interfaces/IOptions"; +import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; +import { IOptions } from 'app/interfaces/IOptions'; -import { NodeType } from "../enums/NodeType"; +import { NodeType } from 'app/enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; -import { IdentifierReplacer } from "./replacers/IdentifierReplacer"; -import { Nodes } from "../Nodes"; -import { NodeUtils } from "../NodeUtils"; +import { IdentifierReplacer } from './replacers/IdentifierReplacer'; +import { Nodes } from 'app/Nodes'; +import { NodeUtils } from 'app/NodeUtils'; /** * replaces: diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index dcc50576..4372dd42 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -1,15 +1,15 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; -import { IOptions } from "../interfaces/IOptions"; +import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; +import { IOptions } from 'app/interfaces/IOptions'; -import { NodeType } from "../enums/NodeType"; +import { NodeType } from 'app/enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; -import { IdentifierReplacer } from "./replacers/IdentifierReplacer"; -import { Nodes } from "../Nodes"; -import { NodeUtils } from "../NodeUtils"; +import { IdentifierReplacer } from './replacers/IdentifierReplacer'; +import { Nodes } from 'app/Nodes'; +import { NodeUtils } from 'app/NodeUtils'; /** * replaces: diff --git a/src/node-obfuscators/LiteralObfuscator.ts b/src/node-obfuscators/LiteralObfuscator.ts index 32ed8b98..819eeeaf 100644 --- a/src/node-obfuscators/LiteralObfuscator.ts +++ b/src/node-obfuscators/LiteralObfuscator.ts @@ -2,10 +2,10 @@ import * as escodegen from 'escodegen'; import * as ESTree from 'estree'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; -import { BooleanLiteralReplacer } from "./replacers/BooleanLiteralReplacer"; -import { Nodes } from "../Nodes"; -import { NumberLiteralReplacer } from "./replacers/NumberLiteralReplacer"; -import { StringLiteralReplacer } from "./replacers/StringLiteralReplacer"; +import { BooleanLiteralReplacer } from './replacers/BooleanLiteralReplacer'; +import { Nodes } from 'app/Nodes'; +import { NumberLiteralReplacer } from './replacers/NumberLiteralReplacer'; +import { StringLiteralReplacer } from './replacers/StringLiteralReplacer'; export class LiteralObfuscator extends AbstractNodeObfuscator { /** diff --git a/src/node-obfuscators/MemberExpressionObfuscator.ts b/src/node-obfuscators/MemberExpressionObfuscator.ts index ed5e6669..9b5c3c40 100644 --- a/src/node-obfuscators/MemberExpressionObfuscator.ts +++ b/src/node-obfuscators/MemberExpressionObfuscator.ts @@ -2,11 +2,11 @@ import * as escodegen from 'escodegen'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { NodeType } from "../enums/NodeType"; +import { NodeType } from 'app/enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; -import { Nodes } from "../Nodes"; -import { StringLiteralReplacer } from "./replacers/StringLiteralReplacer"; +import { Nodes } from 'app/Nodes'; +import { StringLiteralReplacer } from './replacers/StringLiteralReplacer'; export class MemberExpressionObfuscator extends AbstractNodeObfuscator { /** diff --git a/src/node-obfuscators/MethodDefinitionObfuscator.ts b/src/node-obfuscators/MethodDefinitionObfuscator.ts index 2902d9c9..b1c73e17 100644 --- a/src/node-obfuscators/MethodDefinitionObfuscator.ts +++ b/src/node-obfuscators/MethodDefinitionObfuscator.ts @@ -2,9 +2,9 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; -import { Nodes } from "../Nodes"; -import { Utils } from "../Utils"; -import { StringLiteralReplacer } from "./replacers/StringLiteralReplacer"; +import { Nodes } from 'app/Nodes'; +import { Utils } from 'app/Utils'; +import { StringLiteralReplacer } from './replacers/StringLiteralReplacer'; /** * replaces: diff --git a/src/node-obfuscators/ObjectExpressionObfuscator.ts b/src/node-obfuscators/ObjectExpressionObfuscator.ts index 51a9e9a5..8053ad7f 100644 --- a/src/node-obfuscators/ObjectExpressionObfuscator.ts +++ b/src/node-obfuscators/ObjectExpressionObfuscator.ts @@ -2,11 +2,11 @@ import * as escodegen from 'escodegen'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { NodeType } from "../enums/NodeType"; +import { NodeType } from 'app/enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; -import { Nodes } from "../Nodes"; -import { Utils } from '../Utils'; +import { Nodes } from 'app/Nodes'; +import { Utils } from 'app/Utils'; /** * replaces: diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index e583ed12..ddfa419c 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -1,15 +1,15 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; -import { IOptions } from "../interfaces/IOptions"; +import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; +import { IOptions } from 'app/interfaces/IOptions'; -import { NodeType } from "../enums/NodeType"; +import { NodeType } from 'app/enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; -import { IdentifierReplacer } from "./replacers/IdentifierReplacer"; -import { Nodes } from "../Nodes"; -import { NodeUtils } from "../NodeUtils"; +import { IdentifierReplacer } from './replacers/IdentifierReplacer'; +import { Nodes } from 'app/Nodes'; +import { NodeUtils } from 'app/NodeUtils'; /** * replaces: diff --git a/src/node-obfuscators/replacers/AbstractReplacer.ts b/src/node-obfuscators/replacers/AbstractReplacer.ts index 89af3620..2ea6984e 100644 --- a/src/node-obfuscators/replacers/AbstractReplacer.ts +++ b/src/node-obfuscators/replacers/AbstractReplacer.ts @@ -1,6 +1,6 @@ -import { ICustomNode } from "../../interfaces/custom-nodes/ICustomNode"; -import { IOptions } from "../../interfaces/IOptions"; -import { IReplacer } from "../../interfaces/IReplacer"; +import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; +import { IOptions } from 'app/interfaces/IOptions'; +import { IReplacer } from 'app/interfaces/IReplacer'; export abstract class AbstractReplacer implements IReplacer { /** diff --git a/src/node-obfuscators/replacers/BooleanLiteralReplacer.ts b/src/node-obfuscators/replacers/BooleanLiteralReplacer.ts index 20cf292a..3e9224d8 100644 --- a/src/node-obfuscators/replacers/BooleanLiteralReplacer.ts +++ b/src/node-obfuscators/replacers/BooleanLiteralReplacer.ts @@ -1,6 +1,6 @@ -import { JSFuck } from "../../enums/JSFuck"; +import { JSFuck } from 'app/enums/JSFuck'; -import { AbstractReplacer } from "./AbstractReplacer"; +import { AbstractReplacer } from './AbstractReplacer'; export class BooleanLiteralReplacer extends AbstractReplacer { /** diff --git a/src/node-obfuscators/replacers/IdentifierReplacer.ts b/src/node-obfuscators/replacers/IdentifierReplacer.ts index 5266c505..c34204a2 100644 --- a/src/node-obfuscators/replacers/IdentifierReplacer.ts +++ b/src/node-obfuscators/replacers/IdentifierReplacer.ts @@ -1,5 +1,5 @@ -import { AbstractReplacer } from "./AbstractReplacer"; -import { Utils } from "../../Utils"; +import { AbstractReplacer } from './AbstractReplacer'; +import { Utils } from 'app/Utils'; export class IdentifierReplacer extends AbstractReplacer { /** diff --git a/src/node-obfuscators/replacers/NumberLiteralReplacer.ts b/src/node-obfuscators/replacers/NumberLiteralReplacer.ts index f454eb52..badcd1da 100644 --- a/src/node-obfuscators/replacers/NumberLiteralReplacer.ts +++ b/src/node-obfuscators/replacers/NumberLiteralReplacer.ts @@ -1,5 +1,5 @@ -import { AbstractReplacer } from "./AbstractReplacer"; -import { Utils } from "../../Utils"; +import { AbstractReplacer } from './AbstractReplacer'; +import { Utils } from 'app/Utils'; export class NumberLiteralReplacer extends AbstractReplacer { /** diff --git a/src/node-obfuscators/replacers/StringLiteralReplacer.ts b/src/node-obfuscators/replacers/StringLiteralReplacer.ts index 78927f96..2f69d7a4 100644 --- a/src/node-obfuscators/replacers/StringLiteralReplacer.ts +++ b/src/node-obfuscators/replacers/StringLiteralReplacer.ts @@ -1,10 +1,10 @@ -import { TUnicodeArrayCallsWrapper } from "../../types/custom-nodes/TUnicodeArrayCallsWrapper"; -import { TUnicodeArrayNode } from "../../types/custom-nodes/TUnicodeArrayNode"; +import { TUnicodeArrayCallsWrapper } from 'app/types/custom-nodes/TUnicodeArrayCallsWrapper'; +import { TUnicodeArrayNode } from 'app/types/custom-nodes/TUnicodeArrayNode'; -import { AbstractReplacer } from "./AbstractReplacer"; -import { NumberLiteralReplacer } from "./NumberLiteralReplacer"; -import { UnicodeArray } from "../../UnicodeArray"; -import { Utils } from "../../Utils"; +import { AbstractReplacer } from './AbstractReplacer'; +import { NumberLiteralReplacer } from './NumberLiteralReplacer'; +import { UnicodeArray } from 'app/UnicodeArray'; +import { Utils } from 'app/Utils'; export class StringLiteralReplacer extends AbstractReplacer { /** diff --git a/src/options/Options.ts b/src/options/Options.ts index 96e68412..2004dce3 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -14,15 +14,15 @@ import { ValidatorOptions } from 'class-validator'; -import { IObfuscatorOptions } from "../interfaces/IObfuscatorOptions"; -import { IOptions } from "../interfaces/IOptions"; +import { IObfuscatorOptions } from 'app/interfaces/IObfuscatorOptions'; +import { IOptions } from 'app/interfaces/IOptions'; -import { TSourceMapMode } from "../types/TSourceMapMode"; +import { TSourceMapMode } from 'app/types/TSourceMapMode'; -import { DEFAULT_PRESET } from "../preset-options/DefaultPreset"; +import { DEFAULT_PRESET } from 'app/preset-options/DefaultPreset'; -import { OptionsNormalizer } from "./OptionsNormalizer"; -import { ValidationErrorsFormatter } from "./ValidationErrorsFormatter"; +import { OptionsNormalizer } from './OptionsNormalizer'; +import { ValidationErrorsFormatter } from './ValidationErrorsFormatter'; export class Options implements IOptions { /** diff --git a/src/options/OptionsNormalizer.ts b/src/options/OptionsNormalizer.ts index 33dd7abb..356d67ff 100644 --- a/src/options/OptionsNormalizer.ts +++ b/src/options/OptionsNormalizer.ts @@ -1,9 +1,9 @@ -import { IObfuscatorOptions } from "../interfaces/IObfuscatorOptions"; -import { IOptions } from "../interfaces/IOptions"; +import { IObfuscatorOptions } from 'app/interfaces/IObfuscatorOptions'; +import { IOptions } from 'app/interfaces/IOptions'; -import { TOptionsNormalizerRule } from "../types/TOptionsNormalizerRule"; +import { TOptionsNormalizerRule } from 'app/types/TOptionsNormalizerRule'; -import { Utils } from "../Utils"; +import { Utils } from 'app/Utils'; export class OptionsNormalizer { /** diff --git a/src/preset-options/DefaultPreset.ts b/src/preset-options/DefaultPreset.ts index fd1f97c8..835c96f8 100644 --- a/src/preset-options/DefaultPreset.ts +++ b/src/preset-options/DefaultPreset.ts @@ -1,6 +1,6 @@ -import { IObfuscatorOptions } from "../interfaces/IObfuscatorOptions"; +import { IObfuscatorOptions } from 'app/interfaces/IObfuscatorOptions'; -import { SourceMapMode } from "../enums/SourceMapMode"; +import { SourceMapMode } from 'app/enums/SourceMapMode'; export const DEFAULT_PRESET: IObfuscatorOptions = Object.freeze({ compact: true, diff --git a/src/preset-options/NoCustomNodesPreset.ts b/src/preset-options/NoCustomNodesPreset.ts index faac40bc..841aebee 100644 --- a/src/preset-options/NoCustomNodesPreset.ts +++ b/src/preset-options/NoCustomNodesPreset.ts @@ -1,6 +1,6 @@ -import { IObfuscatorOptions } from "../interfaces/IObfuscatorOptions"; +import { IObfuscatorOptions } from 'app/interfaces/IObfuscatorOptions'; -import { SourceMapMode } from "../enums/SourceMapMode"; +import { SourceMapMode } from 'app/enums/SourceMapMode'; export const NO_CUSTOM_NODES_PRESET: IObfuscatorOptions = Object.freeze({ compact: true, diff --git a/src/templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate.ts b/src/templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate.ts index 8bf516f7..31ab722c 100644 --- a/src/templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate.ts +++ b/src/templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate.ts @@ -1,4 +1,4 @@ -import { Utils } from "../../../../Utils"; +import { Utils } from 'app/Utils'; /** * @returns {string} diff --git a/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts b/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts index 540c301e..ebd6c8cc 100644 --- a/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts +++ b/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts @@ -1,4 +1,4 @@ -import { Utils } from "../../../../Utils"; +import { Utils } from 'app/Utils'; export function SelfDefendingTemplate (): string { return ` diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate.ts index 059bbad9..562afa30 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate.ts @@ -1,4 +1,4 @@ -import { Utils } from "../../../../Utils"; +import { Utils } from 'app/Utils'; /** * @returns {string} diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate.ts index e12a9773..75f94182 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate.ts @@ -1,4 +1,4 @@ -import { Utils } from "../../../../Utils"; +import { Utils } from 'app/Utils'; /** * @returns {string} diff --git a/src/types/TNodeObfuscator.d.ts b/src/types/TNodeObfuscator.d.ts index 31b5d370..5783a97a 100644 --- a/src/types/TNodeObfuscator.d.ts +++ b/src/types/TNodeObfuscator.d.ts @@ -1,5 +1,5 @@ -import { ICustomNode } from "../interfaces/custom-nodes/ICustomNode"; -import { INodeObfuscator } from "../interfaces/INodeObfuscator"; -import { IOptions } from "../interfaces/IOptions"; +import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; +import { INodeObfuscator } from 'app/interfaces/INodeObfuscator'; +import { IOptions } from 'app/interfaces/IOptions'; export type TNodeObfuscator = (new (nodes: Map , options: IOptions) => INodeObfuscator); diff --git a/src/types/TOptionsNormalizerRule.d.ts b/src/types/TOptionsNormalizerRule.d.ts index 62a5c2ea..d54aaf20 100644 --- a/src/types/TOptionsNormalizerRule.d.ts +++ b/src/types/TOptionsNormalizerRule.d.ts @@ -1,3 +1,3 @@ -import { IOptions } from "../interfaces/IOptions"; +import { IOptions } from 'app/interfaces/IOptions'; export type TOptionsNormalizerRule = (options: IOptions) => IOptions; diff --git a/src/types/TSourceMapMode.d.ts b/src/types/TSourceMapMode.d.ts index ac3507b7..4843c677 100644 --- a/src/types/TSourceMapMode.d.ts +++ b/src/types/TSourceMapMode.d.ts @@ -1 +1 @@ -export type TSourceMapMode = 'inline' | 'separate'; +export type TSourceMapMode = 'inline'|'separate'; diff --git a/src/types/custom-nodes/TUnicodeArrayCallsWrapper.d.ts b/src/types/custom-nodes/TUnicodeArrayCallsWrapper.d.ts index 7b08e36d..66bdbe49 100644 --- a/src/types/custom-nodes/TUnicodeArrayCallsWrapper.d.ts +++ b/src/types/custom-nodes/TUnicodeArrayCallsWrapper.d.ts @@ -1,3 +1,3 @@ -import { ICustomNodeWithIdentifier } from "../../interfaces/custom-nodes/ICustomNodeWithIdentifier"; +import { ICustomNodeWithIdentifier } from 'app/interfaces/custom-nodes/ICustomNodeWithIdentifier'; export type TUnicodeArrayCallsWrapper = ICustomNodeWithIdentifier; diff --git a/src/types/custom-nodes/TUnicodeArrayNode.d.ts b/src/types/custom-nodes/TUnicodeArrayNode.d.ts index 6f241035..3d61f4f3 100644 --- a/src/types/custom-nodes/TUnicodeArrayNode.d.ts +++ b/src/types/custom-nodes/TUnicodeArrayNode.d.ts @@ -1,4 +1,4 @@ -import { ICustomNodeWithData } from "../../interfaces/custom-nodes/ICustomNodeWithData"; -import { ICustomNodeWithIdentifier } from "../../interfaces/custom-nodes/ICustomNodeWithIdentifier"; +import { ICustomNodeWithData } from 'app/interfaces/custom-nodes/ICustomNodeWithData'; +import { ICustomNodeWithIdentifier } from 'app/interfaces/custom-nodes/ICustomNodeWithIdentifier'; export type TUnicodeArrayNode = ICustomNodeWithData & ICustomNodeWithIdentifier; diff --git a/tsconfig-test.json b/tsconfig-test.json index 8950c65b..5546f6f7 100644 --- a/tsconfig-test.json +++ b/tsconfig-test.json @@ -10,20 +10,7 @@ "removeComments": true, "noImplicitAny": true, "strictNullChecks": true, - "noUnusedLocals": true, - "types": [ - "chai", - "chance", - "commander", - "escodegen", - "esprima", - "estraverse", - "joi", - "mkdirp", - "mocha", - "node", - "sinon" - ] + "noUnusedLocals": true }, "exclude": [ "node_modules" diff --git a/tsconfig.json b/tsconfig.json index 3866be34..a46c2ed7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "baseUrl": "./", "target": "ES6", "module": "commonjs", "sourceMap": true, @@ -9,18 +10,10 @@ "noImplicitAny": true, "strictNullChecks": true, "noUnusedLocals": true, - "types": [ - "chai", - "chance", - "commander", - "escodegen", - "esprima", - "estraverse", - "joi", - "mkdirp", - "mocha", - "node", - "sinon" - ] + "paths": { + "app/*": [ + "src/*" + ] + } } } \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index c8fb092e..3865a412 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,9 +1,10 @@ 'use strict'; -var fs = require("fs"), +var fs = require('fs'), + path = require('path'), nodeExternals = require('webpack-node-externals'), webpack = require('webpack'), - OptimizeJSPlugin = require('optimize-js-plugin'); + TsConfigPathsPlugin = require('awesome-typescript-loader').TsConfigPathsPlugin; function getLicenseText () { return "/*\nCopyright (C) 2016 Timofey Kachalov \n\n" + @@ -19,11 +20,21 @@ module.exports = { externals: [nodeExternals()], module: { loaders: [ - { test: /\.ts(x?)$/, loader: 'babel-loader!ts-loader' } + { + test: /\.ts(x?)$/, + loader: 'awesome-typescript-loader', + query: { + useBabel: true + } + } ] }, resolve: { - extensions: ['.ts'] + extensions: ['.ts'], + modules: ['node_modules', 'src'], + plugins: [ + new TsConfigPathsPlugin() + ] }, plugins: [ new webpack.BannerPlugin( @@ -32,10 +43,7 @@ module.exports = { raw: true, entryOnly: false } - ), - /*new OptimizeJSPlugin({ - sourceMap: true - })*/ + ) ], output: { path: './dist', From 857508f5320e7821e22c7bce7dae1fc3b11da23a Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 2 Oct 2016 14:55:11 +0300 Subject: [PATCH 051/138] removed `paths` support, because not supported by `ts-node` --- dist/index.js | 2 +- src/cli/CLIUtils.ts | 4 ++-- src/custom-nodes/AbstractCustomNode.ts | 6 ++--- .../ConsoleOutputDisableExpressionNode.ts | 10 ++++----- .../DebugProtectionFunctionCallNode.ts | 12 +++++----- .../DebugProtectionFunctionIntervalNode.ts | 12 +++++----- .../DebugProtectionFunctionNode.ts | 14 ++++++------ .../domain-lock-nodes/DomainLockNode.ts | 12 +++++----- .../SelfDefendingUnicodeNode.ts | 16 +++++++------- .../UnicodeArrayCallsWrapper.ts | 16 +++++++------- .../UnicodeArrayDecodeNode.ts | 22 +++++++++---------- .../unicode-array-nodes/UnicodeArrayNode.ts | 14 ++++++------ .../UnicodeArrayRotateFunctionNode.ts | 22 +++++++++---------- src/enums/NodeType.ts | 2 +- src/interfaces/IObfuscatorOptions.d.ts | 2 +- src/interfaces/custom-nodes/ICustomNode.d.ts | 2 +- src/node-groups/AbstractNodesGroup.ts | 6 ++--- src/node-groups/ConsoleOutputNodesGroup.ts | 4 ++-- src/node-groups/DebugProtectionNodesGroup.ts | 10 ++++----- src/node-groups/DomainLockNodesGroup.ts | 4 ++-- src/node-groups/SelfDefendingNodesGroup.ts | 4 ++-- src/node-groups/UnicodeArrayNodesGroup.ts | 14 ++++++------ .../AbstractNodeObfuscator.ts | 6 ++--- src/node-obfuscators/CatchClauseObfuscator.ts | 10 ++++----- .../FunctionDeclarationObfuscator.ts | 10 ++++----- src/node-obfuscators/FunctionObfuscator.ts | 10 ++++----- src/node-obfuscators/LiteralObfuscator.ts | 2 +- .../MemberExpressionObfuscator.ts | 4 ++-- .../MethodDefinitionObfuscator.ts | 4 ++-- .../ObjectExpressionObfuscator.ts | 6 ++--- .../VariableDeclarationObfuscator.ts | 10 ++++----- .../replacers/AbstractReplacer.ts | 6 ++--- .../replacers/BooleanLiteralReplacer.ts | 2 +- .../replacers/IdentifierReplacer.ts | 2 +- .../replacers/NumberLiteralReplacer.ts | 2 +- .../replacers/StringLiteralReplacer.ts | 8 +++---- src/options/Options.ts | 8 +++---- src/options/OptionsNormalizer.ts | 8 +++---- src/preset-options/DefaultPreset.ts | 4 ++-- src/preset-options/NoCustomNodesPreset.ts | 4 ++-- .../DebugProtectionFunctionTemplate.ts | 2 +- .../SelfDefendingTemplate.ts | 2 +- .../SelfDefendingTemplate.ts | 2 +- .../SelfDefendingTemplate.ts | 2 +- src/types/TNodeObfuscator.d.ts | 6 ++--- src/types/TOptionsNormalizerRule.d.ts | 2 +- src/types/TSourceMapMode.d.ts | 2 +- .../TUnicodeArrayCallsWrapper.d.ts | 2 +- src/types/custom-nodes/TUnicodeArrayNode.d.ts | 4 ++-- .../JavaScriptObfuscator.spec.ts | 6 ++--- .../JavaScriptObfuscatorCLI.spec.ts | 4 ++-- .../JavaScriptObfuscatorInternal.spec.ts | 6 ++--- ...ConsoleOutputDisableExpressionNode.spec.ts | 4 ++-- .../domain-lock-nodes/DomainLockNode.spec.ts | 4 ++-- .../UnicodeArrayCallsWrapper.spec.ts | 4 ++-- .../UnicodeArrayDecodeNode.spec.ts | 4 ++-- .../UnicodeArrayNode.spec.ts | 4 ++-- .../UnicodeArrayRotateFunctionNode.spec.ts | 4 ++-- .../FunctionObfuscator.spec.ts | 6 ++--- .../LiteralObfuscator.spec.ts | 6 ++--- .../MemberExpressionObfuscator.spec.ts | 6 ++--- .../MethodDefinitionObfuscator.spec.ts | 6 ++--- .../ObjectExpressionObfuscator.spec.ts | 6 ++--- .../VariableDeclarationObfuscator.spec.ts | 6 ++--- .../DomainLockNodeTemplate.spec.ts | 4 ++-- .../UnicodeArrayDecodeNodeTemplate.spec.ts | 6 ++--- test/mocks/NodeMocks.ts | 2 +- test/unit-tests/ObfuscationResult.spec.ts | 4 ++-- test/unit-tests/OptionsNormalizer.spec.ts | 6 ++--- test/unit-tests/SourceMapCorrector.spec.ts | 12 +++++----- .../CatchClauseObfuscator.spec.ts | 10 ++++----- .../FunctionDeclarationObfuscator.spec.ts | 8 +++---- .../FunctionObfuscator.spec.ts | 10 ++++----- tsconfig.json | 8 +------ webpack.config.js | 12 +++------- 75 files changed, 243 insertions(+), 255 deletions(-) diff --git a/dist/index.js b/dist/index.js index 0d56482b..b0dfd70e 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3153,7 +3153,7 @@ 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__(71); -var TSourceMapMode_1 = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"app/types/TSourceMapMode\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); +var TSourceMapMode_1 = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"../types/TSourceMapMode\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); var DefaultPreset_1 = __webpack_require__(20); var OptionsNormalizer_1 = __webpack_require__(55); var ValidationErrorsFormatter_1 = __webpack_require__(56); diff --git a/src/cli/CLIUtils.ts b/src/cli/CLIUtils.ts index e241a778..12caa909 100644 --- a/src/cli/CLIUtils.ts +++ b/src/cli/CLIUtils.ts @@ -2,9 +2,9 @@ import * as fs from 'fs'; import * as mkdirp from 'mkdirp'; import * as path from 'path'; -import { IPackageConfig } from 'app/interfaces/IPackageConfig'; +import { IPackageConfig } from '../interfaces/IPackageConfig'; -import { Utils } from 'app/Utils'; +import { Utils } from '../Utils'; export class CLIUtils { /** diff --git a/src/custom-nodes/AbstractCustomNode.ts b/src/custom-nodes/AbstractCustomNode.ts index 012b6693..b3b052b0 100644 --- a/src/custom-nodes/AbstractCustomNode.ts +++ b/src/custom-nodes/AbstractCustomNode.ts @@ -1,9 +1,9 @@ import * as ESTree from 'estree'; -import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; -import { IOptions } from 'app/interfaces/IOptions'; +import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../interfaces/IOptions'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../enums/AppendState'; export abstract class AbstractCustomNode implements ICustomNode { /** diff --git a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts index e8fba09a..9083ba11 100644 --- a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts +++ b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts @@ -1,13 +1,13 @@ import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../../enums/AppendState'; -import { ConsoleOutputDisableExpressionTemplate } from 'app/templates/custom-nodes/console-output-nodes/console-output-disable-expression-node/ConsoleOutputDisableExpressionTemplate'; +import { ConsoleOutputDisableExpressionTemplate } from '../../templates/custom-nodes/console-output-nodes/console-output-disable-expression-node/ConsoleOutputDisableExpressionTemplate'; -import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; -import { NodeUtils } from 'app/NodeUtils'; +import { AbstractCustomNode } from '../AbstractCustomNode'; +import { NodeUtils } from '../../NodeUtils'; export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts index dcbef3ba..c6d3a334 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode.ts @@ -2,16 +2,16 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../../interfaces/IOptions'; -import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../../enums/AppendState'; -import { DebugProtectionFunctionCallTemplate } from 'app/templates/custom-nodes/debug-protection-nodes/debug-protection-function-call-node/DebufProtectionFunctionCallTemplate'; +import { DebugProtectionFunctionCallTemplate } from '../../templates/custom-nodes/debug-protection-nodes/debug-protection-function-call-node/DebufProtectionFunctionCallTemplate'; -import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; -import { NodeUtils } from 'app/NodeUtils'; +import { AbstractCustomNode } from '../AbstractCustomNode'; +import { NodeUtils } from '../../NodeUtils'; export class DebugProtectionFunctionCallNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts index 9144b935..fde8352b 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode.ts @@ -2,16 +2,16 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../../interfaces/IOptions'; -import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../../enums/AppendState'; -import { DebugProtectionFunctionIntervalTemplate } from 'app/templates/custom-nodes/debug-protection-nodes/debug-protection-function-interval-node/DebugProtectionFunctionIntervalTemplate'; +import { DebugProtectionFunctionIntervalTemplate } from '../../templates/custom-nodes/debug-protection-nodes/debug-protection-function-interval-node/DebugProtectionFunctionIntervalTemplate'; -import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; -import { NodeUtils } from 'app/NodeUtils'; +import { AbstractCustomNode } from '../AbstractCustomNode'; +import { NodeUtils } from '../../NodeUtils'; export class DebugProtectionFunctionIntervalNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts index 2e1ff017..86e91b04 100644 --- a/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts +++ b/src/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode.ts @@ -2,17 +2,17 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../../interfaces/IOptions'; -import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../../enums/AppendState'; -import { DebugProtectionFunctionTemplate } from 'app/templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate'; +import { DebugProtectionFunctionTemplate } from '../../templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate'; -import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; -import { NodeUtils } from 'app/NodeUtils'; -import { Utils } from 'app/Utils'; +import { AbstractCustomNode } from '../AbstractCustomNode'; +import { NodeUtils } from '../../NodeUtils'; +import { Utils } from '../../Utils'; export class DebugProtectionFunctionNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts index ef2f2de2..c95555f7 100644 --- a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -2,15 +2,15 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../../enums/AppendState'; -import { DomainLockNodeTemplate } from 'app/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate'; +import { DomainLockNodeTemplate } from '../../templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate'; -import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; -import { NodeUtils } from 'app/NodeUtils'; -import { Utils } from 'app/Utils'; +import { AbstractCustomNode } from '../AbstractCustomNode'; +import { NodeUtils } from '../../NodeUtils'; +import { Utils } from '../../Utils'; export class DomainLockNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index dc714d50..4cbea66c 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts @@ -1,17 +1,17 @@ import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../../enums/AppendState'; -import { NO_CUSTOM_NODES_PRESET } from 'app/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; -import { SelfDefendingTemplate } from 'app/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate'; +import { SelfDefendingTemplate } from '../../templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate'; -import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; -import { JavaScriptObfuscator } from 'app/JavaScriptObfuscator'; -import { NodeUtils } from 'app/NodeUtils'; -import { Utils } from 'app/Utils'; +import { AbstractCustomNode } from '../AbstractCustomNode'; +import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; +import { NodeUtils } from '../../NodeUtils'; +import { Utils } from '../../Utils'; export class SelfDefendingUnicodeNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts index d03ec513..dc893eda 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts @@ -2,18 +2,18 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../../interfaces/IOptions'; -import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../../enums/AppendState'; -import { UnicodeArrayCallsWrapperTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate'; +import { UnicodeArrayCallsWrapperTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate'; -import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; -import { NodeUtils } from 'app/NodeUtils'; -import { UnicodeArray } from 'app/UnicodeArray'; -import { Utils } from 'app/Utils'; +import { AbstractCustomNode } from '../AbstractCustomNode'; +import { NodeUtils } from '../../NodeUtils'; +import { UnicodeArray } from '../../UnicodeArray'; +import { Utils } from '../../Utils'; export class UnicodeArrayCallsWrapper extends AbstractCustomNode { /** diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts index ad6eb334..07938a48 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts @@ -2,22 +2,22 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../../interfaces/IOptions'; -import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../../enums/AppendState'; -import { NO_CUSTOM_NODES_PRESET } from 'app/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; -import { AtobTemplate } from 'app/templates/custom-nodes/AtobTemplate'; -import { SelfDefendingTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate'; -import { UnicodeArrayDecodeNodeTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate'; +import { AtobTemplate } from '../../templates/custom-nodes/AtobTemplate'; +import { SelfDefendingTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate'; +import { UnicodeArrayDecodeNodeTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate'; -import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; -import { JavaScriptObfuscator } from 'app/JavaScriptObfuscator'; -import { NodeUtils } from 'app/NodeUtils'; -import { UnicodeArray } from 'app/UnicodeArray'; +import { AbstractCustomNode } from '../AbstractCustomNode'; +import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; +import { NodeUtils } from '../../NodeUtils'; +import { UnicodeArray } from '../../UnicodeArray'; export class UnicodeArrayDecodeNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts index 374250c2..49b44f42 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayNode.ts @@ -2,18 +2,18 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../../interfaces/IOptions'; -import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../../enums/AppendState'; -import { UnicodeArray } from 'app/UnicodeArray'; +import { UnicodeArray } from '../../UnicodeArray'; -import { UnicodeArrayTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-node/UnicodeArrayTemplate'; +import { UnicodeArrayTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-node/UnicodeArrayTemplate'; -import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; -import { NodeUtils } from 'app/NodeUtils'; +import { AbstractCustomNode } from '../AbstractCustomNode'; +import { NodeUtils } from '../../NodeUtils'; export class UnicodeArrayNode extends AbstractCustomNode { /** diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts index 4d0b5c12..a46dfccb 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts @@ -2,22 +2,22 @@ import * as ESTree from 'estree'; import 'format-unicorn'; -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../../interfaces/IOptions'; -import { TNodeWithBlockStatement } from 'app/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../../enums/AppendState'; -import { NO_CUSTOM_NODES_PRESET } from 'app/preset-options/NoCustomNodesPreset'; +import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; -import { SelfDefendingTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate'; -import { UnicodeArrayRotateFunctionTemplate } from 'app/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/UnicodeArrayRotateFunctionTemplate'; +import { SelfDefendingTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate'; +import { UnicodeArrayRotateFunctionTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/UnicodeArrayRotateFunctionTemplate'; -import { AbstractCustomNode } from 'app/custom-nodes/AbstractCustomNode'; -import { JavaScriptObfuscator } from 'app/JavaScriptObfuscator'; -import { NodeUtils } from 'app/NodeUtils'; -import { UnicodeArray } from 'app/UnicodeArray'; -import { Utils } from 'app/Utils'; +import { AbstractCustomNode } from '../AbstractCustomNode'; +import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; +import { NodeUtils } from '../../NodeUtils'; +import { UnicodeArray } from '../../UnicodeArray'; +import { Utils } from '../../Utils'; export class UnicodeArrayRotateFunctionNode extends AbstractCustomNode { /** diff --git a/src/enums/NodeType.ts b/src/enums/NodeType.ts index 40c966e6..6f3df5e6 100644 --- a/src/enums/NodeType.ts +++ b/src/enums/NodeType.ts @@ -1,4 +1,4 @@ -import { Utils } from 'app/Utils'; +import { Utils } from '../Utils'; export const NodeType: any = Utils.strEnumify({ ArrayExpression: 'ArrayExpression', diff --git a/src/interfaces/IObfuscatorOptions.d.ts b/src/interfaces/IObfuscatorOptions.d.ts index 1c2fe9e4..a1baf8ff 100644 --- a/src/interfaces/IObfuscatorOptions.d.ts +++ b/src/interfaces/IObfuscatorOptions.d.ts @@ -1,4 +1,4 @@ -import { TSourceMapMode } from 'app/types/TSourceMapMode'; +import { TSourceMapMode } from '../types/TSourceMapMode'; export interface IObfuscatorOptions { compact?: boolean; diff --git a/src/interfaces/custom-nodes/ICustomNode.d.ts b/src/interfaces/custom-nodes/ICustomNode.d.ts index 8a04d3c1..b9c70ace 100644 --- a/src/interfaces/custom-nodes/ICustomNode.d.ts +++ b/src/interfaces/custom-nodes/ICustomNode.d.ts @@ -1,6 +1,6 @@ import * as ESTree from 'estree'; -import { AppendState } from 'app/enums/AppendState'; +import { AppendState } from '../../enums/AppendState'; export interface ICustomNode { /** diff --git a/src/node-groups/AbstractNodesGroup.ts b/src/node-groups/AbstractNodesGroup.ts index 54b2418e..c5c1cfa4 100644 --- a/src/node-groups/AbstractNodesGroup.ts +++ b/src/node-groups/AbstractNodesGroup.ts @@ -1,7 +1,7 @@ -import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; +import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; -import { INodesGroup } from 'app/interfaces/INodesGroup'; -import { IOptions } from 'app/interfaces/IOptions'; +import { INodesGroup } from '../interfaces/INodesGroup'; +import { IOptions } from '../interfaces/IOptions'; export abstract class AbstractNodesGroup implements INodesGroup { /** diff --git a/src/node-groups/ConsoleOutputNodesGroup.ts b/src/node-groups/ConsoleOutputNodesGroup.ts index 33f81447..13fcf4dc 100644 --- a/src/node-groups/ConsoleOutputNodesGroup.ts +++ b/src/node-groups/ConsoleOutputNodesGroup.ts @@ -1,7 +1,7 @@ -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../interfaces/IOptions'; import { AbstractNodesGroup } from './AbstractNodesGroup'; -import { ConsoleOutputDisableExpressionNode } from 'app/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode'; +import { ConsoleOutputDisableExpressionNode } from '../custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode'; export class ConsoleOutputNodesGroup extends AbstractNodesGroup { /** diff --git a/src/node-groups/DebugProtectionNodesGroup.ts b/src/node-groups/DebugProtectionNodesGroup.ts index 6c3ea520..311ba49f 100644 --- a/src/node-groups/DebugProtectionNodesGroup.ts +++ b/src/node-groups/DebugProtectionNodesGroup.ts @@ -1,11 +1,11 @@ -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../interfaces/IOptions'; -import { DebugProtectionFunctionCallNode } from 'app/custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode'; -import { DebugProtectionFunctionIntervalNode } from 'app/custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode'; -import { DebugProtectionFunctionNode } from 'app/custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode'; +import { DebugProtectionFunctionCallNode } from '../custom-nodes/debug-protection-nodes/DebugProtectionFunctionCallNode'; +import { DebugProtectionFunctionIntervalNode } from '../custom-nodes/debug-protection-nodes/DebugProtectionFunctionIntervalNode'; +import { DebugProtectionFunctionNode } from '../custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode'; import { AbstractNodesGroup } from './AbstractNodesGroup'; -import { Utils } from 'app/Utils'; +import { Utils } from '../Utils'; export class DebugProtectionNodesGroup extends AbstractNodesGroup { /** diff --git a/src/node-groups/DomainLockNodesGroup.ts b/src/node-groups/DomainLockNodesGroup.ts index 2f110e1c..bed745aa 100644 --- a/src/node-groups/DomainLockNodesGroup.ts +++ b/src/node-groups/DomainLockNodesGroup.ts @@ -1,7 +1,7 @@ -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../interfaces/IOptions'; import { AbstractNodesGroup } from './AbstractNodesGroup'; -import { DomainLockNode } from 'app/custom-nodes/domain-lock-nodes/DomainLockNode'; +import { DomainLockNode } from '../custom-nodes/domain-lock-nodes/DomainLockNode'; export class DomainLockNodesGroup extends AbstractNodesGroup { /** diff --git a/src/node-groups/SelfDefendingNodesGroup.ts b/src/node-groups/SelfDefendingNodesGroup.ts index 9793211e..213cd55d 100644 --- a/src/node-groups/SelfDefendingNodesGroup.ts +++ b/src/node-groups/SelfDefendingNodesGroup.ts @@ -1,7 +1,7 @@ -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../interfaces/IOptions'; import { AbstractNodesGroup } from './AbstractNodesGroup'; -import { SelfDefendingUnicodeNode } from 'app/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode'; +import { SelfDefendingUnicodeNode } from '../custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode'; export class SelfDefendingNodesGroup extends AbstractNodesGroup { /** diff --git a/src/node-groups/UnicodeArrayNodesGroup.ts b/src/node-groups/UnicodeArrayNodesGroup.ts index 9a21af5e..9d887e0d 100644 --- a/src/node-groups/UnicodeArrayNodesGroup.ts +++ b/src/node-groups/UnicodeArrayNodesGroup.ts @@ -1,12 +1,12 @@ -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../interfaces/IOptions'; import { AbstractNodesGroup } from './AbstractNodesGroup'; -import { UnicodeArray } from 'app/UnicodeArray'; -import { UnicodeArrayCallsWrapper } from 'app/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper'; -import { UnicodeArrayDecodeNode } from 'app/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode'; -import { UnicodeArrayNode } from 'app/custom-nodes/unicode-array-nodes/UnicodeArrayNode'; -import { UnicodeArrayRotateFunctionNode } from 'app/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode'; -import { Utils } from 'app/Utils'; +import { UnicodeArray } from '../UnicodeArray'; +import { UnicodeArrayCallsWrapper } from '../custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper'; +import { UnicodeArrayDecodeNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode'; +import { UnicodeArrayNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayNode'; +import { UnicodeArrayRotateFunctionNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode'; +import { Utils } from '../Utils'; export class UnicodeArrayNodesGroup extends AbstractNodesGroup { /** diff --git a/src/node-obfuscators/AbstractNodeObfuscator.ts b/src/node-obfuscators/AbstractNodeObfuscator.ts index 12e0f9c2..c5eed01c 100644 --- a/src/node-obfuscators/AbstractNodeObfuscator.ts +++ b/src/node-obfuscators/AbstractNodeObfuscator.ts @@ -1,8 +1,8 @@ import * as ESTree from 'estree'; -import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; -import { INodeObfuscator } from 'app/interfaces/INodeObfuscator'; -import { IOptions } from 'app/interfaces/IOptions'; +import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; +import { INodeObfuscator } from '../interfaces/INodeObfuscator'; +import { IOptions } from '../interfaces/IOptions'; export abstract class AbstractNodeObfuscator implements INodeObfuscator { /** diff --git a/src/node-obfuscators/CatchClauseObfuscator.ts b/src/node-obfuscators/CatchClauseObfuscator.ts index 5cc3f227..9e839d9b 100644 --- a/src/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-obfuscators/CatchClauseObfuscator.ts @@ -1,15 +1,15 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; -import { IOptions } from 'app/interfaces/IOptions'; +import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../interfaces/IOptions'; -import { NodeType } from 'app/enums/NodeType'; +import { NodeType } from '../enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { IdentifierReplacer } from './replacers/IdentifierReplacer'; -import { Nodes } from 'app/Nodes'; -import { NodeUtils } from 'app/NodeUtils'; +import { Nodes } from '../Nodes'; +import { NodeUtils } from '../NodeUtils'; /** * replaces: diff --git a/src/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-obfuscators/FunctionDeclarationObfuscator.ts index 05ef0c13..70df73f9 100644 --- a/src/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -1,15 +1,15 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; -import { IOptions } from 'app/interfaces/IOptions'; +import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../interfaces/IOptions'; -import { NodeType } from 'app/enums/NodeType'; +import { NodeType } from '../enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { IdentifierReplacer } from './replacers/IdentifierReplacer'; -import { Nodes } from 'app/Nodes'; -import { NodeUtils } from 'app/NodeUtils'; +import { Nodes } from '../Nodes'; +import { NodeUtils } from '../NodeUtils'; /** * replaces: diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index 4372dd42..634a98c7 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -1,15 +1,15 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; -import { IOptions } from 'app/interfaces/IOptions'; +import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../interfaces/IOptions'; -import { NodeType } from 'app/enums/NodeType'; +import { NodeType } from '../enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { IdentifierReplacer } from './replacers/IdentifierReplacer'; -import { Nodes } from 'app/Nodes'; -import { NodeUtils } from 'app/NodeUtils'; +import { Nodes } from '../Nodes'; +import { NodeUtils } from '../NodeUtils'; /** * replaces: diff --git a/src/node-obfuscators/LiteralObfuscator.ts b/src/node-obfuscators/LiteralObfuscator.ts index 819eeeaf..8a89ecda 100644 --- a/src/node-obfuscators/LiteralObfuscator.ts +++ b/src/node-obfuscators/LiteralObfuscator.ts @@ -3,7 +3,7 @@ import * as ESTree from 'estree'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { BooleanLiteralReplacer } from './replacers/BooleanLiteralReplacer'; -import { Nodes } from 'app/Nodes'; +import { Nodes } from '../Nodes'; import { NumberLiteralReplacer } from './replacers/NumberLiteralReplacer'; import { StringLiteralReplacer } from './replacers/StringLiteralReplacer'; diff --git a/src/node-obfuscators/MemberExpressionObfuscator.ts b/src/node-obfuscators/MemberExpressionObfuscator.ts index 9b5c3c40..dc028b32 100644 --- a/src/node-obfuscators/MemberExpressionObfuscator.ts +++ b/src/node-obfuscators/MemberExpressionObfuscator.ts @@ -2,10 +2,10 @@ import * as escodegen from 'escodegen'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { NodeType } from 'app/enums/NodeType'; +import { NodeType } from '../enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; -import { Nodes } from 'app/Nodes'; +import { Nodes } from '../Nodes'; import { StringLiteralReplacer } from './replacers/StringLiteralReplacer'; export class MemberExpressionObfuscator extends AbstractNodeObfuscator { diff --git a/src/node-obfuscators/MethodDefinitionObfuscator.ts b/src/node-obfuscators/MethodDefinitionObfuscator.ts index b1c73e17..bee963ef 100644 --- a/src/node-obfuscators/MethodDefinitionObfuscator.ts +++ b/src/node-obfuscators/MethodDefinitionObfuscator.ts @@ -2,8 +2,8 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; -import { Nodes } from 'app/Nodes'; -import { Utils } from 'app/Utils'; +import { Nodes } from '../Nodes'; +import { Utils } from '../Utils'; import { StringLiteralReplacer } from './replacers/StringLiteralReplacer'; /** diff --git a/src/node-obfuscators/ObjectExpressionObfuscator.ts b/src/node-obfuscators/ObjectExpressionObfuscator.ts index 8053ad7f..0ba6af5b 100644 --- a/src/node-obfuscators/ObjectExpressionObfuscator.ts +++ b/src/node-obfuscators/ObjectExpressionObfuscator.ts @@ -2,11 +2,11 @@ import * as escodegen from 'escodegen'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { NodeType } from 'app/enums/NodeType'; +import { NodeType } from '../enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; -import { Nodes } from 'app/Nodes'; -import { Utils } from 'app/Utils'; +import { Nodes } from '../Nodes'; +import { Utils } from '../Utils'; /** * replaces: diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index ddfa419c..3ed28142 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -1,15 +1,15 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; -import { IOptions } from 'app/interfaces/IOptions'; +import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../interfaces/IOptions'; -import { NodeType } from 'app/enums/NodeType'; +import { NodeType } from '../enums/NodeType'; import { AbstractNodeObfuscator } from './AbstractNodeObfuscator'; import { IdentifierReplacer } from './replacers/IdentifierReplacer'; -import { Nodes } from 'app/Nodes'; -import { NodeUtils } from 'app/NodeUtils'; +import { Nodes } from '../Nodes'; +import { NodeUtils } from '../NodeUtils'; /** * replaces: diff --git a/src/node-obfuscators/replacers/AbstractReplacer.ts b/src/node-obfuscators/replacers/AbstractReplacer.ts index 2ea6984e..09bc1980 100644 --- a/src/node-obfuscators/replacers/AbstractReplacer.ts +++ b/src/node-obfuscators/replacers/AbstractReplacer.ts @@ -1,6 +1,6 @@ -import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; -import { IOptions } from 'app/interfaces/IOptions'; -import { IReplacer } from 'app/interfaces/IReplacer'; +import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../../interfaces/IOptions'; +import { IReplacer } from '../../interfaces/IReplacer'; export abstract class AbstractReplacer implements IReplacer { /** diff --git a/src/node-obfuscators/replacers/BooleanLiteralReplacer.ts b/src/node-obfuscators/replacers/BooleanLiteralReplacer.ts index 3e9224d8..30d98218 100644 --- a/src/node-obfuscators/replacers/BooleanLiteralReplacer.ts +++ b/src/node-obfuscators/replacers/BooleanLiteralReplacer.ts @@ -1,4 +1,4 @@ -import { JSFuck } from 'app/enums/JSFuck'; +import { JSFuck } from '../../enums/JSFuck'; import { AbstractReplacer } from './AbstractReplacer'; diff --git a/src/node-obfuscators/replacers/IdentifierReplacer.ts b/src/node-obfuscators/replacers/IdentifierReplacer.ts index c34204a2..3cf97ade 100644 --- a/src/node-obfuscators/replacers/IdentifierReplacer.ts +++ b/src/node-obfuscators/replacers/IdentifierReplacer.ts @@ -1,5 +1,5 @@ import { AbstractReplacer } from './AbstractReplacer'; -import { Utils } from 'app/Utils'; +import { Utils } from '../../Utils'; export class IdentifierReplacer extends AbstractReplacer { /** diff --git a/src/node-obfuscators/replacers/NumberLiteralReplacer.ts b/src/node-obfuscators/replacers/NumberLiteralReplacer.ts index badcd1da..3daa2ae4 100644 --- a/src/node-obfuscators/replacers/NumberLiteralReplacer.ts +++ b/src/node-obfuscators/replacers/NumberLiteralReplacer.ts @@ -1,5 +1,5 @@ import { AbstractReplacer } from './AbstractReplacer'; -import { Utils } from 'app/Utils'; +import { Utils } from '../../Utils'; export class NumberLiteralReplacer extends AbstractReplacer { /** diff --git a/src/node-obfuscators/replacers/StringLiteralReplacer.ts b/src/node-obfuscators/replacers/StringLiteralReplacer.ts index 2f69d7a4..8031e333 100644 --- a/src/node-obfuscators/replacers/StringLiteralReplacer.ts +++ b/src/node-obfuscators/replacers/StringLiteralReplacer.ts @@ -1,10 +1,10 @@ -import { TUnicodeArrayCallsWrapper } from 'app/types/custom-nodes/TUnicodeArrayCallsWrapper'; -import { TUnicodeArrayNode } from 'app/types/custom-nodes/TUnicodeArrayNode'; +import { TUnicodeArrayCallsWrapper } from '../../types/custom-nodes/TUnicodeArrayCallsWrapper'; +import { TUnicodeArrayNode } from '../../types/custom-nodes/TUnicodeArrayNode'; import { AbstractReplacer } from './AbstractReplacer'; import { NumberLiteralReplacer } from './NumberLiteralReplacer'; -import { UnicodeArray } from 'app/UnicodeArray'; -import { Utils } from 'app/Utils'; +import { UnicodeArray } from '../../UnicodeArray'; +import { Utils } from '../../Utils'; export class StringLiteralReplacer extends AbstractReplacer { /** diff --git a/src/options/Options.ts b/src/options/Options.ts index 2004dce3..4ba0bb3f 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -14,12 +14,12 @@ import { ValidatorOptions } from 'class-validator'; -import { IObfuscatorOptions } from 'app/interfaces/IObfuscatorOptions'; -import { IOptions } from 'app/interfaces/IOptions'; +import { IObfuscatorOptions } from '../interfaces/IObfuscatorOptions'; +import { IOptions } from '../interfaces/IOptions'; -import { TSourceMapMode } from 'app/types/TSourceMapMode'; +import { TSourceMapMode } from '../types/TSourceMapMode'; -import { DEFAULT_PRESET } from 'app/preset-options/DefaultPreset'; +import { DEFAULT_PRESET } from '../preset-options/DefaultPreset'; import { OptionsNormalizer } from './OptionsNormalizer'; import { ValidationErrorsFormatter } from './ValidationErrorsFormatter'; diff --git a/src/options/OptionsNormalizer.ts b/src/options/OptionsNormalizer.ts index 356d67ff..f58d89fb 100644 --- a/src/options/OptionsNormalizer.ts +++ b/src/options/OptionsNormalizer.ts @@ -1,9 +1,9 @@ -import { IObfuscatorOptions } from 'app/interfaces/IObfuscatorOptions'; -import { IOptions } from 'app/interfaces/IOptions'; +import { IObfuscatorOptions } from '../interfaces/IObfuscatorOptions'; +import { IOptions } from '../interfaces/IOptions'; -import { TOptionsNormalizerRule } from 'app/types/TOptionsNormalizerRule'; +import { TOptionsNormalizerRule } from '../types/TOptionsNormalizerRule'; -import { Utils } from 'app/Utils'; +import { Utils } from '../Utils'; export class OptionsNormalizer { /** diff --git a/src/preset-options/DefaultPreset.ts b/src/preset-options/DefaultPreset.ts index 835c96f8..6cc94e57 100644 --- a/src/preset-options/DefaultPreset.ts +++ b/src/preset-options/DefaultPreset.ts @@ -1,6 +1,6 @@ -import { IObfuscatorOptions } from 'app/interfaces/IObfuscatorOptions'; +import { IObfuscatorOptions } from '../interfaces/IObfuscatorOptions'; -import { SourceMapMode } from 'app/enums/SourceMapMode'; +import { SourceMapMode } from '../enums/SourceMapMode'; export const DEFAULT_PRESET: IObfuscatorOptions = Object.freeze({ compact: true, diff --git a/src/preset-options/NoCustomNodesPreset.ts b/src/preset-options/NoCustomNodesPreset.ts index 841aebee..82bddd2a 100644 --- a/src/preset-options/NoCustomNodesPreset.ts +++ b/src/preset-options/NoCustomNodesPreset.ts @@ -1,6 +1,6 @@ -import { IObfuscatorOptions } from 'app/interfaces/IObfuscatorOptions'; +import { IObfuscatorOptions } from '../interfaces/IObfuscatorOptions'; -import { SourceMapMode } from 'app/enums/SourceMapMode'; +import { SourceMapMode } from '../enums/SourceMapMode'; export const NO_CUSTOM_NODES_PRESET: IObfuscatorOptions = Object.freeze({ compact: true, diff --git a/src/templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate.ts b/src/templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate.ts index 31ab722c..4a8627a3 100644 --- a/src/templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate.ts +++ b/src/templates/custom-nodes/debug-protection-nodes/debug-protection-function-node/DebugProtectionFunctionTemplate.ts @@ -1,4 +1,4 @@ -import { Utils } from 'app/Utils'; +import { Utils } from '../../../../Utils'; /** * @returns {string} diff --git a/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts b/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts index ebd6c8cc..0fd22449 100644 --- a/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts +++ b/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts @@ -1,4 +1,4 @@ -import { Utils } from 'app/Utils'; +import { Utils } from '../../../../Utils'; export function SelfDefendingTemplate (): string { return ` diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate.ts index 562afa30..b0fb4690 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate.ts @@ -1,4 +1,4 @@ -import { Utils } from 'app/Utils'; +import { Utils } from '../../../../Utils'; /** * @returns {string} diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate.ts index 75f94182..7f674dde 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-rotate-function-node/SelfDefendingTemplate.ts @@ -1,4 +1,4 @@ -import { Utils } from 'app/Utils'; +import { Utils } from '../../../../Utils'; /** * @returns {string} diff --git a/src/types/TNodeObfuscator.d.ts b/src/types/TNodeObfuscator.d.ts index 5783a97a..08e4cb6f 100644 --- a/src/types/TNodeObfuscator.d.ts +++ b/src/types/TNodeObfuscator.d.ts @@ -1,5 +1,5 @@ -import { ICustomNode } from 'app/interfaces/custom-nodes/ICustomNode'; -import { INodeObfuscator } from 'app/interfaces/INodeObfuscator'; -import { IOptions } from 'app/interfaces/IOptions'; +import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; +import { INodeObfuscator } from '../interfaces/INodeObfuscator'; +import { IOptions } from '../interfaces/IOptions'; export type TNodeObfuscator = (new (nodes: Map , options: IOptions) => INodeObfuscator); diff --git a/src/types/TOptionsNormalizerRule.d.ts b/src/types/TOptionsNormalizerRule.d.ts index d54aaf20..7b5ff938 100644 --- a/src/types/TOptionsNormalizerRule.d.ts +++ b/src/types/TOptionsNormalizerRule.d.ts @@ -1,3 +1,3 @@ -import { IOptions } from 'app/interfaces/IOptions'; +import { IOptions } from '../interfaces/IOptions'; export type TOptionsNormalizerRule = (options: IOptions) => IOptions; diff --git a/src/types/TSourceMapMode.d.ts b/src/types/TSourceMapMode.d.ts index 4843c677..ac3507b7 100644 --- a/src/types/TSourceMapMode.d.ts +++ b/src/types/TSourceMapMode.d.ts @@ -1 +1 @@ -export type TSourceMapMode = 'inline'|'separate'; +export type TSourceMapMode = 'inline' | 'separate'; diff --git a/src/types/custom-nodes/TUnicodeArrayCallsWrapper.d.ts b/src/types/custom-nodes/TUnicodeArrayCallsWrapper.d.ts index 66bdbe49..a6a677b1 100644 --- a/src/types/custom-nodes/TUnicodeArrayCallsWrapper.d.ts +++ b/src/types/custom-nodes/TUnicodeArrayCallsWrapper.d.ts @@ -1,3 +1,3 @@ -import { ICustomNodeWithIdentifier } from 'app/interfaces/custom-nodes/ICustomNodeWithIdentifier'; +import { ICustomNodeWithIdentifier } from '../../interfaces/custom-nodes/ICustomNodeWithIdentifier'; export type TUnicodeArrayCallsWrapper = ICustomNodeWithIdentifier; diff --git a/src/types/custom-nodes/TUnicodeArrayNode.d.ts b/src/types/custom-nodes/TUnicodeArrayNode.d.ts index 3d61f4f3..2827ffc3 100644 --- a/src/types/custom-nodes/TUnicodeArrayNode.d.ts +++ b/src/types/custom-nodes/TUnicodeArrayNode.d.ts @@ -1,4 +1,4 @@ -import { ICustomNodeWithData } from 'app/interfaces/custom-nodes/ICustomNodeWithData'; -import { ICustomNodeWithIdentifier } from 'app/interfaces/custom-nodes/ICustomNodeWithIdentifier'; +import { ICustomNodeWithData } from '../../interfaces/custom-nodes/ICustomNodeWithData'; +import { ICustomNodeWithIdentifier } from '../../interfaces/custom-nodes/ICustomNodeWithIdentifier'; export type TUnicodeArrayNode = ICustomNodeWithData & ICustomNodeWithIdentifier; diff --git a/test/functional-tests/JavaScriptObfuscator.spec.ts b/test/functional-tests/JavaScriptObfuscator.spec.ts index ea8bd591..f4c6aabd 100644 --- a/test/functional-tests/JavaScriptObfuscator.spec.ts +++ b/test/functional-tests/JavaScriptObfuscator.spec.ts @@ -1,8 +1,8 @@ -import { IObfuscationResult } from "../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../src/interfaces/IObfuscationResult'; -import { JavaScriptObfuscator } from "../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../src/JavaScriptObfuscator'; -import { NO_CUSTOM_NODES_PRESET } from "../../src/preset-options/NoCustomNodesPreset"; +import { NO_CUSTOM_NODES_PRESET } from '../../src/preset-options/NoCustomNodesPreset'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts b/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts index b532f5bb..97cb8da3 100644 --- a/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts +++ b/test/functional-tests/JavaScriptObfuscatorCLI.spec.ts @@ -2,9 +2,9 @@ import * as fs from 'fs'; import * as mkdirp from 'mkdirp'; import * as sinon from 'sinon'; -import { StdoutWriteMock } from "../mocks/StdoutWriteMock"; +import { StdoutWriteMock } from '../mocks/StdoutWriteMock'; -import { JavaScriptObfuscator } from "../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts b/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts index c829ac37..7e59d3f3 100644 --- a/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts +++ b/test/functional-tests/JavaScriptObfuscatorInternal.spec.ts @@ -1,8 +1,8 @@ -import { IObfuscationResult } from "../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../src/interfaces/IObfuscationResult'; -import { JavaScriptObfuscatorInternal } from "../../src/JavaScriptObfuscatorInternal"; +import { JavaScriptObfuscatorInternal } from '../../src/JavaScriptObfuscatorInternal'; -import { NO_CUSTOM_NODES_PRESET } from "../../src/preset-options/NoCustomNodesPreset"; +import { NO_CUSTOM_NODES_PRESET } from '../../src/preset-options/NoCustomNodesPreset'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts index e15a217e..983a0d3c 100644 --- a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts +++ b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts @@ -1,6 +1,6 @@ -import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts b/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts index 493adc49..f19b40fb 100644 --- a/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts +++ b/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts @@ -1,6 +1,6 @@ -import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts index 29a24d0e..62cdb826 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts @@ -1,6 +1,6 @@ -import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts index 74a81f69..6f8ebd80 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts @@ -1,6 +1,6 @@ -import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts index 9d5fb2fc..eb1c2fb0 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts @@ -1,6 +1,6 @@ -import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts index 8d89a96a..4cac94bf 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts @@ -1,6 +1,6 @@ -import { IObfuscationResult } from "../../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; -import { JavaScriptObfuscator } from "../../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts b/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts index 44770099..3c6b312f 100644 --- a/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/FunctionObfuscator.spec.ts @@ -1,8 +1,8 @@ -import { IObfuscationResult } from "../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from "../../../src/preset-options/NoCustomNodesPreset"; +import { NO_CUSTOM_NODES_PRESET } from '../../../src/preset-options/NoCustomNodesPreset'; -import { JavaScriptObfuscator } from "../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts b/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts index ed314db9..9225fe97 100644 --- a/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts @@ -1,8 +1,8 @@ -import { IObfuscationResult } from "../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from "../../../src/preset-options/NoCustomNodesPreset"; +import { NO_CUSTOM_NODES_PRESET } from '../../../src/preset-options/NoCustomNodesPreset'; -import { JavaScriptObfuscator } from "../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/node-obfuscators/MemberExpressionObfuscator.spec.ts b/test/functional-tests/node-obfuscators/MemberExpressionObfuscator.spec.ts index 9426666a..34c1d13f 100644 --- a/test/functional-tests/node-obfuscators/MemberExpressionObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/MemberExpressionObfuscator.spec.ts @@ -1,8 +1,8 @@ -import { IObfuscationResult } from "../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from "../../../src/preset-options/NoCustomNodesPreset"; +import { NO_CUSTOM_NODES_PRESET } from '../../../src/preset-options/NoCustomNodesPreset'; -import { JavaScriptObfuscator } from "../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec.ts b/test/functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec.ts index c1d3c034..dd1e0fcd 100644 --- a/test/functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec.ts @@ -1,8 +1,8 @@ -import { IObfuscationResult } from "../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from "../../../src/preset-options/NoCustomNodesPreset"; +import { NO_CUSTOM_NODES_PRESET } from '../../../src/preset-options/NoCustomNodesPreset'; -import { JavaScriptObfuscator } from "../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec.ts b/test/functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec.ts index c09b6b4d..8120e028 100644 --- a/test/functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec.ts @@ -1,8 +1,8 @@ -import { IObfuscationResult } from "../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from "../../../src/preset-options/NoCustomNodesPreset"; +import { NO_CUSTOM_NODES_PRESET } from '../../../src/preset-options/NoCustomNodesPreset'; -import { JavaScriptObfuscator } from "../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts index 491414c3..74fa0e2e 100644 --- a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts @@ -1,8 +1,8 @@ -import { IObfuscationResult } from "../../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../../src/interfaces/IObfuscationResult'; -import { NO_CUSTOM_NODES_PRESET } from "../../../src/preset-options/NoCustomNodesPreset"; +import { NO_CUSTOM_NODES_PRESET } from '../../../src/preset-options/NoCustomNodesPreset'; -import { JavaScriptObfuscator } from "../../../src/JavaScriptObfuscator"; +import { JavaScriptObfuscator } from '../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNodeTemplate.spec.ts b/test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNodeTemplate.spec.ts index bace8a86..65ff28f7 100644 --- a/test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNodeTemplate.spec.ts +++ b/test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNodeTemplate.spec.ts @@ -1,8 +1,8 @@ import 'format-unicorn'; -import { DomainLockNodeTemplate } from "../../../../../src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate"; +import { DomainLockNodeTemplate } from '../../../../../src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate'; -import { Utils } from "../../../../../src/Utils"; +import { Utils } from '../../../../../src/Utils'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts index 541eb3a0..abc3a6eb 100644 --- a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts +++ b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts @@ -1,9 +1,9 @@ import 'format-unicorn'; -import { AtobTemplate } from "../../../../../src/templates/custom-nodes/AtobTemplate"; -import { UnicodeArrayDecodeNodeTemplate } from "../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate"; +import { AtobTemplate } from '../../../../../src/templates/custom-nodes/AtobTemplate'; +import { UnicodeArrayDecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate'; -import { Utils } from "../../../../../src/Utils"; +import { Utils } from '../../../../../src/Utils'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/mocks/NodeMocks.ts b/test/mocks/NodeMocks.ts index 916b8f8b..e4cfc472 100644 --- a/test/mocks/NodeMocks.ts +++ b/test/mocks/NodeMocks.ts @@ -1,7 +1,7 @@ import * as escodegen from 'escodegen'; import * as ESTree from 'estree'; -import { NodeType } from "../../src/enums/NodeType"; +import { NodeType } from '../../src/enums/NodeType'; export class NodeMocks { /** diff --git a/test/unit-tests/ObfuscationResult.spec.ts b/test/unit-tests/ObfuscationResult.spec.ts index bfeada09..f974fba6 100644 --- a/test/unit-tests/ObfuscationResult.spec.ts +++ b/test/unit-tests/ObfuscationResult.spec.ts @@ -1,6 +1,6 @@ -import { IObfuscationResult } from "../../src/interfaces/IObfuscationResult"; +import { IObfuscationResult } from '../../src/interfaces/IObfuscationResult'; -import { ObfuscationResult } from "../../src/ObfuscationResult"; +import { ObfuscationResult } from '../../src/ObfuscationResult'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/unit-tests/OptionsNormalizer.spec.ts b/test/unit-tests/OptionsNormalizer.spec.ts index f57a1293..d7da44e1 100644 --- a/test/unit-tests/OptionsNormalizer.spec.ts +++ b/test/unit-tests/OptionsNormalizer.spec.ts @@ -1,9 +1,9 @@ -import { IObfuscatorOptions } from "../../src/interfaces/IObfuscatorOptions"; -import { IOptions } from "../../src/interfaces/IOptions"; +import { IObfuscatorOptions } from '../../src/interfaces/IObfuscatorOptions'; +import { IOptions } from '../../src/interfaces/IOptions'; import { DEFAULT_PRESET } from '../../src/preset-options/DefaultPreset'; -import { Options } from "../../src/options/Options"; +import { Options } from '../../src/options/Options'; import { OptionsNormalizer } from '../../src/options/OptionsNormalizer'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/unit-tests/SourceMapCorrector.spec.ts b/test/unit-tests/SourceMapCorrector.spec.ts index 6ee98be0..230b1d65 100644 --- a/test/unit-tests/SourceMapCorrector.spec.ts +++ b/test/unit-tests/SourceMapCorrector.spec.ts @@ -1,12 +1,12 @@ -import { IObfuscationResult } from "../../src/interfaces/IObfuscationResult"; -import { ISourceMapCorrector } from "../../src/interfaces/ISourceMapCorrector"; +import { IObfuscationResult } from '../../src/interfaces/IObfuscationResult'; +import { ISourceMapCorrector } from '../../src/interfaces/ISourceMapCorrector'; -import { TSourceMapMode } from "../../src/types/TSourceMapMode"; +import { TSourceMapMode } from '../../src/types/TSourceMapMode'; -import { SourceMapMode } from "../../src/enums/SourceMapMode"; +import { SourceMapMode } from '../../src/enums/SourceMapMode'; -import { ObfuscationResult } from "../../src/ObfuscationResult"; -import { SourceMapCorrector } from "../../src/SourceMapCorrector"; +import { ObfuscationResult } from '../../src/ObfuscationResult'; +import { SourceMapCorrector } from '../../src/SourceMapCorrector'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts b/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts index 5c33508d..a47129b7 100644 --- a/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts +++ b/test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts @@ -1,14 +1,14 @@ import * as ESTree from 'estree'; -import { ICustomNode } from "../../../src/interfaces/custom-nodes/ICustomNode"; +import { ICustomNode } from '../../../src/interfaces/custom-nodes/ICustomNode'; -import { DEFAULT_PRESET } from "../../../src/preset-options/DefaultPreset"; +import { DEFAULT_PRESET } from '../../../src/preset-options/DefaultPreset'; -import { NodeType } from "../../../src/enums/NodeType"; +import { NodeType } from '../../../src/enums/NodeType'; import { CatchClauseObfuscator } from '../../../src/node-obfuscators/CatchClauseObfuscator'; -import { NodeMocks } from "../../mocks/NodeMocks"; -import { Options } from "../../../src/options/Options"; +import { NodeMocks } from '../../mocks/NodeMocks'; +import { Options } from '../../../src/options/Options'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec.ts b/test/unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec.ts index 61ccbc32..e9394226 100644 --- a/test/unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec.ts +++ b/test/unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec.ts @@ -1,12 +1,12 @@ import * as ESTree from 'estree'; -import { ICustomNode } from "../../../src/interfaces/custom-nodes/ICustomNode"; +import { ICustomNode } from '../../../src/interfaces/custom-nodes/ICustomNode'; -import { DEFAULT_PRESET } from "../../../src/preset-options/DefaultPreset"; +import { DEFAULT_PRESET } from '../../../src/preset-options/DefaultPreset'; import { FunctionDeclarationObfuscator } from '../../../src/node-obfuscators/FunctionDeclarationObfuscator'; -import { NodeMocks } from "../../mocks/NodeMocks"; -import { Options } from "../../../src/options/Options"; +import { NodeMocks } from '../../mocks/NodeMocks'; +import { Options } from '../../../src/options/Options'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/test/unit-tests/node-obfuscators/FunctionObfuscator.spec.ts b/test/unit-tests/node-obfuscators/FunctionObfuscator.spec.ts index 0f12c141..52671a73 100644 --- a/test/unit-tests/node-obfuscators/FunctionObfuscator.spec.ts +++ b/test/unit-tests/node-obfuscators/FunctionObfuscator.spec.ts @@ -1,12 +1,12 @@ import * as ESTree from 'estree'; -import { ICustomNode } from "../../../src/interfaces/custom-nodes/ICustomNode"; +import { ICustomNode } from '../../../src/interfaces/custom-nodes/ICustomNode'; -import { DEFAULT_PRESET } from "../../../src/preset-options/DefaultPreset"; +import { DEFAULT_PRESET } from '../../../src/preset-options/DefaultPreset'; -import { FunctionObfuscator } from "../../../src/node-obfuscators/FunctionObfuscator"; -import { NodeMocks } from "../../mocks/NodeMocks"; -import { Options } from "../../../src/options/Options"; +import { FunctionObfuscator } from '../../../src/node-obfuscators/FunctionObfuscator'; +import { NodeMocks } from '../../mocks/NodeMocks'; +import { Options } from '../../../src/options/Options'; const assert: Chai.AssertStatic = require('chai').assert; diff --git a/tsconfig.json b/tsconfig.json index a46c2ed7..39076b3d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": "./", "target": "ES6", "module": "commonjs", "sourceMap": true, @@ -9,11 +8,6 @@ "removeComments": true, "noImplicitAny": true, "strictNullChecks": true, - "noUnusedLocals": true, - "paths": { - "app/*": [ - "src/*" - ] - } + "noUnusedLocals": true } } \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 3865a412..42e9cb2a 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,10 +1,8 @@ 'use strict'; -var fs = require('fs'), - path = require('path'), +var fs = require("fs"), nodeExternals = require('webpack-node-externals'), - webpack = require('webpack'), - TsConfigPathsPlugin = require('awesome-typescript-loader').TsConfigPathsPlugin; + webpack = require('webpack'); function getLicenseText () { return "/*\nCopyright (C) 2016 Timofey Kachalov \n\n" + @@ -30,11 +28,7 @@ module.exports = { ] }, resolve: { - extensions: ['.ts'], - modules: ['node_modules', 'src'], - plugins: [ - new TsConfigPathsPlugin() - ] + extensions: ['.ts'] }, plugins: [ new webpack.BannerPlugin( From ba20638629607f3f909f2e96883806a682f7f72a Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 2 Oct 2016 15:11:13 +0300 Subject: [PATCH 052/138] Temp fix of `awesome-typescript-loader` `.d.ts` import bug --- dist/index.js | 14 +++++++++++--- .../{TSourceMapMode.d.ts => TSourceMapMode.ts} | 0 2 files changed, 11 insertions(+), 3 deletions(-) rename src/types/{TSourceMapMode.d.ts => TSourceMapMode.ts} (100%) diff --git a/dist/index.js b/dist/index.js index b0dfd70e..6d46c092 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 = 75); +/******/ return __webpack_require__(__webpack_require__.s = 77); /******/ }) /************************************************************************/ /******/ ([ @@ -3153,7 +3153,7 @@ 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__(71); -var TSourceMapMode_1 = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"../types/TSourceMapMode\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())); +var TSourceMapMode_1 = __webpack_require__(76); var DefaultPreset_1 = __webpack_require__(20); var OptionsNormalizer_1 = __webpack_require__(55); var ValidationErrorsFormatter_1 = __webpack_require__(56); @@ -3629,7 +3629,15 @@ module.exports = require("fs"); module.exports = require("mkdirp"); /***/ }, -/* 75 */ +/* 75 */, +/* 76 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +/***/ }, +/* 77 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/types/TSourceMapMode.d.ts b/src/types/TSourceMapMode.ts similarity index 100% rename from src/types/TSourceMapMode.d.ts rename to src/types/TSourceMapMode.ts From 1745177179d4be97d0015a9a1623a2d3d5cf5184 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 2 Oct 2016 15:16:48 +0300 Subject: [PATCH 053/138] Improve build speed --- .gitignore | 1 + dist/index.js | 36 ++++++++++++++++++------------------ webpack.config.js | 8 ++++++-- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index eeba4d47..56df8f3b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.awcache .idea npm-debug.log *.js.map diff --git a/dist/index.js b/dist/index.js index 6d46c092..db1252c0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -102,7 +102,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(70); +var chance_1 = __webpack_require__(71); var JSFuck_1 = __webpack_require__(18); var Utils = function () { @@ -1394,8 +1394,8 @@ 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__(73); -var mkdirp = __webpack_require__(74); +var fs = __webpack_require__(74); +var mkdirp = __webpack_require__(75); var path = __webpack_require__(22); var Utils_1 = __webpack_require__(0); @@ -1486,7 +1486,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 commander = __webpack_require__(72); +var commander = __webpack_require__(73); var path = __webpack_require__(22); var SourceMapMode_1 = __webpack_require__(12); var DefaultPreset_1 = __webpack_require__(20); @@ -3152,8 +3152,8 @@ 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__(71); -var TSourceMapMode_1 = __webpack_require__(76); +var class_validator_1 = __webpack_require__(72); +var TSourceMapMode_1 = __webpack_require__(70); var DefaultPreset_1 = __webpack_require__(20); var OptionsNormalizer_1 = __webpack_require__(55); var ValidationErrorsFormatter_1 = __webpack_require__(56); @@ -3602,41 +3602,41 @@ exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; /* 70 */ /***/ function(module, exports) { -module.exports = require("chance"); +"use strict"; +"use strict"; /***/ }, /* 71 */ /***/ function(module, exports) { -module.exports = require("class-validator"); +module.exports = require("chance"); /***/ }, /* 72 */ /***/ function(module, exports) { -module.exports = require("commander"); +module.exports = require("class-validator"); /***/ }, /* 73 */ /***/ function(module, exports) { -module.exports = require("fs"); +module.exports = require("commander"); /***/ }, /* 74 */ /***/ function(module, exports) { +module.exports = require("fs"); + +/***/ }, +/* 75 */ +/***/ function(module, exports) { + module.exports = require("mkdirp"); /***/ }, -/* 75 */, -/* 76 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -/***/ }, +/* 76 */, /* 77 */ /***/ function(module, exports, __webpack_require__) { diff --git a/webpack.config.js b/webpack.config.js index 42e9cb2a..057bd03f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,7 +2,8 @@ var fs = require("fs"), nodeExternals = require('webpack-node-externals'), - webpack = require('webpack'); + webpack = require('webpack'), + ForkCheckerPlugin = require('awesome-typescript-loader').ForkCheckerPlugin; function getLicenseText () { return "/*\nCopyright (C) 2016 Timofey Kachalov \n\n" + @@ -22,7 +23,9 @@ module.exports = { test: /\.ts(x?)$/, loader: 'awesome-typescript-loader', query: { - useBabel: true + forkChecker: true, + useBabel: true, + useCache: true } } ] @@ -31,6 +34,7 @@ module.exports = { extensions: ['.ts'] }, plugins: [ + new ForkCheckerPlugin(), new webpack.BannerPlugin( { banner: getLicenseText() + '\n\nrequire("source-map-support").install();\n', From 8571cef294d870af95a6d2b913ee0fa3fdd6be43 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 2 Oct 2016 22:56:31 +0300 Subject: [PATCH 054/138] Hidden node appender --- dist/index.js | 491 ++++++++++++------ src/NodeUtils.ts | 7 +- src/Nodes.ts | 8 + .../ConsoleOutputDisableExpressionNode.ts | 7 +- .../domain-lock-nodes/DomainLockNode.ts | 7 +- .../SelfDefendingUnicodeNode.ts | 18 +- .../ASTTreeBlockScopeAnalyzer.ts | 145 ++++++ .../HiddenNodeAppender.ts | 78 +++ src/interfaces/IAnalyzer.d.ts | 3 + src/interfaces/IBlockScopeTraceData.d.ts | 7 + src/interfaces/IObfuscatorOptions.d.ts | 2 +- src/interfaces/IOptions.d.ts | 2 +- ...ConsoleOutputDisableExpressionNode.spec.ts | 4 +- .../domain-lock-nodes/DomainLockNode.spec.ts | 4 +- .../UnicodeArrayCallsWrapper.spec.ts | 4 +- .../UnicodeArrayDecodeNode.spec.ts | 4 +- .../UnicodeArrayNode.spec.ts | 4 +- .../UnicodeArrayRotateFunctionNode.spec.ts | 4 +- test/index.spec.ts | 2 + test/unit-tests/NodeUtils.spec.ts | 2 +- .../ASTTreeBlockScopeAnalyzer-spec.ts | 246 +++++++++ .../HiddenNodeAppender-spec.ts | 302 +++++++++++ 22 files changed, 1167 insertions(+), 184 deletions(-) create mode 100644 src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts create mode 100644 src/hidden-node-appender/HiddenNodeAppender.ts create mode 100644 src/interfaces/IAnalyzer.d.ts create mode 100644 src/interfaces/IBlockScopeTraceData.d.ts create mode 100644 test/unit-tests/hidden-node-appender/ASTTreeBlockScopeAnalyzer-spec.ts create mode 100644 test/unit-tests/hidden-node-appender/HiddenNodeAppender-spec.ts diff --git a/dist/index.js b/dist/index.js index db1252c0..789c9127 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 = 77); +/******/ return __webpack_require__(__webpack_require__.s = 79); /******/ }) /************************************************************************/ /******/ ([ @@ -102,7 +102,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(71); +var chance_1 = __webpack_require__(73); var JSFuck_1 = __webpack_require__(18); var Utils = function () { @@ -258,9 +258,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var escodegen = __webpack_require__(11); var esprima = __webpack_require__(21); -var estraverse = __webpack_require__(6); -var NodeType_1 = __webpack_require__(5); -var Nodes_1 = __webpack_require__(3); +var estraverse = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); +var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); var NodeUtils = function () { @@ -291,9 +291,14 @@ var NodeUtils = function () { }, { key: 'convertCodeToStructure', value: function convertCodeToStructure(code) { + var getFirstBlockStatementNodeByIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var structure = esprima.parse(code); NodeUtils.addXVerbatimPropertyToLiterals(structure); NodeUtils.parentize(structure); + if (!getFirstBlockStatementNodeByIndex) { + return structure; + } return NodeUtils.getBlockStatementNodeByIndex(structure); } }, { @@ -411,19 +416,6 @@ exports.NodeUtils = NodeUtils; /***/ }, /* 2 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -(function (AppendState) { - AppendState[AppendState["AfterObfuscation"] = 0] = "AfterObfuscation"; - AppendState[AppendState["BeforeObfuscation"] = 1] = "BeforeObfuscation"; -})(exports.AppendState || (exports.AppendState = {})); -var AppendState = exports.AppendState; - -/***/ }, -/* 3 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -433,7 +425,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 NodeType_1 = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var Nodes = function () { function Nodes() { @@ -465,6 +457,11 @@ var Nodes = function () { value: function isCallExpressionNode(node) { return node.type === NodeType_1.NodeType.CallExpression; } + }, { + key: 'isExpressionStatementNode', + value: function isExpressionStatementNode(node) { + return node.type === NodeType_1.NodeType.ExpressionStatement; + } }, { key: 'isFunctionDeclarationNode', value: function isFunctionDeclarationNode(node) { @@ -532,6 +529,19 @@ var Nodes = function () { exports.Nodes = Nodes; +/***/ }, +/* 3 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +(function (AppendState) { + AppendState[AppendState["AfterObfuscation"] = 0] = "AfterObfuscation"; + AppendState[AppendState["BeforeObfuscation"] = 1] = "BeforeObfuscation"; +})(exports.AppendState || (exports.AppendState = {})); +var AppendState = exports.AppendState; + /***/ }, /* 4 */ /***/ function(module, exports) { @@ -569,6 +579,12 @@ exports.AbstractCustomNode = AbstractCustomNode; /***/ }, /* 5 */ +/***/ function(module, exports) { + +module.exports = require("estraverse"); + +/***/ }, +/* 6 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -605,12 +621,6 @@ exports.NodeType = Utils_1.Utils.strEnumify({ WhileStatement: 'WhileStatement' }); -/***/ }, -/* 6 */ -/***/ function(module, exports) { - -module.exports = require("estraverse"); - /***/ }, /* 7 */ /***/ function(module, exports) { @@ -1113,7 +1123,7 @@ var esprima = __webpack_require__(21); var escodegen = __webpack_require__(11); var ObfuscationResult_1 = __webpack_require__(17); var Obfuscator_1 = __webpack_require__(25); -var Options_1 = __webpack_require__(54); +var Options_1 = __webpack_require__(56); var SourceMapCorrector_1 = __webpack_require__(26); var JavaScriptObfuscatorInternal = function () { @@ -1179,24 +1189,24 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var estraverse = __webpack_require__(6); -var AppendState_1 = __webpack_require__(2); -var NodeType_1 = __webpack_require__(5); -var CatchClauseObfuscator_1 = __webpack_require__(45); -var ConsoleOutputNodesGroup_1 = __webpack_require__(40); -var DebugProtectionNodesGroup_1 = __webpack_require__(41); -var DomainLockNodesGroup_1 = __webpack_require__(42); -var FunctionDeclarationObfuscator_1 = __webpack_require__(46); -var FunctionObfuscator_1 = __webpack_require__(47); -var LiteralObfuscator_1 = __webpack_require__(48); -var MemberExpressionObfuscator_1 = __webpack_require__(49); -var MethodDefinitionObfuscator_1 = __webpack_require__(50); -var Nodes_1 = __webpack_require__(3); +var estraverse = __webpack_require__(5); +var AppendState_1 = __webpack_require__(3); +var NodeType_1 = __webpack_require__(6); +var CatchClauseObfuscator_1 = __webpack_require__(47); +var ConsoleOutputNodesGroup_1 = __webpack_require__(42); +var DebugProtectionNodesGroup_1 = __webpack_require__(43); +var DomainLockNodesGroup_1 = __webpack_require__(44); +var FunctionDeclarationObfuscator_1 = __webpack_require__(48); +var FunctionObfuscator_1 = __webpack_require__(49); +var LiteralObfuscator_1 = __webpack_require__(50); +var MemberExpressionObfuscator_1 = __webpack_require__(51); +var MethodDefinitionObfuscator_1 = __webpack_require__(52); +var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var ObjectExpressionObfuscator_1 = __webpack_require__(51); -var SelfDefendingNodesGroup_1 = __webpack_require__(43); -var UnicodeArrayNodesGroup_1 = __webpack_require__(44); -var VariableDeclarationObfuscator_1 = __webpack_require__(52); +var ObjectExpressionObfuscator_1 = __webpack_require__(53); +var SelfDefendingNodesGroup_1 = __webpack_require__(45); +var UnicodeArrayNodesGroup_1 = __webpack_require__(46); +var VariableDeclarationObfuscator_1 = __webpack_require__(54); var Obfuscator = function () { function Obfuscator(options) { @@ -1394,8 +1404,8 @@ 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__(74); -var mkdirp = __webpack_require__(75); +var fs = __webpack_require__(76); +var mkdirp = __webpack_require__(77); var path = __webpack_require__(22); var Utils_1 = __webpack_require__(0); @@ -1486,7 +1496,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 commander = __webpack_require__(73); +var commander = __webpack_require__(75); var path = __webpack_require__(22); var SourceMapMode_1 = __webpack_require__(12); var DefaultPreset_1 = __webpack_require__(20); @@ -1623,9 +1633,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 AppendState_1 = __webpack_require__(2); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(58); +var AppendState_1 = __webpack_require__(3); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(60); var AbstractCustomNode_1 = __webpack_require__(4); +var HiddenNodeAppender_1 = __webpack_require__(41); var NodeUtils_1 = __webpack_require__(1); var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { @@ -1643,7 +1654,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { _createClass(ConsoleOutputDisableExpressionNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode) { - NodeUtils_1.NodeUtils.prependNode(blockScopeNode.body, this.getNode()); + HiddenNodeAppender_1.HiddenNodeAppender.appendNode(blockScopeNode.body, this.getNode(), HiddenNodeAppender_1.HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); } }, { key: 'getNodeStructure', @@ -1673,8 +1684,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(59); +var AppendState_1 = __webpack_require__(3); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(61); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); @@ -1726,8 +1737,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(60); +var AppendState_1 = __webpack_require__(3); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(62); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); @@ -1779,8 +1790,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(61); +var AppendState_1 = __webpack_require__(3); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(63); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1845,9 +1856,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); -var DomainLockNodeTemplate_1 = __webpack_require__(62); +var AppendState_1 = __webpack_require__(3); +var DomainLockNodeTemplate_1 = __webpack_require__(64); var AbstractCustomNode_1 = __webpack_require__(4); +var HiddenNodeAppender_1 = __webpack_require__(41); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1866,7 +1878,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { _createClass(DomainLockNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode) { - NodeUtils_1.NodeUtils.prependNode(blockScopeNode.body, this.getNode()); + HiddenNodeAppender_1.HiddenNodeAppender.appendNode(blockScopeNode.body, this.getNode(), HiddenNodeAppender_1.HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); } }, { key: 'getNodeStructure', @@ -1906,13 +1918,13 @@ 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 AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var NoCustomNodesPreset_1 = __webpack_require__(16); -var SelfDefendingTemplate_1 = __webpack_require__(63); +var SelfDefendingTemplate_1 = __webpack_require__(65); var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); -var Utils_1 = __webpack_require__(0); +var HiddenNodeAppender_1 = __webpack_require__(41); var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); @@ -1929,15 +1941,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _createClass(SelfDefendingUnicodeNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode) { - var programBodyLength = blockScopeNode.body.length, - randomIndex = 0; - if (programBodyLength > 2) { - randomIndex = Utils_1.Utils.getRandomGenerator().integer({ - min: programBodyLength / 2, - max: programBodyLength - 1 - }); - } - NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), randomIndex); + HiddenNodeAppender_1.HiddenNodeAppender.appendNode(blockScopeNode.body, this.getNode(), HiddenNodeAppender_1.HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); } }, { key: 'getNodeStructure', @@ -1969,8 +1973,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(64); +var AppendState_1 = __webpack_require__(3); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(66); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2043,11 +2047,11 @@ 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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var NoCustomNodesPreset_1 = __webpack_require__(16); -var AtobTemplate_1 = __webpack_require__(57); -var SelfDefendingTemplate_1 = __webpack_require__(65); -var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(66); +var AtobTemplate_1 = __webpack_require__(59); +var SelfDefendingTemplate_1 = __webpack_require__(67); +var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(68); var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2124,8 +2128,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); -var UnicodeArrayTemplate_1 = __webpack_require__(67); +var AppendState_1 = __webpack_require__(3); +var UnicodeArrayTemplate_1 = __webpack_require__(69); var AbstractCustomNode_1 = __webpack_require__(4); var NodeUtils_1 = __webpack_require__(1); @@ -2210,10 +2214,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(2); +var AppendState_1 = __webpack_require__(3); var NoCustomNodesPreset_1 = __webpack_require__(16); -var SelfDefendingTemplate_1 = __webpack_require__(68); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(69); +var SelfDefendingTemplate_1 = __webpack_require__(70); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(71); var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2283,6 +2287,185 @@ exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; "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 estraverse = __webpack_require__(5); +var Nodes_1 = __webpack_require__(2); +var NodeUtils_1 = __webpack_require__(1); + +var ASTTreeBlockScopeAnalyzer = function () { + function ASTTreeBlockScopeAnalyzer(blockScopeBody) { + _classCallCheck(this, ASTTreeBlockScopeAnalyzer); + + this.blockScopeTraceData = []; + this.blockScopeBody = blockScopeBody; + } + + _createClass(ASTTreeBlockScopeAnalyzer, [{ + key: 'analyze', + value: function analyze() { + var _this = this; + + if (this.blockScopeBody.length === 1) { + estraverse.traverse(this.blockScopeBody[0], { + enter: function enter(node) { + if (Nodes_1.Nodes.isBlockStatementNode(node)) { + _this.analyzeRecursive(node.body, _this.blockScopeTraceData); + return estraverse.VisitorOption.Skip; + } + } + }); + } else { + this.analyzeRecursive(this.blockScopeBody, this.blockScopeTraceData); + } + return this.blockScopeTraceData; + } + }, { + key: 'analyzeRecursive', + value: function analyzeRecursive(blockScopeBody, dataTree) { + var _this2 = this; + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + var _loop = function _loop() { + var rootNode = _step.value; + + estraverse.traverse(rootNode, { + enter: function enter(node) { + if (Nodes_1.Nodes.isCallExpressionNode(node) && Nodes_1.Nodes.isIdentifierNode(node.callee) && rootNode.parentNode === NodeUtils_1.NodeUtils.getBlockScopeOfNode(node)) { + var calleeNode = _this2.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), node.callee.name); + if (!calleeNode) { + return estraverse.VisitorOption.Break; + } + var data = { + callee: calleeNode, + name: node.callee.name, + trace: [] + }; + dataTree.push(data); + _this2.analyzeRecursive(calleeNode.body, data.trace); + } + } + }); + }; + + for (var _iterator = blockScopeBody[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + _loop(); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + } + }, { + key: 'getCalleeBlockStatement', + value: function getCalleeBlockStatement(node, name) { + var calleeBlockStatement = null; + estraverse.traverse(node, { + enter: function enter(node, parentNode) { + if (Nodes_1.Nodes.isFunctionDeclarationNode(node) && node.id.name === name) { + calleeBlockStatement = node.body; + return estraverse.VisitorOption.Break; + } + if (Nodes_1.Nodes.isFunctionExpressionNode(node) && Nodes_1.Nodes.isVariableDeclaratorNode(parentNode) && Nodes_1.Nodes.isIdentifierNode(parentNode.id) && parentNode.id.name === name) { + calleeBlockStatement = node.body; + return estraverse.VisitorOption.Break; + } + } + }); + return calleeBlockStatement; + } + }]); + + return ASTTreeBlockScopeAnalyzer; +}(); + +exports.ASTTreeBlockScopeAnalyzer = ASTTreeBlockScopeAnalyzer; + +/***/ }, +/* 41 */ +/***/ 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 ASTTreeBlockScopeAnalyzer_1 = __webpack_require__(40); +var NodeUtils_1 = __webpack_require__(1); +var Utils_1 = __webpack_require__(0); + +var HiddenNodeAppender = function () { + function HiddenNodeAppender() { + _classCallCheck(this, HiddenNodeAppender); + } + + _createClass(HiddenNodeAppender, null, [{ + key: 'appendNode', + value: function appendNode(blockScopeBody, node) { + var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + var blockScopeTraceData = new ASTTreeBlockScopeAnalyzer_1.ASTTreeBlockScopeAnalyzer(blockScopeBody).analyze(); + if (!blockScopeTraceData.length) { + NodeUtils_1.NodeUtils.prependNode(blockScopeBody, node); + return; + } + NodeUtils_1.NodeUtils.prependNode(HiddenNodeAppender.getOptimalBlockScope(blockScopeTraceData, index).body, node); + } + }, { + key: 'getIndexByThreshold', + value: function getIndexByThreshold(blockStatementBodyLength) { + var threshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.1; + + if (threshold < 0 || threshold > 1) { + throw new RangeError('`threshold` parameter should has value between 0 and 1'); + } + return Utils_1.Utils.getRandomGenerator().integer({ + min: 0, + max: Math.round(blockStatementBodyLength * threshold) + }); + } + }, { + key: 'getOptimalBlockScope', + value: function getOptimalBlockScope(blockScopeTraceData, index) { + var firstCall = blockScopeTraceData[index]; + if (firstCall.trace.length) { + return HiddenNodeAppender.getOptimalBlockScope(firstCall.trace, 0); + } else { + return firstCall.callee; + } + } + }]); + + return HiddenNodeAppender; +}(); + +exports.HiddenNodeAppender = HiddenNodeAppender; + +/***/ }, +/* 42 */ +/***/ 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; } @@ -2313,7 +2496,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; /***/ }, -/* 41 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2357,7 +2540,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; /***/ }, -/* 42 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2393,7 +2576,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { exports.DomainLockNodesGroup = DomainLockNodesGroup; /***/ }, -/* 43 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2429,7 +2612,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; /***/ }, -/* 44 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2491,7 +2674,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; /***/ }, -/* 45 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2505,11 +2688,11 @@ 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 estraverse = __webpack_require__(6); -var NodeType_1 = __webpack_require__(5); +var estraverse = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(3); +var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { @@ -2562,7 +2745,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 46 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2576,11 +2759,11 @@ 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 estraverse = __webpack_require__(6); -var NodeType_1 = __webpack_require__(5); +var estraverse = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(3); +var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { @@ -2637,7 +2820,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 47 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2651,11 +2834,11 @@ 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 estraverse = __webpack_require__(6); -var NodeType_1 = __webpack_require__(5); +var estraverse = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(3); +var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); var FunctionObfuscator = function (_AbstractNodeObfuscat) { @@ -2718,7 +2901,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 48 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2736,8 +2919,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var BooleanLiteralReplacer_1 = __webpack_require__(53); -var Nodes_1 = __webpack_require__(3); +var BooleanLiteralReplacer_1 = __webpack_require__(55); +var Nodes_1 = __webpack_require__(2); var NumberLiteralReplacer_1 = __webpack_require__(19); var StringLiteralReplacer_1 = __webpack_require__(15); @@ -2783,7 +2966,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 49 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2798,10 +2981,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 escodegen = __webpack_require__(11); -var estraverse = __webpack_require__(6); -var NodeType_1 = __webpack_require__(5); +var estraverse = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var Nodes_1 = __webpack_require__(3); +var Nodes_1 = __webpack_require__(2); var StringLiteralReplacer_1 = __webpack_require__(15); var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { @@ -2868,7 +3051,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 50 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2882,9 +3065,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 estraverse = __webpack_require__(6); +var estraverse = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var Nodes_1 = __webpack_require__(3); +var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); var StringLiteralReplacer_1 = __webpack_require__(15); @@ -2929,7 +3112,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 51 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2944,10 +3127,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 escodegen = __webpack_require__(11); -var estraverse = __webpack_require__(6); -var NodeType_1 = __webpack_require__(5); +var estraverse = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var Nodes_1 = __webpack_require__(3); +var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { @@ -3015,7 +3198,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 52 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3029,11 +3212,11 @@ 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 estraverse = __webpack_require__(6); -var NodeType_1 = __webpack_require__(5); +var estraverse = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(3); +var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { @@ -3092,7 +3275,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 53 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3131,7 +3314,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 54 */ +/* 56 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3152,11 +3335,11 @@ 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__(72); -var TSourceMapMode_1 = __webpack_require__(70); +var class_validator_1 = __webpack_require__(74); +var TSourceMapMode_1 = __webpack_require__(72); var DefaultPreset_1 = __webpack_require__(20); -var OptionsNormalizer_1 = __webpack_require__(55); -var ValidationErrorsFormatter_1 = __webpack_require__(56); +var OptionsNormalizer_1 = __webpack_require__(57); +var ValidationErrorsFormatter_1 = __webpack_require__(58); var Options = function Options(obfuscatorOptions) { _classCallCheck(this, Options); @@ -3203,7 +3386,7 @@ exports.Options = Options; var _a; /***/ }, -/* 55 */ +/* 57 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3372,7 +3555,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNo exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 56 */ +/* 58 */ /***/ function(module, exports) { "use strict"; @@ -3439,7 +3622,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 57 */ +/* 59 */ /***/ function(module, exports) { "use strict"; @@ -3451,7 +3634,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 58 */ +/* 60 */ /***/ function(module, exports) { "use strict"; @@ -3463,7 +3646,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 59 */ +/* 61 */ /***/ function(module, exports) { "use strict"; @@ -3475,7 +3658,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 60 */ +/* 62 */ /***/ function(module, exports) { "use strict"; @@ -3487,7 +3670,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 61 */ +/* 63 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3500,7 +3683,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 62 */ +/* 64 */ /***/ function(module, exports) { "use strict"; @@ -3512,7 +3695,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 63 */ +/* 65 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3525,7 +3708,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 64 */ +/* 66 */ /***/ function(module, exports) { "use strict"; @@ -3537,7 +3720,7 @@ function UnicodeArrayCallsWrapperTemplate() { exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 65 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3550,7 +3733,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 66 */ +/* 68 */ /***/ function(module, exports) { "use strict"; @@ -3562,7 +3745,7 @@ function UnicodeArrayDecodeNodeTemplate() { exports.UnicodeArrayDecodeNodeTemplate = UnicodeArrayDecodeNodeTemplate; /***/ }, -/* 67 */ +/* 69 */ /***/ function(module, exports) { "use strict"; @@ -3574,7 +3757,7 @@ function UnicodeArrayTemplate() { exports.UnicodeArrayTemplate = UnicodeArrayTemplate; /***/ }, -/* 68 */ +/* 70 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3587,7 +3770,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 69 */ +/* 71 */ /***/ function(module, exports) { "use strict"; @@ -3598,46 +3781,46 @@ function UnicodeArrayRotateFunctionTemplate() { } exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; -/***/ }, -/* 70 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -/***/ }, -/* 71 */ -/***/ function(module, exports) { - -module.exports = require("chance"); - /***/ }, /* 72 */ /***/ function(module, exports) { -module.exports = require("class-validator"); +"use strict"; +"use strict"; /***/ }, /* 73 */ /***/ function(module, exports) { -module.exports = require("commander"); +module.exports = require("chance"); /***/ }, /* 74 */ /***/ function(module, exports) { -module.exports = require("fs"); +module.exports = require("class-validator"); /***/ }, /* 75 */ /***/ function(module, exports) { +module.exports = require("commander"); + +/***/ }, +/* 76 */ +/***/ function(module, exports) { + +module.exports = require("fs"); + +/***/ }, +/* 77 */ +/***/ function(module, exports) { + module.exports = require("mkdirp"); /***/ }, -/* 76 */, -/* 77 */ +/* 78 */, +/* 79 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/NodeUtils.ts b/src/NodeUtils.ts index ea0725cc..6b6f8e40 100644 --- a/src/NodeUtils.ts +++ b/src/NodeUtils.ts @@ -50,14 +50,19 @@ export class NodeUtils { /** * @param code + * @param getFirstBlockStatementNodeByIndex * @returns {ESTree.Node} */ - public static convertCodeToStructure (code: string): ESTree.Node { + public static convertCodeToStructure (code: string, getFirstBlockStatementNodeByIndex: boolean = true): ESTree.Node { let structure: ESTree.Node = esprima.parse(code); NodeUtils.addXVerbatimPropertyToLiterals(structure); NodeUtils.parentize(structure); + if (!getFirstBlockStatementNodeByIndex) { + return structure; + } + return NodeUtils.getBlockStatementNodeByIndex(structure); } diff --git a/src/Nodes.ts b/src/Nodes.ts index 59b6076d..ca98db16 100644 --- a/src/Nodes.ts +++ b/src/Nodes.ts @@ -42,6 +42,14 @@ export class Nodes { return node.type === NodeType.CallExpression; } + /** + * @param node + * @returns {boolean} + */ + public static isExpressionStatementNode (node: ESTree.Node): node is ESTree.ExpressionStatement { + return node.type === NodeType.ExpressionStatement; + } + /** * @param node * @returns {boolean} diff --git a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts index 9083ba11..dceb0e6f 100644 --- a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts +++ b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts @@ -7,6 +7,7 @@ import { AppendState } from '../../enums/AppendState'; import { ConsoleOutputDisableExpressionTemplate } from '../../templates/custom-nodes/console-output-nodes/console-output-disable-expression-node/ConsoleOutputDisableExpressionTemplate'; import { AbstractCustomNode } from '../AbstractCustomNode'; +import { HiddenNodeAppender } from '../../hidden-node-appender/HiddenNodeAppender'; import { NodeUtils } from '../../NodeUtils'; export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { @@ -19,7 +20,11 @@ export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { * @param blockScopeNode */ public appendNode (blockScopeNode: TNodeWithBlockStatement): void { - NodeUtils.prependNode(blockScopeNode.body, this.getNode()); + HiddenNodeAppender.appendNode( + blockScopeNode.body, + this.getNode(), + HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + ); } /** diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts index c95555f7..6649e279 100644 --- a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -9,6 +9,7 @@ import { AppendState } from '../../enums/AppendState'; import { DomainLockNodeTemplate } from '../../templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate'; import { AbstractCustomNode } from '../AbstractCustomNode'; +import { HiddenNodeAppender } from '../../hidden-node-appender/HiddenNodeAppender'; import { NodeUtils } from '../../NodeUtils'; import { Utils } from '../../Utils'; @@ -22,7 +23,11 @@ export class DomainLockNode extends AbstractCustomNode { * @param blockScopeNode */ public appendNode (blockScopeNode: TNodeWithBlockStatement): void { - NodeUtils.prependNode(blockScopeNode.body, this.getNode()); + HiddenNodeAppender.appendNode( + blockScopeNode.body, + this.getNode(), + HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + ); } /** diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index 4cbea66c..f80f9e86 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts @@ -11,7 +11,7 @@ import { SelfDefendingTemplate } from '../../templates/custom-nodes/self-defendi import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; import { NodeUtils } from '../../NodeUtils'; -import { Utils } from '../../Utils'; +import { HiddenNodeAppender } from '../../hidden-node-appender/HiddenNodeAppender'; export class SelfDefendingUnicodeNode extends AbstractCustomNode { /** @@ -23,17 +23,11 @@ export class SelfDefendingUnicodeNode extends AbstractCustomNode { * @param blockScopeNode */ public appendNode (blockScopeNode: TNodeWithBlockStatement): void { - let programBodyLength: number = blockScopeNode.body.length, - randomIndex: number = 0; - - if (programBodyLength > 2) { - randomIndex = Utils.getRandomGenerator().integer({ - min: programBodyLength / 2, - max: programBodyLength - 1 - }); - } - - NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), randomIndex); + HiddenNodeAppender.appendNode( + blockScopeNode.body, + this.getNode(), + HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + ); } /** diff --git a/src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts b/src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts new file mode 100644 index 00000000..275a2fff --- /dev/null +++ b/src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts @@ -0,0 +1,145 @@ +import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; + +import { TNodeWithBlockStatement } from '../types/TNodeWithBlockStatement'; + +import { IBlockScopeTraceData } from '../interfaces/IBlockScopeTraceData'; + +import { Nodes } from '../Nodes'; +import { NodeUtils } from '../NodeUtils'; +import { IAnalyzer } from '../interfaces/IAnalyzer'; + +/** + * This class generates a structure with order of function trace calls + * + * For example: + * + * function Foo () { + * var baz = function () { + * + * } + * + * baz(); + * } + * + * foo(); + * + * Will generate a structure like: + * + * [ + * { + * callee: FOO_FUNCTION_NODE + * name: 'Foo', + * trace: [ + * { + * callee: BAZ_FUNCTION_NODE, + * name: 'baz, + * trace: [] + * } + * ] + * } + * ] + */ +export class ASTTreeBlockScopeAnalyzer implements IAnalyzer { + /** + * @type {ESTree.Node[]} + */ + private blockScopeBody: ESTree.Node[]; + + /** + * @type {T[]} + */ + private blockScopeTraceData: T[] = []; + + /** + * @param blockScopeBody + */ + constructor (blockScopeBody: ESTree.Node[]) { + this.blockScopeBody = blockScopeBody; + } + + /** + * @returns {T} + */ + public analyze (): T[] { + if (this.blockScopeBody.length === 1) { + estraverse.traverse(this.blockScopeBody[0], { + enter: (node: ESTree.Node): any => { + if (Nodes.isBlockStatementNode(node)) { + this.analyzeRecursive(node.body, this.blockScopeTraceData); + + return estraverse.VisitorOption.Skip; + } + } + }); + } else { + this.analyzeRecursive(this.blockScopeBody, this.blockScopeTraceData); + } + + return this.blockScopeTraceData; + } + + /** + * @param blockScopeBody + * @param dataTree + */ + private analyzeRecursive (blockScopeBody: ESTree.Node[], dataTree: any): void { + for (let rootNode of blockScopeBody) { + estraverse.traverse(rootNode, { + enter: (node: ESTree.Node): any => { + if ( + Nodes.isCallExpressionNode(node) && + Nodes.isIdentifierNode(node.callee) && + rootNode.parentNode === NodeUtils.getBlockScopeOfNode(node) + ) { + const calleeNode: TNodeWithBlockStatement|null = this.getCalleeBlockStatement( + NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), + node.callee.name + ); + + if (!calleeNode) { + return estraverse.VisitorOption.Break; + } + + const data: IBlockScopeTraceData = { + callee: calleeNode, + name: node.callee.name, + trace: [] + }; + + dataTree.push(data); + + this.analyzeRecursive(calleeNode.body, data.trace) + } + } + }); + } + } + + private getCalleeBlockStatement (node: ESTree.Node, name: string): TNodeWithBlockStatement|null { + let calleeBlockStatement: TNodeWithBlockStatement|null = null; + + estraverse.traverse(node, { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { + if (Nodes.isFunctionDeclarationNode(node) && node.id.name === name) { + calleeBlockStatement = node.body; + + return estraverse.VisitorOption.Break; + } + + if ( + Nodes.isFunctionExpressionNode(node) && + Nodes.isVariableDeclaratorNode(parentNode) && + Nodes.isIdentifierNode(parentNode.id) && + parentNode.id.name === name + ) { + calleeBlockStatement = node.body; + + return estraverse.VisitorOption.Break; + } + } + }); + + return calleeBlockStatement; + } +} diff --git a/src/hidden-node-appender/HiddenNodeAppender.ts b/src/hidden-node-appender/HiddenNodeAppender.ts new file mode 100644 index 00000000..6255a22b --- /dev/null +++ b/src/hidden-node-appender/HiddenNodeAppender.ts @@ -0,0 +1,78 @@ +import * as ESTree from 'estree'; + +import { TNodeWithBlockStatement } from '../types/TNodeWithBlockStatement'; + +import { IBlockScopeTraceData } from '../interfaces/IBlockScopeTraceData'; + +import { ASTTreeBlockScopeAnalyzer } from './ASTTreeBlockScopeAnalyzer'; +import { NodeUtils } from '../NodeUtils'; +import { Utils } from '../Utils'; + +/** + * This class appends node into a first deepest BlockStatement in order of function calls + * + * For example: + * + * function Foo () { + * var baz = function () { + * + * } + * + * baz(); + * } + * + * foo(); + * + * Appends node into block statement of `baz` function expression. + */ +export class HiddenNodeAppender { + /** + * @param blockScopeBody + * @param node + * @param index + */ + public static appendNode (blockScopeBody: ESTree.Node[], node: ESTree.Node, index: number = 0): void { + const blockScopeTraceData: IBlockScopeTraceData[] = new ASTTreeBlockScopeAnalyzer(blockScopeBody).analyze(); + + if (!blockScopeTraceData.length) { + NodeUtils.prependNode(blockScopeBody, node); + + return; + } + + NodeUtils.prependNode( + HiddenNodeAppender.getOptimalBlockScope(blockScopeTraceData, index).body, + node + ); + } + + /** + * @param blockStatementBodyLength + * @param threshold + */ + public static getIndexByThreshold (blockStatementBodyLength: number, threshold: number = 0.1): number { + if (threshold < 0 || threshold > 1) { + throw new RangeError('`threshold` parameter should has value between 0 and 1'); + } + + return Utils.getRandomGenerator().integer({ + min: 0, + max: Math.round(blockStatementBodyLength * threshold) + }) + } + + /** + * @param blockScopeTraceData + * @param index + * @returns {TNodeWithBlockStatement} + */ + private static getOptimalBlockScope (blockScopeTraceData: IBlockScopeTraceData[], index: number): TNodeWithBlockStatement { + const firstCall: IBlockScopeTraceData = blockScopeTraceData[index]; + + if (firstCall.trace.length) { + return HiddenNodeAppender.getOptimalBlockScope(firstCall.trace, 0); + } else { + return firstCall.callee; + } + } +} diff --git a/src/interfaces/IAnalyzer.d.ts b/src/interfaces/IAnalyzer.d.ts new file mode 100644 index 00000000..fa763931 --- /dev/null +++ b/src/interfaces/IAnalyzer.d.ts @@ -0,0 +1,3 @@ +export interface IAnalyzer { + analyze (): T[]; +} diff --git a/src/interfaces/IBlockScopeTraceData.d.ts b/src/interfaces/IBlockScopeTraceData.d.ts new file mode 100644 index 00000000..51d2e794 --- /dev/null +++ b/src/interfaces/IBlockScopeTraceData.d.ts @@ -0,0 +1,7 @@ +import { TNodeWithBlockStatement } from '../types/TNodeWithBlockStatement'; + +export interface IBlockScopeTraceData { + callee: TNodeWithBlockStatement; + name: string; + trace: IBlockScopeTraceData[]; +} \ No newline at end of file diff --git a/src/interfaces/IObfuscatorOptions.d.ts b/src/interfaces/IObfuscatorOptions.d.ts index a1baf8ff..9039b4d0 100644 --- a/src/interfaces/IObfuscatorOptions.d.ts +++ b/src/interfaces/IObfuscatorOptions.d.ts @@ -5,6 +5,7 @@ export interface IObfuscatorOptions { debugProtection?: boolean; debugProtectionInterval?: boolean; disableConsoleOutput?: boolean; + domainLock?: string[]; encodeUnicodeLiterals?: boolean; reservedNames?: string[]; rotateUnicodeArray?: boolean; @@ -16,6 +17,5 @@ export interface IObfuscatorOptions { unicodeArray?: boolean; unicodeArrayThreshold?: number; wrapUnicodeArrayCalls?: boolean; - domainLock?: string[]; [key: string]: any; } diff --git a/src/interfaces/IOptions.d.ts b/src/interfaces/IOptions.d.ts index 461658bd..a156a6f7 100644 --- a/src/interfaces/IOptions.d.ts +++ b/src/interfaces/IOptions.d.ts @@ -5,6 +5,7 @@ export interface IOptions { readonly debugProtection: boolean; readonly debugProtectionInterval: boolean; readonly disableConsoleOutput: boolean; + readonly domainLock: string[]; readonly encodeUnicodeLiterals: boolean; readonly reservedNames: string[]; readonly rotateUnicodeArray: boolean; @@ -16,5 +17,4 @@ export interface IOptions { readonly unicodeArray: boolean; readonly unicodeArrayThreshold: number; readonly wrapUnicodeArrayCalls: boolean; - readonly domainLock: string[]; } diff --git a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts index 983a0d3c..aa42264b 100644 --- a/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts +++ b/test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts @@ -5,7 +5,7 @@ import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; describe('ConsoleOutputDisableExpressionNode', () => { - it('should correctly append `ConsoleOutputDisableExpressionNode` custom node into the obfuscated code if `disableConsoleOutput` option is set', () => { + it('should correctly appendNode `ConsoleOutputDisableExpressionNode` custom node into the obfuscated code if `disableConsoleOutput` option is set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { @@ -17,7 +17,7 @@ describe('ConsoleOutputDisableExpressionNode', () => { assert.match(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){4,6} in _0x([a-z0-9]){4,6} *= *_0x([a-z0-9]){4}\('0x.*'\)\)/); }); - it('should\'t append `ConsoleOutputDisableExpressionNode` custom node into the obfuscated code if `disableConsoleOutput` option is not set', () => { + it('should\'t appendNode `ConsoleOutputDisableExpressionNode` custom node into the obfuscated code if `disableConsoleOutput` option is not set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { diff --git a/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts b/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts index f19b40fb..cc056fd6 100644 --- a/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts +++ b/test/functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts @@ -5,7 +5,7 @@ import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; describe('DomainLockNode', () => { - it('should correctly append `DomainLockNode` custom node into the obfuscated code if `domainLock` option is set', () => { + it('should correctly appendNode `DomainLockNode` custom node into the obfuscated code if `domainLock` option is set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { @@ -16,7 +16,7 @@ describe('DomainLockNode', () => { assert.match(obfuscationResult.getObfuscatedCode(), /var _0x([a-z0-9]){4,6} *= *new RegExp/); }); - it('should\'t append `DomainLockNode` custom node into the obfuscated code if `domainLock` option is not set', () => { + it('should\'t appendNode `DomainLockNode` custom node into the obfuscated code if `domainLock` option is not set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts index 62cdb826..f4067139 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts @@ -5,7 +5,7 @@ import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; describe('UnicodeArrayCallsWrapper', () => { - it('should correctly append `UnicodeArrayCallsWrapper` custom node into the obfuscated code if `wrapUnicodeArrayCalls` option is set', () => { + it('should correctly appendNode `UnicodeArrayCallsWrapper` custom node into the obfuscated code if `wrapUnicodeArrayCalls` option is set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { @@ -16,7 +16,7 @@ describe('UnicodeArrayCallsWrapper', () => { assert.match(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){4,6}, *0x010\)\];/); }); - it('should\'t append `UnicodeArrayDecodeNode` custom node into the obfuscated code if `wrapUnicodeArrayCalls` option is not set', () => { + it('should\'t appendNode `UnicodeArrayDecodeNode` custom node into the obfuscated code if `wrapUnicodeArrayCalls` option is not set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts index 6f8ebd80..e3fc6058 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts @@ -5,7 +5,7 @@ import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; describe('UnicodeArrayDecodeNode', () => { - it('should correctly append `UnicodeArrayDecodeNode` custom node into the obfuscated code if `encodeUnicodeLiterals` option is set', () => { + it('should correctly appendNode `UnicodeArrayDecodeNode` custom node into the obfuscated code if `encodeUnicodeLiterals` option is set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { @@ -16,7 +16,7 @@ describe('UnicodeArrayDecodeNode', () => { assert.match(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){4,6}\]\)\)/); }); - it('should\'t append `UnicodeArrayDecodeNode` custom node into the obfuscated code if `encodeUnicodeLiterals` option is not set', () => { + it('should\'t appendNode `UnicodeArrayDecodeNode` custom node into the obfuscated code if `encodeUnicodeLiterals` option is not set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts index eb1c2fb0..5382c278 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec.ts @@ -5,7 +5,7 @@ import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; describe('UnicodeArrayNode', () => { - it('should correctly append `UnicodeArrayNode` custom node into the obfuscated code if `unicodeArray` option is set', () => { + it('should correctly appendNode `UnicodeArrayNode` custom node into the obfuscated code if `unicodeArray` option is set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { @@ -16,7 +16,7 @@ describe('UnicodeArrayNode', () => { assert.match(obfuscationResult.getObfuscatedCode(), /^var _0x([a-z0-9]){4} *= *\[/); }); - it('should\'t append `UnicodeArrayNode` custom node into the obfuscated code if `unicodeArray` option is not set', () => { + it('should\'t appendNode `UnicodeArrayNode` custom node into the obfuscated code if `unicodeArray` option is not set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts index 4cac94bf..9dba0ae0 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec.ts @@ -5,7 +5,7 @@ import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; describe('UnicodeArrayRotateFunctionNode', () => { - it('should correctly append `UnicodeArrayRotateFunctionNode` custom node into the obfuscated code if `rotateUnicodeArray` option is set', () => { + it('should correctly appendNode `UnicodeArrayRotateFunctionNode` custom node into the obfuscated code if `rotateUnicodeArray` option is set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { @@ -16,7 +16,7 @@ describe('UnicodeArrayRotateFunctionNode', () => { assert.match(obfuscationResult.getObfuscatedCode(), /while *\(-- *_0x([a-z0-9]){4,6}\) *\{/); }); - it('should\'t append `UnicodeArrayRotateFunctionNode` custom node into the obfuscated code if `rotateUnicodeArray` option is not set', () => { + it('should\'t appendNode `UnicodeArrayRotateFunctionNode` custom node into the obfuscated code if `rotateUnicodeArray` option is not set', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { diff --git a/test/index.spec.ts b/test/index.spec.ts index 5136a0d4..32ae8a9e 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -13,6 +13,8 @@ import './unit-tests/OptionsNormalizer.spec'; import './unit-tests/SourceMapCorrector.spec'; import './unit-tests/Utils.spec'; import './unit-tests/cli/CLIUtils.spec'; +import './unit-tests/hidden-node-appender/ASTTreeBlockScopeAnalyzer-spec'; +import './unit-tests/hidden-node-appender/HiddenNodeAppender-spec'; import './unit-tests/node-obfuscators/CatchClauseObfuscator.spec'; import './unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec'; import './unit-tests/node-obfuscators/FunctionObfuscator.spec'; diff --git a/test/unit-tests/NodeUtils.spec.ts b/test/unit-tests/NodeUtils.spec.ts index 8586360e..dd5da11b 100644 --- a/test/unit-tests/NodeUtils.spec.ts +++ b/test/unit-tests/NodeUtils.spec.ts @@ -42,7 +42,7 @@ describe('NodeUtils', () => { NodeUtils.appendNode(blockStatementNode.body, expressionStatementNode); }); - it('should append given node to a `BlockStatement` node body', () => { + it('should appendNode given node to a `BlockStatement` node body', () => { assert.deepEqual(blockStatementNode, expectedBlockStatementNode); }); diff --git a/test/unit-tests/hidden-node-appender/ASTTreeBlockScopeAnalyzer-spec.ts b/test/unit-tests/hidden-node-appender/ASTTreeBlockScopeAnalyzer-spec.ts new file mode 100644 index 00000000..edec73ae --- /dev/null +++ b/test/unit-tests/hidden-node-appender/ASTTreeBlockScopeAnalyzer-spec.ts @@ -0,0 +1,246 @@ +import * as chai from 'chai'; +import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; + +import { TNodeWithBlockStatement } from '../../../src/types/TNodeWithBlockStatement'; + +import { IBlockScopeTraceData } from '../../../src/interfaces/IBlockScopeTraceData'; + +import { ASTTreeBlockScopeAnalyzer } from '../../../src/hidden-node-appender/ASTTreeBlockScopeAnalyzer'; +import { Nodes } from '../../../src/Nodes'; +import { NodeUtils } from '../../../src/NodeUtils'; + +const assert: any = chai.assert; + +/** + * @param astTree + * @param name + * @returns {ESTree.FunctionDeclaration|null} + */ +function getFunctionDeclarationByName (astTree: ESTree.Node, name: string): ESTree.FunctionDeclaration|null { + let functionDeclarationNode: ESTree.FunctionDeclaration|null = null; + + estraverse.traverse(astTree, { + enter: (node: ESTree.Node): any => { + if ( + Nodes.isFunctionDeclarationNode(node) && + Nodes.isIdentifierNode(node.id) && + node.id.name === name + ) { + functionDeclarationNode = node; + + return estraverse.VisitorOption.Break; + } + } + }); + + return functionDeclarationNode; +} + +/** + * @param astTree + * @param name + * @returns {ESTree.FunctionExpression|null} + */ +function getFunctionExpressionByName (astTree: ESTree.Node, name: string): ESTree.FunctionExpression|null { + let functionExpressionNode: ESTree.FunctionExpression|null = null; + + estraverse.traverse(astTree, { + enter: (node: ESTree.Node): any => { + if ( + Nodes.isVariableDeclaratorNode(node) && + node.init && + Nodes.isFunctionExpressionNode(node.init) && + Nodes.isIdentifierNode(node.id) && + node.id.name === name + ) { + functionExpressionNode = node.init; + + return estraverse.VisitorOption.Break; + } + } + }); + + return functionExpressionNode; +} + +describe('ASTTreeBlockScopeAnalyzer', () => { + describe('analyze (): IBlockScopeTraceData[]', () => { + let ASTTree: TNodeWithBlockStatement, + blockScopeTraceData: IBlockScopeTraceData[], + expectedBlockScopeTraceData: IBlockScopeTraceData[]; + + it('should returns correct BlockScopeTraceData - variant #1', () => { + ASTTree = NodeUtils.convertCodeToStructure(` + function foo () { + + } + + function bar () { + function inner1 () { + + } + + function inner2 () { + var inner3 = function () { + + } + + inner3(); + } + + inner2(); + inner1(); + } + + function baz () { + + } + + baz(); + foo(); + bar(); + `, false); + + expectedBlockScopeTraceData = [ + { + name: 'baz', + callee: (getFunctionDeclarationByName(ASTTree, 'baz')).body, + trace: [] + }, + { + name: 'foo', + callee: (getFunctionDeclarationByName(ASTTree, 'foo')).body, + trace: [] + }, + { + name: 'bar', + callee: (getFunctionDeclarationByName(ASTTree, 'bar')).body, + trace: [ + { + name: 'inner2', + callee: (getFunctionDeclarationByName(ASTTree, 'inner2')).body, + trace: [ + { + name: 'inner3', + callee: (getFunctionExpressionByName(ASTTree, 'inner3')).body, + trace: [] + }, + ] + }, + { + name: 'inner1', + callee: (getFunctionDeclarationByName(ASTTree, 'inner1')).body, + trace: [] + }, + ] + } + ]; + + blockScopeTraceData = new ASTTreeBlockScopeAnalyzer(ASTTree.body).analyze(); + + assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); + }); + + it('should returns correct BlockScopeTraceData - variant #2', () => { + ASTTree = NodeUtils.convertCodeToStructure(` + bar(); + + function foo () { + + } + + function bar () { + + } + + function baz () { + function inner1 () { + + } + + inner1(); + } + + baz(); + foo(); + `, false); + + expectedBlockScopeTraceData = [ + { + name: 'bar', + callee: (getFunctionDeclarationByName(ASTTree, 'bar')).body, + trace: [] + }, + { + name: 'baz', + callee: (getFunctionDeclarationByName(ASTTree, 'baz')).body, + trace: [ + { + name: 'inner1', + callee: (getFunctionDeclarationByName(ASTTree, 'inner1')).body, + trace: [] + }, + ] + }, + { + name: 'foo', + callee: (getFunctionDeclarationByName(ASTTree, 'foo')).body, + trace: [] + } + ]; + + blockScopeTraceData = new ASTTreeBlockScopeAnalyzer(ASTTree.body).analyze(); + + assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); + }); + + it('should returns correct BlockScopeTraceData - variant #3', () => { + ASTTree = NodeUtils.convertCodeToStructure(` + bar(); + + function bar () { + + } + `, false); + + expectedBlockScopeTraceData = [ + { + name: 'bar', + callee: (getFunctionDeclarationByName(ASTTree, 'bar')).body, + trace: [] + } + ]; + + blockScopeTraceData = new ASTTreeBlockScopeAnalyzer(ASTTree.body).analyze(); + + assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); + }); + + it('should returns correct BlockScopeTraceData - variant #4', () => { + ASTTree = NodeUtils.convertCodeToStructure(` + function bar () { + + } + `, false); + + expectedBlockScopeTraceData = []; + + blockScopeTraceData = new ASTTreeBlockScopeAnalyzer(ASTTree.body).analyze(); + + assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); + }); + + it('should returns correct BlockScopeTraceData - variant #5', () => { + ASTTree = NodeUtils.convertCodeToStructure(` + bar(); + `, false); + + expectedBlockScopeTraceData = []; + + blockScopeTraceData = new ASTTreeBlockScopeAnalyzer(ASTTree.body).analyze(); + + assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); + }); + }); +}); diff --git a/test/unit-tests/hidden-node-appender/HiddenNodeAppender-spec.ts b/test/unit-tests/hidden-node-appender/HiddenNodeAppender-spec.ts new file mode 100644 index 00000000..89e8d8d9 --- /dev/null +++ b/test/unit-tests/hidden-node-appender/HiddenNodeAppender-spec.ts @@ -0,0 +1,302 @@ +import * as chai from 'chai'; +import * as ESTree from 'estree'; + +import { HiddenNodeAppender } from '../../../src/hidden-node-appender/HiddenNodeAppender'; +import { NodeUtils } from '../../../src/NodeUtils'; + +const assert: any = chai.assert; + +describe('ASTTreeBlockScopeAnalyzer', () => { + describe('appendNode (blockScopeNode: TNodeWithBlockStatement, node: ESTree.Node): void', () => { + let astTree: ESTree.Program, + expectedAstTree: ESTree.Program, + node: ESTree.Node; + + beforeEach(() => { + node = NodeUtils.convertCodeToStructure(` + var test = 1; + `); + }); + + it('should append node into first and deepest function call in calls trace - variant #1', () => { + astTree = NodeUtils.convertCodeToStructure(` + function foo () { + + } + + function bar () { + function inner1 () { + + } + + function inner2 () { + var inner3 = function () { + + } + + inner3(); + } + + inner2(); + inner1(); + } + + function baz () { + + } + + baz(); + foo(); + bar(); + `, false); + + expectedAstTree = NodeUtils.convertCodeToStructure(` + function foo () { + + } + + function bar () { + function inner1 () { + + } + + function inner2 () { + var inner3 = function () { + } + + inner3(); + } + + inner2(); + inner1(); + } + + function baz () { + var test = 1; + } + + baz(); + foo(); + bar(); + `, false); + + HiddenNodeAppender.appendNode(astTree.body, node); + + NodeUtils.parentize(astTree); + + assert.deepEqual(astTree, expectedAstTree); + }); + + it('should append node into first and deepest function call in calls trace - variant #2', () => { + astTree = NodeUtils.convertCodeToStructure(` + function foo () { + + } + + function bar () { + function inner1 () { + + } + + function inner2 () { + var inner3 = function () { + + } + + inner3(); + } + + inner2(); + inner1(); + } + + function baz () { + + } + + bar(); + baz(); + foo(); + `, false); + + expectedAstTree = NodeUtils.convertCodeToStructure(` + function foo () { + + } + + function bar () { + function inner1 () { + + } + + function inner2 () { + var inner3 = function () { + var test = 1; + } + + inner3(); + } + + inner2(); + inner1(); + } + + function baz () { + + } + + bar(); + baz(); + foo(); + `, false); + + HiddenNodeAppender.appendNode(astTree.body, node); + + NodeUtils.parentize(astTree); + + assert.deepEqual(astTree, expectedAstTree); + }); + + describe('append by specific index', () => { + let astTree: ESTree.Program; + + beforeEach(() => { + astTree = NodeUtils.convertCodeToStructure(` + function foo () { + + } + + function bar () { + function inner1 () { + + } + + function inner2 () { + var inner3 = function () { + + } + + inner3(); + } + + inner2(); + inner1(); + } + + function baz () { + + } + + bar(); + baz(); + foo(); + `, false); + }); + + it('should append node into deepest function call by specified index in calls trace - variant #1', () => { + expectedAstTree = NodeUtils.convertCodeToStructure(` + function foo () { + var test = 1; + } + + function bar () { + function inner1 () { + + } + + function inner2 () { + var inner3 = function () { + + } + + inner3(); + } + + inner2(); + inner1(); + } + + function baz () { + + } + + bar(); + baz(); + foo(); + `, false); + + HiddenNodeAppender.appendNode(astTree.body, node, 2); + + NodeUtils.parentize(astTree); + + assert.deepEqual(astTree, expectedAstTree); + }); + + it('should append node into deepest function call by specified index in calls trace - variant #2', () => { + expectedAstTree = NodeUtils.convertCodeToStructure(` + function foo () { + + } + + function bar () { + function inner1 () { + + } + + function inner2 () { + var inner3 = function () { + + } + + inner3(); + } + + inner2(); + inner1(); + } + + function baz () { + var test = 1; + } + + bar(); + baz(); + foo(); + `, false); + + HiddenNodeAppender.appendNode(astTree.body, node, 1); + + NodeUtils.parentize(astTree); + + assert.deepEqual(astTree, expectedAstTree); + }); + }); + }); + + describe('getIndexByThreshold (blockStatementBodyLength: number, threshold: number = 0.1): number', () => { + it('should returns random index between 0 and index based on threshold value', () => { + let index: number; + + for (let i = 0; i < 10; i++) { + index = HiddenNodeAppender.getIndexByThreshold(100, 0.1); + + assert.isAtLeast(index, 0); + assert.isAtMost(index, 10); + } + + for (let i = 0; i < 10; i++) { + index = HiddenNodeAppender.getIndexByThreshold(10, 0.5); + + assert.isAtLeast(index, 0); + assert.isAtMost(index, 5); + } + + for (let i = 0; i < 10; i++) { + index = HiddenNodeAppender.getIndexByThreshold(1, 1); + + assert.isAtLeast(index, 0); + assert.isAtMost(index, 1); + } + }); + }); +}); From deef3e5911ed622ffed58372d3a06e8af86c191d Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 2 Oct 2016 23:01:45 +0300 Subject: [PATCH 055/138] ts-lint errors fix --- src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts | 2 +- src/hidden-node-appender/HiddenNodeAppender.ts | 2 +- src/interfaces/IBlockScopeTraceData.d.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts b/src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts index 275a2fff..74dcc2f5 100644 --- a/src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts +++ b/src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts @@ -109,7 +109,7 @@ export class ASTTreeBlockScopeAnalyzer implements IAnalyzer { dataTree.push(data); - this.analyzeRecursive(calleeNode.body, data.trace) + this.analyzeRecursive(calleeNode.body, data.trace); } } }); diff --git a/src/hidden-node-appender/HiddenNodeAppender.ts b/src/hidden-node-appender/HiddenNodeAppender.ts index 6255a22b..1fc85eed 100644 --- a/src/hidden-node-appender/HiddenNodeAppender.ts +++ b/src/hidden-node-appender/HiddenNodeAppender.ts @@ -58,7 +58,7 @@ export class HiddenNodeAppender { return Utils.getRandomGenerator().integer({ min: 0, max: Math.round(blockStatementBodyLength * threshold) - }) + }); } /** diff --git a/src/interfaces/IBlockScopeTraceData.d.ts b/src/interfaces/IBlockScopeTraceData.d.ts index 51d2e794..acdfc71f 100644 --- a/src/interfaces/IBlockScopeTraceData.d.ts +++ b/src/interfaces/IBlockScopeTraceData.d.ts @@ -4,4 +4,4 @@ export interface IBlockScopeTraceData { callee: TNodeWithBlockStatement; name: string; trace: IBlockScopeTraceData[]; -} \ No newline at end of file +} From a3f8b2af2553efe5e8cd64b3796f10d8ef3ddf9d Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 3 Oct 2016 00:43:36 +0300 Subject: [PATCH 056/138] CustomNodeAppender refactoring --- dist/index.js | 496 +++++++++--------- src/NodeUtils.ts | 10 +- ...ScopeAnalyzer.ts => StackTraceAnalyzer.ts} | 38 +- .../CustomNodeAppender.ts} | 18 +- .../ConsoleOutputDisableExpressionNode.ts | 6 +- .../domain-lock-nodes/DomainLockNode.ts | 6 +- .../SelfDefendingUnicodeNode.ts | 6 +- src/interfaces/IAnalyzer.d.ts | 6 +- ...opeTraceData.d.ts => IStackTraceData.d.ts} | 4 +- .../stack-trace-analyzer/variant-1.js | 28 + .../stack-trace-analyzer/variant-2.js | 20 + .../stack-trace-analyzer/variant-3.js | 5 + .../stack-trace-analyzer/variant-4.js | 7 + .../stack-trace-analyzer/variant-5.js | 1 + test/helpers/readFileAsString.ts | 9 + test/index.spec.ts | 4 +- ...zer-spec.ts => StackTraceAnalyzer-spec.ts} | 149 ++---- .../CustomNodeAppender-spec.ts} | 18 +- 18 files changed, 435 insertions(+), 396 deletions(-) rename src/{hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts => StackTraceAnalyzer.ts} (76%) rename src/{hidden-node-appender/HiddenNodeAppender.ts => custom-nodes/CustomNodeAppender.ts} (68%) rename src/interfaces/{IBlockScopeTraceData.d.ts => IStackTraceData.d.ts} (64%) create mode 100644 test/fixtures/stack-trace-analyzer/variant-1.js create mode 100644 test/fixtures/stack-trace-analyzer/variant-2.js create mode 100644 test/fixtures/stack-trace-analyzer/variant-3.js create mode 100644 test/fixtures/stack-trace-analyzer/variant-4.js create mode 100644 test/fixtures/stack-trace-analyzer/variant-5.js create mode 100644 test/helpers/readFileAsString.ts rename test/unit-tests/{hidden-node-appender/ASTTreeBlockScopeAnalyzer-spec.ts => StackTraceAnalyzer-spec.ts} (63%) rename test/unit-tests/{hidden-node-appender/HiddenNodeAppender-spec.ts => custom-nodes/CustomNodeAppender-spec.ts} (93%) diff --git a/dist/index.js b/dist/index.js index 789c9127..851a6e87 100644 --- a/dist/index.js +++ b/dist/index.js @@ -103,7 +103,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var chance_1 = __webpack_require__(73); -var JSFuck_1 = __webpack_require__(18); +var JSFuck_1 = __webpack_require__(19); var Utils = function () { function Utils() { @@ -257,7 +257,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__(21); +var esprima = __webpack_require__(22); var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(6); var Nodes_1 = __webpack_require__(2); @@ -291,12 +291,12 @@ var NodeUtils = function () { }, { key: 'convertCodeToStructure', value: function convertCodeToStructure(code) { - var getFirstBlockStatementNodeByIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var getBlockStatementNodeByIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var structure = esprima.parse(code); NodeUtils.addXVerbatimPropertyToLiterals(structure); NodeUtils.parentize(structure); - if (!getFirstBlockStatementNodeByIndex) { + if (!getBlockStatementNodeByIndex) { return structure; } return NodeUtils.getBlockStatementNodeByIndex(structure); @@ -656,8 +656,8 @@ 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__(29); -var JavaScriptObfuscatorInternal_1 = __webpack_require__(24); +var JavaScriptObfuscatorCLI_1 = __webpack_require__(30); +var JavaScriptObfuscatorInternal_1 = __webpack_require__(25); var JavaScriptObfuscator = function () { function JavaScriptObfuscator() { @@ -813,7 +813,8 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { exports.IdentifierReplacer = IdentifierReplacer; /***/ }, -/* 15 */ +/* 15 */, +/* 16 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -828,7 +829,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 AbstractReplacer_1 = __webpack_require__(13); -var NumberLiteralReplacer_1 = __webpack_require__(19); +var NumberLiteralReplacer_1 = __webpack_require__(20); var Utils_1 = __webpack_require__(0); var StringLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -888,7 +889,7 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { exports.StringLiteralReplacer = StringLiteralReplacer; /***/ }, -/* 16 */ +/* 17 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -915,7 +916,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ }); /***/ }, -/* 17 */ +/* 18 */ /***/ function(module, exports) { "use strict"; @@ -956,7 +957,7 @@ var ObfuscationResult = function () { exports.ObfuscationResult = ObfuscationResult; /***/ }, -/* 18 */ +/* 19 */ /***/ function(module, exports) { "use strict"; @@ -1021,7 +1022,7 @@ exports.JSFuck = { }; /***/ }, -/* 19 */ +/* 20 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1064,7 +1065,7 @@ var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { exports.NumberLiteralReplacer = NumberLiteralReplacer; /***/ }, -/* 20 */ +/* 21 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1091,25 +1092,25 @@ exports.DEFAULT_PRESET = Object.freeze({ }); /***/ }, -/* 21 */ +/* 22 */ /***/ function(module, exports) { module.exports = require("esprima"); /***/ }, -/* 22 */ +/* 23 */ /***/ function(module, exports) { module.exports = require("path"); /***/ }, -/* 23 */ +/* 24 */ /***/ function(module, exports) { module.exports = require("babel-polyfill"); /***/ }, -/* 24 */ +/* 25 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1119,12 +1120,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 esprima = __webpack_require__(21); +var esprima = __webpack_require__(22); var escodegen = __webpack_require__(11); -var ObfuscationResult_1 = __webpack_require__(17); -var Obfuscator_1 = __webpack_require__(25); +var ObfuscationResult_1 = __webpack_require__(18); +var Obfuscator_1 = __webpack_require__(26); var Options_1 = __webpack_require__(56); -var SourceMapCorrector_1 = __webpack_require__(26); +var SourceMapCorrector_1 = __webpack_require__(27); var JavaScriptObfuscatorInternal = function () { function JavaScriptObfuscatorInternal(sourceCode) { @@ -1177,7 +1178,7 @@ JavaScriptObfuscatorInternal.escodegenParams = { exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; /***/ }, -/* 25 */ +/* 26 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1279,7 +1280,7 @@ var Obfuscator = function () { exports.Obfuscator = Obfuscator; /***/ }, -/* 26 */ +/* 27 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1290,7 +1291,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 SourceMapMode_1 = __webpack_require__(12); -var ObfuscationResult_1 = __webpack_require__(17); +var ObfuscationResult_1 = __webpack_require__(18); var Utils_1 = __webpack_require__(0); var SourceMapCorrector = function () { @@ -1337,7 +1338,7 @@ var SourceMapCorrector = function () { exports.SourceMapCorrector = SourceMapCorrector; /***/ }, -/* 27 */ +/* 28 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1394,7 +1395,7 @@ var UnicodeArray = function () { exports.UnicodeArray = UnicodeArray; /***/ }, -/* 28 */ +/* 29 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1406,7 +1407,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var fs = __webpack_require__(76); var mkdirp = __webpack_require__(77); -var path = __webpack_require__(22); +var path = __webpack_require__(23); var Utils_1 = __webpack_require__(0); var CLIUtils = function () { @@ -1486,7 +1487,7 @@ CLIUtils.encoding = 'utf8'; exports.CLIUtils = CLIUtils; /***/ }, -/* 29 */ +/* 30 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1497,10 +1498,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 commander = __webpack_require__(75); -var path = __webpack_require__(22); +var path = __webpack_require__(23); var SourceMapMode_1 = __webpack_require__(12); -var DefaultPreset_1 = __webpack_require__(20); -var CLIUtils_1 = __webpack_require__(28); +var DefaultPreset_1 = __webpack_require__(21); +var CLIUtils_1 = __webpack_require__(29); var JavaScriptObfuscator_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(0); @@ -1619,7 +1620,7 @@ var JavaScriptObfuscatorCLI = function () { exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; /***/ }, -/* 30 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1636,7 +1637,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AppendState_1 = __webpack_require__(3); var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(60); var AbstractCustomNode_1 = __webpack_require__(4); -var HiddenNodeAppender_1 = __webpack_require__(41); +var CustomNodeAppender_1 = __webpack_require__(80); var NodeUtils_1 = __webpack_require__(1); var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { @@ -1654,7 +1655,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { _createClass(ConsoleOutputDisableExpressionNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode) { - HiddenNodeAppender_1.HiddenNodeAppender.appendNode(blockScopeNode.body, this.getNode(), HiddenNodeAppender_1.HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + CustomNodeAppender_1.CustomNodeAppender.appendNode(blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); } }, { key: 'getNodeStructure', @@ -1669,7 +1670,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; /***/ }, -/* 31 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1722,7 +1723,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; /***/ }, -/* 32 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1775,7 +1776,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; /***/ }, -/* 33 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1839,7 +1840,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; /***/ }, -/* 34 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1859,7 +1860,7 @@ __webpack_require__(8); var AppendState_1 = __webpack_require__(3); var DomainLockNodeTemplate_1 = __webpack_require__(64); var AbstractCustomNode_1 = __webpack_require__(4); -var HiddenNodeAppender_1 = __webpack_require__(41); +var CustomNodeAppender_1 = __webpack_require__(80); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1878,7 +1879,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { _createClass(DomainLockNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode) { - HiddenNodeAppender_1.HiddenNodeAppender.appendNode(blockScopeNode.body, this.getNode(), HiddenNodeAppender_1.HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + CustomNodeAppender_1.CustomNodeAppender.appendNode(blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); } }, { key: 'getNodeStructure', @@ -1904,7 +1905,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { exports.DomainLockNode = DomainLockNode; /***/ }, -/* 35 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1919,12 +1920,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 AppendState_1 = __webpack_require__(3); -var NoCustomNodesPreset_1 = __webpack_require__(16); +var NoCustomNodesPreset_1 = __webpack_require__(17); var SelfDefendingTemplate_1 = __webpack_require__(65); var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); -var HiddenNodeAppender_1 = __webpack_require__(41); +var CustomNodeAppender_1 = __webpack_require__(80); var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); @@ -1941,7 +1942,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _createClass(SelfDefendingUnicodeNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode) { - HiddenNodeAppender_1.HiddenNodeAppender.appendNode(blockScopeNode.body, this.getNode(), HiddenNodeAppender_1.HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + CustomNodeAppender_1.CustomNodeAppender.appendNode(blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); } }, { key: 'getNodeStructure', @@ -1956,7 +1957,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 36 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2030,7 +2031,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; /***/ }, -/* 37 */ +/* 38 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2048,7 +2049,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(3); -var NoCustomNodesPreset_1 = __webpack_require__(16); +var NoCustomNodesPreset_1 = __webpack_require__(17); var AtobTemplate_1 = __webpack_require__(59); var SelfDefendingTemplate_1 = __webpack_require__(67); var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(68); @@ -2111,7 +2112,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; /***/ }, -/* 38 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2197,7 +2198,7 @@ UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH = 4; exports.UnicodeArrayNode = UnicodeArrayNode; /***/ }, -/* 39 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2215,7 +2216,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(3); -var NoCustomNodesPreset_1 = __webpack_require__(16); +var NoCustomNodesPreset_1 = __webpack_require__(17); var SelfDefendingTemplate_1 = __webpack_require__(70); var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(71); var AbstractCustomNode_1 = __webpack_require__(4); @@ -2281,185 +2282,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, -/* 40 */ -/***/ 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 estraverse = __webpack_require__(5); -var Nodes_1 = __webpack_require__(2); -var NodeUtils_1 = __webpack_require__(1); - -var ASTTreeBlockScopeAnalyzer = function () { - function ASTTreeBlockScopeAnalyzer(blockScopeBody) { - _classCallCheck(this, ASTTreeBlockScopeAnalyzer); - - this.blockScopeTraceData = []; - this.blockScopeBody = blockScopeBody; - } - - _createClass(ASTTreeBlockScopeAnalyzer, [{ - key: 'analyze', - value: function analyze() { - var _this = this; - - if (this.blockScopeBody.length === 1) { - estraverse.traverse(this.blockScopeBody[0], { - enter: function enter(node) { - if (Nodes_1.Nodes.isBlockStatementNode(node)) { - _this.analyzeRecursive(node.body, _this.blockScopeTraceData); - return estraverse.VisitorOption.Skip; - } - } - }); - } else { - this.analyzeRecursive(this.blockScopeBody, this.blockScopeTraceData); - } - return this.blockScopeTraceData; - } - }, { - key: 'analyzeRecursive', - value: function analyzeRecursive(blockScopeBody, dataTree) { - var _this2 = this; - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - var _loop = function _loop() { - var rootNode = _step.value; - - estraverse.traverse(rootNode, { - enter: function enter(node) { - if (Nodes_1.Nodes.isCallExpressionNode(node) && Nodes_1.Nodes.isIdentifierNode(node.callee) && rootNode.parentNode === NodeUtils_1.NodeUtils.getBlockScopeOfNode(node)) { - var calleeNode = _this2.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), node.callee.name); - if (!calleeNode) { - return estraverse.VisitorOption.Break; - } - var data = { - callee: calleeNode, - name: node.callee.name, - trace: [] - }; - dataTree.push(data); - _this2.analyzeRecursive(calleeNode.body, data.trace); - } - } - }); - }; - - for (var _iterator = blockScopeBody[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - _loop(); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - } - }, { - key: 'getCalleeBlockStatement', - value: function getCalleeBlockStatement(node, name) { - var calleeBlockStatement = null; - estraverse.traverse(node, { - enter: function enter(node, parentNode) { - if (Nodes_1.Nodes.isFunctionDeclarationNode(node) && node.id.name === name) { - calleeBlockStatement = node.body; - return estraverse.VisitorOption.Break; - } - if (Nodes_1.Nodes.isFunctionExpressionNode(node) && Nodes_1.Nodes.isVariableDeclaratorNode(parentNode) && Nodes_1.Nodes.isIdentifierNode(parentNode.id) && parentNode.id.name === name) { - calleeBlockStatement = node.body; - return estraverse.VisitorOption.Break; - } - } - }); - return calleeBlockStatement; - } - }]); - - return ASTTreeBlockScopeAnalyzer; -}(); - -exports.ASTTreeBlockScopeAnalyzer = ASTTreeBlockScopeAnalyzer; - -/***/ }, -/* 41 */ -/***/ 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 ASTTreeBlockScopeAnalyzer_1 = __webpack_require__(40); -var NodeUtils_1 = __webpack_require__(1); -var Utils_1 = __webpack_require__(0); - -var HiddenNodeAppender = function () { - function HiddenNodeAppender() { - _classCallCheck(this, HiddenNodeAppender); - } - - _createClass(HiddenNodeAppender, null, [{ - key: 'appendNode', - value: function appendNode(blockScopeBody, node) { - var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - - var blockScopeTraceData = new ASTTreeBlockScopeAnalyzer_1.ASTTreeBlockScopeAnalyzer(blockScopeBody).analyze(); - if (!blockScopeTraceData.length) { - NodeUtils_1.NodeUtils.prependNode(blockScopeBody, node); - return; - } - NodeUtils_1.NodeUtils.prependNode(HiddenNodeAppender.getOptimalBlockScope(blockScopeTraceData, index).body, node); - } - }, { - key: 'getIndexByThreshold', - value: function getIndexByThreshold(blockStatementBodyLength) { - var threshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.1; - - if (threshold < 0 || threshold > 1) { - throw new RangeError('`threshold` parameter should has value between 0 and 1'); - } - return Utils_1.Utils.getRandomGenerator().integer({ - min: 0, - max: Math.round(blockStatementBodyLength * threshold) - }); - } - }, { - key: 'getOptimalBlockScope', - value: function getOptimalBlockScope(blockScopeTraceData, index) { - var firstCall = blockScopeTraceData[index]; - if (firstCall.trace.length) { - return HiddenNodeAppender.getOptimalBlockScope(firstCall.trace, 0); - } else { - return firstCall.callee; - } - } - }]); - - return HiddenNodeAppender; -}(); - -exports.HiddenNodeAppender = HiddenNodeAppender; - -/***/ }, +/* 41 */, /* 42 */ /***/ function(module, exports, __webpack_require__) { @@ -2473,7 +2296,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 AbstractNodesGroup_1 = __webpack_require__(10); -var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(30); +var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(31); var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { _inherits(ConsoleOutputNodesGroup, _AbstractNodesGroup_); @@ -2508,9 +2331,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__(31); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(32); -var DebugProtectionFunctionNode_1 = __webpack_require__(33); +var DebugProtectionFunctionCallNode_1 = __webpack_require__(32); +var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(33); +var DebugProtectionFunctionNode_1 = __webpack_require__(34); var AbstractNodesGroup_1 = __webpack_require__(10); var Utils_1 = __webpack_require__(0); @@ -2553,7 +2376,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 AbstractNodesGroup_1 = __webpack_require__(10); -var DomainLockNode_1 = __webpack_require__(34); +var DomainLockNode_1 = __webpack_require__(35); var DomainLockNodesGroup = function (_AbstractNodesGroup_) { _inherits(DomainLockNodesGroup, _AbstractNodesGroup_); @@ -2589,7 +2412,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 AbstractNodesGroup_1 = __webpack_require__(10); -var SelfDefendingUnicodeNode_1 = __webpack_require__(35); +var SelfDefendingUnicodeNode_1 = __webpack_require__(36); var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { _inherits(SelfDefendingNodesGroup, _AbstractNodesGroup_); @@ -2625,11 +2448,11 @@ 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 AbstractNodesGroup_1 = __webpack_require__(10); -var UnicodeArray_1 = __webpack_require__(27); -var UnicodeArrayCallsWrapper_1 = __webpack_require__(36); -var UnicodeArrayDecodeNode_1 = __webpack_require__(37); -var UnicodeArrayNode_1 = __webpack_require__(38); -var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(39); +var UnicodeArray_1 = __webpack_require__(28); +var UnicodeArrayCallsWrapper_1 = __webpack_require__(37); +var UnicodeArrayDecodeNode_1 = __webpack_require__(38); +var UnicodeArrayNode_1 = __webpack_require__(39); +var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(40); var Utils_1 = __webpack_require__(0); var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { @@ -2921,8 +2744,8 @@ var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); var BooleanLiteralReplacer_1 = __webpack_require__(55); var Nodes_1 = __webpack_require__(2); -var NumberLiteralReplacer_1 = __webpack_require__(19); -var StringLiteralReplacer_1 = __webpack_require__(15); +var NumberLiteralReplacer_1 = __webpack_require__(20); +var StringLiteralReplacer_1 = __webpack_require__(16); var LiteralObfuscator = function (_AbstractNodeObfuscat) { _inherits(LiteralObfuscator, _AbstractNodeObfuscat); @@ -2985,7 +2808,7 @@ var estraverse = __webpack_require__(5); var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); -var StringLiteralReplacer_1 = __webpack_require__(15); +var StringLiteralReplacer_1 = __webpack_require__(16); var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MemberExpressionObfuscator, _AbstractNodeObfuscat); @@ -3069,7 +2892,7 @@ var estraverse = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); -var StringLiteralReplacer_1 = __webpack_require__(15); +var StringLiteralReplacer_1 = __webpack_require__(16); var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MethodDefinitionObfuscator, _AbstractNodeObfuscat); @@ -3289,7 +3112,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 JSFuck_1 = __webpack_require__(18); +var JSFuck_1 = __webpack_require__(19); var AbstractReplacer_1 = __webpack_require__(13); var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -3337,7 +3160,7 @@ var __metadata = undefined && undefined.__metadata || function (k, v) { }; var class_validator_1 = __webpack_require__(74); var TSourceMapMode_1 = __webpack_require__(72); -var DefaultPreset_1 = __webpack_require__(20); +var DefaultPreset_1 = __webpack_require__(21); var OptionsNormalizer_1 = __webpack_require__(57); var ValidationErrorsFormatter_1 = __webpack_require__(58); @@ -3828,10 +3651,189 @@ module.exports = require("mkdirp"); var JavaScriptObfuscator_1 = __webpack_require__(9); if (!global._babelPolyfill) { - __webpack_require__(23); + __webpack_require__(24); } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; +/***/ }, +/* 80 */ +/***/ 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 NodeUtils_1 = __webpack_require__(1); +var StackTraceAnalyzer_1 = __webpack_require__(81); +var Utils_1 = __webpack_require__(0); + +var CustomNodeAppender = function () { + function CustomNodeAppender() { + _classCallCheck(this, CustomNodeAppender); + } + + _createClass(CustomNodeAppender, null, [{ + key: 'appendNode', + value: function appendNode(blockScopeBody, node) { + var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + var blockScopeTraceData = new StackTraceAnalyzer_1.StackTraceAnalyzer(blockScopeBody).analyze(); + if (!blockScopeTraceData.length) { + NodeUtils_1.NodeUtils.prependNode(blockScopeBody, node); + return; + } + NodeUtils_1.NodeUtils.prependNode(CustomNodeAppender.getOptimalBlockScope(blockScopeTraceData, index).body, node); + } + }, { + key: 'getIndexByThreshold', + value: function getIndexByThreshold(blockStatementBodyLength) { + var threshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.1; + + if (threshold < 0 || threshold > 1) { + throw new RangeError('`threshold` parameter should has value between 0 and 1'); + } + return Utils_1.Utils.getRandomGenerator().integer({ + min: 0, + max: Math.round(blockStatementBodyLength * threshold) + }); + } + }, { + key: 'getOptimalBlockScope', + value: function getOptimalBlockScope(blockScopeTraceData, index) { + var firstCall = blockScopeTraceData[index]; + if (firstCall.stackTrace.length) { + return CustomNodeAppender.getOptimalBlockScope(firstCall.stackTrace, 0); + } else { + return firstCall.callee; + } + } + }]); + + return CustomNodeAppender; +}(); + +exports.CustomNodeAppender = CustomNodeAppender; + +/***/ }, +/* 81 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var estraverse = __webpack_require__(5); +var Nodes_1 = __webpack_require__(2); +var NodeUtils_1 = __webpack_require__(1); + +var StackTraceAnalyzer = function () { + function StackTraceAnalyzer(blockScopeBody) { + _classCallCheck(this, StackTraceAnalyzer); + + this.stackTraceData = []; + this.blockScopeBody = blockScopeBody; + } + + _createClass(StackTraceAnalyzer, [{ + key: 'analyze', + value: function analyze() { + var _this = this; + + if (this.blockScopeBody.length === 1) { + estraverse.traverse(this.blockScopeBody[0], { + enter: function enter(node) { + if (Nodes_1.Nodes.isBlockStatementNode(node)) { + _this.analyzeRecursive(node.body, _this.stackTraceData); + return estraverse.VisitorOption.Skip; + } + } + }); + } else { + this.analyzeRecursive(this.blockScopeBody, this.stackTraceData); + } + return this.stackTraceData; + } + }, { + key: 'analyzeRecursive', + value: function analyzeRecursive(blockScopeBody, stackTraceData) { + var _this2 = this; + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + var _loop = function _loop() { + var rootNode = _step.value; + + estraverse.traverse(rootNode, { + enter: function enter(node) { + if (Nodes_1.Nodes.isCallExpressionNode(node) && Nodes_1.Nodes.isIdentifierNode(node.callee) && rootNode.parentNode === NodeUtils_1.NodeUtils.getBlockScopeOfNode(node)) { + var calleeNode = _this2.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), node.callee.name); + if (!calleeNode) { + return estraverse.VisitorOption.Break; + } + var data = { + callee: calleeNode, + name: node.callee.name, + stackTrace: [] + }; + stackTraceData.push(data); + _this2.analyzeRecursive(calleeNode.body, data.stackTrace); + } + } + }); + }; + + for (var _iterator = blockScopeBody[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + _loop(); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + } + }, { + key: 'getCalleeBlockStatement', + value: function getCalleeBlockStatement(node, name) { + var calleeBlockStatement = null; + estraverse.traverse(node, { + enter: function enter(node, parentNode) { + if (Nodes_1.Nodes.isFunctionDeclarationNode(node) && node.id.name === name) { + calleeBlockStatement = node.body; + return estraverse.VisitorOption.Break; + } + if (Nodes_1.Nodes.isFunctionExpressionNode(node) && Nodes_1.Nodes.isVariableDeclaratorNode(parentNode) && Nodes_1.Nodes.isIdentifierNode(parentNode.id) && parentNode.id.name === name) { + calleeBlockStatement = node.body; + return estraverse.VisitorOption.Break; + } + } + }); + return calleeBlockStatement; + } + }]); + + return StackTraceAnalyzer; +}(); + +exports.StackTraceAnalyzer = StackTraceAnalyzer; + /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/NodeUtils.ts b/src/NodeUtils.ts index 6b6f8e40..cbf0a28c 100644 --- a/src/NodeUtils.ts +++ b/src/NodeUtils.ts @@ -50,16 +50,16 @@ export class NodeUtils { /** * @param code - * @param getFirstBlockStatementNodeByIndex - * @returns {ESTree.Node} + * @param getBlockStatementNodeByIndex + * @returns {ESTree.Program|ESTree.Node} */ - public static convertCodeToStructure (code: string, getFirstBlockStatementNodeByIndex: boolean = true): ESTree.Node { - let structure: ESTree.Node = esprima.parse(code); + public static convertCodeToStructure (code: string, getBlockStatementNodeByIndex: boolean = true): ESTree.Program|ESTree.Node { + let structure: ESTree.Program = esprima.parse(code); NodeUtils.addXVerbatimPropertyToLiterals(structure); NodeUtils.parentize(structure); - if (!getFirstBlockStatementNodeByIndex) { + if (!getBlockStatementNodeByIndex) { return structure; } diff --git a/src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts b/src/StackTraceAnalyzer.ts similarity index 76% rename from src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts rename to src/StackTraceAnalyzer.ts index 74dcc2f5..a9a69f63 100644 --- a/src/hidden-node-appender/ASTTreeBlockScopeAnalyzer.ts +++ b/src/StackTraceAnalyzer.ts @@ -1,16 +1,16 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from '../types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from './types/TNodeWithBlockStatement'; -import { IBlockScopeTraceData } from '../interfaces/IBlockScopeTraceData'; +import { IStackTraceData } from './interfaces/IStackTraceData'; +import { IStackTraceAnalyzer } from './interfaces/IAnalyzer'; -import { Nodes } from '../Nodes'; -import { NodeUtils } from '../NodeUtils'; -import { IAnalyzer } from '../interfaces/IAnalyzer'; +import { Nodes } from './Nodes'; +import { NodeUtils } from './NodeUtils'; /** - * This class generates a structure with order of function trace calls + * This class generates a data with code stack trace functions calls * * For example: * @@ -40,16 +40,16 @@ import { IAnalyzer } from '../interfaces/IAnalyzer'; * } * ] */ -export class ASTTreeBlockScopeAnalyzer implements IAnalyzer { +export class StackTraceAnalyzer implements IStackTraceAnalyzer { /** * @type {ESTree.Node[]} */ private blockScopeBody: ESTree.Node[]; /** - * @type {T[]} + * @type {IStackTraceData[]} */ - private blockScopeTraceData: T[] = []; + private stackTraceData: IStackTraceData[] = []; /** * @param blockScopeBody @@ -61,29 +61,29 @@ export class ASTTreeBlockScopeAnalyzer implements IAnalyzer { /** * @returns {T} */ - public analyze (): T[] { + public analyze (): IStackTraceData[] { if (this.blockScopeBody.length === 1) { estraverse.traverse(this.blockScopeBody[0], { enter: (node: ESTree.Node): any => { if (Nodes.isBlockStatementNode(node)) { - this.analyzeRecursive(node.body, this.blockScopeTraceData); + this.analyzeRecursive(node.body, this.stackTraceData); return estraverse.VisitorOption.Skip; } } }); } else { - this.analyzeRecursive(this.blockScopeBody, this.blockScopeTraceData); + this.analyzeRecursive(this.blockScopeBody, this.stackTraceData); } - return this.blockScopeTraceData; + return this.stackTraceData; } /** * @param blockScopeBody - * @param dataTree + * @param stackTraceData */ - private analyzeRecursive (blockScopeBody: ESTree.Node[], dataTree: any): void { + private analyzeRecursive (blockScopeBody: ESTree.Node[], stackTraceData: IStackTraceData[]): void { for (let rootNode of blockScopeBody) { estraverse.traverse(rootNode, { enter: (node: ESTree.Node): any => { @@ -101,15 +101,15 @@ export class ASTTreeBlockScopeAnalyzer implements IAnalyzer { return estraverse.VisitorOption.Break; } - const data: IBlockScopeTraceData = { + const data: IStackTraceData = { callee: calleeNode, name: node.callee.name, - trace: [] + stackTrace: [] }; - dataTree.push(data); + stackTraceData.push(data); - this.analyzeRecursive(calleeNode.body, data.trace); + this.analyzeRecursive(calleeNode.body, data.stackTrace); } } }); diff --git a/src/hidden-node-appender/HiddenNodeAppender.ts b/src/custom-nodes/CustomNodeAppender.ts similarity index 68% rename from src/hidden-node-appender/HiddenNodeAppender.ts rename to src/custom-nodes/CustomNodeAppender.ts index 1fc85eed..7f2438ea 100644 --- a/src/hidden-node-appender/HiddenNodeAppender.ts +++ b/src/custom-nodes/CustomNodeAppender.ts @@ -2,10 +2,10 @@ import * as ESTree from 'estree'; import { TNodeWithBlockStatement } from '../types/TNodeWithBlockStatement'; -import { IBlockScopeTraceData } from '../interfaces/IBlockScopeTraceData'; +import { IStackTraceData } from '../interfaces/IStackTraceData'; -import { ASTTreeBlockScopeAnalyzer } from './ASTTreeBlockScopeAnalyzer'; import { NodeUtils } from '../NodeUtils'; +import { StackTraceAnalyzer } from '../StackTraceAnalyzer'; import { Utils } from '../Utils'; /** @@ -25,14 +25,14 @@ import { Utils } from '../Utils'; * * Appends node into block statement of `baz` function expression. */ -export class HiddenNodeAppender { +export class CustomNodeAppender { /** * @param blockScopeBody * @param node * @param index */ public static appendNode (blockScopeBody: ESTree.Node[], node: ESTree.Node, index: number = 0): void { - const blockScopeTraceData: IBlockScopeTraceData[] = new ASTTreeBlockScopeAnalyzer(blockScopeBody).analyze(); + const blockScopeTraceData: IStackTraceData[] = new StackTraceAnalyzer(blockScopeBody).analyze(); if (!blockScopeTraceData.length) { NodeUtils.prependNode(blockScopeBody, node); @@ -41,7 +41,7 @@ export class HiddenNodeAppender { } NodeUtils.prependNode( - HiddenNodeAppender.getOptimalBlockScope(blockScopeTraceData, index).body, + CustomNodeAppender.getOptimalBlockScope(blockScopeTraceData, index).body, node ); } @@ -66,11 +66,11 @@ export class HiddenNodeAppender { * @param index * @returns {TNodeWithBlockStatement} */ - private static getOptimalBlockScope (blockScopeTraceData: IBlockScopeTraceData[], index: number): TNodeWithBlockStatement { - const firstCall: IBlockScopeTraceData = blockScopeTraceData[index]; + private static getOptimalBlockScope (blockScopeTraceData: IStackTraceData[], index: number): TNodeWithBlockStatement { + const firstCall: IStackTraceData = blockScopeTraceData[index]; - if (firstCall.trace.length) { - return HiddenNodeAppender.getOptimalBlockScope(firstCall.trace, 0); + if (firstCall.stackTrace.length) { + return CustomNodeAppender.getOptimalBlockScope(firstCall.stackTrace, 0); } else { return firstCall.callee; } diff --git a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts index dceb0e6f..f3888e4c 100644 --- a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts +++ b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts @@ -7,7 +7,7 @@ import { AppendState } from '../../enums/AppendState'; import { ConsoleOutputDisableExpressionTemplate } from '../../templates/custom-nodes/console-output-nodes/console-output-disable-expression-node/ConsoleOutputDisableExpressionTemplate'; import { AbstractCustomNode } from '../AbstractCustomNode'; -import { HiddenNodeAppender } from '../../hidden-node-appender/HiddenNodeAppender'; +import { CustomNodeAppender } from '../CustomNodeAppender'; import { NodeUtils } from '../../NodeUtils'; export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { @@ -20,10 +20,10 @@ export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { * @param blockScopeNode */ public appendNode (blockScopeNode: TNodeWithBlockStatement): void { - HiddenNodeAppender.appendNode( + CustomNodeAppender.appendNode( blockScopeNode.body, this.getNode(), - HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) ); } diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts index 6649e279..616d817c 100644 --- a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -9,7 +9,7 @@ import { AppendState } from '../../enums/AppendState'; import { DomainLockNodeTemplate } from '../../templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate'; import { AbstractCustomNode } from '../AbstractCustomNode'; -import { HiddenNodeAppender } from '../../hidden-node-appender/HiddenNodeAppender'; +import { CustomNodeAppender } from '../CustomNodeAppender'; import { NodeUtils } from '../../NodeUtils'; import { Utils } from '../../Utils'; @@ -23,10 +23,10 @@ export class DomainLockNode extends AbstractCustomNode { * @param blockScopeNode */ public appendNode (blockScopeNode: TNodeWithBlockStatement): void { - HiddenNodeAppender.appendNode( + CustomNodeAppender.appendNode( blockScopeNode.body, this.getNode(), - HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) ); } diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index f80f9e86..2df8b792 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts @@ -11,7 +11,7 @@ import { SelfDefendingTemplate } from '../../templates/custom-nodes/self-defendi import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; import { NodeUtils } from '../../NodeUtils'; -import { HiddenNodeAppender } from '../../hidden-node-appender/HiddenNodeAppender'; +import { CustomNodeAppender } from '../CustomNodeAppender'; export class SelfDefendingUnicodeNode extends AbstractCustomNode { /** @@ -23,10 +23,10 @@ export class SelfDefendingUnicodeNode extends AbstractCustomNode { * @param blockScopeNode */ public appendNode (blockScopeNode: TNodeWithBlockStatement): void { - HiddenNodeAppender.appendNode( + CustomNodeAppender.appendNode( blockScopeNode.body, this.getNode(), - HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) ); } diff --git a/src/interfaces/IAnalyzer.d.ts b/src/interfaces/IAnalyzer.d.ts index fa763931..293657f6 100644 --- a/src/interfaces/IAnalyzer.d.ts +++ b/src/interfaces/IAnalyzer.d.ts @@ -1,3 +1,5 @@ -export interface IAnalyzer { - analyze (): T[]; +import { IStackTraceData } from './IStackTraceData'; + +export interface IStackTraceAnalyzer { + analyze (): IStackTraceData[]; } diff --git a/src/interfaces/IBlockScopeTraceData.d.ts b/src/interfaces/IStackTraceData.d.ts similarity index 64% rename from src/interfaces/IBlockScopeTraceData.d.ts rename to src/interfaces/IStackTraceData.d.ts index acdfc71f..e39c58e9 100644 --- a/src/interfaces/IBlockScopeTraceData.d.ts +++ b/src/interfaces/IStackTraceData.d.ts @@ -1,7 +1,7 @@ import { TNodeWithBlockStatement } from '../types/TNodeWithBlockStatement'; -export interface IBlockScopeTraceData { +export interface IStackTraceData { callee: TNodeWithBlockStatement; name: string; - trace: IBlockScopeTraceData[]; + stackTrace: IStackTraceData[]; } diff --git a/test/fixtures/stack-trace-analyzer/variant-1.js b/test/fixtures/stack-trace-analyzer/variant-1.js new file mode 100644 index 00000000..5d6ba3a7 --- /dev/null +++ b/test/fixtures/stack-trace-analyzer/variant-1.js @@ -0,0 +1,28 @@ +function foo () { + +} + +function bar () { + function inner1 () { + + } + + function inner2 () { + var inner3 = function () { + + } + + inner3(); + } + + inner2(); + inner1(); +} + +function baz () { + +} + +baz(); +foo(); +bar(); diff --git a/test/fixtures/stack-trace-analyzer/variant-2.js b/test/fixtures/stack-trace-analyzer/variant-2.js new file mode 100644 index 00000000..9748fe1a --- /dev/null +++ b/test/fixtures/stack-trace-analyzer/variant-2.js @@ -0,0 +1,20 @@ +bar(); + +function foo () { + +} + +function bar () { + +} + +function baz () { + function inner1 () { + + } + + inner1(); +} + +baz(); +foo(); diff --git a/test/fixtures/stack-trace-analyzer/variant-3.js b/test/fixtures/stack-trace-analyzer/variant-3.js new file mode 100644 index 00000000..6eecd2ae --- /dev/null +++ b/test/fixtures/stack-trace-analyzer/variant-3.js @@ -0,0 +1,5 @@ +bar(); + +function bar () { + +} diff --git a/test/fixtures/stack-trace-analyzer/variant-4.js b/test/fixtures/stack-trace-analyzer/variant-4.js new file mode 100644 index 00000000..65d80543 --- /dev/null +++ b/test/fixtures/stack-trace-analyzer/variant-4.js @@ -0,0 +1,7 @@ +function bar () { + +} + +function baz () { + +} diff --git a/test/fixtures/stack-trace-analyzer/variant-5.js b/test/fixtures/stack-trace-analyzer/variant-5.js new file mode 100644 index 00000000..14230da4 --- /dev/null +++ b/test/fixtures/stack-trace-analyzer/variant-5.js @@ -0,0 +1 @@ +bar(); diff --git a/test/helpers/readFileAsString.ts b/test/helpers/readFileAsString.ts new file mode 100644 index 00000000..1d5dde0d --- /dev/null +++ b/test/helpers/readFileAsString.ts @@ -0,0 +1,9 @@ +import * as fs from 'fs'; + +/** + * @param path + * @returns {string} + */ +export function readFileAsString (path: string): string { + return fs.readFileSync(path, 'utf8'); +} \ No newline at end of file diff --git a/test/index.spec.ts b/test/index.spec.ts index 32ae8a9e..3bbf6379 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -13,8 +13,8 @@ import './unit-tests/OptionsNormalizer.spec'; import './unit-tests/SourceMapCorrector.spec'; import './unit-tests/Utils.spec'; import './unit-tests/cli/CLIUtils.spec'; -import './unit-tests/hidden-node-appender/ASTTreeBlockScopeAnalyzer-spec'; -import './unit-tests/hidden-node-appender/HiddenNodeAppender-spec'; +import './unit-tests/custom-nodes/CustomNodeAppender-spec'; +import './unit-tests/StackTraceAnalyzer-spec'; import './unit-tests/node-obfuscators/CatchClauseObfuscator.spec'; import './unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec'; import './unit-tests/node-obfuscators/FunctionObfuscator.spec'; diff --git a/test/unit-tests/hidden-node-appender/ASTTreeBlockScopeAnalyzer-spec.ts b/test/unit-tests/StackTraceAnalyzer-spec.ts similarity index 63% rename from test/unit-tests/hidden-node-appender/ASTTreeBlockScopeAnalyzer-spec.ts rename to test/unit-tests/StackTraceAnalyzer-spec.ts index edec73ae..7d9c0654 100644 --- a/test/unit-tests/hidden-node-appender/ASTTreeBlockScopeAnalyzer-spec.ts +++ b/test/unit-tests/StackTraceAnalyzer-spec.ts @@ -2,13 +2,15 @@ import * as chai from 'chai'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from '../../../src/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../src/types/TNodeWithBlockStatement'; -import { IBlockScopeTraceData } from '../../../src/interfaces/IBlockScopeTraceData'; +import { IStackTraceData } from '../../src/interfaces/IStackTraceData'; -import { ASTTreeBlockScopeAnalyzer } from '../../../src/hidden-node-appender/ASTTreeBlockScopeAnalyzer'; -import { Nodes } from '../../../src/Nodes'; -import { NodeUtils } from '../../../src/NodeUtils'; +import { readFileAsString } from '../helpers/readFileAsString'; + +import { Nodes } from '../../src/Nodes'; +import { NodeUtils } from '../../src/NodeUtils'; +import { StackTraceAnalyzer } from '../../src/StackTraceAnalyzer'; const assert: any = chai.assert; @@ -64,181 +66,144 @@ function getFunctionExpressionByName (astTree: ESTree.Node, name: string): ESTre return functionExpressionNode; } -describe('ASTTreeBlockScopeAnalyzer', () => { - describe('analyze (): IBlockScopeTraceData[]', () => { +describe('StackTraceAnalyzer', () => { + describe('analyze (): IStackTraceData[]', () => { let ASTTree: TNodeWithBlockStatement, - blockScopeTraceData: IBlockScopeTraceData[], - expectedBlockScopeTraceData: IBlockScopeTraceData[]; + blockScopeTraceData: IStackTraceData[], + expectedBlockScopeTraceData: IStackTraceData[]; it('should returns correct BlockScopeTraceData - variant #1', () => { - ASTTree = NodeUtils.convertCodeToStructure(` - function foo () { - - } - - function bar () { - function inner1 () { - - } - - function inner2 () { - var inner3 = function () { - - } - - inner3(); - } - - inner2(); - inner1(); - } - - function baz () { - - } - - baz(); - foo(); - bar(); - `, false); + ASTTree = NodeUtils.convertCodeToStructure( + readFileAsString( + require.resolve('../fixtures/stack-trace-analyzer/variant-1.js') + ), + false + ); expectedBlockScopeTraceData = [ { name: 'baz', callee: (getFunctionDeclarationByName(ASTTree, 'baz')).body, - trace: [] + stackTrace: [] }, { name: 'foo', callee: (getFunctionDeclarationByName(ASTTree, 'foo')).body, - trace: [] + stackTrace: [] }, { name: 'bar', callee: (getFunctionDeclarationByName(ASTTree, 'bar')).body, - trace: [ + stackTrace: [ { name: 'inner2', callee: (getFunctionDeclarationByName(ASTTree, 'inner2')).body, - trace: [ + stackTrace: [ { name: 'inner3', callee: (getFunctionExpressionByName(ASTTree, 'inner3')).body, - trace: [] + stackTrace: [] }, ] }, { name: 'inner1', callee: (getFunctionDeclarationByName(ASTTree, 'inner1')).body, - trace: [] + stackTrace: [] }, ] } ]; - blockScopeTraceData = new ASTTreeBlockScopeAnalyzer(ASTTree.body).analyze(); + blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze(); assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); }); it('should returns correct BlockScopeTraceData - variant #2', () => { - ASTTree = NodeUtils.convertCodeToStructure(` - bar(); - - function foo () { - - } - - function bar () { - - } - - function baz () { - function inner1 () { - - } - - inner1(); - } - - baz(); - foo(); - `, false); + ASTTree = NodeUtils.convertCodeToStructure( + readFileAsString( + require.resolve('../fixtures/stack-trace-analyzer/variant-2.js') + ), + false + ); expectedBlockScopeTraceData = [ { name: 'bar', callee: (getFunctionDeclarationByName(ASTTree, 'bar')).body, - trace: [] + stackTrace: [] }, { name: 'baz', callee: (getFunctionDeclarationByName(ASTTree, 'baz')).body, - trace: [ + stackTrace: [ { name: 'inner1', callee: (getFunctionDeclarationByName(ASTTree, 'inner1')).body, - trace: [] + stackTrace: [] }, ] }, { name: 'foo', callee: (getFunctionDeclarationByName(ASTTree, 'foo')).body, - trace: [] + stackTrace: [] } ]; - blockScopeTraceData = new ASTTreeBlockScopeAnalyzer(ASTTree.body).analyze(); + blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze(); assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); }); it('should returns correct BlockScopeTraceData - variant #3', () => { - ASTTree = NodeUtils.convertCodeToStructure(` - bar(); - - function bar () { - - } - `, false); + ASTTree = NodeUtils.convertCodeToStructure( + readFileAsString( + require.resolve('../fixtures/stack-trace-analyzer/variant-3.js') + ), + false + ); expectedBlockScopeTraceData = [ { name: 'bar', callee: (getFunctionDeclarationByName(ASTTree, 'bar')).body, - trace: [] + stackTrace: [] } ]; - blockScopeTraceData = new ASTTreeBlockScopeAnalyzer(ASTTree.body).analyze(); + blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze(); assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); }); it('should returns correct BlockScopeTraceData - variant #4', () => { - ASTTree = NodeUtils.convertCodeToStructure(` - function bar () { - - } - `, false); + ASTTree = NodeUtils.convertCodeToStructure( + readFileAsString( + require.resolve('../fixtures/stack-trace-analyzer/variant-4.js') + ), + false + ); expectedBlockScopeTraceData = []; - blockScopeTraceData = new ASTTreeBlockScopeAnalyzer(ASTTree.body).analyze(); + blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze(); assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); }); it('should returns correct BlockScopeTraceData - variant #5', () => { - ASTTree = NodeUtils.convertCodeToStructure(` - bar(); - `, false); + ASTTree = NodeUtils.convertCodeToStructure( + readFileAsString( + require.resolve('../fixtures/stack-trace-analyzer/variant-5.js') + ), + false + ); expectedBlockScopeTraceData = []; - blockScopeTraceData = new ASTTreeBlockScopeAnalyzer(ASTTree.body).analyze(); + blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze(); assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); }); diff --git a/test/unit-tests/hidden-node-appender/HiddenNodeAppender-spec.ts b/test/unit-tests/custom-nodes/CustomNodeAppender-spec.ts similarity index 93% rename from test/unit-tests/hidden-node-appender/HiddenNodeAppender-spec.ts rename to test/unit-tests/custom-nodes/CustomNodeAppender-spec.ts index 89e8d8d9..776a31b1 100644 --- a/test/unit-tests/hidden-node-appender/HiddenNodeAppender-spec.ts +++ b/test/unit-tests/custom-nodes/CustomNodeAppender-spec.ts @@ -1,12 +1,12 @@ import * as chai from 'chai'; import * as ESTree from 'estree'; -import { HiddenNodeAppender } from '../../../src/hidden-node-appender/HiddenNodeAppender'; +import { CustomNodeAppender } from '../../../src/custom-nodes/CustomNodeAppender'; import { NodeUtils } from '../../../src/NodeUtils'; const assert: any = chai.assert; -describe('ASTTreeBlockScopeAnalyzer', () => { +describe('CustomNodeAppender', () => { describe('appendNode (blockScopeNode: TNodeWithBlockStatement, node: ESTree.Node): void', () => { let astTree: ESTree.Program, expectedAstTree: ESTree.Program, @@ -80,7 +80,7 @@ describe('ASTTreeBlockScopeAnalyzer', () => { bar(); `, false); - HiddenNodeAppender.appendNode(astTree.body, node); + CustomNodeAppender.appendNode(astTree.body, node); NodeUtils.parentize(astTree); @@ -150,7 +150,7 @@ describe('ASTTreeBlockScopeAnalyzer', () => { foo(); `, false); - HiddenNodeAppender.appendNode(astTree.body, node); + CustomNodeAppender.appendNode(astTree.body, node); NodeUtils.parentize(astTree); @@ -225,7 +225,7 @@ describe('ASTTreeBlockScopeAnalyzer', () => { foo(); `, false); - HiddenNodeAppender.appendNode(astTree.body, node, 2); + CustomNodeAppender.appendNode(astTree.body, node, 2); NodeUtils.parentize(astTree); @@ -264,7 +264,7 @@ describe('ASTTreeBlockScopeAnalyzer', () => { foo(); `, false); - HiddenNodeAppender.appendNode(astTree.body, node, 1); + CustomNodeAppender.appendNode(astTree.body, node, 1); NodeUtils.parentize(astTree); @@ -278,21 +278,21 @@ describe('ASTTreeBlockScopeAnalyzer', () => { let index: number; for (let i = 0; i < 10; i++) { - index = HiddenNodeAppender.getIndexByThreshold(100, 0.1); + index = CustomNodeAppender.getIndexByThreshold(100, 0.1); assert.isAtLeast(index, 0); assert.isAtMost(index, 10); } for (let i = 0; i < 10; i++) { - index = HiddenNodeAppender.getIndexByThreshold(10, 0.5); + index = CustomNodeAppender.getIndexByThreshold(10, 0.5); assert.isAtLeast(index, 0); assert.isAtMost(index, 5); } for (let i = 0; i < 10; i++) { - index = HiddenNodeAppender.getIndexByThreshold(1, 1); + index = CustomNodeAppender.getIndexByThreshold(1, 1); assert.isAtLeast(index, 0); assert.isAtMost(index, 1); From 2f6c7a9cc7e0a35f9d290dc48e37569c46702c8c Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 3 Oct 2016 01:40:12 +0300 Subject: [PATCH 057/138] CustomNodeAppender refactoring --- dist/index.js | 421 +++++++++--------- src/StackTraceAnalyzer.ts | 45 +- .../stack-trace-analyzer/variant-4.js | 13 +- .../stack-trace-analyzer/variant-5.js | 8 +- .../stack-trace-analyzer/variant-6.js | 1 + test/unit-tests/StackTraceAnalyzer-spec.ts | 103 ++--- 6 files changed, 306 insertions(+), 285 deletions(-) create mode 100644 test/fixtures/stack-trace-analyzer/variant-6.js diff --git a/dist/index.js b/dist/index.js index 851a6e87..cff14c56 100644 --- a/dist/index.js +++ b/dist/index.js @@ -656,7 +656,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var JavaScriptObfuscatorCLI_1 = __webpack_require__(30); +var JavaScriptObfuscatorCLI_1 = __webpack_require__(31); var JavaScriptObfuscatorInternal_1 = __webpack_require__(25); var JavaScriptObfuscator = function () { @@ -813,7 +813,68 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { exports.IdentifierReplacer = IdentifierReplacer; /***/ }, -/* 15 */, +/* 15 */ +/***/ 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 NodeUtils_1 = __webpack_require__(1); +var StackTraceAnalyzer_1 = __webpack_require__(28); +var Utils_1 = __webpack_require__(0); + +var CustomNodeAppender = function () { + function CustomNodeAppender() { + _classCallCheck(this, CustomNodeAppender); + } + + _createClass(CustomNodeAppender, null, [{ + key: 'appendNode', + value: function appendNode(blockScopeBody, node) { + var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + var blockScopeTraceData = new StackTraceAnalyzer_1.StackTraceAnalyzer(blockScopeBody).analyze(); + if (!blockScopeTraceData.length) { + NodeUtils_1.NodeUtils.prependNode(blockScopeBody, node); + return; + } + NodeUtils_1.NodeUtils.prependNode(CustomNodeAppender.getOptimalBlockScope(blockScopeTraceData, index).body, node); + } + }, { + key: 'getIndexByThreshold', + value: function getIndexByThreshold(blockStatementBodyLength) { + var threshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.1; + + if (threshold < 0 || threshold > 1) { + throw new RangeError('`threshold` parameter should has value between 0 and 1'); + } + return Utils_1.Utils.getRandomGenerator().integer({ + min: 0, + max: Math.round(blockStatementBodyLength * threshold) + }); + } + }, { + key: 'getOptimalBlockScope', + value: function getOptimalBlockScope(blockScopeTraceData, index) { + var firstCall = blockScopeTraceData[index]; + if (firstCall.stackTrace.length) { + return CustomNodeAppender.getOptimalBlockScope(firstCall.stackTrace, 0); + } else { + return firstCall.callee; + } + } + }]); + + return CustomNodeAppender; +}(); + +exports.CustomNodeAppender = CustomNodeAppender; + +/***/ }, /* 16 */ /***/ function(module, exports, __webpack_require__) { @@ -1348,6 +1409,128 @@ 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 estraverse = __webpack_require__(5); +var Nodes_1 = __webpack_require__(2); +var NodeUtils_1 = __webpack_require__(1); + +var StackTraceAnalyzer = function () { + function StackTraceAnalyzer(blockScopeBody) { + _classCallCheck(this, StackTraceAnalyzer); + + this.stackTraceData = []; + this.blockScopeBody = blockScopeBody; + } + + _createClass(StackTraceAnalyzer, [{ + key: 'analyze', + value: function analyze() { + var _this = this; + + if (this.blockScopeBody.length === 1) { + estraverse.traverse(this.blockScopeBody[0], { + enter: function enter(node) { + if (Nodes_1.Nodes.isBlockStatementNode(node)) { + _this.analyzeRecursive(node.body, _this.stackTraceData); + return estraverse.VisitorOption.Skip; + } + } + }); + } else { + this.analyzeRecursive(this.blockScopeBody, this.stackTraceData); + } + return this.stackTraceData; + } + }, { + key: 'analyzeRecursive', + value: function analyzeRecursive(blockScopeBody, stackTraceData) { + var _this2 = this; + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + var _loop = function _loop() { + var rootNode = _step.value; + + estraverse.traverse(rootNode, { + enter: function enter(node) { + var calleeNode = null, + name = ''; + if (Nodes_1.Nodes.isCallExpressionNode(node) && rootNode.parentNode === NodeUtils_1.NodeUtils.getBlockScopeOfNode(node)) { + if (Nodes_1.Nodes.isIdentifierNode(node.callee)) { + calleeNode = _this2.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), node.callee.name); + name = node.callee.name; + } + } + if (!calleeNode) { + return; + } + var data = { + callee: calleeNode, + name: name, + stackTrace: [] + }; + stackTraceData.push(data); + _this2.analyzeRecursive(calleeNode.body, data.stackTrace); + } + }); + }; + + for (var _iterator = blockScopeBody[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + _loop(); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + } + }, { + key: 'getCalleeBlockStatement', + value: function getCalleeBlockStatement(node, name) { + var calleeBlockStatement = null; + estraverse.traverse(node, { + enter: function enter(node, parentNode) { + if (Nodes_1.Nodes.isFunctionDeclarationNode(node) && node.id.name === name) { + calleeBlockStatement = node.body; + return estraverse.VisitorOption.Break; + } + if (Nodes_1.Nodes.isFunctionExpressionNode(node) && Nodes_1.Nodes.isVariableDeclaratorNode(parentNode) && Nodes_1.Nodes.isIdentifierNode(parentNode.id) && parentNode.id.name === name) { + calleeBlockStatement = node.body; + return estraverse.VisitorOption.Break; + } + } + }); + return calleeBlockStatement; + } + }]); + + return StackTraceAnalyzer; +}(); + +exports.StackTraceAnalyzer = StackTraceAnalyzer; + +/***/ }, +/* 29 */ +/***/ 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 UnicodeArray = function () { @@ -1395,7 +1578,7 @@ var UnicodeArray = function () { exports.UnicodeArray = UnicodeArray; /***/ }, -/* 29 */ +/* 30 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1487,7 +1670,7 @@ CLIUtils.encoding = 'utf8'; exports.CLIUtils = CLIUtils; /***/ }, -/* 30 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1501,7 +1684,7 @@ var commander = __webpack_require__(75); var path = __webpack_require__(23); var SourceMapMode_1 = __webpack_require__(12); var DefaultPreset_1 = __webpack_require__(21); -var CLIUtils_1 = __webpack_require__(29); +var CLIUtils_1 = __webpack_require__(30); var JavaScriptObfuscator_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(0); @@ -1620,7 +1803,7 @@ var JavaScriptObfuscatorCLI = function () { exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; /***/ }, -/* 31 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1637,7 +1820,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AppendState_1 = __webpack_require__(3); var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(60); var AbstractCustomNode_1 = __webpack_require__(4); -var CustomNodeAppender_1 = __webpack_require__(80); +var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { @@ -1670,7 +1853,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; /***/ }, -/* 32 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1723,7 +1906,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; /***/ }, -/* 33 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1776,7 +1959,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; /***/ }, -/* 34 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1840,7 +2023,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; /***/ }, -/* 35 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1860,7 +2043,7 @@ __webpack_require__(8); var AppendState_1 = __webpack_require__(3); var DomainLockNodeTemplate_1 = __webpack_require__(64); var AbstractCustomNode_1 = __webpack_require__(4); -var CustomNodeAppender_1 = __webpack_require__(80); +var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1905,7 +2088,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { exports.DomainLockNode = DomainLockNode; /***/ }, -/* 36 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1925,7 +2108,7 @@ var SelfDefendingTemplate_1 = __webpack_require__(65); var AbstractCustomNode_1 = __webpack_require__(4); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); -var CustomNodeAppender_1 = __webpack_require__(80); +var CustomNodeAppender_1 = __webpack_require__(15); var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _inherits(SelfDefendingUnicodeNode, _AbstractCustomNode_); @@ -1957,7 +2140,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 37 */ +/* 38 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2031,7 +2214,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; /***/ }, -/* 38 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2112,7 +2295,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; /***/ }, -/* 39 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2198,7 +2381,7 @@ UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH = 4; exports.UnicodeArrayNode = UnicodeArrayNode; /***/ }, -/* 40 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2282,7 +2465,6 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, -/* 41 */, /* 42 */ /***/ function(module, exports, __webpack_require__) { @@ -2296,7 +2478,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 AbstractNodesGroup_1 = __webpack_require__(10); -var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(31); +var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(32); var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { _inherits(ConsoleOutputNodesGroup, _AbstractNodesGroup_); @@ -2331,9 +2513,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__(32); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(33); -var DebugProtectionFunctionNode_1 = __webpack_require__(34); +var DebugProtectionFunctionCallNode_1 = __webpack_require__(33); +var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(34); +var DebugProtectionFunctionNode_1 = __webpack_require__(35); var AbstractNodesGroup_1 = __webpack_require__(10); var Utils_1 = __webpack_require__(0); @@ -2376,7 +2558,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 AbstractNodesGroup_1 = __webpack_require__(10); -var DomainLockNode_1 = __webpack_require__(35); +var DomainLockNode_1 = __webpack_require__(36); var DomainLockNodesGroup = function (_AbstractNodesGroup_) { _inherits(DomainLockNodesGroup, _AbstractNodesGroup_); @@ -2412,7 +2594,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 AbstractNodesGroup_1 = __webpack_require__(10); -var SelfDefendingUnicodeNode_1 = __webpack_require__(36); +var SelfDefendingUnicodeNode_1 = __webpack_require__(37); var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { _inherits(SelfDefendingNodesGroup, _AbstractNodesGroup_); @@ -2448,11 +2630,11 @@ 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 AbstractNodesGroup_1 = __webpack_require__(10); -var UnicodeArray_1 = __webpack_require__(28); -var UnicodeArrayCallsWrapper_1 = __webpack_require__(37); -var UnicodeArrayDecodeNode_1 = __webpack_require__(38); -var UnicodeArrayNode_1 = __webpack_require__(39); -var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(40); +var UnicodeArray_1 = __webpack_require__(29); +var UnicodeArrayCallsWrapper_1 = __webpack_require__(38); +var UnicodeArrayDecodeNode_1 = __webpack_require__(39); +var UnicodeArrayNode_1 = __webpack_require__(40); +var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(41); var Utils_1 = __webpack_require__(0); var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { @@ -3655,185 +3837,6 @@ if (!global._babelPolyfill) { } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; -/***/ }, -/* 80 */ -/***/ 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 NodeUtils_1 = __webpack_require__(1); -var StackTraceAnalyzer_1 = __webpack_require__(81); -var Utils_1 = __webpack_require__(0); - -var CustomNodeAppender = function () { - function CustomNodeAppender() { - _classCallCheck(this, CustomNodeAppender); - } - - _createClass(CustomNodeAppender, null, [{ - key: 'appendNode', - value: function appendNode(blockScopeBody, node) { - var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - - var blockScopeTraceData = new StackTraceAnalyzer_1.StackTraceAnalyzer(blockScopeBody).analyze(); - if (!blockScopeTraceData.length) { - NodeUtils_1.NodeUtils.prependNode(blockScopeBody, node); - return; - } - NodeUtils_1.NodeUtils.prependNode(CustomNodeAppender.getOptimalBlockScope(blockScopeTraceData, index).body, node); - } - }, { - key: 'getIndexByThreshold', - value: function getIndexByThreshold(blockStatementBodyLength) { - var threshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.1; - - if (threshold < 0 || threshold > 1) { - throw new RangeError('`threshold` parameter should has value between 0 and 1'); - } - return Utils_1.Utils.getRandomGenerator().integer({ - min: 0, - max: Math.round(blockStatementBodyLength * threshold) - }); - } - }, { - key: 'getOptimalBlockScope', - value: function getOptimalBlockScope(blockScopeTraceData, index) { - var firstCall = blockScopeTraceData[index]; - if (firstCall.stackTrace.length) { - return CustomNodeAppender.getOptimalBlockScope(firstCall.stackTrace, 0); - } else { - return firstCall.callee; - } - } - }]); - - return CustomNodeAppender; -}(); - -exports.CustomNodeAppender = CustomNodeAppender; - -/***/ }, -/* 81 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var estraverse = __webpack_require__(5); -var Nodes_1 = __webpack_require__(2); -var NodeUtils_1 = __webpack_require__(1); - -var StackTraceAnalyzer = function () { - function StackTraceAnalyzer(blockScopeBody) { - _classCallCheck(this, StackTraceAnalyzer); - - this.stackTraceData = []; - this.blockScopeBody = blockScopeBody; - } - - _createClass(StackTraceAnalyzer, [{ - key: 'analyze', - value: function analyze() { - var _this = this; - - if (this.blockScopeBody.length === 1) { - estraverse.traverse(this.blockScopeBody[0], { - enter: function enter(node) { - if (Nodes_1.Nodes.isBlockStatementNode(node)) { - _this.analyzeRecursive(node.body, _this.stackTraceData); - return estraverse.VisitorOption.Skip; - } - } - }); - } else { - this.analyzeRecursive(this.blockScopeBody, this.stackTraceData); - } - return this.stackTraceData; - } - }, { - key: 'analyzeRecursive', - value: function analyzeRecursive(blockScopeBody, stackTraceData) { - var _this2 = this; - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - var _loop = function _loop() { - var rootNode = _step.value; - - estraverse.traverse(rootNode, { - enter: function enter(node) { - if (Nodes_1.Nodes.isCallExpressionNode(node) && Nodes_1.Nodes.isIdentifierNode(node.callee) && rootNode.parentNode === NodeUtils_1.NodeUtils.getBlockScopeOfNode(node)) { - var calleeNode = _this2.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), node.callee.name); - if (!calleeNode) { - return estraverse.VisitorOption.Break; - } - var data = { - callee: calleeNode, - name: node.callee.name, - stackTrace: [] - }; - stackTraceData.push(data); - _this2.analyzeRecursive(calleeNode.body, data.stackTrace); - } - } - }); - }; - - for (var _iterator = blockScopeBody[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - _loop(); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - } - }, { - key: 'getCalleeBlockStatement', - value: function getCalleeBlockStatement(node, name) { - var calleeBlockStatement = null; - estraverse.traverse(node, { - enter: function enter(node, parentNode) { - if (Nodes_1.Nodes.isFunctionDeclarationNode(node) && node.id.name === name) { - calleeBlockStatement = node.body; - return estraverse.VisitorOption.Break; - } - if (Nodes_1.Nodes.isFunctionExpressionNode(node) && Nodes_1.Nodes.isVariableDeclaratorNode(parentNode) && Nodes_1.Nodes.isIdentifierNode(parentNode.id) && parentNode.id.name === name) { - calleeBlockStatement = node.body; - return estraverse.VisitorOption.Break; - } - } - }); - return calleeBlockStatement; - } - }]); - - return StackTraceAnalyzer; -}(); - -exports.StackTraceAnalyzer = StackTraceAnalyzer; - /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/StackTraceAnalyzer.ts b/src/StackTraceAnalyzer.ts index a9a69f63..c917ff30 100644 --- a/src/StackTraceAnalyzer.ts +++ b/src/StackTraceAnalyzer.ts @@ -87,30 +87,33 @@ export class StackTraceAnalyzer implements IStackTraceAnalyzer { for (let rootNode of blockScopeBody) { estraverse.traverse(rootNode, { enter: (node: ESTree.Node): any => { - if ( - Nodes.isCallExpressionNode(node) && - Nodes.isIdentifierNode(node.callee) && - rootNode.parentNode === NodeUtils.getBlockScopeOfNode(node) - ) { - const calleeNode: TNodeWithBlockStatement|null = this.getCalleeBlockStatement( - NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), - node.callee.name - ); + let calleeNode: TNodeWithBlockStatement|null = null, + name: string = ''; - if (!calleeNode) { - return estraverse.VisitorOption.Break; + if (Nodes.isCallExpressionNode(node) && rootNode.parentNode === NodeUtils.getBlockScopeOfNode(node)) { + if (Nodes.isIdentifierNode(node.callee)) { + calleeNode = this.getCalleeBlockStatement( + NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), + node.callee.name + ); + + name = node.callee.name; } - - const data: IStackTraceData = { - callee: calleeNode, - name: node.callee.name, - stackTrace: [] - }; - - stackTraceData.push(data); - - this.analyzeRecursive(calleeNode.body, data.stackTrace); } + + if (!calleeNode) { + return; + } + + const data: IStackTraceData = { + callee: calleeNode, + name: name, + stackTrace: [] + }; + + stackTraceData.push(data); + + this.analyzeRecursive(calleeNode.body, data.stackTrace); } }); } diff --git a/test/fixtures/stack-trace-analyzer/variant-4.js b/test/fixtures/stack-trace-analyzer/variant-4.js index 65d80543..9d47e308 100644 --- a/test/fixtures/stack-trace-analyzer/variant-4.js +++ b/test/fixtures/stack-trace-analyzer/variant-4.js @@ -1,7 +1,12 @@ -function bar () { +var object = { + foo: function () { -} + }, -function baz () { + bar: function () { -} + } +}; + +object.bar(); +object.foo(); diff --git a/test/fixtures/stack-trace-analyzer/variant-5.js b/test/fixtures/stack-trace-analyzer/variant-5.js index 14230da4..65d80543 100644 --- a/test/fixtures/stack-trace-analyzer/variant-5.js +++ b/test/fixtures/stack-trace-analyzer/variant-5.js @@ -1 +1,7 @@ -bar(); +function bar () { + +} + +function baz () { + +} diff --git a/test/fixtures/stack-trace-analyzer/variant-6.js b/test/fixtures/stack-trace-analyzer/variant-6.js new file mode 100644 index 00000000..14230da4 --- /dev/null +++ b/test/fixtures/stack-trace-analyzer/variant-6.js @@ -0,0 +1 @@ +bar(); diff --git a/test/unit-tests/StackTraceAnalyzer-spec.ts b/test/unit-tests/StackTraceAnalyzer-spec.ts index 7d9c0654..dfac2396 100644 --- a/test/unit-tests/StackTraceAnalyzer-spec.ts +++ b/test/unit-tests/StackTraceAnalyzer-spec.ts @@ -68,144 +68,147 @@ function getFunctionExpressionByName (astTree: ESTree.Node, name: string): ESTre describe('StackTraceAnalyzer', () => { describe('analyze (): IStackTraceData[]', () => { - let ASTTree: TNodeWithBlockStatement, - blockScopeTraceData: IStackTraceData[], - expectedBlockScopeTraceData: IStackTraceData[]; + let astTree: TNodeWithBlockStatement, + stackTraceData: IStackTraceData[], + expectedStackTraceData: IStackTraceData[]; - it('should returns correct BlockScopeTraceData - variant #1', () => { - ASTTree = NodeUtils.convertCodeToStructure( - readFileAsString( - require.resolve('../fixtures/stack-trace-analyzer/variant-1.js') - ), + it('should returns correct IStackTraceData - variant #1', () => { + astTree = NodeUtils.convertCodeToStructure( + readFileAsString('./test/fixtures/stack-trace-analyzer/variant-1.js'), false ); - expectedBlockScopeTraceData = [ + expectedStackTraceData = [ { name: 'baz', - callee: (getFunctionDeclarationByName(ASTTree, 'baz')).body, + callee: (getFunctionDeclarationByName(astTree, 'baz')).body, stackTrace: [] }, { name: 'foo', - callee: (getFunctionDeclarationByName(ASTTree, 'foo')).body, + callee: (getFunctionDeclarationByName(astTree, 'foo')).body, stackTrace: [] }, { name: 'bar', - callee: (getFunctionDeclarationByName(ASTTree, 'bar')).body, + callee: (getFunctionDeclarationByName(astTree, 'bar')).body, stackTrace: [ { name: 'inner2', - callee: (getFunctionDeclarationByName(ASTTree, 'inner2')).body, + callee: (getFunctionDeclarationByName(astTree, 'inner2')).body, stackTrace: [ { name: 'inner3', - callee: (getFunctionExpressionByName(ASTTree, 'inner3')).body, + callee: (getFunctionExpressionByName(astTree, 'inner3')).body, stackTrace: [] }, ] }, { name: 'inner1', - callee: (getFunctionDeclarationByName(ASTTree, 'inner1')).body, + callee: (getFunctionDeclarationByName(astTree, 'inner1')).body, stackTrace: [] }, ] } ]; - blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze(); + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); - assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); + assert.deepEqual(stackTraceData, expectedStackTraceData); }); it('should returns correct BlockScopeTraceData - variant #2', () => { - ASTTree = NodeUtils.convertCodeToStructure( - readFileAsString( - require.resolve('../fixtures/stack-trace-analyzer/variant-2.js') - ), + astTree = NodeUtils.convertCodeToStructure( + readFileAsString('./test/fixtures/stack-trace-analyzer/variant-2.js'), false ); - expectedBlockScopeTraceData = [ + expectedStackTraceData = [ { name: 'bar', - callee: (getFunctionDeclarationByName(ASTTree, 'bar')).body, + callee: (getFunctionDeclarationByName(astTree, 'bar')).body, stackTrace: [] }, { name: 'baz', - callee: (getFunctionDeclarationByName(ASTTree, 'baz')).body, + callee: (getFunctionDeclarationByName(astTree, 'baz')).body, stackTrace: [ { name: 'inner1', - callee: (getFunctionDeclarationByName(ASTTree, 'inner1')).body, + callee: (getFunctionDeclarationByName(astTree, 'inner1')).body, stackTrace: [] }, ] }, { name: 'foo', - callee: (getFunctionDeclarationByName(ASTTree, 'foo')).body, + callee: (getFunctionDeclarationByName(astTree, 'foo')).body, stackTrace: [] } ]; - blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze(); + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); - assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); + assert.deepEqual(stackTraceData, expectedStackTraceData); }); it('should returns correct BlockScopeTraceData - variant #3', () => { - ASTTree = NodeUtils.convertCodeToStructure( - readFileAsString( - require.resolve('../fixtures/stack-trace-analyzer/variant-3.js') - ), + astTree = NodeUtils.convertCodeToStructure( + readFileAsString('./test/fixtures/stack-trace-analyzer/variant-3.js'), false ); - expectedBlockScopeTraceData = [ + expectedStackTraceData = [ { name: 'bar', - callee: (getFunctionDeclarationByName(ASTTree, 'bar')).body, + callee: (getFunctionDeclarationByName(astTree, 'bar')).body, stackTrace: [] } ]; - blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze(); + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); - assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); + assert.deepEqual(stackTraceData, expectedStackTraceData); }); it('should returns correct BlockScopeTraceData - variant #4', () => { - ASTTree = NodeUtils.convertCodeToStructure( - readFileAsString( - require.resolve('../fixtures/stack-trace-analyzer/variant-4.js') - ), + astTree = NodeUtils.convertCodeToStructure( + readFileAsString('./test/fixtures/stack-trace-analyzer/variant-4.js'), false ); - expectedBlockScopeTraceData = []; + expectedStackTraceData = []; - blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze(); + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); - assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); + assert.deepEqual(stackTraceData, expectedStackTraceData); }); it('should returns correct BlockScopeTraceData - variant #5', () => { - ASTTree = NodeUtils.convertCodeToStructure( - readFileAsString( - require.resolve('../fixtures/stack-trace-analyzer/variant-5.js') - ), + astTree = NodeUtils.convertCodeToStructure( + readFileAsString('./test/fixtures/stack-trace-analyzer/variant-5.js'), false ); - expectedBlockScopeTraceData = []; + expectedStackTraceData = []; - blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze(); + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); - assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData); + assert.deepEqual(stackTraceData, expectedStackTraceData); + }); + + it('should returns correct BlockScopeTraceData - variant #6', () => { + astTree = NodeUtils.convertCodeToStructure( + readFileAsString('./test/fixtures/stack-trace-analyzer/variant-6.js'), + false + ); + + expectedStackTraceData = []; + + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); + + assert.deepEqual(stackTraceData, expectedStackTraceData); }); }); }); From 1f09c4221da9a94edb7642b294d2cc664d283dd4 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 3 Oct 2016 08:35:58 +0300 Subject: [PATCH 058/138] CustomNodeAppender refactoring --- .../{variant-1.js => basic-1.js} | 2 +- .../{variant-2.js => basic-2.js} | 0 ...ariant-3.js => call-before-declaration.js} | 0 ...js => call-expression-of-object-member.js} | 0 .../deep-conditions-nesting.js | 27 +++++++++ .../{variant-5.js => no-call-expressions.js} | 0 .../{variant-6.js => only-call-expression.js} | 0 test/unit-tests/StackTraceAnalyzer-spec.ts | 59 +++++++++++++++---- 8 files changed, 75 insertions(+), 13 deletions(-) rename test/fixtures/stack-trace-analyzer/{variant-1.js => basic-1.js} (95%) rename test/fixtures/stack-trace-analyzer/{variant-2.js => basic-2.js} (100%) rename test/fixtures/stack-trace-analyzer/{variant-3.js => call-before-declaration.js} (100%) rename test/fixtures/stack-trace-analyzer/{variant-4.js => call-expression-of-object-member.js} (100%) create mode 100644 test/fixtures/stack-trace-analyzer/deep-conditions-nesting.js rename test/fixtures/stack-trace-analyzer/{variant-5.js => no-call-expressions.js} (100%) rename test/fixtures/stack-trace-analyzer/{variant-6.js => only-call-expression.js} (100%) diff --git a/test/fixtures/stack-trace-analyzer/variant-1.js b/test/fixtures/stack-trace-analyzer/basic-1.js similarity index 95% rename from test/fixtures/stack-trace-analyzer/variant-1.js rename to test/fixtures/stack-trace-analyzer/basic-1.js index 5d6ba3a7..6fdbd00f 100644 --- a/test/fixtures/stack-trace-analyzer/variant-1.js +++ b/test/fixtures/stack-trace-analyzer/basic-1.js @@ -10,7 +10,7 @@ function bar () { function inner2 () { var inner3 = function () { - } + }; inner3(); } diff --git a/test/fixtures/stack-trace-analyzer/variant-2.js b/test/fixtures/stack-trace-analyzer/basic-2.js similarity index 100% rename from test/fixtures/stack-trace-analyzer/variant-2.js rename to test/fixtures/stack-trace-analyzer/basic-2.js diff --git a/test/fixtures/stack-trace-analyzer/variant-3.js b/test/fixtures/stack-trace-analyzer/call-before-declaration.js similarity index 100% rename from test/fixtures/stack-trace-analyzer/variant-3.js rename to test/fixtures/stack-trace-analyzer/call-before-declaration.js diff --git a/test/fixtures/stack-trace-analyzer/variant-4.js b/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js similarity index 100% rename from test/fixtures/stack-trace-analyzer/variant-4.js rename to test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js diff --git a/test/fixtures/stack-trace-analyzer/deep-conditions-nesting.js b/test/fixtures/stack-trace-analyzer/deep-conditions-nesting.js new file mode 100644 index 00000000..6eea7c0b --- /dev/null +++ b/test/fixtures/stack-trace-analyzer/deep-conditions-nesting.js @@ -0,0 +1,27 @@ +bar(); + +function foo () { + +} + +function bar () { + +} + +function baz () { + function inner1 () { + + } + + if (true) { + switch (true) { + case true: + while (true) { + inner1(); + } + } + } +} + +baz(); +foo(); diff --git a/test/fixtures/stack-trace-analyzer/variant-5.js b/test/fixtures/stack-trace-analyzer/no-call-expressions.js similarity index 100% rename from test/fixtures/stack-trace-analyzer/variant-5.js rename to test/fixtures/stack-trace-analyzer/no-call-expressions.js diff --git a/test/fixtures/stack-trace-analyzer/variant-6.js b/test/fixtures/stack-trace-analyzer/only-call-expression.js similarity index 100% rename from test/fixtures/stack-trace-analyzer/variant-6.js rename to test/fixtures/stack-trace-analyzer/only-call-expression.js diff --git a/test/unit-tests/StackTraceAnalyzer-spec.ts b/test/unit-tests/StackTraceAnalyzer-spec.ts index dfac2396..39047e9d 100644 --- a/test/unit-tests/StackTraceAnalyzer-spec.ts +++ b/test/unit-tests/StackTraceAnalyzer-spec.ts @@ -72,9 +72,9 @@ describe('StackTraceAnalyzer', () => { stackTraceData: IStackTraceData[], expectedStackTraceData: IStackTraceData[]; - it('should returns correct IStackTraceData - variant #1', () => { + it('should returns correct IStackTraceData - variant #1: basic-1', () => { astTree = NodeUtils.convertCodeToStructure( - readFileAsString('./test/fixtures/stack-trace-analyzer/variant-1.js'), + readFileAsString('./test/fixtures/stack-trace-analyzer/basic-1.js'), false ); @@ -118,9 +118,9 @@ describe('StackTraceAnalyzer', () => { assert.deepEqual(stackTraceData, expectedStackTraceData); }); - it('should returns correct BlockScopeTraceData - variant #2', () => { + it('should returns correct BlockScopeTraceData - variant #2: basic-2', () => { astTree = NodeUtils.convertCodeToStructure( - readFileAsString('./test/fixtures/stack-trace-analyzer/variant-2.js'), + readFileAsString('./test/fixtures/stack-trace-analyzer/basic-2.js'), false ); @@ -153,9 +153,44 @@ describe('StackTraceAnalyzer', () => { assert.deepEqual(stackTraceData, expectedStackTraceData); }); - it('should returns correct BlockScopeTraceData - variant #3', () => { + it('should returns correct BlockScopeTraceData - variant #3: deep conditions nesting', () => { astTree = NodeUtils.convertCodeToStructure( - readFileAsString('./test/fixtures/stack-trace-analyzer/variant-3.js'), + readFileAsString('./test/fixtures/stack-trace-analyzer/deep-conditions-nesting.js'), + false + ); + + expectedStackTraceData = [ + { + name: 'bar', + callee: (getFunctionDeclarationByName(astTree, 'bar')).body, + stackTrace: [] + }, + { + name: 'baz', + callee: (getFunctionDeclarationByName(astTree, 'baz')).body, + stackTrace: [ + { + name: 'inner1', + callee: (getFunctionDeclarationByName(astTree, 'inner1')).body, + stackTrace: [] + }, + ] + }, + { + name: 'foo', + callee: (getFunctionDeclarationByName(astTree, 'foo')).body, + stackTrace: [] + } + ]; + + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); + + assert.deepEqual(stackTraceData, expectedStackTraceData); + }); + + it('should returns correct BlockScopeTraceData - variant #4: call before declaration', () => { + astTree = NodeUtils.convertCodeToStructure( + readFileAsString('./test/fixtures/stack-trace-analyzer/call-before-declaration.js'), false ); @@ -172,9 +207,9 @@ describe('StackTraceAnalyzer', () => { assert.deepEqual(stackTraceData, expectedStackTraceData); }); - it('should returns correct BlockScopeTraceData - variant #4', () => { + it('should returns correct BlockScopeTraceData - variant #5: call expression of object member', () => { astTree = NodeUtils.convertCodeToStructure( - readFileAsString('./test/fixtures/stack-trace-analyzer/variant-4.js'), + readFileAsString('./test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js'), false ); @@ -185,9 +220,9 @@ describe('StackTraceAnalyzer', () => { assert.deepEqual(stackTraceData, expectedStackTraceData); }); - it('should returns correct BlockScopeTraceData - variant #5', () => { + it('should returns correct BlockScopeTraceData - variant #6: no call expressions', () => { astTree = NodeUtils.convertCodeToStructure( - readFileAsString('./test/fixtures/stack-trace-analyzer/variant-5.js'), + readFileAsString('./test/fixtures/stack-trace-analyzer/no-call-expressions.js'), false ); @@ -198,9 +233,9 @@ describe('StackTraceAnalyzer', () => { assert.deepEqual(stackTraceData, expectedStackTraceData); }); - it('should returns correct BlockScopeTraceData - variant #6', () => { + it('should returns correct BlockScopeTraceData - variant #7: only call expression', () => { astTree = NodeUtils.convertCodeToStructure( - readFileAsString('./test/fixtures/stack-trace-analyzer/variant-6.js'), + readFileAsString('./test/fixtures/stack-trace-analyzer/only-call-expression.js'), false ); From 87b44bf85218013eac78ced9c5eeda9d7861b72e Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 4 Oct 2016 00:41:57 +0300 Subject: [PATCH 059/138] StackTraceAnalyzer refactoring --- dist/index.js | 639 ++++++++++-------- src/StackTraceAnalyzer.ts | 148 ---- src/custom-nodes/CustomNodeAppender.ts | 27 +- src/interfaces/IStackTraceData.d.ts | 7 - .../stack-trace-analyzer/ICalleeData.d.ts | 6 + .../ICalleeDataExtractor.d.ts | 5 + .../IStackTraceAnalyzer.d.ts} | 0 .../stack-trace-analyzer/IStackTraceData.d.ts | 5 + .../StackTraceAnalyzer.ts | 110 +++ .../FunctionDeclarationCalleeDataExtractor.ts | 75 ++ .../FunctionExpressionCalleeDataExtractor.ts | 80 +++ src/types/TCalleeDataExtractor.d.ts | 5 + src/types/TNodeObfuscator.d.ts | 2 +- .../StackTraceAnalyzer-spec.ts | 14 +- test/index.spec.ts | 2 +- 15 files changed, 670 insertions(+), 455 deletions(-) delete mode 100644 src/StackTraceAnalyzer.ts delete mode 100644 src/interfaces/IStackTraceData.d.ts create mode 100644 src/interfaces/stack-trace-analyzer/ICalleeData.d.ts create mode 100644 src/interfaces/stack-trace-analyzer/ICalleeDataExtractor.d.ts rename src/interfaces/{IAnalyzer.d.ts => stack-trace-analyzer/IStackTraceAnalyzer.d.ts} (100%) create mode 100644 src/interfaces/stack-trace-analyzer/IStackTraceData.d.ts create mode 100644 src/stack-trace-analyzer/StackTraceAnalyzer.ts create mode 100644 src/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts create mode 100644 src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts create mode 100644 src/types/TCalleeDataExtractor.d.ts rename test/{unit-tests => functional-tests/stack-trace-analyzer}/StackTraceAnalyzer-spec.ts (94%) diff --git a/dist/index.js b/dist/index.js index cff14c56..2da09817 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 = 79); +/******/ return __webpack_require__(__webpack_require__.s = 80); /******/ }) /************************************************************************/ /******/ ([ @@ -102,7 +102,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(73); +var chance_1 = __webpack_require__(75); var JSFuck_1 = __webpack_require__(19); var Utils = function () { @@ -258,7 +258,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var escodegen = __webpack_require__(11); var esprima = __webpack_require__(22); -var estraverse = __webpack_require__(5); +var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(6); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); @@ -533,6 +533,12 @@ exports.Nodes = Nodes; /* 3 */ /***/ function(module, exports) { +module.exports = require("estraverse"); + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + "use strict"; "use strict"; @@ -543,7 +549,7 @@ exports.Nodes = Nodes; var AppendState = exports.AppendState; /***/ }, -/* 4 */ +/* 5 */ /***/ function(module, exports) { "use strict"; @@ -577,12 +583,6 @@ var AbstractCustomNode = function () { exports.AbstractCustomNode = AbstractCustomNode; -/***/ }, -/* 5 */ -/***/ function(module, exports) { - -module.exports = require("estraverse"); - /***/ }, /* 6 */ /***/ function(module, exports, __webpack_require__) { @@ -656,7 +656,7 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var JavaScriptObfuscatorCLI_1 = __webpack_require__(31); +var JavaScriptObfuscatorCLI_1 = __webpack_require__(30); var JavaScriptObfuscatorInternal_1 = __webpack_require__(25); var JavaScriptObfuscator = function () { @@ -824,7 +824,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 NodeUtils_1 = __webpack_require__(1); -var StackTraceAnalyzer_1 = __webpack_require__(28); +var StackTraceAnalyzer_1 = __webpack_require__(58); var Utils_1 = __webpack_require__(0); var CustomNodeAppender = function () { @@ -838,11 +838,13 @@ var CustomNodeAppender = function () { var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var blockScopeTraceData = new StackTraceAnalyzer_1.StackTraceAnalyzer(blockScopeBody).analyze(); + var targetBlockScopeBody = void 0; if (!blockScopeTraceData.length) { - NodeUtils_1.NodeUtils.prependNode(blockScopeBody, node); - return; + targetBlockScopeBody = blockScopeBody; + } else { + targetBlockScopeBody = CustomNodeAppender.getOptimalBlockScopeBody(blockScopeTraceData, index); } - NodeUtils_1.NodeUtils.prependNode(CustomNodeAppender.getOptimalBlockScope(blockScopeTraceData, index).body, node); + NodeUtils_1.NodeUtils.prependNode(targetBlockScopeBody, node); } }, { key: 'getIndexByThreshold', @@ -858,13 +860,13 @@ var CustomNodeAppender = function () { }); } }, { - key: 'getOptimalBlockScope', - value: function getOptimalBlockScope(blockScopeTraceData, index) { + key: 'getOptimalBlockScopeBody', + value: function getOptimalBlockScopeBody(blockScopeTraceData, index) { var firstCall = blockScopeTraceData[index]; if (firstCall.stackTrace.length) { - return CustomNodeAppender.getOptimalBlockScope(firstCall.stackTrace, 0); + return CustomNodeAppender.getOptimalBlockScopeBody(firstCall.stackTrace, 0); } else { - return firstCall.callee; + return firstCall.callee.body; } } }]); @@ -1185,7 +1187,7 @@ var esprima = __webpack_require__(22); var escodegen = __webpack_require__(11); var ObfuscationResult_1 = __webpack_require__(18); var Obfuscator_1 = __webpack_require__(26); -var Options_1 = __webpack_require__(56); +var Options_1 = __webpack_require__(55); var SourceMapCorrector_1 = __webpack_require__(27); var JavaScriptObfuscatorInternal = function () { @@ -1251,24 +1253,24 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var estraverse = __webpack_require__(5); -var AppendState_1 = __webpack_require__(3); +var estraverse = __webpack_require__(3); +var AppendState_1 = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); -var CatchClauseObfuscator_1 = __webpack_require__(47); -var ConsoleOutputNodesGroup_1 = __webpack_require__(42); -var DebugProtectionNodesGroup_1 = __webpack_require__(43); -var DomainLockNodesGroup_1 = __webpack_require__(44); -var FunctionDeclarationObfuscator_1 = __webpack_require__(48); -var FunctionObfuscator_1 = __webpack_require__(49); -var LiteralObfuscator_1 = __webpack_require__(50); -var MemberExpressionObfuscator_1 = __webpack_require__(51); -var MethodDefinitionObfuscator_1 = __webpack_require__(52); +var CatchClauseObfuscator_1 = __webpack_require__(46); +var ConsoleOutputNodesGroup_1 = __webpack_require__(41); +var DebugProtectionNodesGroup_1 = __webpack_require__(42); +var DomainLockNodesGroup_1 = __webpack_require__(43); +var FunctionDeclarationObfuscator_1 = __webpack_require__(47); +var FunctionObfuscator_1 = __webpack_require__(48); +var LiteralObfuscator_1 = __webpack_require__(49); +var MemberExpressionObfuscator_1 = __webpack_require__(50); +var MethodDefinitionObfuscator_1 = __webpack_require__(51); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var ObjectExpressionObfuscator_1 = __webpack_require__(53); -var SelfDefendingNodesGroup_1 = __webpack_require__(45); -var UnicodeArrayNodesGroup_1 = __webpack_require__(46); -var VariableDeclarationObfuscator_1 = __webpack_require__(54); +var ObjectExpressionObfuscator_1 = __webpack_require__(52); +var SelfDefendingNodesGroup_1 = __webpack_require__(44); +var UnicodeArrayNodesGroup_1 = __webpack_require__(45); +var VariableDeclarationObfuscator_1 = __webpack_require__(53); var Obfuscator = function () { function Obfuscator(options) { @@ -1409,128 +1411,6 @@ 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 estraverse = __webpack_require__(5); -var Nodes_1 = __webpack_require__(2); -var NodeUtils_1 = __webpack_require__(1); - -var StackTraceAnalyzer = function () { - function StackTraceAnalyzer(blockScopeBody) { - _classCallCheck(this, StackTraceAnalyzer); - - this.stackTraceData = []; - this.blockScopeBody = blockScopeBody; - } - - _createClass(StackTraceAnalyzer, [{ - key: 'analyze', - value: function analyze() { - var _this = this; - - if (this.blockScopeBody.length === 1) { - estraverse.traverse(this.blockScopeBody[0], { - enter: function enter(node) { - if (Nodes_1.Nodes.isBlockStatementNode(node)) { - _this.analyzeRecursive(node.body, _this.stackTraceData); - return estraverse.VisitorOption.Skip; - } - } - }); - } else { - this.analyzeRecursive(this.blockScopeBody, this.stackTraceData); - } - return this.stackTraceData; - } - }, { - key: 'analyzeRecursive', - value: function analyzeRecursive(blockScopeBody, stackTraceData) { - var _this2 = this; - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - var _loop = function _loop() { - var rootNode = _step.value; - - estraverse.traverse(rootNode, { - enter: function enter(node) { - var calleeNode = null, - name = ''; - if (Nodes_1.Nodes.isCallExpressionNode(node) && rootNode.parentNode === NodeUtils_1.NodeUtils.getBlockScopeOfNode(node)) { - if (Nodes_1.Nodes.isIdentifierNode(node.callee)) { - calleeNode = _this2.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), node.callee.name); - name = node.callee.name; - } - } - if (!calleeNode) { - return; - } - var data = { - callee: calleeNode, - name: name, - stackTrace: [] - }; - stackTraceData.push(data); - _this2.analyzeRecursive(calleeNode.body, data.stackTrace); - } - }); - }; - - for (var _iterator = blockScopeBody[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - _loop(); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - } - }, { - key: 'getCalleeBlockStatement', - value: function getCalleeBlockStatement(node, name) { - var calleeBlockStatement = null; - estraverse.traverse(node, { - enter: function enter(node, parentNode) { - if (Nodes_1.Nodes.isFunctionDeclarationNode(node) && node.id.name === name) { - calleeBlockStatement = node.body; - return estraverse.VisitorOption.Break; - } - if (Nodes_1.Nodes.isFunctionExpressionNode(node) && Nodes_1.Nodes.isVariableDeclaratorNode(parentNode) && Nodes_1.Nodes.isIdentifierNode(parentNode.id) && parentNode.id.name === name) { - calleeBlockStatement = node.body; - return estraverse.VisitorOption.Break; - } - } - }); - return calleeBlockStatement; - } - }]); - - return StackTraceAnalyzer; -}(); - -exports.StackTraceAnalyzer = StackTraceAnalyzer; - -/***/ }, -/* 29 */ -/***/ 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 UnicodeArray = function () { @@ -1578,7 +1458,7 @@ var UnicodeArray = function () { exports.UnicodeArray = UnicodeArray; /***/ }, -/* 30 */ +/* 29 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1588,8 +1468,8 @@ 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__(76); -var mkdirp = __webpack_require__(77); +var fs = __webpack_require__(78); +var mkdirp = __webpack_require__(79); var path = __webpack_require__(23); var Utils_1 = __webpack_require__(0); @@ -1670,7 +1550,7 @@ CLIUtils.encoding = 'utf8'; exports.CLIUtils = CLIUtils; /***/ }, -/* 31 */ +/* 30 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1680,11 +1560,11 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var commander = __webpack_require__(75); +var commander = __webpack_require__(77); var path = __webpack_require__(23); var SourceMapMode_1 = __webpack_require__(12); var DefaultPreset_1 = __webpack_require__(21); -var CLIUtils_1 = __webpack_require__(30); +var CLIUtils_1 = __webpack_require__(29); var JavaScriptObfuscator_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(0); @@ -1803,7 +1683,7 @@ var JavaScriptObfuscatorCLI = function () { exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; /***/ }, -/* 32 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1817,9 +1697,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 AppendState_1 = __webpack_require__(3); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(60); -var AbstractCustomNode_1 = __webpack_require__(4); +var AppendState_1 = __webpack_require__(4); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(62); +var AbstractCustomNode_1 = __webpack_require__(5); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -1853,7 +1733,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; /***/ }, -/* 33 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1868,9 +1748,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(61); -var AbstractCustomNode_1 = __webpack_require__(4); +var AppendState_1 = __webpack_require__(4); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(63); +var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { @@ -1906,7 +1786,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; /***/ }, -/* 34 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1921,9 +1801,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(62); -var AbstractCustomNode_1 = __webpack_require__(4); +var AppendState_1 = __webpack_require__(4); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(64); +var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { @@ -1959,7 +1839,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; /***/ }, -/* 35 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1974,9 +1854,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(63); -var AbstractCustomNode_1 = __webpack_require__(4); +var AppendState_1 = __webpack_require__(4); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(65); +var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2023,7 +1903,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; /***/ }, -/* 36 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2040,9 +1920,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); -var DomainLockNodeTemplate_1 = __webpack_require__(64); -var AbstractCustomNode_1 = __webpack_require__(4); +var AppendState_1 = __webpack_require__(4); +var DomainLockNodeTemplate_1 = __webpack_require__(66); +var AbstractCustomNode_1 = __webpack_require__(5); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2088,7 +1968,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { exports.DomainLockNode = DomainLockNode; /***/ }, -/* 37 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2102,10 +1982,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 AppendState_1 = __webpack_require__(3); +var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(17); -var SelfDefendingTemplate_1 = __webpack_require__(65); -var AbstractCustomNode_1 = __webpack_require__(4); +var SelfDefendingTemplate_1 = __webpack_require__(67); +var AbstractCustomNode_1 = __webpack_require__(5); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var CustomNodeAppender_1 = __webpack_require__(15); @@ -2140,7 +2020,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 38 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2157,9 +2037,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(66); -var AbstractCustomNode_1 = __webpack_require__(4); +var AppendState_1 = __webpack_require__(4); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(68); +var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2214,7 +2094,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; /***/ }, -/* 39 */ +/* 38 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2231,12 +2111,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); +var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(17); -var AtobTemplate_1 = __webpack_require__(59); -var SelfDefendingTemplate_1 = __webpack_require__(67); -var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(68); -var AbstractCustomNode_1 = __webpack_require__(4); +var AtobTemplate_1 = __webpack_require__(61); +var SelfDefendingTemplate_1 = __webpack_require__(69); +var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(70); +var AbstractCustomNode_1 = __webpack_require__(5); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2295,7 +2175,7 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; /***/ }, -/* 40 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2312,9 +2192,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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); -var UnicodeArrayTemplate_1 = __webpack_require__(69); -var AbstractCustomNode_1 = __webpack_require__(4); +var AppendState_1 = __webpack_require__(4); +var UnicodeArrayTemplate_1 = __webpack_require__(71); +var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var UnicodeArrayNode = function (_AbstractCustomNode_) { @@ -2381,7 +2261,7 @@ UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH = 4; exports.UnicodeArrayNode = UnicodeArrayNode; /***/ }, -/* 41 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2398,11 +2278,11 @@ 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; } __webpack_require__(8); -var AppendState_1 = __webpack_require__(3); +var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(17); -var SelfDefendingTemplate_1 = __webpack_require__(70); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(71); -var AbstractCustomNode_1 = __webpack_require__(4); +var SelfDefendingTemplate_1 = __webpack_require__(72); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(73); +var AbstractCustomNode_1 = __webpack_require__(5); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2465,7 +2345,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, -/* 42 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2478,7 +2358,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 AbstractNodesGroup_1 = __webpack_require__(10); -var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(32); +var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(31); var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { _inherits(ConsoleOutputNodesGroup, _AbstractNodesGroup_); @@ -2501,7 +2381,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; /***/ }, -/* 43 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2513,9 +2393,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__(33); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(34); -var DebugProtectionFunctionNode_1 = __webpack_require__(35); +var DebugProtectionFunctionCallNode_1 = __webpack_require__(32); +var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(33); +var DebugProtectionFunctionNode_1 = __webpack_require__(34); var AbstractNodesGroup_1 = __webpack_require__(10); var Utils_1 = __webpack_require__(0); @@ -2545,7 +2425,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; /***/ }, -/* 44 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2558,7 +2438,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 AbstractNodesGroup_1 = __webpack_require__(10); -var DomainLockNode_1 = __webpack_require__(36); +var DomainLockNode_1 = __webpack_require__(35); var DomainLockNodesGroup = function (_AbstractNodesGroup_) { _inherits(DomainLockNodesGroup, _AbstractNodesGroup_); @@ -2581,7 +2461,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { exports.DomainLockNodesGroup = DomainLockNodesGroup; /***/ }, -/* 45 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2594,7 +2474,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 AbstractNodesGroup_1 = __webpack_require__(10); -var SelfDefendingUnicodeNode_1 = __webpack_require__(37); +var SelfDefendingUnicodeNode_1 = __webpack_require__(36); var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { _inherits(SelfDefendingNodesGroup, _AbstractNodesGroup_); @@ -2617,7 +2497,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; /***/ }, -/* 46 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2630,11 +2510,11 @@ 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 AbstractNodesGroup_1 = __webpack_require__(10); -var UnicodeArray_1 = __webpack_require__(29); -var UnicodeArrayCallsWrapper_1 = __webpack_require__(38); -var UnicodeArrayDecodeNode_1 = __webpack_require__(39); -var UnicodeArrayNode_1 = __webpack_require__(40); -var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(41); +var UnicodeArray_1 = __webpack_require__(28); +var UnicodeArrayCallsWrapper_1 = __webpack_require__(37); +var UnicodeArrayDecodeNode_1 = __webpack_require__(38); +var UnicodeArrayNode_1 = __webpack_require__(39); +var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(40); var Utils_1 = __webpack_require__(0); var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { @@ -2679,7 +2559,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; /***/ }, -/* 47 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2693,7 +2573,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 estraverse = __webpack_require__(5); +var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); @@ -2750,7 +2630,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 48 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2764,7 +2644,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 estraverse = __webpack_require__(5); +var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); @@ -2825,7 +2705,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 49 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2839,7 +2719,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 estraverse = __webpack_require__(5); +var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); @@ -2906,7 +2786,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 50 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2924,7 +2804,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var BooleanLiteralReplacer_1 = __webpack_require__(55); +var BooleanLiteralReplacer_1 = __webpack_require__(54); var Nodes_1 = __webpack_require__(2); var NumberLiteralReplacer_1 = __webpack_require__(20); var StringLiteralReplacer_1 = __webpack_require__(16); @@ -2971,7 +2851,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 51 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2986,7 +2866,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 escodegen = __webpack_require__(11); -var estraverse = __webpack_require__(5); +var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); @@ -3056,7 +2936,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 52 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3070,7 +2950,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 estraverse = __webpack_require__(5); +var estraverse = __webpack_require__(3); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); @@ -3117,7 +2997,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 53 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3132,7 +3012,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 escodegen = __webpack_require__(11); -var estraverse = __webpack_require__(5); +var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); @@ -3203,7 +3083,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 54 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3217,7 +3097,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 estraverse = __webpack_require__(5); +var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); @@ -3280,7 +3160,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 55 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3319,7 +3199,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 56 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3340,11 +3220,11 @@ 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__(74); -var TSourceMapMode_1 = __webpack_require__(72); +var class_validator_1 = __webpack_require__(76); +var TSourceMapMode_1 = __webpack_require__(74); var DefaultPreset_1 = __webpack_require__(21); -var OptionsNormalizer_1 = __webpack_require__(57); -var ValidationErrorsFormatter_1 = __webpack_require__(58); +var OptionsNormalizer_1 = __webpack_require__(56); +var ValidationErrorsFormatter_1 = __webpack_require__(57); var Options = function Options(obfuscatorOptions) { _classCallCheck(this, Options); @@ -3391,7 +3271,7 @@ exports.Options = Options; var _a; /***/ }, -/* 57 */ +/* 56 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3560,7 +3440,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNo exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 58 */ +/* 57 */ /***/ function(module, exports) { "use strict"; @@ -3626,8 +3506,216 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; +/***/ }, +/* 58 */ +/***/ 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 estraverse = __webpack_require__(3); +var NodeType_1 = __webpack_require__(6); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(59); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(60); +var Nodes_1 = __webpack_require__(2); +var NodeUtils_1 = __webpack_require__(1); + +var StackTraceAnalyzer = function () { + function StackTraceAnalyzer(blockScopeBody) { + _classCallCheck(this, StackTraceAnalyzer); + + this.calleeDataExtractors = new Map([[NodeType_1.NodeType.FunctionDeclaration, FunctionDeclarationCalleeDataExtractor_1.FunctionDeclarationCalleeDataExtractor], [NodeType_1.NodeType.FunctionExpression, FunctionExpressionCalleeDataExtractor_1.FunctionExpressionCalleeDataExtractor]]); + this.blockScopeBody = blockScopeBody; + } + + _createClass(StackTraceAnalyzer, [{ + key: 'analyze', + value: function analyze() { + return this.analyzeRecursive(this.blockScopeBody); + } + }, { + key: 'analyzeRecursive', + value: function analyzeRecursive(blockScopeBody) { + var _this = this; + + var stackTraceData = []; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + var _loop = function _loop() { + var rootNode = _step.value; + + estraverse.traverse(rootNode, { + enter: function enter(node) { + if (!Nodes_1.Nodes.isCallExpressionNode(node) || rootNode.parentNode !== NodeUtils_1.NodeUtils.getBlockScopeOfNode(node)) { + return; + } + _this.calleeDataExtractors.forEach(function (calleeDataExtractor) { + var calleeData = new calleeDataExtractor(blockScopeBody, node.callee).extract(); + if (!calleeData) { + return; + } + stackTraceData.push(Object.assign({}, calleeData, { + stackTrace: _this.analyzeRecursive(calleeData.callee.body) + })); + }); + } + }); + }; + + for (var _iterator = blockScopeBody[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + _loop(); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return stackTraceData; + } + }]); + + return StackTraceAnalyzer; +}(); + +exports.StackTraceAnalyzer = StackTraceAnalyzer; + /***/ }, /* 59 */ +/***/ 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 estraverse = __webpack_require__(3); +var Nodes_1 = __webpack_require__(2); +var NodeUtils_1 = __webpack_require__(1); + +var FunctionDeclarationCalleeDataExtractor = function () { + function FunctionDeclarationCalleeDataExtractor(blockScopeBody, callee) { + _classCallCheck(this, FunctionDeclarationCalleeDataExtractor); + + this.blockScopeBody = blockScopeBody; + this.callee = callee; + } + + _createClass(FunctionDeclarationCalleeDataExtractor, [{ + key: 'extract', + value: function extract() { + var calleeBlockStatement = null; + if (Nodes_1.Nodes.isIdentifierNode(this.callee)) { + calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(this.blockScopeBody[0]), this.callee.name); + } + if (!calleeBlockStatement) { + return null; + } + return { + callee: calleeBlockStatement, + name: this.callee.name + }; + } + }, { + key: 'getCalleeBlockStatement', + value: function getCalleeBlockStatement(node, name) { + var calleeBlockStatement = null; + estraverse.traverse(node, { + enter: function enter(node) { + if (Nodes_1.Nodes.isFunctionDeclarationNode(node) && node.id.name === name) { + calleeBlockStatement = node.body; + return estraverse.VisitorOption.Break; + } + } + }); + return calleeBlockStatement; + } + }]); + + return FunctionDeclarationCalleeDataExtractor; +}(); + +exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; + +/***/ }, +/* 60 */ +/***/ 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 estraverse = __webpack_require__(3); +var Nodes_1 = __webpack_require__(2); +var NodeUtils_1 = __webpack_require__(1); + +var FunctionExpressionCalleeDataExtractor = function () { + function FunctionExpressionCalleeDataExtractor(blockScopeBody, callee) { + _classCallCheck(this, FunctionExpressionCalleeDataExtractor); + + this.blockScopeBody = blockScopeBody; + this.callee = callee; + } + + _createClass(FunctionExpressionCalleeDataExtractor, [{ + key: 'extract', + value: function extract() { + var calleeBlockStatement = null; + if (Nodes_1.Nodes.isIdentifierNode(this.callee)) { + calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(this.blockScopeBody[0]), this.callee.name); + } + if (!calleeBlockStatement) { + return null; + } + return { + callee: calleeBlockStatement, + name: this.callee.name + }; + } + }, { + key: 'getCalleeBlockStatement', + value: function getCalleeBlockStatement(node, name) { + var calleeBlockStatement = null; + estraverse.traverse(node, { + enter: function enter(node, parentNode) { + if (Nodes_1.Nodes.isFunctionExpressionNode(node) && Nodes_1.Nodes.isVariableDeclaratorNode(parentNode) && Nodes_1.Nodes.isIdentifierNode(parentNode.id) && parentNode.id.name === name) { + calleeBlockStatement = node.body; + return estraverse.VisitorOption.Break; + } + } + }); + return calleeBlockStatement; + } + }]); + + return FunctionExpressionCalleeDataExtractor; +}(); + +exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; + +/***/ }, +/* 61 */ /***/ function(module, exports) { "use strict"; @@ -3639,7 +3727,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 60 */ +/* 62 */ /***/ function(module, exports) { "use strict"; @@ -3651,7 +3739,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 61 */ +/* 63 */ /***/ function(module, exports) { "use strict"; @@ -3663,7 +3751,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 62 */ +/* 64 */ /***/ function(module, exports) { "use strict"; @@ -3675,7 +3763,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 63 */ +/* 65 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3688,7 +3776,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 64 */ +/* 66 */ /***/ function(module, exports) { "use strict"; @@ -3700,7 +3788,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 65 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3713,7 +3801,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 66 */ +/* 68 */ /***/ function(module, exports) { "use strict"; @@ -3725,7 +3813,7 @@ function UnicodeArrayCallsWrapperTemplate() { exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 67 */ +/* 69 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3738,7 +3826,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 68 */ +/* 70 */ /***/ function(module, exports) { "use strict"; @@ -3750,7 +3838,7 @@ function UnicodeArrayDecodeNodeTemplate() { exports.UnicodeArrayDecodeNodeTemplate = UnicodeArrayDecodeNodeTemplate; /***/ }, -/* 69 */ +/* 71 */ /***/ function(module, exports) { "use strict"; @@ -3762,7 +3850,7 @@ function UnicodeArrayTemplate() { exports.UnicodeArrayTemplate = UnicodeArrayTemplate; /***/ }, -/* 70 */ +/* 72 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3775,7 +3863,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 71 */ +/* 73 */ /***/ function(module, exports) { "use strict"; @@ -3786,46 +3874,45 @@ function UnicodeArrayRotateFunctionTemplate() { } exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; -/***/ }, -/* 72 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -/***/ }, -/* 73 */ -/***/ function(module, exports) { - -module.exports = require("chance"); - /***/ }, /* 74 */ /***/ function(module, exports) { -module.exports = require("class-validator"); +"use strict"; +"use strict"; /***/ }, /* 75 */ /***/ function(module, exports) { -module.exports = require("commander"); +module.exports = require("chance"); /***/ }, /* 76 */ /***/ function(module, exports) { -module.exports = require("fs"); +module.exports = require("class-validator"); /***/ }, /* 77 */ /***/ function(module, exports) { +module.exports = require("commander"); + +/***/ }, +/* 78 */ +/***/ function(module, exports) { + +module.exports = require("fs"); + +/***/ }, +/* 79 */ +/***/ function(module, exports) { + module.exports = require("mkdirp"); /***/ }, -/* 78 */, -/* 79 */ +/* 80 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/StackTraceAnalyzer.ts b/src/StackTraceAnalyzer.ts deleted file mode 100644 index c917ff30..00000000 --- a/src/StackTraceAnalyzer.ts +++ /dev/null @@ -1,148 +0,0 @@ -import * as estraverse from 'estraverse'; -import * as ESTree from 'estree'; - -import { TNodeWithBlockStatement } from './types/TNodeWithBlockStatement'; - -import { IStackTraceData } from './interfaces/IStackTraceData'; -import { IStackTraceAnalyzer } from './interfaces/IAnalyzer'; - -import { Nodes } from './Nodes'; -import { NodeUtils } from './NodeUtils'; - -/** - * This class generates a data with code stack trace functions calls - * - * For example: - * - * function Foo () { - * var baz = function () { - * - * } - * - * baz(); - * } - * - * foo(); - * - * Will generate a structure like: - * - * [ - * { - * callee: FOO_FUNCTION_NODE - * name: 'Foo', - * trace: [ - * { - * callee: BAZ_FUNCTION_NODE, - * name: 'baz, - * trace: [] - * } - * ] - * } - * ] - */ -export class StackTraceAnalyzer implements IStackTraceAnalyzer { - /** - * @type {ESTree.Node[]} - */ - private blockScopeBody: ESTree.Node[]; - - /** - * @type {IStackTraceData[]} - */ - private stackTraceData: IStackTraceData[] = []; - - /** - * @param blockScopeBody - */ - constructor (blockScopeBody: ESTree.Node[]) { - this.blockScopeBody = blockScopeBody; - } - - /** - * @returns {T} - */ - public analyze (): IStackTraceData[] { - if (this.blockScopeBody.length === 1) { - estraverse.traverse(this.blockScopeBody[0], { - enter: (node: ESTree.Node): any => { - if (Nodes.isBlockStatementNode(node)) { - this.analyzeRecursive(node.body, this.stackTraceData); - - return estraverse.VisitorOption.Skip; - } - } - }); - } else { - this.analyzeRecursive(this.blockScopeBody, this.stackTraceData); - } - - return this.stackTraceData; - } - - /** - * @param blockScopeBody - * @param stackTraceData - */ - private analyzeRecursive (blockScopeBody: ESTree.Node[], stackTraceData: IStackTraceData[]): void { - for (let rootNode of blockScopeBody) { - estraverse.traverse(rootNode, { - enter: (node: ESTree.Node): any => { - let calleeNode: TNodeWithBlockStatement|null = null, - name: string = ''; - - if (Nodes.isCallExpressionNode(node) && rootNode.parentNode === NodeUtils.getBlockScopeOfNode(node)) { - if (Nodes.isIdentifierNode(node.callee)) { - calleeNode = this.getCalleeBlockStatement( - NodeUtils.getBlockScopeOfNode(blockScopeBody[0]), - node.callee.name - ); - - name = node.callee.name; - } - } - - if (!calleeNode) { - return; - } - - const data: IStackTraceData = { - callee: calleeNode, - name: name, - stackTrace: [] - }; - - stackTraceData.push(data); - - this.analyzeRecursive(calleeNode.body, data.stackTrace); - } - }); - } - } - - private getCalleeBlockStatement (node: ESTree.Node, name: string): TNodeWithBlockStatement|null { - let calleeBlockStatement: TNodeWithBlockStatement|null = null; - - estraverse.traverse(node, { - enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { - if (Nodes.isFunctionDeclarationNode(node) && node.id.name === name) { - calleeBlockStatement = node.body; - - return estraverse.VisitorOption.Break; - } - - if ( - Nodes.isFunctionExpressionNode(node) && - Nodes.isVariableDeclaratorNode(parentNode) && - Nodes.isIdentifierNode(parentNode.id) && - parentNode.id.name === name - ) { - calleeBlockStatement = node.body; - - return estraverse.VisitorOption.Break; - } - } - }); - - return calleeBlockStatement; - } -} diff --git a/src/custom-nodes/CustomNodeAppender.ts b/src/custom-nodes/CustomNodeAppender.ts index 7f2438ea..ccb4698c 100644 --- a/src/custom-nodes/CustomNodeAppender.ts +++ b/src/custom-nodes/CustomNodeAppender.ts @@ -1,11 +1,9 @@ import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from '../types/TNodeWithBlockStatement'; - -import { IStackTraceData } from '../interfaces/IStackTraceData'; +import { IStackTraceData } from '../interfaces/stack-trace-analyzer/IStackTraceData'; import { NodeUtils } from '../NodeUtils'; -import { StackTraceAnalyzer } from '../StackTraceAnalyzer'; +import { StackTraceAnalyzer } from '../stack-trace-analyzer/StackTraceAnalyzer'; import { Utils } from '../Utils'; /** @@ -34,16 +32,15 @@ export class CustomNodeAppender { public static appendNode (blockScopeBody: ESTree.Node[], node: ESTree.Node, index: number = 0): void { const blockScopeTraceData: IStackTraceData[] = new StackTraceAnalyzer(blockScopeBody).analyze(); - if (!blockScopeTraceData.length) { - NodeUtils.prependNode(blockScopeBody, node); + let targetBlockScopeBody: ESTree.Node[]; - return; + if (!blockScopeTraceData.length) { + targetBlockScopeBody = blockScopeBody; + } else { + targetBlockScopeBody = CustomNodeAppender.getOptimalBlockScopeBody(blockScopeTraceData, index); } - NodeUtils.prependNode( - CustomNodeAppender.getOptimalBlockScope(blockScopeTraceData, index).body, - node - ); + NodeUtils.prependNode(targetBlockScopeBody, node); } /** @@ -64,15 +61,15 @@ export class CustomNodeAppender { /** * @param blockScopeTraceData * @param index - * @returns {TNodeWithBlockStatement} + * @returns {ESTree.Node[]} */ - private static getOptimalBlockScope (blockScopeTraceData: IStackTraceData[], index: number): TNodeWithBlockStatement { + private static getOptimalBlockScopeBody (blockScopeTraceData: IStackTraceData[], index: number): ESTree.Node[] { const firstCall: IStackTraceData = blockScopeTraceData[index]; if (firstCall.stackTrace.length) { - return CustomNodeAppender.getOptimalBlockScope(firstCall.stackTrace, 0); + return CustomNodeAppender.getOptimalBlockScopeBody(firstCall.stackTrace, 0); } else { - return firstCall.callee; + return firstCall.callee.body; } } } diff --git a/src/interfaces/IStackTraceData.d.ts b/src/interfaces/IStackTraceData.d.ts deleted file mode 100644 index e39c58e9..00000000 --- a/src/interfaces/IStackTraceData.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { TNodeWithBlockStatement } from '../types/TNodeWithBlockStatement'; - -export interface IStackTraceData { - callee: TNodeWithBlockStatement; - name: string; - stackTrace: IStackTraceData[]; -} diff --git a/src/interfaces/stack-trace-analyzer/ICalleeData.d.ts b/src/interfaces/stack-trace-analyzer/ICalleeData.d.ts new file mode 100644 index 00000000..cf42d2df --- /dev/null +++ b/src/interfaces/stack-trace-analyzer/ICalleeData.d.ts @@ -0,0 +1,6 @@ +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; + +export interface ICalleeData { + callee: TNodeWithBlockStatement; + name: string; +} diff --git a/src/interfaces/stack-trace-analyzer/ICalleeDataExtractor.d.ts b/src/interfaces/stack-trace-analyzer/ICalleeDataExtractor.d.ts new file mode 100644 index 00000000..1903565f --- /dev/null +++ b/src/interfaces/stack-trace-analyzer/ICalleeDataExtractor.d.ts @@ -0,0 +1,5 @@ +import { ICalleeData } from './ICalleeData'; + +export interface ICalleeDataExtractor { + extract (): ICalleeData|null; +} diff --git a/src/interfaces/IAnalyzer.d.ts b/src/interfaces/stack-trace-analyzer/IStackTraceAnalyzer.d.ts similarity index 100% rename from src/interfaces/IAnalyzer.d.ts rename to src/interfaces/stack-trace-analyzer/IStackTraceAnalyzer.d.ts diff --git a/src/interfaces/stack-trace-analyzer/IStackTraceData.d.ts b/src/interfaces/stack-trace-analyzer/IStackTraceData.d.ts new file mode 100644 index 00000000..cdd71e63 --- /dev/null +++ b/src/interfaces/stack-trace-analyzer/IStackTraceData.d.ts @@ -0,0 +1,5 @@ +import { ICalleeData } from './ICalleeData'; + +export interface IStackTraceData extends ICalleeData { + stackTrace: IStackTraceData[]; +} diff --git a/src/stack-trace-analyzer/StackTraceAnalyzer.ts b/src/stack-trace-analyzer/StackTraceAnalyzer.ts new file mode 100644 index 00000000..ab0d4919 --- /dev/null +++ b/src/stack-trace-analyzer/StackTraceAnalyzer.ts @@ -0,0 +1,110 @@ +import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; + +import { TCalleeDataExtractor } from '../types/TCalleeDataExtractor'; + +import { ICalleeData } from '../interfaces/stack-trace-analyzer/ICalleeData'; +import { IStackTraceAnalyzer } from '../interfaces/stack-trace-analyzer/IStackTraceAnalyzer'; +import { IStackTraceData } from '../interfaces/stack-trace-analyzer/IStackTraceData'; + +import { NodeType } from '../enums/NodeType'; + +import { FunctionDeclarationCalleeDataExtractor } from './callee-data-extractors/FunctionDeclarationCalleeDataExtractor'; +import { FunctionExpressionCalleeDataExtractor } from './callee-data-extractors/FunctionExpressionCalleeDataExtractor'; +import { Nodes } from '../Nodes'; +import { NodeUtils } from '../NodeUtils'; + +/** + * This class generates a data with code stack trace functions calls + * + * For example: + * + * function Foo () { + * var baz = function () { + * + * } + * + * baz(); + * } + * + * foo(); + * + * Will generate a structure like: + * + * [ + * { + * callee: FOO_FUNCTION_NODE + * name: 'Foo', + * trace: [ + * { + * callee: BAZ_FUNCTION_NODE, + * name: 'baz, + * trace: [] + * } + * ] + * } + * ] + */ +export class StackTraceAnalyzer implements IStackTraceAnalyzer { + /** + * @type {ESTree.Node[]} + */ + private blockScopeBody: ESTree.Node[]; + + /** + * @type {Map} + */ + private calleeDataExtractors: Map = new Map ([ + [NodeType.FunctionDeclaration, FunctionDeclarationCalleeDataExtractor], + [NodeType.FunctionExpression, FunctionExpressionCalleeDataExtractor] + ]); + + /** + * @param blockScopeBody + */ + constructor (blockScopeBody: ESTree.Node[]) { + this.blockScopeBody = blockScopeBody; + } + + /** + * @returns {IStackTraceData[]} + */ + public analyze (): IStackTraceData[] { + return this.analyzeRecursive(this.blockScopeBody); + } + + /** + * @param blockScopeBody + * @returns {IStackTraceData[]} + */ + private analyzeRecursive (blockScopeBody: ESTree.Node[]): IStackTraceData[] { + const stackTraceData: IStackTraceData[] = []; + + for (let rootNode of blockScopeBody) { + estraverse.traverse(rootNode, { + enter: (node: ESTree.Node): any => { + if (!Nodes.isCallExpressionNode(node) || rootNode.parentNode !== NodeUtils.getBlockScopeOfNode(node)) { + return; + } + + this.calleeDataExtractors.forEach((calleeDataExtractor: TCalleeDataExtractor) => { + const calleeData: ICalleeData|null = new calleeDataExtractor( + blockScopeBody, + node.callee + ).extract(); + + if (!calleeData) { + return; + } + + stackTraceData.push(Object.assign({}, calleeData, { + stackTrace: this.analyzeRecursive(calleeData.callee.body) + })); + }); + } + }); + } + + return stackTraceData; + } +} diff --git a/src/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts b/src/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts new file mode 100644 index 00000000..fcf85562 --- /dev/null +++ b/src/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts @@ -0,0 +1,75 @@ +import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; + +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; + +import { ICalleeData } from '../../interfaces/stack-trace-analyzer/ICalleeData'; +import { ICalleeDataExtractor } from '../../interfaces/stack-trace-analyzer/ICalleeDataExtractor'; + +import { Nodes } from '../../Nodes'; +import { NodeUtils } from '../../NodeUtils'; + +export class FunctionDeclarationCalleeDataExtractor implements ICalleeDataExtractor { + /** + * @type {ESTree.Node[]} + */ + private blockScopeBody: ESTree.Node[]; + + /** + * @type {ESTree.Identifier} + */ + private callee: ESTree.Identifier; + + /** + * @param blockScopeBody + * @param callee + */ + constructor (blockScopeBody: ESTree.Node[], callee: ESTree.Identifier) { + this.blockScopeBody = blockScopeBody; + this.callee = callee; + } + + /** + * @returns {ICalleeData|null} + */ + public extract (): ICalleeData|null { + let calleeBlockStatement: TNodeWithBlockStatement|null = null; + + if (Nodes.isIdentifierNode(this.callee)) { + calleeBlockStatement = this.getCalleeBlockStatement( + NodeUtils.getBlockScopeOfNode(this.blockScopeBody[0]), + this.callee.name + ); + } + + if (!calleeBlockStatement) { + return null; + } + + return { + callee: calleeBlockStatement, + name: this.callee.name + }; + } + + /** + * @param node + * @param name + * @returns {TNodeWithBlockStatement|null} + */ + private getCalleeBlockStatement (node: ESTree.Node, name: string): TNodeWithBlockStatement|null { + let calleeBlockStatement: TNodeWithBlockStatement|null = null; + + estraverse.traverse(node, { + enter: (node: ESTree.Node): any => { + if (Nodes.isFunctionDeclarationNode(node) && node.id.name === name) { + calleeBlockStatement = node.body; + + return estraverse.VisitorOption.Break; + } + } + }); + + return calleeBlockStatement; + } +} diff --git a/src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts b/src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts new file mode 100644 index 00000000..1cf55116 --- /dev/null +++ b/src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts @@ -0,0 +1,80 @@ +import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; + +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; + +import { ICalleeData } from '../../interfaces/stack-trace-analyzer/ICalleeData'; +import { ICalleeDataExtractor } from '../../interfaces/stack-trace-analyzer/ICalleeDataExtractor'; + +import { Nodes } from '../../Nodes'; +import { NodeUtils } from '../../NodeUtils'; + +export class FunctionExpressionCalleeDataExtractor implements ICalleeDataExtractor { + /** + * @type {ESTree.Node[]} + */ + private blockScopeBody: ESTree.Node[]; + + /** + * @type {ESTree.Identifier} + */ + private callee: ESTree.Identifier; + + /** + * @param blockScopeBody + * @param callee + */ + constructor (blockScopeBody: ESTree.Node[], callee: ESTree.Identifier) { + this.blockScopeBody = blockScopeBody; + this.callee = callee; + } + + /** + * @returns {ICalleeData|null} + */ + public extract (): ICalleeData|null { + let calleeBlockStatement: TNodeWithBlockStatement|null = null; + + if (Nodes.isIdentifierNode(this.callee)) { + calleeBlockStatement = this.getCalleeBlockStatement( + NodeUtils.getBlockScopeOfNode(this.blockScopeBody[0]), + this.callee.name + ); + } + + if (!calleeBlockStatement) { + return null; + } + + return { + callee: calleeBlockStatement, + name: this.callee.name + }; + } + + /** + * @param node + * @param name + * @returns {TNodeWithBlockStatement|null} + */ + private getCalleeBlockStatement (node: ESTree.Node, name: string): TNodeWithBlockStatement|null { + let calleeBlockStatement: TNodeWithBlockStatement|null = null; + + estraverse.traverse(node, { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { + if ( + Nodes.isFunctionExpressionNode(node) && + Nodes.isVariableDeclaratorNode(parentNode) && + Nodes.isIdentifierNode(parentNode.id) && + parentNode.id.name === name + ) { + calleeBlockStatement = node.body; + + return estraverse.VisitorOption.Break; + } + } + }); + + return calleeBlockStatement; + } +} diff --git a/src/types/TCalleeDataExtractor.d.ts b/src/types/TCalleeDataExtractor.d.ts new file mode 100644 index 00000000..00c8c1cd --- /dev/null +++ b/src/types/TCalleeDataExtractor.d.ts @@ -0,0 +1,5 @@ +import * as ESTree from 'estree'; + +import { ICalleeDataExtractor } from '../interfaces/stack-trace-analyzer/ICalleeDataExtractor'; + +export type TCalleeDataExtractor = (new (blockScopeBody: ESTree.Node[], callee: any) => ICalleeDataExtractor); diff --git a/src/types/TNodeObfuscator.d.ts b/src/types/TNodeObfuscator.d.ts index 08e4cb6f..7dc60547 100644 --- a/src/types/TNodeObfuscator.d.ts +++ b/src/types/TNodeObfuscator.d.ts @@ -2,4 +2,4 @@ import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { INodeObfuscator } from '../interfaces/INodeObfuscator'; import { IOptions } from '../interfaces/IOptions'; -export type TNodeObfuscator = (new (nodes: Map , options: IOptions) => INodeObfuscator); +export type TNodeObfuscator = (new (nodes: Map , options: IOptions) => INodeObfuscator); diff --git a/test/unit-tests/StackTraceAnalyzer-spec.ts b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer-spec.ts similarity index 94% rename from test/unit-tests/StackTraceAnalyzer-spec.ts rename to test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer-spec.ts index 39047e9d..1a220104 100644 --- a/test/unit-tests/StackTraceAnalyzer-spec.ts +++ b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer-spec.ts @@ -2,15 +2,15 @@ import * as chai from 'chai'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; -import { TNodeWithBlockStatement } from '../../src/types/TNodeWithBlockStatement'; +import { TNodeWithBlockStatement } from '../../../src/types/TNodeWithBlockStatement'; -import { IStackTraceData } from '../../src/interfaces/IStackTraceData'; +import { IStackTraceData } from '../../../src/interfaces/stack-trace-analyzer/IStackTraceData'; -import { readFileAsString } from '../helpers/readFileAsString'; +import { readFileAsString } from '../../helpers/readFileAsString'; -import { Nodes } from '../../src/Nodes'; -import { NodeUtils } from '../../src/NodeUtils'; -import { StackTraceAnalyzer } from '../../src/StackTraceAnalyzer'; +import { Nodes } from '../../../src/Nodes'; +import { NodeUtils } from '../../../src/NodeUtils'; +import { StackTraceAnalyzer } from '../../../src/stack-trace-analyzer/StackTraceAnalyzer'; const assert: any = chai.assert; @@ -67,7 +67,7 @@ function getFunctionExpressionByName (astTree: ESTree.Node, name: string): ESTre } describe('StackTraceAnalyzer', () => { - describe('analyze (): IStackTraceData[]', () => { + describe('extract (): IStackTraceData[]', () => { let astTree: TNodeWithBlockStatement, stackTraceData: IStackTraceData[], expectedStackTraceData: IStackTraceData[]; diff --git a/test/index.spec.ts b/test/index.spec.ts index 3bbf6379..1e957c4b 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -14,7 +14,6 @@ import './unit-tests/SourceMapCorrector.spec'; import './unit-tests/Utils.spec'; import './unit-tests/cli/CLIUtils.spec'; import './unit-tests/custom-nodes/CustomNodeAppender-spec'; -import './unit-tests/StackTraceAnalyzer-spec'; import './unit-tests/node-obfuscators/CatchClauseObfuscator.spec'; import './unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec'; import './unit-tests/node-obfuscators/FunctionObfuscator.spec'; @@ -37,5 +36,6 @@ import './functional-tests/node-obfuscators/MemberExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec'; import './functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec'; +import './functional-tests/stack-trace-analyzer/StackTraceAnalyzer-spec'; import './functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNodeTemplate.spec'; import './functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec'; From bfc8ff4777dae914ef205f6cee3c4cc65d38831a Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 4 Oct 2016 08:34:43 +0300 Subject: [PATCH 060/138] overall performance test for info --- ...zer-spec.ts => StackTraceAnalyzer.spec.ts} | 0 test/index.spec.ts | 9 ++++++-- .../JavaScriptObfuscatorPerformance.spec.ts | 21 +++++++++++++++++++ ...der-spec.ts => CustomNodeAppender.spec.ts} | 0 4 files changed, 28 insertions(+), 2 deletions(-) rename test/functional-tests/stack-trace-analyzer/{StackTraceAnalyzer-spec.ts => StackTraceAnalyzer.spec.ts} (100%) create mode 100644 test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts rename test/unit-tests/custom-nodes/{CustomNodeAppender-spec.ts => CustomNodeAppender.spec.ts} (100%) diff --git a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer-spec.ts b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts similarity index 100% rename from test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer-spec.ts rename to test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts diff --git a/test/index.spec.ts b/test/index.spec.ts index 1e957c4b..df1564ab 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -13,7 +13,7 @@ import './unit-tests/OptionsNormalizer.spec'; import './unit-tests/SourceMapCorrector.spec'; import './unit-tests/Utils.spec'; import './unit-tests/cli/CLIUtils.spec'; -import './unit-tests/custom-nodes/CustomNodeAppender-spec'; +import './unit-tests/custom-nodes/CustomNodeAppender.spec'; import './unit-tests/node-obfuscators/CatchClauseObfuscator.spec'; import './unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec'; import './unit-tests/node-obfuscators/FunctionObfuscator.spec'; @@ -36,6 +36,11 @@ import './functional-tests/node-obfuscators/MemberExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec'; import './functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec'; -import './functional-tests/stack-trace-analyzer/StackTraceAnalyzer-spec'; +import './functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec'; import './functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNodeTemplate.spec'; import './functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec'; + +/** + * Performance tests + */ +import './performance-tests/JavaScriptObfuscatorPerformance.spec'; diff --git a/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts b/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts new file mode 100644 index 00000000..4cc6c715 --- /dev/null +++ b/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts @@ -0,0 +1,21 @@ +import { readFileAsString } from '../helpers/readFileAsString'; + +import { JavaScriptObfuscator } from '../../src/JavaScriptObfuscator'; + +const assert: Chai.AssertStatic = require('chai').assert; + +describe('JavaScriptObfuscator performance', () => { + const iterationsCount: number = 500; + + describe('performance', () => { + it('should returns object with obfuscated code and empty source map', function () { + this.timeout(15000); + + for (let i = 0; i < iterationsCount; i++) { + JavaScriptObfuscator.obfuscate(readFileAsString('./test/fixtures/sample.js')); + } + + assert.equal(1, 1); + }); + }); +}); diff --git a/test/unit-tests/custom-nodes/CustomNodeAppender-spec.ts b/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts similarity index 100% rename from test/unit-tests/custom-nodes/CustomNodeAppender-spec.ts rename to test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts From 83516b0185d27324f9f62c63ef56d760308844d2 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 4 Oct 2016 15:28:53 +0300 Subject: [PATCH 061/138] dinner fix --- dist/index.js | 6 +++--- package.json | 6 +++--- .../JavaScriptObfuscatorPerformance.spec.ts | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dist/index.js b/dist/index.js index 2da09817..4b988052 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2792,7 +2792,7 @@ exports.FunctionObfuscator = FunctionObfuscator; "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); @@ -3205,7 +3205,7 @@ exports.BooleanLiteralReplacer = BooleanLiteralReplacer; "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -3734,7 +3734,7 @@ exports.AtobTemplate = AtobTemplate; "use strict"; function ConsoleOutputDisableExpressionTemplate() { - return "\n (function () {\n var _ = '(\u0004\u0006\u0003\u0005[]' + '[\"filter\"][\"\u0007tructor\"]' + '(\"return this\")()' + '.' + '\u0003;\u0006\u0002\u0005\u0004};' + '_\u0003.log\u0001.in' + 'fo\u0001.' + 'war' + 'n\u0001.er' + 'r' + 'or\u0001})();' + '\u0001\u0005_\u0002;' + '_\u0003\u0002function' + '\u0003\u0007ole\u0004\u0002 ()' + '{\u0005 = \u0006var ' + '_\u0007cons', \n Y, \n $;\n \n for (Y in $ = \"\u0007\u0006\u0005\u0004\u0003\u0002\u0001\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; + return "\n (function () {\n var _ = '(\x04\x06\x03\x05[]' + '[\"filter\"][\"\x07tructor\"]' + '(\"return this\")()' + '.' + '\x03;\x06\x02\x05\x04};' + '_\x03.log\x01.in' + 'fo\x01.' + 'war' + 'n\x01.er' + 'r' + 'or\x01})();' + '\x01\x05_\x02;' + '_\x03\x02function' + '\x03\x07ole\x04\x02 ()' + '{\x05 = \x06var ' + '_\x07cons', \n Y, \n $;\n \n for (Y in $ = \"\x07\x06\x05\x04\x03\x02\x01\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; } exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; diff --git a/package.json b/package.json index 1b97df16..a5e4adf6 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "javascript-obfuscator": "./bin/javascript-obfuscator.js" }, "dependencies": { - "babel-polyfill": "^6.13.0", + "babel-polyfill": "^6.16.0", "chance": "^1.0.4", "class-validator": "^0.6.1", "commander": "^2.9.0", @@ -43,7 +43,7 @@ "@types/joi": "^9.0.32", "@types/mkdirp": "^0.3.29", "@types/mocha": "^2.2.32", - "@types/node": "^6.0.41", + "@types/node": "^6.0.42", "@types/sinon": "^1.16.31", "awesome-typescript-loader": "^2.2.4", "babel-cli": "^6.16.0", @@ -57,7 +57,7 @@ "sinon": "^2.0.0-pre.3", "ts-node": "^1.3.0", "tslint": "^3.15.1", - "typescript": "^2.0.0", + "typescript": "^2.0.3", "webpack": "^2.1.0-beta.25", "webpack-node-externals": "^1.4.3" }, diff --git a/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts b/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts index 4cc6c715..a50ea1fd 100644 --- a/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts +++ b/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts @@ -8,10 +8,10 @@ describe('JavaScriptObfuscator performance', () => { const iterationsCount: number = 500; describe('performance', () => { - it('should returns object with obfuscated code and empty source map', function () { + it('should returns object with obfuscated code and empty source map', function (): void { this.timeout(15000); - for (let i = 0; i < iterationsCount; i++) { + for (let i: number = 0; i < iterationsCount; i++) { JavaScriptObfuscator.obfuscate(readFileAsString('./test/fixtures/sample.js')); } From 56a4e8052254e79b941540da2a1bcf72d8770d05 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 4 Oct 2016 20:42:41 +0300 Subject: [PATCH 062/138] overall performance test for info --- dist/index.js | 6 +++--- .../JavaScriptObfuscatorPerformance.spec.ts | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/dist/index.js b/dist/index.js index 4b988052..2da09817 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2792,7 +2792,7 @@ exports.FunctionObfuscator = FunctionObfuscator; "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); @@ -3205,7 +3205,7 @@ exports.BooleanLiteralReplacer = BooleanLiteralReplacer; "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -3734,7 +3734,7 @@ exports.AtobTemplate = AtobTemplate; "use strict"; function ConsoleOutputDisableExpressionTemplate() { - return "\n (function () {\n var _ = '(\x04\x06\x03\x05[]' + '[\"filter\"][\"\x07tructor\"]' + '(\"return this\")()' + '.' + '\x03;\x06\x02\x05\x04};' + '_\x03.log\x01.in' + 'fo\x01.' + 'war' + 'n\x01.er' + 'r' + 'or\x01})();' + '\x01\x05_\x02;' + '_\x03\x02function' + '\x03\x07ole\x04\x02 ()' + '{\x05 = \x06var ' + '_\x07cons', \n Y, \n $;\n \n for (Y in $ = \"\x07\x06\x05\x04\x03\x02\x01\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; + return "\n (function () {\n var _ = '(\u0004\u0006\u0003\u0005[]' + '[\"filter\"][\"\u0007tructor\"]' + '(\"return this\")()' + '.' + '\u0003;\u0006\u0002\u0005\u0004};' + '_\u0003.log\u0001.in' + 'fo\u0001.' + 'war' + 'n\u0001.er' + 'r' + 'or\u0001})();' + '\u0001\u0005_\u0002;' + '_\u0003\u0002function' + '\u0003\u0007ole\u0004\u0002 ()' + '{\u0005 = \u0006var ' + '_\u0007cons', \n Y, \n $;\n \n for (Y in $ = \"\u0007\u0006\u0005\u0004\u0003\u0002\u0001\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; } exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; diff --git a/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts b/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts index a50ea1fd..9266c977 100644 --- a/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts +++ b/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts @@ -7,15 +7,25 @@ const assert: Chai.AssertStatic = require('chai').assert; describe('JavaScriptObfuscator performance', () => { const iterationsCount: number = 500; - describe('performance', () => { - it('should returns object with obfuscated code and empty source map', function (): void { - this.timeout(15000); + describe('performance: multiple calls', () => { + it('shows performance time with multiple obfuscator calls', function (): void { + this.timeout(10000); for (let i: number = 0; i < iterationsCount; i++) { JavaScriptObfuscator.obfuscate(readFileAsString('./test/fixtures/sample.js')); } - assert.equal(1, 1); + assert.isOk(true); + }); + }); + + describe('performance: large source code', () => { + it('shows performance time with large code size', function (): void { + this.timeout(5000); + + JavaScriptObfuscator.obfuscate(readFileAsString('./test/fixtures/sample.js').repeat(iterationsCount)); + + assert.isOk(true); }); }); }); From 42585eb593f1c4a67d24b420466a5905dd757fc1 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Wed, 5 Oct 2016 08:30:42 +0300 Subject: [PATCH 063/138] CLI missing polyfill fix --- bin/javascript-obfuscator.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bin/javascript-obfuscator.js b/bin/javascript-obfuscator.js index 4fe76f7e..038336d8 100755 --- a/bin/javascript-obfuscator.js +++ b/bin/javascript-obfuscator.js @@ -1,3 +1,7 @@ #!/usr/bin/env node +if (!global._babelPolyfill) { + require('babel-polyfill'); +} + require('../dist/index').runCLI(process.argv); \ No newline at end of file From 8a43bb3ed7f94f18d8277c68fa2c4ecfb9c40de6 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Wed, 5 Oct 2016 08:39:46 +0300 Subject: [PATCH 064/138] increase timeout limit for performance tests --- .../performance-tests/JavaScriptObfuscatorPerformance.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts b/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts index 9266c977..f6f2fe13 100644 --- a/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts +++ b/test/performance-tests/JavaScriptObfuscatorPerformance.spec.ts @@ -9,7 +9,7 @@ describe('JavaScriptObfuscator performance', () => { describe('performance: multiple calls', () => { it('shows performance time with multiple obfuscator calls', function (): void { - this.timeout(10000); + this.timeout(100000); for (let i: number = 0; i < iterationsCount; i++) { JavaScriptObfuscator.obfuscate(readFileAsString('./test/fixtures/sample.js')); @@ -21,7 +21,7 @@ describe('JavaScriptObfuscator performance', () => { describe('performance: large source code', () => { it('shows performance time with large code size', function (): void { - this.timeout(5000); + this.timeout(100000); JavaScriptObfuscator.obfuscate(readFileAsString('./test/fixtures/sample.js').repeat(iterationsCount)); From b684e2491b05646505ed147ac149c699f1e44eb6 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 6 Oct 2016 11:55:18 +0300 Subject: [PATCH 065/138] updated test fixture --- dist/index.js | 6 +++--- test/fixtures/sample.js | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index 2da09817..4b988052 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2792,7 +2792,7 @@ exports.FunctionObfuscator = FunctionObfuscator; "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); @@ -3205,7 +3205,7 @@ exports.BooleanLiteralReplacer = BooleanLiteralReplacer; "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -3734,7 +3734,7 @@ exports.AtobTemplate = AtobTemplate; "use strict"; function ConsoleOutputDisableExpressionTemplate() { - return "\n (function () {\n var _ = '(\u0004\u0006\u0003\u0005[]' + '[\"filter\"][\"\u0007tructor\"]' + '(\"return this\")()' + '.' + '\u0003;\u0006\u0002\u0005\u0004};' + '_\u0003.log\u0001.in' + 'fo\u0001.' + 'war' + 'n\u0001.er' + 'r' + 'or\u0001})();' + '\u0001\u0005_\u0002;' + '_\u0003\u0002function' + '\u0003\u0007ole\u0004\u0002 ()' + '{\u0005 = \u0006var ' + '_\u0007cons', \n Y, \n $;\n \n for (Y in $ = \"\u0007\u0006\u0005\u0004\u0003\u0002\u0001\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; + return "\n (function () {\n var _ = '(\x04\x06\x03\x05[]' + '[\"filter\"][\"\x07tructor\"]' + '(\"return this\")()' + '.' + '\x03;\x06\x02\x05\x04};' + '_\x03.log\x01.in' + 'fo\x01.' + 'war' + 'n\x01.er' + 'r' + 'or\x01})();' + '\x01\x05_\x02;' + '_\x03\x02function' + '\x03\x07ole\x04\x02 ()' + '{\x05 = \x06var ' + '_\x07cons', \n Y, \n $;\n \n for (Y in $ = \"\x07\x06\x05\x04\x03\x02\x01\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; } exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; diff --git a/test/fixtures/sample.js b/test/fixtures/sample.js index 4ccca1f9..5c4e0c33 100644 --- a/test/fixtures/sample.js +++ b/test/fixtures/sample.js @@ -46,8 +46,13 @@ console.log(105.4); console.log(true, false); + var sA = 'shorthand1'; + var sB = 'shorthand2'; + + console.log({sA, sB}); + try { } catch (error) { console.log(error); } -})(); +})(); \ No newline at end of file From 32418387bf6b89b38391c37cdfbacf92c74cdffc Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 6 Oct 2016 12:28:26 +0300 Subject: [PATCH 066/138] Error message for `domainLock` node --- dist/index.js | 7 ++++--- .../domain-lock-node/DomainLockNodeTemplate.ts | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index 4b988052..08f728de 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 = 80); +/******/ return __webpack_require__(__webpack_require__.s = 81); /******/ }) /************************************************************************/ /******/ ([ @@ -3783,7 +3783,7 @@ exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; "use strict"; function DomainLockNodeTemplate() { - return "\n (function () {\n var regExp = new RegExp(\"[{diff}]\", \"g\");\n var domains = \"{domains}\".replace(regExp, \"\").split(\";\");\n var eval = [][\"forEach\"][\"constructor\"];\n var window = eval(\"return this\")();\n \n for (var d in window) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n break;\n }\n }\n\n for (var d1 in window[d]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n break;\n }\n }\n\n var currentDomain = window[d][d1];\n \n if (!currentDomain) {\n return;\n }\n \n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n eval('throw new Error()')();\n }\n })();\n "; + return "\n (function () {\n var regExp = new RegExp(\"[{diff}]\", \"g\");\n var domains = \"{domains}\".replace(regExp, \"\").split(\";\");\n var eval = [][\"forEach\"][\"constructor\"];\n var window = eval(\"return this\")();\n \n for (var d in window) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n break;\n }\n }\n\n for (var d1 in window[d]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n break;\n }\n }\n\n var currentDomain = window[d][d1];\n \n if (!currentDomain) {\n return;\n }\n \n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n eval('throw new Error(\"Unexpected identifier\")')();\n }\n })();\n "; } exports.DomainLockNodeTemplate = DomainLockNodeTemplate; @@ -3912,7 +3912,8 @@ module.exports = require("fs"); module.exports = require("mkdirp"); /***/ }, -/* 80 */ +/* 80 */, +/* 81 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts b/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts index 90c291ce..f3f3c33e 100644 --- a/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts +++ b/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts @@ -45,7 +45,7 @@ export function DomainLockNodeTemplate (): string { } if (!ok) { - eval('throw new Error()')(); + eval('throw new Error("Unexpected identifier")')(); } })(); `; From 6c4eab91043b5e6c4df8671daa81e4ee79e87b4b Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 6 Oct 2016 14:41:46 +0300 Subject: [PATCH 067/138] StackTraceAnalyzer - correct analyzing of self-invoking functions --- dist/index.js | 10 ++-- .../stack-trace-analyzer/ICalleeData.d.ts | 2 +- .../FunctionExpressionCalleeDataExtractor.ts | 6 ++- .../self-invoking-functions.js | 9 ++++ .../StackTraceAnalyzer.spec.ts | 53 +++++++++++++++++++ 5 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 test/fixtures/stack-trace-analyzer/self-invoking-functions.js diff --git a/dist/index.js b/dist/index.js index 08f728de..56ab9c84 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 = 81); +/******/ return __webpack_require__(__webpack_require__.s = 80); /******/ }) /************************************************************************/ /******/ ([ @@ -3685,12 +3685,15 @@ var FunctionExpressionCalleeDataExtractor = function () { if (Nodes_1.Nodes.isIdentifierNode(this.callee)) { calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(this.blockScopeBody[0]), this.callee.name); } + if (Nodes_1.Nodes.isFunctionExpressionNode(this.callee)) { + calleeBlockStatement = this.callee.body; + } if (!calleeBlockStatement) { return null; } return { callee: calleeBlockStatement, - name: this.callee.name + name: this.callee.name || null }; } }, { @@ -3912,8 +3915,7 @@ module.exports = require("fs"); module.exports = require("mkdirp"); /***/ }, -/* 80 */, -/* 81 */ +/* 80 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/interfaces/stack-trace-analyzer/ICalleeData.d.ts b/src/interfaces/stack-trace-analyzer/ICalleeData.d.ts index cf42d2df..3cfed620 100644 --- a/src/interfaces/stack-trace-analyzer/ICalleeData.d.ts +++ b/src/interfaces/stack-trace-analyzer/ICalleeData.d.ts @@ -2,5 +2,5 @@ import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; export interface ICalleeData { callee: TNodeWithBlockStatement; - name: string; + name: string | null; } diff --git a/src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts b/src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts index 1cf55116..49a48815 100644 --- a/src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts +++ b/src/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts @@ -42,13 +42,17 @@ export class FunctionExpressionCalleeDataExtractor implements ICalleeDataExtract ); } + if (Nodes.isFunctionExpressionNode(this.callee)) { + calleeBlockStatement = this.callee.body; + } + if (!calleeBlockStatement) { return null; } return { callee: calleeBlockStatement, - name: this.callee.name + name: this.callee.name || null }; } diff --git a/test/fixtures/stack-trace-analyzer/self-invoking-functions.js b/test/fixtures/stack-trace-analyzer/self-invoking-functions.js new file mode 100644 index 00000000..9858dabc --- /dev/null +++ b/test/fixtures/stack-trace-analyzer/self-invoking-functions.js @@ -0,0 +1,9 @@ +(function foo (){ + (function bar (){ + baz(); + + function baz () { + + } + }()); +})(); \ No newline at end of file diff --git a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts index 1a220104..28e6c8d7 100644 --- a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts +++ b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts @@ -66,6 +66,32 @@ function getFunctionExpressionByName (astTree: ESTree.Node, name: string): ESTre return functionExpressionNode; } +/** + * @param astTree + * @param id + * @returns {ESTree.FunctionExpression|null} + */ +function getFunctionExpressionById (astTree: ESTree.Node, id: string): ESTree.FunctionExpression|null { + let functionExpressionNode: ESTree.FunctionExpression|null = null; + + estraverse.traverse(astTree, { + enter: (node: ESTree.Node): any => { + if ( + Nodes.isFunctionExpressionNode(node) && + node.id && + Nodes.isIdentifierNode(node.id) && + node.id.name === id + ) { + functionExpressionNode = node; + + return estraverse.VisitorOption.Break; + } + } + }); + + return functionExpressionNode; +} + describe('StackTraceAnalyzer', () => { describe('extract (): IStackTraceData[]', () => { let astTree: TNodeWithBlockStatement, @@ -245,5 +271,32 @@ describe('StackTraceAnalyzer', () => { assert.deepEqual(stackTraceData, expectedStackTraceData); }); + + it('should returns correct BlockScopeTraceData - variant #8: self-invoking functions', () => { + astTree = NodeUtils.convertCodeToStructure( + readFileAsString('./test/fixtures/stack-trace-analyzer/self-invoking-functions.js'), + false + ); + + expectedStackTraceData = [ + { + name: null, + callee: (getFunctionExpressionById(astTree, 'foo')).body, + stackTrace: [{ + name: null, + callee: (getFunctionExpressionById(astTree, 'bar')).body, + stackTrace: [{ + name: 'baz', + callee: (getFunctionDeclarationByName(astTree, 'baz')).body, + stackTrace: [] + }] + }] + } + ]; + + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); + + assert.deepEqual(stackTraceData, expectedStackTraceData); + }); }); }); From 9328df225d80b669ed60da3842a9ab9ac10fca76 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 6 Oct 2016 15:23:26 +0300 Subject: [PATCH 068/138] TSLint rules update --- dist/index.js | 5 +++-- src/node-obfuscators/LiteralObfuscator.ts | 1 - tslint.json | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dist/index.js b/dist/index.js index 56ab9c84..a305abdd 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 = 80); +/******/ return __webpack_require__(__webpack_require__.s = 81); /******/ }) /************************************************************************/ /******/ ([ @@ -3915,7 +3915,8 @@ module.exports = require("fs"); module.exports = require("mkdirp"); /***/ }, -/* 80 */ +/* 80 */, +/* 81 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/node-obfuscators/LiteralObfuscator.ts b/src/node-obfuscators/LiteralObfuscator.ts index 8a89ecda..900b5680 100644 --- a/src/node-obfuscators/LiteralObfuscator.ts +++ b/src/node-obfuscators/LiteralObfuscator.ts @@ -32,7 +32,6 @@ export class LiteralObfuscator extends AbstractNodeObfuscator { break; - case 'string': content = new StringLiteralReplacer(this.nodes, this.options) .replace(literalNode.value); diff --git a/tslint.json b/tslint.json index 7fe6e36f..ae1eda38 100644 --- a/tslint.json +++ b/tslint.json @@ -43,8 +43,8 @@ "no-any": false, "no-arg": true, "no-bitwise": true, - "no-conditional-assignment": false, - "no-consecutive-blank-lines": false, + "no-conditional-assignment": true, + "no-consecutive-blank-lines": true, "no-console": [ true, "debug", @@ -63,14 +63,14 @@ "no-eval": false, "no-inferrable-types": false, "no-internal-module": true, - "no-invalid-this": false, + "no-invalid-this": true, "no-null-keyword": false, - "no-reference": false, + "no-reference": true, "no-require-imports": false, - "no-shadowed-variable": false, - "no-string-literal": false, + "no-shadowed-variable": true, + "no-string-literal": true, "no-switch-case-fall-through": false, - "no-trailing-whitespace": false, + "no-trailing-whitespace": true, "no-unreachable": true, "no-unused-expression": true, "no-unused-variable": true, From b4747719b2d504655c976632f4fe6523c486e17c Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 6 Oct 2016 17:06:19 +0300 Subject: [PATCH 069/138] StackTraceAnalyzer - correct analyzing of self-invoking functions: extend test --- .../stack-trace-analyzer/self-invoking-functions.js | 8 +++++--- .../stack-trace-analyzer/StackTraceAnalyzer.spec.ts | 10 +++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/test/fixtures/stack-trace-analyzer/self-invoking-functions.js b/test/fixtures/stack-trace-analyzer/self-invoking-functions.js index 9858dabc..4c578e1d 100644 --- a/test/fixtures/stack-trace-analyzer/self-invoking-functions.js +++ b/test/fixtures/stack-trace-analyzer/self-invoking-functions.js @@ -1,9 +1,11 @@ (function foo (){ (function bar (){ - baz(); + !function baz (){ + inner(); - function baz () { + function inner () { - } + } + }(); }()); })(); \ No newline at end of file diff --git a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts index 28e6c8d7..0ee3cdc1 100644 --- a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts +++ b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts @@ -286,9 +286,13 @@ describe('StackTraceAnalyzer', () => { name: null, callee: (getFunctionExpressionById(astTree, 'bar')).body, stackTrace: [{ - name: 'baz', - callee: (getFunctionDeclarationByName(astTree, 'baz')).body, - stackTrace: [] + name: null, + callee: (getFunctionExpressionById(astTree, 'baz')).body, + stackTrace: [{ + name: 'inner', + callee: (getFunctionDeclarationByName(astTree, 'inner')).body, + stackTrace: [] + }] }] }] } From 791e819a6fdf9d5ae938d945363aab4f8a2d2708 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 10 Oct 2016 13:30:17 +0300 Subject: [PATCH 070/138] CustomNodeAppender incorrect index fix --- dist/index.js | 2 +- src/custom-nodes/CustomNodeAppender.ts | 2 +- test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts | 9 ++++----- tslint.json | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/dist/index.js b/dist/index.js index a305abdd..96391bf2 100644 --- a/dist/index.js +++ b/dist/index.js @@ -856,7 +856,7 @@ var CustomNodeAppender = function () { } return Utils_1.Utils.getRandomGenerator().integer({ min: 0, - max: Math.round(blockStatementBodyLength * threshold) + max: Math.round((blockStatementBodyLength - 1) * threshold) }); } }, { diff --git a/src/custom-nodes/CustomNodeAppender.ts b/src/custom-nodes/CustomNodeAppender.ts index ccb4698c..0f99ba74 100644 --- a/src/custom-nodes/CustomNodeAppender.ts +++ b/src/custom-nodes/CustomNodeAppender.ts @@ -54,7 +54,7 @@ export class CustomNodeAppender { return Utils.getRandomGenerator().integer({ min: 0, - max: Math.round(blockStatementBodyLength * threshold) + max: Math.round((blockStatementBodyLength - 1) * threshold) }); } diff --git a/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts b/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts index 776a31b1..17c58c67 100644 --- a/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts +++ b/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts @@ -277,25 +277,24 @@ describe('CustomNodeAppender', () => { it('should returns random index between 0 and index based on threshold value', () => { let index: number; - for (let i = 0; i < 10; i++) { + for (let i: number = 0; i < 10; i++) { index = CustomNodeAppender.getIndexByThreshold(100, 0.1); assert.isAtLeast(index, 0); assert.isAtMost(index, 10); } - for (let i = 0; i < 10; i++) { + for (let i: number = 0; i < 10; i++) { index = CustomNodeAppender.getIndexByThreshold(10, 0.5); assert.isAtLeast(index, 0); assert.isAtMost(index, 5); } - for (let i = 0; i < 10; i++) { + for (let i: number = 0; i < 10; i++) { index = CustomNodeAppender.getIndexByThreshold(1, 1); - assert.isAtLeast(index, 0); - assert.isAtMost(index, 1); + assert.equal(index, 0); } }); }); diff --git a/tslint.json b/tslint.json index ae1eda38..dcedfa2a 100644 --- a/tslint.json +++ b/tslint.json @@ -67,7 +67,7 @@ "no-null-keyword": false, "no-reference": true, "no-require-imports": false, - "no-shadowed-variable": true, + "no-shadowed-variable": false, "no-string-literal": true, "no-switch-case-fall-through": false, "no-trailing-whitespace": true, From f3fa44be0f4d4ccadd81be7d0a9440265173924d Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 10 Oct 2016 18:12:41 +0300 Subject: [PATCH 071/138] added babel retainFunctionParens param --- .babelrc | 3 ++ dist/index.js | 92 +++++++++++++++++++++++++-------------------------- 2 files changed, 49 insertions(+), 46 deletions(-) diff --git a/.babelrc b/.babelrc index af0f0c3d..8b6f24f8 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,6 @@ { + "generatorOpts": { + "retainFunctionParens": true + }, "presets": ["es2015"] } \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 96391bf2..5551e845 100644 --- a/dist/index.js +++ b/dist/index.js @@ -98,7 +98,7 @@ module.exports = "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -252,7 +252,7 @@ exports.Utils = Utils; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -421,7 +421,7 @@ exports.NodeUtils = NodeUtils; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -555,7 +555,7 @@ var AppendState = exports.AppendState; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -652,7 +652,7 @@ module.exports = require("format-unicorn"); "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -692,7 +692,7 @@ exports.JavaScriptObfuscator = JavaScriptObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -759,7 +759,7 @@ exports.AbstractReplacer = AbstractReplacer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -819,7 +819,7 @@ exports.IdentifierReplacer = IdentifierReplacer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -883,7 +883,7 @@ exports.CustomNodeAppender = CustomNodeAppender; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -985,7 +985,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1091,7 +1091,7 @@ exports.JSFuck = { "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1179,7 +1179,7 @@ module.exports = require("babel-polyfill"); "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1247,7 +1247,7 @@ exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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); } } @@ -1349,7 +1349,7 @@ exports.Obfuscator = Obfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1407,7 +1407,7 @@ exports.SourceMapCorrector = SourceMapCorrector; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1464,7 +1464,7 @@ exports.UnicodeArray = UnicodeArray; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1556,7 +1556,7 @@ exports.CLIUtils = CLIUtils; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1689,7 +1689,7 @@ exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1739,7 +1739,7 @@ exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1792,7 +1792,7 @@ exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1845,7 +1845,7 @@ exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNod "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1909,9 +1909,9 @@ exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; "use strict"; "use strict"; -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); +var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +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"); } } @@ -1974,7 +1974,7 @@ exports.DomainLockNode = DomainLockNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2026,9 +2026,9 @@ exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2100,9 +2100,9 @@ exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2181,9 +2181,9 @@ exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2267,9 +2267,9 @@ exports.UnicodeArrayNode = UnicodeArrayNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2565,7 +2565,7 @@ exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2636,7 +2636,7 @@ exports.CatchClauseObfuscator = CatchClauseObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2711,7 +2711,7 @@ exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2794,7 +2794,7 @@ exports.FunctionObfuscator = FunctionObfuscator; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +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"); } } @@ -2857,7 +2857,7 @@ exports.LiteralObfuscator = LiteralObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2942,7 +2942,7 @@ exports.MemberExpressionObfuscator = MemberExpressionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3003,7 +3003,7 @@ exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3089,7 +3089,7 @@ exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3166,7 +3166,7 @@ exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3277,7 +3277,7 @@ var _a; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3446,7 +3446,7 @@ exports.OptionsNormalizer = OptionsNormalizer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3513,7 +3513,7 @@ exports.ValidationErrorsFormatter = ValidationErrorsFormatter; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3603,7 +3603,7 @@ exports.StackTraceAnalyzer = StackTraceAnalyzer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3662,7 +3662,7 @@ exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataEx "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } From a8b32559709fa5438e0bc50576fc508d04fcfc45 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 10 Oct 2016 18:32:07 +0300 Subject: [PATCH 072/138] Added missing types --- src/Utils.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Utils.ts b/src/Utils.ts index c891c92f..8ec60980 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -112,11 +112,13 @@ export class Utils { * @returns {string[]} */ public static hideString(str: string, length: number): [string, string] { - const escapeRegExp = (s: string) => + const escapeRegExp: (s: string) => string = (s: string) => s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - const randomMerge = function (s1: string, s2: string): string { - let i1 = -1, i2 = -1, result = ''; + const randomMerge: (s1: string, s2: string) => string = function (s1: string, s2: string): string { + let i1: number = -1, + i2: number = -1, + result: string = ''; while (i1 < s1.length || i2 < s2.length) { if (Math.random() < 0.5 && i2 < s2.length) { @@ -129,13 +131,13 @@ export class Utils { return result; }; - const customPool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + const customPool: string = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; - let randomString = Utils.randomGenerator.string({length: length, pool: customPool}), - randomStringDiff = randomString.replace( + let randomString: string = Utils.randomGenerator.string({length: length, pool: customPool}), + randomStringDiff: string = randomString.replace( new RegExp('[' + escapeRegExp(str) + ']', 'g'), ''), - randomStringDiffArray = randomStringDiff.split(''); + randomStringDiffArray: string[] = randomStringDiff.split(''); Utils.randomGenerator.shuffle(randomStringDiffArray); randomStringDiff = randomStringDiffArray.join(''); From 8f0fe9c6f8765c128c0f4b0359cee28996b35180 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 11 Oct 2016 23:38:08 +0300 Subject: [PATCH 073/138] added yarn.lock to .gitignore --- .gitignore | 1 + dist/index.js | 93 +++++++++++++++++++++++++-------------------------- package.json | 2 +- 3 files changed, 48 insertions(+), 48 deletions(-) diff --git a/.gitignore b/.gitignore index 56df8f3b..5518770b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .awcache .idea npm-debug.log +yarn.lock *.js.map /coverage /node_modules diff --git a/dist/index.js b/dist/index.js index 5551e845..0dbb5772 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 = 81); +/******/ return __webpack_require__(__webpack_require__.s = 80); /******/ }) /************************************************************************/ /******/ ([ @@ -252,7 +252,7 @@ exports.Utils = Utils; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -421,7 +421,7 @@ exports.NodeUtils = NodeUtils; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -555,7 +555,7 @@ var AppendState = exports.AppendState; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -652,7 +652,7 @@ module.exports = require("format-unicorn"); "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -692,7 +692,7 @@ exports.JavaScriptObfuscator = JavaScriptObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -759,7 +759,7 @@ exports.AbstractReplacer = AbstractReplacer; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -883,7 +883,7 @@ exports.CustomNodeAppender = CustomNodeAppender; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -985,7 +985,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1091,7 +1091,7 @@ exports.JSFuck = { "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1179,7 +1179,7 @@ module.exports = require("babel-polyfill"); "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1247,7 +1247,7 @@ exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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); } } @@ -1349,7 +1349,7 @@ exports.Obfuscator = Obfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1407,7 +1407,7 @@ exports.SourceMapCorrector = SourceMapCorrector; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1464,7 +1464,7 @@ exports.UnicodeArray = UnicodeArray; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1556,7 +1556,7 @@ exports.CLIUtils = CLIUtils; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1689,7 +1689,7 @@ exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1739,7 +1739,7 @@ exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1792,7 +1792,7 @@ exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1845,7 +1845,7 @@ exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNod "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -1909,9 +1909,9 @@ exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; "use strict"; "use strict"; -var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +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"); } } @@ -1974,7 +1974,7 @@ exports.DomainLockNode = DomainLockNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -2026,9 +2026,9 @@ exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); -var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); +var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2100,9 +2100,9 @@ exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); -var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); +var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2181,9 +2181,9 @@ exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); -var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); +var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2267,9 +2267,9 @@ exports.UnicodeArrayNode = UnicodeArrayNode; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); -var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); +var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2565,7 +2565,7 @@ exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -2636,7 +2636,7 @@ exports.CatchClauseObfuscator = CatchClauseObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -2711,7 +2711,7 @@ exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -2857,7 +2857,7 @@ exports.LiteralObfuscator = LiteralObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -2942,7 +2942,7 @@ exports.MemberExpressionObfuscator = MemberExpressionObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -3003,7 +3003,7 @@ exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -3089,7 +3089,7 @@ exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -3166,7 +3166,7 @@ exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -3205,7 +3205,7 @@ exports.BooleanLiteralReplacer = BooleanLiteralReplacer; "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -3277,7 +3277,7 @@ var _a; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -3446,7 +3446,7 @@ exports.OptionsNormalizer = OptionsNormalizer; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -3513,7 +3513,7 @@ exports.ValidationErrorsFormatter = ValidationErrorsFormatter; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -3603,7 +3603,7 @@ exports.StackTraceAnalyzer = StackTraceAnalyzer; "use strict"; "use strict"; -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _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"); } } @@ -3737,7 +3737,7 @@ exports.AtobTemplate = AtobTemplate; "use strict"; function ConsoleOutputDisableExpressionTemplate() { - return "\n (function () {\n var _ = '(\x04\x06\x03\x05[]' + '[\"filter\"][\"\x07tructor\"]' + '(\"return this\")()' + '.' + '\x03;\x06\x02\x05\x04};' + '_\x03.log\x01.in' + 'fo\x01.' + 'war' + 'n\x01.er' + 'r' + 'or\x01})();' + '\x01\x05_\x02;' + '_\x03\x02function' + '\x03\x07ole\x04\x02 ()' + '{\x05 = \x06var ' + '_\x07cons', \n Y, \n $;\n \n for (Y in $ = \"\x07\x06\x05\x04\x03\x02\x01\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; + return "\n (function () {\n var _ = '(\u0004\u0006\u0003\u0005[]' + '[\"filter\"][\"\u0007tructor\"]' + '(\"return this\")()' + '.' + '\u0003;\u0006\u0002\u0005\u0004};' + '_\u0003.log\u0001.in' + 'fo\u0001.' + 'war' + 'n\u0001.er' + 'r' + 'or\u0001})();' + '\u0001\u0005_\u0002;' + '_\u0003\u0002function' + '\u0003\u0007ole\u0004\u0002 ()' + '{\u0005 = \u0006var ' + '_\u0007cons', \n Y, \n $;\n \n for (Y in $ = \"\u0007\u0006\u0005\u0004\u0003\u0002\u0001\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; } exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; @@ -3915,8 +3915,7 @@ module.exports = require("fs"); module.exports = require("mkdirp"); /***/ }, -/* 80 */, -/* 81 */ +/* 80 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/package.json b/package.json index a5e4adf6..17d8d40f 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "@types/escodegen": "^0.0.6", "@types/esprima": "^2.1.33", "@types/estraverse": "^0.0.6", - "@types/estree": "^0.0.32", + "@types/estree": "^0.0.34", "@types/format-unicorn": "^0.0.29", "@types/joi": "^9.0.32", "@types/mkdirp": "^0.3.29", From 2c04b827da0f008d218fa4afe8b3f768ae388f90 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Wed, 12 Oct 2016 18:15:52 +0300 Subject: [PATCH 074/138] travis ci yarn test --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2e9c1b2d..794cac5f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,9 +7,11 @@ node_js: - "4" - "6" - "stable" + +install: "npm i -g yarn && yarn" script: "npm run travis" after_success: - npm run test:coveralls - - rm -rf ./coverage \ No newline at end of file + - rm -rf ./coverage From 61a6408d9978a8142cd809489cbf819abcb54a7f Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Wed, 12 Oct 2016 18:38:28 +0300 Subject: [PATCH 075/138] remove yarn from travis buld --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 794cac5f..add483a5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,8 +8,6 @@ node_js: - "6" - "stable" -install: "npm i -g yarn && yarn" - script: "npm run travis" after_success: From 70cfeb72c7bfcd31eabf467cf38aae0f63e5b849 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 13 Oct 2016 15:56:16 +0300 Subject: [PATCH 076/138] Move to fixed versions --- package.json | 72 ++++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index a5e4adf6..047845fa 100644 --- a/package.json +++ b/package.json @@ -20,46 +20,46 @@ "javascript-obfuscator": "./bin/javascript-obfuscator.js" }, "dependencies": { - "babel-polyfill": "^6.16.0", - "chance": "^1.0.4", - "class-validator": "^0.6.1", - "commander": "^2.9.0", - "escodegen": "^1.8.1", - "esprima": "^3.0.0", - "estraverse": "^4.2.0", - "format-unicorn": "^1.1.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.3" + "babel-polyfill": "6.16.0", + "chance": "1.0.4", + "class-validator": "0.6.1", + "commander": "2.9.0", + "escodegen": "1.8.1", + "esprima": "3.0.0", + "estraverse": "4.2.0", + "format-unicorn": "1.1.0", + "mkdirp": "0.5.1", + "source-map-support": "0.4.3" }, "devDependencies": { - "@types/chai": "^3.4.34", - "@types/chance": "^0.7.30", - "@types/commander": "^2.3.30", - "@types/escodegen": "^0.0.6", - "@types/esprima": "^2.1.33", - "@types/estraverse": "^0.0.6", - "@types/estree": "^0.0.32", - "@types/format-unicorn": "^0.0.29", - "@types/joi": "^9.0.32", - "@types/mkdirp": "^0.3.29", - "@types/mocha": "^2.2.32", - "@types/node": "^6.0.42", - "@types/sinon": "^1.16.31", - "awesome-typescript-loader": "^2.2.4", - "babel-cli": "^6.16.0", - "babel-loader": "^6.2.5", - "babel-preset-es2015": "^6.16.0", - "chai": "^3.5.0", - "coveralls": "^2.11.14", + "@types/chai": "3.4.34", + "@types/chance": "0.7.30", + "@types/commander": "2.3.30", + "@types/escodegen": "0.0.6", + "@types/esprima": "2.1.33", + "@types/estraverse": "0.0.6", + "@types/estree": "0.0.32", + "@types/format-unicorn": "0.0.29", + "@types/joi": "9.0.32", + "@types/mkdirp": "0.3.29", + "@types/mocha": "2.2.32", + "@types/node": "6.0.42", + "@types/sinon": "1.16.31", + "awesome-typescript-loader": "2.2.4", + "babel-cli": "6.16.0", + "babel-loader": "6.2.5", + "babel-preset-es2015": "6.16.0", + "chai": "3.5.0", + "coveralls": "2.11.14", "istanbul": "1.1.0-alpha.1", - "mocha": "^3.1.0", + "mocha": "3.1.0", "optimize-js-plugin": "0.0.4", - "sinon": "^2.0.0-pre.3", - "ts-node": "^1.3.0", - "tslint": "^3.15.1", - "typescript": "^2.0.3", - "webpack": "^2.1.0-beta.25", - "webpack-node-externals": "^1.4.3" + "sinon": "2.0.0-pre.3", + "ts-node": "1.3.0", + "tslint": "3.15.1", + "typescript": "2.0.3", + "webpack": "2.1.0-beta.25", + "webpack-node-externals": "1.4.3" }, "repository": { "type": "git", From 3f0f2850b6dfe152bf65ac4458fbd95e660622c3 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 13 Oct 2016 16:10:27 +0300 Subject: [PATCH 077/138] Merge remote-tracking branch 'origin/dev' into dev Conflicts: package.json --- dist/index.js | 88 +++++++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/dist/index.js b/dist/index.js index 0dbb5772..77fca4a3 100644 --- a/dist/index.js +++ b/dist/index.js @@ -252,7 +252,7 @@ exports.Utils = Utils; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -421,7 +421,7 @@ exports.NodeUtils = NodeUtils; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -555,7 +555,7 @@ var AppendState = exports.AppendState; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -652,7 +652,7 @@ module.exports = require("format-unicorn"); "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -692,7 +692,7 @@ exports.JavaScriptObfuscator = JavaScriptObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -759,7 +759,7 @@ exports.AbstractReplacer = AbstractReplacer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -883,7 +883,7 @@ exports.CustomNodeAppender = CustomNodeAppender; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -985,7 +985,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1091,7 +1091,7 @@ exports.JSFuck = { "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1179,7 +1179,7 @@ module.exports = require("babel-polyfill"); "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1247,7 +1247,7 @@ exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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); } } @@ -1349,7 +1349,7 @@ exports.Obfuscator = Obfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1407,7 +1407,7 @@ exports.SourceMapCorrector = SourceMapCorrector; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1464,7 +1464,7 @@ exports.UnicodeArray = UnicodeArray; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1556,7 +1556,7 @@ exports.CLIUtils = CLIUtils; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1689,7 +1689,7 @@ exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1739,7 +1739,7 @@ exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1792,7 +1792,7 @@ exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1845,7 +1845,7 @@ exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNod "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1909,9 +1909,9 @@ exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; "use strict"; "use strict"; -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); +var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +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"); } } @@ -1974,7 +1974,7 @@ exports.DomainLockNode = DomainLockNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2026,9 +2026,9 @@ exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2100,9 +2100,9 @@ exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2181,9 +2181,9 @@ exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2267,9 +2267,9 @@ exports.UnicodeArrayNode = UnicodeArrayNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2565,7 +2565,7 @@ exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2636,7 +2636,7 @@ exports.CatchClauseObfuscator = CatchClauseObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2711,7 +2711,7 @@ exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2857,7 +2857,7 @@ exports.LiteralObfuscator = LiteralObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2942,7 +2942,7 @@ exports.MemberExpressionObfuscator = MemberExpressionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3003,7 +3003,7 @@ exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3089,7 +3089,7 @@ exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3166,7 +3166,7 @@ exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3205,7 +3205,7 @@ exports.BooleanLiteralReplacer = BooleanLiteralReplacer; "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -3277,7 +3277,7 @@ var _a; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3446,7 +3446,7 @@ exports.OptionsNormalizer = OptionsNormalizer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3513,7 +3513,7 @@ exports.ValidationErrorsFormatter = ValidationErrorsFormatter; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3603,7 +3603,7 @@ exports.StackTraceAnalyzer = StackTraceAnalyzer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3737,7 +3737,7 @@ exports.AtobTemplate = AtobTemplate; "use strict"; function ConsoleOutputDisableExpressionTemplate() { - return "\n (function () {\n var _ = '(\u0004\u0006\u0003\u0005[]' + '[\"filter\"][\"\u0007tructor\"]' + '(\"return this\")()' + '.' + '\u0003;\u0006\u0002\u0005\u0004};' + '_\u0003.log\u0001.in' + 'fo\u0001.' + 'war' + 'n\u0001.er' + 'r' + 'or\u0001})();' + '\u0001\u0005_\u0002;' + '_\u0003\u0002function' + '\u0003\u0007ole\u0004\u0002 ()' + '{\u0005 = \u0006var ' + '_\u0007cons', \n Y, \n $;\n \n for (Y in $ = \"\u0007\u0006\u0005\u0004\u0003\u0002\u0001\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; + return "\n (function () {\n var _ = '(\x04\x06\x03\x05[]' + '[\"filter\"][\"\x07tructor\"]' + '(\"return this\")()' + '.' + '\x03;\x06\x02\x05\x04};' + '_\x03.log\x01.in' + 'fo\x01.' + 'war' + 'n\x01.er' + 'r' + 'or\x01})();' + '\x01\x05_\x02;' + '_\x03\x02function' + '\x03\x07ole\x04\x02 ()' + '{\x05 = \x06var ' + '_\x07cons', \n Y, \n $;\n \n for (Y in $ = \"\x07\x06\x05\x04\x03\x02\x01\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; } exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; diff --git a/package.json b/package.json index 047845fa..ad6dad0d 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "@types/escodegen": "0.0.6", "@types/esprima": "2.1.33", "@types/estraverse": "0.0.6", - "@types/estree": "0.0.32", + "@types/estree": "0.0.34", "@types/format-unicorn": "0.0.29", "@types/joi": "9.0.32", "@types/mkdirp": "0.3.29", From 42657550d3f6756464bcd380aafbb3e4f475df16 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sat, 15 Oct 2016 19:36:14 +0300 Subject: [PATCH 078/138] Added ObjectExpressionCalleeDataExtractor --- dist/index.js | 315 +++++++++++++----- src/Nodes.ts | 8 + .../StackTraceAnalyzer.ts | 5 +- .../ObjectExpressionCalleeDataExtractor.ts | 160 +++++++++ .../call-expression-of-object-member.js | 11 +- .../StackTraceAnalyzer.spec.ts | 52 ++- 6 files changed, 458 insertions(+), 93 deletions(-) create mode 100644 src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts diff --git a/dist/index.js b/dist/index.js index 0dbb5772..ae6417de 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 = 80); +/******/ return __webpack_require__(__webpack_require__.s = 81); /******/ }) /************************************************************************/ /******/ ([ @@ -102,7 +102,7 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(75); +var chance_1 = __webpack_require__(76); var JSFuck_1 = __webpack_require__(19); var Utils = function () { @@ -252,7 +252,7 @@ exports.Utils = Utils; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -421,7 +421,7 @@ exports.NodeUtils = NodeUtils; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -487,6 +487,11 @@ var Nodes = function () { value: function isMemberExpressionNode(node) { return node.type === NodeType_1.NodeType.MemberExpression; } + }, { + key: 'isObjectExpressionNode', + value: function isObjectExpressionNode(node) { + return node.type === NodeType_1.NodeType.ObjectExpression; + } }, { key: 'isProgramNode', value: function isProgramNode(node) { @@ -555,7 +560,7 @@ var AppendState = exports.AppendState; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -652,7 +657,7 @@ module.exports = require("format-unicorn"); "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -692,7 +697,7 @@ exports.JavaScriptObfuscator = JavaScriptObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -759,7 +764,7 @@ exports.AbstractReplacer = AbstractReplacer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -883,7 +888,7 @@ exports.CustomNodeAppender = CustomNodeAppender; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -985,7 +990,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1091,7 +1096,7 @@ exports.JSFuck = { "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1179,7 +1184,7 @@ module.exports = require("babel-polyfill"); "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1247,7 +1252,7 @@ exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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); } } @@ -1349,7 +1354,7 @@ exports.Obfuscator = Obfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1407,7 +1412,7 @@ exports.SourceMapCorrector = SourceMapCorrector; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1464,12 +1469,12 @@ exports.UnicodeArray = UnicodeArray; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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 fs = __webpack_require__(78); -var mkdirp = __webpack_require__(79); +var fs = __webpack_require__(79); +var mkdirp = __webpack_require__(80); var path = __webpack_require__(23); var Utils_1 = __webpack_require__(0); @@ -1556,11 +1561,11 @@ exports.CLIUtils = CLIUtils; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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 commander = __webpack_require__(77); +var commander = __webpack_require__(78); var path = __webpack_require__(23); var SourceMapMode_1 = __webpack_require__(12); var DefaultPreset_1 = __webpack_require__(21); @@ -1689,7 +1694,7 @@ exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1698,7 +1703,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 AppendState_1 = __webpack_require__(4); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(62); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(63); var AbstractCustomNode_1 = __webpack_require__(5); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -1739,7 +1744,7 @@ exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1749,7 +1754,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(63); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(64); var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); @@ -1792,7 +1797,7 @@ exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1802,7 +1807,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(64); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(65); var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); @@ -1845,7 +1850,7 @@ exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNod "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1855,7 +1860,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(65); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(66); var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1909,9 +1914,9 @@ exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; "use strict"; "use strict"; -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); +var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +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"); } } @@ -1921,7 +1926,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DomainLockNodeTemplate_1 = __webpack_require__(66); +var DomainLockNodeTemplate_1 = __webpack_require__(67); var AbstractCustomNode_1 = __webpack_require__(5); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -1974,7 +1979,7 @@ exports.DomainLockNode = DomainLockNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -1984,7 +1989,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(17); -var SelfDefendingTemplate_1 = __webpack_require__(67); +var SelfDefendingTemplate_1 = __webpack_require__(68); var AbstractCustomNode_1 = __webpack_require__(5); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2026,9 +2031,9 @@ exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2038,7 +2043,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(68); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(69); var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2100,9 +2105,9 @@ exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2113,9 +2118,9 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(17); -var AtobTemplate_1 = __webpack_require__(61); -var SelfDefendingTemplate_1 = __webpack_require__(69); -var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(70); +var AtobTemplate_1 = __webpack_require__(62); +var SelfDefendingTemplate_1 = __webpack_require__(70); +var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(71); var AbstractCustomNode_1 = __webpack_require__(5); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2181,9 +2186,9 @@ exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2193,7 +2198,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var UnicodeArrayTemplate_1 = __webpack_require__(71); +var UnicodeArrayTemplate_1 = __webpack_require__(72); var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); @@ -2267,9 +2272,9 @@ exports.UnicodeArrayNode = UnicodeArrayNode; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2280,8 +2285,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(17); -var SelfDefendingTemplate_1 = __webpack_require__(72); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(73); +var SelfDefendingTemplate_1 = __webpack_require__(73); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(74); var AbstractCustomNode_1 = __webpack_require__(5); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2565,7 +2570,7 @@ exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2636,7 +2641,7 @@ exports.CatchClauseObfuscator = CatchClauseObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2711,7 +2716,7 @@ exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2857,7 +2862,7 @@ exports.LiteralObfuscator = LiteralObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -2942,7 +2947,7 @@ exports.MemberExpressionObfuscator = MemberExpressionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3003,7 +3008,7 @@ exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3089,7 +3094,7 @@ exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3166,7 +3171,7 @@ exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3205,7 +3210,7 @@ exports.BooleanLiteralReplacer = BooleanLiteralReplacer; "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -3220,8 +3225,8 @@ 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__(76); -var TSourceMapMode_1 = __webpack_require__(74); +var class_validator_1 = __webpack_require__(77); +var TSourceMapMode_1 = __webpack_require__(75); var DefaultPreset_1 = __webpack_require__(21); var OptionsNormalizer_1 = __webpack_require__(56); var ValidationErrorsFormatter_1 = __webpack_require__(57); @@ -3277,7 +3282,7 @@ var _a; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3446,7 +3451,7 @@ exports.OptionsNormalizer = OptionsNormalizer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3513,7 +3518,7 @@ exports.ValidationErrorsFormatter = ValidationErrorsFormatter; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3521,6 +3526,7 @@ var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(6); var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(59); var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(60); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(61); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); @@ -3528,7 +3534,7 @@ var StackTraceAnalyzer = function () { function StackTraceAnalyzer(blockScopeBody) { _classCallCheck(this, StackTraceAnalyzer); - this.calleeDataExtractors = new Map([[NodeType_1.NodeType.FunctionDeclaration, FunctionDeclarationCalleeDataExtractor_1.FunctionDeclarationCalleeDataExtractor], [NodeType_1.NodeType.FunctionExpression, FunctionExpressionCalleeDataExtractor_1.FunctionExpressionCalleeDataExtractor]]); + this.calleeDataExtractors = new Map([[NodeType_1.NodeType.FunctionDeclaration, FunctionDeclarationCalleeDataExtractor_1.FunctionDeclarationCalleeDataExtractor], [NodeType_1.NodeType.FunctionExpression, FunctionExpressionCalleeDataExtractor_1.FunctionExpressionCalleeDataExtractor], [NodeType_1.NodeType.ObjectExpression, ObjectExpressionCalleeDataExtractor_1.ObjectExpressionCalleeDataExtractor]]); this.blockScopeBody = blockScopeBody; } @@ -3603,7 +3609,7 @@ exports.StackTraceAnalyzer = StackTraceAnalyzer; "use strict"; "use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +var _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"); } } @@ -3719,6 +3725,137 @@ exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtr /***/ }, /* 61 */ +/***/ 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 estraverse = __webpack_require__(3); +var Nodes_1 = __webpack_require__(2); +var NodeUtils_1 = __webpack_require__(1); + +var ObjectExpressionCalleeDataExtractor = function () { + function ObjectExpressionCalleeDataExtractor(blockScopeBody, callee) { + _classCallCheck(this, ObjectExpressionCalleeDataExtractor); + + this.objectMembersCallsChain = []; + this.blockScopeBody = blockScopeBody; + this.callee = callee; + } + + _createClass(ObjectExpressionCalleeDataExtractor, [{ + key: 'extract', + value: function extract() { + var calleeBlockStatement = null, + functionExpressionName = null; + if (Nodes_1.Nodes.isMemberExpressionNode(this.callee)) { + this.objectMembersCallsChain = this.createObjectMembersCallsChain(this.objectMembersCallsChain, this.callee); + if (!this.objectMembersCallsChain.length) { + return null; + } + functionExpressionName = this.objectMembersCallsChain[this.objectMembersCallsChain.length - 1]; + calleeBlockStatement = this.getCalleeBlockStatement(NodeUtils_1.NodeUtils.getBlockScopeOfNode(this.blockScopeBody[0]), this.objectMembersCallsChain); + } + if (!calleeBlockStatement) { + return null; + } + return { + callee: calleeBlockStatement, + name: functionExpressionName + }; + } + }, { + key: 'createObjectMembersCallsChain', + value: function createObjectMembersCallsChain(currentChain, memberExpression) { + if (Nodes_1.Nodes.isIdentifierNode(memberExpression.property)) { + currentChain.unshift(memberExpression.property.name); + } else if (Nodes_1.Nodes.isLiteralNode(memberExpression.property) && typeof memberExpression.property.value === 'string') { + currentChain.unshift(memberExpression.property.value); + } else { + return currentChain; + } + if (Nodes_1.Nodes.isMemberExpressionNode(memberExpression.object)) { + return this.createObjectMembersCallsChain(currentChain, memberExpression.object); + } + if (Nodes_1.Nodes.isIdentifierNode(memberExpression.object)) { + currentChain.unshift(memberExpression.object.name); + } + return currentChain; + } + }, { + key: 'getCalleeBlockStatement', + value: function getCalleeBlockStatement(node, objectMembersCallsChain) { + var _this = this; + + var objectName = objectMembersCallsChain.shift(); + var calleeBlockStatement = null; + estraverse.traverse(node, { + enter: function enter(node, parentNode) { + if (Nodes_1.Nodes.isVariableDeclaratorNode(node) && Nodes_1.Nodes.isIdentifierNode(node.id) && node.init && Nodes_1.Nodes.isObjectExpressionNode(node.init) && node.id.name === objectName) { + calleeBlockStatement = _this.findCalleeBlockStatement(node.init.properties, objectMembersCallsChain); + return estraverse.VisitorOption.Break; + } + } + }); + return calleeBlockStatement; + } + }, { + key: 'findCalleeBlockStatement', + value: function findCalleeBlockStatement(objectExpressionProperties, objectMembersCallsChain) { + var nextItemInCallsChain = objectMembersCallsChain.shift(); + if (!nextItemInCallsChain) { + return null; + } + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = objectExpressionProperties[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var propertyNode = _step.value; + + var isTargetPropertyNodeWithIdentifierKey = Nodes_1.Nodes.isIdentifierNode(propertyNode.key) && propertyNode.key.name === nextItemInCallsChain; + var isTargetPropertyNodeWithLiteralKey = Nodes_1.Nodes.isLiteralNode(propertyNode.key) && Boolean(propertyNode.key.value) && propertyNode.key.value === nextItemInCallsChain; + if (!isTargetPropertyNodeWithIdentifierKey || isTargetPropertyNodeWithLiteralKey) { + continue; + } + if (Nodes_1.Nodes.isObjectExpressionNode(propertyNode.value)) { + return this.findCalleeBlockStatement(propertyNode.value.properties, objectMembersCallsChain); + } + if (Nodes_1.Nodes.isFunctionExpressionNode(propertyNode.value)) { + return propertyNode.value.body; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return null; + } + }]); + + return ObjectExpressionCalleeDataExtractor; +}(); + +exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; + +/***/ }, +/* 62 */ /***/ function(module, exports) { "use strict"; @@ -3730,19 +3867,19 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 62 */ +/* 63 */ /***/ function(module, exports) { "use strict"; "use strict"; function ConsoleOutputDisableExpressionTemplate() { - return "\n (function () {\n var _ = '(\u0004\u0006\u0003\u0005[]' + '[\"filter\"][\"\u0007tructor\"]' + '(\"return this\")()' + '.' + '\u0003;\u0006\u0002\u0005\u0004};' + '_\u0003.log\u0001.in' + 'fo\u0001.' + 'war' + 'n\u0001.er' + 'r' + 'or\u0001})();' + '\u0001\u0005_\u0002;' + '_\u0003\u0002function' + '\u0003\u0007ole\u0004\u0002 ()' + '{\u0005 = \u0006var ' + '_\u0007cons', \n Y, \n $;\n \n for (Y in $ = \"\u0007\u0006\u0005\u0004\u0003\u0002\u0001\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; + return "\n (function () {\n var _ = '(\x04\x06\x03\x05[]' + '[\"filter\"][\"\x07tructor\"]' + '(\"return this\")()' + '.' + '\x03;\x06\x02\x05\x04};' + '_\x03.log\x01.in' + 'fo\x01.' + 'war' + 'n\x01.er' + 'r' + 'or\x01})();' + '\x01\x05_\x02;' + '_\x03\x02function' + '\x03\x07ole\x04\x02 ()' + '{\x05 = \x06var ' + '_\x07cons', \n Y, \n $;\n \n for (Y in $ = \"\x07\x06\x05\x04\x03\x02\x01\") {\n var arr = _.split($[Y]);\n _ = arr.join(arr.pop());\n }\n \n [][\"filter\"][\"constructor\"](_)();\n })()\n "; } exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 63 */ +/* 64 */ /***/ function(module, exports) { "use strict"; @@ -3754,7 +3891,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 64 */ +/* 65 */ /***/ function(module, exports) { "use strict"; @@ -3766,7 +3903,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 65 */ +/* 66 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3779,7 +3916,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 66 */ +/* 67 */ /***/ function(module, exports) { "use strict"; @@ -3791,7 +3928,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 67 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3804,7 +3941,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 68 */ +/* 69 */ /***/ function(module, exports) { "use strict"; @@ -3816,7 +3953,7 @@ function UnicodeArrayCallsWrapperTemplate() { exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 69 */ +/* 70 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3829,7 +3966,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 70 */ +/* 71 */ /***/ function(module, exports) { "use strict"; @@ -3841,7 +3978,7 @@ function UnicodeArrayDecodeNodeTemplate() { exports.UnicodeArrayDecodeNodeTemplate = UnicodeArrayDecodeNodeTemplate; /***/ }, -/* 71 */ +/* 72 */ /***/ function(module, exports) { "use strict"; @@ -3853,7 +3990,7 @@ function UnicodeArrayTemplate() { exports.UnicodeArrayTemplate = UnicodeArrayTemplate; /***/ }, -/* 72 */ +/* 73 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3866,7 +4003,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 73 */ +/* 74 */ /***/ function(module, exports) { "use strict"; @@ -3877,45 +4014,45 @@ function UnicodeArrayRotateFunctionTemplate() { } exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; -/***/ }, -/* 74 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - /***/ }, /* 75 */ /***/ function(module, exports) { -module.exports = require("chance"); +"use strict"; +"use strict"; /***/ }, /* 76 */ /***/ function(module, exports) { -module.exports = require("class-validator"); +module.exports = require("chance"); /***/ }, /* 77 */ /***/ function(module, exports) { -module.exports = require("commander"); +module.exports = require("class-validator"); /***/ }, /* 78 */ /***/ function(module, exports) { -module.exports = require("fs"); +module.exports = require("commander"); /***/ }, /* 79 */ /***/ function(module, exports) { -module.exports = require("mkdirp"); +module.exports = require("fs"); /***/ }, /* 80 */ +/***/ function(module, exports) { + +module.exports = require("mkdirp"); + +/***/ }, +/* 81 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/Nodes.ts b/src/Nodes.ts index ca98db16..f1a6574d 100644 --- a/src/Nodes.ts +++ b/src/Nodes.ts @@ -90,6 +90,14 @@ export class Nodes { return node.type === NodeType.MemberExpression; } + /** + * @param node + * @returns {boolean} + */ + public static isObjectExpressionNode (node: ESTree.Node): node is ESTree.ObjectExpression { + return node.type === NodeType.ObjectExpression; + } + /** * * @param node diff --git a/src/stack-trace-analyzer/StackTraceAnalyzer.ts b/src/stack-trace-analyzer/StackTraceAnalyzer.ts index ab0d4919..faf13e1c 100644 --- a/src/stack-trace-analyzer/StackTraceAnalyzer.ts +++ b/src/stack-trace-analyzer/StackTraceAnalyzer.ts @@ -11,6 +11,8 @@ import { NodeType } from '../enums/NodeType'; import { FunctionDeclarationCalleeDataExtractor } from './callee-data-extractors/FunctionDeclarationCalleeDataExtractor'; import { FunctionExpressionCalleeDataExtractor } from './callee-data-extractors/FunctionExpressionCalleeDataExtractor'; +import { ObjectExpressionCalleeDataExtractor } from './callee-data-extractors/ObjectExpressionCalleeDataExtractor'; + import { Nodes } from '../Nodes'; import { NodeUtils } from '../NodeUtils'; @@ -56,7 +58,8 @@ export class StackTraceAnalyzer implements IStackTraceAnalyzer { */ private calleeDataExtractors: Map = new Map ([ [NodeType.FunctionDeclaration, FunctionDeclarationCalleeDataExtractor], - [NodeType.FunctionExpression, FunctionExpressionCalleeDataExtractor] + [NodeType.FunctionExpression, FunctionExpressionCalleeDataExtractor], + [NodeType.ObjectExpression, ObjectExpressionCalleeDataExtractor] ]); /** diff --git a/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts b/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts new file mode 100644 index 00000000..2623368b --- /dev/null +++ b/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts @@ -0,0 +1,160 @@ +import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; + +import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; + +import { ICalleeData } from '../../interfaces/stack-trace-analyzer/ICalleeData'; +import { ICalleeDataExtractor } from '../../interfaces/stack-trace-analyzer/ICalleeDataExtractor'; + +import { Nodes } from '../../Nodes'; +import { NodeUtils } from '../../NodeUtils'; + +export class ObjectExpressionCalleeDataExtractor implements ICalleeDataExtractor { + /** + * @type {ESTree.Node[]} + */ + private blockScopeBody: ESTree.Node[]; + + /** + * @type {ESTree.MemberExpression} + */ + private callee: ESTree.MemberExpression; + + /** + * @type {Array} + */ + private objectMembersCallsChain: string[] = []; + + /** + * @param blockScopeBody + * @param callee + */ + constructor (blockScopeBody: ESTree.Node[], callee: ESTree.MemberExpression) { + this.blockScopeBody = blockScopeBody; + this.callee = callee; + } + + /** + * @returns {ICalleeData|null} + */ + public extract (): ICalleeData|null { + let calleeBlockStatement: TNodeWithBlockStatement|null = null, + functionExpressionName: string|null = null; + + if (Nodes.isMemberExpressionNode(this.callee)) { + this.objectMembersCallsChain = this.createObjectMembersCallsChain(this.objectMembersCallsChain, this.callee); + + if (!this.objectMembersCallsChain.length) { + return null; + } + + functionExpressionName = this.objectMembersCallsChain[this.objectMembersCallsChain.length - 1]; + + calleeBlockStatement = this.getCalleeBlockStatement( + NodeUtils.getBlockScopeOfNode(this.blockScopeBody[0]), + this.objectMembersCallsChain + ); + } + + if (!calleeBlockStatement) { + return null; + } + + return { + callee: calleeBlockStatement, + name: functionExpressionName + }; + } + + /** + * Creates array with MemberExpression calls chain. + * + * Example: object.foo.bar(); // ['object', 'foo', 'bar'] + * + * @param currentChain + * @param memberExpression + * @returns {string[]} + */ + private createObjectMembersCallsChain (currentChain: string[], memberExpression: ESTree.MemberExpression): string[] { + if (Nodes.isIdentifierNode(memberExpression.property)) { + currentChain.unshift(memberExpression.property.name); + } else if (Nodes.isLiteralNode(memberExpression.property) && typeof memberExpression.property.value === 'string') { + currentChain.unshift(memberExpression.property.value); + } else { + return currentChain; + } + + if (Nodes.isMemberExpressionNode(memberExpression.object)) { + return this.createObjectMembersCallsChain(currentChain, memberExpression.object); + } + + if (Nodes.isIdentifierNode(memberExpression.object)) { + currentChain.unshift(memberExpression.object.name); + } + + return currentChain; + } + + /** + * @param node + * @param objectMembersCallsChain + * @returns {TNodeWithBlockStatement|null} + */ + private getCalleeBlockStatement (node: ESTree.Node, objectMembersCallsChain: string[]): TNodeWithBlockStatement|null { + const objectName: string = objectMembersCallsChain.shift(); + + let calleeBlockStatement: TNodeWithBlockStatement|null = null; + + estraverse.traverse(node, { + enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { + if ( + Nodes.isVariableDeclaratorNode(node) && + Nodes.isIdentifierNode(node.id) && + node.init && + Nodes.isObjectExpressionNode(node.init) && + node.id.name === objectName + ) { + calleeBlockStatement = this.findCalleeBlockStatement(node.init.properties, objectMembersCallsChain); + + return estraverse.VisitorOption.Break; + } + } + }); + + return calleeBlockStatement; + } + + private findCalleeBlockStatement ( + objectExpressionProperties: ESTree.Property[], + objectMembersCallsChain: string[] + ): TNodeWithBlockStatement|null { + const nextItemInCallsChain: string|undefined = objectMembersCallsChain.shift(); + + if (!nextItemInCallsChain) { + return null; + } + + for (let propertyNode of objectExpressionProperties) { + const isTargetPropertyNodeWithIdentifierKey: boolean = + Nodes.isIdentifierNode(propertyNode.key) && propertyNode.key.name === nextItemInCallsChain; + const isTargetPropertyNodeWithLiteralKey: boolean = + Nodes.isLiteralNode(propertyNode.key) && + Boolean(propertyNode.key.value) && + propertyNode.key.value === nextItemInCallsChain; + + if (!isTargetPropertyNodeWithIdentifierKey || isTargetPropertyNodeWithLiteralKey) { + continue; + } + + if (Nodes.isObjectExpressionNode(propertyNode.value)) { + return this.findCalleeBlockStatement(propertyNode.value.properties, objectMembersCallsChain); + } + + if (Nodes.isFunctionExpressionNode(propertyNode.value)) { + return propertyNode.value.body; + } + } + + return null; + } +} diff --git a/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js b/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js index 9d47e308..9e9a1c0e 100644 --- a/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js +++ b/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js @@ -1,12 +1,19 @@ var object = { - foo: function () { + foo: { + baz: function () { + } }, bar: function () { + function inner1 () { + } + + inner1(); } }; +object.foo.baz(); +object['foo'].baz(); object.bar(); -object.foo(); diff --git a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts index 0ee3cdc1..52a6349a 100644 --- a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts +++ b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts @@ -66,6 +66,32 @@ function getFunctionExpressionByName (astTree: ESTree.Node, name: string): ESTre return functionExpressionNode; } +/** + * @param astTree + * @param name + * @returns {ESTree.FunctionExpression|null} + */ +function getObjectFunctionExpressionByName (astTree: ESTree.Node, name: string): ESTree.FunctionExpression|null { + let functionExpressionNode: ESTree.FunctionExpression|null = null; + + estraverse.traverse(astTree, { + enter: (node: ESTree.Node): any => { + if ( + Nodes.isPropertyNode(node) && + Nodes.isFunctionExpressionNode(node.value) && + Nodes.isIdentifierNode(node.key) && + node.key.name === name + ) { + functionExpressionNode = node.value; + + return estraverse.VisitorOption.Break; + } + } + }); + + return functionExpressionNode; +} + /** * @param astTree * @param id @@ -239,7 +265,31 @@ describe('StackTraceAnalyzer', () => { false ); - expectedStackTraceData = []; + expectedStackTraceData = [ + { + name: 'baz', + callee: (getObjectFunctionExpressionByName(astTree, 'baz')).body, + stackTrace: [] + }, + { + name: 'baz', + callee: (getObjectFunctionExpressionByName(astTree, 'baz')).body, + stackTrace: [] + }, + { + name: 'bar', + callee: (getObjectFunctionExpressionByName(astTree, 'bar')).body, + stackTrace: [ + { + name: 'inner1', + callee: (getFunctionDeclarationByName(astTree, 'inner1')).body, + stackTrace: [ + + ] + }, + ] + }, + ]; stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); From 0d4c6b4f1ef366929c76e6ed61204236037781da Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sat, 15 Oct 2016 20:36:05 +0300 Subject: [PATCH 079/138] Added ObjectExpressionCalleeDataExtractor: added tests --- .../call-expression-of-object-member.js | 22 +++- .../stack-trace-analyzer/no-recursion.js | 4 + .../StackTraceAnalyzer.spec.ts | 112 +++++++++++++----- 3 files changed, 107 insertions(+), 31 deletions(-) create mode 100644 test/fixtures/stack-trace-analyzer/no-recursion.js diff --git a/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js b/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js index 9e9a1c0e..01a8e837 100644 --- a/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js +++ b/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js @@ -5,6 +5,22 @@ var object = { } }, + bar: function () { + function inner () { + + } + + inner(); + } +}; + +var object1 = { + foo: { + baz: function () { + + } + }, + bar: function () { function inner1 () { @@ -14,6 +30,8 @@ var object = { } }; -object.foo.baz(); -object['foo'].baz(); +object1.foo.baz(); +object1['foo'].baz(); +object1.bar(); + object.bar(); diff --git a/test/fixtures/stack-trace-analyzer/no-recursion.js b/test/fixtures/stack-trace-analyzer/no-recursion.js new file mode 100644 index 00000000..b693ef3d --- /dev/null +++ b/test/fixtures/stack-trace-analyzer/no-recursion.js @@ -0,0 +1,4 @@ +var bar = function () { +}; + +bar(); \ No newline at end of file diff --git a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts index 52a6349a..3e4643ef 100644 --- a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts +++ b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts @@ -66,32 +66,6 @@ function getFunctionExpressionByName (astTree: ESTree.Node, name: string): ESTre return functionExpressionNode; } -/** - * @param astTree - * @param name - * @returns {ESTree.FunctionExpression|null} - */ -function getObjectFunctionExpressionByName (astTree: ESTree.Node, name: string): ESTree.FunctionExpression|null { - let functionExpressionNode: ESTree.FunctionExpression|null = null; - - estraverse.traverse(astTree, { - enter: (node: ESTree.Node): any => { - if ( - Nodes.isPropertyNode(node) && - Nodes.isFunctionExpressionNode(node.value) && - Nodes.isIdentifierNode(node.key) && - node.key.name === name - ) { - functionExpressionNode = node.value; - - return estraverse.VisitorOption.Break; - } - } - }); - - return functionExpressionNode; -} - /** * @param astTree * @param id @@ -118,6 +92,54 @@ function getFunctionExpressionById (astTree: ESTree.Node, id: string): ESTree.Fu return functionExpressionNode; } +/** + * @param astTree + * @param objectName + * @param name + * @returns {ESTree.FunctionExpression|null} + */ +function getObjectFunctionExpressionByName (astTree: ESTree.Node, objectName: string, name: string): ESTree.FunctionExpression|null { + let functionExpressionNode: ESTree.FunctionExpression|null = null, + targetObjectExpressionNode: ESTree.ObjectExpression|null = null; + + estraverse.traverse(astTree, { + enter: (node: ESTree.Node): any => { + if ( + Nodes.isVariableDeclaratorNode(node) && + Nodes.isIdentifierNode(node.id) && + node.init && + Nodes.isObjectExpressionNode(node.init) && + node.id.name === objectName + ) { + targetObjectExpressionNode = node.init; + + return estraverse.VisitorOption.Break; + } + } + }); + + if (!targetObjectExpressionNode) { + return null; + } + + estraverse.traverse(targetObjectExpressionNode, { + enter: (node: ESTree.Node): any => { + if ( + Nodes.isPropertyNode(node) && + Nodes.isFunctionExpressionNode(node.value) && + Nodes.isIdentifierNode(node.key) && + node.key.name === name + ) { + functionExpressionNode = node.value; + + return estraverse.VisitorOption.Break; + } + } + }); + + return functionExpressionNode; +} + describe('StackTraceAnalyzer', () => { describe('extract (): IStackTraceData[]', () => { let astTree: TNodeWithBlockStatement, @@ -268,17 +290,17 @@ describe('StackTraceAnalyzer', () => { expectedStackTraceData = [ { name: 'baz', - callee: (getObjectFunctionExpressionByName(astTree, 'baz')).body, + callee: (getObjectFunctionExpressionByName(astTree, 'object1', 'baz')).body, stackTrace: [] }, { name: 'baz', - callee: (getObjectFunctionExpressionByName(astTree, 'baz')).body, + callee: (getObjectFunctionExpressionByName(astTree, 'object1', 'baz')).body, stackTrace: [] }, { name: 'bar', - callee: (getObjectFunctionExpressionByName(astTree, 'bar')).body, + callee: (getObjectFunctionExpressionByName(astTree, 'object1', 'bar')).body, stackTrace: [ { name: 'inner1', @@ -289,6 +311,19 @@ describe('StackTraceAnalyzer', () => { }, ] }, + { + name: 'bar', + callee: (getObjectFunctionExpressionByName(astTree, 'object', 'bar')).body, + stackTrace: [ + { + name: 'inner', + callee: (getFunctionDeclarationByName(astTree, 'inner')).body, + stackTrace: [ + + ] + }, + ] + } ]; stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); @@ -352,5 +387,24 @@ describe('StackTraceAnalyzer', () => { assert.deepEqual(stackTraceData, expectedStackTraceData); }); + + it('should returns correct BlockScopeTraceData - variant #9: no recursion', () => { + astTree = NodeUtils.convertCodeToStructure( + readFileAsString('./test/fixtures/stack-trace-analyzer/no-recursion.js'), + false + ); + + expectedStackTraceData = [ + { + name: 'bar', + callee: (getFunctionExpressionByName(astTree, 'bar')).body, + stackTrace: [] + } + ]; + + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); + + assert.deepEqual(stackTraceData, expectedStackTraceData); + }); }); }); From 525f77fbb8ed9665e62e44c6fa6d5903cf6d3f78 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sat, 15 Oct 2016 21:17:21 +0300 Subject: [PATCH 080/138] Added ObjectExpressionCalleeDataExtractor: added tests --- dist/index.js | 7 ++++--- .../ObjectExpressionCalleeDataExtractor.ts | 2 +- .../call-expression-of-object-member.js | 2 +- .../stack-trace-analyzer/StackTraceAnalyzer.spec.ts | 6 ++++-- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/dist/index.js b/dist/index.js index ae6417de..924222a8 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 = 81); +/******/ return __webpack_require__(__webpack_require__.s = 82); /******/ }) /************************************************************************/ /******/ ([ @@ -3820,7 +3820,7 @@ var ObjectExpressionCalleeDataExtractor = function () { var isTargetPropertyNodeWithIdentifierKey = Nodes_1.Nodes.isIdentifierNode(propertyNode.key) && propertyNode.key.name === nextItemInCallsChain; var isTargetPropertyNodeWithLiteralKey = Nodes_1.Nodes.isLiteralNode(propertyNode.key) && Boolean(propertyNode.key.value) && propertyNode.key.value === nextItemInCallsChain; - if (!isTargetPropertyNodeWithIdentifierKey || isTargetPropertyNodeWithLiteralKey) { + if (!isTargetPropertyNodeWithIdentifierKey && !isTargetPropertyNodeWithLiteralKey) { continue; } if (Nodes_1.Nodes.isObjectExpressionNode(propertyNode.value)) { @@ -4052,7 +4052,8 @@ module.exports = require("fs"); module.exports = require("mkdirp"); /***/ }, -/* 81 */ +/* 81 */, +/* 82 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts b/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts index 2623368b..785a1d36 100644 --- a/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts +++ b/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts @@ -142,7 +142,7 @@ export class ObjectExpressionCalleeDataExtractor implements ICalleeDataExtractor Boolean(propertyNode.key.value) && propertyNode.key.value === nextItemInCallsChain; - if (!isTargetPropertyNodeWithIdentifierKey || isTargetPropertyNodeWithLiteralKey) { + if (!isTargetPropertyNodeWithIdentifierKey && !isTargetPropertyNodeWithLiteralKey) { continue; } diff --git a/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js b/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js index 01a8e837..aa19b6da 100644 --- a/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js +++ b/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js @@ -21,7 +21,7 @@ var object1 = { } }, - bar: function () { + 'bar': function () { function inner1 () { } diff --git a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts index 3e4643ef..c82dcc98 100644 --- a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts +++ b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts @@ -127,8 +127,10 @@ function getObjectFunctionExpressionByName (astTree: ESTree.Node, objectName: st if ( Nodes.isPropertyNode(node) && Nodes.isFunctionExpressionNode(node.value) && - Nodes.isIdentifierNode(node.key) && - node.key.name === name + ( + (Nodes.isIdentifierNode(node.key) && node.key.name === name) || + (Nodes.isLiteralNode(node.key) && node.key.value === name) + ) ) { functionExpressionNode = node.value; From 1fc50304b50b4b3fc4d759a6c79231e2fe2fe7b1 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 16 Oct 2016 01:05:58 +0300 Subject: [PATCH 081/138] Added ObjectExpressionCalleeDataExtractor: added tests --- dist/index.js | 5 ++--- .../stack-trace-analyzer/call-expression-of-object-member.js | 5 +++++ .../stack-trace-analyzer/StackTraceAnalyzer.spec.ts | 5 +++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/dist/index.js b/dist/index.js index 924222a8..d4a30de5 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 = 82); +/******/ return __webpack_require__(__webpack_require__.s = 81); /******/ }) /************************************************************************/ /******/ ([ @@ -4052,8 +4052,7 @@ module.exports = require("fs"); module.exports = require("mkdirp"); /***/ }, -/* 81 */, -/* 82 */ +/* 81 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js b/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js index aa19b6da..87c9d993 100644 --- a/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js +++ b/test/fixtures/stack-trace-analyzer/call-expression-of-object-member.js @@ -18,6 +18,10 @@ var object1 = { foo: { baz: function () { + }, + + func: function () { + } }, @@ -32,6 +36,7 @@ var object1 = { object1.foo.baz(); object1['foo'].baz(); +object1['foo'].func(); object1.bar(); object.bar(); diff --git a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts index c82dcc98..2ce84cfd 100644 --- a/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts +++ b/test/functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts @@ -300,6 +300,11 @@ describe('StackTraceAnalyzer', () => { callee: (getObjectFunctionExpressionByName(astTree, 'object1', 'baz')).body, stackTrace: [] }, + { + name: 'func', + callee: (getObjectFunctionExpressionByName(astTree, 'object1', 'func')).body, + stackTrace: [] + }, { name: 'bar', callee: (getObjectFunctionExpressionByName(astTree, 'object1', 'bar')).body, From ba49e8edcda9dc3b51bd2ceb47f5a07c532e640f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 16 Oct 2016 01:10:02 +0300 Subject: [PATCH 082/138] replaced let on const in for-of loops --- src/cli/JavaScriptObfuscatorCLI.ts | 2 +- src/options/OptionsNormalizer.ts | 4 ++-- src/options/ValidationErrorsFormatter.ts | 4 ++-- src/stack-trace-analyzer/StackTraceAnalyzer.ts | 2 +- .../ObjectExpressionCalleeDataExtractor.ts | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index 2c245a39..824bdb13 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -102,7 +102,7 @@ export class JavaScriptObfuscatorCLI { let obfuscatorOptions: IObfuscatorOptions = {}, availableOptions: string[] = Object.keys(DEFAULT_PRESET); - for (let option in this.commands) { + for (const option in this.commands) { if (!this.commands.hasOwnProperty(option)) { continue; } diff --git a/src/options/OptionsNormalizer.ts b/src/options/OptionsNormalizer.ts index f58d89fb..b497cee7 100644 --- a/src/options/OptionsNormalizer.ts +++ b/src/options/OptionsNormalizer.ts @@ -53,7 +53,7 @@ export class OptionsNormalizer { public static normalizeOptions (options: IOptions): IOptions { let normalizedOptions: IOptions = Object.assign({}, options); - for (let normalizerRule of OptionsNormalizer.normalizerRules) { + for (const normalizerRule of OptionsNormalizer.normalizerRules) { normalizedOptions = normalizerRule(normalizedOptions); } @@ -68,7 +68,7 @@ export class OptionsNormalizer { if (options.domainLock.length) { let normalizedDomains: string[] = []; - for (let domain of options.domainLock) { + for (const domain of options.domainLock) { normalizedDomains.push(Utils.extractDomainFromUrl(domain)); } diff --git a/src/options/ValidationErrorsFormatter.ts b/src/options/ValidationErrorsFormatter.ts index 397bd1eb..e04ef666 100644 --- a/src/options/ValidationErrorsFormatter.ts +++ b/src/options/ValidationErrorsFormatter.ts @@ -8,7 +8,7 @@ export class ValidationErrorsFormatter { public static format (validationErrors: ValidationError[]): string { let errorsArray: string[] = []; - for (let error of validationErrors) { + for (const error of validationErrors) { errorsArray.push(ValidationErrorsFormatter.formatError(error)); } @@ -23,7 +23,7 @@ export class ValidationErrorsFormatter { let errorString: string = `\`${validationError.property}\` errors:\n`, constraints: {[type: string]: string} = validationError.constraints; - for (let constraint in constraints) { + for (const constraint in constraints) { if (!constraints.hasOwnProperty(constraint)) { continue; } diff --git a/src/stack-trace-analyzer/StackTraceAnalyzer.ts b/src/stack-trace-analyzer/StackTraceAnalyzer.ts index faf13e1c..34089e8d 100644 --- a/src/stack-trace-analyzer/StackTraceAnalyzer.ts +++ b/src/stack-trace-analyzer/StackTraceAnalyzer.ts @@ -83,7 +83,7 @@ export class StackTraceAnalyzer implements IStackTraceAnalyzer { private analyzeRecursive (blockScopeBody: ESTree.Node[]): IStackTraceData[] { const stackTraceData: IStackTraceData[] = []; - for (let rootNode of blockScopeBody) { + for (const rootNode of blockScopeBody) { estraverse.traverse(rootNode, { enter: (node: ESTree.Node): any => { if (!Nodes.isCallExpressionNode(node) || rootNode.parentNode !== NodeUtils.getBlockScopeOfNode(node)) { diff --git a/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts b/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts index 785a1d36..f09a16c2 100644 --- a/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts +++ b/src/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts @@ -134,7 +134,7 @@ export class ObjectExpressionCalleeDataExtractor implements ICalleeDataExtractor return null; } - for (let propertyNode of objectExpressionProperties) { + for (const propertyNode of objectExpressionProperties) { const isTargetPropertyNodeWithIdentifierKey: boolean = Nodes.isIdentifierNode(propertyNode.key) && propertyNode.key.name === nextItemInCallsChain; const isTargetPropertyNodeWithLiteralKey: boolean = From a17ef0e968416921729685a5a09d02bec8deec73 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Thu, 20 Oct 2016 08:54:40 +0300 Subject: [PATCH 083/138] travis-ci yarn test --- .travis.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.travis.yml b/.travis.yml index add483a5..c371071c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,17 @@ node_js: - "6" - "stable" +before_install: + # https://yarnpkg.com/en/docs/install_ci + - curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - + - sudo apt-key adv --keyserver pgp.mit.edu --recv D101F7899D41F3C3 + - echo "deb http://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list + - sudo apt-get update -qq + - sudo apt-get install -y -qq yarn +cache: + directories: + - $HOME/.yarn-cache + script: "npm run travis" after_success: From 4efeb6eececf206268e4ee069dc15f74b77fdfd8 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 20 Oct 2016 11:28:45 +0300 Subject: [PATCH 084/138] reverted to prev commit --- .travis.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index c371071c..add483a5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,17 +8,6 @@ node_js: - "6" - "stable" -before_install: - # https://yarnpkg.com/en/docs/install_ci - - curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - - - sudo apt-key adv --keyserver pgp.mit.edu --recv D101F7899D41F3C3 - - echo "deb http://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list - - sudo apt-get update -qq - - sudo apt-get install -y -qq yarn -cache: - directories: - - $HOME/.yarn-cache - script: "npm run travis" after_success: From a2cd1b20d912f6ff51df671beb16eac29cfd43d1 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 21 Oct 2016 12:55:19 +0300 Subject: [PATCH 085/138] deps update --- package.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index ad6dad0d..68647419 100644 --- a/package.json +++ b/package.json @@ -22,14 +22,14 @@ "dependencies": { "babel-polyfill": "6.16.0", "chance": "1.0.4", - "class-validator": "0.6.1", + "class-validator": "0.6.4", "commander": "2.9.0", "escodegen": "1.8.1", - "esprima": "3.0.0", + "esprima": "3.1.0", "estraverse": "4.2.0", "format-unicorn": "1.1.0", "mkdirp": "0.5.1", - "source-map-support": "0.4.3" + "source-map-support": "0.4.5" }, "devDependencies": { "@types/chai": "3.4.34", @@ -43,7 +43,7 @@ "@types/joi": "9.0.32", "@types/mkdirp": "0.3.29", "@types/mocha": "2.2.32", - "@types/node": "6.0.42", + "@types/node": "6.0.45", "@types/sinon": "1.16.31", "awesome-typescript-loader": "2.2.4", "babel-cli": "6.16.0", @@ -52,14 +52,14 @@ "chai": "3.5.0", "coveralls": "2.11.14", "istanbul": "1.1.0-alpha.1", - "mocha": "3.1.0", + "mocha": "3.1.2", "optimize-js-plugin": "0.0.4", "sinon": "2.0.0-pre.3", - "ts-node": "1.3.0", + "ts-node": "1.6.0", "tslint": "3.15.1", "typescript": "2.0.3", "webpack": "2.1.0-beta.25", - "webpack-node-externals": "1.4.3" + "webpack-node-externals": "1.5.4" }, "repository": { "type": "git", From dff2551aab293a5dbc6a513b1a084fa43730cf7b Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 25 Oct 2016 22:48:30 +0300 Subject: [PATCH 086/138] update package.json and readme --- README.md | 12 +++++++----- package.json | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 151df6cb..eca97274 100644 --- a/README.md +++ b/README.md @@ -12,14 +12,16 @@ JavaScript obfuscator for Node.js is a free alternative to [js-obfuscator](https * compatible with ES6; * tested on Angular2 bundle. -https://gist.github.com/sanex3339/ffc2876123b52e6d11ce45369fd53acf +Online version: [javascriptobfuscator.herokuapp.com](https://javascriptobfuscator.herokuapp.com) + +Example of obfuscated code: [gist.github.com](https://gist.github.com/sanex3339/ffc2876123b52e6d11ce45369fd53acf) [![npm version](https://badge.fury.io/js/javascript-obfuscator.svg)](https://badge.fury.io/js/javascript-obfuscator) -[![Build Status](https://travis-ci.org/sanex3339/javascript-obfuscator.svg?branch=master)](https://travis-ci.org/sanex3339/javascript-obfuscator) -[![Coverage Status](https://coveralls.io/repos/github/sanex3339/javascript-obfuscator/badge.svg?branch=master)](https://coveralls.io/github/sanex3339/javascript-obfuscator?branch=master) +[![Build Status](https://travis-ci.org/javascript-obfuscator/javascript-obfuscator.svg?branch=master)](https://travis-ci.org/javascript-obfuscator/javascript-obfuscator) +[![Coverage Status](https://coveralls.io/repos/github/javascript-obfuscator/javascript-obfuscator/badge.svg?branch=master)](https://coveralls.io/github/javascript-obfuscator/javascript-obfuscator?branch=master) -[![Dependency Status](https://david-dm.org/sanex3339/javascript-obfuscator.svg)](https://david-dm.org/sanex3339/javascript-obfuscator) -[![devDependency Status](https://david-dm.org/sanex3339/javascript-obfuscator/dev-status.svg)](https://david-dm.org/sanex3339/javascript-obfuscator#info=devDependencies) +[![Dependency Status](https://david-dm.org/javascript-obfuscator/javascript-obfuscator.svg)](https://david-dm.org/javascript-obfuscator/javascript-obfuscator) +[![devDependency Status](https://david-dm.org/javascript-obfuscator/javascript-obfuscator/dev-status.svg)](https://david-dm.org/javascript-obfuscator/javascript-obfuscator#info=devDependencies) ## Installation diff --git a/package.json b/package.json index 68647419..61aa750c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "0.8.0-dev.1", + "version": "0.8.0-dev.2", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", @@ -63,7 +63,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/sanex3339/javascript-obfuscator.git" + "url": "git+https://github.com/javascript-obfuscator/javascript-obfuscator.git" }, "scripts": { "start": "scripts/start", From 21d8f7b5695f2048f32d04524dd3f8260df6190d Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 25 Oct 2016 23:44:10 +0300 Subject: [PATCH 087/138] readme update --- README.md | 48 +++++++++++-------- dist/index.js | 5 +- .../DomainLockNodeTemplate.ts | 4 +- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index eca97274..f0e8f331 100644 --- a/README.md +++ b/README.md @@ -153,15 +153,14 @@ Following options available for the JS Obfuscator: ### `compact` Type: `boolean` Default: `true` - Compact code output on one line. ### `debugProtection` Type: `boolean` Default: `false` -##### :warning: Can freeze browser while Developer Tools are enabled! Use at own risk. +##### :warning: Can freeze your browser if you open the Developer Tools. -Force enable debug mode on page load if Developer Tools panel is enabled (in some, mainly WebKit-based, browsers). This makes it almost impossible to use the Console (the debug panel). +This option makes it almost impossible to use the `console` tab of the Developer Tools (both on WebKit-based and Mozilla Firefox). * WebKit-based: blocks the site window, but you still can navigate through Developer Tools panel. * Firefox: does *not* block the site window, but still won't let you use DevTools. @@ -169,31 +168,36 @@ Force enable debug mode on page load if Developer Tools panel is enabled (in som ### `debugProtectionInterval` Type: `boolean` Default: `false` -##### :warning: Can freeze browser even while Developer Tools are disabled! Use at own risk. +##### :warning: Can freeze your browser! Use at own risk. -Works if `debugProtection` is enabled. - -Force enable debug mode in some browsers (mainly WebKit-based) when Developer Tools panel is enabled, even after page is loaded. +If checked, an interval is used to force the debug mode on the Console tab, making it harder to use other features of the Developer Tools. Works if `debugProtection` is enabled. ### `disableConsoleOutput` Type: `boolean` Default: `true` -Disable `console.log`, `console.info`, `console.error` and `console.warn` messages output into the browser console. +Disables the use of `console.log`, `console.info`, `console.error` and `console.warn` by replacing them with empty functions. This makes the use of the debugger harder. + +### `domainLock` +Type: `string[]` Default: `[]` + +Locks the obfuscated source code so it only runs on specific domains and/or sub-domains. This makes really hard for someone just copy and paste your source code and run elsewhere. + +##### Multiple domains and sub-domains +It's possible to lock your code to more than one domain or sub-domain. For instance, to lock it so the code only runs on **www.example.com** add `www.example.com`, to make it work on any sub-domain from example.com, use `.example.com`. ### `encodeUnicodeLiterals` Type: `boolean` Default: `false` ##### :warning: `unicodeArray` option must be enabled -This option can slightly slow down your code speed. +This option can slightly slow down your script. -All literals in Unicode array become encoded in Base64. -To decode strings, a special function will be inserted on the page under `unicodeArray` node. +Encode all string literals of the `unicodeArray` using base64 and inserts a special function that it's used to decode it back at runtime. ### `reservedNames` Type: `string[]` Default: `[]` -Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp pattern. +Disables the obfuscation of variables names, function names and function parameters that match the Regular Expression used. Example: ```javascript @@ -210,24 +214,25 @@ Type: `boolean` Default: `true` ##### :warning: `unicodeArray` must be enabled -Shift the `unicodeArray` values by a random number of places during the code obfuscation and insert a helper function for shifting the array back into the source code. (It works just like the Caesar cypher.) +Shift the `unicodeArray` array by a fixed and random (generated at the code obfuscation) places. This makes it harder to match the order of the removed strings to their original place. -Keep in mind that this option affects only how the code is visually organised, since the original arrays can be easily accessed during the debug process. +This option is recommended if your original source code isn't small, as the helper function can attract attention. -It is also not recommended to enable `rotateUnicodeArray` for small source code because a helper function might attract attention. ### `selfDefending` Type: `boolean` Default: `true` ##### :warning: this option forcibly set `compact` value to `true` -Enables self-defending for obfuscated code. If obfuscated compact code is formatted, it will not work any more. +This option makes the output code resilient against formatting and variable renaming. If one tries to use a JavaScript beautifier on the obfuscated code, the code won't work anymore, making it harder to understand and modify it. ### `sourceMap` Type: `boolean` Default: `false` Enables source map generation for obfuscated code. +Source maps can be useful to help you debug your obfuscated Java Script source code. If you want or need to debug in production, you can upload the separate source map file to a secret location and then point your browser there. + ### `sourceMapBaseUrl` Type: `string` Default: `` @@ -268,15 +273,16 @@ Specifies source map generation mode: ### `unicodeArray` Type: `boolean` Default: `true` -Put all literal strings into an array and replace every literal string by an array call. - +Removes string literals and place them in a special array. For instance the string `"Hello World"` in `var m = "Hello World";` will be replaced with something like `var m = _0x12c456[0x1];` + ### `unicodeArrayThreshold` Type: `number` Default: `0.8` Min: `0` Max: `1` ##### :warning: `unicodeArray` option must be enabled -The probability that the literal string will be inserted into `unicodeArray`. -Use this option for huge source code size, because many calls to `unicodeArray` will slow down code performance. +You can use this setting to adjust the probability (from 0 to 1) that a string literal will be inserted into the `unicodeArray`. + +This setting is useful with large code size because repeatdely calls to the `Unicode Array` function can slow down your code. `unicodeArrayThreshold: 0` equals to `unicodeArray: false`. @@ -285,7 +291,7 @@ Type: `boolean` Default: `true` ##### :warning: `unicodeArray` option must be enabled -Instead of using direct calls to `unicodeArray` items `var t = _0x43a123[0x0]`, when index `0x0` can be easily reverted to `0` with few js beautifiers, this option will wrap all calls to special function instead. +Replaces the direct array indexing `var m = _0x12c456[0x1];` with a call to a special function `var m = _0x23c123('0x1');`. Some JavaScript beautifiers (such as the Google Closure Compiler) can replace direct array indexing with the indexed string, and this option mitigates that. ```javascript var t = _0x12a634('0x0') diff --git a/dist/index.js b/dist/index.js index d4a30de5..5d8ee29c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3917,13 +3917,14 @@ exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, /* 67 */ -/***/ function(module, exports) { +/***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; +var Utils_1 = __webpack_require__(0); function DomainLockNodeTemplate() { - return "\n (function () {\n var regExp = new RegExp(\"[{diff}]\", \"g\");\n var domains = \"{domains}\".replace(regExp, \"\").split(\";\");\n var eval = [][\"forEach\"][\"constructor\"];\n var window = eval(\"return this\")();\n \n for (var d in window) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n break;\n }\n }\n\n for (var d1 in window[d]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n break;\n }\n }\n\n var currentDomain = window[d][d1];\n \n if (!currentDomain) {\n return;\n }\n \n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n eval('throw new Error(\"Unexpected identifier\")')();\n }\n })();\n "; + return '\n (function () {\n var regExp = new RegExp("[{diff}]", "g");\n var domains = "{domains}".replace(regExp, "").split(";");\n var eval = []["forEach"]["constructor"];\n var window = eval("return this")();\n \n for (var d in window) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n break;\n }\n }\n\n for (var d1 in window[d]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n break;\n }\n }\n\n var currentDomain = window[d][d1];\n \n if (!currentDomain) {\n return;\n }\n \n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(".") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n eval(\'' + Utils_1.Utils.stringToJSFuck('while') + '(true){}\')();\n }\n })();\n '; } exports.DomainLockNodeTemplate = DomainLockNodeTemplate; diff --git a/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts b/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts index f3f3c33e..c2cdf6db 100644 --- a/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts +++ b/src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts @@ -1,3 +1,5 @@ +import { Utils } from '../../../../Utils'; + /** * @returns {string} */ @@ -45,7 +47,7 @@ export function DomainLockNodeTemplate (): string { } if (!ok) { - eval('throw new Error("Unexpected identifier")')(); + eval('${Utils.stringToJSFuck('while')}(true){}')(); } })(); `; From 0299b26f318cb0366e2a13e221fd54587289864f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 25 Oct 2016 23:45:49 +0300 Subject: [PATCH 088/138] readme update --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f0e8f331..cc26619c 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,7 @@ Following options available for the JS Obfuscator: ### `compact` Type: `boolean` Default: `true` + Compact code output on one line. ### `debugProtection` From 72c538a77b2e70096e7c3f2f5b7b59978d6458cc Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Wed, 26 Oct 2016 01:09:31 +0300 Subject: [PATCH 089/138] Now StackTraceData is getting inside Obfuscator class and pass to the CustomNodeAppender through customNodes appendNode() method. --- dist/index.js | 41 ++++++++++--------- src/Obfuscator.ts | 20 +++++---- src/custom-nodes/AbstractCustomNode.ts | 4 +- src/custom-nodes/CustomNodeAppender.ts | 15 ++++--- .../ConsoleOutputDisableExpressionNode.ts | 6 ++- .../domain-lock-nodes/DomainLockNode.ts | 6 ++- .../SelfDefendingUnicodeNode.ts | 6 ++- src/interfaces/custom-nodes/ICustomNode.d.ts | 5 ++- .../custom-nodes/CustomNodeAppender.spec.ts | 18 +++++--- 9 files changed, 78 insertions(+), 43 deletions(-) diff --git a/dist/index.js b/dist/index.js index 5d8ee29c..671e0db7 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 = 81); +/******/ return __webpack_require__(__webpack_require__.s = 82); /******/ }) /************************************************************************/ /******/ ([ @@ -829,7 +829,6 @@ 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 NodeUtils_1 = __webpack_require__(1); -var StackTraceAnalyzer_1 = __webpack_require__(58); var Utils_1 = __webpack_require__(0); var CustomNodeAppender = function () { @@ -839,15 +838,14 @@ var CustomNodeAppender = function () { _createClass(CustomNodeAppender, null, [{ key: 'appendNode', - value: function appendNode(blockScopeBody, node) { - var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + value: function appendNode(blockScopeStackTraceData, blockScopeBody, node) { + var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var blockScopeTraceData = new StackTraceAnalyzer_1.StackTraceAnalyzer(blockScopeBody).analyze(); var targetBlockScopeBody = void 0; - if (!blockScopeTraceData.length) { + if (!blockScopeStackTraceData.length) { targetBlockScopeBody = blockScopeBody; } else { - targetBlockScopeBody = CustomNodeAppender.getOptimalBlockScopeBody(blockScopeTraceData, index); + targetBlockScopeBody = CustomNodeAppender.getOptimalBlockScopeBody(blockScopeStackTraceData, index); } NodeUtils_1.NodeUtils.prependNode(targetBlockScopeBody, node); } @@ -1276,6 +1274,7 @@ var ObjectExpressionObfuscator_1 = __webpack_require__(52); var SelfDefendingNodesGroup_1 = __webpack_require__(44); var UnicodeArrayNodesGroup_1 = __webpack_require__(45); var VariableDeclarationObfuscator_1 = __webpack_require__(53); +var StackTraceAnalyzer_1 = __webpack_require__(58); var Obfuscator = function () { function Obfuscator(options) { @@ -1293,26 +1292,27 @@ var Obfuscator = function () { return node; } NodeUtils_1.NodeUtils.parentize(node); - this.beforeObfuscation(node); + var stackTraceData = new StackTraceAnalyzer_1.StackTraceAnalyzer(node.body).analyze(); + this.beforeObfuscation(node, stackTraceData); this.obfuscate(node); - this.afterObfuscation(node); + this.afterObfuscation(node, stackTraceData); return node; } }, { key: 'afterObfuscation', - value: function afterObfuscation(astTree) { + value: function afterObfuscation(astTree, stackTraceData) { this.nodes.forEach(function (node) { if (node.getAppendState() === AppendState_1.AppendState.AfterObfuscation) { - node.appendNode(astTree); + node.appendNode(astTree, stackTraceData); } }); } }, { key: 'beforeObfuscation', - value: function beforeObfuscation(astTree) { + value: function beforeObfuscation(astTree, stackTraceData) { this.nodes.forEach(function (node) { if (node.getAppendState() === AppendState_1.AppendState.BeforeObfuscation) { - node.appendNode(astTree); + node.appendNode(astTree, stackTraceData); } }); } @@ -1722,8 +1722,8 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { _createClass(ConsoleOutputDisableExpressionNode, [{ key: 'appendNode', - value: function appendNode(blockScopeNode) { - CustomNodeAppender_1.CustomNodeAppender.appendNode(blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + value: function appendNode(blockScopeNode, stackTraceData) { + CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); } }, { key: 'getNodeStructure', @@ -1946,8 +1946,8 @@ var DomainLockNode = function (_AbstractCustomNode_) { _createClass(DomainLockNode, [{ key: 'appendNode', - value: function appendNode(blockScopeNode) { - CustomNodeAppender_1.CustomNodeAppender.appendNode(blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + value: function appendNode(blockScopeNode, stackTraceData) { + CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); } }, { key: 'getNodeStructure', @@ -2009,8 +2009,8 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _createClass(SelfDefendingUnicodeNode, [{ key: 'appendNode', - value: function appendNode(blockScopeNode) { - CustomNodeAppender_1.CustomNodeAppender.appendNode(blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + value: function appendNode(blockScopeNode, stackTraceData) { + CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); } }, { key: 'getNodeStructure', @@ -4053,7 +4053,8 @@ module.exports = require("fs"); module.exports = require("mkdirp"); /***/ }, -/* 81 */ +/* 81 */, +/* 82 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index 236c43e2..7899b689 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -4,6 +4,7 @@ import * as ESTree from 'estree'; import { ICustomNode } from './interfaces/custom-nodes/ICustomNode'; import { IObfuscator } from './interfaces/IObfuscator'; import { IOptions } from './interfaces/IOptions'; +import { IStackTraceData } from './interfaces/stack-trace-analyzer/IStackTraceData'; import { TNodeObfuscator } from './types/TNodeObfuscator'; @@ -25,6 +26,7 @@ import { ObjectExpressionObfuscator } from './node-obfuscators/ObjectExpressionO import { SelfDefendingNodesGroup } from './node-groups/SelfDefendingNodesGroup'; import { UnicodeArrayNodesGroup } from './node-groups/UnicodeArrayNodesGroup'; import { VariableDeclarationObfuscator } from './node-obfuscators/VariableDeclarationObfuscator'; +import { StackTraceAnalyzer } from './stack-trace-analyzer/StackTraceAnalyzer'; export class Obfuscator implements IObfuscator { /** @@ -75,38 +77,42 @@ export class Obfuscator implements IObfuscator { * @param node * @returns {ESTree.Node} */ - public obfuscateNode (node: ESTree.Node): ESTree.Node { + public obfuscateNode (node: ESTree.Program): ESTree.Node { if (Nodes.isProgramNode(node) && !node.body.length) { return node; } NodeUtils.parentize(node); - this.beforeObfuscation(node); + const stackTraceData: IStackTraceData[] = new StackTraceAnalyzer(node.body).analyze(); + + this.beforeObfuscation(node, stackTraceData); this.obfuscate(node); - this.afterObfuscation(node); + this.afterObfuscation(node, stackTraceData); return node; } /** * @param astTree + * @param stackTraceData */ - private afterObfuscation (astTree: ESTree.Node): void { + private afterObfuscation (astTree: ESTree.Node, stackTraceData: IStackTraceData[]): void { this.nodes.forEach((node: ICustomNode) => { if (node.getAppendState() === AppendState.AfterObfuscation) { - node.appendNode(astTree); + node.appendNode(astTree, stackTraceData); } }); } /** * @param astTree + * @param stackTraceData */ - private beforeObfuscation (astTree: ESTree.Node): void { + private beforeObfuscation (astTree: ESTree.Node, stackTraceData: IStackTraceData[]): void { this.nodes.forEach((node: ICustomNode) => { if (node.getAppendState() === AppendState.BeforeObfuscation) { - node.appendNode(astTree); + node.appendNode(astTree, stackTraceData); } }); }; diff --git a/src/custom-nodes/AbstractCustomNode.ts b/src/custom-nodes/AbstractCustomNode.ts index b3b052b0..5a3ca16b 100644 --- a/src/custom-nodes/AbstractCustomNode.ts +++ b/src/custom-nodes/AbstractCustomNode.ts @@ -2,6 +2,7 @@ import * as ESTree from 'estree'; import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../interfaces/IOptions'; +import { IStackTraceData } from '../interfaces/stack-trace-analyzer/IStackTraceData'; import { AppendState } from '../enums/AppendState'; @@ -25,8 +26,9 @@ export abstract class AbstractCustomNode implements ICustomNode { /** * @param astTree + * @param stackTraceData */ - public abstract appendNode (astTree: ESTree.Node): void; + public abstract appendNode (astTree: ESTree.Node, stackTraceData?: IStackTraceData[]): void; /** * @returns {AppendState} diff --git a/src/custom-nodes/CustomNodeAppender.ts b/src/custom-nodes/CustomNodeAppender.ts index 0f99ba74..8dc0c5d6 100644 --- a/src/custom-nodes/CustomNodeAppender.ts +++ b/src/custom-nodes/CustomNodeAppender.ts @@ -3,7 +3,6 @@ import * as ESTree from 'estree'; import { IStackTraceData } from '../interfaces/stack-trace-analyzer/IStackTraceData'; import { NodeUtils } from '../NodeUtils'; -import { StackTraceAnalyzer } from '../stack-trace-analyzer/StackTraceAnalyzer'; import { Utils } from '../Utils'; /** @@ -25,19 +24,23 @@ import { Utils } from '../Utils'; */ export class CustomNodeAppender { /** + * @param blockScopeStackTraceData * @param blockScopeBody * @param node * @param index */ - public static appendNode (blockScopeBody: ESTree.Node[], node: ESTree.Node, index: number = 0): void { - const blockScopeTraceData: IStackTraceData[] = new StackTraceAnalyzer(blockScopeBody).analyze(); - + public static appendNode ( + blockScopeStackTraceData: IStackTraceData[], + blockScopeBody: ESTree.Node[], + node: ESTree.Node, + index: number = 0 + ): void { let targetBlockScopeBody: ESTree.Node[]; - if (!blockScopeTraceData.length) { + if (!blockScopeStackTraceData.length) { targetBlockScopeBody = blockScopeBody; } else { - targetBlockScopeBody = CustomNodeAppender.getOptimalBlockScopeBody(blockScopeTraceData, index); + targetBlockScopeBody = CustomNodeAppender.getOptimalBlockScopeBody(blockScopeStackTraceData, index); } NodeUtils.prependNode(targetBlockScopeBody, node); diff --git a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts index f3888e4c..b2866707 100644 --- a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts +++ b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts @@ -2,6 +2,8 @@ import * as ESTree from 'estree'; import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; +import { IStackTraceData } from '../../interfaces/stack-trace-analyzer/IStackTraceData'; + import { AppendState } from '../../enums/AppendState'; import { ConsoleOutputDisableExpressionTemplate } from '../../templates/custom-nodes/console-output-nodes/console-output-disable-expression-node/ConsoleOutputDisableExpressionTemplate'; @@ -18,9 +20,11 @@ export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { /** * @param blockScopeNode + * @param stackTraceData */ - public appendNode (blockScopeNode: TNodeWithBlockStatement): void { + public appendNode (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void { CustomNodeAppender.appendNode( + stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts index 616d817c..a2a040d3 100644 --- a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -4,6 +4,8 @@ import 'format-unicorn'; import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; +import { IStackTraceData } from '../../interfaces/stack-trace-analyzer/IStackTraceData'; + import { AppendState } from '../../enums/AppendState'; import { DomainLockNodeTemplate } from '../../templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate'; @@ -21,9 +23,11 @@ export class DomainLockNode extends AbstractCustomNode { /** * @param blockScopeNode + * @param stackTraceData */ - public appendNode (blockScopeNode: TNodeWithBlockStatement): void { + public appendNode (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void { CustomNodeAppender.appendNode( + stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index 2df8b792..7a08f42a 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts @@ -2,6 +2,8 @@ import * as ESTree from 'estree'; import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; +import { IStackTraceData } from '../../interfaces/stack-trace-analyzer/IStackTraceData'; + import { AppendState } from '../../enums/AppendState'; import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; @@ -21,9 +23,11 @@ export class SelfDefendingUnicodeNode extends AbstractCustomNode { /** * @param blockScopeNode + * @param stackTraceData */ - public appendNode (blockScopeNode: TNodeWithBlockStatement): void { + public appendNode (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void { CustomNodeAppender.appendNode( + stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) diff --git a/src/interfaces/custom-nodes/ICustomNode.d.ts b/src/interfaces/custom-nodes/ICustomNode.d.ts index b9c70ace..ac378656 100644 --- a/src/interfaces/custom-nodes/ICustomNode.d.ts +++ b/src/interfaces/custom-nodes/ICustomNode.d.ts @@ -1,12 +1,15 @@ import * as ESTree from 'estree'; +import { IStackTraceData } from '../stack-trace-analyzer/IStackTraceData'; + import { AppendState } from '../../enums/AppendState'; export interface ICustomNode { /** * @param astTree + * @param stackTraceData */ - appendNode (astTree: ESTree.Node): void; + appendNode (astTree: ESTree.Node, stackTraceData?: IStackTraceData[]): void; /** * @returns {AppendState} diff --git a/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts b/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts index 17c58c67..732c09f1 100644 --- a/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts +++ b/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts @@ -1,8 +1,11 @@ import * as chai from 'chai'; import * as ESTree from 'estree'; +import { IStackTraceData } from '../../../src/interfaces/stack-trace-analyzer/IStackTraceData'; + import { CustomNodeAppender } from '../../../src/custom-nodes/CustomNodeAppender'; import { NodeUtils } from '../../../src/NodeUtils'; +import { StackTraceAnalyzer } from '../../../src/stack-trace-analyzer/StackTraceAnalyzer'; const assert: any = chai.assert; @@ -10,7 +13,8 @@ describe('CustomNodeAppender', () => { describe('appendNode (blockScopeNode: TNodeWithBlockStatement, node: ESTree.Node): void', () => { let astTree: ESTree.Program, expectedAstTree: ESTree.Program, - node: ESTree.Node; + node: ESTree.Node, + stackTraceData: IStackTraceData[]; beforeEach(() => { node = NodeUtils.convertCodeToStructure(` @@ -80,7 +84,8 @@ describe('CustomNodeAppender', () => { bar(); `, false); - CustomNodeAppender.appendNode(astTree.body, node); + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); + CustomNodeAppender.appendNode(stackTraceData, astTree.body, node); NodeUtils.parentize(astTree); @@ -150,7 +155,8 @@ describe('CustomNodeAppender', () => { foo(); `, false); - CustomNodeAppender.appendNode(astTree.body, node); + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); + CustomNodeAppender.appendNode(stackTraceData, astTree.body, node); NodeUtils.parentize(astTree); @@ -225,7 +231,8 @@ describe('CustomNodeAppender', () => { foo(); `, false); - CustomNodeAppender.appendNode(astTree.body, node, 2); + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); + CustomNodeAppender.appendNode(stackTraceData, astTree.body, node, 2); NodeUtils.parentize(astTree); @@ -264,7 +271,8 @@ describe('CustomNodeAppender', () => { foo(); `, false); - CustomNodeAppender.appendNode(astTree.body, node, 1); + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); + CustomNodeAppender.appendNode(stackTraceData, astTree.body, node, 1); NodeUtils.parentize(astTree); From 20fa50b2d95dace020491acef09342c746da0919 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Wed, 26 Oct 2016 16:52:42 +0300 Subject: [PATCH 090/138] deps update --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 61aa750c..f95a2455 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "sinon": "2.0.0-pre.3", "ts-node": "1.6.0", "tslint": "3.15.1", - "typescript": "2.0.3", + "typescript": "2.0.6", "webpack": "2.1.0-beta.25", "webpack-node-externals": "1.5.4" }, From a3512400a8728ed5fe242e09abca7b18667e1f27 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Fri, 28 Oct 2016 20:53:42 +0300 Subject: [PATCH 091/138] Add plugins to readme --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cc26619c..557a910f 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,11 @@ Online version: [javascriptobfuscator.herokuapp.com](https://javascriptobfuscato Example of obfuscated code: [gist.github.com](https://gist.github.com/sanex3339/ffc2876123b52e6d11ce45369fd53acf) +#### Plugins: +* Webpack: [webpack-obfuscator](https://github.com/javascript-obfuscator/webpack-obfuscator) +* Gulp: [gulp-javascript-obfuscator](https://github.com/javascript-obfuscator/gulp-javascript-obfuscator) +* Grunt: [grunt-contrib-obfuscator](https://github.com/javascript-obfuscator/grunt-contrib-obfuscator) + [![npm version](https://badge.fury.io/js/javascript-obfuscator.svg)](https://badge.fury.io/js/javascript-obfuscator) [![Build Status](https://travis-ci.org/javascript-obfuscator/javascript-obfuscator.svg?branch=master)](https://travis-ci.org/javascript-obfuscator/javascript-obfuscator) [![Coverage Status](https://coveralls.io/repos/github/javascript-obfuscator/javascript-obfuscator/badge.svg?branch=master)](https://coveralls.io/github/javascript-obfuscator/javascript-obfuscator?branch=master) @@ -319,4 +324,4 @@ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From add062feeee17e7eb73364171c8de1c3fda78f15 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sat, 29 Oct 2016 21:58:59 +0300 Subject: [PATCH 092/138] rc4 preparation --- README.md | 15 +- dist/index.js | 178 ++++++------------ src/cli/JavaScriptObfuscatorCLI.ts | 3 +- .../UnicodeArrayCallsWrapper.ts | 47 ++++- .../UnicodeArrayDecodeNode.ts | 101 ---------- src/interfaces/IObfuscatorOptions.d.ts | 1 - src/interfaces/IOptions.d.ts | 1 - src/node-groups/UnicodeArrayNodesGroup.ts | 34 +--- .../replacers/StringLiteralReplacer.ts | 12 +- src/options/Options.ts | 6 - .../SelfDefendingTemplate.ts | 0 .../UnicodeArrayAtobDecodeNodeTemplate.ts | 12 ++ .../UnicodeArrayCallsWrapperTemplate.ts | 8 +- .../UnicodeArrayRC4DecodeNodeTemplate.ts} | 0 .../JavaScriptObfuscator.spec.ts | 23 ++- .../UnicodeArrayCallsWrapper.spec.ts | 16 +- .../UnicodeArrayDecodeNode.spec.ts | 29 --- .../MemberExpressionObfuscator.spec.ts | 4 +- .../MethodDefinitionObfuscator.spec.ts | 2 +- .../UnicodeArrayDecodeNodeTemplate.spec.ts | 6 +- test/index.spec.ts | 1 - 21 files changed, 150 insertions(+), 349 deletions(-) delete mode 100644 src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts rename src/templates/custom-nodes/unicode-array-nodes/{unicode-array-decode-node => unicode-array-calls-wrapper}/SelfDefendingTemplate.ts (100%) create mode 100644 src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts rename src/templates/custom-nodes/unicode-array-nodes/{unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate.ts => unicode-array-calls-wrapper/UnicodeArrayRC4DecodeNodeTemplate.ts} (100%) delete mode 100644 test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts diff --git a/README.md b/README.md index 557a910f..588942bc 100644 --- a/README.md +++ b/README.md @@ -126,8 +126,7 @@ Following options available for the JS Obfuscator: sourceMapFileName: '', sourceMapMode: 'separate', unicodeArray: true, - unicodeArrayThreshold: 0.8, - wrapUnicodeArrayCalls: true + unicodeArrayThreshold: 0.8 } ``` @@ -153,7 +152,6 @@ Following options available for the JS Obfuscator: --sourceMapMode [inline, separate] --unicodeArray --unicodeArrayThreshold - --wrapUnicodeArrayCalls ``` ### `compact` @@ -292,17 +290,6 @@ This setting is useful with large code size because repeatdely calls to the `Uni `unicodeArrayThreshold: 0` equals to `unicodeArray: false`. -### `wrapUnicodeArrayCalls` -Type: `boolean` Default: `true` - -##### :warning: `unicodeArray` option must be enabled - -Replaces the direct array indexing `var m = _0x12c456[0x1];` with a call to a special function `var m = _0x23c123('0x1');`. Some JavaScript beautifiers (such as the Google Closure Compiler) can replace direct array indexing with the indexed string, and this option mitigates that. - -```javascript -var t = _0x12a634('0x0') -``` - ## License Copyright (C) 2016 [Timofey Kachalov](http://github.com/sanex3339). diff --git a/dist/index.js b/dist/index.js index 671e0db7..865331bc 100644 --- a/dist/index.js +++ b/dist/index.js @@ -938,14 +938,11 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { unicodeArrayNode.updateNodeData(value); } hexadecimalIndex = new NumberLiteralReplacer_1.NumberLiteralReplacer(this.nodes, this.options).replace(indexOfValue); - if (this.options.wrapUnicodeArrayCalls) { - var unicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); - if (!unicodeArrayCallsWrapper) { - throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); - } - return unicodeArrayCallsWrapper.getNodeIdentifier() + '(\'' + hexadecimalIndex + '\')'; + var unicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); + if (!unicodeArrayCallsWrapper) { + throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); } - return unicodeArrayNode.getNodeIdentifier() + '[' + hexadecimalIndex + ']'; + return unicodeArrayCallsWrapper.getNodeIdentifier() + '(\'' + hexadecimalIndex + '\')'; } }]); @@ -1614,11 +1611,11 @@ var JavaScriptObfuscatorCLI = function () { }, { key: 'configureCommands', value: function configureCommands() { - this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { + this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); - }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { + }).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); - }).parse(this.rawArguments); + }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).parse(this.rawArguments); this.commands.on('--help', function () { console.log(' Examples:\n'); console.log(' %> javascript-obfuscator in.js --compact true --selfDefending false'); @@ -2043,10 +2040,14 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); +var NoCustomNodesPreset_1 = __webpack_require__(17); +var AtobTemplate_1 = __webpack_require__(62); +var SelfDefendingTemplate_1 = __webpack_require__(83); var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(69); var AbstractCustomNode_1 = __webpack_require__(5); +var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); -var Utils_1 = __webpack_require__(0); +var UnicodeArrayAtobDecodeNodeTemplate_1 = __webpack_require__(84); var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { _inherits(UnicodeArrayCallsWrapper, _AbstractCustomNode_); @@ -2082,79 +2083,8 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { return _get(UnicodeArrayCallsWrapper.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayCallsWrapper.prototype), 'getNode', this).call(this); } }, { - key: 'getNodeStructure', - value: function getNodeStructure() { - var keyName = Utils_1.Utils.getRandomVariableName(); - return NodeUtils_1.NodeUtils.convertCodeToStructure(UnicodeArrayCallsWrapperTemplate_1.UnicodeArrayCallsWrapperTemplate().formatUnicorn({ - keyName: keyName, - unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, - unicodeArrayName: this.unicodeArrayName - })); - } - }]); - - return UnicodeArrayCallsWrapper; -}(AbstractCustomNode_1.AbstractCustomNode); - -exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; - -/***/ }, -/* 38 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -__webpack_require__(8); -var AppendState_1 = __webpack_require__(4); -var NoCustomNodesPreset_1 = __webpack_require__(17); -var AtobTemplate_1 = __webpack_require__(62); -var SelfDefendingTemplate_1 = __webpack_require__(70); -var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(71); -var AbstractCustomNode_1 = __webpack_require__(5); -var JavaScriptObfuscator_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(1); - -var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { - _inherits(UnicodeArrayDecodeNode, _AbstractCustomNode_); - - function UnicodeArrayDecodeNode(unicodeArrayName, unicodeArray, options) { - _classCallCheck(this, UnicodeArrayDecodeNode); - - var _this = _possibleConstructorReturn(this, (UnicodeArrayDecodeNode.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode)).call(this, options)); - - _this.appendState = AppendState_1.AppendState.AfterObfuscation; - _this.unicodeArrayName = unicodeArrayName; - _this.unicodeArray = unicodeArray; - return _this; - } - - _createClass(UnicodeArrayDecodeNode, [{ - key: 'appendNode', - value: function appendNode(blockScopeNode) { - if (!this.unicodeArray.getLength()) { - return; - } - NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); - } - }, { - key: 'getNode', - value: function getNode() { - return _get(UnicodeArrayDecodeNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), 'getNode', this).call(this); - } - }, { - key: 'getNodeStructure', - value: function getNodeStructure() { + key: 'getDecodeUnicodeArrayTemplate', + value: function getDecodeUnicodeArrayTemplate() { var forLoopFunctionName = 'forLoopFunc'; var code = void 0; if (this.options.selfDefending) { @@ -2165,21 +2095,32 @@ var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { } else { code = forLoopFunctionName + '();'; } - return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(UnicodeArrayDecodeNodeTemplate_1.UnicodeArrayDecodeNodeTemplate().formatUnicorn({ + return UnicodeArrayAtobDecodeNodeTemplate_1.UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ atobPolyfill: AtobTemplate_1.AtobTemplate(), code: code, forLoopFunctionName: forLoopFunctionName, unicodeArrayName: this.unicodeArrayName + }); + } + }, { + key: 'getNodeStructure', + value: function getNodeStructure() { + var decodeNodeTemplate = this.options.encodeUnicodeLiterals ? this.getDecodeUnicodeArrayTemplate() : ''; + return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(UnicodeArrayCallsWrapperTemplate_1.UnicodeArrayCallsWrapperTemplate().formatUnicorn({ + decodeNodeTemplate: decodeNodeTemplate, + unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, + unicodeArrayName: this.unicodeArrayName }), NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET).getObfuscatedCode()); } }]); - return UnicodeArrayDecodeNode; + return UnicodeArrayCallsWrapper; }(AbstractCustomNode_1.AbstractCustomNode); -exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; +exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; /***/ }, +/* 38 */, /* 39 */ /***/ function(module, exports, __webpack_require__) { @@ -2517,7 +2458,6 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractNodesGroup_1 = __webpack_require__(10); var UnicodeArray_1 = __webpack_require__(28); var UnicodeArrayCallsWrapper_1 = __webpack_require__(37); -var UnicodeArrayDecodeNode_1 = __webpack_require__(38); var UnicodeArrayNode_1 = __webpack_require__(39); var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(40); var Utils_1 = __webpack_require__(0); @@ -2546,12 +2486,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { var unicodeArray = new UnicodeArray_1.UnicodeArray(), unicodeArrayNode = new UnicodeArrayNode_1.UnicodeArrayNode(unicodeArray, _this.unicodeArrayName, _this.unicodeArrayRotateValue, _this.options); _this.nodes.set('unicodeArrayNode', unicodeArrayNode); - if (_this.options.wrapUnicodeArrayCalls) { - _this.nodes.set('unicodeArrayCallsWrapper', new UnicodeArrayCallsWrapper_1.UnicodeArrayCallsWrapper(_this.unicodeArrayTranslatorName, _this.unicodeArrayName, unicodeArray, _this.options)); - } - if (_this.options.encodeUnicodeLiterals) { - _this.nodes.set('unicodeArrayDecodeNode', new UnicodeArrayDecodeNode_1.UnicodeArrayDecodeNode(_this.unicodeArrayName, unicodeArray, _this.options)); - } + _this.nodes.set('unicodeArrayCallsWrapper', new UnicodeArrayCallsWrapper_1.UnicodeArrayCallsWrapper(_this.unicodeArrayTranslatorName, _this.unicodeArrayName, unicodeArray, _this.options)); if (_this.options.rotateUnicodeArray) { _this.nodes.set('unicodeArrayRotateFunctionNode', new UnicodeArrayRotateFunctionNode_1.UnicodeArrayRotateFunctionNode(_this.unicodeArrayName, unicodeArray, _this.unicodeArrayRotateValue, _this.options)); } @@ -3271,7 +3206,6 @@ __decorate([class_validator_1.IsString(), __metadata('design:type', String)], Op __decorate([class_validator_1.IsIn(['inline', 'separate']), __metadata('design:type', typeof (_a = typeof TSourceMapMode_1.TSourceMapMode !== 'undefined' && TSourceMapMode_1.TSourceMapMode) === 'function' && _a || Object)], Options.prototype, "sourceMapMode", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "unicodeArray", void 0); __decorate([class_validator_1.IsNumber(), class_validator_1.Min(0), class_validator_1.Max(1), __metadata('design:type', Number)], Options.prototype, "unicodeArrayThreshold", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "wrapUnicodeArrayCalls", void 0); exports.Options = Options; var _a; @@ -3949,36 +3883,13 @@ exports.SelfDefendingTemplate = SelfDefendingTemplate; "use strict"; function UnicodeArrayCallsWrapperTemplate() { - return "\n var {unicodeArrayCallsWrapperName} = function ({keyName}) {\n return {unicodeArrayName}[parseInt({keyName}, 0x010)];\n };\n "; + return "\n var {unicodeArrayCallsWrapperName} = function (index, key) {\n var value = {unicodeArrayName}[parseInt(index, 0x010)]\n \n {decodeNodeTemplate}\n \n return value;\n };\n "; } exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 70 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var Utils_1 = __webpack_require__(0); -function SelfDefendingTemplate() { - return '\n var func = function(){return \'dev\';};\n \n Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')()[\'test\'](func[\'toString\']()) !== true && !{unicodeArrayName}++ ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : Function(\'a\', atob(' + Utils_1.Utils.stringToUnicode(Utils_1.Utils.btoa('a.call()')) + '))({forLoopFunctionName}) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')();\n '; -} -exports.SelfDefendingTemplate = SelfDefendingTemplate; - -/***/ }, -/* 71 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -function UnicodeArrayDecodeNodeTemplate() { - return "\n (function () {\n {atobPolyfill}\n \n var {forLoopFunctionName} = function () {\n var array = [];\n \n for (var i in {unicodeArrayName}) {\n array['push'](decodeURI(atob({unicodeArrayName}[i])));\n }\n \n {unicodeArrayName} = array;\n };\n \n {code}\n })();\n "; -} -exports.UnicodeArrayDecodeNodeTemplate = UnicodeArrayDecodeNodeTemplate; - -/***/ }, +/* 70 */, +/* 71 */, /* 72 */ /***/ function(module, exports) { @@ -4066,6 +3977,31 @@ if (!global._babelPolyfill) { } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; +/***/ }, +/* 83 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var Utils_1 = __webpack_require__(0); +function SelfDefendingTemplate() { + return '\n var func = function(){return \'dev\';};\n \n Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')()[\'test\'](func[\'toString\']()) !== true && !{unicodeArrayName}++ ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : Function(\'a\', atob(' + Utils_1.Utils.stringToUnicode(Utils_1.Utils.btoa('a.call()')) + '))({forLoopFunctionName}) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')();\n '; +} +exports.SelfDefendingTemplate = SelfDefendingTemplate; + +/***/ }, +/* 84 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function UnicodeArrayAtobDecodeNodeTemplate() { + return "\n var decodedIndices = [];\n \n if (decodedIndices.indexOf(index) === -1) {\n value = atob(value);\n }\n "; +} +exports.UnicodeArrayAtobDecodeNodeTemplate = UnicodeArrayAtobDecodeNodeTemplate; + /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index 824bdb13..cd4ef4ac 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -126,6 +126,7 @@ export class JavaScriptObfuscatorCLI { .option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean) .option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean) .option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean) + .option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', (val: string) => val.split(',')) .option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean) .option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', (val: string) => val.split(',')) .option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean) @@ -140,8 +141,6 @@ export class JavaScriptObfuscatorCLI { ) .option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean) .option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat) - .option('--wrapUnicodeArrayCalls ', 'Disables usage of special access function instead of direct array call', JavaScriptObfuscatorCLI.parseBoolean) - .option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', (val: string) => val.split(',')) .parse(this.rawArguments); this.commands.on('--help', () => { diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts index dc893eda..e288deb3 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts @@ -8,12 +8,17 @@ import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; import { AppendState } from '../../enums/AppendState'; +import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; + +import { AtobTemplate } from '../../templates/custom-nodes/AtobTemplate'; +import { SelfDefendingTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate'; import { UnicodeArrayCallsWrapperTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate'; import { AbstractCustomNode } from '../AbstractCustomNode'; +import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; import { NodeUtils } from '../../NodeUtils'; import { UnicodeArray } from '../../UnicodeArray'; -import { Utils } from '../../Utils'; +import { UnicodeArrayAtobDecodeNodeTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate'; export class UnicodeArrayCallsWrapper extends AbstractCustomNode { /** @@ -80,18 +85,46 @@ export class UnicodeArrayCallsWrapper extends AbstractCustomNode { return super.getNode(); } + /** + * @returns {any} + */ + protected getDecodeUnicodeArrayTemplate (): string { + const forLoopFunctionName: string = 'forLoopFunc'; + + let code: string; + + if (this.options.selfDefending) { + code = SelfDefendingTemplate().formatUnicorn({ + forLoopFunctionName, + unicodeArrayName: this.unicodeArrayName + }); + } else { + code = `${forLoopFunctionName}();`; + } + + return UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ + atobPolyfill: AtobTemplate(), + code, + forLoopFunctionName, + unicodeArrayName: this.unicodeArrayName + }) + } + /** * @returns {ESTree.Node} */ protected getNodeStructure (): ESTree.Node { - let keyName: string = Utils.getRandomVariableName(); + let decodeNodeTemplate: string = this.options.encodeUnicodeLiterals ? this.getDecodeUnicodeArrayTemplate() : ''; return NodeUtils.convertCodeToStructure( - UnicodeArrayCallsWrapperTemplate().formatUnicorn({ - keyName: keyName, - unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, - unicodeArrayName: this.unicodeArrayName - }) + JavaScriptObfuscator.obfuscate( + UnicodeArrayCallsWrapperTemplate().formatUnicorn({ + decodeNodeTemplate: decodeNodeTemplate, + unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, + unicodeArrayName: this.unicodeArrayName + }), + NO_CUSTOM_NODES_PRESET + ).getObfuscatedCode() ); } } diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts deleted file mode 100644 index 07938a48..00000000 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.ts +++ /dev/null @@ -1,101 +0,0 @@ -import * as ESTree from 'estree'; - -import 'format-unicorn'; - -import { IOptions } from '../../interfaces/IOptions'; - -import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; - -import { AppendState } from '../../enums/AppendState'; - -import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; - -import { AtobTemplate } from '../../templates/custom-nodes/AtobTemplate'; -import { SelfDefendingTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate'; -import { UnicodeArrayDecodeNodeTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate'; - -import { AbstractCustomNode } from '../AbstractCustomNode'; -import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; -import { NodeUtils } from '../../NodeUtils'; -import { UnicodeArray } from '../../UnicodeArray'; - -export class UnicodeArrayDecodeNode extends AbstractCustomNode { - /** - * @type {AppendState} - */ - protected appendState: AppendState = AppendState.AfterObfuscation; - - /** - * @type {UnicodeArray} - */ - private unicodeArray: UnicodeArray; - - /** - * @type {string} - */ - private unicodeArrayName: string; - - /** - * @param unicodeArrayName - * @param unicodeArray - * @param options - */ - constructor ( - unicodeArrayName: string, - unicodeArray: UnicodeArray, - options: IOptions - ) { - super(options); - - this.unicodeArrayName = unicodeArrayName; - this.unicodeArray = unicodeArray; - } - - /** - * @param blockScopeNode - */ - public appendNode (blockScopeNode: TNodeWithBlockStatement): void { - if (!this.unicodeArray.getLength()) { - return; - } - - NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); - } - - /** - * @returns {ESTree.Node} - */ - public getNode (): ESTree.Node { - return super.getNode(); - } - - /** - * @returns {ESTree.Node} - */ - protected getNodeStructure (): ESTree.Node { - const forLoopFunctionName: string = 'forLoopFunc'; - - let code: string; - - if (this.options.selfDefending) { - code = SelfDefendingTemplate().formatUnicorn({ - forLoopFunctionName, - unicodeArrayName: this.unicodeArrayName - }); - } else { - code = `${forLoopFunctionName}();`; - } - - return NodeUtils.convertCodeToStructure( - JavaScriptObfuscator.obfuscate( - UnicodeArrayDecodeNodeTemplate().formatUnicorn({ - atobPolyfill: AtobTemplate(), - code, - forLoopFunctionName, - unicodeArrayName: this.unicodeArrayName - }), - NO_CUSTOM_NODES_PRESET - ).getObfuscatedCode() - ); - } -} diff --git a/src/interfaces/IObfuscatorOptions.d.ts b/src/interfaces/IObfuscatorOptions.d.ts index 9039b4d0..efe3c53a 100644 --- a/src/interfaces/IObfuscatorOptions.d.ts +++ b/src/interfaces/IObfuscatorOptions.d.ts @@ -16,6 +16,5 @@ export interface IObfuscatorOptions { sourceMapMode?: TSourceMapMode; unicodeArray?: boolean; unicodeArrayThreshold?: number; - wrapUnicodeArrayCalls?: boolean; [key: string]: any; } diff --git a/src/interfaces/IOptions.d.ts b/src/interfaces/IOptions.d.ts index a156a6f7..1113310e 100644 --- a/src/interfaces/IOptions.d.ts +++ b/src/interfaces/IOptions.d.ts @@ -16,5 +16,4 @@ export interface IOptions { readonly sourceMapMode: TSourceMapMode; readonly unicodeArray: boolean; readonly unicodeArrayThreshold: number; - readonly wrapUnicodeArrayCalls: boolean; } diff --git a/src/node-groups/UnicodeArrayNodesGroup.ts b/src/node-groups/UnicodeArrayNodesGroup.ts index 9d887e0d..72f97a39 100644 --- a/src/node-groups/UnicodeArrayNodesGroup.ts +++ b/src/node-groups/UnicodeArrayNodesGroup.ts @@ -3,7 +3,6 @@ import { IOptions } from '../interfaces/IOptions'; import { AbstractNodesGroup } from './AbstractNodesGroup'; import { UnicodeArray } from '../UnicodeArray'; import { UnicodeArrayCallsWrapper } from '../custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper'; -import { UnicodeArrayDecodeNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode'; import { UnicodeArrayNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayNode'; import { UnicodeArrayRotateFunctionNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode'; import { Utils } from '../Utils'; @@ -51,34 +50,17 @@ export class UnicodeArrayNodesGroup extends AbstractNodesGroup { this.options ); + this.nodes.set('unicodeArrayNode', unicodeArrayNode); this.nodes.set( - 'unicodeArrayNode', - unicodeArrayNode + 'unicodeArrayCallsWrapper', + new UnicodeArrayCallsWrapper( + this.unicodeArrayTranslatorName, + this.unicodeArrayName, + unicodeArray, + this.options + ) ); - if (this.options.wrapUnicodeArrayCalls) { - this.nodes.set( - 'unicodeArrayCallsWrapper', - new UnicodeArrayCallsWrapper( - this.unicodeArrayTranslatorName, - this.unicodeArrayName, - unicodeArray, - this.options - ) - ); - } - - if (this.options.encodeUnicodeLiterals) { - this.nodes.set( - 'unicodeArrayDecodeNode', - new UnicodeArrayDecodeNode ( - this.unicodeArrayName, - unicodeArray, - this.options - ) - ); - } - if (this.options.rotateUnicodeArray) { this.nodes.set( 'unicodeArrayRotateFunctionNode', diff --git a/src/node-obfuscators/replacers/StringLiteralReplacer.ts b/src/node-obfuscators/replacers/StringLiteralReplacer.ts index 8031e333..0564042e 100644 --- a/src/node-obfuscators/replacers/StringLiteralReplacer.ts +++ b/src/node-obfuscators/replacers/StringLiteralReplacer.ts @@ -53,16 +53,12 @@ export class StringLiteralReplacer extends AbstractReplacer { hexadecimalIndex = new NumberLiteralReplacer(this.nodes, this.options) .replace(indexOfValue); - if (this.options.wrapUnicodeArrayCalls) { - const unicodeArrayCallsWrapper: TUnicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); + const unicodeArrayCallsWrapper: TUnicodeArrayCallsWrapper = this.nodes.get('unicodeArrayCallsWrapper'); - if (!unicodeArrayCallsWrapper) { - throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); - } - - return `${unicodeArrayCallsWrapper.getNodeIdentifier()}('${hexadecimalIndex}')`; + if (!unicodeArrayCallsWrapper) { + throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); } - return `${unicodeArrayNode.getNodeIdentifier()}[${hexadecimalIndex}]`; + return `${unicodeArrayCallsWrapper.getNodeIdentifier()}('${hexadecimalIndex}')`; } } diff --git a/src/options/Options.ts b/src/options/Options.ts index 4ba0bb3f..94af7e64 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -139,12 +139,6 @@ export class Options implements IOptions { @Max(1) public readonly unicodeArrayThreshold: number; - /** - * @type {boolean} - */ - @IsBoolean() - public readonly wrapUnicodeArrayCalls: boolean; - /** * @param obfuscatorOptions */ diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate.ts similarity index 100% rename from src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/SelfDefendingTemplate.ts rename to src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate.ts diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts new file mode 100644 index 00000000..2e14184c --- /dev/null +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts @@ -0,0 +1,12 @@ +/** + * @returns {string} + */ +export function UnicodeArrayAtobDecodeNodeTemplate (): string { + return ` + var decodedIndices = []; + + if (decodedIndices.indexOf(index) === -1) { + value = atob(value); + } + `; +} diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate.ts index 6fdb66fd..e93a7129 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate.ts @@ -3,8 +3,12 @@ */ export function UnicodeArrayCallsWrapperTemplate (): string { return ` - var {unicodeArrayCallsWrapperName} = function ({keyName}) { - return {unicodeArrayName}[parseInt({keyName}, 0x010)]; + var {unicodeArrayCallsWrapperName} = function (index, key) { + var value = {unicodeArrayName}[parseInt(index, 0x010)] + + {decodeNodeTemplate} + + return value; }; `; } diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayRC4DecodeNodeTemplate.ts similarity index 100% rename from src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate.ts rename to src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayRC4DecodeNodeTemplate.ts diff --git a/test/functional-tests/JavaScriptObfuscator.spec.ts b/test/functional-tests/JavaScriptObfuscator.spec.ts index f4c6aabd..e1a43d04 100644 --- a/test/functional-tests/JavaScriptObfuscator.spec.ts +++ b/test/functional-tests/JavaScriptObfuscator.spec.ts @@ -102,29 +102,28 @@ describe('JavaScriptObfuscator', () => { }); it('should obfuscate simple code with literal variable value', () => { - let pattern: RegExp = /^var _0x(\w){4} *= *\['(\\[x|u]\d+)+'\]; *var *test *= *_0x(\w){4}\[0x0\];$/; - - assert.match( - JavaScriptObfuscator.obfuscate( + let pattern1: RegExp = /^var _0x(\w){4} *= *\['(\\[x|u]\d+)+'\];/, + pattern2: RegExp = /var *test *= *_0x(\w){4}\('0x0'\);$/, + obfuscatedCode1: string = JavaScriptObfuscator.obfuscate( `var test = 'abc';`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { unicodeArray: true, unicodeArrayThreshold: 1 }) ).getObfuscatedCode(), - pattern - ); - - assert.match( - JavaScriptObfuscator.obfuscate( + obfuscatedCode2: string = JavaScriptObfuscator.obfuscate( `var test = 'абц';`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { unicodeArray: true, unicodeArrayThreshold: 1 }) - ).getObfuscatedCode(), - pattern - ); + ).getObfuscatedCode(); + + assert.match(obfuscatedCode1, pattern1); + assert.match(obfuscatedCode1, pattern2); + + assert.match(obfuscatedCode2, pattern1); + assert.match(obfuscatedCode2, pattern2); }); }); }); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts index f4067139..a4e82037 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts @@ -5,7 +5,7 @@ import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; const assert: Chai.AssertStatic = require('chai').assert; describe('UnicodeArrayCallsWrapper', () => { - it('should correctly appendNode `UnicodeArrayCallsWrapper` custom node into the obfuscated code if `wrapUnicodeArrayCalls` option is set', () => { + it('should correctly appendNode `UnicodeArrayCallsWrapper` custom node into the obfuscated code', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, { @@ -13,17 +13,9 @@ describe('UnicodeArrayCallsWrapper', () => { } ); - assert.match(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){4,6}, *0x010\)\];/); - }); - - it('should\'t appendNode `UnicodeArrayDecodeNode` custom node into the obfuscated code if `wrapUnicodeArrayCalls` option is not set', () => { - let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( - `var test = 'test';`, - { - wrapUnicodeArrayCalls: false - } + assert.match( + obfuscationResult.getObfuscatedCode(), + /var *_0x([a-z0-9]){4,6} *= *_0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){4,6}, *0x10\)\];/ ); - - assert.notMatch(obfuscationResult.getObfuscatedCode(), /return _0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){4,6}, *0x010\)\];/); }); }); diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts deleted file mode 100644 index e3fc6058..00000000 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; - -import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator'; - -const assert: Chai.AssertStatic = require('chai').assert; - -describe('UnicodeArrayDecodeNode', () => { - it('should correctly appendNode `UnicodeArrayDecodeNode` custom node into the obfuscated code if `encodeUnicodeLiterals` option is set', () => { - let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( - `var test = 'test';`, - { - encodeUnicodeLiterals: true - } - ); - - assert.match(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){4,6}\]\)\)/); - }); - - it('should\'t appendNode `UnicodeArrayDecodeNode` custom node into the obfuscated code if `encodeUnicodeLiterals` option is not set', () => { - let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( - `var test = 'test';`, - { - encodeUnicodeLiterals: false - } - ); - - assert.notMatch(obfuscationResult.getObfuscatedCode(), /decodeURI\(atob\(_0x([a-z0-9]){4}\[_0x([a-z0-9]){4,6}\]\)\)/); - }); -}); diff --git a/test/functional-tests/node-obfuscators/MemberExpressionObfuscator.spec.ts b/test/functional-tests/node-obfuscators/MemberExpressionObfuscator.spec.ts index 34c1d13f..a0c04159 100644 --- a/test/functional-tests/node-obfuscators/MemberExpressionObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/MemberExpressionObfuscator.spec.ts @@ -27,7 +27,7 @@ describe('MemberExpressionObfuscator', () => { ); assert.match(obfuscationResult.getObfuscatedCode(), /var *_0x([a-z0-9]){4} *= *\['\\x6c\\x6f\\x67'\];/); - assert.match(obfuscationResult.getObfuscatedCode(), /var *test *= *console\[_0x([a-z0-9]){4}\[0x0\]\];/); + assert.match(obfuscationResult.getObfuscatedCode(), /var *test *= *console\[_0x([a-z0-9]){4}\('0x0'\)\];/); }); }); @@ -42,7 +42,7 @@ describe('MemberExpressionObfuscator', () => { ); assert.match(obfuscationResult.getObfuscatedCode(), /var *_0x([a-z0-9]){4} *= *\['\\x6c\\x6f\\x67'\];/); - assert.match(obfuscationResult.getObfuscatedCode(), /var *test *= *console\[_0x([a-z0-9]){4}\[0x0\]\];/); + assert.match(obfuscationResult.getObfuscatedCode(), /var *test *= *console\[_0x([a-z0-9]){4}\('0x0'\)\];/); }); it('should ignore square brackets call with identifier value', () => { diff --git a/test/functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec.ts b/test/functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec.ts index dd1e0fcd..b62404b7 100644 --- a/test/functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec.ts @@ -33,7 +33,7 @@ describe('MethodDefinitionObfuscator', () => { ); assert.match(obfuscationResult.getObfuscatedCode(), /var *_0x([a-z0-9]){4} *= *\['\\x62\\x61\\x72'\];/); - assert.match(obfuscationResult.getObfuscatedCode(), /\[_0x([a-z0-9]){4}\[0x0\]\]\(\)\{\}/); + assert.match(obfuscationResult.getObfuscatedCode(), /\[_0x([a-z0-9]){4}\('0x0'\)\]\(\)\{\}/); }); it('should not obfuscate method definition node with `constructor` key', () => { diff --git a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts index abc3a6eb..1ab92ee6 100644 --- a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts +++ b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts @@ -1,7 +1,7 @@ import 'format-unicorn'; import { AtobTemplate } from '../../../../../src/templates/custom-nodes/AtobTemplate'; -import { UnicodeArrayDecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-decode-node/UnicodeArrayDecodeNodeTemplate'; +import { UnicodeArrayAtobDecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate'; import { Utils } from '../../../../../src/Utils'; @@ -13,7 +13,7 @@ const assert: Chai.AssertStatic = require('chai').assert; * @returns {Function} */ function getFunctionFromTemplate (templateData: any, unicodeArrayName: string) { - let domainLockTemplate: string = UnicodeArrayDecodeNodeTemplate().formatUnicorn(templateData); + let domainLockTemplate: string = UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn(templateData); return Function(` var ${unicodeArrayName} = ['${Utils.btoa('test1')}', '${Utils.btoa('test2')}']; @@ -24,7 +24,7 @@ function getFunctionFromTemplate (templateData: any, unicodeArrayName: string) { `)(); } -describe('UnicodeArrayDecodeNodeTemplate (): string', () => { +describe('UnicodeArrayAtobDecodeNodeTemplate (): string', () => { let forLoopFunctionName: string = 'forLoop', code: string = `${forLoopFunctionName}();`, unicodeArrayName: string = 'unicodeArray'; diff --git a/test/index.spec.ts b/test/index.spec.ts index df1564ab..5108a506 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -27,7 +27,6 @@ import './functional-tests/JavaScriptObfuscatorInternal.spec'; import './functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec'; import './functional-tests/custom-nodes/domain-lock-nodes/DomainLockNode.spec'; import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec'; -import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNode.spec'; import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.spec'; import './functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayNode.spec'; import './functional-tests/node-obfuscators/FunctionObfuscator.spec'; From b2b066419a94585511824de075bdcafe0c3256eb Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 00:50:23 +0300 Subject: [PATCH 093/138] rc4 string literal encoding preparation --- dist/index.js | 342 +++++++++--------- .../UnicodeArrayCallsWrapper.ts | 21 +- .../SelfDefendingTemplate.ts | 4 +- .../UnicodeArrayAtobDecodeNodeTemplate.ts | 23 +- .../UnicodeArrayCallsWrapperTemplate.ts | 3 +- .../UnicodeArrayCallsWrapper.spec.ts | 2 +- ...icodeArrayCallsWrapperNodeTemplate.spec.ts | 54 +++ .../UnicodeArrayDecodeNodeTemplate.spec.ts | 41 --- test/index.spec.ts | 2 +- 9 files changed, 260 insertions(+), 232 deletions(-) create mode 100644 test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts delete mode 100644 test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts diff --git a/dist/index.js b/dist/index.js index 865331bc..3f3f7f99 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 = 82); +/******/ return __webpack_require__(__webpack_require__.s = 81); /******/ }) /************************************************************************/ /******/ ([ @@ -102,7 +102,7 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(76); +var chance_1 = __webpack_require__(75); var JSFuck_1 = __webpack_require__(19); var Utils = function () { @@ -259,7 +259,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var escodegen = __webpack_require__(11); var esprima = __webpack_require__(22); var estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); @@ -425,7 +425,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 NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var Nodes = function () { function Nodes() { @@ -555,41 +555,6 @@ var AppendState = exports.AppendState; /***/ }, /* 5 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var AbstractCustomNode = function () { - function AbstractCustomNode(options) { - _classCallCheck(this, AbstractCustomNode); - - this.options = options; - } - - _createClass(AbstractCustomNode, [{ - key: "getAppendState", - value: function getAppendState() { - return this.appendState; - } - }, { - key: "getNode", - value: function getNode() { - return this.getNodeStructure(); - } - }]); - - return AbstractCustomNode; -}(); - -exports.AbstractCustomNode = AbstractCustomNode; - -/***/ }, -/* 6 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -626,6 +591,41 @@ exports.NodeType = Utils_1.Utils.strEnumify({ WhileStatement: 'WhileStatement' }); +/***/ }, +/* 6 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var AbstractCustomNode = function () { + function AbstractCustomNode(options) { + _classCallCheck(this, AbstractCustomNode); + + this.options = options; + } + + _createClass(AbstractCustomNode, [{ + key: "getAppendState", + value: function getAppendState() { + return this.appendState; + } + }, { + key: "getNode", + value: function getNode() { + return this.getNodeStructure(); + } + }]); + + return AbstractCustomNode; +}(); + +exports.AbstractCustomNode = AbstractCustomNode; + /***/ }, /* 7 */ /***/ function(module, exports) { @@ -1187,7 +1187,7 @@ var esprima = __webpack_require__(22); var escodegen = __webpack_require__(11); var ObfuscationResult_1 = __webpack_require__(18); var Obfuscator_1 = __webpack_require__(26); -var Options_1 = __webpack_require__(55); +var Options_1 = __webpack_require__(54); var SourceMapCorrector_1 = __webpack_require__(27); var JavaScriptObfuscatorInternal = function () { @@ -1255,23 +1255,23 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(3); var AppendState_1 = __webpack_require__(4); -var NodeType_1 = __webpack_require__(6); -var CatchClauseObfuscator_1 = __webpack_require__(46); -var ConsoleOutputNodesGroup_1 = __webpack_require__(41); -var DebugProtectionNodesGroup_1 = __webpack_require__(42); -var DomainLockNodesGroup_1 = __webpack_require__(43); -var FunctionDeclarationObfuscator_1 = __webpack_require__(47); -var FunctionObfuscator_1 = __webpack_require__(48); -var LiteralObfuscator_1 = __webpack_require__(49); -var MemberExpressionObfuscator_1 = __webpack_require__(50); -var MethodDefinitionObfuscator_1 = __webpack_require__(51); +var NodeType_1 = __webpack_require__(5); +var CatchClauseObfuscator_1 = __webpack_require__(45); +var ConsoleOutputNodesGroup_1 = __webpack_require__(40); +var DebugProtectionNodesGroup_1 = __webpack_require__(41); +var DomainLockNodesGroup_1 = __webpack_require__(42); +var FunctionDeclarationObfuscator_1 = __webpack_require__(46); +var FunctionObfuscator_1 = __webpack_require__(47); +var LiteralObfuscator_1 = __webpack_require__(48); +var MemberExpressionObfuscator_1 = __webpack_require__(49); +var MethodDefinitionObfuscator_1 = __webpack_require__(50); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var ObjectExpressionObfuscator_1 = __webpack_require__(52); -var SelfDefendingNodesGroup_1 = __webpack_require__(44); -var UnicodeArrayNodesGroup_1 = __webpack_require__(45); -var VariableDeclarationObfuscator_1 = __webpack_require__(53); -var StackTraceAnalyzer_1 = __webpack_require__(58); +var ObjectExpressionObfuscator_1 = __webpack_require__(51); +var SelfDefendingNodesGroup_1 = __webpack_require__(43); +var UnicodeArrayNodesGroup_1 = __webpack_require__(44); +var VariableDeclarationObfuscator_1 = __webpack_require__(52); +var StackTraceAnalyzer_1 = __webpack_require__(57); var Obfuscator = function () { function Obfuscator(options) { @@ -1470,8 +1470,8 @@ 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__(79); -var mkdirp = __webpack_require__(80); +var fs = __webpack_require__(78); +var mkdirp = __webpack_require__(79); var path = __webpack_require__(23); var Utils_1 = __webpack_require__(0); @@ -1562,7 +1562,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 commander = __webpack_require__(78); +var commander = __webpack_require__(77); var path = __webpack_require__(23); var SourceMapMode_1 = __webpack_require__(12); var DefaultPreset_1 = __webpack_require__(21); @@ -1700,8 +1700,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 AppendState_1 = __webpack_require__(4); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(63); -var AbstractCustomNode_1 = __webpack_require__(5); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(62); +var AbstractCustomNode_1 = __webpack_require__(6); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -1751,8 +1751,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(64); -var AbstractCustomNode_1 = __webpack_require__(5); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(63); +var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { @@ -1804,8 +1804,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(65); -var AbstractCustomNode_1 = __webpack_require__(5); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(64); +var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { @@ -1857,8 +1857,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(66); -var AbstractCustomNode_1 = __webpack_require__(5); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(65); +var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1923,8 +1923,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DomainLockNodeTemplate_1 = __webpack_require__(67); -var AbstractCustomNode_1 = __webpack_require__(5); +var DomainLockNodeTemplate_1 = __webpack_require__(66); +var AbstractCustomNode_1 = __webpack_require__(6); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1986,8 +1986,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(17); -var SelfDefendingTemplate_1 = __webpack_require__(68); -var AbstractCustomNode_1 = __webpack_require__(5); +var SelfDefendingTemplate_1 = __webpack_require__(67); +var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var CustomNodeAppender_1 = __webpack_require__(15); @@ -2041,13 +2041,13 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(17); -var AtobTemplate_1 = __webpack_require__(62); -var SelfDefendingTemplate_1 = __webpack_require__(83); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(69); -var AbstractCustomNode_1 = __webpack_require__(5); +var AtobTemplate_1 = __webpack_require__(61); +var SelfDefendingTemplate_1 = __webpack_require__(68); +var UnicodeArrayAtobDecodeNodeTemplate_1 = __webpack_require__(69); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(70); +var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); -var UnicodeArrayAtobDecodeNodeTemplate_1 = __webpack_require__(84); var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { _inherits(UnicodeArrayCallsWrapper, _AbstractCustomNode_); @@ -2085,21 +2085,22 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { }, { key: 'getDecodeUnicodeArrayTemplate', value: function getDecodeUnicodeArrayTemplate() { - var forLoopFunctionName = 'forLoopFunc'; + var decodeFunctionName = 'decodeFunction'; var code = void 0; if (this.options.selfDefending) { code = SelfDefendingTemplate_1.SelfDefendingTemplate().formatUnicorn({ - forLoopFunctionName: forLoopFunctionName, + decodeFunctionName: decodeFunctionName, + unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, unicodeArrayName: this.unicodeArrayName }); } else { - code = forLoopFunctionName + '();'; + code = 'value = ' + decodeFunctionName + '(decodedValues, index, value);'; } return UnicodeArrayAtobDecodeNodeTemplate_1.UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ atobPolyfill: AtobTemplate_1.AtobTemplate(), code: code, - forLoopFunctionName: forLoopFunctionName, - unicodeArrayName: this.unicodeArrayName + decodeFunctionName: decodeFunctionName, + unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName }); } }, { @@ -2120,8 +2121,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; /***/ }, -/* 38 */, -/* 39 */ +/* 38 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2139,8 +2139,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var UnicodeArrayTemplate_1 = __webpack_require__(72); -var AbstractCustomNode_1 = __webpack_require__(5); +var UnicodeArrayTemplate_1 = __webpack_require__(71); +var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var UnicodeArrayNode = function (_AbstractCustomNode_) { @@ -2207,7 +2207,7 @@ UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH = 4; exports.UnicodeArrayNode = UnicodeArrayNode; /***/ }, -/* 40 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2226,9 +2226,9 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(17); -var SelfDefendingTemplate_1 = __webpack_require__(73); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(74); -var AbstractCustomNode_1 = __webpack_require__(5); +var SelfDefendingTemplate_1 = __webpack_require__(72); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(73); +var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2291,7 +2291,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, -/* 41 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2327,7 +2327,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; /***/ }, -/* 42 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2371,7 +2371,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; /***/ }, -/* 43 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2407,7 +2407,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { exports.DomainLockNodesGroup = DomainLockNodesGroup; /***/ }, -/* 44 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2443,7 +2443,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; /***/ }, -/* 45 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2458,8 +2458,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AbstractNodesGroup_1 = __webpack_require__(10); var UnicodeArray_1 = __webpack_require__(28); var UnicodeArrayCallsWrapper_1 = __webpack_require__(37); -var UnicodeArrayNode_1 = __webpack_require__(39); -var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(40); +var UnicodeArrayNode_1 = __webpack_require__(38); +var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(39); var Utils_1 = __webpack_require__(0); var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { @@ -2499,7 +2499,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; /***/ }, -/* 46 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2514,7 +2514,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -2570,7 +2570,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 47 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2585,7 +2585,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -2645,7 +2645,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 48 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2660,7 +2660,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -2726,7 +2726,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 49 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2744,7 +2744,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var BooleanLiteralReplacer_1 = __webpack_require__(54); +var BooleanLiteralReplacer_1 = __webpack_require__(53); var Nodes_1 = __webpack_require__(2); var NumberLiteralReplacer_1 = __webpack_require__(20); var StringLiteralReplacer_1 = __webpack_require__(16); @@ -2791,7 +2791,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 50 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2807,7 +2807,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var StringLiteralReplacer_1 = __webpack_require__(16); @@ -2876,7 +2876,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 51 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2937,7 +2937,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 52 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2953,7 +2953,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); @@ -3023,7 +3023,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 53 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3038,7 +3038,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -3100,7 +3100,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 54 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3139,7 +3139,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 55 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3160,11 +3160,11 @@ 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__(77); -var TSourceMapMode_1 = __webpack_require__(75); +var class_validator_1 = __webpack_require__(76); +var TSourceMapMode_1 = __webpack_require__(74); var DefaultPreset_1 = __webpack_require__(21); -var OptionsNormalizer_1 = __webpack_require__(56); -var ValidationErrorsFormatter_1 = __webpack_require__(57); +var OptionsNormalizer_1 = __webpack_require__(55); +var ValidationErrorsFormatter_1 = __webpack_require__(56); var Options = function Options(obfuscatorOptions) { _classCallCheck(this, Options); @@ -3210,7 +3210,7 @@ exports.Options = Options; var _a; /***/ }, -/* 56 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3379,7 +3379,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNo exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 57 */ +/* 56 */ /***/ function(module, exports) { "use strict"; @@ -3446,7 +3446,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 58 */ +/* 57 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3457,10 +3457,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(59); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(60); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(61); +var NodeType_1 = __webpack_require__(5); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(58); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(59); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(60); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); @@ -3537,7 +3537,7 @@ var StackTraceAnalyzer = function () { exports.StackTraceAnalyzer = StackTraceAnalyzer; /***/ }, -/* 59 */ +/* 58 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3596,7 +3596,7 @@ var FunctionDeclarationCalleeDataExtractor = function () { exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; /***/ }, -/* 60 */ +/* 59 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3658,7 +3658,7 @@ var FunctionExpressionCalleeDataExtractor = function () { exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; /***/ }, -/* 61 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3789,7 +3789,7 @@ var ObjectExpressionCalleeDataExtractor = function () { exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; /***/ }, -/* 62 */ +/* 61 */ /***/ function(module, exports) { "use strict"; @@ -3801,7 +3801,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 63 */ +/* 62 */ /***/ function(module, exports) { "use strict"; @@ -3813,7 +3813,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 64 */ +/* 63 */ /***/ function(module, exports) { "use strict"; @@ -3825,7 +3825,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 65 */ +/* 64 */ /***/ function(module, exports) { "use strict"; @@ -3837,7 +3837,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 66 */ +/* 65 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3850,7 +3850,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 67 */ +/* 66 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3863,7 +3863,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 68 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3875,6 +3875,19 @@ function SelfDefendingTemplate() { } exports.SelfDefendingTemplate = SelfDefendingTemplate; +/***/ }, +/* 68 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var Utils_1 = __webpack_require__(0); +function SelfDefendingTemplate() { + return '\n var func = function(){return \'dev\';};\n \n !{unicodeArrayCallsWrapperName}.flag ? ({unicodeArrayCallsWrapperName}.flag = true, Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')()[\'test\'](func[\'toString\']()) !== true && !{unicodeArrayName}++ ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : (value = Function(\'a\', \'b\', \'c\', \'d\', \'return a.call(null, b, c, d)\')({decodeFunctionName}, decodedValues, index, value)) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')()) : (value = Function(\'a\', \'b\', \'c\', \'d\', \'return a.call(null, b, c, d)\')({decodeFunctionName}, decodedValues, index, value));\n '; +} +exports.SelfDefendingTemplate = SelfDefendingTemplate; + /***/ }, /* 69 */ /***/ function(module, exports) { @@ -3882,15 +3895,25 @@ exports.SelfDefendingTemplate = SelfDefendingTemplate; "use strict"; "use strict"; +function UnicodeArrayAtobDecodeNodeTemplate() { + return " \n {atobPolyfill}\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n var {decodeFunctionName} = function (decodedValues, index, value) {\n if (!decodedValues[index]) {\n value = decodeURI(atob(value));\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues;\n \n return value;\n }\n \n {code}\n "; +} +exports.UnicodeArrayAtobDecodeNodeTemplate = UnicodeArrayAtobDecodeNodeTemplate; + +/***/ }, +/* 70 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + function UnicodeArrayCallsWrapperTemplate() { - return "\n var {unicodeArrayCallsWrapperName} = function (index, key) {\n var value = {unicodeArrayName}[parseInt(index, 0x010)]\n \n {decodeNodeTemplate}\n \n return value;\n };\n "; + return "\n var {unicodeArrayCallsWrapperName} = function (index, key) {\n var index = parseInt(index, 0x010);\n var value = {unicodeArrayName}[index];\n \n {decodeNodeTemplate}\n \n return value;\n };\n "; } exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 70 */, -/* 71 */, -/* 72 */ +/* 71 */ /***/ function(module, exports) { "use strict"; @@ -3902,7 +3925,7 @@ function UnicodeArrayTemplate() { exports.UnicodeArrayTemplate = UnicodeArrayTemplate; /***/ }, -/* 73 */ +/* 72 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3915,7 +3938,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 74 */ +/* 73 */ /***/ function(module, exports) { "use strict"; @@ -3927,45 +3950,45 @@ function UnicodeArrayRotateFunctionTemplate() { exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; /***/ }, -/* 75 */ +/* 74 */ /***/ function(module, exports) { "use strict"; "use strict"; /***/ }, -/* 76 */ +/* 75 */ /***/ function(module, exports) { module.exports = require("chance"); /***/ }, -/* 77 */ +/* 76 */ /***/ function(module, exports) { module.exports = require("class-validator"); /***/ }, -/* 78 */ +/* 77 */ /***/ function(module, exports) { module.exports = require("commander"); /***/ }, -/* 79 */ +/* 78 */ /***/ function(module, exports) { module.exports = require("fs"); /***/ }, -/* 80 */ +/* 79 */ /***/ function(module, exports) { module.exports = require("mkdirp"); /***/ }, -/* 81 */, -/* 82 */ +/* 80 */, +/* 81 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3977,31 +4000,6 @@ if (!global._babelPolyfill) { } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; -/***/ }, -/* 83 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var Utils_1 = __webpack_require__(0); -function SelfDefendingTemplate() { - return '\n var func = function(){return \'dev\';};\n \n Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')()[\'test\'](func[\'toString\']()) !== true && !{unicodeArrayName}++ ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : Function(\'a\', atob(' + Utils_1.Utils.stringToUnicode(Utils_1.Utils.btoa('a.call()')) + '))({forLoopFunctionName}) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')();\n '; -} -exports.SelfDefendingTemplate = SelfDefendingTemplate; - -/***/ }, -/* 84 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -function UnicodeArrayAtobDecodeNodeTemplate() { - return "\n var decodedIndices = [];\n \n if (decodedIndices.indexOf(index) === -1) {\n value = atob(value);\n }\n "; -} -exports.UnicodeArrayAtobDecodeNodeTemplate = UnicodeArrayAtobDecodeNodeTemplate; - /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts index e288deb3..0a9869c6 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts @@ -12,13 +12,13 @@ import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset import { AtobTemplate } from '../../templates/custom-nodes/AtobTemplate'; import { SelfDefendingTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate'; +import { UnicodeArrayAtobDecodeNodeTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate'; import { UnicodeArrayCallsWrapperTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate'; import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; import { NodeUtils } from '../../NodeUtils'; import { UnicodeArray } from '../../UnicodeArray'; -import { UnicodeArrayAtobDecodeNodeTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate'; export class UnicodeArrayCallsWrapper extends AbstractCustomNode { /** @@ -86,27 +86,28 @@ export class UnicodeArrayCallsWrapper extends AbstractCustomNode { } /** - * @returns {any} + * @returns {string} */ protected getDecodeUnicodeArrayTemplate (): string { - const forLoopFunctionName: string = 'forLoopFunc'; + const decodeFunctionName: string = 'decodeFunction'; let code: string; if (this.options.selfDefending) { code = SelfDefendingTemplate().formatUnicorn({ - forLoopFunctionName, + decodeFunctionName, + unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, unicodeArrayName: this.unicodeArrayName }); } else { - code = `${forLoopFunctionName}();`; + code = `value = ${decodeFunctionName}(decodedValues, index, value);`; } return UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ atobPolyfill: AtobTemplate(), code, - forLoopFunctionName, - unicodeArrayName: this.unicodeArrayName + decodeFunctionName, + unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName }) } @@ -114,12 +115,14 @@ export class UnicodeArrayCallsWrapper extends AbstractCustomNode { * @returns {ESTree.Node} */ protected getNodeStructure (): ESTree.Node { - let decodeNodeTemplate: string = this.options.encodeUnicodeLiterals ? this.getDecodeUnicodeArrayTemplate() : ''; + const decodeNodeTemplate: string = this.options.encodeUnicodeLiterals ? + this.getDecodeUnicodeArrayTemplate() : + ''; return NodeUtils.convertCodeToStructure( JavaScriptObfuscator.obfuscate( UnicodeArrayCallsWrapperTemplate().formatUnicorn({ - decodeNodeTemplate: decodeNodeTemplate, + decodeNodeTemplate, unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, unicodeArrayName: this.unicodeArrayName }), diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate.ts index b0fb4690..9fcd5f4b 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate.ts @@ -6,7 +6,7 @@ import { Utils } from '../../../../Utils'; export function SelfDefendingTemplate (): string { return ` var func = function(){return 'dev';}; - - Function(${Utils.stringToUnicode(`return/\\w+ *\\(\\) *{\\w+ *['|"].+['|"];? *}/`)})()['test'](func['toString']()) !== true && !{unicodeArrayName}++ ? []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(true){}')() : Function('a', atob(${Utils.stringToUnicode(Utils.btoa('a.call()'))}))({forLoopFunctionName}) ? []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(false){}')() : []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(false){}')(); + + !{unicodeArrayCallsWrapperName}.flag ? ({unicodeArrayCallsWrapperName}.flag = true, Function(${Utils.stringToUnicode(`return/\\w+ *\\(\\) *{\\w+ *['|"].+['|"];? *}/`)})()['test'](func['toString']()) !== true && !{unicodeArrayName}++ ? []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(true){}')() : (value = Function('a', 'b', 'c', 'd', 'return a.call(null, b, c, d)')({decodeFunctionName}, decodedValues, index, value)) ? []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(false){}')() : []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(false){}')()) : (value = Function('a', 'b', 'c', 'd', 'return a.call(null, b, c, d)')({decodeFunctionName}, decodedValues, index, value)); `; } diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts index 2e14184c..990232a2 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts @@ -2,11 +2,24 @@ * @returns {string} */ export function UnicodeArrayAtobDecodeNodeTemplate (): string { - return ` - var decodedIndices = []; - - if (decodedIndices.indexOf(index) === -1) { - value = atob(value); + return ` + {atobPolyfill} + + var decodedValues = {unicodeArrayCallsWrapperName}.data || {}; + + var {decodeFunctionName} = function (decodedValues, index, value) { + if (!decodedValues[index]) { + value = decodeURI(atob(value)); + decodedValues[index] = value; + } else { + value = decodedValues[index]; + } + + {unicodeArrayCallsWrapperName}.data = decodedValues; + + return value; } + + {code} `; } diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate.ts index e93a7129..4d9dd3fc 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate.ts @@ -4,7 +4,8 @@ export function UnicodeArrayCallsWrapperTemplate (): string { return ` var {unicodeArrayCallsWrapperName} = function (index, key) { - var value = {unicodeArrayName}[parseInt(index, 0x010)] + var index = parseInt(index, 0x010); + var value = {unicodeArrayName}[index]; {decodeNodeTemplate} diff --git a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts index a4e82037..ea791e24 100644 --- a/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts +++ b/test/functional-tests/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.spec.ts @@ -15,7 +15,7 @@ describe('UnicodeArrayCallsWrapper', () => { assert.match( obfuscationResult.getObfuscatedCode(), - /var *_0x([a-z0-9]){4,6} *= *_0x([a-z0-9]){4}\[parseInt\(_0x([a-z0-9]){4,6}, *0x10\)\];/ + /var *_0x([a-z0-9]){4,6} *= *parseInt\(_0x([a-z0-9]){4,6}, *0x10\);/ ); }); }); diff --git a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts new file mode 100644 index 00000000..f3cb5326 --- /dev/null +++ b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts @@ -0,0 +1,54 @@ +import 'format-unicorn'; + +import { AtobTemplate } from '../../../../../src/templates/custom-nodes/AtobTemplate'; +import { UnicodeArrayAtobDecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate'; +import { UnicodeArrayCallsWrapperTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate'; + +import { Utils } from '../../../../../src/Utils'; + +const assert: Chai.AssertStatic = require('chai').assert; + +/** + * @param templateData + * @param unicodeArrayName + * @param unicodeArrayCallsWrapperName + * @param index + * @returns {Function} + */ +function getFunctionFromTemplate ( + templateData: any, + unicodeArrayName: string, + unicodeArrayCallsWrapperName: string, + index: string +) { + let unicodeArrayCallsWrapperTemplate: string = UnicodeArrayCallsWrapperTemplate().formatUnicorn(templateData); + + return Function(` + var ${unicodeArrayName} = ['${Utils.btoa('test1')}']; + + ${unicodeArrayCallsWrapperTemplate} + + return ${unicodeArrayCallsWrapperName}(${index}); + `)(); +} + +describe('UnicodeArrayCallsWrapperNodeTemplate (): string', () => { + let decodeFunctionName: string = 'decodeFunction', + unicodeArrayName: string = 'unicodeArrayName', + unicodeArrayCallsWrapperName: string = 'unicodeArrayCallsWrapperName', + atobDecodeNodeTemplate: string = UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ + atobPolyfill: AtobTemplate(), + code: `value = ${decodeFunctionName}(decodedValues, index, value);`, + decodeFunctionName, + unicodeArrayCallsWrapperName + }); + + it('should correctly returns decoded value with atob encoding', () => { + assert.deepEqual(getFunctionFromTemplate({ + decodeNodeTemplate: atobDecodeNodeTemplate, + unicodeArrayCallsWrapperName, + unicodeArrayName + }, unicodeArrayName, unicodeArrayCallsWrapperName, '0x0'), 'test1'); + }); + +}); diff --git a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts deleted file mode 100644 index 1ab92ee6..00000000 --- a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec.ts +++ /dev/null @@ -1,41 +0,0 @@ -import 'format-unicorn'; - -import { AtobTemplate } from '../../../../../src/templates/custom-nodes/AtobTemplate'; -import { UnicodeArrayAtobDecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate'; - -import { Utils } from '../../../../../src/Utils'; - -const assert: Chai.AssertStatic = require('chai').assert; - -/** - * @param templateData - * @param unicodeArrayName - * @returns {Function} - */ -function getFunctionFromTemplate (templateData: any, unicodeArrayName: string) { - let domainLockTemplate: string = UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn(templateData); - - return Function(` - var ${unicodeArrayName} = ['${Utils.btoa('test1')}', '${Utils.btoa('test2')}']; - - ${domainLockTemplate} - - return ${unicodeArrayName}; - `)(); -} - -describe('UnicodeArrayAtobDecodeNodeTemplate (): string', () => { - let forLoopFunctionName: string = 'forLoop', - code: string = `${forLoopFunctionName}();`, - unicodeArrayName: string = 'unicodeArray'; - - it('should correctly decode unicode array items from Base64', () => { - assert.deepEqual(getFunctionFromTemplate({ - atobPolyfill: AtobTemplate(), - code, - forLoopFunctionName, - unicodeArrayName: unicodeArrayName - }, unicodeArrayName), ['test1', 'test2']); - }); - -}); diff --git a/test/index.spec.ts b/test/index.spec.ts index 5108a506..b95d860e 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -37,7 +37,7 @@ import './functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec'; import './functional-tests/stack-trace-analyzer/StackTraceAnalyzer.spec'; import './functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNodeTemplate.spec'; -import './functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayDecodeNodeTemplate.spec'; +import './functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec'; /** * Performance tests From 4816c7cb37f613b5f116794ece8365025402d9be Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 01:22:31 +0300 Subject: [PATCH 094/138] rc4 string literal encoding preparation --- .../UnicodeArrayCallsWrapperNodeTemplate.spec.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts index f3cb5326..c78f01a9 100644 --- a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts +++ b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts @@ -50,5 +50,4 @@ describe('UnicodeArrayCallsWrapperNodeTemplate (): string', () => { unicodeArrayName }, unicodeArrayName, unicodeArrayCallsWrapperName, '0x0'), 'test1'); }); - }); From 96fab02d2c3d90f58775162733b96445b709012a Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 02:26:46 +0300 Subject: [PATCH 095/138] preformance fix --- dist/index.js | 8 ++---- .../UnicodeArrayCallsWrapper.ts | 4 +-- .../SelfDefendingTemplate.ts | 3 +- .../UnicodeArrayAtobDecodeNodeTemplate.ts | 28 +++++++++---------- 4 files changed, 20 insertions(+), 23 deletions(-) diff --git a/dist/index.js b/dist/index.js index 3f3f7f99..1e5349c6 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2086,15 +2086,13 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { key: 'getDecodeUnicodeArrayTemplate', value: function getDecodeUnicodeArrayTemplate() { var decodeFunctionName = 'decodeFunction'; - var code = void 0; + var code = ''; if (this.options.selfDefending) { code = SelfDefendingTemplate_1.SelfDefendingTemplate().formatUnicorn({ decodeFunctionName: decodeFunctionName, unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, unicodeArrayName: this.unicodeArrayName }); - } else { - code = 'value = ' + decodeFunctionName + '(decodedValues, index, value);'; } return UnicodeArrayAtobDecodeNodeTemplate_1.UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ atobPolyfill: AtobTemplate_1.AtobTemplate(), @@ -3884,7 +3882,7 @@ exports.SelfDefendingTemplate = SelfDefendingTemplate; var Utils_1 = __webpack_require__(0); function SelfDefendingTemplate() { - return '\n var func = function(){return \'dev\';};\n \n !{unicodeArrayCallsWrapperName}.flag ? ({unicodeArrayCallsWrapperName}.flag = true, Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')()[\'test\'](func[\'toString\']()) !== true && !{unicodeArrayName}++ ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : (value = Function(\'a\', \'b\', \'c\', \'d\', \'return a.call(null, b, c, d)\')({decodeFunctionName}, decodedValues, index, value)) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')()) : (value = Function(\'a\', \'b\', \'c\', \'d\', \'return a.call(null, b, c, d)\')({decodeFunctionName}, decodedValues, index, value));\n '; + return '\n var func = function(){return \'dev\';};\n var object = [][\'filter\'][\'constructor\'];\n \n !{unicodeArrayCallsWrapperName}.flag ? ({unicodeArrayCallsWrapperName}.flag = true, Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')()[\'test\'](func[\'toString\']()) !== true && !{unicodeArrayName}++ ? object(' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : false ? object(' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : object(' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')()) : false;\n '; } exports.SelfDefendingTemplate = SelfDefendingTemplate; @@ -3896,7 +3894,7 @@ exports.SelfDefendingTemplate = SelfDefendingTemplate; "use strict"; function UnicodeArrayAtobDecodeNodeTemplate() { - return " \n {atobPolyfill}\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n var {decodeFunctionName} = function (decodedValues, index, value) {\n if (!decodedValues[index]) {\n value = decodeURI(atob(value));\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues;\n \n return value;\n }\n \n {code}\n "; + return " \n if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) {\n {atobPolyfill}\n \n {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true;\n }\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n if (!decodedValues[index]) {\n {code}\n \n value = decodeURI(atob(value));\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues; \n "; } exports.UnicodeArrayAtobDecodeNodeTemplate = UnicodeArrayAtobDecodeNodeTemplate; diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts index 0a9869c6..d9828b82 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts @@ -91,7 +91,7 @@ export class UnicodeArrayCallsWrapper extends AbstractCustomNode { protected getDecodeUnicodeArrayTemplate (): string { const decodeFunctionName: string = 'decodeFunction'; - let code: string; + let code: string = ''; if (this.options.selfDefending) { code = SelfDefendingTemplate().formatUnicorn({ @@ -99,8 +99,6 @@ export class UnicodeArrayCallsWrapper extends AbstractCustomNode { unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, unicodeArrayName: this.unicodeArrayName }); - } else { - code = `value = ${decodeFunctionName}(decodedValues, index, value);`; } return UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate.ts index 9fcd5f4b..5ad5e015 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate.ts @@ -6,7 +6,8 @@ import { Utils } from '../../../../Utils'; export function SelfDefendingTemplate (): string { return ` var func = function(){return 'dev';}; + var object = []['filter']['constructor']; - !{unicodeArrayCallsWrapperName}.flag ? ({unicodeArrayCallsWrapperName}.flag = true, Function(${Utils.stringToUnicode(`return/\\w+ *\\(\\) *{\\w+ *['|"].+['|"];? *}/`)})()['test'](func['toString']()) !== true && !{unicodeArrayName}++ ? []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(true){}')() : (value = Function('a', 'b', 'c', 'd', 'return a.call(null, b, c, d)')({decodeFunctionName}, decodedValues, index, value)) ? []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(false){}')() : []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(false){}')()) : (value = Function('a', 'b', 'c', 'd', 'return a.call(null, b, c, d)')({decodeFunctionName}, decodedValues, index, value)); + !{unicodeArrayCallsWrapperName}.flag ? ({unicodeArrayCallsWrapperName}.flag = true, Function(${Utils.stringToUnicode(`return/\\w+ *\\(\\) *{\\w+ *['|"].+['|"];? *}/`)})()['test'](func['toString']()) !== true && !{unicodeArrayName}++ ? object(${Utils.stringToJSFuck('while')} + '(true){}')() : false ? object(${Utils.stringToJSFuck('while')} + '(false){}')() : object(${Utils.stringToJSFuck('while')} + '(false){}')()) : false; `; } diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts index 990232a2..b7c11ed5 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts @@ -2,24 +2,24 @@ * @returns {string} */ export function UnicodeArrayAtobDecodeNodeTemplate (): string { - return ` - {atobPolyfill} + return ` + if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) { + {atobPolyfill} + + {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true; + } var decodedValues = {unicodeArrayCallsWrapperName}.data || {}; - var {decodeFunctionName} = function (decodedValues, index, value) { - if (!decodedValues[index]) { - value = decodeURI(atob(value)); - decodedValues[index] = value; - } else { - value = decodedValues[index]; - } + if (!decodedValues[index]) { + {code} - {unicodeArrayCallsWrapperName}.data = decodedValues; - - return value; - } + value = decodeURI(atob(value)); + decodedValues[index] = value; + } else { + value = decodedValues[index]; + } - {code} + {unicodeArrayCallsWrapperName}.data = decodedValues; `; } From 2f688f81fe4e2795f39deb6396e0e313b552cc82 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 12:12:43 +0300 Subject: [PATCH 096/138] preformance fix: fixed tests --- dist/index.js | 11 ++++------- .../unicode-array-nodes/UnicodeArrayCallsWrapper.ts | 10 +++------- .../UnicodeArrayAtobDecodeNodeTemplate.ts | 2 +- .../UnicodeArrayCallsWrapperNodeTemplate.spec.ts | 6 ++---- 4 files changed, 10 insertions(+), 19 deletions(-) diff --git a/dist/index.js b/dist/index.js index 1e5349c6..c36faebd 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2085,19 +2085,16 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { }, { key: 'getDecodeUnicodeArrayTemplate', value: function getDecodeUnicodeArrayTemplate() { - var decodeFunctionName = 'decodeFunction'; - var code = ''; + var selfDefendingCode = ''; if (this.options.selfDefending) { - code = SelfDefendingTemplate_1.SelfDefendingTemplate().formatUnicorn({ - decodeFunctionName: decodeFunctionName, + selfDefendingCode = SelfDefendingTemplate_1.SelfDefendingTemplate().formatUnicorn({ unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, unicodeArrayName: this.unicodeArrayName }); } return UnicodeArrayAtobDecodeNodeTemplate_1.UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ atobPolyfill: AtobTemplate_1.AtobTemplate(), - code: code, - decodeFunctionName: decodeFunctionName, + selfDefendingCode: selfDefendingCode, unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName }); } @@ -3894,7 +3891,7 @@ exports.SelfDefendingTemplate = SelfDefendingTemplate; "use strict"; function UnicodeArrayAtobDecodeNodeTemplate() { - return " \n if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) {\n {atobPolyfill}\n \n {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true;\n }\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n if (!decodedValues[index]) {\n {code}\n \n value = decodeURI(atob(value));\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues; \n "; + return " \n if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) {\n {atobPolyfill}\n \n {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true;\n }\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n if (!decodedValues[index]) {\n {selfDefendingCode}\n \n value = decodeURI(atob(value));\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues; \n "; } exports.UnicodeArrayAtobDecodeNodeTemplate = UnicodeArrayAtobDecodeNodeTemplate; diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts index d9828b82..d5b7afb6 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts @@ -89,13 +89,10 @@ export class UnicodeArrayCallsWrapper extends AbstractCustomNode { * @returns {string} */ protected getDecodeUnicodeArrayTemplate (): string { - const decodeFunctionName: string = 'decodeFunction'; - - let code: string = ''; + let selfDefendingCode: string = ''; if (this.options.selfDefending) { - code = SelfDefendingTemplate().formatUnicorn({ - decodeFunctionName, + selfDefendingCode = SelfDefendingTemplate().formatUnicorn({ unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, unicodeArrayName: this.unicodeArrayName }); @@ -103,8 +100,7 @@ export class UnicodeArrayCallsWrapper extends AbstractCustomNode { return UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ atobPolyfill: AtobTemplate(), - code, - decodeFunctionName, + selfDefendingCode, unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName }) } diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts index b7c11ed5..2f2908f7 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts @@ -12,7 +12,7 @@ export function UnicodeArrayAtobDecodeNodeTemplate (): string { var decodedValues = {unicodeArrayCallsWrapperName}.data || {}; if (!decodedValues[index]) { - {code} + {selfDefendingCode} value = decodeURI(atob(value)); decodedValues[index] = value; diff --git a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts index c78f01a9..cdbc95fb 100644 --- a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts +++ b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts @@ -33,13 +33,11 @@ function getFunctionFromTemplate ( } describe('UnicodeArrayCallsWrapperNodeTemplate (): string', () => { - let decodeFunctionName: string = 'decodeFunction', - unicodeArrayName: string = 'unicodeArrayName', + let unicodeArrayName: string = 'unicodeArrayName', unicodeArrayCallsWrapperName: string = 'unicodeArrayCallsWrapperName', atobDecodeNodeTemplate: string = UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ atobPolyfill: AtobTemplate(), - code: `value = ${decodeFunctionName}(decodedValues, index, value);`, - decodeFunctionName, + selfDefendingCode: '', unicodeArrayCallsWrapperName }); From 3ea6d466703a418e8390e6a105f5f2ccebd34986 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 13:46:22 +0300 Subject: [PATCH 097/138] `encodeUnicodeArray` has been renamed to `unicodeArrayEncoding` and accepts `true|false|'base64'|'rc4'` values --- CHANGELOG.md | 7 +- README.md | 30 +- dist/index.js | 316 ++++++++++-------- package.json | 1 - src/cli/JavaScriptObfuscatorCLI.ts | 24 +- .../UnicodeArrayCallsWrapper.ts | 32 +- src/enums/UnicodeArrayEncoding.ts | 4 + src/interfaces/IObfuscatorOptions.d.ts | 3 +- src/interfaces/IOptions.d.ts | 3 +- .../replacers/StringLiteralReplacer.ts | 16 +- src/options/Options.ts | 13 +- src/options/OptionsNormalizer.ts | 52 ++- src/preset-options/DefaultPreset.ts | 5 +- src/preset-options/NoCustomNodesPreset.ts | 5 +- ...> UnicodeArrayBase64DecodeNodeTemplate.ts} | 2 +- src/types/TUnicodeArrayEncoding.ts | 1 + test/dev/test.ts | 2 +- .../LiteralObfuscator.spec.ts | 6 +- ...icodeArrayCallsWrapperNodeTemplate.spec.ts | 4 +- test/unit-tests/OptionsNormalizer.spec.ts | 20 +- 20 files changed, 324 insertions(+), 222 deletions(-) create mode 100644 src/enums/UnicodeArrayEncoding.ts rename src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/{UnicodeArrayAtobDecodeNodeTemplate.ts => UnicodeArrayBase64DecodeNodeTemplate.ts} (91%) create mode 100644 src/types/TUnicodeArrayEncoding.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fee049b..0055fab9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,16 @@ Change Log === +v0.8.0 +--- +* **Breaking options change:** `encodeUnicodeArray` has been renamed to `unicodeArrayEncoding` and now accepts following values: `true|false|'base64'|'rc4`. +* **Breaking change:** option `wrapUnicodeArrayCalls` was removed and now all calls to `unicodeArray` are always wrapped by special wrapper function. + v0.7.1 --- * IE error fix [#14](https://github.com/sanex3339/javascript-obfuscator/issues/14) -v0.7.0-dev.3 +v0.7.0 --- * Obfuscator now returns an empty string instead of obfuscated code if source code is empty diff --git a/README.md b/README.md index 588942bc..6066dcbc 100644 --- a/README.md +++ b/README.md @@ -116,8 +116,6 @@ Following options available for the JS Obfuscator: debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: true, - encodeUnicodeLiterals: false, - optimize: false, reservedNames: [], rotateUnicodeArray: true, selfDefending: true, @@ -126,6 +124,7 @@ Following options available for the JS Obfuscator: sourceMapFileName: '', sourceMapMode: 'separate', unicodeArray: true, + unicodeArrayEncoding: false, unicodeArrayThreshold: 0.8 } ``` @@ -141,8 +140,6 @@ Following options available for the JS Obfuscator: --debugProtection --debugProtectionInterval --disableConsoleOutput - --encodeUnicodeLiterals - --optimize --reservedNames (comma separated) --rotateUnicodeArray --selfDefending @@ -151,6 +148,7 @@ Following options available for the JS Obfuscator: --sourceMapFileName --sourceMapMode [inline, separate] --unicodeArray + --unicodeArrayEncoding ['base64', 'rc4'] --unicodeArrayThreshold ``` @@ -189,15 +187,6 @@ Locks the obfuscated source code so it only runs on specific domains and/or sub- ##### Multiple domains and sub-domains It's possible to lock your code to more than one domain or sub-domain. For instance, to lock it so the code only runs on **www.example.com** add `www.example.com`, to make it work on any sub-domain from example.com, use `.example.com`. -### `encodeUnicodeLiterals` -Type: `boolean` Default: `false` - -##### :warning: `unicodeArray` option must be enabled - -This option can slightly slow down your script. - -Encode all string literals of the `unicodeArray` using base64 and inserts a special function that it's used to decode it back at runtime. - ### `reservedNames` Type: `string[]` Default: `[]` @@ -279,6 +268,21 @@ Type: `boolean` Default: `true` Removes string literals and place them in a special array. For instance the string `"Hello World"` in `var m = "Hello World";` will be replaced with something like `var m = _0x12c456[0x1];` +### `unicodeArrayEncoding` +Type: `boolean|string` Default: `false` + +##### :warning: `unicodeArray` option must be enabled + +This option can slightly slow down your script. + +Encode all string literals of the `unicodeArray` using `base64` or `rc4` and inserts a special code that used to decode it back at runtime. + +Available values: +* `true` (`boolean`): encode `unicodeArray` values using `base64` +* `false` (`boolean`): don't encode `unicodeArray` values +* `'base64'` (`string`): encode `unicodeArray` values using `base64` +* `'rc4'` (`string`): encode `unicodeArray` values using `rc4` + ### `unicodeArrayThreshold` Type: `number` Default: `0.8` Min: `0` Max: `1` diff --git a/dist/index.js b/dist/index.js index c36faebd..e9197617 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 = 81); +/******/ return __webpack_require__(__webpack_require__.s = 83); /******/ }) /************************************************************************/ /******/ ([ @@ -102,7 +102,7 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(75); +var chance_1 = __webpack_require__(77); var JSFuck_1 = __webpack_require__(19); var Utils = function () { @@ -894,6 +894,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 UnicodeArrayEncoding_1 = __webpack_require__(40); var AbstractReplacer_1 = __webpack_require__(13); var NumberLiteralReplacer_1 = __webpack_require__(20); var Utils_1 = __webpack_require__(0); @@ -911,8 +912,15 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { key: 'replace', value: function replace(nodeValue) { var replaceWithUnicodeArrayFlag = Math.random() <= this.options.unicodeArrayThreshold; - if (this.options.encodeUnicodeLiterals && replaceWithUnicodeArrayFlag) { - nodeValue = Utils_1.Utils.btoa(nodeValue); + if (replaceWithUnicodeArrayFlag) { + switch (this.options.unicodeArrayEncoding) { + case UnicodeArrayEncoding_1.UnicodeArrayEncoding.base64: + nodeValue = Utils_1.Utils.btoa(nodeValue); + break; + case UnicodeArrayEncoding_1.UnicodeArrayEncoding.rc4: + nodeValue = Utils_1.Utils.btoa(nodeValue); + break; + } } nodeValue = Utils_1.Utils.stringToUnicode(nodeValue); if (this.options.unicodeArray && replaceWithUnicodeArrayFlag) { @@ -965,7 +973,6 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ debugProtectionInterval: false, disableConsoleOutput: false, domainLock: [], - encodeUnicodeLiterals: false, reservedNames: [], rotateUnicodeArray: false, selfDefending: false, @@ -974,8 +981,8 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ sourceMapFileName: '', sourceMapMode: SourceMapMode_1.SourceMapMode.Separate, unicodeArray: false, - unicodeArrayThreshold: 0, - wrapUnicodeArrayCalls: false + unicodeArrayEncoding: false, + unicodeArrayThreshold: 0 }); /***/ }, @@ -1141,7 +1148,6 @@ exports.DEFAULT_PRESET = Object.freeze({ debugProtectionInterval: false, disableConsoleOutput: true, domainLock: [], - encodeUnicodeLiterals: false, reservedNames: [], rotateUnicodeArray: true, selfDefending: true, @@ -1150,8 +1156,8 @@ exports.DEFAULT_PRESET = Object.freeze({ sourceMapFileName: '', sourceMapMode: SourceMapMode_1.SourceMapMode.Separate, unicodeArray: true, - unicodeArrayThreshold: 0.8, - wrapUnicodeArrayCalls: true + unicodeArrayEncoding: false, + unicodeArrayThreshold: 0.8 }); /***/ }, @@ -1187,7 +1193,7 @@ var esprima = __webpack_require__(22); var escodegen = __webpack_require__(11); var ObfuscationResult_1 = __webpack_require__(18); var Obfuscator_1 = __webpack_require__(26); -var Options_1 = __webpack_require__(54); +var Options_1 = __webpack_require__(55); var SourceMapCorrector_1 = __webpack_require__(27); var JavaScriptObfuscatorInternal = function () { @@ -1256,22 +1262,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(3); var AppendState_1 = __webpack_require__(4); var NodeType_1 = __webpack_require__(5); -var CatchClauseObfuscator_1 = __webpack_require__(45); -var ConsoleOutputNodesGroup_1 = __webpack_require__(40); -var DebugProtectionNodesGroup_1 = __webpack_require__(41); -var DomainLockNodesGroup_1 = __webpack_require__(42); -var FunctionDeclarationObfuscator_1 = __webpack_require__(46); -var FunctionObfuscator_1 = __webpack_require__(47); -var LiteralObfuscator_1 = __webpack_require__(48); -var MemberExpressionObfuscator_1 = __webpack_require__(49); -var MethodDefinitionObfuscator_1 = __webpack_require__(50); +var CatchClauseObfuscator_1 = __webpack_require__(46); +var ConsoleOutputNodesGroup_1 = __webpack_require__(41); +var DebugProtectionNodesGroup_1 = __webpack_require__(42); +var DomainLockNodesGroup_1 = __webpack_require__(43); +var FunctionDeclarationObfuscator_1 = __webpack_require__(47); +var FunctionObfuscator_1 = __webpack_require__(48); +var LiteralObfuscator_1 = __webpack_require__(49); +var MemberExpressionObfuscator_1 = __webpack_require__(50); +var MethodDefinitionObfuscator_1 = __webpack_require__(51); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var ObjectExpressionObfuscator_1 = __webpack_require__(51); -var SelfDefendingNodesGroup_1 = __webpack_require__(43); -var UnicodeArrayNodesGroup_1 = __webpack_require__(44); -var VariableDeclarationObfuscator_1 = __webpack_require__(52); -var StackTraceAnalyzer_1 = __webpack_require__(57); +var ObjectExpressionObfuscator_1 = __webpack_require__(52); +var SelfDefendingNodesGroup_1 = __webpack_require__(44); +var UnicodeArrayNodesGroup_1 = __webpack_require__(45); +var VariableDeclarationObfuscator_1 = __webpack_require__(53); +var StackTraceAnalyzer_1 = __webpack_require__(58); var Obfuscator = function () { function Obfuscator(options) { @@ -1470,8 +1476,8 @@ 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__(78); -var mkdirp = __webpack_require__(79); +var fs = __webpack_require__(80); +var mkdirp = __webpack_require__(81); var path = __webpack_require__(23); var Utils_1 = __webpack_require__(0); @@ -1562,9 +1568,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 commander = __webpack_require__(77); +var commander = __webpack_require__(79); var path = __webpack_require__(23); var SourceMapMode_1 = __webpack_require__(12); +var UnicodeArrayEncoding_1 = __webpack_require__(40); var DefaultPreset_1 = __webpack_require__(21); var CLIUtils_1 = __webpack_require__(29); var JavaScriptObfuscator_1 = __webpack_require__(9); @@ -1613,9 +1620,9 @@ var JavaScriptObfuscatorCLI = function () { value: function configureCommands() { this.commands = new commander.Command().version(JavaScriptObfuscatorCLI.getBuildVersion(), '-v, --version').usage(' [options]').option('-o, --output ', 'Output path for obfuscated code').option('--compact ', 'Disable one line output code compacting', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtection ', 'Disable browser Debug panel (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean).option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean).option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); - }).option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { + }).option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', function (val) { return val.split(','); - }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).parse(this.rawArguments); + }).option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean).option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMap ', 'Enables source map generation', JavaScriptObfuscatorCLI.parseBoolean).option('--sourceMapBaseUrl ', 'Sets base url to the source map import url when `--sourceMapMode=separate`').option('--sourceMapFileName ', 'Sets file name for output source map when `--sourceMapMode=separate`').option('--sourceMapMode [inline, separate]', 'Specify source map output mode', JavaScriptObfuscatorCLI.parseSourceMapMode).option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean).option('--unicodeArrayEncoding [base64, rc4]', 'All literals in Unicode array become encoded in using base64 or rc4 (this option can slightly slow down your code speed', JavaScriptObfuscatorCLI.parseUnicodeArrayEncoding).option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat).parse(this.rawArguments); this.commands.on('--help', function () { console.log(' Examples:\n'); console.log(' %> javascript-obfuscator in.js --compact true --selfDefending false'); @@ -1677,6 +1684,20 @@ var JavaScriptObfuscatorCLI = function () { } return value; } + }, { + key: 'parseUnicodeArrayEncoding', + value: function parseUnicodeArrayEncoding(value) { + switch (value) { + case 'true': + case '1': + case UnicodeArrayEncoding_1.UnicodeArrayEncoding.base64: + return true; + case UnicodeArrayEncoding_1.UnicodeArrayEncoding.rc4: + return UnicodeArrayEncoding_1.UnicodeArrayEncoding.rc4; + default: + throw new ReferenceError('Invalid value of `--unicodeArrayEncoding` option'); + } + } }]); return JavaScriptObfuscatorCLI; @@ -1700,7 +1721,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 AppendState_1 = __webpack_require__(4); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(62); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(63); var AbstractCustomNode_1 = __webpack_require__(6); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -1751,7 +1772,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(63); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(64); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); @@ -1804,7 +1825,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(64); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(65); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); @@ -1857,7 +1878,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(65); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(66); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1923,7 +1944,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DomainLockNodeTemplate_1 = __webpack_require__(66); +var DomainLockNodeTemplate_1 = __webpack_require__(67); var AbstractCustomNode_1 = __webpack_require__(6); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -1986,7 +2007,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(17); -var SelfDefendingTemplate_1 = __webpack_require__(67); +var SelfDefendingTemplate_1 = __webpack_require__(68); var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2040,11 +2061,12 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); +var UnicodeArrayEncoding_1 = __webpack_require__(40); var NoCustomNodesPreset_1 = __webpack_require__(17); -var AtobTemplate_1 = __webpack_require__(61); -var SelfDefendingTemplate_1 = __webpack_require__(68); -var UnicodeArrayAtobDecodeNodeTemplate_1 = __webpack_require__(69); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(70); +var AtobTemplate_1 = __webpack_require__(62); +var SelfDefendingTemplate_1 = __webpack_require__(69); +var UnicodeArrayBase64DecodeNodeTemplate_1 = __webpack_require__(84); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(71); var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2085,23 +2107,32 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { }, { key: 'getDecodeUnicodeArrayTemplate', value: function getDecodeUnicodeArrayTemplate() { - var selfDefendingCode = ''; + var decodeUnicodeArrayTemplate = '', + selfDefendingCode = ''; if (this.options.selfDefending) { selfDefendingCode = SelfDefendingTemplate_1.SelfDefendingTemplate().formatUnicorn({ unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, unicodeArrayName: this.unicodeArrayName }); } - return UnicodeArrayAtobDecodeNodeTemplate_1.UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ - atobPolyfill: AtobTemplate_1.AtobTemplate(), - selfDefendingCode: selfDefendingCode, - unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName - }); + switch (this.options.unicodeArrayEncoding) { + case UnicodeArrayEncoding_1.UnicodeArrayEncoding.base64: + decodeUnicodeArrayTemplate = UnicodeArrayBase64DecodeNodeTemplate_1.UnicodeArrayBase64DecodeNodeTemplate().formatUnicorn({ + atobPolyfill: AtobTemplate_1.AtobTemplate(), + selfDefendingCode: selfDefendingCode, + unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName + }); + break; + case UnicodeArrayEncoding_1.UnicodeArrayEncoding.rc4: + decodeUnicodeArrayTemplate = ''; + break; + } + return decodeUnicodeArrayTemplate; } }, { key: 'getNodeStructure', value: function getNodeStructure() { - var decodeNodeTemplate = this.options.encodeUnicodeLiterals ? this.getDecodeUnicodeArrayTemplate() : ''; + var decodeNodeTemplate = this.getDecodeUnicodeArrayTemplate(); return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(UnicodeArrayCallsWrapperTemplate_1.UnicodeArrayCallsWrapperTemplate().formatUnicorn({ decodeNodeTemplate: decodeNodeTemplate, unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName, @@ -2134,7 +2165,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var UnicodeArrayTemplate_1 = __webpack_require__(71); +var UnicodeArrayTemplate_1 = __webpack_require__(72); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); @@ -2221,8 +2252,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(17); -var SelfDefendingTemplate_1 = __webpack_require__(72); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(73); +var SelfDefendingTemplate_1 = __webpack_require__(73); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(74); var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2287,6 +2318,18 @@ exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, /* 40 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +exports.UnicodeArrayEncoding = { + base64: 'base64', + rc4: 'rc4' +}; + +/***/ }, +/* 41 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2322,7 +2365,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; /***/ }, -/* 41 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2366,7 +2409,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; /***/ }, -/* 42 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2402,7 +2445,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { exports.DomainLockNodesGroup = DomainLockNodesGroup; /***/ }, -/* 43 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2438,7 +2481,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; /***/ }, -/* 44 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2494,7 +2537,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; /***/ }, -/* 45 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2565,7 +2608,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 46 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2640,7 +2683,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 47 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2721,7 +2764,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 48 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2739,7 +2782,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var BooleanLiteralReplacer_1 = __webpack_require__(53); +var BooleanLiteralReplacer_1 = __webpack_require__(54); var Nodes_1 = __webpack_require__(2); var NumberLiteralReplacer_1 = __webpack_require__(20); var StringLiteralReplacer_1 = __webpack_require__(16); @@ -2786,7 +2829,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 49 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2871,7 +2914,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 50 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2932,7 +2975,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 51 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3018,7 +3061,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 52 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3095,7 +3138,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 53 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3134,7 +3177,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 54 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3155,11 +3198,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__(76); -var TSourceMapMode_1 = __webpack_require__(74); +var class_validator_1 = __webpack_require__(78); +var TSourceMapMode_1 = __webpack_require__(75); +var TUnicodeArrayEncoding_1 = __webpack_require__(76); var DefaultPreset_1 = __webpack_require__(21); -var OptionsNormalizer_1 = __webpack_require__(55); -var ValidationErrorsFormatter_1 = __webpack_require__(56); +var OptionsNormalizer_1 = __webpack_require__(56); +var ValidationErrorsFormatter_1 = __webpack_require__(57); var Options = function Options(obfuscatorOptions) { _classCallCheck(this, Options); @@ -3184,7 +3228,6 @@ __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], __decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true }), __metadata('design:type', Array)], Options.prototype, "domainLock", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "encodeUnicodeLiterals", void 0); __decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ each: true }), __metadata('design:type', Array)], Options.prototype, "reservedNames", void 0); @@ -3200,12 +3243,13 @@ __decorate([class_validator_1.IsString(), class_validator_1.ValidateIf(function __decorate([class_validator_1.IsString(), __metadata('design:type', String)], Options.prototype, "sourceMapFileName", void 0); __decorate([class_validator_1.IsIn(['inline', 'separate']), __metadata('design:type', typeof (_a = typeof TSourceMapMode_1.TSourceMapMode !== 'undefined' && TSourceMapMode_1.TSourceMapMode) === 'function' && _a || Object)], Options.prototype, "sourceMapMode", void 0); __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "unicodeArray", void 0); +__decorate([class_validator_1.IsIn([true, false, 'base64', 'rc4']), __metadata('design:type', typeof (_b = typeof TUnicodeArrayEncoding_1.TUnicodeArrayEncoding !== 'undefined' && TUnicodeArrayEncoding_1.TUnicodeArrayEncoding) === 'function' && _b || Object)], Options.prototype, "unicodeArrayEncoding", void 0); __decorate([class_validator_1.IsNumber(), class_validator_1.Min(0), class_validator_1.Max(1), __metadata('design:type', Number)], Options.prototype, "unicodeArrayThreshold", void 0); exports.Options = Options; -var _a; +var _a, _b; /***/ }, -/* 55 */ +/* 56 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3289,14 +3333,6 @@ var OptionsNormalizer = function () { } return options; } - }, { - key: 'encodeUnicodeLiteralsRule', - value: function encodeUnicodeLiteralsRule(options) { - if (options.unicodeArray && options.encodeUnicodeLiterals) { - Object.assign(options, OptionsNormalizer.ENCODE_UNICODE_LITERALS_OPTIONS); - } - return options; - } }, { key: 'selfDefendingRule', value: function selfDefendingRule(options) { @@ -3342,6 +3378,14 @@ var OptionsNormalizer = function () { } return options; } + }, { + key: 'unicodeArrayEncodingRule', + value: function unicodeArrayEncodingRule(options) { + if (options.unicodeArrayEncoding === true) { + Object.assign(options, OptionsNormalizer.UNICODE_ARRAY_ENCODING_OPTIONS); + } + return options; + } }, { key: 'unicodeArrayThresholdRule', value: function unicodeArrayThresholdRule(options) { @@ -3356,25 +3400,23 @@ var OptionsNormalizer = function () { }(); OptionsNormalizer.DISABLED_UNICODE_ARRAY_OPTIONS = { - encodeUnicodeLiterals: false, rotateUnicodeArray: false, unicodeArray: false, - unicodeArrayThreshold: 0, - wrapUnicodeArrayCalls: false -}; -OptionsNormalizer.ENCODE_UNICODE_LITERALS_OPTIONS = { - encodeUnicodeLiterals: true, - wrapUnicodeArrayCalls: true + unicodeArrayEncoding: false, + unicodeArrayThreshold: 0 }; OptionsNormalizer.SELF_DEFENDING_OPTIONS = { compact: true, selfDefending: true }; -OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNormalizer.unicodeArrayRule, OptionsNormalizer.unicodeArrayThresholdRule, OptionsNormalizer.encodeUnicodeLiteralsRule, OptionsNormalizer.sourceMapBaseUrl, OptionsNormalizer.sourceMapFileName, OptionsNormalizer.selfDefendingRule]; +OptionsNormalizer.UNICODE_ARRAY_ENCODING_OPTIONS = { + unicodeArrayEncoding: 'base64' +}; +OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNormalizer.selfDefendingRule, OptionsNormalizer.sourceMapBaseUrl, OptionsNormalizer.sourceMapFileName, OptionsNormalizer.unicodeArrayRule, OptionsNormalizer.unicodeArrayEncodingRule, OptionsNormalizer.unicodeArrayThresholdRule]; exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 56 */ +/* 57 */ /***/ function(module, exports) { "use strict"; @@ -3441,7 +3483,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 57 */ +/* 58 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3453,9 +3495,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(5); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(58); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(59); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(60); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(59); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(60); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(61); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); @@ -3532,7 +3574,7 @@ var StackTraceAnalyzer = function () { exports.StackTraceAnalyzer = StackTraceAnalyzer; /***/ }, -/* 58 */ +/* 59 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3591,7 +3633,7 @@ var FunctionDeclarationCalleeDataExtractor = function () { exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; /***/ }, -/* 59 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3653,7 +3695,7 @@ var FunctionExpressionCalleeDataExtractor = function () { exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; /***/ }, -/* 60 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3784,7 +3826,7 @@ var ObjectExpressionCalleeDataExtractor = function () { exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; /***/ }, -/* 61 */ +/* 62 */ /***/ function(module, exports) { "use strict"; @@ -3796,7 +3838,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 62 */ +/* 63 */ /***/ function(module, exports) { "use strict"; @@ -3808,7 +3850,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 63 */ +/* 64 */ /***/ function(module, exports) { "use strict"; @@ -3820,7 +3862,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 64 */ +/* 65 */ /***/ function(module, exports) { "use strict"; @@ -3832,7 +3874,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 65 */ +/* 66 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3845,7 +3887,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 66 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3858,7 +3900,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 67 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3871,7 +3913,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 68 */ +/* 69 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3884,19 +3926,8 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 69 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -function UnicodeArrayAtobDecodeNodeTemplate() { - return " \n if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) {\n {atobPolyfill}\n \n {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true;\n }\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n if (!decodedValues[index]) {\n {selfDefendingCode}\n \n value = decodeURI(atob(value));\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues; \n "; -} -exports.UnicodeArrayAtobDecodeNodeTemplate = UnicodeArrayAtobDecodeNodeTemplate; - -/***/ }, -/* 70 */ +/* 70 */, +/* 71 */ /***/ function(module, exports) { "use strict"; @@ -3908,7 +3939,7 @@ function UnicodeArrayCallsWrapperTemplate() { exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 71 */ +/* 72 */ /***/ function(module, exports) { "use strict"; @@ -3920,7 +3951,7 @@ function UnicodeArrayTemplate() { exports.UnicodeArrayTemplate = UnicodeArrayTemplate; /***/ }, -/* 72 */ +/* 73 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3933,7 +3964,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 73 */ +/* 74 */ /***/ function(module, exports) { "use strict"; @@ -3944,46 +3975,53 @@ function UnicodeArrayRotateFunctionTemplate() { } exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; -/***/ }, -/* 74 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - /***/ }, /* 75 */ /***/ function(module, exports) { -module.exports = require("chance"); +"use strict"; +"use strict"; /***/ }, /* 76 */ /***/ function(module, exports) { -module.exports = require("class-validator"); +"use strict"; +"use strict"; /***/ }, /* 77 */ /***/ function(module, exports) { -module.exports = require("commander"); +module.exports = require("chance"); /***/ }, /* 78 */ /***/ function(module, exports) { -module.exports = require("fs"); +module.exports = require("class-validator"); /***/ }, /* 79 */ /***/ function(module, exports) { +module.exports = require("commander"); + +/***/ }, +/* 80 */ +/***/ function(module, exports) { + +module.exports = require("fs"); + +/***/ }, +/* 81 */ +/***/ function(module, exports) { + module.exports = require("mkdirp"); /***/ }, -/* 80 */, -/* 81 */ +/* 82 */, +/* 83 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3995,6 +4033,18 @@ if (!global._babelPolyfill) { } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; +/***/ }, +/* 84 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function UnicodeArrayBase64DecodeNodeTemplate() { + return " \n if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) {\n {atobPolyfill}\n \n {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true;\n }\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n if (!decodedValues[index]) {\n {selfDefendingCode}\n \n value = decodeURI(atob(value));\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues; \n "; +} +exports.UnicodeArrayBase64DecodeNodeTemplate = UnicodeArrayBase64DecodeNodeTemplate; + /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/package.json b/package.json index f95a2455..4f63544e 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,6 @@ "coveralls": "2.11.14", "istanbul": "1.1.0-alpha.1", "mocha": "3.1.2", - "optimize-js-plugin": "0.0.4", "sinon": "2.0.0-pre.3", "ts-node": "1.6.0", "tslint": "3.15.1", diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index cd4ef4ac..a085f9db 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -1,10 +1,13 @@ import * as commander from 'commander'; import * as path from 'path'; +import { TUnicodeArrayEncoding } from '../types/TUnicodeArrayEncoding'; + import { IObfuscationResult } from '../interfaces/IObfuscationResult'; import { IObfuscatorOptions } from '../interfaces/IObfuscatorOptions'; import { SourceMapMode } from '../enums/SourceMapMode'; +import { UnicodeArrayEncoding } from '../enums/UnicodeArrayEncoding'; import { DEFAULT_PRESET } from '../preset-options/DefaultPreset'; @@ -79,6 +82,25 @@ export class JavaScriptObfuscatorCLI { return value; } + /** + * @param value + * @returns {TUnicodeArrayEncoding} + */ + private static parseUnicodeArrayEncoding (value: string): TUnicodeArrayEncoding { + switch (value) { + case 'true': + case '1': + case UnicodeArrayEncoding.base64: + return true; + + case UnicodeArrayEncoding.rc4: + return UnicodeArrayEncoding.rc4; + + default: + throw new ReferenceError('Invalid value of `--unicodeArrayEncoding` option'); + } + } + public run (): void { this.configureCommands(); @@ -127,7 +149,6 @@ export class JavaScriptObfuscatorCLI { .option('--debugProtectionInterval ', 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', JavaScriptObfuscatorCLI.parseBoolean) .option('--disableConsoleOutput ', 'Allow console.log, console.info, console.error and console.warn messages output into browser console', JavaScriptObfuscatorCLI.parseBoolean) .option('--domainLock ', 'Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)', (val: string) => val.split(',')) - .option('--encodeUnicodeLiterals ', 'All literals in Unicode array become encoded in Base64 (this option can slightly slow down your code speed)', JavaScriptObfuscatorCLI.parseBoolean) .option('--reservedNames ', 'Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)', (val: string) => val.split(',')) .option('--rotateUnicodeArray ', 'Disable rotation of unicode array values during obfuscation', JavaScriptObfuscatorCLI.parseBoolean) .option('--selfDefending ', 'Disables self-defending for obfuscated code', JavaScriptObfuscatorCLI.parseBoolean) @@ -140,6 +161,7 @@ export class JavaScriptObfuscatorCLI { JavaScriptObfuscatorCLI.parseSourceMapMode ) .option('--unicodeArray ', 'Disables gathering of all literal strings into an array and replacing every literal string with an array call', JavaScriptObfuscatorCLI.parseBoolean) + .option('--unicodeArrayEncoding [base64, rc4]', 'All literals in Unicode array become encoded in using base64 or rc4 (this option can slightly slow down your code speed', JavaScriptObfuscatorCLI.parseUnicodeArrayEncoding) .option('--unicodeArrayThreshold ', 'The probability that the literal string will be inserted into unicodeArray (Default: 0.8, Min: 0, Max: 1)', parseFloat) .parse(this.rawArguments); diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts index d5b7afb6..41ae5526 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts @@ -7,12 +7,13 @@ import { IOptions } from '../../interfaces/IOptions'; import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; import { AppendState } from '../../enums/AppendState'; +import { UnicodeArrayEncoding } from '../../enums/UnicodeArrayEncoding'; import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; import { AtobTemplate } from '../../templates/custom-nodes/AtobTemplate'; import { SelfDefendingTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate'; -import { UnicodeArrayAtobDecodeNodeTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate'; +import { UnicodeArrayBase64DecodeNodeTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayBase64DecodeNodeTemplate'; import { UnicodeArrayCallsWrapperTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate'; import { AbstractCustomNode } from '../AbstractCustomNode'; @@ -89,7 +90,8 @@ export class UnicodeArrayCallsWrapper extends AbstractCustomNode { * @returns {string} */ protected getDecodeUnicodeArrayTemplate (): string { - let selfDefendingCode: string = ''; + let decodeUnicodeArrayTemplate: string = '', + selfDefendingCode: string = ''; if (this.options.selfDefending) { selfDefendingCode = SelfDefendingTemplate().formatUnicorn({ @@ -98,20 +100,30 @@ export class UnicodeArrayCallsWrapper extends AbstractCustomNode { }); } - return UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ - atobPolyfill: AtobTemplate(), - selfDefendingCode, - unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName - }) + switch (this.options.unicodeArrayEncoding) { + case UnicodeArrayEncoding.base64: + decodeUnicodeArrayTemplate = UnicodeArrayBase64DecodeNodeTemplate().formatUnicorn({ + atobPolyfill: AtobTemplate(), + selfDefendingCode, + unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName + }); + + break; + + case UnicodeArrayEncoding.rc4: + decodeUnicodeArrayTemplate = ''; + + break; + } + + return decodeUnicodeArrayTemplate; } /** * @returns {ESTree.Node} */ protected getNodeStructure (): ESTree.Node { - const decodeNodeTemplate: string = this.options.encodeUnicodeLiterals ? - this.getDecodeUnicodeArrayTemplate() : - ''; + const decodeNodeTemplate: string = this.getDecodeUnicodeArrayTemplate(); return NodeUtils.convertCodeToStructure( JavaScriptObfuscator.obfuscate( diff --git a/src/enums/UnicodeArrayEncoding.ts b/src/enums/UnicodeArrayEncoding.ts new file mode 100644 index 00000000..6b59c7f1 --- /dev/null +++ b/src/enums/UnicodeArrayEncoding.ts @@ -0,0 +1,4 @@ +export const UnicodeArrayEncoding: any = { + base64: 'base64', + rc4: 'rc4' +}; diff --git a/src/interfaces/IObfuscatorOptions.d.ts b/src/interfaces/IObfuscatorOptions.d.ts index efe3c53a..e0f5d0ab 100644 --- a/src/interfaces/IObfuscatorOptions.d.ts +++ b/src/interfaces/IObfuscatorOptions.d.ts @@ -1,4 +1,5 @@ import { TSourceMapMode } from '../types/TSourceMapMode'; +import { TUnicodeArrayEncoding } from '../types/TUnicodeArrayEncoding'; export interface IObfuscatorOptions { compact?: boolean; @@ -6,7 +7,6 @@ export interface IObfuscatorOptions { debugProtectionInterval?: boolean; disableConsoleOutput?: boolean; domainLock?: string[]; - encodeUnicodeLiterals?: boolean; reservedNames?: string[]; rotateUnicodeArray?: boolean; selfDefending?: boolean; @@ -15,6 +15,7 @@ export interface IObfuscatorOptions { sourceMapFileName?: string; sourceMapMode?: TSourceMapMode; unicodeArray?: boolean; + unicodeArrayEncoding?: TUnicodeArrayEncoding; unicodeArrayThreshold?: number; [key: string]: any; } diff --git a/src/interfaces/IOptions.d.ts b/src/interfaces/IOptions.d.ts index 1113310e..be0857c1 100644 --- a/src/interfaces/IOptions.d.ts +++ b/src/interfaces/IOptions.d.ts @@ -1,4 +1,5 @@ import { TSourceMapMode } from '../types/TSourceMapMode'; +import { TUnicodeArrayEncoding } from '../types/TUnicodeArrayEncoding'; export interface IOptions { readonly compact: boolean; @@ -6,7 +7,6 @@ export interface IOptions { readonly debugProtectionInterval: boolean; readonly disableConsoleOutput: boolean; readonly domainLock: string[]; - readonly encodeUnicodeLiterals: boolean; readonly reservedNames: string[]; readonly rotateUnicodeArray: boolean; readonly selfDefending: boolean; @@ -15,5 +15,6 @@ export interface IOptions { readonly sourceMapFileName: string; readonly sourceMapMode: TSourceMapMode; readonly unicodeArray: boolean; + readonly unicodeArrayEncoding: TUnicodeArrayEncoding; readonly unicodeArrayThreshold: number; } diff --git a/src/node-obfuscators/replacers/StringLiteralReplacer.ts b/src/node-obfuscators/replacers/StringLiteralReplacer.ts index 0564042e..9f62d735 100644 --- a/src/node-obfuscators/replacers/StringLiteralReplacer.ts +++ b/src/node-obfuscators/replacers/StringLiteralReplacer.ts @@ -1,6 +1,8 @@ import { TUnicodeArrayCallsWrapper } from '../../types/custom-nodes/TUnicodeArrayCallsWrapper'; import { TUnicodeArrayNode } from '../../types/custom-nodes/TUnicodeArrayNode'; +import { UnicodeArrayEncoding } from '../../enums/UnicodeArrayEncoding'; + import { AbstractReplacer } from './AbstractReplacer'; import { NumberLiteralReplacer } from './NumberLiteralReplacer'; import { UnicodeArray } from '../../UnicodeArray'; @@ -14,8 +16,18 @@ export class StringLiteralReplacer extends AbstractReplacer { public replace (nodeValue: string): string { const replaceWithUnicodeArrayFlag: boolean = Math.random() <= this.options.unicodeArrayThreshold; - if (this.options.encodeUnicodeLiterals && replaceWithUnicodeArrayFlag) { - nodeValue = Utils.btoa(nodeValue); + if (replaceWithUnicodeArrayFlag) { + switch (this.options.unicodeArrayEncoding) { + case UnicodeArrayEncoding.base64: + nodeValue = Utils.btoa(nodeValue); + + break; + + case UnicodeArrayEncoding.rc4: + nodeValue = Utils.btoa(nodeValue); + + break; + } } nodeValue = Utils.stringToUnicode(nodeValue); diff --git a/src/options/Options.ts b/src/options/Options.ts index 94af7e64..d877a930 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -18,6 +18,7 @@ import { IObfuscatorOptions } from '../interfaces/IObfuscatorOptions'; import { IOptions } from '../interfaces/IOptions'; import { TSourceMapMode } from '../types/TSourceMapMode'; +import { TUnicodeArrayEncoding } from '../types/TUnicodeArrayEncoding'; import { DEFAULT_PRESET } from '../preset-options/DefaultPreset'; @@ -68,12 +69,6 @@ export class Options implements IOptions { }) public readonly domainLock: string[]; - /** - * @type {boolean} - */ - @IsBoolean() - public readonly encodeUnicodeLiterals: boolean; - /** * @type {string[]} */ @@ -131,6 +126,12 @@ export class Options implements IOptions { @IsBoolean() public readonly unicodeArray: boolean; + /** + * @type {TUnicodeArrayEncoding} + */ + @IsIn([true, false, 'base64', 'rc4']) + public readonly unicodeArrayEncoding: TUnicodeArrayEncoding; + /** * @type {number} */ diff --git a/src/options/OptionsNormalizer.ts b/src/options/OptionsNormalizer.ts index b497cee7..bf0abcb5 100644 --- a/src/options/OptionsNormalizer.ts +++ b/src/options/OptionsNormalizer.ts @@ -10,19 +10,10 @@ export class OptionsNormalizer { * @type {IObfuscatorOptions} */ private static DISABLED_UNICODE_ARRAY_OPTIONS: IObfuscatorOptions = { - encodeUnicodeLiterals: false, rotateUnicodeArray: false, unicodeArray: false, - unicodeArrayThreshold: 0, - wrapUnicodeArrayCalls: false - }; - - /** - * @type {IObfuscatorOptions} - */ - private static ENCODE_UNICODE_LITERALS_OPTIONS: IObfuscatorOptions = { - encodeUnicodeLiterals: true, - wrapUnicodeArrayCalls: true + unicodeArrayEncoding: false, + unicodeArrayThreshold: 0 }; /** @@ -33,17 +24,24 @@ export class OptionsNormalizer { selfDefending: true }; + /** + * @type {IObfuscatorOptions} + */ + private static UNICODE_ARRAY_ENCODING_OPTIONS: IObfuscatorOptions = { + unicodeArrayEncoding: 'base64' + }; + /** * @type {TOptionsNormalizerRule[]} */ private static normalizerRules: TOptionsNormalizerRule[] = [ OptionsNormalizer.domainLockRule, - OptionsNormalizer.unicodeArrayRule, - OptionsNormalizer.unicodeArrayThresholdRule, - OptionsNormalizer.encodeUnicodeLiteralsRule, + OptionsNormalizer.selfDefendingRule, OptionsNormalizer.sourceMapBaseUrl, OptionsNormalizer.sourceMapFileName, - OptionsNormalizer.selfDefendingRule + OptionsNormalizer.unicodeArrayRule, + OptionsNormalizer.unicodeArrayEncodingRule, + OptionsNormalizer.unicodeArrayThresholdRule, ]; /** @@ -80,18 +78,6 @@ export class OptionsNormalizer { return options; } - /** - * @param options - * @returns {IOptions} - */ - private static encodeUnicodeLiteralsRule (options: IOptions): IOptions { - if (options.unicodeArray && options.encodeUnicodeLiterals) { - Object.assign(options, OptionsNormalizer.ENCODE_UNICODE_LITERALS_OPTIONS); - } - - return options; - } - /** * @param options * @returns {IOptions} @@ -160,6 +146,18 @@ export class OptionsNormalizer { return options; } + /** + * @param options + * @returns {IOptions} + */ + private static unicodeArrayEncodingRule (options: IOptions): IOptions { + if (options.unicodeArrayEncoding === true) { + Object.assign(options, OptionsNormalizer.UNICODE_ARRAY_ENCODING_OPTIONS); + } + + return options; + } + /** * @param options * @returns {IOptions} diff --git a/src/preset-options/DefaultPreset.ts b/src/preset-options/DefaultPreset.ts index 6cc94e57..993e852a 100644 --- a/src/preset-options/DefaultPreset.ts +++ b/src/preset-options/DefaultPreset.ts @@ -8,7 +8,6 @@ export const DEFAULT_PRESET: IObfuscatorOptions = Object.freeze({ debugProtectionInterval: false, disableConsoleOutput: true, domainLock: [], - encodeUnicodeLiterals: false, reservedNames: [], rotateUnicodeArray: true, selfDefending: true, @@ -17,6 +16,6 @@ export const DEFAULT_PRESET: IObfuscatorOptions = Object.freeze({ sourceMapFileName: '', sourceMapMode: SourceMapMode.Separate, unicodeArray: true, - unicodeArrayThreshold: 0.8, - wrapUnicodeArrayCalls: true + unicodeArrayEncoding: false, + unicodeArrayThreshold: 0.8 }); diff --git a/src/preset-options/NoCustomNodesPreset.ts b/src/preset-options/NoCustomNodesPreset.ts index 82bddd2a..7be16e3e 100644 --- a/src/preset-options/NoCustomNodesPreset.ts +++ b/src/preset-options/NoCustomNodesPreset.ts @@ -8,7 +8,6 @@ export const NO_CUSTOM_NODES_PRESET: IObfuscatorOptions = Object.freeze({ debugProtectionInterval: false, disableConsoleOutput: false, domainLock: [], - encodeUnicodeLiterals: false, reservedNames: [], rotateUnicodeArray: false, selfDefending: false, @@ -17,6 +16,6 @@ export const NO_CUSTOM_NODES_PRESET: IObfuscatorOptions = Object.freeze({ sourceMapFileName: '', sourceMapMode: SourceMapMode.Separate, unicodeArray: false, - unicodeArrayThreshold: 0, - wrapUnicodeArrayCalls: false + unicodeArrayEncoding: false, + unicodeArrayThreshold: 0 }); diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayBase64DecodeNodeTemplate.ts similarity index 91% rename from src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts rename to src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayBase64DecodeNodeTemplate.ts index 2f2908f7..3b05ac97 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayBase64DecodeNodeTemplate.ts @@ -1,7 +1,7 @@ /** * @returns {string} */ -export function UnicodeArrayAtobDecodeNodeTemplate (): string { +export function UnicodeArrayBase64DecodeNodeTemplate (): string { return ` if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) { {atobPolyfill} diff --git a/src/types/TUnicodeArrayEncoding.ts b/src/types/TUnicodeArrayEncoding.ts new file mode 100644 index 00000000..e2406f9d --- /dev/null +++ b/src/types/TUnicodeArrayEncoding.ts @@ -0,0 +1 @@ +export type TUnicodeArrayEncoding = boolean|'base64'|'rc4'; diff --git a/test/dev/test.ts b/test/dev/test.ts index 2d9ef22d..5160d807 100644 --- a/test/dev/test.ts +++ b/test/dev/test.ts @@ -69,7 +69,7 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( `, { disableConsoleOutput: false, - encodeUnicodeLiterals: true + unicodeArrayEncoding: 'base64' } ).getObfuscatedCode(); diff --git a/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts b/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts index 9225fe97..06d336d0 100644 --- a/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts @@ -17,12 +17,12 @@ describe('LiteralObfuscator', () => { assert.match(obfuscationResult.getObfuscatedCode(), /^var *test *= *'\\x74\\x65\\x73\\x74';$/); }); - it('should replace literal node value with unicode value with encoding to base64', () => { + it('should replace literal node value with unicode value encoded to base64', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { - encodeUnicodeLiterals: true, unicodeArray: true, + unicodeArrayEncoding: 'base64', unicodeArrayThreshold: 1 }) ); @@ -36,7 +36,6 @@ describe('LiteralObfuscator', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = true;`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { - encodeUnicodeLiterals: true, unicodeArray: true, unicodeArrayThreshold: 1 }) @@ -49,7 +48,6 @@ describe('LiteralObfuscator', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 0;`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { - encodeUnicodeLiterals: true, unicodeArray: true, unicodeArrayThreshold: 1 }) diff --git a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts index cdbc95fb..71756f1f 100644 --- a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts +++ b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts @@ -1,7 +1,7 @@ import 'format-unicorn'; import { AtobTemplate } from '../../../../../src/templates/custom-nodes/AtobTemplate'; -import { UnicodeArrayAtobDecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayAtobDecodeNodeTemplate'; +import { UnicodeArrayBase64DecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayBase64DecodeNodeTemplate'; import { UnicodeArrayCallsWrapperTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate'; import { Utils } from '../../../../../src/Utils'; @@ -35,7 +35,7 @@ function getFunctionFromTemplate ( describe('UnicodeArrayCallsWrapperNodeTemplate (): string', () => { let unicodeArrayName: string = 'unicodeArrayName', unicodeArrayCallsWrapperName: string = 'unicodeArrayCallsWrapperName', - atobDecodeNodeTemplate: string = UnicodeArrayAtobDecodeNodeTemplate().formatUnicorn({ + atobDecodeNodeTemplate: string = UnicodeArrayBase64DecodeNodeTemplate().formatUnicorn({ atobPolyfill: AtobTemplate(), selfDefendingCode: '', unicodeArrayCallsWrapperName diff --git a/test/unit-tests/OptionsNormalizer.spec.ts b/test/unit-tests/OptionsNormalizer.spec.ts index d7da44e1..2fdbf993 100644 --- a/test/unit-tests/OptionsNormalizer.spec.ts +++ b/test/unit-tests/OptionsNormalizer.spec.ts @@ -26,23 +26,21 @@ describe('OptionsNormalizer', () => { rotateUnicodeArray: true, sourceMapBaseUrl: 'http://localhost:9000', unicodeArray: false, - unicodeArrayThreshold: 0.5, - wrapUnicodeArrayCalls: true + unicodeArrayEncoding: 'rc4', + unicodeArrayThreshold: 0.5 }); optionsPreset2 = Object.assign({}, DEFAULT_PRESET, { rotateUnicodeArray: true, sourceMapBaseUrl: 'http://localhost:9000', sourceMapFileName: '//outputSourceMapName', unicodeArray: true, - unicodeArrayThreshold: 0, - wrapUnicodeArrayCalls: true + unicodeArrayThreshold: 0 }); optionsPreset3 = Object.assign({}, DEFAULT_PRESET, { domainLock: ['//localhost:9000', 'https://google.ru/abc?cde=fgh'], sourceMapFileName: '/outputSourceMapName.map', unicodeArray: true, - encodeUnicodeLiterals: true, - wrapUnicodeArrayCalls: false + unicodeArrayEncoding: true }); expectedOptionsPreset1 = Object.assign({}, DEFAULT_PRESET, { @@ -50,23 +48,21 @@ describe('OptionsNormalizer', () => { rotateUnicodeArray: false, sourceMapBaseUrl: '', unicodeArray: false, - unicodeArrayThreshold: 0, - wrapUnicodeArrayCalls: false + unicodeArrayEncoding: false, + unicodeArrayThreshold: 0 }); expectedOptionsPreset2 = Object.assign({}, DEFAULT_PRESET, { rotateUnicodeArray: false, sourceMapBaseUrl: 'http://localhost:9000/', sourceMapFileName: 'outputSourceMapName.js.map', unicodeArray: false, - unicodeArrayThreshold: 0, - wrapUnicodeArrayCalls: false + unicodeArrayThreshold: 0 }); expectedOptionsPreset3 = Object.assign({}, DEFAULT_PRESET, { domainLock: ['localhost', 'google.ru'], sourceMapFileName: 'outputSourceMapName.js.map', unicodeArray: true, - encodeUnicodeLiterals: true, - wrapUnicodeArrayCalls: true + unicodeArrayEncoding: 'base64' }); options1 = new Options(optionsPreset1); From 494ae3be31c8b98d2c4a3f579713bc82af16ce28 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 16:42:27 +0300 Subject: [PATCH 098/138] rc4 unicode array encoding wip --- dist/index.js | 264 +++++++++++------- src/SourceMapCorrector.ts | 2 +- src/Utils.ts | 69 ++++- src/cli/JavaScriptObfuscatorCLI.ts | 2 +- .../UnicodeArrayCallsWrapper.ts | 9 +- .../replacers/StringLiteralReplacer.ts | 45 +-- src/templates/custom-nodes/Rc4Template.ts | 35 +++ .../UnicodeArrayBase64DecodeNodeTemplate.ts | 8 +- .../UnicodeArrayRC4DecodeNodeTemplate.ts | 41 ++- test/dev/test.ts | 2 +- .../LiteralObfuscator.spec.ts | 29 +- ...icodeArrayCallsWrapperNodeTemplate.spec.ts | 48 +++- 12 files changed, 411 insertions(+), 143 deletions(-) create mode 100644 src/templates/custom-nodes/Rc4Template.ts diff --git a/dist/index.js b/dist/index.js index e9197617..af36736d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -103,7 +103,7 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var chance_1 = __webpack_require__(77); -var JSFuck_1 = __webpack_require__(19); +var JSFuck_1 = __webpack_require__(20); var Utils = function () { function Utils() { @@ -135,9 +135,19 @@ var Utils = function () { }, { key: 'btoa', value: function btoa(string) { - var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - return new Buffer(encode ? encodeURI(string) : string).toString('base64'); + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var output = ''; + string = encodeURIComponent(string).replace(/%([0-9A-F]{2})/g, function (match, p1) { + return String.fromCharCode(parseInt('0x' + p1)); + }); + for (var block, charCode, idx = 0, map = chars; string.charAt(idx | 0) || (map = '=', idx % 1); output += map.charAt(63 & block >> 8 - idx % 1 * 8)) { + charCode = string.charCodeAt(idx += 3 / 4); + if (charCode > 0xFF) { + throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range."); + } + block = block << 8 | charCode; + } + return output; } }, { key: 'decToHex', @@ -207,6 +217,34 @@ var Utils = function () { value: function isInteger(number) { return number % 1 === 0; } + }, { + key: 'rc4', + value: function rc4(string, key) { + var s = [], + j = 0, + x = void 0, + result = ''; + for (var i = 0; i < 256; i++) { + s[i] = i; + } + for (i = 0; i < 256; i++) { + j = (j + s[i] + key.charCodeAt(i % key.length)) % 256; + x = s[i]; + s[i] = s[j]; + s[j] = x; + } + i = 0; + j = 0; + for (var y = 0; y < string.length; y++) { + i = (i + 1) % 256; + j = (j + s[i]) % 256; + x = s[i]; + s[i] = s[j]; + s[j] = x; + result += String.fromCharCode(string.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]); + } + return result; + } }, { key: 'strEnumify', value: function strEnumify(obj) { @@ -257,7 +295,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__(22); +var esprima = __webpack_require__(23); var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(5); var Nodes_1 = __webpack_require__(2); @@ -661,8 +699,8 @@ 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__(30); -var JavaScriptObfuscatorInternal_1 = __webpack_require__(25); +var JavaScriptObfuscatorCLI_1 = __webpack_require__(31); +var JavaScriptObfuscatorInternal_1 = __webpack_require__(26); var JavaScriptObfuscator = function () { function JavaScriptObfuscator() { @@ -881,6 +919,18 @@ exports.CustomNodeAppender = CustomNodeAppender; /***/ }, /* 16 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +exports.UnicodeArrayEncoding = { + base64: 'base64', + rc4: 'rc4' +}; + +/***/ }, +/* 17 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -894,9 +944,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 UnicodeArrayEncoding_1 = __webpack_require__(40); +var UnicodeArrayEncoding_1 = __webpack_require__(16); var AbstractReplacer_1 = __webpack_require__(13); -var NumberLiteralReplacer_1 = __webpack_require__(20); +var NumberLiteralReplacer_1 = __webpack_require__(21); var Utils_1 = __webpack_require__(0); var StringLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -912,21 +962,10 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { key: 'replace', value: function replace(nodeValue) { var replaceWithUnicodeArrayFlag = Math.random() <= this.options.unicodeArrayThreshold; - if (replaceWithUnicodeArrayFlag) { - switch (this.options.unicodeArrayEncoding) { - case UnicodeArrayEncoding_1.UnicodeArrayEncoding.base64: - nodeValue = Utils_1.Utils.btoa(nodeValue); - break; - case UnicodeArrayEncoding_1.UnicodeArrayEncoding.rc4: - nodeValue = Utils_1.Utils.btoa(nodeValue); - break; - } - } - nodeValue = Utils_1.Utils.stringToUnicode(nodeValue); if (this.options.unicodeArray && replaceWithUnicodeArrayFlag) { return this.replaceStringLiteralWithUnicodeArrayCall(nodeValue); } - return nodeValue; + return Utils_1.Utils.stringToUnicode(nodeValue); } }, { key: 'replaceStringLiteralWithUnicodeArrayCall', @@ -935,6 +974,17 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { if (!unicodeArrayNode) { throw new ReferenceError('`unicodeArrayNode` node is not found in Map with custom nodes.'); } + var rc4Key = ''; + switch (this.options.unicodeArrayEncoding) { + case UnicodeArrayEncoding_1.UnicodeArrayEncoding.base64: + value = Utils_1.Utils.btoa(value); + break; + case UnicodeArrayEncoding_1.UnicodeArrayEncoding.rc4: + rc4Key = Utils_1.Utils.getRandomGenerator().pickone(StringLiteralReplacer.rc4Keys); + value = Utils_1.Utils.btoa(Utils_1.Utils.rc4(value, rc4Key)); + break; + } + value = Utils_1.Utils.stringToUnicode(value); var unicodeArray = unicodeArrayNode.getNodeData(), indexOfExistingValue = unicodeArray.getIndexOf(value), indexOfValue = void 0, @@ -950,6 +1000,9 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { if (!unicodeArrayCallsWrapper) { throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); } + if (this.options.unicodeArrayEncoding === UnicodeArrayEncoding_1.UnicodeArrayEncoding.rc4) { + return unicodeArrayCallsWrapper.getNodeIdentifier() + '(\'' + hexadecimalIndex + '\', ' + Utils_1.Utils.stringToUnicode(rc4Key) + ')'; + } return unicodeArrayCallsWrapper.getNodeIdentifier() + '(\'' + hexadecimalIndex + '\')'; } }]); @@ -957,10 +1010,13 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { return StringLiteralReplacer; }(AbstractReplacer_1.AbstractReplacer); +StringLiteralReplacer.rc4Keys = Utils_1.Utils.getRandomGenerator().n(function () { + return Utils_1.Utils.getRandomGenerator().string({ length: 4 }); +}, 50); exports.StringLiteralReplacer = StringLiteralReplacer; /***/ }, -/* 17 */ +/* 18 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -986,7 +1042,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ }); /***/ }, -/* 18 */ +/* 19 */ /***/ function(module, exports) { "use strict"; @@ -1027,7 +1083,7 @@ var ObfuscationResult = function () { exports.ObfuscationResult = ObfuscationResult; /***/ }, -/* 19 */ +/* 20 */ /***/ function(module, exports) { "use strict"; @@ -1092,7 +1148,7 @@ exports.JSFuck = { }; /***/ }, -/* 20 */ +/* 21 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1135,7 +1191,7 @@ var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { exports.NumberLiteralReplacer = NumberLiteralReplacer; /***/ }, -/* 21 */ +/* 22 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1161,25 +1217,25 @@ exports.DEFAULT_PRESET = Object.freeze({ }); /***/ }, -/* 22 */ +/* 23 */ /***/ function(module, exports) { module.exports = require("esprima"); /***/ }, -/* 23 */ +/* 24 */ /***/ function(module, exports) { module.exports = require("path"); /***/ }, -/* 24 */ +/* 25 */ /***/ function(module, exports) { module.exports = require("babel-polyfill"); /***/ }, -/* 25 */ +/* 26 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1189,12 +1245,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 esprima = __webpack_require__(22); +var esprima = __webpack_require__(23); var escodegen = __webpack_require__(11); -var ObfuscationResult_1 = __webpack_require__(18); -var Obfuscator_1 = __webpack_require__(26); +var ObfuscationResult_1 = __webpack_require__(19); +var Obfuscator_1 = __webpack_require__(27); var Options_1 = __webpack_require__(55); -var SourceMapCorrector_1 = __webpack_require__(27); +var SourceMapCorrector_1 = __webpack_require__(28); var JavaScriptObfuscatorInternal = function () { function JavaScriptObfuscatorInternal(sourceCode) { @@ -1247,7 +1303,7 @@ JavaScriptObfuscatorInternal.escodegenParams = { exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; /***/ }, -/* 26 */ +/* 27 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1351,7 +1407,7 @@ var Obfuscator = function () { exports.Obfuscator = Obfuscator; /***/ }, -/* 27 */ +/* 28 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1362,7 +1418,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 SourceMapMode_1 = __webpack_require__(12); -var ObfuscationResult_1 = __webpack_require__(18); +var ObfuscationResult_1 = __webpack_require__(19); var Utils_1 = __webpack_require__(0); var SourceMapCorrector = function () { @@ -1389,7 +1445,7 @@ var SourceMapCorrector = function () { var sourceMappingUrl = '//# sourceMappingURL='; switch (this.sourceMapMode) { case SourceMapMode_1.SourceMapMode.Inline: - sourceMappingUrl += 'data:application/json;base64,' + Utils_1.Utils.btoa(this.sourceMap, false); + sourceMappingUrl += 'data:application/json;base64,' + Utils_1.Utils.btoa(this.sourceMap); break; case SourceMapMode_1.SourceMapMode.Separate: default: @@ -1409,7 +1465,7 @@ var SourceMapCorrector = function () { exports.SourceMapCorrector = SourceMapCorrector; /***/ }, -/* 28 */ +/* 29 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1466,7 +1522,7 @@ var UnicodeArray = function () { exports.UnicodeArray = UnicodeArray; /***/ }, -/* 29 */ +/* 30 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1478,7 +1534,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var fs = __webpack_require__(80); var mkdirp = __webpack_require__(81); -var path = __webpack_require__(23); +var path = __webpack_require__(24); var Utils_1 = __webpack_require__(0); var CLIUtils = function () { @@ -1558,7 +1614,7 @@ CLIUtils.encoding = 'utf8'; exports.CLIUtils = CLIUtils; /***/ }, -/* 30 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1569,11 +1625,11 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var commander = __webpack_require__(79); -var path = __webpack_require__(23); +var path = __webpack_require__(24); var SourceMapMode_1 = __webpack_require__(12); -var UnicodeArrayEncoding_1 = __webpack_require__(40); -var DefaultPreset_1 = __webpack_require__(21); -var CLIUtils_1 = __webpack_require__(29); +var UnicodeArrayEncoding_1 = __webpack_require__(16); +var DefaultPreset_1 = __webpack_require__(22); +var CLIUtils_1 = __webpack_require__(30); var JavaScriptObfuscator_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(0); @@ -1695,7 +1751,7 @@ var JavaScriptObfuscatorCLI = function () { case UnicodeArrayEncoding_1.UnicodeArrayEncoding.rc4: return UnicodeArrayEncoding_1.UnicodeArrayEncoding.rc4; default: - throw new ReferenceError('Invalid value of `--unicodeArrayEncoding` option'); + return false; } } }]); @@ -1706,7 +1762,7 @@ var JavaScriptObfuscatorCLI = function () { exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; /***/ }, -/* 31 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1756,7 +1812,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; /***/ }, -/* 32 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1809,7 +1865,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; /***/ }, -/* 33 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1862,7 +1918,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; /***/ }, -/* 34 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1926,7 +1982,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; /***/ }, -/* 35 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1991,7 +2047,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { exports.DomainLockNode = DomainLockNode; /***/ }, -/* 36 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2006,7 +2062,7 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var AppendState_1 = __webpack_require__(4); -var NoCustomNodesPreset_1 = __webpack_require__(17); +var NoCustomNodesPreset_1 = __webpack_require__(18); var SelfDefendingTemplate_1 = __webpack_require__(68); var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); @@ -2043,7 +2099,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 37 */ +/* 38 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2061,12 +2117,14 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var UnicodeArrayEncoding_1 = __webpack_require__(40); -var NoCustomNodesPreset_1 = __webpack_require__(17); +var UnicodeArrayEncoding_1 = __webpack_require__(16); +var NoCustomNodesPreset_1 = __webpack_require__(18); var AtobTemplate_1 = __webpack_require__(62); +var Rc4Template_1 = __webpack_require__(85); var SelfDefendingTemplate_1 = __webpack_require__(69); -var UnicodeArrayBase64DecodeNodeTemplate_1 = __webpack_require__(84); +var UnicodeArrayBase64DecodeNodeTemplate_1 = __webpack_require__(70); var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(71); +var UnicodeArrayRC4DecodeNodeTemplate_1 = __webpack_require__(84); var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2124,7 +2182,12 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { }); break; case UnicodeArrayEncoding_1.UnicodeArrayEncoding.rc4: - decodeUnicodeArrayTemplate = ''; + decodeUnicodeArrayTemplate = UnicodeArrayRC4DecodeNodeTemplate_1.UnicodeArrayRc4DecodeNodeTemplate().formatUnicorn({ + atobPolyfill: AtobTemplate_1.AtobTemplate(), + rc4Polyfill: Rc4Template_1.Rc4Template(), + selfDefendingCode: selfDefendingCode, + unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName + }); break; } return decodeUnicodeArrayTemplate; @@ -2147,7 +2210,7 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; /***/ }, -/* 38 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2233,7 +2296,7 @@ UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH = 4; exports.UnicodeArrayNode = UnicodeArrayNode; /***/ }, -/* 39 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2251,7 +2314,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var NoCustomNodesPreset_1 = __webpack_require__(17); +var NoCustomNodesPreset_1 = __webpack_require__(18); var SelfDefendingTemplate_1 = __webpack_require__(73); var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(74); var AbstractCustomNode_1 = __webpack_require__(6); @@ -2316,18 +2379,6 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; -/***/ }, -/* 40 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -exports.UnicodeArrayEncoding = { - base64: 'base64', - rc4: 'rc4' -}; - /***/ }, /* 41 */ /***/ function(module, exports, __webpack_require__) { @@ -2342,7 +2393,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 AbstractNodesGroup_1 = __webpack_require__(10); -var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(31); +var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(32); var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { _inherits(ConsoleOutputNodesGroup, _AbstractNodesGroup_); @@ -2377,9 +2428,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__(32); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(33); -var DebugProtectionFunctionNode_1 = __webpack_require__(34); +var DebugProtectionFunctionCallNode_1 = __webpack_require__(33); +var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(34); +var DebugProtectionFunctionNode_1 = __webpack_require__(35); var AbstractNodesGroup_1 = __webpack_require__(10); var Utils_1 = __webpack_require__(0); @@ -2422,7 +2473,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 AbstractNodesGroup_1 = __webpack_require__(10); -var DomainLockNode_1 = __webpack_require__(35); +var DomainLockNode_1 = __webpack_require__(36); var DomainLockNodesGroup = function (_AbstractNodesGroup_) { _inherits(DomainLockNodesGroup, _AbstractNodesGroup_); @@ -2458,7 +2509,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 AbstractNodesGroup_1 = __webpack_require__(10); -var SelfDefendingUnicodeNode_1 = __webpack_require__(36); +var SelfDefendingUnicodeNode_1 = __webpack_require__(37); var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { _inherits(SelfDefendingNodesGroup, _AbstractNodesGroup_); @@ -2494,10 +2545,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 AbstractNodesGroup_1 = __webpack_require__(10); -var UnicodeArray_1 = __webpack_require__(28); -var UnicodeArrayCallsWrapper_1 = __webpack_require__(37); -var UnicodeArrayNode_1 = __webpack_require__(38); -var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(39); +var UnicodeArray_1 = __webpack_require__(29); +var UnicodeArrayCallsWrapper_1 = __webpack_require__(38); +var UnicodeArrayNode_1 = __webpack_require__(39); +var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(40); var Utils_1 = __webpack_require__(0); var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { @@ -2784,8 +2835,8 @@ var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); var BooleanLiteralReplacer_1 = __webpack_require__(54); var Nodes_1 = __webpack_require__(2); -var NumberLiteralReplacer_1 = __webpack_require__(20); -var StringLiteralReplacer_1 = __webpack_require__(16); +var NumberLiteralReplacer_1 = __webpack_require__(21); +var StringLiteralReplacer_1 = __webpack_require__(17); var LiteralObfuscator = function (_AbstractNodeObfuscat) { _inherits(LiteralObfuscator, _AbstractNodeObfuscat); @@ -2848,7 +2899,7 @@ var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); -var StringLiteralReplacer_1 = __webpack_require__(16); +var StringLiteralReplacer_1 = __webpack_require__(17); var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MemberExpressionObfuscator, _AbstractNodeObfuscat); @@ -2932,7 +2983,7 @@ var estraverse = __webpack_require__(3); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); -var StringLiteralReplacer_1 = __webpack_require__(16); +var StringLiteralReplacer_1 = __webpack_require__(17); var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MethodDefinitionObfuscator, _AbstractNodeObfuscat); @@ -3152,7 +3203,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 JSFuck_1 = __webpack_require__(19); +var JSFuck_1 = __webpack_require__(20); var AbstractReplacer_1 = __webpack_require__(13); var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -3201,7 +3252,7 @@ var __metadata = undefined && undefined.__metadata || function (k, v) { var class_validator_1 = __webpack_require__(78); var TSourceMapMode_1 = __webpack_require__(75); var TUnicodeArrayEncoding_1 = __webpack_require__(76); -var DefaultPreset_1 = __webpack_require__(21); +var DefaultPreset_1 = __webpack_require__(22); var OptionsNormalizer_1 = __webpack_require__(56); var ValidationErrorsFormatter_1 = __webpack_require__(57); @@ -3926,7 +3977,18 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 70 */, +/* 70 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function UnicodeArrayBase64DecodeNodeTemplate() { + return " \n if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) {\n {atobPolyfill}\n \n {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true;\n }\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n if (!decodedValues[index]) {\n var base64DecodeUnicode = function (str) {\n return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n }\n \n {selfDefendingCode}\n \n value = base64DecodeUnicode(value);\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues; \n "; +} +exports.UnicodeArrayBase64DecodeNodeTemplate = UnicodeArrayBase64DecodeNodeTemplate; + +/***/ }, /* 71 */ /***/ function(module, exports) { @@ -4029,7 +4091,7 @@ module.exports = require("mkdirp"); var JavaScriptObfuscator_1 = __webpack_require__(9); if (!global._babelPolyfill) { - __webpack_require__(24); + __webpack_require__(25); } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; @@ -4040,10 +4102,22 @@ module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; "use strict"; "use strict"; -function UnicodeArrayBase64DecodeNodeTemplate() { - return " \n if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) {\n {atobPolyfill}\n \n {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true;\n }\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n if (!decodedValues[index]) {\n {selfDefendingCode}\n \n value = decodeURI(atob(value));\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues; \n "; +function UnicodeArrayRc4DecodeNodeTemplate() { + return "\n if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) {\n {atobPolyfill}\n \n {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true;\n }\n \n {rc4Polyfill}\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n if (!decodedValues[index]) {\n var base64DecodeUnicode = function (str) {\n return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n }\n \n {selfDefendingCode}\n \n value = rc4(base64DecodeUnicode(value), key);\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues; \n "; } -exports.UnicodeArrayBase64DecodeNodeTemplate = UnicodeArrayBase64DecodeNodeTemplate; +exports.UnicodeArrayRc4DecodeNodeTemplate = UnicodeArrayRc4DecodeNodeTemplate; + +/***/ }, +/* 85 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function Rc4Template() { + return "\n function rc4 (str, key) {\n\t var s = [], j = 0, x, res = '';\n\t \n for (var i = 0; i < 256; i++) {\n s[i] = i;\n }\n \n for (i = 0; i < 256; i++) {\n j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n }\n \n i = 0;\n j = 0;\n \n for (var y = 0; y < str.length; y++) {\n i = (i + 1) % 256;\n j = (j + s[i]) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);\n }\n \n return res;\n }\n "; +} +exports.Rc4Template = Rc4Template; /***/ } /******/ ]); diff --git a/src/SourceMapCorrector.ts b/src/SourceMapCorrector.ts index b8e1b4fc..52c937b7 100644 --- a/src/SourceMapCorrector.ts +++ b/src/SourceMapCorrector.ts @@ -68,7 +68,7 @@ export class SourceMapCorrector implements ISourceMapCorrector { switch (this.sourceMapMode) { case SourceMapMode.Inline: - sourceMappingUrl += `data:application/json;base64,${Utils.btoa(this.sourceMap, false)}`; + sourceMappingUrl += `data:application/json;base64,${Utils.btoa(this.sourceMap)}`; break; diff --git a/src/Utils.ts b/src/Utils.ts index 8ec60980..3e739602 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -44,12 +44,31 @@ export class Utils { /** * @param string - * @param encode */ - public static btoa (string: string, encode: boolean = true): string { - return new Buffer( - encode ? encodeURI(string) : string - ).toString('base64'); + public static btoa (string: string): string { + const chars: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + let output: string = ''; + + string = encodeURIComponent(string).replace(/%([0-9A-F]{2})/g, (match, p1) => { + return String.fromCharCode(parseInt('0x' + p1)); + }); + + for ( + let block: number|undefined, charCode: number, idx: number = 0, map: string = chars; + string.charAt(idx | 0) || (map = '=', idx % 1); + output += map.charAt(63 & block >> 8 - idx % 1 * 8) + ) { + charCode = string.charCodeAt(idx += 3/4); + + if (charCode > 0xFF) { + throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range."); + } + + block = block << 8 | charCode; + } + + return output; } /** @@ -154,6 +173,46 @@ export class Utils { return number % 1 === 0; } + /** + * RC4 symmetric cipher encryption/decryption + * https://gist.github.com/farhadi/2185197 + * + * @param key + * @param string + * @returns {string} + */ + public static rc4 (string: string, key: string) { + let s: number[] = [], + j: number = 0, + x: number, + result: string = ''; + + for (var i = 0; i < 256; i++) { + s[i] = i; + } + + for (i = 0; i < 256; i++) { + j = (j + s[i] + key.charCodeAt(i % key.length)) % 256; + x = s[i]; + s[i] = s[j]; + s[j] = x; + } + + i = 0; + j = 0; + + for (let y = 0; y < string.length; y++) { + i = (i + 1) % 256; + j = (j + s[i]) % 256; + x = s[i]; + s[i] = s[j]; + s[j] = x; + result += String.fromCharCode(string.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]); + } + + return result; + } + /** * @param obj * @returns {T} diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index a085f9db..f26efc49 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -97,7 +97,7 @@ export class JavaScriptObfuscatorCLI { return UnicodeArrayEncoding.rc4; default: - throw new ReferenceError('Invalid value of `--unicodeArrayEncoding` option'); + return false; } } diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts index 41ae5526..a805ccd3 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts @@ -12,9 +12,11 @@ import { UnicodeArrayEncoding } from '../../enums/UnicodeArrayEncoding'; import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; import { AtobTemplate } from '../../templates/custom-nodes/AtobTemplate'; +import { Rc4Template } from '../../templates/custom-nodes/Rc4Template'; import { SelfDefendingTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/SelfDefendingTemplate'; import { UnicodeArrayBase64DecodeNodeTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayBase64DecodeNodeTemplate'; import { UnicodeArrayCallsWrapperTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate'; +import { UnicodeArrayRc4DecodeNodeTemplate } from '../../templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayRC4DecodeNodeTemplate'; import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; @@ -111,7 +113,12 @@ export class UnicodeArrayCallsWrapper extends AbstractCustomNode { break; case UnicodeArrayEncoding.rc4: - decodeUnicodeArrayTemplate = ''; + decodeUnicodeArrayTemplate = UnicodeArrayRc4DecodeNodeTemplate().formatUnicorn({ + atobPolyfill: AtobTemplate(), + rc4Polyfill: Rc4Template(), + selfDefendingCode, + unicodeArrayCallsWrapperName: this.unicodeArrayCallsWrapperName + }); break; } diff --git a/src/node-obfuscators/replacers/StringLiteralReplacer.ts b/src/node-obfuscators/replacers/StringLiteralReplacer.ts index 9f62d735..ea87b263 100644 --- a/src/node-obfuscators/replacers/StringLiteralReplacer.ts +++ b/src/node-obfuscators/replacers/StringLiteralReplacer.ts @@ -9,6 +9,12 @@ import { UnicodeArray } from '../../UnicodeArray'; import { Utils } from '../../Utils'; export class StringLiteralReplacer extends AbstractReplacer { + /** + * @type {string[]} + */ + private static rc4Keys: string[] = Utils.getRandomGenerator() + .n(() => Utils.getRandomGenerator().string({length: 4}), 50); + /** * @param nodeValue * @returns {string} @@ -16,27 +22,11 @@ export class StringLiteralReplacer extends AbstractReplacer { public replace (nodeValue: string): string { const replaceWithUnicodeArrayFlag: boolean = Math.random() <= this.options.unicodeArrayThreshold; - if (replaceWithUnicodeArrayFlag) { - switch (this.options.unicodeArrayEncoding) { - case UnicodeArrayEncoding.base64: - nodeValue = Utils.btoa(nodeValue); - - break; - - case UnicodeArrayEncoding.rc4: - nodeValue = Utils.btoa(nodeValue); - - break; - } - } - - nodeValue = Utils.stringToUnicode(nodeValue); - if (this.options.unicodeArray && replaceWithUnicodeArrayFlag) { return this.replaceStringLiteralWithUnicodeArrayCall(nodeValue); } - return nodeValue; + return Utils.stringToUnicode(nodeValue); } /** @@ -50,6 +40,23 @@ export class StringLiteralReplacer extends AbstractReplacer { throw new ReferenceError('`unicodeArrayNode` node is not found in Map with custom nodes.'); } + let rc4Key: string = ''; + + switch (this.options.unicodeArrayEncoding) { + case UnicodeArrayEncoding.base64: + value = Utils.btoa(value); + + break; + + case UnicodeArrayEncoding.rc4: + rc4Key = Utils.getRandomGenerator().pickone(StringLiteralReplacer.rc4Keys); + value = Utils.btoa(Utils.rc4(value, rc4Key)); + + break; + } + + value = Utils.stringToUnicode(value); + let unicodeArray: UnicodeArray = unicodeArrayNode.getNodeData(), indexOfExistingValue: number = unicodeArray.getIndexOf(value), indexOfValue: number, @@ -71,6 +78,10 @@ export class StringLiteralReplacer extends AbstractReplacer { throw new ReferenceError('`unicodeArrayCallsWrapper` node is not found in Map with custom nodes.'); } + if (this.options.unicodeArrayEncoding === UnicodeArrayEncoding.rc4) { + return `${unicodeArrayCallsWrapper.getNodeIdentifier()}('${hexadecimalIndex}', ${Utils.stringToUnicode(rc4Key)})`; + } + return `${unicodeArrayCallsWrapper.getNodeIdentifier()}('${hexadecimalIndex}')`; } } diff --git a/src/templates/custom-nodes/Rc4Template.ts b/src/templates/custom-nodes/Rc4Template.ts new file mode 100644 index 00000000..8fb8c0ba --- /dev/null +++ b/src/templates/custom-nodes/Rc4Template.ts @@ -0,0 +1,35 @@ +/** + * @returns {string} + */ +export function Rc4Template (): string { + return ` + function rc4 (str, key) { + var s = [], j = 0, x, res = ''; + + for (var i = 0; i < 256; i++) { + s[i] = i; + } + + for (i = 0; i < 256; i++) { + j = (j + s[i] + key.charCodeAt(i % key.length)) % 256; + x = s[i]; + s[i] = s[j]; + s[j] = x; + } + + i = 0; + j = 0; + + for (var y = 0; y < str.length; y++) { + i = (i + 1) % 256; + j = (j + s[i]) % 256; + x = s[i]; + s[i] = s[j]; + s[j] = x; + res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]); + } + + return res; + } + `; +} diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayBase64DecodeNodeTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayBase64DecodeNodeTemplate.ts index 3b05ac97..5cf77409 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayBase64DecodeNodeTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayBase64DecodeNodeTemplate.ts @@ -12,9 +12,15 @@ export function UnicodeArrayBase64DecodeNodeTemplate (): string { var decodedValues = {unicodeArrayCallsWrapperName}.data || {}; if (!decodedValues[index]) { + var base64DecodeUnicode = function (str) { + return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) { + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); + }).join('')); + } + {selfDefendingCode} - value = decodeURI(atob(value)); + value = base64DecodeUnicode(value); decodedValues[index] = value; } else { value = decodedValues[index]; diff --git a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayRC4DecodeNodeTemplate.ts b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayRC4DecodeNodeTemplate.ts index cc10a3e3..249fe708 100644 --- a/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayRC4DecodeNodeTemplate.ts +++ b/src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayRC4DecodeNodeTemplate.ts @@ -1,22 +1,33 @@ /** * @returns {string} */ -export function UnicodeArrayDecodeNodeTemplate (): string { +export function UnicodeArrayRc4DecodeNodeTemplate (): string { return ` - (function () { - {atobPolyfill} - - var {forLoopFunctionName} = function () { - var array = []; - - for (var i in {unicodeArrayName}) { - array['push'](decodeURI(atob({unicodeArrayName}[i]))); - } - - {unicodeArrayName} = array; - }; + if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) { + {atobPolyfill} - {code} - })(); + {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true; + } + + {rc4Polyfill} + + var decodedValues = {unicodeArrayCallsWrapperName}.data || {}; + + if (!decodedValues[index]) { + var base64DecodeUnicode = function (str) { + return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) { + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); + }).join('')); + } + + {selfDefendingCode} + + value = rc4(base64DecodeUnicode(value), key); + decodedValues[index] = value; + } else { + value = decodedValues[index]; + } + + {unicodeArrayCallsWrapperName}.data = decodedValues; `; } diff --git a/test/dev/test.ts b/test/dev/test.ts index 5160d807..0dce357e 100644 --- a/test/dev/test.ts +++ b/test/dev/test.ts @@ -69,7 +69,7 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( `, { disableConsoleOutput: false, - unicodeArrayEncoding: 'base64' + unicodeArrayEncoding: true } ).getObfuscatedCode(); diff --git a/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts b/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts index 06d336d0..07831d66 100644 --- a/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts @@ -8,7 +8,7 @@ const assert: Chai.AssertStatic = require('chai').assert; describe('LiteralObfuscator', () => { describe('obfuscation of literal node with string value', () => { - it('should replace literal node value with unicode value without encoding to base64', () => { + it('should replace literal node value with unicode value without encoding', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, Object.assign({}, NO_CUSTOM_NODES_PRESET) @@ -17,7 +17,7 @@ describe('LiteralObfuscator', () => { assert.match(obfuscationResult.getObfuscatedCode(), /^var *test *= *'\\x74\\x65\\x73\\x74';$/); }); - it('should replace literal node value with unicode value encoded to base64', () => { + it('should replace literal node value with unicode value encoded using base64', () => { let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( `var test = 'test';`, Object.assign({}, NO_CUSTOM_NODES_PRESET, { @@ -27,9 +27,32 @@ describe('LiteralObfuscator', () => { }) ); - assert.match(obfuscationResult.getObfuscatedCode(), /^var *_0x([a-z0-9]){4} *= *\['\\x64\\x47\\x56\\x7a\\x64\\x41\\x3d\\x3d'\];/); + assert.match( + obfuscationResult.getObfuscatedCode(), + /^var *_0x([a-z0-9]){4} *= *\['\\x64\\x47\\x56\\x7a\\x64\\x41\\x3d\\x3d'\];/ + ); assert.match(obfuscationResult.getObfuscatedCode(), /var *test *= *_0x([a-z0-9]){4}\('0x0'\);/); }); + + it('should replace literal node value with unicode value encoded using rc4', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + `var test = 'test';`, + Object.assign({}, NO_CUSTOM_NODES_PRESET, { + unicodeArray: true, + unicodeArrayEncoding: 'rc4', + unicodeArrayThreshold: 1 + }) + ); + + assert.match( + obfuscationResult.getObfuscatedCode(), + /^var *_0x([a-z0-9]){4} *= *\['(\\x[a-f0-9]*){8}'\];/ + ); + assert.match( + obfuscationResult.getObfuscatedCode(), + /var *test *= *_0x([a-z0-9]){4}\('0x0', '(\\x[a-f0-9]*){4}'\);/ + ); + }); }); it('should obfuscate literal node with boolean value', () => { diff --git a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts index 71756f1f..b2815c9b 100644 --- a/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts +++ b/test/functional-tests/templates/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapperNodeTemplate.spec.ts @@ -1,8 +1,10 @@ import 'format-unicorn'; import { AtobTemplate } from '../../../../../src/templates/custom-nodes/AtobTemplate'; +import { Rc4Template } from '../../../../../src/templates/custom-nodes/Rc4Template'; import { UnicodeArrayBase64DecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayBase64DecodeNodeTemplate'; import { UnicodeArrayCallsWrapperTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayCallsWrapperTemplate'; +import { UnicodeArrayRc4DecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/unicode-array-nodes/unicode-array-calls-wrapper/UnicodeArrayRC4DecodeNodeTemplate'; import { Utils } from '../../../../../src/Utils'; @@ -15,7 +17,7 @@ const assert: Chai.AssertStatic = require('chai').assert; * @param index * @returns {Function} */ -function getFunctionFromTemplate ( +function getFunctionFromTemplateBase64Encoding ( templateData: any, unicodeArrayName: string, unicodeArrayCallsWrapperName: string, @@ -32,6 +34,32 @@ function getFunctionFromTemplate ( `)(); } +/** + * @param templateData + * @param unicodeArrayName + * @param unicodeArrayCallsWrapperName + * @param index + * @param key + * @returns {Function} + */ +function getFunctionFromTemplateRc4Encoding ( + templateData: any, + unicodeArrayName: string, + unicodeArrayCallsWrapperName: string, + index: string, + key: string +) { + let unicodeArrayCallsWrapperTemplate: string = UnicodeArrayCallsWrapperTemplate().formatUnicorn(templateData); + + return Function(` + var ${unicodeArrayName} = ['${Utils.btoa(Utils.rc4('test1', key))}']; + + ${unicodeArrayCallsWrapperTemplate} + + return ${unicodeArrayCallsWrapperName}('${index}', '${key}'); + `)(); +} + describe('UnicodeArrayCallsWrapperNodeTemplate (): string', () => { let unicodeArrayName: string = 'unicodeArrayName', unicodeArrayCallsWrapperName: string = 'unicodeArrayCallsWrapperName', @@ -39,13 +67,27 @@ describe('UnicodeArrayCallsWrapperNodeTemplate (): string', () => { atobPolyfill: AtobTemplate(), selfDefendingCode: '', unicodeArrayCallsWrapperName + }), + rc4DecodeNodeTemplate: string = UnicodeArrayRc4DecodeNodeTemplate().formatUnicorn({ + atobPolyfill: AtobTemplate(), + rc4Polyfill: Rc4Template(), + selfDefendingCode: '', + unicodeArrayCallsWrapperName }); - it('should correctly returns decoded value with atob encoding', () => { - assert.deepEqual(getFunctionFromTemplate({ + it('should correctly returns decoded value with base64 encoding', () => { + assert.deepEqual(getFunctionFromTemplateBase64Encoding({ decodeNodeTemplate: atobDecodeNodeTemplate, unicodeArrayCallsWrapperName, unicodeArrayName }, unicodeArrayName, unicodeArrayCallsWrapperName, '0x0'), 'test1'); }); + + it('should correctly returns decoded value with rc4 encoding', () => { + assert.deepEqual(getFunctionFromTemplateRc4Encoding({ + decodeNodeTemplate: rc4DecodeNodeTemplate, + unicodeArrayCallsWrapperName, + unicodeArrayName + }, unicodeArrayName, unicodeArrayCallsWrapperName, '0x0', 'key'), 'test1'); + }); }); From 3b8bf270d5dcca044aaf997c2b227c312b454058 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 18:00:33 +0300 Subject: [PATCH 099/138] rc4 unicode array encoding wip --- dist/index.js | 255 +++++++++--------- test/dev/test.ts | 2 +- .../LiteralObfuscator.spec.ts | 4 - 3 files changed, 129 insertions(+), 132 deletions(-) diff --git a/dist/index.js b/dist/index.js index af36736d..e093217c 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 = 83); +/******/ return __webpack_require__(__webpack_require__.s = 86); /******/ }) /************************************************************************/ /******/ ([ @@ -102,7 +102,7 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(77); +var chance_1 = __webpack_require__(80); var JSFuck_1 = __webpack_require__(20); var Utils = function () { @@ -1249,7 +1249,7 @@ var esprima = __webpack_require__(23); var escodegen = __webpack_require__(11); var ObfuscationResult_1 = __webpack_require__(19); var Obfuscator_1 = __webpack_require__(27); -var Options_1 = __webpack_require__(55); +var Options_1 = __webpack_require__(56); var SourceMapCorrector_1 = __webpack_require__(28); var JavaScriptObfuscatorInternal = function () { @@ -1318,22 +1318,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(3); var AppendState_1 = __webpack_require__(4); var NodeType_1 = __webpack_require__(5); -var CatchClauseObfuscator_1 = __webpack_require__(46); -var ConsoleOutputNodesGroup_1 = __webpack_require__(41); -var DebugProtectionNodesGroup_1 = __webpack_require__(42); -var DomainLockNodesGroup_1 = __webpack_require__(43); -var FunctionDeclarationObfuscator_1 = __webpack_require__(47); -var FunctionObfuscator_1 = __webpack_require__(48); -var LiteralObfuscator_1 = __webpack_require__(49); -var MemberExpressionObfuscator_1 = __webpack_require__(50); -var MethodDefinitionObfuscator_1 = __webpack_require__(51); +var CatchClauseObfuscator_1 = __webpack_require__(47); +var ConsoleOutputNodesGroup_1 = __webpack_require__(42); +var DebugProtectionNodesGroup_1 = __webpack_require__(43); +var DomainLockNodesGroup_1 = __webpack_require__(44); +var FunctionDeclarationObfuscator_1 = __webpack_require__(48); +var FunctionObfuscator_1 = __webpack_require__(49); +var LiteralObfuscator_1 = __webpack_require__(50); +var MemberExpressionObfuscator_1 = __webpack_require__(51); +var MethodDefinitionObfuscator_1 = __webpack_require__(52); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var ObjectExpressionObfuscator_1 = __webpack_require__(52); -var SelfDefendingNodesGroup_1 = __webpack_require__(44); -var UnicodeArrayNodesGroup_1 = __webpack_require__(45); -var VariableDeclarationObfuscator_1 = __webpack_require__(53); -var StackTraceAnalyzer_1 = __webpack_require__(58); +var ObjectExpressionObfuscator_1 = __webpack_require__(53); +var SelfDefendingNodesGroup_1 = __webpack_require__(45); +var UnicodeArrayNodesGroup_1 = __webpack_require__(46); +var VariableDeclarationObfuscator_1 = __webpack_require__(54); +var StackTraceAnalyzer_1 = __webpack_require__(59); var Obfuscator = function () { function Obfuscator(options) { @@ -1532,8 +1532,8 @@ 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__(80); -var mkdirp = __webpack_require__(81); +var fs = __webpack_require__(83); +var mkdirp = __webpack_require__(84); var path = __webpack_require__(24); var Utils_1 = __webpack_require__(0); @@ -1624,7 +1624,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 commander = __webpack_require__(79); +var commander = __webpack_require__(82); var path = __webpack_require__(24); var SourceMapMode_1 = __webpack_require__(12); var UnicodeArrayEncoding_1 = __webpack_require__(16); @@ -1777,7 +1777,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 AppendState_1 = __webpack_require__(4); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(63); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(65); var AbstractCustomNode_1 = __webpack_require__(6); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -1828,7 +1828,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(64); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(66); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); @@ -1881,7 +1881,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(65); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(67); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); @@ -1934,7 +1934,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(66); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(68); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2000,7 +2000,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DomainLockNodeTemplate_1 = __webpack_require__(67); +var DomainLockNodeTemplate_1 = __webpack_require__(69); var AbstractCustomNode_1 = __webpack_require__(6); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -2063,7 +2063,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(18); -var SelfDefendingTemplate_1 = __webpack_require__(68); +var SelfDefendingTemplate_1 = __webpack_require__(70); var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2119,12 +2119,12 @@ __webpack_require__(8); var AppendState_1 = __webpack_require__(4); var UnicodeArrayEncoding_1 = __webpack_require__(16); var NoCustomNodesPreset_1 = __webpack_require__(18); -var AtobTemplate_1 = __webpack_require__(62); -var Rc4Template_1 = __webpack_require__(85); -var SelfDefendingTemplate_1 = __webpack_require__(69); -var UnicodeArrayBase64DecodeNodeTemplate_1 = __webpack_require__(70); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(71); -var UnicodeArrayRC4DecodeNodeTemplate_1 = __webpack_require__(84); +var AtobTemplate_1 = __webpack_require__(63); +var Rc4Template_1 = __webpack_require__(64); +var SelfDefendingTemplate_1 = __webpack_require__(71); +var UnicodeArrayBase64DecodeNodeTemplate_1 = __webpack_require__(72); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(73); +var UnicodeArrayRC4DecodeNodeTemplate_1 = __webpack_require__(74); var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2228,7 +2228,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var UnicodeArrayTemplate_1 = __webpack_require__(72); +var UnicodeArrayTemplate_1 = __webpack_require__(75); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); @@ -2315,8 +2315,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(18); -var SelfDefendingTemplate_1 = __webpack_require__(73); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(74); +var SelfDefendingTemplate_1 = __webpack_require__(76); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(77); var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2380,7 +2380,8 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, -/* 41 */ +/* 41 */, +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2416,7 +2417,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; /***/ }, -/* 42 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2460,7 +2461,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; /***/ }, -/* 43 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2496,7 +2497,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { exports.DomainLockNodesGroup = DomainLockNodesGroup; /***/ }, -/* 44 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2532,7 +2533,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; /***/ }, -/* 45 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2588,7 +2589,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; /***/ }, -/* 46 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2659,7 +2660,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 47 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2734,7 +2735,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 48 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2815,7 +2816,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 49 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2833,7 +2834,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var BooleanLiteralReplacer_1 = __webpack_require__(54); +var BooleanLiteralReplacer_1 = __webpack_require__(55); var Nodes_1 = __webpack_require__(2); var NumberLiteralReplacer_1 = __webpack_require__(21); var StringLiteralReplacer_1 = __webpack_require__(17); @@ -2880,7 +2881,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 50 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2965,7 +2966,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 51 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3026,7 +3027,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 52 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3112,7 +3113,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 53 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3189,7 +3190,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 54 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3228,7 +3229,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 55 */ +/* 56 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3249,12 +3250,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__(78); -var TSourceMapMode_1 = __webpack_require__(75); -var TUnicodeArrayEncoding_1 = __webpack_require__(76); +var class_validator_1 = __webpack_require__(81); +var TSourceMapMode_1 = __webpack_require__(78); +var TUnicodeArrayEncoding_1 = __webpack_require__(79); var DefaultPreset_1 = __webpack_require__(22); -var OptionsNormalizer_1 = __webpack_require__(56); -var ValidationErrorsFormatter_1 = __webpack_require__(57); +var OptionsNormalizer_1 = __webpack_require__(57); +var ValidationErrorsFormatter_1 = __webpack_require__(58); var Options = function Options(obfuscatorOptions) { _classCallCheck(this, Options); @@ -3300,7 +3301,7 @@ exports.Options = Options; var _a, _b; /***/ }, -/* 56 */ +/* 57 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3467,7 +3468,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNo exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 57 */ +/* 58 */ /***/ function(module, exports) { "use strict"; @@ -3534,7 +3535,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 58 */ +/* 59 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3546,9 +3547,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(5); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(59); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(60); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(61); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(60); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(61); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(62); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); @@ -3625,7 +3626,7 @@ var StackTraceAnalyzer = function () { exports.StackTraceAnalyzer = StackTraceAnalyzer; /***/ }, -/* 59 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3684,7 +3685,7 @@ var FunctionDeclarationCalleeDataExtractor = function () { exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; /***/ }, -/* 60 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3746,7 +3747,7 @@ var FunctionExpressionCalleeDataExtractor = function () { exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; /***/ }, -/* 61 */ +/* 62 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3877,7 +3878,7 @@ var ObjectExpressionCalleeDataExtractor = function () { exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; /***/ }, -/* 62 */ +/* 63 */ /***/ function(module, exports) { "use strict"; @@ -3889,7 +3890,19 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 63 */ +/* 64 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function Rc4Template() { + return "\n function rc4 (str, key) {\n\t var s = [], j = 0, x, res = '';\n\t \n for (var i = 0; i < 256; i++) {\n s[i] = i;\n }\n \n for (i = 0; i < 256; i++) {\n j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n }\n \n i = 0;\n j = 0;\n \n for (var y = 0; y < str.length; y++) {\n i = (i + 1) % 256;\n j = (j + s[i]) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);\n }\n \n return res;\n }\n "; +} +exports.Rc4Template = Rc4Template; + +/***/ }, +/* 65 */ /***/ function(module, exports) { "use strict"; @@ -3901,7 +3914,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 64 */ +/* 66 */ /***/ function(module, exports) { "use strict"; @@ -3913,7 +3926,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 65 */ +/* 67 */ /***/ function(module, exports) { "use strict"; @@ -3925,7 +3938,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 66 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3938,7 +3951,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 67 */ +/* 69 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3951,7 +3964,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 68 */ +/* 70 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3964,7 +3977,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 69 */ +/* 71 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3977,7 +3990,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 70 */ +/* 72 */ /***/ function(module, exports) { "use strict"; @@ -3989,7 +4002,7 @@ function UnicodeArrayBase64DecodeNodeTemplate() { exports.UnicodeArrayBase64DecodeNodeTemplate = UnicodeArrayBase64DecodeNodeTemplate; /***/ }, -/* 71 */ +/* 73 */ /***/ function(module, exports) { "use strict"; @@ -4001,7 +4014,19 @@ function UnicodeArrayCallsWrapperTemplate() { exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 72 */ +/* 74 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function UnicodeArrayRc4DecodeNodeTemplate() { + return "\n if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) {\n {atobPolyfill}\n \n {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true;\n }\n \n {rc4Polyfill}\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n if (!decodedValues[index]) {\n var base64DecodeUnicode = function (str) {\n return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n }\n \n {selfDefendingCode}\n \n value = rc4(base64DecodeUnicode(value), key);\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues; \n "; +} +exports.UnicodeArrayRc4DecodeNodeTemplate = UnicodeArrayRc4DecodeNodeTemplate; + +/***/ }, +/* 75 */ /***/ function(module, exports) { "use strict"; @@ -4013,7 +4038,7 @@ function UnicodeArrayTemplate() { exports.UnicodeArrayTemplate = UnicodeArrayTemplate; /***/ }, -/* 73 */ +/* 76 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4026,7 +4051,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 74 */ +/* 77 */ /***/ function(module, exports) { "use strict"; @@ -4037,53 +4062,53 @@ function UnicodeArrayRotateFunctionTemplate() { } exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; -/***/ }, -/* 75 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -/***/ }, -/* 76 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -/***/ }, -/* 77 */ -/***/ function(module, exports) { - -module.exports = require("chance"); - /***/ }, /* 78 */ /***/ function(module, exports) { -module.exports = require("class-validator"); +"use strict"; +"use strict"; /***/ }, /* 79 */ /***/ function(module, exports) { -module.exports = require("commander"); +"use strict"; +"use strict"; /***/ }, /* 80 */ /***/ function(module, exports) { -module.exports = require("fs"); +module.exports = require("chance"); /***/ }, /* 81 */ /***/ function(module, exports) { +module.exports = require("class-validator"); + +/***/ }, +/* 82 */ +/***/ function(module, exports) { + +module.exports = require("commander"); + +/***/ }, +/* 83 */ +/***/ function(module, exports) { + +module.exports = require("fs"); + +/***/ }, +/* 84 */ +/***/ function(module, exports) { + module.exports = require("mkdirp"); /***/ }, -/* 82 */, -/* 83 */ +/* 85 */, +/* 86 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4095,30 +4120,6 @@ if (!global._babelPolyfill) { } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; -/***/ }, -/* 84 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -function UnicodeArrayRc4DecodeNodeTemplate() { - return "\n if (!{unicodeArrayCallsWrapperName}.atobPolyfillAppended) {\n {atobPolyfill}\n \n {unicodeArrayCallsWrapperName}.atobPolyfillAppended = true;\n }\n \n {rc4Polyfill}\n \n var decodedValues = {unicodeArrayCallsWrapperName}.data || {};\n \n if (!decodedValues[index]) {\n var base64DecodeUnicode = function (str) {\n return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n }\n \n {selfDefendingCode}\n \n value = rc4(base64DecodeUnicode(value), key);\n decodedValues[index] = value;\n } else {\n value = decodedValues[index];\n } \n \n {unicodeArrayCallsWrapperName}.data = decodedValues; \n "; -} -exports.UnicodeArrayRc4DecodeNodeTemplate = UnicodeArrayRc4DecodeNodeTemplate; - -/***/ }, -/* 85 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -function Rc4Template() { - return "\n function rc4 (str, key) {\n\t var s = [], j = 0, x, res = '';\n\t \n for (var i = 0; i < 256; i++) {\n s[i] = i;\n }\n \n for (i = 0; i < 256; i++) {\n j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n }\n \n i = 0;\n j = 0;\n \n for (var y = 0; y < str.length; y++) {\n i = (i + 1) % 256;\n j = (j + s[i]) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);\n }\n \n return res;\n }\n "; -} -exports.Rc4Template = Rc4Template; - /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/test/dev/test.ts b/test/dev/test.ts index 0dce357e..47231c6c 100644 --- a/test/dev/test.ts +++ b/test/dev/test.ts @@ -69,7 +69,7 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( `, { disableConsoleOutput: false, - unicodeArrayEncoding: true + unicodeArrayEncoding: 'rc4' } ).getObfuscatedCode(); diff --git a/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts b/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts index 07831d66..efc1a652 100644 --- a/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts +++ b/test/functional-tests/node-obfuscators/LiteralObfuscator.spec.ts @@ -44,10 +44,6 @@ describe('LiteralObfuscator', () => { }) ); - assert.match( - obfuscationResult.getObfuscatedCode(), - /^var *_0x([a-z0-9]){4} *= *\['(\\x[a-f0-9]*){8}'\];/ - ); assert.match( obfuscationResult.getObfuscatedCode(), /var *test *= *_0x([a-z0-9]){4}\('0x0', '(\\x[a-f0-9]*){4}'\);/ From 1334b31d89917fe38981c4f857266bf95a2b8f3a Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 18:29:29 +0300 Subject: [PATCH 100/138] rc4 optimization --- dist/index.js | 2 +- src/templates/custom-nodes/Rc4Template.ts | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/dist/index.js b/dist/index.js index e093217c..769885ce 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3897,7 +3897,7 @@ exports.AtobTemplate = AtobTemplate; "use strict"; function Rc4Template() { - return "\n function rc4 (str, key) {\n\t var s = [], j = 0, x, res = '';\n\t \n for (var i = 0; i < 256; i++) {\n s[i] = i;\n }\n \n for (i = 0; i < 256; i++) {\n j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n }\n \n i = 0;\n j = 0;\n \n for (var y = 0; y < str.length; y++) {\n i = (i + 1) % 256;\n j = (j + s[i]) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);\n }\n \n return res;\n }\n "; + return "\n var rc4 = function (str, key) {\n\t var s = [], j = 0, x, res = '';\n\t \n\t if (!rc4.s) {\n for (var i = 0; i < 256; i++) {\n s[i] = i;\n }\n \n rc4.s = s;\n\t } else {\n\t s = rc4.s.slice(0);\n\t }\n \n for (i = 0; i < 256; i++) {\n j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n }\n \n i = 0;\n j = 0;\n \n for (var y = 0; y < str.length; y++) {\n i = (i + 1) % 256;\n j = (j + s[i]) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);\n }\n \n return res;\n }\n "; } exports.Rc4Template = Rc4Template; diff --git a/src/templates/custom-nodes/Rc4Template.ts b/src/templates/custom-nodes/Rc4Template.ts index 8fb8c0ba..a494e9a0 100644 --- a/src/templates/custom-nodes/Rc4Template.ts +++ b/src/templates/custom-nodes/Rc4Template.ts @@ -3,12 +3,18 @@ */ export function Rc4Template (): string { return ` - function rc4 (str, key) { + var rc4 = function (str, key) { var s = [], j = 0, x, res = ''; - for (var i = 0; i < 256; i++) { - s[i] = i; - } + if (!rc4.s) { + for (var i = 0; i < 256; i++) { + s[i] = i; + } + + rc4.s = s; + } else { + s = rc4.s.slice(0); + } for (i = 0; i < 256; i++) { j = (j + s[i] + key.charCodeAt(i % key.length)) % 256; From 3ee696e25b92aadebf9f9ba06779768d82edd438 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 18:56:14 +0300 Subject: [PATCH 101/138] preformance test wip --- package.json | 1 + scripts/test-dev-performance | 3 ++ test/dev/test-performance.ts | 83 ++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100755 scripts/test-dev-performance create mode 100644 test/dev/test-performance.ts diff --git a/package.json b/package.json index 4f63544e..59807649 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "watch": "scripts/watch", "test:compile": "scripts/test-compile", "test:dev": "scripts/test-dev", + "test:devPerformance": "scripts/test-dev-performance", "test:full": "scripts/test-full", "test:coveralls": "scripts/test-coveralls", "test:mocha": "scripts/test-mocha", diff --git a/scripts/test-dev-performance b/scripts/test-dev-performance new file mode 100755 index 00000000..f068fd77 --- /dev/null +++ b/scripts/test-dev-performance @@ -0,0 +1,3 @@ +#!/bin/bash + +$(npm bin)/ts-node test/dev/test-performance.ts \ No newline at end of file diff --git a/test/dev/test-performance.ts b/test/dev/test-performance.ts new file mode 100644 index 00000000..7cc8cabc --- /dev/null +++ b/test/dev/test-performance.ts @@ -0,0 +1,83 @@ +'use strict'; + +if (!(global)._babelPolyfill) { + require('babel-polyfill'); +} + +const JavaScriptObfuscator: any = require("../../index"); + +let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( + ` + var start = new Date(); + var log = console.log; + console.log = function () {}; + + (function(){ + var result = 1, + term1 = 0, + term2 = 1, + i = 1; + while(i < 10) + { + var test = 10; + result = term1 + term2; + console.log(result); + term1 = term2; + term2 = result; + i++; + } + + console.log(test); + + var test = function (test) { + console.log(test); + + if (true) { + var test = 5 + } + + return test; + } + + console.log(test(1)); + + function test2 (abc) { + function test1 () { + console.log('inside', abc.item); + } + + console.log('тест', abc); + + var abc = {}; + + return abc.item = 15, test1(); + }; + + var regexptest = /version\\/(\\d+)/i; + console.log(regexptest); + + test2(22); + console.log(105.4); + console.log(true, false); + + var sA = 'shorthand1'; + var sB = 'shorthand2'; + + console.log({sA, sB}); + + try { + } catch (error) { + console.log(error); + } + })(); + + console.log = log; + console.log(new Date() - start); + `, + { + disableConsoleOutput: false, + unicodeArrayEncoding: 'rc4' + } +).getObfuscatedCode(); + +console.log(eval(obfuscatedCode)); From be5b68f67172f827d8cfa21b1bfe4aa1ea0f4d10 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 19:37:31 +0300 Subject: [PATCH 102/138] fixed incorrect append of nody By CustomNodeAppender --- dist/index.js | 603 +++++++++--------- src/custom-nodes/CustomNodeAppender.ts | 6 +- .../ConsoleOutputDisableExpressionNode.ts | 2 +- .../domain-lock-nodes/DomainLockNode.ts | 2 +- .../SelfDefendingUnicodeNode.ts | 2 +- test/dev/test.ts | 10 + .../custom-nodes/CustomNodeAppender.spec.ts | 87 ++- 7 files changed, 404 insertions(+), 308 deletions(-) diff --git a/dist/index.js b/dist/index.js index 671e0db7..fb09b319 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 = 82); +/******/ return __webpack_require__(__webpack_require__.s = 86); /******/ }) /************************************************************************/ /******/ ([ @@ -102,8 +102,8 @@ 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__(76); -var JSFuck_1 = __webpack_require__(19); +var chance_1 = __webpack_require__(80); +var JSFuck_1 = __webpack_require__(20); var Utils = function () { function Utils() { @@ -257,9 +257,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 escodegen = __webpack_require__(11); -var esprima = __webpack_require__(22); +var esprima = __webpack_require__(23); var estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); @@ -425,7 +425,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 NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var Nodes = function () { function Nodes() { @@ -555,41 +555,6 @@ var AppendState = exports.AppendState; /***/ }, /* 5 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var AbstractCustomNode = function () { - function AbstractCustomNode(options) { - _classCallCheck(this, AbstractCustomNode); - - this.options = options; - } - - _createClass(AbstractCustomNode, [{ - key: "getAppendState", - value: function getAppendState() { - return this.appendState; - } - }, { - key: "getNode", - value: function getNode() { - return this.getNodeStructure(); - } - }]); - - return AbstractCustomNode; -}(); - -exports.AbstractCustomNode = AbstractCustomNode; - -/***/ }, -/* 6 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -626,6 +591,41 @@ exports.NodeType = Utils_1.Utils.strEnumify({ WhileStatement: 'WhileStatement' }); +/***/ }, +/* 6 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var AbstractCustomNode = function () { + function AbstractCustomNode(options) { + _classCallCheck(this, AbstractCustomNode); + + this.options = options; + } + + _createClass(AbstractCustomNode, [{ + key: "getAppendState", + value: function getAppendState() { + return this.appendState; + } + }, { + key: "getNode", + value: function getNode() { + return this.getNodeStructure(); + } + }]); + + return AbstractCustomNode; +}(); + +exports.AbstractCustomNode = AbstractCustomNode; + /***/ }, /* 7 */ /***/ function(module, exports) { @@ -661,8 +661,8 @@ 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__(30); -var JavaScriptObfuscatorInternal_1 = __webpack_require__(25); +var JavaScriptObfuscatorCLI_1 = __webpack_require__(31); +var JavaScriptObfuscatorInternal_1 = __webpack_require__(26); var JavaScriptObfuscator = function () { function JavaScriptObfuscator() { @@ -850,8 +850,8 @@ var CustomNodeAppender = function () { NodeUtils_1.NodeUtils.prependNode(targetBlockScopeBody, node); } }, { - key: 'getIndexByThreshold', - value: function getIndexByThreshold(blockStatementBodyLength) { + key: 'getStackTraceIndexByThreshold', + value: function getStackTraceIndexByThreshold(stackTraceRootLength) { var threshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.1; if (threshold < 0 || threshold > 1) { @@ -859,7 +859,7 @@ var CustomNodeAppender = function () { } return Utils_1.Utils.getRandomGenerator().integer({ min: 0, - max: Math.round((blockStatementBodyLength - 1) * threshold) + max: Math.round((stackTraceRootLength - 1) * threshold) }); } }, { @@ -880,7 +880,8 @@ var CustomNodeAppender = function () { exports.CustomNodeAppender = CustomNodeAppender; /***/ }, -/* 16 */ +/* 16 */, +/* 17 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -895,7 +896,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 AbstractReplacer_1 = __webpack_require__(13); -var NumberLiteralReplacer_1 = __webpack_require__(20); +var NumberLiteralReplacer_1 = __webpack_require__(21); var Utils_1 = __webpack_require__(0); var StringLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -955,7 +956,7 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { exports.StringLiteralReplacer = StringLiteralReplacer; /***/ }, -/* 17 */ +/* 18 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -982,7 +983,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ }); /***/ }, -/* 18 */ +/* 19 */ /***/ function(module, exports) { "use strict"; @@ -1023,7 +1024,7 @@ var ObfuscationResult = function () { exports.ObfuscationResult = ObfuscationResult; /***/ }, -/* 19 */ +/* 20 */ /***/ function(module, exports) { "use strict"; @@ -1088,7 +1089,7 @@ exports.JSFuck = { }; /***/ }, -/* 20 */ +/* 21 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1131,7 +1132,7 @@ var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { exports.NumberLiteralReplacer = NumberLiteralReplacer; /***/ }, -/* 21 */ +/* 22 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1158,25 +1159,25 @@ exports.DEFAULT_PRESET = Object.freeze({ }); /***/ }, -/* 22 */ +/* 23 */ /***/ function(module, exports) { module.exports = require("esprima"); /***/ }, -/* 23 */ +/* 24 */ /***/ function(module, exports) { module.exports = require("path"); /***/ }, -/* 24 */ +/* 25 */ /***/ function(module, exports) { module.exports = require("babel-polyfill"); /***/ }, -/* 25 */ +/* 26 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1186,12 +1187,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 esprima = __webpack_require__(22); +var esprima = __webpack_require__(23); var escodegen = __webpack_require__(11); -var ObfuscationResult_1 = __webpack_require__(18); -var Obfuscator_1 = __webpack_require__(26); -var Options_1 = __webpack_require__(55); -var SourceMapCorrector_1 = __webpack_require__(27); +var ObfuscationResult_1 = __webpack_require__(19); +var Obfuscator_1 = __webpack_require__(27); +var Options_1 = __webpack_require__(56); +var SourceMapCorrector_1 = __webpack_require__(28); var JavaScriptObfuscatorInternal = function () { function JavaScriptObfuscatorInternal(sourceCode) { @@ -1244,7 +1245,7 @@ JavaScriptObfuscatorInternal.escodegenParams = { exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; /***/ }, -/* 26 */ +/* 27 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1258,23 +1259,23 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(3); var AppendState_1 = __webpack_require__(4); -var NodeType_1 = __webpack_require__(6); -var CatchClauseObfuscator_1 = __webpack_require__(46); -var ConsoleOutputNodesGroup_1 = __webpack_require__(41); -var DebugProtectionNodesGroup_1 = __webpack_require__(42); -var DomainLockNodesGroup_1 = __webpack_require__(43); -var FunctionDeclarationObfuscator_1 = __webpack_require__(47); -var FunctionObfuscator_1 = __webpack_require__(48); -var LiteralObfuscator_1 = __webpack_require__(49); -var MemberExpressionObfuscator_1 = __webpack_require__(50); -var MethodDefinitionObfuscator_1 = __webpack_require__(51); +var NodeType_1 = __webpack_require__(5); +var CatchClauseObfuscator_1 = __webpack_require__(47); +var ConsoleOutputNodesGroup_1 = __webpack_require__(42); +var DebugProtectionNodesGroup_1 = __webpack_require__(43); +var DomainLockNodesGroup_1 = __webpack_require__(44); +var FunctionDeclarationObfuscator_1 = __webpack_require__(48); +var FunctionObfuscator_1 = __webpack_require__(49); +var LiteralObfuscator_1 = __webpack_require__(50); +var MemberExpressionObfuscator_1 = __webpack_require__(51); +var MethodDefinitionObfuscator_1 = __webpack_require__(52); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var ObjectExpressionObfuscator_1 = __webpack_require__(52); -var SelfDefendingNodesGroup_1 = __webpack_require__(44); -var UnicodeArrayNodesGroup_1 = __webpack_require__(45); -var VariableDeclarationObfuscator_1 = __webpack_require__(53); -var StackTraceAnalyzer_1 = __webpack_require__(58); +var ObjectExpressionObfuscator_1 = __webpack_require__(53); +var SelfDefendingNodesGroup_1 = __webpack_require__(45); +var UnicodeArrayNodesGroup_1 = __webpack_require__(46); +var VariableDeclarationObfuscator_1 = __webpack_require__(54); +var StackTraceAnalyzer_1 = __webpack_require__(59); var Obfuscator = function () { function Obfuscator(options) { @@ -1348,7 +1349,7 @@ var Obfuscator = function () { exports.Obfuscator = Obfuscator; /***/ }, -/* 27 */ +/* 28 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1359,7 +1360,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 SourceMapMode_1 = __webpack_require__(12); -var ObfuscationResult_1 = __webpack_require__(18); +var ObfuscationResult_1 = __webpack_require__(19); var Utils_1 = __webpack_require__(0); var SourceMapCorrector = function () { @@ -1406,7 +1407,7 @@ var SourceMapCorrector = function () { exports.SourceMapCorrector = SourceMapCorrector; /***/ }, -/* 28 */ +/* 29 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1463,7 +1464,7 @@ var UnicodeArray = function () { exports.UnicodeArray = UnicodeArray; /***/ }, -/* 29 */ +/* 30 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1473,9 +1474,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__(79); -var mkdirp = __webpack_require__(80); -var path = __webpack_require__(23); +var fs = __webpack_require__(83); +var mkdirp = __webpack_require__(84); +var path = __webpack_require__(24); var Utils_1 = __webpack_require__(0); var CLIUtils = function () { @@ -1555,7 +1556,7 @@ CLIUtils.encoding = 'utf8'; exports.CLIUtils = CLIUtils; /***/ }, -/* 30 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1565,11 +1566,11 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var commander = __webpack_require__(78); -var path = __webpack_require__(23); +var commander = __webpack_require__(82); +var path = __webpack_require__(24); var SourceMapMode_1 = __webpack_require__(12); -var DefaultPreset_1 = __webpack_require__(21); -var CLIUtils_1 = __webpack_require__(29); +var DefaultPreset_1 = __webpack_require__(22); +var CLIUtils_1 = __webpack_require__(30); var JavaScriptObfuscator_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(0); @@ -1688,7 +1689,7 @@ var JavaScriptObfuscatorCLI = function () { exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; /***/ }, -/* 31 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1703,8 +1704,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 AppendState_1 = __webpack_require__(4); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(63); -var AbstractCustomNode_1 = __webpack_require__(5); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(65); +var AbstractCustomNode_1 = __webpack_require__(6); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -1723,7 +1724,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { _createClass(ConsoleOutputDisableExpressionNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode, stackTraceData) { - CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getStackTraceIndexByThreshold(stackTraceData.length)); } }, { key: 'getNodeStructure', @@ -1738,7 +1739,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; /***/ }, -/* 32 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1754,8 +1755,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(64); -var AbstractCustomNode_1 = __webpack_require__(5); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(66); +var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { @@ -1791,7 +1792,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; /***/ }, -/* 33 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1807,8 +1808,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(65); -var AbstractCustomNode_1 = __webpack_require__(5); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(67); +var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { @@ -1844,7 +1845,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; /***/ }, -/* 34 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1860,8 +1861,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(66); -var AbstractCustomNode_1 = __webpack_require__(5); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(68); +var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1908,7 +1909,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; /***/ }, -/* 35 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1926,8 +1927,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DomainLockNodeTemplate_1 = __webpack_require__(67); -var AbstractCustomNode_1 = __webpack_require__(5); +var DomainLockNodeTemplate_1 = __webpack_require__(69); +var AbstractCustomNode_1 = __webpack_require__(6); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1947,7 +1948,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { _createClass(DomainLockNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode, stackTraceData) { - CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getStackTraceIndexByThreshold(stackTraceData.length)); } }, { key: 'getNodeStructure', @@ -1973,7 +1974,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { exports.DomainLockNode = DomainLockNode; /***/ }, -/* 36 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1988,9 +1989,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 AppendState_1 = __webpack_require__(4); -var NoCustomNodesPreset_1 = __webpack_require__(17); -var SelfDefendingTemplate_1 = __webpack_require__(68); -var AbstractCustomNode_1 = __webpack_require__(5); +var NoCustomNodesPreset_1 = __webpack_require__(18); +var SelfDefendingTemplate_1 = __webpack_require__(70); +var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var CustomNodeAppender_1 = __webpack_require__(15); @@ -2010,7 +2011,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _createClass(SelfDefendingUnicodeNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode, stackTraceData) { - CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getStackTraceIndexByThreshold(stackTraceData.length)); } }, { key: 'getNodeStructure', @@ -2025,7 +2026,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 37 */ +/* 38 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2043,8 +2044,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(69); -var AbstractCustomNode_1 = __webpack_require__(5); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(73); +var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2098,87 +2099,6 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; -/***/ }, -/* 38 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -__webpack_require__(8); -var AppendState_1 = __webpack_require__(4); -var NoCustomNodesPreset_1 = __webpack_require__(17); -var AtobTemplate_1 = __webpack_require__(62); -var SelfDefendingTemplate_1 = __webpack_require__(70); -var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(71); -var AbstractCustomNode_1 = __webpack_require__(5); -var JavaScriptObfuscator_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(1); - -var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { - _inherits(UnicodeArrayDecodeNode, _AbstractCustomNode_); - - function UnicodeArrayDecodeNode(unicodeArrayName, unicodeArray, options) { - _classCallCheck(this, UnicodeArrayDecodeNode); - - var _this = _possibleConstructorReturn(this, (UnicodeArrayDecodeNode.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode)).call(this, options)); - - _this.appendState = AppendState_1.AppendState.AfterObfuscation; - _this.unicodeArrayName = unicodeArrayName; - _this.unicodeArray = unicodeArray; - return _this; - } - - _createClass(UnicodeArrayDecodeNode, [{ - key: 'appendNode', - value: function appendNode(blockScopeNode) { - if (!this.unicodeArray.getLength()) { - return; - } - NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); - } - }, { - key: 'getNode', - value: function getNode() { - return _get(UnicodeArrayDecodeNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), 'getNode', this).call(this); - } - }, { - key: 'getNodeStructure', - value: function getNodeStructure() { - var forLoopFunctionName = 'forLoopFunc'; - var code = void 0; - if (this.options.selfDefending) { - code = SelfDefendingTemplate_1.SelfDefendingTemplate().formatUnicorn({ - forLoopFunctionName: forLoopFunctionName, - unicodeArrayName: this.unicodeArrayName - }); - } else { - code = forLoopFunctionName + '();'; - } - return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(UnicodeArrayDecodeNodeTemplate_1.UnicodeArrayDecodeNodeTemplate().formatUnicorn({ - atobPolyfill: AtobTemplate_1.AtobTemplate(), - code: code, - forLoopFunctionName: forLoopFunctionName, - unicodeArrayName: this.unicodeArrayName - }), NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET).getObfuscatedCode()); - } - }]); - - return UnicodeArrayDecodeNode; -}(AbstractCustomNode_1.AbstractCustomNode); - -exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; - /***/ }, /* 39 */ /***/ function(module, exports, __webpack_require__) { @@ -2198,8 +2118,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var UnicodeArrayTemplate_1 = __webpack_require__(72); -var AbstractCustomNode_1 = __webpack_require__(5); +var UnicodeArrayTemplate_1 = __webpack_require__(75); +var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var UnicodeArrayNode = function (_AbstractCustomNode_) { @@ -2284,10 +2204,10 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var NoCustomNodesPreset_1 = __webpack_require__(17); -var SelfDefendingTemplate_1 = __webpack_require__(73); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(74); -var AbstractCustomNode_1 = __webpack_require__(5); +var NoCustomNodesPreset_1 = __webpack_require__(18); +var SelfDefendingTemplate_1 = __webpack_require__(76); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(77); +var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2350,7 +2270,8 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, -/* 41 */ +/* 41 */, +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2363,7 +2284,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 AbstractNodesGroup_1 = __webpack_require__(10); -var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(31); +var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(32); var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { _inherits(ConsoleOutputNodesGroup, _AbstractNodesGroup_); @@ -2386,7 +2307,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; /***/ }, -/* 42 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2398,9 +2319,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__(32); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(33); -var DebugProtectionFunctionNode_1 = __webpack_require__(34); +var DebugProtectionFunctionCallNode_1 = __webpack_require__(33); +var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(34); +var DebugProtectionFunctionNode_1 = __webpack_require__(35); var AbstractNodesGroup_1 = __webpack_require__(10); var Utils_1 = __webpack_require__(0); @@ -2430,7 +2351,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; /***/ }, -/* 43 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2443,7 +2364,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 AbstractNodesGroup_1 = __webpack_require__(10); -var DomainLockNode_1 = __webpack_require__(35); +var DomainLockNode_1 = __webpack_require__(36); var DomainLockNodesGroup = function (_AbstractNodesGroup_) { _inherits(DomainLockNodesGroup, _AbstractNodesGroup_); @@ -2466,7 +2387,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { exports.DomainLockNodesGroup = DomainLockNodesGroup; /***/ }, -/* 44 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2479,7 +2400,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 AbstractNodesGroup_1 = __webpack_require__(10); -var SelfDefendingUnicodeNode_1 = __webpack_require__(36); +var SelfDefendingUnicodeNode_1 = __webpack_require__(37); var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { _inherits(SelfDefendingNodesGroup, _AbstractNodesGroup_); @@ -2502,7 +2423,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; /***/ }, -/* 45 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2515,9 +2436,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 AbstractNodesGroup_1 = __webpack_require__(10); -var UnicodeArray_1 = __webpack_require__(28); -var UnicodeArrayCallsWrapper_1 = __webpack_require__(37); -var UnicodeArrayDecodeNode_1 = __webpack_require__(38); +var UnicodeArray_1 = __webpack_require__(29); +var UnicodeArrayCallsWrapper_1 = __webpack_require__(38); +var UnicodeArrayDecodeNode_1 = __webpack_require__(87); var UnicodeArrayNode_1 = __webpack_require__(39); var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(40); var Utils_1 = __webpack_require__(0); @@ -2564,7 +2485,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; /***/ }, -/* 46 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2579,7 +2500,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -2635,7 +2556,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 47 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2650,7 +2571,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -2710,7 +2631,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 48 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2725,7 +2646,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -2791,7 +2712,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 49 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2809,10 +2730,10 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var BooleanLiteralReplacer_1 = __webpack_require__(54); +var BooleanLiteralReplacer_1 = __webpack_require__(55); var Nodes_1 = __webpack_require__(2); -var NumberLiteralReplacer_1 = __webpack_require__(20); -var StringLiteralReplacer_1 = __webpack_require__(16); +var NumberLiteralReplacer_1 = __webpack_require__(21); +var StringLiteralReplacer_1 = __webpack_require__(17); var LiteralObfuscator = function (_AbstractNodeObfuscat) { _inherits(LiteralObfuscator, _AbstractNodeObfuscat); @@ -2856,7 +2777,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 50 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2872,10 +2793,10 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); -var StringLiteralReplacer_1 = __webpack_require__(16); +var StringLiteralReplacer_1 = __webpack_require__(17); var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MemberExpressionObfuscator, _AbstractNodeObfuscat); @@ -2941,7 +2862,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 51 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2959,7 +2880,7 @@ var estraverse = __webpack_require__(3); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); -var StringLiteralReplacer_1 = __webpack_require__(16); +var StringLiteralReplacer_1 = __webpack_require__(17); var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MethodDefinitionObfuscator, _AbstractNodeObfuscat); @@ -3002,7 +2923,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 52 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3018,7 +2939,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); @@ -3088,7 +3009,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 53 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3103,7 +3024,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); +var NodeType_1 = __webpack_require__(5); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -3165,7 +3086,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 54 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3179,7 +3100,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 JSFuck_1 = __webpack_require__(19); +var JSFuck_1 = __webpack_require__(20); var AbstractReplacer_1 = __webpack_require__(13); var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -3204,7 +3125,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 55 */ +/* 56 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3225,11 +3146,11 @@ 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__(77); -var TSourceMapMode_1 = __webpack_require__(75); -var DefaultPreset_1 = __webpack_require__(21); -var OptionsNormalizer_1 = __webpack_require__(56); -var ValidationErrorsFormatter_1 = __webpack_require__(57); +var class_validator_1 = __webpack_require__(81); +var TSourceMapMode_1 = __webpack_require__(78); +var DefaultPreset_1 = __webpack_require__(22); +var OptionsNormalizer_1 = __webpack_require__(57); +var ValidationErrorsFormatter_1 = __webpack_require__(58); var Options = function Options(obfuscatorOptions) { _classCallCheck(this, Options); @@ -3276,7 +3197,7 @@ exports.Options = Options; var _a; /***/ }, -/* 56 */ +/* 57 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3445,7 +3366,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNo exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 57 */ +/* 58 */ /***/ function(module, exports) { "use strict"; @@ -3512,7 +3433,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 58 */ +/* 59 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3523,10 +3444,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(6); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(59); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(60); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(61); +var NodeType_1 = __webpack_require__(5); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(60); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(61); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(62); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); @@ -3603,7 +3524,7 @@ var StackTraceAnalyzer = function () { exports.StackTraceAnalyzer = StackTraceAnalyzer; /***/ }, -/* 59 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3662,7 +3583,7 @@ var FunctionDeclarationCalleeDataExtractor = function () { exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; /***/ }, -/* 60 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3724,7 +3645,7 @@ var FunctionExpressionCalleeDataExtractor = function () { exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; /***/ }, -/* 61 */ +/* 62 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3855,7 +3776,7 @@ var ObjectExpressionCalleeDataExtractor = function () { exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; /***/ }, -/* 62 */ +/* 63 */ /***/ function(module, exports) { "use strict"; @@ -3867,7 +3788,8 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 63 */ +/* 64 */, +/* 65 */ /***/ function(module, exports) { "use strict"; @@ -3879,7 +3801,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 64 */ +/* 66 */ /***/ function(module, exports) { "use strict"; @@ -3891,7 +3813,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 65 */ +/* 67 */ /***/ function(module, exports) { "use strict"; @@ -3903,7 +3825,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 66 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3916,7 +3838,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 67 */ +/* 69 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3929,7 +3851,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 68 */ +/* 70 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3942,7 +3864,9 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 69 */ +/* 71 */, +/* 72 */, +/* 73 */ /***/ function(module, exports) { "use strict"; @@ -3954,32 +3878,8 @@ function UnicodeArrayCallsWrapperTemplate() { exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 70 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var Utils_1 = __webpack_require__(0); -function SelfDefendingTemplate() { - return '\n var func = function(){return \'dev\';};\n \n Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')()[\'test\'](func[\'toString\']()) !== true && !{unicodeArrayName}++ ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : Function(\'a\', atob(' + Utils_1.Utils.stringToUnicode(Utils_1.Utils.btoa('a.call()')) + '))({forLoopFunctionName}) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')();\n '; -} -exports.SelfDefendingTemplate = SelfDefendingTemplate; - -/***/ }, -/* 71 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -function UnicodeArrayDecodeNodeTemplate() { - return "\n (function () {\n {atobPolyfill}\n \n var {forLoopFunctionName} = function () {\n var array = [];\n \n for (var i in {unicodeArrayName}) {\n array['push'](decodeURI(atob({unicodeArrayName}[i])));\n }\n \n {unicodeArrayName} = array;\n };\n \n {code}\n })();\n "; -} -exports.UnicodeArrayDecodeNodeTemplate = UnicodeArrayDecodeNodeTemplate; - -/***/ }, -/* 72 */ +/* 74 */, +/* 75 */ /***/ function(module, exports) { "use strict"; @@ -3991,7 +3891,7 @@ function UnicodeArrayTemplate() { exports.UnicodeArrayTemplate = UnicodeArrayTemplate; /***/ }, -/* 73 */ +/* 76 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4004,7 +3904,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 74 */ +/* 77 */ /***/ function(module, exports) { "use strict"; @@ -4016,45 +3916,46 @@ function UnicodeArrayRotateFunctionTemplate() { exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; /***/ }, -/* 75 */ +/* 78 */ /***/ function(module, exports) { "use strict"; "use strict"; /***/ }, -/* 76 */ +/* 79 */, +/* 80 */ /***/ function(module, exports) { module.exports = require("chance"); /***/ }, -/* 77 */ +/* 81 */ /***/ function(module, exports) { module.exports = require("class-validator"); /***/ }, -/* 78 */ +/* 82 */ /***/ function(module, exports) { module.exports = require("commander"); /***/ }, -/* 79 */ +/* 83 */ /***/ function(module, exports) { module.exports = require("fs"); /***/ }, -/* 80 */ +/* 84 */ /***/ function(module, exports) { module.exports = require("mkdirp"); /***/ }, -/* 81 */, -/* 82 */ +/* 85 */, +/* 86 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4062,10 +3963,116 @@ module.exports = require("mkdirp"); var JavaScriptObfuscator_1 = __webpack_require__(9); if (!global._babelPolyfill) { - __webpack_require__(24); + __webpack_require__(25); } module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; +/***/ }, +/* 87 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +__webpack_require__(8); +var AppendState_1 = __webpack_require__(4); +var NoCustomNodesPreset_1 = __webpack_require__(18); +var AtobTemplate_1 = __webpack_require__(63); +var SelfDefendingTemplate_1 = __webpack_require__(88); +var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(89); +var AbstractCustomNode_1 = __webpack_require__(6); +var JavaScriptObfuscator_1 = __webpack_require__(9); +var NodeUtils_1 = __webpack_require__(1); + +var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { + _inherits(UnicodeArrayDecodeNode, _AbstractCustomNode_); + + function UnicodeArrayDecodeNode(unicodeArrayName, unicodeArray, options) { + _classCallCheck(this, UnicodeArrayDecodeNode); + + var _this = _possibleConstructorReturn(this, (UnicodeArrayDecodeNode.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode)).call(this, options)); + + _this.appendState = AppendState_1.AppendState.AfterObfuscation; + _this.unicodeArrayName = unicodeArrayName; + _this.unicodeArray = unicodeArray; + return _this; + } + + _createClass(UnicodeArrayDecodeNode, [{ + key: 'appendNode', + value: function appendNode(blockScopeNode) { + if (!this.unicodeArray.getLength()) { + return; + } + NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); + } + }, { + key: 'getNode', + value: function getNode() { + return _get(UnicodeArrayDecodeNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), 'getNode', this).call(this); + } + }, { + key: 'getNodeStructure', + value: function getNodeStructure() { + var forLoopFunctionName = 'forLoopFunc'; + var code = void 0; + if (this.options.selfDefending) { + code = SelfDefendingTemplate_1.SelfDefendingTemplate().formatUnicorn({ + forLoopFunctionName: forLoopFunctionName, + unicodeArrayName: this.unicodeArrayName + }); + } else { + code = forLoopFunctionName + '();'; + } + return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(UnicodeArrayDecodeNodeTemplate_1.UnicodeArrayDecodeNodeTemplate().formatUnicorn({ + atobPolyfill: AtobTemplate_1.AtobTemplate(), + code: code, + forLoopFunctionName: forLoopFunctionName, + unicodeArrayName: this.unicodeArrayName + }), NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET).getObfuscatedCode()); + } + }]); + + return UnicodeArrayDecodeNode; +}(AbstractCustomNode_1.AbstractCustomNode); + +exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; + +/***/ }, +/* 88 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var Utils_1 = __webpack_require__(0); +function SelfDefendingTemplate() { + return '\n var func = function(){return \'dev\';};\n \n Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')()[\'test\'](func[\'toString\']()) !== true && !{unicodeArrayName}++ ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : Function(\'a\', atob(' + Utils_1.Utils.stringToUnicode(Utils_1.Utils.btoa('a.call()')) + '))({forLoopFunctionName}) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')();\n '; +} +exports.SelfDefendingTemplate = SelfDefendingTemplate; + +/***/ }, +/* 89 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function UnicodeArrayDecodeNodeTemplate() { + return "\n (function () {\n {atobPolyfill}\n \n var {forLoopFunctionName} = function () {\n var array = [];\n \n for (var i in {unicodeArrayName}) {\n array['push'](decodeURI(atob({unicodeArrayName}[i])));\n }\n \n {unicodeArrayName} = array;\n };\n \n {code}\n })();\n "; +} +exports.UnicodeArrayDecodeNodeTemplate = UnicodeArrayDecodeNodeTemplate; + /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/custom-nodes/CustomNodeAppender.ts b/src/custom-nodes/CustomNodeAppender.ts index 8dc0c5d6..9dd09f19 100644 --- a/src/custom-nodes/CustomNodeAppender.ts +++ b/src/custom-nodes/CustomNodeAppender.ts @@ -47,17 +47,17 @@ export class CustomNodeAppender { } /** - * @param blockStatementBodyLength + * @param stackTraceRootLength * @param threshold */ - public static getIndexByThreshold (blockStatementBodyLength: number, threshold: number = 0.1): number { + public static getStackTraceIndexByThreshold (stackTraceRootLength: number, threshold: number = 0.1): number { if (threshold < 0 || threshold > 1) { throw new RangeError('`threshold` parameter should has value between 0 and 1'); } return Utils.getRandomGenerator().integer({ min: 0, - max: Math.round((blockStatementBodyLength - 1) * threshold) + max: Math.round((stackTraceRootLength - 1) * threshold) }); } diff --git a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts index b2866707..ceeeda86 100644 --- a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts +++ b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts @@ -27,7 +27,7 @@ export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { stackTraceData, blockScopeNode.body, this.getNode(), - CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + CustomNodeAppender.getStackTraceIndexByThreshold(stackTraceData.length) ); } diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts index a2a040d3..c6a02a37 100644 --- a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -30,7 +30,7 @@ export class DomainLockNode extends AbstractCustomNode { stackTraceData, blockScopeNode.body, this.getNode(), - CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + CustomNodeAppender.getStackTraceIndexByThreshold(stackTraceData.length) ); } diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index 7a08f42a..b37830eb 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts @@ -30,7 +30,7 @@ export class SelfDefendingUnicodeNode extends AbstractCustomNode { stackTraceData, blockScopeNode.body, this.getNode(), - CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + CustomNodeAppender.getStackTraceIndexByThreshold(stackTraceData.length) ); } diff --git a/test/dev/test.ts b/test/dev/test.ts index 2d9ef22d..52861b3f 100644 --- a/test/dev/test.ts +++ b/test/dev/test.ts @@ -8,6 +8,12 @@ const JavaScriptObfuscator: any = require("../../index"); let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( ` + var start = new Date(); + + var log = console.log; + + console.log = function () {}; + (function(){ var result = 1, term1 = 0, @@ -66,6 +72,10 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( console.log(error); } })(); + + console.log = log; + + console.log(new Date() - start); `, { disableConsoleOutput: false, diff --git a/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts b/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts index 732c09f1..612bc9d6 100644 --- a/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts +++ b/test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts @@ -278,29 +278,108 @@ describe('CustomNodeAppender', () => { assert.deepEqual(astTree, expectedAstTree); }); + + it('should append node into deepest function call by specified index in calls trace - variant #3', () => { + astTree = NodeUtils.convertCodeToStructure(` + var start = new Date(); + + var log = console.log; + + console.log = function () {}; + + (function () { + function bar () { + function inner1 () { + + } + + function inner2 () { + var inner3 = function () { + + } + + inner3(); + } + + inner2(); + inner1(); + } + + bar(); + })(); + + console.log = log; + + console.log(new Date() - start); + `, false); + expectedAstTree = NodeUtils.convertCodeToStructure(` + var start = new Date(); + + var log = console.log; + + console.log = function () {}; + + (function () { + function bar () { + function inner1 () { + + } + + function inner2 () { + var inner3 = function () { + var test = 1; + } + + inner3(); + } + + inner2(); + inner1(); + } + + bar(); + })(); + + console.log = log; + + console.log(new Date() - start); + `, false); + + stackTraceData = new StackTraceAnalyzer(astTree.body).analyze(); + CustomNodeAppender.appendNode( + stackTraceData, + astTree.body, + node, + CustomNodeAppender.getStackTraceIndexByThreshold(stackTraceData.length) + ); + + NodeUtils.parentize(astTree); + + assert.deepEqual(astTree, expectedAstTree); + }); }); }); - describe('getIndexByThreshold (blockStatementBodyLength: number, threshold: number = 0.1): number', () => { + describe('getIndexByThreshold (stackTraceRootLength: number, threshold: number = 0.1): number', () => { it('should returns random index between 0 and index based on threshold value', () => { let index: number; for (let i: number = 0; i < 10; i++) { - index = CustomNodeAppender.getIndexByThreshold(100, 0.1); + index = CustomNodeAppender.getStackTraceIndexByThreshold(100, 0.1); assert.isAtLeast(index, 0); assert.isAtMost(index, 10); } for (let i: number = 0; i < 10; i++) { - index = CustomNodeAppender.getIndexByThreshold(10, 0.5); + index = CustomNodeAppender.getStackTraceIndexByThreshold(10, 0.5); assert.isAtLeast(index, 0); assert.isAtMost(index, 5); } for (let i: number = 0; i < 10; i++) { - index = CustomNodeAppender.getIndexByThreshold(1, 1); + index = CustomNodeAppender.getStackTraceIndexByThreshold(1, 1); assert.equal(index, 0); } From 7055ddc9e776d29f0d7633638b4404c50eb25518 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 19:39:07 +0300 Subject: [PATCH 103/138] fixed incorrect append of nody By CustomNodeAppender --- dist/index.js | 696 +++++++++++++++++++++++------------------------ test/dev/test.ts | 10 - 2 files changed, 344 insertions(+), 362 deletions(-) diff --git a/dist/index.js b/dist/index.js index fb09b319..46e3fc68 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 = 86); +/******/ return __webpack_require__(__webpack_require__.s = 81); /******/ }) /************************************************************************/ /******/ ([ @@ -102,8 +102,8 @@ 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__(80); -var JSFuck_1 = __webpack_require__(20); +var chance_1 = __webpack_require__(76); +var JSFuck_1 = __webpack_require__(19); var Utils = function () { function Utils() { @@ -257,9 +257,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 escodegen = __webpack_require__(11); -var esprima = __webpack_require__(23); +var esprima = __webpack_require__(22); var estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); @@ -425,7 +425,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 NodeType_1 = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var Nodes = function () { function Nodes() { @@ -555,6 +555,41 @@ var AppendState = exports.AppendState; /***/ }, /* 5 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var AbstractCustomNode = function () { + function AbstractCustomNode(options) { + _classCallCheck(this, AbstractCustomNode); + + this.options = options; + } + + _createClass(AbstractCustomNode, [{ + key: "getAppendState", + value: function getAppendState() { + return this.appendState; + } + }, { + key: "getNode", + value: function getNode() { + return this.getNodeStructure(); + } + }]); + + return AbstractCustomNode; +}(); + +exports.AbstractCustomNode = AbstractCustomNode; + +/***/ }, +/* 6 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -591,41 +626,6 @@ exports.NodeType = Utils_1.Utils.strEnumify({ WhileStatement: 'WhileStatement' }); -/***/ }, -/* 6 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var AbstractCustomNode = function () { - function AbstractCustomNode(options) { - _classCallCheck(this, AbstractCustomNode); - - this.options = options; - } - - _createClass(AbstractCustomNode, [{ - key: "getAppendState", - value: function getAppendState() { - return this.appendState; - } - }, { - key: "getNode", - value: function getNode() { - return this.getNodeStructure(); - } - }]); - - return AbstractCustomNode; -}(); - -exports.AbstractCustomNode = AbstractCustomNode; - /***/ }, /* 7 */ /***/ function(module, exports) { @@ -661,8 +661,8 @@ 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__(31); -var JavaScriptObfuscatorInternal_1 = __webpack_require__(26); +var JavaScriptObfuscatorCLI_1 = __webpack_require__(30); +var JavaScriptObfuscatorInternal_1 = __webpack_require__(25); var JavaScriptObfuscator = function () { function JavaScriptObfuscator() { @@ -880,8 +880,7 @@ var CustomNodeAppender = function () { exports.CustomNodeAppender = CustomNodeAppender; /***/ }, -/* 16 */, -/* 17 */ +/* 16 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -896,7 +895,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 AbstractReplacer_1 = __webpack_require__(13); -var NumberLiteralReplacer_1 = __webpack_require__(21); +var NumberLiteralReplacer_1 = __webpack_require__(20); var Utils_1 = __webpack_require__(0); var StringLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -956,7 +955,7 @@ var StringLiteralReplacer = function (_AbstractReplacer_1$A) { exports.StringLiteralReplacer = StringLiteralReplacer; /***/ }, -/* 18 */ +/* 17 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -983,7 +982,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ }); /***/ }, -/* 19 */ +/* 18 */ /***/ function(module, exports) { "use strict"; @@ -1024,7 +1023,7 @@ var ObfuscationResult = function () { exports.ObfuscationResult = ObfuscationResult; /***/ }, -/* 20 */ +/* 19 */ /***/ function(module, exports) { "use strict"; @@ -1089,7 +1088,7 @@ exports.JSFuck = { }; /***/ }, -/* 21 */ +/* 20 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1132,7 +1131,7 @@ var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { exports.NumberLiteralReplacer = NumberLiteralReplacer; /***/ }, -/* 22 */ +/* 21 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1159,25 +1158,25 @@ exports.DEFAULT_PRESET = Object.freeze({ }); /***/ }, -/* 23 */ +/* 22 */ /***/ function(module, exports) { module.exports = require("esprima"); /***/ }, -/* 24 */ +/* 23 */ /***/ function(module, exports) { module.exports = require("path"); /***/ }, -/* 25 */ +/* 24 */ /***/ function(module, exports) { module.exports = require("babel-polyfill"); /***/ }, -/* 26 */ +/* 25 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1187,12 +1186,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 esprima = __webpack_require__(23); +var esprima = __webpack_require__(22); var escodegen = __webpack_require__(11); -var ObfuscationResult_1 = __webpack_require__(19); -var Obfuscator_1 = __webpack_require__(27); -var Options_1 = __webpack_require__(56); -var SourceMapCorrector_1 = __webpack_require__(28); +var ObfuscationResult_1 = __webpack_require__(18); +var Obfuscator_1 = __webpack_require__(26); +var Options_1 = __webpack_require__(55); +var SourceMapCorrector_1 = __webpack_require__(27); var JavaScriptObfuscatorInternal = function () { function JavaScriptObfuscatorInternal(sourceCode) { @@ -1245,7 +1244,7 @@ JavaScriptObfuscatorInternal.escodegenParams = { exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; /***/ }, -/* 27 */ +/* 26 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1259,23 +1258,23 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(3); var AppendState_1 = __webpack_require__(4); -var NodeType_1 = __webpack_require__(5); -var CatchClauseObfuscator_1 = __webpack_require__(47); -var ConsoleOutputNodesGroup_1 = __webpack_require__(42); -var DebugProtectionNodesGroup_1 = __webpack_require__(43); -var DomainLockNodesGroup_1 = __webpack_require__(44); -var FunctionDeclarationObfuscator_1 = __webpack_require__(48); -var FunctionObfuscator_1 = __webpack_require__(49); -var LiteralObfuscator_1 = __webpack_require__(50); -var MemberExpressionObfuscator_1 = __webpack_require__(51); -var MethodDefinitionObfuscator_1 = __webpack_require__(52); +var NodeType_1 = __webpack_require__(6); +var CatchClauseObfuscator_1 = __webpack_require__(46); +var ConsoleOutputNodesGroup_1 = __webpack_require__(41); +var DebugProtectionNodesGroup_1 = __webpack_require__(42); +var DomainLockNodesGroup_1 = __webpack_require__(43); +var FunctionDeclarationObfuscator_1 = __webpack_require__(47); +var FunctionObfuscator_1 = __webpack_require__(48); +var LiteralObfuscator_1 = __webpack_require__(49); +var MemberExpressionObfuscator_1 = __webpack_require__(50); +var MethodDefinitionObfuscator_1 = __webpack_require__(51); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var ObjectExpressionObfuscator_1 = __webpack_require__(53); -var SelfDefendingNodesGroup_1 = __webpack_require__(45); -var UnicodeArrayNodesGroup_1 = __webpack_require__(46); -var VariableDeclarationObfuscator_1 = __webpack_require__(54); -var StackTraceAnalyzer_1 = __webpack_require__(59); +var ObjectExpressionObfuscator_1 = __webpack_require__(52); +var SelfDefendingNodesGroup_1 = __webpack_require__(44); +var UnicodeArrayNodesGroup_1 = __webpack_require__(45); +var VariableDeclarationObfuscator_1 = __webpack_require__(53); +var StackTraceAnalyzer_1 = __webpack_require__(58); var Obfuscator = function () { function Obfuscator(options) { @@ -1349,7 +1348,7 @@ var Obfuscator = function () { exports.Obfuscator = Obfuscator; /***/ }, -/* 28 */ +/* 27 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1360,7 +1359,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 SourceMapMode_1 = __webpack_require__(12); -var ObfuscationResult_1 = __webpack_require__(19); +var ObfuscationResult_1 = __webpack_require__(18); var Utils_1 = __webpack_require__(0); var SourceMapCorrector = function () { @@ -1407,7 +1406,7 @@ var SourceMapCorrector = function () { exports.SourceMapCorrector = SourceMapCorrector; /***/ }, -/* 29 */ +/* 28 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1464,7 +1463,7 @@ var UnicodeArray = function () { exports.UnicodeArray = UnicodeArray; /***/ }, -/* 30 */ +/* 29 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1474,9 +1473,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__(83); -var mkdirp = __webpack_require__(84); -var path = __webpack_require__(24); +var fs = __webpack_require__(79); +var mkdirp = __webpack_require__(80); +var path = __webpack_require__(23); var Utils_1 = __webpack_require__(0); var CLIUtils = function () { @@ -1556,7 +1555,7 @@ CLIUtils.encoding = 'utf8'; exports.CLIUtils = CLIUtils; /***/ }, -/* 31 */ +/* 30 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1566,11 +1565,11 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var commander = __webpack_require__(82); -var path = __webpack_require__(24); +var commander = __webpack_require__(78); +var path = __webpack_require__(23); var SourceMapMode_1 = __webpack_require__(12); -var DefaultPreset_1 = __webpack_require__(22); -var CLIUtils_1 = __webpack_require__(30); +var DefaultPreset_1 = __webpack_require__(21); +var CLIUtils_1 = __webpack_require__(29); var JavaScriptObfuscator_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(0); @@ -1689,7 +1688,7 @@ var JavaScriptObfuscatorCLI = function () { exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; /***/ }, -/* 32 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1704,8 +1703,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 AppendState_1 = __webpack_require__(4); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(65); -var AbstractCustomNode_1 = __webpack_require__(6); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(63); +var AbstractCustomNode_1 = __webpack_require__(5); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -1739,7 +1738,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; /***/ }, -/* 33 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1755,8 +1754,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(66); -var AbstractCustomNode_1 = __webpack_require__(6); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(64); +var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { @@ -1792,7 +1791,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; /***/ }, -/* 34 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1808,8 +1807,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(67); -var AbstractCustomNode_1 = __webpack_require__(6); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(65); +var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { @@ -1845,7 +1844,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; /***/ }, -/* 35 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1861,8 +1860,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(68); -var AbstractCustomNode_1 = __webpack_require__(6); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(66); +var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1909,7 +1908,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; /***/ }, -/* 36 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1927,8 +1926,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DomainLockNodeTemplate_1 = __webpack_require__(69); -var AbstractCustomNode_1 = __webpack_require__(6); +var DomainLockNodeTemplate_1 = __webpack_require__(67); +var AbstractCustomNode_1 = __webpack_require__(5); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -1974,7 +1973,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { exports.DomainLockNode = DomainLockNode; /***/ }, -/* 37 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1989,9 +1988,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 AppendState_1 = __webpack_require__(4); -var NoCustomNodesPreset_1 = __webpack_require__(18); -var SelfDefendingTemplate_1 = __webpack_require__(70); -var AbstractCustomNode_1 = __webpack_require__(6); +var NoCustomNodesPreset_1 = __webpack_require__(17); +var SelfDefendingTemplate_1 = __webpack_require__(68); +var AbstractCustomNode_1 = __webpack_require__(5); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var CustomNodeAppender_1 = __webpack_require__(15); @@ -2026,7 +2025,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 38 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2044,8 +2043,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(73); -var AbstractCustomNode_1 = __webpack_require__(6); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(69); +var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2099,6 +2098,87 @@ var UnicodeArrayCallsWrapper = function (_AbstractCustomNode_) { exports.UnicodeArrayCallsWrapper = UnicodeArrayCallsWrapper; +/***/ }, +/* 38 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +__webpack_require__(8); +var AppendState_1 = __webpack_require__(4); +var NoCustomNodesPreset_1 = __webpack_require__(17); +var AtobTemplate_1 = __webpack_require__(62); +var SelfDefendingTemplate_1 = __webpack_require__(70); +var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(71); +var AbstractCustomNode_1 = __webpack_require__(5); +var JavaScriptObfuscator_1 = __webpack_require__(9); +var NodeUtils_1 = __webpack_require__(1); + +var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { + _inherits(UnicodeArrayDecodeNode, _AbstractCustomNode_); + + function UnicodeArrayDecodeNode(unicodeArrayName, unicodeArray, options) { + _classCallCheck(this, UnicodeArrayDecodeNode); + + var _this = _possibleConstructorReturn(this, (UnicodeArrayDecodeNode.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode)).call(this, options)); + + _this.appendState = AppendState_1.AppendState.AfterObfuscation; + _this.unicodeArrayName = unicodeArrayName; + _this.unicodeArray = unicodeArray; + return _this; + } + + _createClass(UnicodeArrayDecodeNode, [{ + key: 'appendNode', + value: function appendNode(blockScopeNode) { + if (!this.unicodeArray.getLength()) { + return; + } + NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); + } + }, { + key: 'getNode', + value: function getNode() { + return _get(UnicodeArrayDecodeNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), 'getNode', this).call(this); + } + }, { + key: 'getNodeStructure', + value: function getNodeStructure() { + var forLoopFunctionName = 'forLoopFunc'; + var code = void 0; + if (this.options.selfDefending) { + code = SelfDefendingTemplate_1.SelfDefendingTemplate().formatUnicorn({ + forLoopFunctionName: forLoopFunctionName, + unicodeArrayName: this.unicodeArrayName + }); + } else { + code = forLoopFunctionName + '();'; + } + return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(UnicodeArrayDecodeNodeTemplate_1.UnicodeArrayDecodeNodeTemplate().formatUnicorn({ + atobPolyfill: AtobTemplate_1.AtobTemplate(), + code: code, + forLoopFunctionName: forLoopFunctionName, + unicodeArrayName: this.unicodeArrayName + }), NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET).getObfuscatedCode()); + } + }]); + + return UnicodeArrayDecodeNode; +}(AbstractCustomNode_1.AbstractCustomNode); + +exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; + /***/ }, /* 39 */ /***/ function(module, exports, __webpack_require__) { @@ -2118,8 +2198,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var UnicodeArrayTemplate_1 = __webpack_require__(75); -var AbstractCustomNode_1 = __webpack_require__(6); +var UnicodeArrayTemplate_1 = __webpack_require__(72); +var AbstractCustomNode_1 = __webpack_require__(5); var NodeUtils_1 = __webpack_require__(1); var UnicodeArrayNode = function (_AbstractCustomNode_) { @@ -2204,10 +2284,10 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var NoCustomNodesPreset_1 = __webpack_require__(18); -var SelfDefendingTemplate_1 = __webpack_require__(76); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(77); -var AbstractCustomNode_1 = __webpack_require__(6); +var NoCustomNodesPreset_1 = __webpack_require__(17); +var SelfDefendingTemplate_1 = __webpack_require__(73); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(74); +var AbstractCustomNode_1 = __webpack_require__(5); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2270,8 +2350,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, -/* 41 */, -/* 42 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2284,7 +2363,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 AbstractNodesGroup_1 = __webpack_require__(10); -var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(32); +var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(31); var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { _inherits(ConsoleOutputNodesGroup, _AbstractNodesGroup_); @@ -2307,7 +2386,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; /***/ }, -/* 43 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2319,9 +2398,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__(33); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(34); -var DebugProtectionFunctionNode_1 = __webpack_require__(35); +var DebugProtectionFunctionCallNode_1 = __webpack_require__(32); +var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(33); +var DebugProtectionFunctionNode_1 = __webpack_require__(34); var AbstractNodesGroup_1 = __webpack_require__(10); var Utils_1 = __webpack_require__(0); @@ -2351,7 +2430,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; /***/ }, -/* 44 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2364,7 +2443,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 AbstractNodesGroup_1 = __webpack_require__(10); -var DomainLockNode_1 = __webpack_require__(36); +var DomainLockNode_1 = __webpack_require__(35); var DomainLockNodesGroup = function (_AbstractNodesGroup_) { _inherits(DomainLockNodesGroup, _AbstractNodesGroup_); @@ -2387,7 +2466,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { exports.DomainLockNodesGroup = DomainLockNodesGroup; /***/ }, -/* 45 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2400,7 +2479,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 AbstractNodesGroup_1 = __webpack_require__(10); -var SelfDefendingUnicodeNode_1 = __webpack_require__(37); +var SelfDefendingUnicodeNode_1 = __webpack_require__(36); var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { _inherits(SelfDefendingNodesGroup, _AbstractNodesGroup_); @@ -2423,7 +2502,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; /***/ }, -/* 46 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2436,9 +2515,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 AbstractNodesGroup_1 = __webpack_require__(10); -var UnicodeArray_1 = __webpack_require__(29); -var UnicodeArrayCallsWrapper_1 = __webpack_require__(38); -var UnicodeArrayDecodeNode_1 = __webpack_require__(87); +var UnicodeArray_1 = __webpack_require__(28); +var UnicodeArrayCallsWrapper_1 = __webpack_require__(37); +var UnicodeArrayDecodeNode_1 = __webpack_require__(38); var UnicodeArrayNode_1 = __webpack_require__(39); var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(40); var Utils_1 = __webpack_require__(0); @@ -2485,7 +2564,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; /***/ }, -/* 47 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2500,7 +2579,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -2556,7 +2635,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 48 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2571,7 +2650,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -2631,7 +2710,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 49 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2646,7 +2725,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -2712,7 +2791,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 50 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2730,10 +2809,10 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var BooleanLiteralReplacer_1 = __webpack_require__(55); +var BooleanLiteralReplacer_1 = __webpack_require__(54); var Nodes_1 = __webpack_require__(2); -var NumberLiteralReplacer_1 = __webpack_require__(21); -var StringLiteralReplacer_1 = __webpack_require__(17); +var NumberLiteralReplacer_1 = __webpack_require__(20); +var StringLiteralReplacer_1 = __webpack_require__(16); var LiteralObfuscator = function (_AbstractNodeObfuscat) { _inherits(LiteralObfuscator, _AbstractNodeObfuscat); @@ -2777,7 +2856,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 51 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2793,10 +2872,10 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); -var StringLiteralReplacer_1 = __webpack_require__(17); +var StringLiteralReplacer_1 = __webpack_require__(16); var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MemberExpressionObfuscator, _AbstractNodeObfuscat); @@ -2862,7 +2941,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 52 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2880,7 +2959,7 @@ var estraverse = __webpack_require__(3); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); -var StringLiteralReplacer_1 = __webpack_require__(17); +var StringLiteralReplacer_1 = __webpack_require__(16); var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { _inherits(MethodDefinitionObfuscator, _AbstractNodeObfuscat); @@ -2923,7 +3002,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 53 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2939,7 +3018,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var Nodes_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); @@ -3009,7 +3088,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 54 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3024,7 +3103,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(5); +var NodeType_1 = __webpack_require__(6); var AbstractNodeObfuscator_1 = __webpack_require__(7); var IdentifierReplacer_1 = __webpack_require__(14); var Nodes_1 = __webpack_require__(2); @@ -3086,7 +3165,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 55 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3100,7 +3179,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 JSFuck_1 = __webpack_require__(20); +var JSFuck_1 = __webpack_require__(19); var AbstractReplacer_1 = __webpack_require__(13); var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -3125,7 +3204,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 56 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3146,11 +3225,11 @@ 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__(81); -var TSourceMapMode_1 = __webpack_require__(78); -var DefaultPreset_1 = __webpack_require__(22); -var OptionsNormalizer_1 = __webpack_require__(57); -var ValidationErrorsFormatter_1 = __webpack_require__(58); +var class_validator_1 = __webpack_require__(77); +var TSourceMapMode_1 = __webpack_require__(75); +var DefaultPreset_1 = __webpack_require__(21); +var OptionsNormalizer_1 = __webpack_require__(56); +var ValidationErrorsFormatter_1 = __webpack_require__(57); var Options = function Options(obfuscatorOptions) { _classCallCheck(this, Options); @@ -3197,7 +3276,7 @@ exports.Options = Options; var _a; /***/ }, -/* 57 */ +/* 56 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3366,7 +3445,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNo exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 58 */ +/* 57 */ /***/ function(module, exports) { "use strict"; @@ -3433,7 +3512,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 59 */ +/* 58 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3444,10 +3523,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 estraverse = __webpack_require__(3); -var NodeType_1 = __webpack_require__(5); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(60); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(61); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(62); +var NodeType_1 = __webpack_require__(6); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(59); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(60); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(61); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); @@ -3524,7 +3603,7 @@ var StackTraceAnalyzer = function () { exports.StackTraceAnalyzer = StackTraceAnalyzer; /***/ }, -/* 60 */ +/* 59 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3583,7 +3662,7 @@ var FunctionDeclarationCalleeDataExtractor = function () { exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; /***/ }, -/* 61 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3645,7 +3724,7 @@ var FunctionExpressionCalleeDataExtractor = function () { exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; /***/ }, -/* 62 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3776,7 +3855,7 @@ var ObjectExpressionCalleeDataExtractor = function () { exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; /***/ }, -/* 63 */ +/* 62 */ /***/ function(module, exports) { "use strict"; @@ -3788,8 +3867,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 64 */, -/* 65 */ +/* 63 */ /***/ function(module, exports) { "use strict"; @@ -3801,7 +3879,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 66 */ +/* 64 */ /***/ function(module, exports) { "use strict"; @@ -3813,7 +3891,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 67 */ +/* 65 */ /***/ function(module, exports) { "use strict"; @@ -3825,7 +3903,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 68 */ +/* 66 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3838,7 +3916,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 69 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3851,7 +3929,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 70 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3864,9 +3942,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 71 */, -/* 72 */, -/* 73 */ +/* 69 */ /***/ function(module, exports) { "use strict"; @@ -3878,178 +3954,7 @@ function UnicodeArrayCallsWrapperTemplate() { exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 74 */, -/* 75 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -function UnicodeArrayTemplate() { - return "\n var {unicodeArrayName} = [{unicodeArray}];\n "; -} -exports.UnicodeArrayTemplate = UnicodeArrayTemplate; - -/***/ }, -/* 76 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var Utils_1 = __webpack_require__(0); -function SelfDefendingTemplate() { - return '(function () {\n var func = function(){return \'dev\';};\n \n !Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')().test(func.toString()) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : Function(\'a\', \'b\', \'a(++b)\')({whileFunctionName}, {timesName}) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')();\n })();'; -} -exports.SelfDefendingTemplate = SelfDefendingTemplate; - -/***/ }, -/* 77 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -function UnicodeArrayRotateFunctionTemplate() { - return "\n (function (array, {timesName}) {\n var {whileFunctionName} = function (times) {\n while (--times) {\n array['push'](array['shift']());\n }\n };\n \n {code}\n })({unicodeArrayName}, 0x{unicodeArrayRotateValue});\n "; -} -exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; - -/***/ }, -/* 78 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -/***/ }, -/* 79 */, -/* 80 */ -/***/ function(module, exports) { - -module.exports = require("chance"); - -/***/ }, -/* 81 */ -/***/ function(module, exports) { - -module.exports = require("class-validator"); - -/***/ }, -/* 82 */ -/***/ function(module, exports) { - -module.exports = require("commander"); - -/***/ }, -/* 83 */ -/***/ function(module, exports) { - -module.exports = require("fs"); - -/***/ }, -/* 84 */ -/***/ function(module, exports) { - -module.exports = require("mkdirp"); - -/***/ }, -/* 85 */, -/* 86 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var JavaScriptObfuscator_1 = __webpack_require__(9); -if (!global._babelPolyfill) { - __webpack_require__(25); -} -module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; - -/***/ }, -/* 87 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -var _get = (function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -__webpack_require__(8); -var AppendState_1 = __webpack_require__(4); -var NoCustomNodesPreset_1 = __webpack_require__(18); -var AtobTemplate_1 = __webpack_require__(63); -var SelfDefendingTemplate_1 = __webpack_require__(88); -var UnicodeArrayDecodeNodeTemplate_1 = __webpack_require__(89); -var AbstractCustomNode_1 = __webpack_require__(6); -var JavaScriptObfuscator_1 = __webpack_require__(9); -var NodeUtils_1 = __webpack_require__(1); - -var UnicodeArrayDecodeNode = function (_AbstractCustomNode_) { - _inherits(UnicodeArrayDecodeNode, _AbstractCustomNode_); - - function UnicodeArrayDecodeNode(unicodeArrayName, unicodeArray, options) { - _classCallCheck(this, UnicodeArrayDecodeNode); - - var _this = _possibleConstructorReturn(this, (UnicodeArrayDecodeNode.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode)).call(this, options)); - - _this.appendState = AppendState_1.AppendState.AfterObfuscation; - _this.unicodeArrayName = unicodeArrayName; - _this.unicodeArray = unicodeArray; - return _this; - } - - _createClass(UnicodeArrayDecodeNode, [{ - key: 'appendNode', - value: function appendNode(blockScopeNode) { - if (!this.unicodeArray.getLength()) { - return; - } - NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1); - } - }, { - key: 'getNode', - value: function getNode() { - return _get(UnicodeArrayDecodeNode.prototype.__proto__ || Object.getPrototypeOf(UnicodeArrayDecodeNode.prototype), 'getNode', this).call(this); - } - }, { - key: 'getNodeStructure', - value: function getNodeStructure() { - var forLoopFunctionName = 'forLoopFunc'; - var code = void 0; - if (this.options.selfDefending) { - code = SelfDefendingTemplate_1.SelfDefendingTemplate().formatUnicorn({ - forLoopFunctionName: forLoopFunctionName, - unicodeArrayName: this.unicodeArrayName - }); - } else { - code = forLoopFunctionName + '();'; - } - return NodeUtils_1.NodeUtils.convertCodeToStructure(JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(UnicodeArrayDecodeNodeTemplate_1.UnicodeArrayDecodeNodeTemplate().formatUnicorn({ - atobPolyfill: AtobTemplate_1.AtobTemplate(), - code: code, - forLoopFunctionName: forLoopFunctionName, - unicodeArrayName: this.unicodeArrayName - }), NoCustomNodesPreset_1.NO_CUSTOM_NODES_PRESET).getObfuscatedCode()); - } - }]); - - return UnicodeArrayDecodeNode; -}(AbstractCustomNode_1.AbstractCustomNode); - -exports.UnicodeArrayDecodeNode = UnicodeArrayDecodeNode; - -/***/ }, -/* 88 */ +/* 70 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4062,7 +3967,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 89 */ +/* 71 */ /***/ function(module, exports) { "use strict"; @@ -4073,6 +3978,93 @@ function UnicodeArrayDecodeNodeTemplate() { } exports.UnicodeArrayDecodeNodeTemplate = UnicodeArrayDecodeNodeTemplate; +/***/ }, +/* 72 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function UnicodeArrayTemplate() { + return "\n var {unicodeArrayName} = [{unicodeArray}];\n "; +} +exports.UnicodeArrayTemplate = UnicodeArrayTemplate; + +/***/ }, +/* 73 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var Utils_1 = __webpack_require__(0); +function SelfDefendingTemplate() { + return '(function () {\n var func = function(){return \'dev\';};\n \n !Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')().test(func.toString()) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : Function(\'a\', \'b\', \'a(++b)\')({whileFunctionName}, {timesName}) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')();\n })();'; +} +exports.SelfDefendingTemplate = SelfDefendingTemplate; + +/***/ }, +/* 74 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +function UnicodeArrayRotateFunctionTemplate() { + return "\n (function (array, {timesName}) {\n var {whileFunctionName} = function (times) {\n while (--times) {\n array['push'](array['shift']());\n }\n };\n \n {code}\n })({unicodeArrayName}, 0x{unicodeArrayRotateValue});\n "; +} +exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; + +/***/ }, +/* 75 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +/***/ }, +/* 76 */ +/***/ function(module, exports) { + +module.exports = require("chance"); + +/***/ }, +/* 77 */ +/***/ function(module, exports) { + +module.exports = require("class-validator"); + +/***/ }, +/* 78 */ +/***/ function(module, exports) { + +module.exports = require("commander"); + +/***/ }, +/* 79 */ +/***/ function(module, exports) { + +module.exports = require("fs"); + +/***/ }, +/* 80 */ +/***/ function(module, exports) { + +module.exports = require("mkdirp"); + +/***/ }, +/* 81 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var JavaScriptObfuscator_1 = __webpack_require__(9); +if (!global._babelPolyfill) { + __webpack_require__(24); +} +module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; + /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/test/dev/test.ts b/test/dev/test.ts index 52861b3f..2d9ef22d 100644 --- a/test/dev/test.ts +++ b/test/dev/test.ts @@ -8,12 +8,6 @@ const JavaScriptObfuscator: any = require("../../index"); let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( ` - var start = new Date(); - - var log = console.log; - - console.log = function () {}; - (function(){ var result = 1, term1 = 0, @@ -72,10 +66,6 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( console.log(error); } })(); - - console.log = log; - - console.log(new Date() - start); `, { disableConsoleOutput: false, From 07fbe7202c7a8a18a5e28e08c42d7e53799fd300 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 19:52:03 +0300 Subject: [PATCH 104/138] preformance test wip --- dist/index.js | 186 +++++++++++++++++------------------ test/dev/test-performance.ts | 132 +++++++++++++------------ 2 files changed, 160 insertions(+), 158 deletions(-) diff --git a/dist/index.js b/dist/index.js index 769885ce..1763783d 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 = 86); +/******/ return __webpack_require__(__webpack_require__.s = 84); /******/ }) /************************************************************************/ /******/ ([ @@ -102,7 +102,7 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(80); +var chance_1 = __webpack_require__(79); var JSFuck_1 = __webpack_require__(20); var Utils = function () { @@ -1249,7 +1249,7 @@ var esprima = __webpack_require__(23); var escodegen = __webpack_require__(11); var ObfuscationResult_1 = __webpack_require__(19); var Obfuscator_1 = __webpack_require__(27); -var Options_1 = __webpack_require__(56); +var Options_1 = __webpack_require__(55); var SourceMapCorrector_1 = __webpack_require__(28); var JavaScriptObfuscatorInternal = function () { @@ -1318,22 +1318,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(3); var AppendState_1 = __webpack_require__(4); var NodeType_1 = __webpack_require__(5); -var CatchClauseObfuscator_1 = __webpack_require__(47); -var ConsoleOutputNodesGroup_1 = __webpack_require__(42); -var DebugProtectionNodesGroup_1 = __webpack_require__(43); -var DomainLockNodesGroup_1 = __webpack_require__(44); -var FunctionDeclarationObfuscator_1 = __webpack_require__(48); -var FunctionObfuscator_1 = __webpack_require__(49); -var LiteralObfuscator_1 = __webpack_require__(50); -var MemberExpressionObfuscator_1 = __webpack_require__(51); -var MethodDefinitionObfuscator_1 = __webpack_require__(52); +var CatchClauseObfuscator_1 = __webpack_require__(46); +var ConsoleOutputNodesGroup_1 = __webpack_require__(41); +var DebugProtectionNodesGroup_1 = __webpack_require__(42); +var DomainLockNodesGroup_1 = __webpack_require__(43); +var FunctionDeclarationObfuscator_1 = __webpack_require__(47); +var FunctionObfuscator_1 = __webpack_require__(48); +var LiteralObfuscator_1 = __webpack_require__(49); +var MemberExpressionObfuscator_1 = __webpack_require__(50); +var MethodDefinitionObfuscator_1 = __webpack_require__(51); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); -var ObjectExpressionObfuscator_1 = __webpack_require__(53); -var SelfDefendingNodesGroup_1 = __webpack_require__(45); -var UnicodeArrayNodesGroup_1 = __webpack_require__(46); -var VariableDeclarationObfuscator_1 = __webpack_require__(54); -var StackTraceAnalyzer_1 = __webpack_require__(59); +var ObjectExpressionObfuscator_1 = __webpack_require__(52); +var SelfDefendingNodesGroup_1 = __webpack_require__(44); +var UnicodeArrayNodesGroup_1 = __webpack_require__(45); +var VariableDeclarationObfuscator_1 = __webpack_require__(53); +var StackTraceAnalyzer_1 = __webpack_require__(58); var Obfuscator = function () { function Obfuscator(options) { @@ -1532,8 +1532,8 @@ 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__(83); -var mkdirp = __webpack_require__(84); +var fs = __webpack_require__(82); +var mkdirp = __webpack_require__(83); var path = __webpack_require__(24); var Utils_1 = __webpack_require__(0); @@ -1624,7 +1624,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 commander = __webpack_require__(82); +var commander = __webpack_require__(81); var path = __webpack_require__(24); var SourceMapMode_1 = __webpack_require__(12); var UnicodeArrayEncoding_1 = __webpack_require__(16); @@ -1777,7 +1777,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 AppendState_1 = __webpack_require__(4); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(65); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(64); var AbstractCustomNode_1 = __webpack_require__(6); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -1828,7 +1828,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(66); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(65); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); @@ -1881,7 +1881,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(67); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(66); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); @@ -1934,7 +1934,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(68); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(67); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); var Utils_1 = __webpack_require__(0); @@ -2000,7 +2000,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var DomainLockNodeTemplate_1 = __webpack_require__(69); +var DomainLockNodeTemplate_1 = __webpack_require__(68); var AbstractCustomNode_1 = __webpack_require__(6); var CustomNodeAppender_1 = __webpack_require__(15); var NodeUtils_1 = __webpack_require__(1); @@ -2063,7 +2063,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(18); -var SelfDefendingTemplate_1 = __webpack_require__(70); +var SelfDefendingTemplate_1 = __webpack_require__(69); var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2119,12 +2119,12 @@ __webpack_require__(8); var AppendState_1 = __webpack_require__(4); var UnicodeArrayEncoding_1 = __webpack_require__(16); var NoCustomNodesPreset_1 = __webpack_require__(18); -var AtobTemplate_1 = __webpack_require__(63); -var Rc4Template_1 = __webpack_require__(64); -var SelfDefendingTemplate_1 = __webpack_require__(71); -var UnicodeArrayBase64DecodeNodeTemplate_1 = __webpack_require__(72); -var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(73); -var UnicodeArrayRC4DecodeNodeTemplate_1 = __webpack_require__(74); +var AtobTemplate_1 = __webpack_require__(62); +var Rc4Template_1 = __webpack_require__(63); +var SelfDefendingTemplate_1 = __webpack_require__(70); +var UnicodeArrayBase64DecodeNodeTemplate_1 = __webpack_require__(71); +var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(72); +var UnicodeArrayRC4DecodeNodeTemplate_1 = __webpack_require__(73); var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2228,7 +2228,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); -var UnicodeArrayTemplate_1 = __webpack_require__(75); +var UnicodeArrayTemplate_1 = __webpack_require__(74); var AbstractCustomNode_1 = __webpack_require__(6); var NodeUtils_1 = __webpack_require__(1); @@ -2315,8 +2315,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" __webpack_require__(8); var AppendState_1 = __webpack_require__(4); var NoCustomNodesPreset_1 = __webpack_require__(18); -var SelfDefendingTemplate_1 = __webpack_require__(76); -var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(77); +var SelfDefendingTemplate_1 = __webpack_require__(75); +var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(76); var AbstractCustomNode_1 = __webpack_require__(6); var JavaScriptObfuscator_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(1); @@ -2380,8 +2380,7 @@ var UnicodeArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; /***/ }, -/* 41 */, -/* 42 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2417,7 +2416,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) { exports.ConsoleOutputNodesGroup = ConsoleOutputNodesGroup; /***/ }, -/* 43 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2461,7 +2460,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) { exports.DebugProtectionNodesGroup = DebugProtectionNodesGroup; /***/ }, -/* 44 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2497,7 +2496,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) { exports.DomainLockNodesGroup = DomainLockNodesGroup; /***/ }, -/* 45 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2533,7 +2532,7 @@ var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) { exports.SelfDefendingNodesGroup = SelfDefendingNodesGroup; /***/ }, -/* 46 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2589,7 +2588,7 @@ var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) { exports.UnicodeArrayNodesGroup = UnicodeArrayNodesGroup; /***/ }, -/* 47 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2660,7 +2659,7 @@ var CatchClauseObfuscator = function (_AbstractNodeObfuscat) { exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 48 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2735,7 +2734,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 49 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2816,7 +2815,7 @@ var FunctionObfuscator = function (_AbstractNodeObfuscat) { exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 50 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2834,7 +2833,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var escodegen = __webpack_require__(11); var AbstractNodeObfuscator_1 = __webpack_require__(7); -var BooleanLiteralReplacer_1 = __webpack_require__(55); +var BooleanLiteralReplacer_1 = __webpack_require__(54); var Nodes_1 = __webpack_require__(2); var NumberLiteralReplacer_1 = __webpack_require__(21); var StringLiteralReplacer_1 = __webpack_require__(17); @@ -2881,7 +2880,7 @@ var LiteralObfuscator = function (_AbstractNodeObfuscat) { exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 51 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2966,7 +2965,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 52 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3027,7 +3026,7 @@ var MethodDefinitionObfuscator = function (_AbstractNodeObfuscat) { exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 53 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3113,7 +3112,7 @@ var ObjectExpressionObfuscator = function (_AbstractNodeObfuscat) { exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 54 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3190,7 +3189,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeObfuscat) { exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 55 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3229,7 +3228,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 56 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3250,12 +3249,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__(81); -var TSourceMapMode_1 = __webpack_require__(78); -var TUnicodeArrayEncoding_1 = __webpack_require__(79); +var class_validator_1 = __webpack_require__(80); +var TSourceMapMode_1 = __webpack_require__(77); +var TUnicodeArrayEncoding_1 = __webpack_require__(78); var DefaultPreset_1 = __webpack_require__(22); -var OptionsNormalizer_1 = __webpack_require__(57); -var ValidationErrorsFormatter_1 = __webpack_require__(58); +var OptionsNormalizer_1 = __webpack_require__(56); +var ValidationErrorsFormatter_1 = __webpack_require__(57); var Options = function Options(obfuscatorOptions) { _classCallCheck(this, Options); @@ -3301,7 +3300,7 @@ exports.Options = Options; var _a, _b; /***/ }, -/* 57 */ +/* 56 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3468,7 +3467,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNo exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 58 */ +/* 57 */ /***/ function(module, exports) { "use strict"; @@ -3535,7 +3534,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 59 */ +/* 58 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3547,9 +3546,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var estraverse = __webpack_require__(3); var NodeType_1 = __webpack_require__(5); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(60); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(61); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(62); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(59); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(60); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(61); var Nodes_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(1); @@ -3626,7 +3625,7 @@ var StackTraceAnalyzer = function () { exports.StackTraceAnalyzer = StackTraceAnalyzer; /***/ }, -/* 60 */ +/* 59 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3685,7 +3684,7 @@ var FunctionDeclarationCalleeDataExtractor = function () { exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; /***/ }, -/* 61 */ +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3747,7 +3746,7 @@ var FunctionExpressionCalleeDataExtractor = function () { exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; /***/ }, -/* 62 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3878,7 +3877,7 @@ var ObjectExpressionCalleeDataExtractor = function () { exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; /***/ }, -/* 63 */ +/* 62 */ /***/ function(module, exports) { "use strict"; @@ -3890,7 +3889,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 64 */ +/* 63 */ /***/ function(module, exports) { "use strict"; @@ -3902,7 +3901,7 @@ function Rc4Template() { exports.Rc4Template = Rc4Template; /***/ }, -/* 65 */ +/* 64 */ /***/ function(module, exports) { "use strict"; @@ -3914,7 +3913,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 66 */ +/* 65 */ /***/ function(module, exports) { "use strict"; @@ -3926,7 +3925,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 67 */ +/* 66 */ /***/ function(module, exports) { "use strict"; @@ -3938,7 +3937,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 68 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3951,7 +3950,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 69 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3964,7 +3963,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 70 */ +/* 69 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3977,7 +3976,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 71 */ +/* 70 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3990,7 +3989,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 72 */ +/* 71 */ /***/ function(module, exports) { "use strict"; @@ -4002,7 +4001,7 @@ function UnicodeArrayBase64DecodeNodeTemplate() { exports.UnicodeArrayBase64DecodeNodeTemplate = UnicodeArrayBase64DecodeNodeTemplate; /***/ }, -/* 73 */ +/* 72 */ /***/ function(module, exports) { "use strict"; @@ -4014,7 +4013,7 @@ function UnicodeArrayCallsWrapperTemplate() { exports.UnicodeArrayCallsWrapperTemplate = UnicodeArrayCallsWrapperTemplate; /***/ }, -/* 74 */ +/* 73 */ /***/ function(module, exports) { "use strict"; @@ -4026,7 +4025,7 @@ function UnicodeArrayRc4DecodeNodeTemplate() { exports.UnicodeArrayRc4DecodeNodeTemplate = UnicodeArrayRc4DecodeNodeTemplate; /***/ }, -/* 75 */ +/* 74 */ /***/ function(module, exports) { "use strict"; @@ -4038,7 +4037,7 @@ function UnicodeArrayTemplate() { exports.UnicodeArrayTemplate = UnicodeArrayTemplate; /***/ }, -/* 76 */ +/* 75 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4051,7 +4050,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 77 */ +/* 76 */ /***/ function(module, exports) { "use strict"; @@ -4062,6 +4061,13 @@ function UnicodeArrayRotateFunctionTemplate() { } exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; +/***/ }, +/* 77 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + /***/ }, /* 78 */ /***/ function(module, exports) { @@ -4073,42 +4079,34 @@ exports.UnicodeArrayRotateFunctionTemplate = UnicodeArrayRotateFunctionTemplate; /* 79 */ /***/ function(module, exports) { -"use strict"; -"use strict"; +module.exports = require("chance"); /***/ }, /* 80 */ /***/ function(module, exports) { -module.exports = require("chance"); +module.exports = require("class-validator"); /***/ }, /* 81 */ /***/ function(module, exports) { -module.exports = require("class-validator"); +module.exports = require("commander"); /***/ }, /* 82 */ /***/ function(module, exports) { -module.exports = require("commander"); +module.exports = require("fs"); /***/ }, /* 83 */ /***/ function(module, exports) { -module.exports = require("fs"); - -/***/ }, -/* 84 */ -/***/ function(module, exports) { - module.exports = require("mkdirp"); /***/ }, -/* 85 */, -/* 86 */ +/* 84 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/test/dev/test-performance.ts b/test/dev/test-performance.ts index 7cc8cabc..bcf60aa7 100644 --- a/test/dev/test-performance.ts +++ b/test/dev/test-performance.ts @@ -8,71 +8,75 @@ const JavaScriptObfuscator: any = require("../../index"); let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( ` - var start = new Date(); - var log = console.log; - console.log = function () {}; - - (function(){ - var result = 1, - term1 = 0, - term2 = 1, - i = 1; - while(i < 10) - { - var test = 10; - result = term1 + term2; - console.log(result); - term1 = term2; - term2 = result; - i++; - } - - console.log(test); - - var test = function (test) { - console.log(test); - - if (true) { - var test = 5 - } - - return test; - } - - console.log(test(1)); - - function test2 (abc) { - function test1 () { - console.log('inside', abc.item); - } - - console.log('тест', abc); - - var abc = {}; - - return abc.item = 15, test1(); - }; - - var regexptest = /version\\/(\\d+)/i; - console.log(regexptest); - - test2(22); - console.log(105.4); - console.log(true, false); - - var sA = 'shorthand1'; - var sB = 'shorthand2'; - - console.log({sA, sB}); - - try { - } catch (error) { - console.log(error); - } - })(); + (function (){ + var start = new Date(); + var log = console.log; + console.log = function () {}; - console.log = log; - console.log(new Date() - start); + (function(){ + ${String(` + var result = 1, + term1 = 0, + term2 = 1, + i = 1; + while(i < 10) + { + var test = 10; + result = term1 + term2; + console.log(result); + term1 = term2; + term2 = result; + i++; + } + + console.log(test); + + var test = function (test) { + console.log(test); + + if (true) { + var test = 5 + } + + return test; + } + + console.log(test(1)); + + function test2 (abc) { + function test1 () { + console.log('inside', abc.item); + } + + console.log('тест', abc); + + var abc = {}; + + return abc.item = 15, test1(); + }; + + var regexptest = /version\\/(\\d+)/i; + console.log(regexptest); + + test2(22); + console.log(105.4); + console.log(true, false); + + var sA = 'shorthand1'; + var sB = 'shorthand2'; + + console.log({sA, sB}); + + try { + } catch (error) { + console.log(error); + } + `).repeat(1000)} + })(); + + console.log = log; + console.log(new Date() - start); + })(); `, { disableConsoleOutput: false, From a2cbfe4ae52e131b3f7491b25586da735e2d0d3a Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 30 Oct 2016 22:31:59 +0300 Subject: [PATCH 105/138] compile preformance fix --- .npmignore | 1 + dist/index.js | 96 +- package.json | 3 +- scripts/test-dev | 2 +- scripts/test-dev-compile-performance | 3 + scripts/test-dev-performance | 3 - scripts/test-dev-runtime-performance | 3 + scripts/test-full | 2 +- src/custom-nodes/CustomNodeAppender.ts | 11 +- .../ConsoleOutputDisableExpressionNode.ts | 2 +- .../domain-lock-nodes/DomainLockNode.ts | 2 +- .../SelfDefendingUnicodeNode.ts | 2 +- .../StackTraceAnalyzer.ts | 42 +- test/dev/dev-compile-performance.ts | 19 + test/dev/dev-runtime-performance.ts | 84 + test/dev/{test.ts => dev.ts} | 22 +- test/dev/test-performance.ts | 87 - test/fixtures/compile-performance.js | 76382 ++++++++++++++++ test/index.spec.ts | 1 + .../custom-nodes/CustomNodeAppender.spec.ts | 96 +- .../StackTraceAnalyzer.spec.ts | 23 + 21 files changed, 76699 insertions(+), 187 deletions(-) create mode 100644 .npmignore create mode 100755 scripts/test-dev-compile-performance delete mode 100755 scripts/test-dev-performance create mode 100755 scripts/test-dev-runtime-performance create mode 100644 test/dev/dev-compile-performance.ts create mode 100644 test/dev/dev-runtime-performance.ts rename test/dev/{test.ts => dev.ts} (79%) delete mode 100644 test/dev/test-performance.ts create mode 100644 test/fixtures/compile-performance.js create mode 100644 test/unit-tests/stack-trace-analyzer/StackTraceAnalyzer.spec.ts diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000..9a60c118 --- /dev/null +++ b/.npmignore @@ -0,0 +1 @@ +test/fixtures/compile-performance.js \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 1763783d..3e5bd19a 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 = 84); +/******/ return __webpack_require__(__webpack_require__.s = 85); /******/ }) /************************************************************************/ /******/ ([ @@ -888,16 +888,11 @@ var CustomNodeAppender = function () { NodeUtils_1.NodeUtils.prependNode(targetBlockScopeBody, node); } }, { - key: 'getIndexByThreshold', - value: function getIndexByThreshold(blockStatementBodyLength) { - var threshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.1; - - if (threshold < 0 || threshold > 1) { - throw new RangeError('`threshold` parameter should has value between 0 and 1'); - } + key: 'getRandomStackTraceIndex', + value: function getRandomStackTraceIndex(stackTraceRootLength) { return Utils_1.Utils.getRandomGenerator().integer({ min: 0, - max: Math.round((blockStatementBodyLength - 1) * threshold) + max: Math.max(0, Math.round(stackTraceRootLength - 1)) }); } }, { @@ -1797,7 +1792,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { _createClass(ConsoleOutputDisableExpressionNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode, stackTraceData) { - CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getRandomStackTraceIndex(stackTraceData.length)); } }, { key: 'getNodeStructure', @@ -2021,7 +2016,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { _createClass(DomainLockNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode, stackTraceData) { - CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getRandomStackTraceIndex(stackTraceData.length)); } }, { key: 'getNodeStructure', @@ -2084,7 +2079,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { _createClass(SelfDefendingUnicodeNode, [{ key: 'appendNode', value: function appendNode(blockScopeNode, stackTraceData) { - CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)); + CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getRandomStackTraceIndex(stackTraceData.length)); } }, { key: 'getNodeStructure', @@ -3570,58 +3565,52 @@ var StackTraceAnalyzer = function () { value: function analyzeRecursive(blockScopeBody) { var _this = this; + var limitIndex = StackTraceAnalyzer.getLimitIndex(blockScopeBody.length); var stackTraceData = []; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - var _loop = function _loop() { - var rootNode = _step.value; - - estraverse.traverse(rootNode, { - enter: function enter(node) { - if (!Nodes_1.Nodes.isCallExpressionNode(node) || rootNode.parentNode !== NodeUtils_1.NodeUtils.getBlockScopeOfNode(node)) { + blockScopeBody.forEach(function (rootNode, index) { + if (index > limitIndex) { + return; + } + estraverse.traverse(rootNode, { + enter: function enter(node) { + if (!Nodes_1.Nodes.isCallExpressionNode(node) || rootNode.parentNode !== NodeUtils_1.NodeUtils.getBlockScopeOfNode(node)) { + return; + } + _this.calleeDataExtractors.forEach(function (calleeDataExtractor) { + var calleeData = new calleeDataExtractor(blockScopeBody, node.callee).extract(); + if (!calleeData) { return; } - _this.calleeDataExtractors.forEach(function (calleeDataExtractor) { - var calleeData = new calleeDataExtractor(blockScopeBody, node.callee).extract(); - if (!calleeData) { - return; - } - stackTraceData.push(Object.assign({}, calleeData, { - stackTrace: _this.analyzeRecursive(calleeData.callee.body) - })); - }); - } - }); - }; - - for (var _iterator = blockScopeBody[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - _loop(); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; + stackTraceData.push(Object.assign({}, calleeData, { + stackTrace: _this.analyzeRecursive(calleeData.callee.body) + })); + }); } + }); + }); + return stackTraceData; + } + }], [{ + key: 'getLimitIndex', + value: function getLimitIndex(blockScopeBodyLength) { + var lastIndex = blockScopeBodyLength - 1; + var limitThresholdActivationIndex = StackTraceAnalyzer.limitThresholdActivationLength - 1; + var limitIndex = lastIndex; + if (lastIndex > limitThresholdActivationIndex) { + limitIndex = Math.round(limitThresholdActivationIndex + lastIndex * StackTraceAnalyzer.limitThreshold); + if (limitIndex > lastIndex) { + limitIndex = lastIndex; } } - - return stackTraceData; + return limitIndex; } }]); return StackTraceAnalyzer; }(); +StackTraceAnalyzer.limitThresholdActivationLength = 25; +StackTraceAnalyzer.limitThreshold = 0.1; exports.StackTraceAnalyzer = StackTraceAnalyzer; /***/ }, @@ -4106,7 +4095,8 @@ module.exports = require("fs"); module.exports = require("mkdirp"); /***/ }, -/* 84 */ +/* 84 */, +/* 85 */ /***/ function(module, exports, __webpack_require__) { "use strict"; diff --git a/package.json b/package.json index 59807649..2e88dd40 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,8 @@ "watch": "scripts/watch", "test:compile": "scripts/test-compile", "test:dev": "scripts/test-dev", - "test:devPerformance": "scripts/test-dev-performance", + "test:devCompilePerformance": "scripts/test-dev-compile-performance", + "test:devRuntimePerformance": "scripts/test-dev-runtime-performance", "test:full": "scripts/test-full", "test:coveralls": "scripts/test-coveralls", "test:mocha": "scripts/test-mocha", diff --git a/scripts/test-dev b/scripts/test-dev index 9859cff9..574c877f 100755 --- a/scripts/test-dev +++ b/scripts/test-dev @@ -1,3 +1,3 @@ #!/bin/bash -$(npm bin)/ts-node test/dev/test.ts \ No newline at end of file +$(npm bin)/ts-node test/dev/dev.ts \ No newline at end of file diff --git a/scripts/test-dev-compile-performance b/scripts/test-dev-compile-performance new file mode 100755 index 00000000..830f2734 --- /dev/null +++ b/scripts/test-dev-compile-performance @@ -0,0 +1,3 @@ +#!/bin/bash + +$(npm bin)/ts-node test/dev/dev-compile-performance.ts \ No newline at end of file diff --git a/scripts/test-dev-performance b/scripts/test-dev-performance deleted file mode 100755 index f068fd77..00000000 --- a/scripts/test-dev-performance +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -$(npm bin)/ts-node test/dev/test-performance.ts \ No newline at end of file diff --git a/scripts/test-dev-runtime-performance b/scripts/test-dev-runtime-performance new file mode 100755 index 00000000..b398c877 --- /dev/null +++ b/scripts/test-dev-runtime-performance @@ -0,0 +1,3 @@ +#!/bin/bash + +$(npm bin)/ts-node test/dev/dev-runtime-performance.ts \ No newline at end of file diff --git a/scripts/test-full b/scripts/test-full index bd2a5535..268eabb5 100755 --- a/scripts/test-full +++ b/scripts/test-full @@ -1,6 +1,6 @@ #!/bin/bash npm run test:compile && -node test-tmp/test/dev/test.js && +node test-tmp/test/dev/dev.js && $(npm bin)/istanbul cover $(npm bin)/_mocha -- test-tmp/test/index.spec.js && npm run test:removeTmpDir \ No newline at end of file diff --git a/src/custom-nodes/CustomNodeAppender.ts b/src/custom-nodes/CustomNodeAppender.ts index 8dc0c5d6..5e23c543 100644 --- a/src/custom-nodes/CustomNodeAppender.ts +++ b/src/custom-nodes/CustomNodeAppender.ts @@ -47,17 +47,12 @@ export class CustomNodeAppender { } /** - * @param blockStatementBodyLength - * @param threshold + * @param stackTraceRootLength */ - public static getIndexByThreshold (blockStatementBodyLength: number, threshold: number = 0.1): number { - if (threshold < 0 || threshold > 1) { - throw new RangeError('`threshold` parameter should has value between 0 and 1'); - } - + public static getRandomStackTraceIndex (stackTraceRootLength: number): number { return Utils.getRandomGenerator().integer({ min: 0, - max: Math.round((blockStatementBodyLength - 1) * threshold) + max: Math.max(0, Math.round(stackTraceRootLength - 1)) }); } diff --git a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts index b2866707..2128a1e8 100644 --- a/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts +++ b/src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts @@ -27,7 +27,7 @@ export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode { stackTraceData, blockScopeNode.body, this.getNode(), - CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + CustomNodeAppender.getRandomStackTraceIndex(stackTraceData.length) ); } diff --git a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts index a2a040d3..0979c6c9 100644 --- a/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts +++ b/src/custom-nodes/domain-lock-nodes/DomainLockNode.ts @@ -30,7 +30,7 @@ export class DomainLockNode extends AbstractCustomNode { stackTraceData, blockScopeNode.body, this.getNode(), - CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + CustomNodeAppender.getRandomStackTraceIndex(stackTraceData.length) ); } diff --git a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts index 7a08f42a..6234b369 100644 --- a/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts +++ b/src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts @@ -30,7 +30,7 @@ export class SelfDefendingUnicodeNode extends AbstractCustomNode { stackTraceData, blockScopeNode.body, this.getNode(), - CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length) + CustomNodeAppender.getRandomStackTraceIndex(stackTraceData.length) ); } diff --git a/src/stack-trace-analyzer/StackTraceAnalyzer.ts b/src/stack-trace-analyzer/StackTraceAnalyzer.ts index 34089e8d..10f41089 100644 --- a/src/stack-trace-analyzer/StackTraceAnalyzer.ts +++ b/src/stack-trace-analyzer/StackTraceAnalyzer.ts @@ -48,6 +48,16 @@ import { NodeUtils } from '../NodeUtils'; * ] */ export class StackTraceAnalyzer implements IStackTraceAnalyzer { + /** + * @type {number} + */ + private static limitThresholdActivationLength: number = 25; + + /** + * @type {number} + */ + private static limitThreshold: number = 0.1; + /** * @type {ESTree.Node[]} */ @@ -62,6 +72,29 @@ export class StackTraceAnalyzer implements IStackTraceAnalyzer { [NodeType.ObjectExpression, ObjectExpressionCalleeDataExtractor] ]); + /** + * @param blockScopeBodyLength + * @returns {number} + */ + public static getLimitIndex (blockScopeBodyLength: number): number { + const lastIndex: number = blockScopeBodyLength - 1; + const limitThresholdActivationIndex: number = StackTraceAnalyzer.limitThresholdActivationLength - 1; + + let limitIndex: number = lastIndex; + + if (lastIndex > limitThresholdActivationIndex) { + limitIndex = Math.round( + limitThresholdActivationIndex + (lastIndex * StackTraceAnalyzer.limitThreshold) + ); + + if (limitIndex > lastIndex) { + limitIndex = lastIndex; + } + } + + return limitIndex; + } + /** * @param blockScopeBody */ @@ -81,9 +114,14 @@ export class StackTraceAnalyzer implements IStackTraceAnalyzer { * @returns {IStackTraceData[]} */ private analyzeRecursive (blockScopeBody: ESTree.Node[]): IStackTraceData[] { + const limitIndex: number = StackTraceAnalyzer.getLimitIndex(blockScopeBody.length); const stackTraceData: IStackTraceData[] = []; - for (const rootNode of blockScopeBody) { + blockScopeBody.forEach((rootNode, index) => { + if (index > limitIndex) { + return; + } + estraverse.traverse(rootNode, { enter: (node: ESTree.Node): any => { if (!Nodes.isCallExpressionNode(node) || rootNode.parentNode !== NodeUtils.getBlockScopeOfNode(node)) { @@ -106,7 +144,7 @@ export class StackTraceAnalyzer implements IStackTraceAnalyzer { }); } }); - } + }); return stackTraceData; } diff --git a/test/dev/dev-compile-performance.ts b/test/dev/dev-compile-performance.ts new file mode 100644 index 00000000..9b75f874 --- /dev/null +++ b/test/dev/dev-compile-performance.ts @@ -0,0 +1,19 @@ +'use strict'; + +import * as fs from 'fs'; + +if (!(global)._babelPolyfill) { + require('babel-polyfill'); +} + +(function () { + const JavaScriptObfuscator: any = require("../../index"); + + let start: any = new Date(); + + JavaScriptObfuscator.obfuscate( + fs.readFileSync('test/fixtures/compile-performance.js', 'utf8') + ).getObfuscatedCode(); + + console.log(`Total time: ${new Date() - start}`); +})(); diff --git a/test/dev/dev-runtime-performance.ts b/test/dev/dev-runtime-performance.ts new file mode 100644 index 00000000..b3f64d55 --- /dev/null +++ b/test/dev/dev-runtime-performance.ts @@ -0,0 +1,84 @@ +'use strict'; + +if (!(global)._babelPolyfill) { + require('babel-polyfill'); +} + +(function () { + const JavaScriptObfuscator: any = require("../../index"); + + let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( + ` + var start = new Date(); + var log = console.log; + console.log = function () {}; + + ${String(` + var result = 1, + term1 = 0, + term2 = 1, + i = 1; + while(i < 10) + { + var test = 10; + result = term1 + term2; + console.log(result); + term1 = term2; + term2 = result; + i++; + } + + console.log(test); + + var test = function (test) { + console.log(test); + + if (true) { + var test = 5 + } + + return test; + } + + console.log(test(1)); + + function test2 (abc) { + function test1 () { + console.log('inside', abc.item); + } + + console.log('тест', abc); + + var abc = {}; + + return abc.item = 15, test1(); + }; + + var regexptest = /version\\/(\\d+)/i; + console.log(regexptest); + + test2(22); + console.log(105.4); + console.log(true, false); + + var sA = 'shorthand1'; + var sB = 'shorthand2'; + + console.log({sA, sB}); + + try { + } catch (error) { + console.log(error); + } + `).repeat(200)} + + console.log = log; + console.log(new Date() - start); + `, + { + disableConsoleOutput: false, + } + ).getObfuscatedCode(); + + console.log(eval(obfuscatedCode)); +})(); diff --git a/test/dev/test.ts b/test/dev/dev.ts similarity index 79% rename from test/dev/test.ts rename to test/dev/dev.ts index 47231c6c..bc38c545 100644 --- a/test/dev/test.ts +++ b/test/dev/dev.ts @@ -4,10 +4,11 @@ if (!(global)._babelPolyfill) { require('babel-polyfill'); } -const JavaScriptObfuscator: any = require("../../index"); +(function () { + const JavaScriptObfuscator: any = require("../../index"); -let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( - ` + let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( + ` (function(){ var result = 1, term1 = 0, @@ -67,11 +68,12 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( } })(); `, - { - disableConsoleOutput: false, - unicodeArrayEncoding: 'rc4' - } -).getObfuscatedCode(); + { + disableConsoleOutput: false, + unicodeArrayEncoding: 'rc4' + } + ).getObfuscatedCode(); -console.log(obfuscatedCode); -console.log(eval(obfuscatedCode)); + console.log(obfuscatedCode); + console.log(eval(obfuscatedCode)); +})(); diff --git a/test/dev/test-performance.ts b/test/dev/test-performance.ts deleted file mode 100644 index bcf60aa7..00000000 --- a/test/dev/test-performance.ts +++ /dev/null @@ -1,87 +0,0 @@ -'use strict'; - -if (!(global)._babelPolyfill) { - require('babel-polyfill'); -} - -const JavaScriptObfuscator: any = require("../../index"); - -let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( - ` - (function (){ - var start = new Date(); - var log = console.log; - console.log = function () {}; - - (function(){ - ${String(` - var result = 1, - term1 = 0, - term2 = 1, - i = 1; - while(i < 10) - { - var test = 10; - result = term1 + term2; - console.log(result); - term1 = term2; - term2 = result; - i++; - } - - console.log(test); - - var test = function (test) { - console.log(test); - - if (true) { - var test = 5 - } - - return test; - } - - console.log(test(1)); - - function test2 (abc) { - function test1 () { - console.log('inside', abc.item); - } - - console.log('тест', abc); - - var abc = {}; - - return abc.item = 15, test1(); - }; - - var regexptest = /version\\/(\\d+)/i; - console.log(regexptest); - - test2(22); - console.log(105.4); - console.log(true, false); - - var sA = 'shorthand1'; - var sB = 'shorthand2'; - - console.log({sA, sB}); - - try { - } catch (error) { - console.log(error); - } - `).repeat(1000)} - })(); - - console.log = log; - console.log(new Date() - start); - })(); - `, - { - disableConsoleOutput: false, - unicodeArrayEncoding: 'rc4' - } -).getObfuscatedCode(); - -console.log(eval(obfuscatedCode)); diff --git a/test/fixtures/compile-performance.js b/test/fixtures/compile-performance.js new file mode 100644 index 00000000..bbe2fab8 --- /dev/null +++ b/test/fixtures/compile-performance.js @@ -0,0 +1,76382 @@ +/******/ (function(modules) { // webpackBootstrap + /******/ // install a JSONP callback for chunk loading + /******/ var parentJsonpFunction = window["webpackJsonp"]; + /******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) { + /******/ // add "moreModules" to the modules object, + /******/ // then flag all "chunkIds" as loaded and fire callback + /******/ var moduleId, chunkId, i = 0, resolves = [], result; + /******/ for(;i < chunkIds.length; i++) { + /******/ chunkId = chunkIds[i]; + /******/ if(installedChunks[chunkId]) + /******/ resolves.push(installedChunks[chunkId][0]); + /******/ installedChunks[chunkId] = 0; + /******/ } + /******/ for(moduleId in moreModules) { + /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { + /******/ modules[moduleId] = moreModules[moduleId]; + /******/ } + /******/ } + /******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules); + /******/ while(resolves.length) + /******/ resolves.shift()(); + /******/ if(executeModules) { + /******/ for(i=0; i < executeModules.length; i++) { + /******/ result = __webpack_require__(__webpack_require__.s = executeModules[i]); + /******/ } + /******/ } + /******/ return result; + /******/ }; + + /******/ // The module cache + /******/ var installedModules = {}; + + /******/ // objects to store loaded and loading chunks + /******/ var installedChunks = { + /******/ 2: 0 + /******/ }; + + /******/ // The require function + /******/ function __webpack_require__(moduleId) { + + /******/ // Check if module is in cache + /******/ if(installedModules[moduleId]) + /******/ return installedModules[moduleId].exports; + + /******/ // Create a new module (and put it into the cache) + /******/ var module = installedModules[moduleId] = { + /******/ i: moduleId, + /******/ l: false, + /******/ exports: {} + /******/ }; + + /******/ // Execute the module function + /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + + /******/ // Flag the module as loaded + /******/ module.l = true; + + /******/ // Return the exports of the module + /******/ return module.exports; + /******/ } + + /******/ // This file contains only the entry chunk. + /******/ // The chunk loading function for additional chunks + /******/ __webpack_require__.e = function requireEnsure(chunkId) { + /******/ if(installedChunks[chunkId] === 0) + /******/ return Promise.resolve(); + + /******/ // an Promise means "currently loading". + /******/ if(installedChunks[chunkId]) { + /******/ return installedChunks[chunkId][2]; + /******/ } + /******/ // start chunk loading + /******/ var head = document.getElementsByTagName('head')[0]; + /******/ var script = document.createElement('script'); + /******/ script.type = 'text/javascript'; + /******/ script.charset = 'utf-8'; + /******/ script.async = true; + /******/ script.timeout = 120000; + + /******/ script.src = __webpack_require__.p + "js/chunks/" + ({"0":"main","1":"styles"}[chunkId]||chunkId) + "." + {"0":"32124e2749f372f2c348","1":"6bd84282ef3f94ec986f"}[chunkId] + ".js"; + /******/ var timeout = setTimeout(onScriptComplete, 120000); + /******/ script.onerror = script.onload = onScriptComplete; + /******/ function onScriptComplete() { + /******/ // avoid mem leaks in IE. + /******/ script.onerror = script.onload = null; + /******/ clearTimeout(timeout); + /******/ var chunk = installedChunks[chunkId]; + /******/ if(chunk !== 0) { + /******/ if(chunk) chunk[1](new Error('Loading chunk ' + chunkId + ' failed.')); + /******/ installedChunks[chunkId] = undefined; + /******/ } + /******/ }; + /******/ head.appendChild(script); + + /******/ var promise = new Promise(function(resolve, reject) { + /******/ installedChunks[chunkId] = [resolve, reject]; + /******/ }); + /******/ return installedChunks[chunkId][2] = promise; + /******/ }; + + /******/ // expose the modules object (__webpack_modules__) + /******/ __webpack_require__.m = modules; + + /******/ // expose the module cache + /******/ __webpack_require__.c = installedModules; + + /******/ // identity function for calling harmory imports with the correct context + /******/ __webpack_require__.i = function(value) { return value; }; + + /******/ // define getter function for harmory exports + /******/ __webpack_require__.d = function(exports, name, getter) { + /******/ Object.defineProperty(exports, name, { + /******/ configurable: false, + /******/ enumerable: true, + /******/ get: getter + /******/ }); + /******/ }; + + /******/ // getDefaultExport function for compatibility with non-harmony modules + /******/ __webpack_require__.n = function(module) { + /******/ var getter = module && module.__esModule ? + /******/ function getDefault() { return module['default']; } : + /******/ function getModuleExports() { return module; }; + /******/ __webpack_require__.d(getter, 'a', getter); + /******/ return getter; + /******/ }; + + /******/ // Object.prototype.hasOwnProperty.call + /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; + + /******/ // __webpack_public_path__ + /******/ __webpack_require__.p = ""; + + /******/ // on error function for async loading + /******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; + + /******/ // Load entry module and return exports + /******/ return __webpack_require__(__webpack_require__.s = 964); + /******/ }) +/************************************************************************/ +/******/ ([ + /* 0 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + "use strict"; + var root_1 = __webpack_require__(27); + var toSubscriber_1 = __webpack_require__(961); + var observable_1 = __webpack_require__(173); + /** + * A representation of any set of values over any amount of time. This the most basic building block + * of RxJS. + * + * @class Observable + */ + var Observable = (function () { + /** + * @constructor + * @param {Function} subscribe the function that is called when the Observable is + * initially subscribed to. This function is given a Subscriber, to which new values + * can be `next`ed, or an `error` method can be called to raise an error, or + * `complete` can be called to notify of a successful completion. + */ + function Observable(subscribe) { + this._isScalar = false; + if (subscribe) { + this._subscribe = subscribe; + } + } + /** + * Creates a new Observable, with this Observable as the source, and the passed + * operator defined as the new observable's operator. + * @method lift + * @param {Operator} operator the operator defining the operation to take on the observable + * @return {Observable} a new observable with the Operator applied + */ + Observable.prototype.lift = function (operator) { + var observable = new Observable(); + observable.source = this; + observable.operator = operator; + return observable; + }; + /** + * Registers handlers for handling emitted values, error and completions from the observable, and + * executes the observable's subscriber function, which will take action to set up the underlying data stream + * @method subscribe + * @param {PartialObserver|Function} observerOrNext (optional) either an observer defining all functions to be called, + * or the first of three possible handlers, which is the handler for each value emitted from the observable. + * @param {Function} error (optional) a handler for a terminal event resulting from an error. If no error handler is provided, + * the error will be thrown as unhandled + * @param {Function} complete (optional) a handler for a terminal event resulting from successful completion. + * @return {ISubscription} a subscription reference to the registered handlers + */ + Observable.prototype.subscribe = function (observerOrNext, error, complete) { + var operator = this.operator; + var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete); + if (operator) { + operator.call(sink, this); + } + else { + sink.add(this._subscribe(sink)); + } + if (sink.syncErrorThrowable) { + sink.syncErrorThrowable = false; + if (sink.syncErrorThrown) { + throw sink.syncErrorValue; + } + } + return sink; + }; + /** + * @method forEach + * @param {Function} next a handler for each value emitted by the observable + * @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise + * @return {Promise} a promise that either resolves on observable completion or + * rejects with the handled error + */ + Observable.prototype.forEach = function (next, PromiseCtor) { + var _this = this; + if (!PromiseCtor) { + if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) { + PromiseCtor = root_1.root.Rx.config.Promise; + } + else if (root_1.root.Promise) { + PromiseCtor = root_1.root.Promise; + } + } + if (!PromiseCtor) { + throw new Error('no Promise impl found'); + } + return new PromiseCtor(function (resolve, reject) { + var subscription = _this.subscribe(function (value) { + if (subscription) { + // if there is a subscription, then we can surmise + // the next handling is asynchronous. Any errors thrown + // need to be rejected explicitly and unsubscribe must be + // called manually + try { + next(value); + } + catch (err) { + reject(err); + subscription.unsubscribe(); + } + } + else { + // if there is NO subscription, then we're getting a nexted + // value synchronously during subscription. We can just call it. + // If it errors, Observable's `subscribe` will ensure the + // unsubscription logic is called, then synchronously rethrow the error. + // After that, Promise will trap the error and send it + // down the rejection path. + next(value); + } + }, reject, resolve); + }); + }; + Observable.prototype._subscribe = function (subscriber) { + return this.source.subscribe(subscriber); + }; + /** + * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable + * @method Symbol.observable + * @return {Observable} this instance of the observable + */ + Observable.prototype[observable_1.$$observable] = function () { + return this; + }; + // HACK: Since TypeScript inherits static properties too, we have to + // fight against TypeScript here so Subject can have a different static create signature + /** + * Creates a new cold Observable by calling the Observable constructor + * @static true + * @owner Observable + * @method create + * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor + * @return {Observable} a new cold observable + */ + Observable.create = function (subscribe) { + return new Observable(subscribe); + }; + return Observable; + }()); + exports.Observable = Observable; +//# sourceMappingURL=Observable.js.map + + /***/ }, + /* 1 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_core__ = __webpack_require__(481); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "assertPlatform", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_29"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "destroyPlatform", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_30"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "getPlatform", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_31"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "createPlatform", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_32"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ApplicationRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_21"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "enableProdMode", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_33"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "isDevMode", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["c"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "createPlatformFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_10"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "PlatformRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_34"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "APP_ID", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_35"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "PACKAGE_ROOT_URL", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["y"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "APP_BOOTSTRAP_LISTENER", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_36"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "PLATFORM_INITIALIZER", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_13"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ApplicationInitStatus", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_37"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "APP_INITIALIZER", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_38"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "DebugElement", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_39"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "DebugNode", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_40"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "asNativeElements", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_41"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "getDebugNode", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_22"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Testability", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_26"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "TestabilityRegistry", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_42"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "setTestabilityGetter", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_19"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "TRANSLATIONS", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_7"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "TRANSLATIONS_FORMAT", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["u"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "LOCALE_ID", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["t"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ApplicationModule", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_27"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "wtfCreateScope", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_43"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "wtfLeave", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_44"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "wtfStartTimeRange", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_45"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "wtfEndTimeRange", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_46"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Type", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_2"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "EventEmitter", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_14"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ErrorHandler", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_25"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationTransitionEvent", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_47"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationPlayer", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_48"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Sanitizer", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_24"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "SecurityContext", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["s"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Attribute", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_1"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ContentChild", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_49"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ContentChildren", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_50"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Query", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["F"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ViewChild", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_51"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ViewChildren", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_52"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ANALYZE_FOR_ENTRY_COMPONENTS", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["f"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Component", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["G"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Directive", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["z"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "HostBinding", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["D"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "HostListener", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["E"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Input", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["B"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Output", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["C"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Pipe", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["Q"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "OnDestroy", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["I"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AfterContentInit", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["L"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AfterViewChecked", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["O"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AfterViewInit", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["N"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "DoCheck", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["J"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "OnChanges", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["K"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AfterContentChecked", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["M"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "OnInit", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["H"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "CUSTOM_ELEMENTS_SCHEMA", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_6"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "NO_ERRORS_SCHEMA", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_5"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "NgModule", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["P"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ViewEncapsulation", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["a"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Class", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_53"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "forwardRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_28"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "resolveForwardRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["A"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Injector", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["p"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ReflectiveInjector", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_8"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ResolvedReflectiveFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_54"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ReflectiveKey", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_55"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "OpaqueToken", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["v"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "NgZone", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_20"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "RenderComponentType", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["j"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Renderer", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["q"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "RootRenderer", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_23"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "COMPILER_OPTIONS", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_9"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "CompilerFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_12"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ModuleWithComponentFactories", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_3"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Compiler", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_4"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ComponentFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["n"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ComponentRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_56"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ComponentFactoryResolver", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["m"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ElementRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["g"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "NgModuleFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["o"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "NgModuleRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_57"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "NgModuleFactoryLoader", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_58"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "getModuleFactory", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_59"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "QueryList", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["k"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "SystemJsNgModuleLoader", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_60"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "SystemJsNgModuleLoaderConfig", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_61"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "TemplateRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["l"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ViewContainerRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["h"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "EmbeddedViewRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_62"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ViewRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_63"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ChangeDetectionStrategy", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["b"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "ChangeDetectorRef", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["i"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "CollectionChangeRecord", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_64"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "DefaultIterableDiffer", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_65"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "IterableDiffers", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_15"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "KeyValueChangeRecord", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_66"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "KeyValueDiffers", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_16"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "SimpleChange", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["r"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "WrappedValue", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_17"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "platformCore", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_11"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "__core_private__", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["e"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AUTO_STYLE", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_18"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationEntryMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_67"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationStateMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_68"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationStateDeclarationMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["R"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationStateTransitionMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["S"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_69"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationKeyframesSequenceMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["U"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationStyleMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["T"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationAnimateMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["V"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationWithStepsMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["W"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationSequenceMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_70"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "AnimationGroupMetadata", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["X"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "animate", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_71"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "group", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_72"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "sequence", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_73"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "style", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_74"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "state", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_75"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "keyframes", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_76"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "transition", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_77"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "trigger", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_78"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Inject", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["x"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Optional", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["w"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Injectable", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["d"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Self", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["Z"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "SkipSelf", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["_0"]; }); + /* harmony namespace reexport (by provided) */ __webpack_require__.d(exports, "Host", function() { return __WEBPACK_IMPORTED_MODULE_0__src_core__["Y"]; }); + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + /** + * @module + * @description + * Entry point for all public APIs of the core package. + */ + +//# sourceMappingURL=index.js.map + + /***/ }, + /* 2 */ + /***/ function(module, exports, __webpack_require__) { + + var global = __webpack_require__(11) + , core = __webpack_require__(69) + , hide = __webpack_require__(40) + , redefine = __webpack_require__(37) + , ctx = __webpack_require__(58) + , PROTOTYPE = 'prototype'; + + var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE] + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}) + , key, own, out, exp; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // extend global + if(target)redefine(target, key, out, type & $export.U); + // export + if(exports[key] != out)hide(exports, key, exp); + if(IS_PROTO && expProto[key] != out)expProto[key] = out; + } + }; + global.core = core; +// type bitmap + $export.F = 1; // forced + $export.G = 2; // global + $export.S = 4; // static + $export.P = 8; // proto + $export.B = 16; // bind + $export.W = 32; // wrap + $export.U = 64; // safe + $export.R = 128; // real proto method for `library` + module.exports = $export; + + /***/ }, + /* 3 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var isFunction_1 = __webpack_require__(266); + var Subscription_1 = __webpack_require__(22); + var Observer_1 = __webpack_require__(695); + var rxSubscriber_1 = __webpack_require__(174); + /** + * Implements the {@link Observer} interface and extends the + * {@link Subscription} class. While the {@link Observer} is the public API for + * consuming the values of an {@link Observable}, all Observers get converted to + * a Subscriber, in order to provide Subscription-like capabilities such as + * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for + * implementing operators, but it is rarely used as a public API. + * + * @class Subscriber + */ + var Subscriber = (function (_super) { + __extends(Subscriber, _super); + /** + * @param {Observer|function(value: T): void} [destinationOrNext] A partially + * defined Observer or a `next` callback function. + * @param {function(e: ?any): void} [error] The `error` callback of an + * Observer. + * @param {function(): void} [complete] The `complete` callback of an + * Observer. + */ + function Subscriber(destinationOrNext, error, complete) { + _super.call(this); + this.syncErrorValue = null; + this.syncErrorThrown = false; + this.syncErrorThrowable = false; + this.isStopped = false; + switch (arguments.length) { + case 0: + this.destination = Observer_1.empty; + break; + case 1: + if (!destinationOrNext) { + this.destination = Observer_1.empty; + break; + } + if (typeof destinationOrNext === 'object') { + if (destinationOrNext instanceof Subscriber) { + this.destination = destinationOrNext; + this.destination.add(this); + } + else { + this.syncErrorThrowable = true; + this.destination = new SafeSubscriber(this, destinationOrNext); + } + break; + } + default: + this.syncErrorThrowable = true; + this.destination = new SafeSubscriber(this, destinationOrNext, error, complete); + break; + } + } + Subscriber.prototype[rxSubscriber_1.$$rxSubscriber] = function () { return this; }; + /** + * A static factory for a Subscriber, given a (potentially partial) definition + * of an Observer. + * @param {function(x: ?T): void} [next] The `next` callback of an Observer. + * @param {function(e: ?any): void} [error] The `error` callback of an + * Observer. + * @param {function(): void} [complete] The `complete` callback of an + * Observer. + * @return {Subscriber} A Subscriber wrapping the (partially defined) + * Observer represented by the given arguments. + */ + Subscriber.create = function (next, error, complete) { + var subscriber = new Subscriber(next, error, complete); + subscriber.syncErrorThrowable = false; + return subscriber; + }; + /** + * The {@link Observer} callback to receive notifications of type `next` from + * the Observable, with a value. The Observable may call this method 0 or more + * times. + * @param {T} [value] The `next` value. + * @return {void} + */ + Subscriber.prototype.next = function (value) { + if (!this.isStopped) { + this._next(value); + } + }; + /** + * The {@link Observer} callback to receive notifications of type `error` from + * the Observable, with an attached {@link Error}. Notifies the Observer that + * the Observable has experienced an error condition. + * @param {any} [err] The `error` exception. + * @return {void} + */ + Subscriber.prototype.error = function (err) { + if (!this.isStopped) { + this.isStopped = true; + this._error(err); + } + }; + /** + * The {@link Observer} callback to receive a valueless notification of type + * `complete` from the Observable. Notifies the Observer that the Observable + * has finished sending push-based notifications. + * @return {void} + */ + Subscriber.prototype.complete = function () { + if (!this.isStopped) { + this.isStopped = true; + this._complete(); + } + }; + Subscriber.prototype.unsubscribe = function () { + if (this.closed) { + return; + } + this.isStopped = true; + _super.prototype.unsubscribe.call(this); + }; + Subscriber.prototype._next = function (value) { + this.destination.next(value); + }; + Subscriber.prototype._error = function (err) { + this.destination.error(err); + this.unsubscribe(); + }; + Subscriber.prototype._complete = function () { + this.destination.complete(); + this.unsubscribe(); + }; + return Subscriber; + }(Subscription_1.Subscription)); + exports.Subscriber = Subscriber; + /** + * We need this JSDoc comment for affecting ESDoc. + * @ignore + * @extends {Ignored} + */ + var SafeSubscriber = (function (_super) { + __extends(SafeSubscriber, _super); + function SafeSubscriber(_parent, observerOrNext, error, complete) { + _super.call(this); + this._parent = _parent; + var next; + var context = this; + if (isFunction_1.isFunction(observerOrNext)) { + next = observerOrNext; + } + else if (observerOrNext) { + context = observerOrNext; + next = observerOrNext.next; + error = observerOrNext.error; + complete = observerOrNext.complete; + if (isFunction_1.isFunction(context.unsubscribe)) { + this.add(context.unsubscribe.bind(context)); + } + context.unsubscribe = this.unsubscribe.bind(this); + } + this._context = context; + this._next = next; + this._error = error; + this._complete = complete; + } + SafeSubscriber.prototype.next = function (value) { + if (!this.isStopped && this._next) { + var _parent = this._parent; + if (!_parent.syncErrorThrowable) { + this.__tryOrUnsub(this._next, value); + } + else if (this.__tryOrSetError(_parent, this._next, value)) { + this.unsubscribe(); + } + } + }; + SafeSubscriber.prototype.error = function (err) { + if (!this.isStopped) { + var _parent = this._parent; + if (this._error) { + if (!_parent.syncErrorThrowable) { + this.__tryOrUnsub(this._error, err); + this.unsubscribe(); + } + else { + this.__tryOrSetError(_parent, this._error, err); + this.unsubscribe(); + } + } + else if (!_parent.syncErrorThrowable) { + this.unsubscribe(); + throw err; + } + else { + _parent.syncErrorValue = err; + _parent.syncErrorThrown = true; + this.unsubscribe(); + } + } + }; + SafeSubscriber.prototype.complete = function () { + if (!this.isStopped) { + var _parent = this._parent; + if (this._complete) { + if (!_parent.syncErrorThrowable) { + this.__tryOrUnsub(this._complete); + this.unsubscribe(); + } + else { + this.__tryOrSetError(_parent, this._complete); + this.unsubscribe(); + } + } + else { + this.unsubscribe(); + } + } + }; + SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) { + try { + fn.call(this._context, value); + } + catch (err) { + this.unsubscribe(); + throw err; + } + }; + SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) { + try { + fn.call(this._context, value); + } + catch (err) { + parent.syncErrorValue = err; + parent.syncErrorThrown = true; + return true; + } + return false; + }; + SafeSubscriber.prototype._unsubscribe = function () { + var _parent = this._parent; + this._context = null; + this._parent = null; + _parent.unsubscribe(); + }; + return SafeSubscriber; + }(Subscriber)); +//# sourceMappingURL=Subscriber.js.map + + /***/ }, + /* 4 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* WEBPACK VAR INJECTION */(function(global) {/* unused harmony export scheduleMicroTask */ + /* harmony export (binding) */ __webpack_require__.d(exports, "p", function() { return _global; }); + /* unused harmony export getTypeNameForDebugging */ + /* unused harmony export Math */ + /* unused harmony export Date */ + /* harmony export (immutable) */ exports["a"] = isPresent; + /* harmony export (immutable) */ exports["b"] = isBlank; + /* unused harmony export isBoolean */ + /* unused harmony export isNumber */ + /* harmony export (immutable) */ exports["g"] = isString; + /* unused harmony export isFunction */ + /* unused harmony export isType */ + /* harmony export (immutable) */ exports["l"] = isStringMap; + /* harmony export (immutable) */ exports["h"] = isStrictStringMap; + /* harmony export (immutable) */ exports["c"] = isArray; + /* unused harmony export isDate */ + /* unused harmony export noop */ + /* harmony export (immutable) */ exports["q"] = stringify; + /* unused harmony export serializeEnum */ + /* unused harmony export deserializeEnum */ + /* unused harmony export resolveEnumToken */ + /* harmony export (binding) */ __webpack_require__.d(exports, "f", function() { return StringWrapper; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "n", function() { return StringJoiner; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "m", function() { return NumberWrapper; }); + /* unused harmony export RegExp */ + /* unused harmony export FunctionWrapper */ + /* unused harmony export looseIdentical */ + /* unused harmony export getMapKey */ + /* harmony export (immutable) */ exports["k"] = normalizeBlank; + /* harmony export (immutable) */ exports["j"] = normalizeBool; + /* harmony export (immutable) */ exports["d"] = isJsObject; + /* unused harmony export print */ + /* unused harmony export warn */ + /* unused harmony export Json */ + /* unused harmony export DateWrapper */ + /* unused harmony export setValueOnPath */ + /* harmony export (immutable) */ exports["e"] = getSymbolIterator; + /* harmony export (immutable) */ exports["r"] = evalExpression; + /* harmony export (immutable) */ exports["i"] = isPrimitive; + /* unused harmony export hasConstructor */ + /* unused harmony export escape */ + /* harmony export (immutable) */ exports["o"] = escapeRegExp; + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + var globalScope; + if (typeof window === 'undefined') { + if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) { + // TODO: Replace any with WorkerGlobalScope from lib.webworker.d.ts #3492 + globalScope = self; + } + else { + globalScope = global; + } + } + else { + globalScope = window; + } + function scheduleMicroTask(fn) { + Zone.current.scheduleMicroTask('scheduleMicrotask', fn); + } +// Need to declare a new variable for global here since TypeScript +// exports the original value of the symbol. + var _global = globalScope; + + function getTypeNameForDebugging(type) { + if (type['name']) { + return type['name']; + } + return typeof type; + } + var Math = _global.Math; + var Date = _global.Date; +// TODO: remove calls to assert in production environment +// Note: Can't just export this and import in in other files +// as `assert` is a reserved keyword in Dart + _global.assert = function assert(condition) { + // TODO: to be fixed properly via #2830, noop for now + }; + function isPresent(obj) { + return obj !== undefined && obj !== null; + } + function isBlank(obj) { + return obj === undefined || obj === null; + } + function isBoolean(obj) { + return typeof obj === 'boolean'; + } + function isNumber(obj) { + return typeof obj === 'number'; + } + function isString(obj) { + return typeof obj === 'string'; + } + function isFunction(obj) { + return typeof obj === 'function'; + } + function isType(obj) { + return isFunction(obj); + } + function isStringMap(obj) { + return typeof obj === 'object' && obj !== null; + } + var STRING_MAP_PROTO = Object.getPrototypeOf({}); + function isStrictStringMap(obj) { + return isStringMap(obj) && Object.getPrototypeOf(obj) === STRING_MAP_PROTO; + } + function isArray(obj) { + return Array.isArray(obj); + } + function isDate(obj) { + return obj instanceof Date && !isNaN(obj.valueOf()); + } + function noop() { } + function stringify(token) { + if (typeof token === 'string') { + return token; + } + if (token === undefined || token === null) { + return '' + token; + } + if (token.overriddenName) { + return token.overriddenName; + } + if (token.name) { + return token.name; + } + var res = token.toString(); + var newLineIndex = res.indexOf('\n'); + return (newLineIndex === -1) ? res : res.substring(0, newLineIndex); + } +// serialize / deserialize enum exist only for consistency with dart API +// enums in typescript don't need to be serialized + function serializeEnum(val) { + return val; + } + function deserializeEnum(val, values) { + return val; + } + function resolveEnumToken(enumValue, val) { + return enumValue[val]; + } + var StringWrapper = (function () { + function StringWrapper() { + } + StringWrapper.fromCharCode = function (code) { return String.fromCharCode(code); }; + StringWrapper.charCodeAt = function (s, index) { return s.charCodeAt(index); }; + StringWrapper.split = function (s, regExp) { return s.split(regExp); }; + StringWrapper.equals = function (s, s2) { return s === s2; }; + StringWrapper.stripLeft = function (s, charVal) { + if (s && s.length) { + var pos = 0; + for (var i = 0; i < s.length; i++) { + if (s[i] != charVal) + break; + pos++; + } + s = s.substring(pos); + } + return s; + }; + StringWrapper.stripRight = function (s, charVal) { + if (s && s.length) { + var pos = s.length; + for (var i = s.length - 1; i >= 0; i--) { + if (s[i] != charVal) + break; + pos--; + } + s = s.substring(0, pos); + } + return s; + }; + StringWrapper.replace = function (s, from, replace) { + return s.replace(from, replace); + }; + StringWrapper.replaceAll = function (s, from, replace) { + return s.replace(from, replace); + }; + StringWrapper.slice = function (s, from, to) { + if (from === void 0) { from = 0; } + if (to === void 0) { to = null; } + return s.slice(from, to === null ? undefined : to); + }; + StringWrapper.replaceAllMapped = function (s, from, cb) { + return s.replace(from, function () { + var matches = []; + for (var _i = 0; _i < arguments.length; _i++) { + matches[_i - 0] = arguments[_i]; + } + // Remove offset & string from the result array + matches.splice(-2, 2); + // The callback receives match, p1, ..., pn + return cb(matches); + }); + }; + StringWrapper.contains = function (s, substr) { return s.indexOf(substr) != -1; }; + StringWrapper.compare = function (a, b) { + if (a < b) { + return -1; + } + else if (a > b) { + return 1; + } + else { + return 0; + } + }; + return StringWrapper; + }()); + var StringJoiner = (function () { + function StringJoiner(parts) { + if (parts === void 0) { parts = []; } + this.parts = parts; + } + StringJoiner.prototype.add = function (part) { this.parts.push(part); }; + StringJoiner.prototype.toString = function () { return this.parts.join(''); }; + return StringJoiner; + }()); + var NumberWrapper = (function () { + function NumberWrapper() { + } + NumberWrapper.toFixed = function (n, fractionDigits) { return n.toFixed(fractionDigits); }; + NumberWrapper.equal = function (a, b) { return a === b; }; + NumberWrapper.parseIntAutoRadix = function (text) { + var result = parseInt(text); + if (isNaN(result)) { + throw new Error('Invalid integer literal when parsing ' + text); + } + return result; + }; + NumberWrapper.parseInt = function (text, radix) { + if (radix == 10) { + if (/^(\-|\+)?[0-9]+$/.test(text)) { + return parseInt(text, radix); + } + } + else if (radix == 16) { + if (/^(\-|\+)?[0-9ABCDEFabcdef]+$/.test(text)) { + return parseInt(text, radix); + } + } + else { + var result = parseInt(text, radix); + if (!isNaN(result)) { + return result; + } + } + throw new Error('Invalid integer literal when parsing ' + text + ' in base ' + radix); + }; + Object.defineProperty(NumberWrapper, "NaN", { + get: function () { return NaN; }, + enumerable: true, + configurable: true + }); + NumberWrapper.isNumeric = function (value) { return !isNaN(value - parseFloat(value)); }; + NumberWrapper.isNaN = function (value) { return isNaN(value); }; + NumberWrapper.isInteger = function (value) { return Number.isInteger(value); }; + return NumberWrapper; + }()); + var RegExp = _global.RegExp; + var FunctionWrapper = (function () { + function FunctionWrapper() { + } + FunctionWrapper.apply = function (fn, posArgs) { return fn.apply(null, posArgs); }; + FunctionWrapper.bind = function (fn, scope) { return fn.bind(scope); }; + return FunctionWrapper; + }()); +// JS has NaN !== NaN + function looseIdentical(a, b) { + return a === b || typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b); + } +// JS considers NaN is the same as NaN for map Key (while NaN !== NaN otherwise) +// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map + function getMapKey(value) { + return value; + } + function normalizeBlank(obj) { + return isBlank(obj) ? null : obj; + } + function normalizeBool(obj) { + return isBlank(obj) ? false : obj; + } + function isJsObject(o) { + return o !== null && (typeof o === 'function' || typeof o === 'object'); + } + function print(obj) { + console.log(obj); + } + function warn(obj) { + console.warn(obj); + } +// Can't be all uppercase as our transpiler would think it is a special directive... + var Json = (function () { + function Json() { + } + Json.parse = function (s) { return _global.JSON.parse(s); }; + Json.stringify = function (data) { + // Dart doesn't take 3 arguments + return _global.JSON.stringify(data, null, 2); + }; + return Json; + }()); + var DateWrapper = (function () { + function DateWrapper() { + } + DateWrapper.create = function (year, month, day, hour, minutes, seconds, milliseconds) { + if (month === void 0) { month = 1; } + if (day === void 0) { day = 1; } + if (hour === void 0) { hour = 0; } + if (minutes === void 0) { minutes = 0; } + if (seconds === void 0) { seconds = 0; } + if (milliseconds === void 0) { milliseconds = 0; } + return new Date(year, month - 1, day, hour, minutes, seconds, milliseconds); + }; + DateWrapper.fromISOString = function (str) { return new Date(str); }; + DateWrapper.fromMillis = function (ms) { return new Date(ms); }; + DateWrapper.toMillis = function (date) { return date.getTime(); }; + DateWrapper.now = function () { return new Date(); }; + DateWrapper.toJson = function (date) { return date.toJSON(); }; + return DateWrapper; + }()); + function setValueOnPath(global, path, value) { + var parts = path.split('.'); + var obj = global; + while (parts.length > 1) { + var name = parts.shift(); + if (obj.hasOwnProperty(name) && isPresent(obj[name])) { + obj = obj[name]; + } + else { + obj = obj[name] = {}; + } + } + if (obj === undefined || obj === null) { + obj = {}; + } + obj[parts.shift()] = value; + } + var _symbolIterator = null; + function getSymbolIterator() { + if (isBlank(_symbolIterator)) { + if (isPresent(globalScope.Symbol) && isPresent(Symbol.iterator)) { + _symbolIterator = Symbol.iterator; + } + else { + // es6-shim specific logic + var keys = Object.getOwnPropertyNames(Map.prototype); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (key !== 'entries' && key !== 'size' && + Map.prototype[key] === Map.prototype['entries']) { + _symbolIterator = key; + } + } + } + } + return _symbolIterator; + } + function evalExpression(sourceUrl, expr, declarations, vars) { + var fnBody = declarations + "\nreturn " + expr + "\n//# sourceURL=" + sourceUrl; + var fnArgNames = []; + var fnArgValues = []; + for (var argName in vars) { + fnArgNames.push(argName); + fnArgValues.push(vars[argName]); + } + return new (Function.bind.apply(Function, [void 0].concat(fnArgNames.concat(fnBody))))().apply(void 0, fnArgValues); + } + function isPrimitive(obj) { + return !isJsObject(obj); + } + function hasConstructor(value, type) { + return value.constructor === type; + } + function escape(s) { + return _global.encodeURI(s); + } + function escapeRegExp(s) { + return s.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); + } +//# sourceMappingURL=lang.js.map + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(64))) + + /***/ }, + /* 5 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* WEBPACK VAR INJECTION */(function(global) {/* harmony export (immutable) */ exports["q"] = scheduleMicroTask; + /* harmony export (binding) */ __webpack_require__.d(exports, "c", function() { return _global; }); + /* harmony export (immutable) */ exports["o"] = getTypeNameForDebugging; + /* harmony export (binding) */ __webpack_require__.d(exports, "j", function() { return Math; }); + /* unused harmony export Date */ + /* harmony export (immutable) */ exports["e"] = isPresent; + /* harmony export (immutable) */ exports["d"] = isBlank; + /* unused harmony export isBoolean */ + /* unused harmony export isNumber */ + /* harmony export (immutable) */ exports["r"] = isString; + /* harmony export (immutable) */ exports["a"] = isFunction; + /* unused harmony export isType */ + /* unused harmony export isStringMap */ + /* unused harmony export isStrictStringMap */ + /* harmony export (immutable) */ exports["f"] = isArray; + /* unused harmony export isDate */ + /* unused harmony export noop */ + /* harmony export (immutable) */ exports["b"] = stringify; + /* unused harmony export serializeEnum */ + /* unused harmony export deserializeEnum */ + /* unused harmony export resolveEnumToken */ + /* harmony export (binding) */ __webpack_require__.d(exports, "i", function() { return StringWrapper; }); + /* unused harmony export StringJoiner */ + /* unused harmony export NumberWrapper */ + /* unused harmony export RegExp */ + /* unused harmony export FunctionWrapper */ + /* harmony export (immutable) */ exports["m"] = looseIdentical; + /* harmony export (immutable) */ exports["n"] = getMapKey; + /* unused harmony export normalizeBlank */ + /* unused harmony export normalizeBool */ + /* harmony export (immutable) */ exports["g"] = isJsObject; + /* harmony export (immutable) */ exports["k"] = print; + /* harmony export (immutable) */ exports["l"] = warn; + /* unused harmony export Json */ + /* unused harmony export DateWrapper */ + /* unused harmony export setValueOnPath */ + /* harmony export (immutable) */ exports["h"] = getSymbolIterator; + /* unused harmony export evalExpression */ + /* harmony export (immutable) */ exports["p"] = isPrimitive; + /* unused harmony export hasConstructor */ + /* unused harmony export escape */ + /* unused harmony export escapeRegExp */ + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + var globalScope; + if (typeof window === 'undefined') { + if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) { + // TODO: Replace any with WorkerGlobalScope from lib.webworker.d.ts #3492 + globalScope = self; + } + else { + globalScope = global; + } + } + else { + globalScope = window; + } + function scheduleMicroTask(fn) { + Zone.current.scheduleMicroTask('scheduleMicrotask', fn); + } +// Need to declare a new variable for global here since TypeScript +// exports the original value of the symbol. + var _global = globalScope; + + function getTypeNameForDebugging(type) { + if (type['name']) { + return type['name']; + } + return typeof type; + } + var Math = _global.Math; + var Date = _global.Date; +// TODO: remove calls to assert in production environment +// Note: Can't just export this and import in in other files +// as `assert` is a reserved keyword in Dart + _global.assert = function assert(condition) { + // TODO: to be fixed properly via #2830, noop for now + }; + function isPresent(obj) { + return obj !== undefined && obj !== null; + } + function isBlank(obj) { + return obj === undefined || obj === null; + } + function isBoolean(obj) { + return typeof obj === 'boolean'; + } + function isNumber(obj) { + return typeof obj === 'number'; + } + function isString(obj) { + return typeof obj === 'string'; + } + function isFunction(obj) { + return typeof obj === 'function'; + } + function isType(obj) { + return isFunction(obj); + } + function isStringMap(obj) { + return typeof obj === 'object' && obj !== null; + } + var STRING_MAP_PROTO = Object.getPrototypeOf({}); + function isStrictStringMap(obj) { + return isStringMap(obj) && Object.getPrototypeOf(obj) === STRING_MAP_PROTO; + } + function isArray(obj) { + return Array.isArray(obj); + } + function isDate(obj) { + return obj instanceof Date && !isNaN(obj.valueOf()); + } + function noop() { } + function stringify(token) { + if (typeof token === 'string') { + return token; + } + if (token === undefined || token === null) { + return '' + token; + } + if (token.overriddenName) { + return token.overriddenName; + } + if (token.name) { + return token.name; + } + var res = token.toString(); + var newLineIndex = res.indexOf('\n'); + return (newLineIndex === -1) ? res : res.substring(0, newLineIndex); + } +// serialize / deserialize enum exist only for consistency with dart API +// enums in typescript don't need to be serialized + function serializeEnum(val) { + return val; + } + function deserializeEnum(val, values) { + return val; + } + function resolveEnumToken(enumValue, val) { + return enumValue[val]; + } + var StringWrapper = (function () { + function StringWrapper() { + } + StringWrapper.fromCharCode = function (code) { return String.fromCharCode(code); }; + StringWrapper.charCodeAt = function (s, index) { return s.charCodeAt(index); }; + StringWrapper.split = function (s, regExp) { return s.split(regExp); }; + StringWrapper.equals = function (s, s2) { return s === s2; }; + StringWrapper.stripLeft = function (s, charVal) { + if (s && s.length) { + var pos = 0; + for (var i = 0; i < s.length; i++) { + if (s[i] != charVal) + break; + pos++; + } + s = s.substring(pos); + } + return s; + }; + StringWrapper.stripRight = function (s, charVal) { + if (s && s.length) { + var pos = s.length; + for (var i = s.length - 1; i >= 0; i--) { + if (s[i] != charVal) + break; + pos--; + } + s = s.substring(0, pos); + } + return s; + }; + StringWrapper.replace = function (s, from, replace) { + return s.replace(from, replace); + }; + StringWrapper.replaceAll = function (s, from, replace) { + return s.replace(from, replace); + }; + StringWrapper.slice = function (s, from, to) { + if (from === void 0) { from = 0; } + if (to === void 0) { to = null; } + return s.slice(from, to === null ? undefined : to); + }; + StringWrapper.replaceAllMapped = function (s, from, cb) { + return s.replace(from, function () { + var matches = []; + for (var _i = 0; _i < arguments.length; _i++) { + matches[_i - 0] = arguments[_i]; + } + // Remove offset & string from the result array + matches.splice(-2, 2); + // The callback receives match, p1, ..., pn + return cb(matches); + }); + }; + StringWrapper.contains = function (s, substr) { return s.indexOf(substr) != -1; }; + StringWrapper.compare = function (a, b) { + if (a < b) { + return -1; + } + else if (a > b) { + return 1; + } + else { + return 0; + } + }; + return StringWrapper; + }()); + var StringJoiner = (function () { + function StringJoiner(parts) { + if (parts === void 0) { parts = []; } + this.parts = parts; + } + StringJoiner.prototype.add = function (part) { this.parts.push(part); }; + StringJoiner.prototype.toString = function () { return this.parts.join(''); }; + return StringJoiner; + }()); + var NumberWrapper = (function () { + function NumberWrapper() { + } + NumberWrapper.toFixed = function (n, fractionDigits) { return n.toFixed(fractionDigits); }; + NumberWrapper.equal = function (a, b) { return a === b; }; + NumberWrapper.parseIntAutoRadix = function (text) { + var result = parseInt(text); + if (isNaN(result)) { + throw new Error('Invalid integer literal when parsing ' + text); + } + return result; + }; + NumberWrapper.parseInt = function (text, radix) { + if (radix == 10) { + if (/^(\-|\+)?[0-9]+$/.test(text)) { + return parseInt(text, radix); + } + } + else if (radix == 16) { + if (/^(\-|\+)?[0-9ABCDEFabcdef]+$/.test(text)) { + return parseInt(text, radix); + } + } + else { + var result = parseInt(text, radix); + if (!isNaN(result)) { + return result; + } + } + throw new Error('Invalid integer literal when parsing ' + text + ' in base ' + radix); + }; + Object.defineProperty(NumberWrapper, "NaN", { + get: function () { return NaN; }, + enumerable: true, + configurable: true + }); + NumberWrapper.isNumeric = function (value) { return !isNaN(value - parseFloat(value)); }; + NumberWrapper.isNaN = function (value) { return isNaN(value); }; + NumberWrapper.isInteger = function (value) { return Number.isInteger(value); }; + return NumberWrapper; + }()); + var RegExp = _global.RegExp; + var FunctionWrapper = (function () { + function FunctionWrapper() { + } + FunctionWrapper.apply = function (fn, posArgs) { return fn.apply(null, posArgs); }; + FunctionWrapper.bind = function (fn, scope) { return fn.bind(scope); }; + return FunctionWrapper; + }()); +// JS has NaN !== NaN + function looseIdentical(a, b) { + return a === b || typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b); + } +// JS considers NaN is the same as NaN for map Key (while NaN !== NaN otherwise) +// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map + function getMapKey(value) { + return value; + } + function normalizeBlank(obj) { + return isBlank(obj) ? null : obj; + } + function normalizeBool(obj) { + return isBlank(obj) ? false : obj; + } + function isJsObject(o) { + return o !== null && (typeof o === 'function' || typeof o === 'object'); + } + function print(obj) { + console.log(obj); + } + function warn(obj) { + console.warn(obj); + } +// Can't be all uppercase as our transpiler would think it is a special directive... + var Json = (function () { + function Json() { + } + Json.parse = function (s) { return _global.JSON.parse(s); }; + Json.stringify = function (data) { + // Dart doesn't take 3 arguments + return _global.JSON.stringify(data, null, 2); + }; + return Json; + }()); + var DateWrapper = (function () { + function DateWrapper() { + } + DateWrapper.create = function (year, month, day, hour, minutes, seconds, milliseconds) { + if (month === void 0) { month = 1; } + if (day === void 0) { day = 1; } + if (hour === void 0) { hour = 0; } + if (minutes === void 0) { minutes = 0; } + if (seconds === void 0) { seconds = 0; } + if (milliseconds === void 0) { milliseconds = 0; } + return new Date(year, month - 1, day, hour, minutes, seconds, milliseconds); + }; + DateWrapper.fromISOString = function (str) { return new Date(str); }; + DateWrapper.fromMillis = function (ms) { return new Date(ms); }; + DateWrapper.toMillis = function (date) { return date.getTime(); }; + DateWrapper.now = function () { return new Date(); }; + DateWrapper.toJson = function (date) { return date.toJSON(); }; + return DateWrapper; + }()); + function setValueOnPath(global, path, value) { + var parts = path.split('.'); + var obj = global; + while (parts.length > 1) { + var name = parts.shift(); + if (obj.hasOwnProperty(name) && isPresent(obj[name])) { + obj = obj[name]; + } + else { + obj = obj[name] = {}; + } + } + if (obj === undefined || obj === null) { + obj = {}; + } + obj[parts.shift()] = value; + } + var _symbolIterator = null; + function getSymbolIterator() { + if (isBlank(_symbolIterator)) { + if (isPresent(globalScope.Symbol) && isPresent(Symbol.iterator)) { + _symbolIterator = Symbol.iterator; + } + else { + // es6-shim specific logic + var keys = Object.getOwnPropertyNames(Map.prototype); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (key !== 'entries' && key !== 'size' && + Map.prototype[key] === Map.prototype['entries']) { + _symbolIterator = key; + } + } + } + } + return _symbolIterator; + } + function evalExpression(sourceUrl, expr, declarations, vars) { + var fnBody = declarations + "\nreturn " + expr + "\n//# sourceURL=" + sourceUrl; + var fnArgNames = []; + var fnArgValues = []; + for (var argName in vars) { + fnArgNames.push(argName); + fnArgValues.push(vars[argName]); + } + return new (Function.bind.apply(Function, [void 0].concat(fnArgNames.concat(fnBody))))().apply(void 0, fnArgValues); + } + function isPrimitive(obj) { + return !isJsObject(obj); + } + function hasConstructor(value, type) { + return value.constructor === type; + } + function escape(s) { + return _global.encodeURI(s); + } + function escapeRegExp(s) { + return s.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); + } +//# sourceMappingURL=lang.js.map + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(64))) + + /***/ }, + /* 6 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var Subscriber_1 = __webpack_require__(3); + /** + * We need this JSDoc comment for affecting ESDoc. + * @ignore + * @extends {Ignored} + */ + var OuterSubscriber = (function (_super) { + __extends(OuterSubscriber, _super); + function OuterSubscriber() { + _super.apply(this, arguments); + } + OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { + this.destination.next(innerValue); + }; + OuterSubscriber.prototype.notifyError = function (error, innerSub) { + this.destination.error(error); + }; + OuterSubscriber.prototype.notifyComplete = function (innerSub) { + this.destination.complete(); + }; + return OuterSubscriber; + }(Subscriber_1.Subscriber)); + exports.OuterSubscriber = OuterSubscriber; +//# sourceMappingURL=OuterSubscriber.js.map + + /***/ }, + /* 7 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + "use strict"; + var root_1 = __webpack_require__(27); + var isArray_1 = __webpack_require__(48); + var isPromise_1 = __webpack_require__(418); + var Observable_1 = __webpack_require__(0); + var iterator_1 = __webpack_require__(124); + var InnerSubscriber_1 = __webpack_require__(694); + var observable_1 = __webpack_require__(173); + function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) { + var destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex); + if (destination.closed) { + return null; + } + if (result instanceof Observable_1.Observable) { + if (result._isScalar) { + destination.next(result.value); + destination.complete(); + return null; + } + else { + return result.subscribe(destination); + } + } + if (isArray_1.isArray(result)) { + for (var i = 0, len = result.length; i < len && !destination.closed; i++) { + destination.next(result[i]); + } + if (!destination.closed) { + destination.complete(); + } + } + else if (isPromise_1.isPromise(result)) { + result.then(function (value) { + if (!destination.closed) { + destination.next(value); + destination.complete(); + } + }, function (err) { return destination.error(err); }) + .then(null, function (err) { + // Escaping the Promise trap: globally throw unhandled errors + root_1.root.setTimeout(function () { throw err; }); + }); + return destination; + } + else if (typeof result[iterator_1.$$iterator] === 'function') { + var iterator = result[iterator_1.$$iterator](); + do { + var item = iterator.next(); + if (item.done) { + destination.complete(); + break; + } + destination.next(item.value); + if (destination.closed) { + break; + } + } while (true); + } + else if (typeof result[observable_1.$$observable] === 'function') { + var obs = result[observable_1.$$observable](); + if (typeof obs.subscribe !== 'function') { + destination.error(new Error('invalid observable')); + } + else { + return obs.subscribe(new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex)); + } + } + else { + destination.error(new TypeError('unknown type returned')); + } + return null; + } + exports.subscribeToResult = subscribeToResult; +//# sourceMappingURL=subscribeToResult.js.map + + /***/ }, + /* 8 */ + /***/ function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(10); + module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; + }; + + /***/ }, + /* 9 */ + /***/ function(module, exports) { + + module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } + }; + + /***/ }, + /* 10 */ + /***/ function(module, exports) { + + module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + + /***/ }, + /* 11 */ + /***/ function(module, exports) { + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); + if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef + + /***/ }, + /* 12 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__facade_lang__ = __webpack_require__(4); + /* harmony export (binding) */ __webpack_require__.d(exports, "d", function() { return TypeModifier; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "Q", function() { return Type; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "R", function() { return BuiltinTypeName; }); + /* unused harmony export BuiltinType */ + /* harmony export (binding) */ __webpack_require__.d(exports, "I", function() { return ExternalType; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "q", function() { return ArrayType; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "w", function() { return MapType; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "l", function() { return DYNAMIC_TYPE; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "D", function() { return BOOL_TYPE; }); + /* unused harmony export INT_TYPE */ + /* harmony export (binding) */ __webpack_require__.d(exports, "L", function() { return NUMBER_TYPE; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "K", function() { return STRING_TYPE; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "E", function() { return FUNCTION_TYPE; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "y", function() { return BinaryOperator; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "m", function() { return Expression; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "O", function() { return BuiltinVar; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "B", function() { return ReadVarExpr; }); + /* unused harmony export WriteVarExpr */ + /* unused harmony export WriteKeyExpr */ + /* unused harmony export WritePropExpr */ + /* harmony export (binding) */ __webpack_require__.d(exports, "r", function() { return BuiltinMethod; }); + /* unused harmony export InvokeMethodExpr */ + /* unused harmony export InvokeFunctionExpr */ + /* unused harmony export InstantiateExpr */ + /* harmony export (binding) */ __webpack_require__.d(exports, "G", function() { return LiteralExpr; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "S", function() { return ExternalExpr; }); + /* unused harmony export ConditionalExpr */ + /* unused harmony export NotExpr */ + /* unused harmony export CastExpr */ + /* harmony export (binding) */ __webpack_require__.d(exports, "k", function() { return FnParam; }); + /* unused harmony export FunctionExpr */ + /* harmony export (binding) */ __webpack_require__.d(exports, "z", function() { return BinaryOperatorExpr; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "o", function() { return ReadPropExpr; }); + /* unused harmony export ReadKeyExpr */ + /* unused harmony export LiteralArrayExpr */ + /* unused harmony export LiteralMapExpr */ + /* harmony export (binding) */ __webpack_require__.d(exports, "n", function() { return THIS_EXPR; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "J", function() { return SUPER_EXPR; }); + /* unused harmony export CATCH_ERROR_VAR */ + /* unused harmony export CATCH_STACK_VAR */ + /* harmony export (binding) */ __webpack_require__.d(exports, "h", function() { return NULL_EXPR; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "u", function() { return StmtModifier; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "P", function() { return Statement; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "x", function() { return DeclareVarStmt; }); + /* unused harmony export DeclareFunctionStmt */ + /* harmony export (binding) */ __webpack_require__.d(exports, "F", function() { return ExpressionStatement; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "t", function() { return ReturnStatement; }); + /* unused harmony export AbstractClassPart */ + /* harmony export (binding) */ __webpack_require__.d(exports, "s", function() { return ClassField; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "C", function() { return ClassMethod; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "v", function() { return ClassGetter; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "M", function() { return ClassStmt; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "i", function() { return IfStmt; }); + /* unused harmony export CommentStmt */ + /* harmony export (binding) */ __webpack_require__.d(exports, "H", function() { return TryCatchStmt; }); + /* unused harmony export ThrowStmt */ + /* unused harmony export ExpressionTransformer */ + /* unused harmony export RecursiveExpressionVisitor */ + /* harmony export (immutable) */ exports["p"] = replaceVarInExpression; + /* harmony export (immutable) */ exports["N"] = findReadVarNames; + /* harmony export (immutable) */ exports["e"] = variable; + /* harmony export (immutable) */ exports["b"] = importExpr; + /* harmony export (immutable) */ exports["c"] = importType; + /* harmony export (immutable) */ exports["g"] = literalArr; + /* harmony export (immutable) */ exports["f"] = literalMap; + /* harmony export (immutable) */ exports["A"] = not; + /* harmony export (immutable) */ exports["j"] = fn; + /* harmony export (immutable) */ exports["a"] = literal; + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + +//// Types + var TypeModifier; + (function (TypeModifier) { + TypeModifier[TypeModifier["Const"] = 0] = "Const"; + })(TypeModifier || (TypeModifier = {})); + var Type = (function () { + function Type(modifiers) { + if (modifiers === void 0) { modifiers = null; } + this.modifiers = modifiers; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["b" /* isBlank */])(modifiers)) { + this.modifiers = []; + } + } + Type.prototype.hasModifier = function (modifier) { return this.modifiers.indexOf(modifier) !== -1; }; + return Type; + }()); + var BuiltinTypeName; + (function (BuiltinTypeName) { + BuiltinTypeName[BuiltinTypeName["Dynamic"] = 0] = "Dynamic"; + BuiltinTypeName[BuiltinTypeName["Bool"] = 1] = "Bool"; + BuiltinTypeName[BuiltinTypeName["String"] = 2] = "String"; + BuiltinTypeName[BuiltinTypeName["Int"] = 3] = "Int"; + BuiltinTypeName[BuiltinTypeName["Number"] = 4] = "Number"; + BuiltinTypeName[BuiltinTypeName["Function"] = 5] = "Function"; + })(BuiltinTypeName || (BuiltinTypeName = {})); + var BuiltinType = (function (_super) { + __extends(BuiltinType, _super); + function BuiltinType(name, modifiers) { + if (modifiers === void 0) { modifiers = null; } + _super.call(this, modifiers); + this.name = name; + } + BuiltinType.prototype.visitType = function (visitor, context) { + return visitor.visitBuiltintType(this, context); + }; + return BuiltinType; + }(Type)); + var ExternalType = (function (_super) { + __extends(ExternalType, _super); + function ExternalType(value, typeParams, modifiers) { + if (typeParams === void 0) { typeParams = null; } + if (modifiers === void 0) { modifiers = null; } + _super.call(this, modifiers); + this.value = value; + this.typeParams = typeParams; + } + ExternalType.prototype.visitType = function (visitor, context) { + return visitor.visitExternalType(this, context); + }; + return ExternalType; + }(Type)); + var ArrayType = (function (_super) { + __extends(ArrayType, _super); + function ArrayType(of, modifiers) { + if (modifiers === void 0) { modifiers = null; } + _super.call(this, modifiers); + this.of = of; + } + ArrayType.prototype.visitType = function (visitor, context) { + return visitor.visitArrayType(this, context); + }; + return ArrayType; + }(Type)); + var MapType = (function (_super) { + __extends(MapType, _super); + function MapType(valueType, modifiers) { + if (modifiers === void 0) { modifiers = null; } + _super.call(this, modifiers); + this.valueType = valueType; + } + MapType.prototype.visitType = function (visitor, context) { return visitor.visitMapType(this, context); }; + return MapType; + }(Type)); + var DYNAMIC_TYPE = new BuiltinType(BuiltinTypeName.Dynamic); + var BOOL_TYPE = new BuiltinType(BuiltinTypeName.Bool); + var INT_TYPE = new BuiltinType(BuiltinTypeName.Int); + var NUMBER_TYPE = new BuiltinType(BuiltinTypeName.Number); + var STRING_TYPE = new BuiltinType(BuiltinTypeName.String); + var FUNCTION_TYPE = new BuiltinType(BuiltinTypeName.Function); +///// Expressions + var BinaryOperator; + (function (BinaryOperator) { + BinaryOperator[BinaryOperator["Equals"] = 0] = "Equals"; + BinaryOperator[BinaryOperator["NotEquals"] = 1] = "NotEquals"; + BinaryOperator[BinaryOperator["Identical"] = 2] = "Identical"; + BinaryOperator[BinaryOperator["NotIdentical"] = 3] = "NotIdentical"; + BinaryOperator[BinaryOperator["Minus"] = 4] = "Minus"; + BinaryOperator[BinaryOperator["Plus"] = 5] = "Plus"; + BinaryOperator[BinaryOperator["Divide"] = 6] = "Divide"; + BinaryOperator[BinaryOperator["Multiply"] = 7] = "Multiply"; + BinaryOperator[BinaryOperator["Modulo"] = 8] = "Modulo"; + BinaryOperator[BinaryOperator["And"] = 9] = "And"; + BinaryOperator[BinaryOperator["Or"] = 10] = "Or"; + BinaryOperator[BinaryOperator["Lower"] = 11] = "Lower"; + BinaryOperator[BinaryOperator["LowerEquals"] = 12] = "LowerEquals"; + BinaryOperator[BinaryOperator["Bigger"] = 13] = "Bigger"; + BinaryOperator[BinaryOperator["BiggerEquals"] = 14] = "BiggerEquals"; + })(BinaryOperator || (BinaryOperator = {})); + var Expression = (function () { + function Expression(type) { + this.type = type; + } + Expression.prototype.prop = function (name) { return new ReadPropExpr(this, name); }; + Expression.prototype.key = function (index, type) { + if (type === void 0) { type = null; } + return new ReadKeyExpr(this, index, type); + }; + Expression.prototype.callMethod = function (name, params) { + return new InvokeMethodExpr(this, name, params); + }; + Expression.prototype.callFn = function (params) { return new InvokeFunctionExpr(this, params); }; + Expression.prototype.instantiate = function (params, type) { + if (type === void 0) { type = null; } + return new InstantiateExpr(this, params, type); + }; + Expression.prototype.conditional = function (trueCase, falseCase) { + if (falseCase === void 0) { falseCase = null; } + return new ConditionalExpr(this, trueCase, falseCase); + }; + Expression.prototype.equals = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.Equals, this, rhs); + }; + Expression.prototype.notEquals = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.NotEquals, this, rhs); + }; + Expression.prototype.identical = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.Identical, this, rhs); + }; + Expression.prototype.notIdentical = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.NotIdentical, this, rhs); + }; + Expression.prototype.minus = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.Minus, this, rhs); + }; + Expression.prototype.plus = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.Plus, this, rhs); + }; + Expression.prototype.divide = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.Divide, this, rhs); + }; + Expression.prototype.multiply = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.Multiply, this, rhs); + }; + Expression.prototype.modulo = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.Modulo, this, rhs); + }; + Expression.prototype.and = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.And, this, rhs); + }; + Expression.prototype.or = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.Or, this, rhs); + }; + Expression.prototype.lower = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.Lower, this, rhs); + }; + Expression.prototype.lowerEquals = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.LowerEquals, this, rhs); + }; + Expression.prototype.bigger = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.Bigger, this, rhs); + }; + Expression.prototype.biggerEquals = function (rhs) { + return new BinaryOperatorExpr(BinaryOperator.BiggerEquals, this, rhs); + }; + Expression.prototype.isBlank = function () { + // Note: We use equals by purpose here to compare to null and undefined in JS. + return this.equals(NULL_EXPR); + }; + Expression.prototype.cast = function (type) { return new CastExpr(this, type); }; + Expression.prototype.toStmt = function () { return new ExpressionStatement(this); }; + return Expression; + }()); + var BuiltinVar; + (function (BuiltinVar) { + BuiltinVar[BuiltinVar["This"] = 0] = "This"; + BuiltinVar[BuiltinVar["Super"] = 1] = "Super"; + BuiltinVar[BuiltinVar["CatchError"] = 2] = "CatchError"; + BuiltinVar[BuiltinVar["CatchStack"] = 3] = "CatchStack"; + })(BuiltinVar || (BuiltinVar = {})); + var ReadVarExpr = (function (_super) { + __extends(ReadVarExpr, _super); + function ReadVarExpr(name, type) { + if (type === void 0) { type = null; } + _super.call(this, type); + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["g" /* isString */])(name)) { + this.name = name; + this.builtin = null; + } + else { + this.name = null; + this.builtin = name; + } + } + ReadVarExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitReadVarExpr(this, context); + }; + ReadVarExpr.prototype.set = function (value) { return new WriteVarExpr(this.name, value); }; + return ReadVarExpr; + }(Expression)); + var WriteVarExpr = (function (_super) { + __extends(WriteVarExpr, _super); + function WriteVarExpr(name, value, type) { + if (type === void 0) { type = null; } + _super.call(this, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(type) ? type : value.type); + this.name = name; + this.value = value; + } + WriteVarExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitWriteVarExpr(this, context); + }; + WriteVarExpr.prototype.toDeclStmt = function (type, modifiers) { + if (type === void 0) { type = null; } + if (modifiers === void 0) { modifiers = null; } + return new DeclareVarStmt(this.name, this.value, type, modifiers); + }; + return WriteVarExpr; + }(Expression)); + var WriteKeyExpr = (function (_super) { + __extends(WriteKeyExpr, _super); + function WriteKeyExpr(receiver, index, value, type) { + if (type === void 0) { type = null; } + _super.call(this, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(type) ? type : value.type); + this.receiver = receiver; + this.index = index; + this.value = value; + } + WriteKeyExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitWriteKeyExpr(this, context); + }; + return WriteKeyExpr; + }(Expression)); + var WritePropExpr = (function (_super) { + __extends(WritePropExpr, _super); + function WritePropExpr(receiver, name, value, type) { + if (type === void 0) { type = null; } + _super.call(this, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(type) ? type : value.type); + this.receiver = receiver; + this.name = name; + this.value = value; + } + WritePropExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitWritePropExpr(this, context); + }; + return WritePropExpr; + }(Expression)); + var BuiltinMethod; + (function (BuiltinMethod) { + BuiltinMethod[BuiltinMethod["ConcatArray"] = 0] = "ConcatArray"; + BuiltinMethod[BuiltinMethod["SubscribeObservable"] = 1] = "SubscribeObservable"; + BuiltinMethod[BuiltinMethod["Bind"] = 2] = "Bind"; + })(BuiltinMethod || (BuiltinMethod = {})); + var InvokeMethodExpr = (function (_super) { + __extends(InvokeMethodExpr, _super); + function InvokeMethodExpr(receiver, method, args, type) { + if (type === void 0) { type = null; } + _super.call(this, type); + this.receiver = receiver; + this.args = args; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["g" /* isString */])(method)) { + this.name = method; + this.builtin = null; + } + else { + this.name = null; + this.builtin = method; + } + } + InvokeMethodExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitInvokeMethodExpr(this, context); + }; + return InvokeMethodExpr; + }(Expression)); + var InvokeFunctionExpr = (function (_super) { + __extends(InvokeFunctionExpr, _super); + function InvokeFunctionExpr(fn, args, type) { + if (type === void 0) { type = null; } + _super.call(this, type); + this.fn = fn; + this.args = args; + } + InvokeFunctionExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitInvokeFunctionExpr(this, context); + }; + return InvokeFunctionExpr; + }(Expression)); + var InstantiateExpr = (function (_super) { + __extends(InstantiateExpr, _super); + function InstantiateExpr(classExpr, args, type) { + _super.call(this, type); + this.classExpr = classExpr; + this.args = args; + } + InstantiateExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitInstantiateExpr(this, context); + }; + return InstantiateExpr; + }(Expression)); + var LiteralExpr = (function (_super) { + __extends(LiteralExpr, _super); + function LiteralExpr(value, type) { + if (type === void 0) { type = null; } + _super.call(this, type); + this.value = value; + } + LiteralExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitLiteralExpr(this, context); + }; + return LiteralExpr; + }(Expression)); + var ExternalExpr = (function (_super) { + __extends(ExternalExpr, _super); + function ExternalExpr(value, type, typeParams) { + if (type === void 0) { type = null; } + if (typeParams === void 0) { typeParams = null; } + _super.call(this, type); + this.value = value; + this.typeParams = typeParams; + } + ExternalExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitExternalExpr(this, context); + }; + return ExternalExpr; + }(Expression)); + var ConditionalExpr = (function (_super) { + __extends(ConditionalExpr, _super); + function ConditionalExpr(condition, trueCase, falseCase, type) { + if (falseCase === void 0) { falseCase = null; } + if (type === void 0) { type = null; } + _super.call(this, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(type) ? type : trueCase.type); + this.condition = condition; + this.falseCase = falseCase; + this.trueCase = trueCase; + } + ConditionalExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitConditionalExpr(this, context); + }; + return ConditionalExpr; + }(Expression)); + var NotExpr = (function (_super) { + __extends(NotExpr, _super); + function NotExpr(condition) { + _super.call(this, BOOL_TYPE); + this.condition = condition; + } + NotExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitNotExpr(this, context); + }; + return NotExpr; + }(Expression)); + var CastExpr = (function (_super) { + __extends(CastExpr, _super); + function CastExpr(value, type) { + _super.call(this, type); + this.value = value; + } + CastExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitCastExpr(this, context); + }; + return CastExpr; + }(Expression)); + var FnParam = (function () { + function FnParam(name, type) { + if (type === void 0) { type = null; } + this.name = name; + this.type = type; + } + return FnParam; + }()); + var FunctionExpr = (function (_super) { + __extends(FunctionExpr, _super); + function FunctionExpr(params, statements, type) { + if (type === void 0) { type = null; } + _super.call(this, type); + this.params = params; + this.statements = statements; + } + FunctionExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitFunctionExpr(this, context); + }; + FunctionExpr.prototype.toDeclStmt = function (name, modifiers) { + if (modifiers === void 0) { modifiers = null; } + return new DeclareFunctionStmt(name, this.params, this.statements, this.type, modifiers); + }; + return FunctionExpr; + }(Expression)); + var BinaryOperatorExpr = (function (_super) { + __extends(BinaryOperatorExpr, _super); + function BinaryOperatorExpr(operator, lhs, rhs, type) { + if (type === void 0) { type = null; } + _super.call(this, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(type) ? type : lhs.type); + this.operator = operator; + this.rhs = rhs; + this.lhs = lhs; + } + BinaryOperatorExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitBinaryOperatorExpr(this, context); + }; + return BinaryOperatorExpr; + }(Expression)); + var ReadPropExpr = (function (_super) { + __extends(ReadPropExpr, _super); + function ReadPropExpr(receiver, name, type) { + if (type === void 0) { type = null; } + _super.call(this, type); + this.receiver = receiver; + this.name = name; + } + ReadPropExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitReadPropExpr(this, context); + }; + ReadPropExpr.prototype.set = function (value) { + return new WritePropExpr(this.receiver, this.name, value); + }; + return ReadPropExpr; + }(Expression)); + var ReadKeyExpr = (function (_super) { + __extends(ReadKeyExpr, _super); + function ReadKeyExpr(receiver, index, type) { + if (type === void 0) { type = null; } + _super.call(this, type); + this.receiver = receiver; + this.index = index; + } + ReadKeyExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitReadKeyExpr(this, context); + }; + ReadKeyExpr.prototype.set = function (value) { + return new WriteKeyExpr(this.receiver, this.index, value); + }; + return ReadKeyExpr; + }(Expression)); + var LiteralArrayExpr = (function (_super) { + __extends(LiteralArrayExpr, _super); + function LiteralArrayExpr(entries, type) { + if (type === void 0) { type = null; } + _super.call(this, type); + this.entries = entries; + } + LiteralArrayExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitLiteralArrayExpr(this, context); + }; + return LiteralArrayExpr; + }(Expression)); + var LiteralMapExpr = (function (_super) { + __extends(LiteralMapExpr, _super); + function LiteralMapExpr(entries, type) { + if (type === void 0) { type = null; } + _super.call(this, type); + this.entries = entries; + this.valueType = null; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(type)) { + this.valueType = type.valueType; + } + } + LiteralMapExpr.prototype.visitExpression = function (visitor, context) { + return visitor.visitLiteralMapExpr(this, context); + }; + return LiteralMapExpr; + }(Expression)); + var THIS_EXPR = new ReadVarExpr(BuiltinVar.This); + var SUPER_EXPR = new ReadVarExpr(BuiltinVar.Super); + var CATCH_ERROR_VAR = new ReadVarExpr(BuiltinVar.CatchError); + var CATCH_STACK_VAR = new ReadVarExpr(BuiltinVar.CatchStack); + var NULL_EXPR = new LiteralExpr(null, null); +//// Statements + var StmtModifier; + (function (StmtModifier) { + StmtModifier[StmtModifier["Final"] = 0] = "Final"; + StmtModifier[StmtModifier["Private"] = 1] = "Private"; + })(StmtModifier || (StmtModifier = {})); + var Statement = (function () { + function Statement(modifiers) { + if (modifiers === void 0) { modifiers = null; } + this.modifiers = modifiers; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["b" /* isBlank */])(modifiers)) { + this.modifiers = []; + } + } + Statement.prototype.hasModifier = function (modifier) { return this.modifiers.indexOf(modifier) !== -1; }; + return Statement; + }()); + var DeclareVarStmt = (function (_super) { + __extends(DeclareVarStmt, _super); + function DeclareVarStmt(name, value, type, modifiers) { + if (type === void 0) { type = null; } + if (modifiers === void 0) { modifiers = null; } + _super.call(this, modifiers); + this.name = name; + this.value = value; + this.type = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(type) ? type : value.type; + } + DeclareVarStmt.prototype.visitStatement = function (visitor, context) { + return visitor.visitDeclareVarStmt(this, context); + }; + return DeclareVarStmt; + }(Statement)); + var DeclareFunctionStmt = (function (_super) { + __extends(DeclareFunctionStmt, _super); + function DeclareFunctionStmt(name, params, statements, type, modifiers) { + if (type === void 0) { type = null; } + if (modifiers === void 0) { modifiers = null; } + _super.call(this, modifiers); + this.name = name; + this.params = params; + this.statements = statements; + this.type = type; + } + DeclareFunctionStmt.prototype.visitStatement = function (visitor, context) { + return visitor.visitDeclareFunctionStmt(this, context); + }; + return DeclareFunctionStmt; + }(Statement)); + var ExpressionStatement = (function (_super) { + __extends(ExpressionStatement, _super); + function ExpressionStatement(expr) { + _super.call(this); + this.expr = expr; + } + ExpressionStatement.prototype.visitStatement = function (visitor, context) { + return visitor.visitExpressionStmt(this, context); + }; + return ExpressionStatement; + }(Statement)); + var ReturnStatement = (function (_super) { + __extends(ReturnStatement, _super); + function ReturnStatement(value) { + _super.call(this); + this.value = value; + } + ReturnStatement.prototype.visitStatement = function (visitor, context) { + return visitor.visitReturnStmt(this, context); + }; + return ReturnStatement; + }(Statement)); + var AbstractClassPart = (function () { + function AbstractClassPart(type, modifiers) { + if (type === void 0) { type = null; } + this.type = type; + this.modifiers = modifiers; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["b" /* isBlank */])(modifiers)) { + this.modifiers = []; + } + } + AbstractClassPart.prototype.hasModifier = function (modifier) { return this.modifiers.indexOf(modifier) !== -1; }; + return AbstractClassPart; + }()); + var ClassField = (function (_super) { + __extends(ClassField, _super); + function ClassField(name, type, modifiers) { + if (type === void 0) { type = null; } + if (modifiers === void 0) { modifiers = null; } + _super.call(this, type, modifiers); + this.name = name; + } + return ClassField; + }(AbstractClassPart)); + var ClassMethod = (function (_super) { + __extends(ClassMethod, _super); + function ClassMethod(name, params, body, type, modifiers) { + if (type === void 0) { type = null; } + if (modifiers === void 0) { modifiers = null; } + _super.call(this, type, modifiers); + this.name = name; + this.params = params; + this.body = body; + } + return ClassMethod; + }(AbstractClassPart)); + var ClassGetter = (function (_super) { + __extends(ClassGetter, _super); + function ClassGetter(name, body, type, modifiers) { + if (type === void 0) { type = null; } + if (modifiers === void 0) { modifiers = null; } + _super.call(this, type, modifiers); + this.name = name; + this.body = body; + } + return ClassGetter; + }(AbstractClassPart)); + var ClassStmt = (function (_super) { + __extends(ClassStmt, _super); + function ClassStmt(name, parent, fields, getters, constructorMethod, methods, modifiers) { + if (modifiers === void 0) { modifiers = null; } + _super.call(this, modifiers); + this.name = name; + this.parent = parent; + this.fields = fields; + this.getters = getters; + this.constructorMethod = constructorMethod; + this.methods = methods; + } + ClassStmt.prototype.visitStatement = function (visitor, context) { + return visitor.visitDeclareClassStmt(this, context); + }; + return ClassStmt; + }(Statement)); + var IfStmt = (function (_super) { + __extends(IfStmt, _super); + function IfStmt(condition, trueCase, falseCase) { + if (falseCase === void 0) { falseCase = []; } + _super.call(this); + this.condition = condition; + this.trueCase = trueCase; + this.falseCase = falseCase; + } + IfStmt.prototype.visitStatement = function (visitor, context) { + return visitor.visitIfStmt(this, context); + }; + return IfStmt; + }(Statement)); + var CommentStmt = (function (_super) { + __extends(CommentStmt, _super); + function CommentStmt(comment) { + _super.call(this); + this.comment = comment; + } + CommentStmt.prototype.visitStatement = function (visitor, context) { + return visitor.visitCommentStmt(this, context); + }; + return CommentStmt; + }(Statement)); + var TryCatchStmt = (function (_super) { + __extends(TryCatchStmt, _super); + function TryCatchStmt(bodyStmts, catchStmts) { + _super.call(this); + this.bodyStmts = bodyStmts; + this.catchStmts = catchStmts; + } + TryCatchStmt.prototype.visitStatement = function (visitor, context) { + return visitor.visitTryCatchStmt(this, context); + }; + return TryCatchStmt; + }(Statement)); + var ThrowStmt = (function (_super) { + __extends(ThrowStmt, _super); + function ThrowStmt(error) { + _super.call(this); + this.error = error; + } + ThrowStmt.prototype.visitStatement = function (visitor, context) { + return visitor.visitThrowStmt(this, context); + }; + return ThrowStmt; + }(Statement)); + var ExpressionTransformer = (function () { + function ExpressionTransformer() { + } + ExpressionTransformer.prototype.visitReadVarExpr = function (ast, context) { return ast; }; + ExpressionTransformer.prototype.visitWriteVarExpr = function (expr, context) { + return new WriteVarExpr(expr.name, expr.value.visitExpression(this, context)); + }; + ExpressionTransformer.prototype.visitWriteKeyExpr = function (expr, context) { + return new WriteKeyExpr(expr.receiver.visitExpression(this, context), expr.index.visitExpression(this, context), expr.value.visitExpression(this, context)); + }; + ExpressionTransformer.prototype.visitWritePropExpr = function (expr, context) { + return new WritePropExpr(expr.receiver.visitExpression(this, context), expr.name, expr.value.visitExpression(this, context)); + }; + ExpressionTransformer.prototype.visitInvokeMethodExpr = function (ast, context) { + var method = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(ast.builtin) ? ast.builtin : ast.name; + return new InvokeMethodExpr(ast.receiver.visitExpression(this, context), method, this.visitAllExpressions(ast.args, context), ast.type); + }; + ExpressionTransformer.prototype.visitInvokeFunctionExpr = function (ast, context) { + return new InvokeFunctionExpr(ast.fn.visitExpression(this, context), this.visitAllExpressions(ast.args, context), ast.type); + }; + ExpressionTransformer.prototype.visitInstantiateExpr = function (ast, context) { + return new InstantiateExpr(ast.classExpr.visitExpression(this, context), this.visitAllExpressions(ast.args, context), ast.type); + }; + ExpressionTransformer.prototype.visitLiteralExpr = function (ast, context) { return ast; }; + ExpressionTransformer.prototype.visitExternalExpr = function (ast, context) { return ast; }; + ExpressionTransformer.prototype.visitConditionalExpr = function (ast, context) { + return new ConditionalExpr(ast.condition.visitExpression(this, context), ast.trueCase.visitExpression(this, context), ast.falseCase.visitExpression(this, context)); + }; + ExpressionTransformer.prototype.visitNotExpr = function (ast, context) { + return new NotExpr(ast.condition.visitExpression(this, context)); + }; + ExpressionTransformer.prototype.visitCastExpr = function (ast, context) { + return new CastExpr(ast.value.visitExpression(this, context), context); + }; + ExpressionTransformer.prototype.visitFunctionExpr = function (ast, context) { + // Don't descend into nested functions + return ast; + }; + ExpressionTransformer.prototype.visitBinaryOperatorExpr = function (ast, context) { + return new BinaryOperatorExpr(ast.operator, ast.lhs.visitExpression(this, context), ast.rhs.visitExpression(this, context), ast.type); + }; + ExpressionTransformer.prototype.visitReadPropExpr = function (ast, context) { + return new ReadPropExpr(ast.receiver.visitExpression(this, context), ast.name, ast.type); + }; + ExpressionTransformer.prototype.visitReadKeyExpr = function (ast, context) { + return new ReadKeyExpr(ast.receiver.visitExpression(this, context), ast.index.visitExpression(this, context), ast.type); + }; + ExpressionTransformer.prototype.visitLiteralArrayExpr = function (ast, context) { + return new LiteralArrayExpr(this.visitAllExpressions(ast.entries, context)); + }; + ExpressionTransformer.prototype.visitLiteralMapExpr = function (ast, context) { + var _this = this; + return new LiteralMapExpr(ast.entries.map(function (entry) { return [entry[0], entry[1].visitExpression(_this, context)]; })); + }; + ExpressionTransformer.prototype.visitAllExpressions = function (exprs, context) { + var _this = this; + return exprs.map(function (expr) { return expr.visitExpression(_this, context); }); + }; + ExpressionTransformer.prototype.visitDeclareVarStmt = function (stmt, context) { + return new DeclareVarStmt(stmt.name, stmt.value.visitExpression(this, context), stmt.type, stmt.modifiers); + }; + ExpressionTransformer.prototype.visitDeclareFunctionStmt = function (stmt, context) { + // Don't descend into nested functions + return stmt; + }; + ExpressionTransformer.prototype.visitExpressionStmt = function (stmt, context) { + return new ExpressionStatement(stmt.expr.visitExpression(this, context)); + }; + ExpressionTransformer.prototype.visitReturnStmt = function (stmt, context) { + return new ReturnStatement(stmt.value.visitExpression(this, context)); + }; + ExpressionTransformer.prototype.visitDeclareClassStmt = function (stmt, context) { + // Don't descend into nested functions + return stmt; + }; + ExpressionTransformer.prototype.visitIfStmt = function (stmt, context) { + return new IfStmt(stmt.condition.visitExpression(this, context), this.visitAllStatements(stmt.trueCase, context), this.visitAllStatements(stmt.falseCase, context)); + }; + ExpressionTransformer.prototype.visitTryCatchStmt = function (stmt, context) { + return new TryCatchStmt(this.visitAllStatements(stmt.bodyStmts, context), this.visitAllStatements(stmt.catchStmts, context)); + }; + ExpressionTransformer.prototype.visitThrowStmt = function (stmt, context) { + return new ThrowStmt(stmt.error.visitExpression(this, context)); + }; + ExpressionTransformer.prototype.visitCommentStmt = function (stmt, context) { return stmt; }; + ExpressionTransformer.prototype.visitAllStatements = function (stmts, context) { + var _this = this; + return stmts.map(function (stmt) { return stmt.visitStatement(_this, context); }); + }; + return ExpressionTransformer; + }()); + var RecursiveExpressionVisitor = (function () { + function RecursiveExpressionVisitor() { + } + RecursiveExpressionVisitor.prototype.visitReadVarExpr = function (ast, context) { return ast; }; + RecursiveExpressionVisitor.prototype.visitWriteVarExpr = function (expr, context) { + expr.value.visitExpression(this, context); + return expr; + }; + RecursiveExpressionVisitor.prototype.visitWriteKeyExpr = function (expr, context) { + expr.receiver.visitExpression(this, context); + expr.index.visitExpression(this, context); + expr.value.visitExpression(this, context); + return expr; + }; + RecursiveExpressionVisitor.prototype.visitWritePropExpr = function (expr, context) { + expr.receiver.visitExpression(this, context); + expr.value.visitExpression(this, context); + return expr; + }; + RecursiveExpressionVisitor.prototype.visitInvokeMethodExpr = function (ast, context) { + ast.receiver.visitExpression(this, context); + this.visitAllExpressions(ast.args, context); + return ast; + }; + RecursiveExpressionVisitor.prototype.visitInvokeFunctionExpr = function (ast, context) { + ast.fn.visitExpression(this, context); + this.visitAllExpressions(ast.args, context); + return ast; + }; + RecursiveExpressionVisitor.prototype.visitInstantiateExpr = function (ast, context) { + ast.classExpr.visitExpression(this, context); + this.visitAllExpressions(ast.args, context); + return ast; + }; + RecursiveExpressionVisitor.prototype.visitLiteralExpr = function (ast, context) { return ast; }; + RecursiveExpressionVisitor.prototype.visitExternalExpr = function (ast, context) { return ast; }; + RecursiveExpressionVisitor.prototype.visitConditionalExpr = function (ast, context) { + ast.condition.visitExpression(this, context); + ast.trueCase.visitExpression(this, context); + ast.falseCase.visitExpression(this, context); + return ast; + }; + RecursiveExpressionVisitor.prototype.visitNotExpr = function (ast, context) { + ast.condition.visitExpression(this, context); + return ast; + }; + RecursiveExpressionVisitor.prototype.visitCastExpr = function (ast, context) { + ast.value.visitExpression(this, context); + return ast; + }; + RecursiveExpressionVisitor.prototype.visitFunctionExpr = function (ast, context) { return ast; }; + RecursiveExpressionVisitor.prototype.visitBinaryOperatorExpr = function (ast, context) { + ast.lhs.visitExpression(this, context); + ast.rhs.visitExpression(this, context); + return ast; + }; + RecursiveExpressionVisitor.prototype.visitReadPropExpr = function (ast, context) { + ast.receiver.visitExpression(this, context); + return ast; + }; + RecursiveExpressionVisitor.prototype.visitReadKeyExpr = function (ast, context) { + ast.receiver.visitExpression(this, context); + ast.index.visitExpression(this, context); + return ast; + }; + RecursiveExpressionVisitor.prototype.visitLiteralArrayExpr = function (ast, context) { + this.visitAllExpressions(ast.entries, context); + return ast; + }; + RecursiveExpressionVisitor.prototype.visitLiteralMapExpr = function (ast, context) { + var _this = this; + ast.entries.forEach(function (entry) { return entry[1].visitExpression(_this, context); }); + return ast; + }; + RecursiveExpressionVisitor.prototype.visitAllExpressions = function (exprs, context) { + var _this = this; + exprs.forEach(function (expr) { return expr.visitExpression(_this, context); }); + }; + RecursiveExpressionVisitor.prototype.visitDeclareVarStmt = function (stmt, context) { + stmt.value.visitExpression(this, context); + return stmt; + }; + RecursiveExpressionVisitor.prototype.visitDeclareFunctionStmt = function (stmt, context) { + // Don't descend into nested functions + return stmt; + }; + RecursiveExpressionVisitor.prototype.visitExpressionStmt = function (stmt, context) { + stmt.expr.visitExpression(this, context); + return stmt; + }; + RecursiveExpressionVisitor.prototype.visitReturnStmt = function (stmt, context) { + stmt.value.visitExpression(this, context); + return stmt; + }; + RecursiveExpressionVisitor.prototype.visitDeclareClassStmt = function (stmt, context) { + // Don't descend into nested functions + return stmt; + }; + RecursiveExpressionVisitor.prototype.visitIfStmt = function (stmt, context) { + stmt.condition.visitExpression(this, context); + this.visitAllStatements(stmt.trueCase, context); + this.visitAllStatements(stmt.falseCase, context); + return stmt; + }; + RecursiveExpressionVisitor.prototype.visitTryCatchStmt = function (stmt, context) { + this.visitAllStatements(stmt.bodyStmts, context); + this.visitAllStatements(stmt.catchStmts, context); + return stmt; + }; + RecursiveExpressionVisitor.prototype.visitThrowStmt = function (stmt, context) { + stmt.error.visitExpression(this, context); + return stmt; + }; + RecursiveExpressionVisitor.prototype.visitCommentStmt = function (stmt, context) { return stmt; }; + RecursiveExpressionVisitor.prototype.visitAllStatements = function (stmts, context) { + var _this = this; + stmts.forEach(function (stmt) { return stmt.visitStatement(_this, context); }); + }; + return RecursiveExpressionVisitor; + }()); + function replaceVarInExpression(varName, newValue, expression) { + var transformer = new _ReplaceVariableTransformer(varName, newValue); + return expression.visitExpression(transformer, null); + } + var _ReplaceVariableTransformer = (function (_super) { + __extends(_ReplaceVariableTransformer, _super); + function _ReplaceVariableTransformer(_varName, _newValue) { + _super.call(this); + this._varName = _varName; + this._newValue = _newValue; + } + _ReplaceVariableTransformer.prototype.visitReadVarExpr = function (ast, context) { + return ast.name == this._varName ? this._newValue : ast; + }; + return _ReplaceVariableTransformer; + }(ExpressionTransformer)); + function findReadVarNames(stmts) { + var finder = new _VariableFinder(); + finder.visitAllStatements(stmts, null); + return finder.varNames; + } + var _VariableFinder = (function (_super) { + __extends(_VariableFinder, _super); + function _VariableFinder() { + _super.apply(this, arguments); + this.varNames = new Set(); + } + _VariableFinder.prototype.visitReadVarExpr = function (ast, context) { + this.varNames.add(ast.name); + return null; + }; + return _VariableFinder; + }(RecursiveExpressionVisitor)); + function variable(name, type) { + if (type === void 0) { type = null; } + return new ReadVarExpr(name, type); + } + function importExpr(id, typeParams) { + if (typeParams === void 0) { typeParams = null; } + return new ExternalExpr(id, null, typeParams); + } + function importType(id, typeParams, typeModifiers) { + if (typeParams === void 0) { typeParams = null; } + if (typeModifiers === void 0) { typeModifiers = null; } + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(id) ? new ExternalType(id, typeParams, typeModifiers) : null; + } + function literalArr(values, type) { + if (type === void 0) { type = null; } + return new LiteralArrayExpr(values, type); + } + function literalMap(values, type) { + if (type === void 0) { type = null; } + return new LiteralMapExpr(values, type); + } + function not(expr) { + return new NotExpr(expr); + } + function fn(params, body, type) { + if (type === void 0) { type = null; } + return new FunctionExpr(params, body, type); + } + function literal(value, type) { + if (type === void 0) { type = null; } + return new LiteralExpr(value, type); + } +//# sourceMappingURL=output_ast.js.map + + /***/ }, + /* 13 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lang__ = __webpack_require__(4); + /* harmony export (binding) */ __webpack_require__.d(exports, "c", function() { return MapWrapper; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "b", function() { return StringMapWrapper; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "a", function() { return ListWrapper; }); + /* unused harmony export isListLikeIterable */ + /* unused harmony export areIterablesEqual */ + /* unused harmony export iterateListLike */ + /* harmony export (binding) */ __webpack_require__.d(exports, "d", function() { return SetWrapper; }); + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +// Safari and Internet Explorer do not support the iterable parameter to the +// Map constructor. We work around that by manually adding the items. + var createMapFromPairs = (function () { + try { + if (new Map([[1, 2]]).size === 1) { + return function createMapFromPairs(pairs) { return new Map(pairs); }; + } + } + catch (e) { + } + return function createMapAndPopulateFromPairs(pairs) { + var map = new Map(); + for (var i = 0; i < pairs.length; i++) { + var pair = pairs[i]; + map.set(pair[0], pair[1]); + } + return map; + }; + })(); + var createMapFromMap = (function () { + try { + if (new Map(new Map())) { + return function createMapFromMap(m) { return new Map(m); }; + } + } + catch (e) { + } + return function createMapAndPopulateFromMap(m) { + var map = new Map(); + m.forEach(function (v, k) { map.set(k, v); }); + return map; + }; + })(); + var _clearValues = (function () { + if ((new Map()).keys().next) { + return function _clearValues(m) { + var keyIterator = m.keys(); + var k; + while (!((k = keyIterator.next()).done)) { + m.set(k.value, null); + } + }; + } + else { + return function _clearValuesWithForeEach(m) { + m.forEach(function (v, k) { m.set(k, null); }); + }; + } + })(); +// Safari doesn't implement MapIterator.next(), which is used is Traceur's polyfill of Array.from +// TODO(mlaval): remove the work around once we have a working polyfill of Array.from + var _arrayFromMap = (function () { + try { + if ((new Map()).values().next) { + return function createArrayFromMap(m, getValues) { + return getValues ? Array.from(m.values()) : Array.from(m.keys()); + }; + } + } + catch (e) { + } + return function createArrayFromMapWithForeach(m, getValues) { + var res = new Array(m.size), i = 0; + m.forEach(function (v, k) { + res[i] = getValues ? v : k; + i++; + }); + return res; + }; + })(); + var MapWrapper = (function () { + function MapWrapper() { + } + MapWrapper.createFromStringMap = function (stringMap) { + var result = new Map(); + for (var prop in stringMap) { + result.set(prop, stringMap[prop]); + } + return result; + }; + MapWrapper.toStringMap = function (m) { + var r = {}; + m.forEach(function (v, k) { return r[k] = v; }); + return r; + }; + MapWrapper.createFromPairs = function (pairs) { return createMapFromPairs(pairs); }; + MapWrapper.iterable = function (m) { return m; }; + MapWrapper.keys = function (m) { return _arrayFromMap(m, false); }; + MapWrapper.values = function (m) { return _arrayFromMap(m, true); }; + return MapWrapper; + }()); + /** + * Wraps Javascript Objects + */ + var StringMapWrapper = (function () { + function StringMapWrapper() { + } + StringMapWrapper.get = function (map, key) { + return map.hasOwnProperty(key) ? map[key] : undefined; + }; + StringMapWrapper.set = function (map, key, value) { map[key] = value; }; + StringMapWrapper.keys = function (map) { return Object.keys(map); }; + StringMapWrapper.values = function (map) { + return Object.keys(map).map(function (k) { return map[k]; }); + }; + StringMapWrapper.isEmpty = function (map) { + for (var prop in map) { + return false; + } + return true; + }; + StringMapWrapper.forEach = function (map, callback) { + for (var _i = 0, _a = Object.keys(map); _i < _a.length; _i++) { + var k = _a[_i]; + callback(map[k], k); + } + }; + StringMapWrapper.merge = function (m1, m2) { + var m = {}; + for (var _i = 0, _a = Object.keys(m1); _i < _a.length; _i++) { + var k = _a[_i]; + m[k] = m1[k]; + } + for (var _b = 0, _c = Object.keys(m2); _b < _c.length; _b++) { + var k = _c[_b]; + m[k] = m2[k]; + } + return m; + }; + StringMapWrapper.equals = function (m1, m2) { + var k1 = Object.keys(m1); + var k2 = Object.keys(m2); + if (k1.length != k2.length) { + return false; + } + for (var i = 0; i < k1.length; i++) { + var key = k1[i]; + if (m1[key] !== m2[key]) { + return false; + } + } + return true; + }; + return StringMapWrapper; + }()); + var ListWrapper = (function () { + function ListWrapper() { + } + // JS has no way to express a statically fixed size list, but dart does so we + // keep both methods. + ListWrapper.createFixedSize = function (size) { return new Array(size); }; + ListWrapper.createGrowableSize = function (size) { return new Array(size); }; + ListWrapper.clone = function (array) { return array.slice(0); }; + ListWrapper.forEachWithIndex = function (array, fn) { + for (var i = 0; i < array.length; i++) { + fn(array[i], i); + } + }; + ListWrapper.first = function (array) { + if (!array) + return null; + return array[0]; + }; + ListWrapper.last = function (array) { + if (!array || array.length == 0) + return null; + return array[array.length - 1]; + }; + ListWrapper.indexOf = function (array, value, startIndex) { + if (startIndex === void 0) { startIndex = 0; } + return array.indexOf(value, startIndex); + }; + ListWrapper.contains = function (list, el) { return list.indexOf(el) !== -1; }; + ListWrapper.reversed = function (array) { + var a = ListWrapper.clone(array); + return a.reverse(); + }; + ListWrapper.concat = function (a, b) { return a.concat(b); }; + ListWrapper.insert = function (list, index, value) { list.splice(index, 0, value); }; + ListWrapper.removeAt = function (list, index) { + var res = list[index]; + list.splice(index, 1); + return res; + }; + ListWrapper.removeAll = function (list, items) { + for (var i = 0; i < items.length; ++i) { + var index = list.indexOf(items[i]); + list.splice(index, 1); + } + }; + ListWrapper.remove = function (list, el) { + var index = list.indexOf(el); + if (index > -1) { + list.splice(index, 1); + return true; + } + return false; + }; + ListWrapper.clear = function (list) { list.length = 0; }; + ListWrapper.isEmpty = function (list) { return list.length == 0; }; + ListWrapper.fill = function (list, value, start, end) { + if (start === void 0) { start = 0; } + if (end === void 0) { end = null; } + list.fill(value, start, end === null ? list.length : end); + }; + ListWrapper.equals = function (a, b) { + if (a.length != b.length) + return false; + for (var i = 0; i < a.length; ++i) { + if (a[i] !== b[i]) + return false; + } + return true; + }; + ListWrapper.slice = function (l, from, to) { + if (from === void 0) { from = 0; } + if (to === void 0) { to = null; } + return l.slice(from, to === null ? undefined : to); + }; + ListWrapper.splice = function (l, from, length) { return l.splice(from, length); }; + ListWrapper.sort = function (l, compareFn) { + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["a" /* isPresent */])(compareFn)) { + l.sort(compareFn); + } + else { + l.sort(); + } + }; + ListWrapper.toString = function (l) { return l.toString(); }; + ListWrapper.toJSON = function (l) { return JSON.stringify(l); }; + ListWrapper.maximum = function (list, predicate) { + if (list.length == 0) { + return null; + } + var solution = null; + var maxValue = -Infinity; + for (var index = 0; index < list.length; index++) { + var candidate = list[index]; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["b" /* isBlank */])(candidate)) { + continue; + } + var candidateValue = predicate(candidate); + if (candidateValue > maxValue) { + solution = candidate; + maxValue = candidateValue; + } + } + return solution; + }; + ListWrapper.flatten = function (list) { + var target = []; + _flattenArray(list, target); + return target; + }; + ListWrapper.addAll = function (list, source) { + for (var i = 0; i < source.length; i++) { + list.push(source[i]); + } + }; + return ListWrapper; + }()); + function _flattenArray(source, target) { + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["a" /* isPresent */])(source)) { + for (var i = 0; i < source.length; i++) { + var item = source[i]; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["c" /* isArray */])(item)) { + _flattenArray(item, target); + } + else { + target.push(item); + } + } + } + return target; + } + function isListLikeIterable(obj) { + if (!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["d" /* isJsObject */])(obj)) + return false; + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["c" /* isArray */])(obj) || + (!(obj instanceof Map) && + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["e" /* getSymbolIterator */])() in obj); // JS Iterable have a Symbol.iterator prop + } + function areIterablesEqual(a, b, comparator) { + var iterator1 = a[__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["e" /* getSymbolIterator */])()](); + var iterator2 = b[__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["e" /* getSymbolIterator */])()](); + while (true) { + var item1 = iterator1.next(); + var item2 = iterator2.next(); + if (item1.done && item2.done) + return true; + if (item1.done || item2.done) + return false; + if (!comparator(item1.value, item2.value)) + return false; + } + } + function iterateListLike(obj, fn) { + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["c" /* isArray */])(obj)) { + for (var i = 0; i < obj.length; i++) { + fn(obj[i]); + } + } + else { + var iterator = obj[__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["e" /* getSymbolIterator */])()](); + var item; + while (!((item = iterator.next()).done)) { + fn(item.value); + } + } + } +// Safari and Internet Explorer do not support the iterable parameter to the +// Set constructor. We work around that by manually adding the items. + var createSetFromList = (function () { + var test = new Set([1, 2, 3]); + if (test.size === 3) { + return function createSetFromList(lst) { return new Set(lst); }; + } + else { + return function createSetAndPopulateFromList(lst) { + var res = new Set(lst); + if (res.size !== lst.length) { + for (var i = 0; i < lst.length; i++) { + res.add(lst[i]); + } + } + return res; + }; + } + })(); + var SetWrapper = (function () { + function SetWrapper() { + } + SetWrapper.createFromList = function (lst) { return createSetFromList(lst); }; + SetWrapper.has = function (s, key) { return s.has(key); }; + SetWrapper.delete = function (m, k) { m.delete(k); }; + return SetWrapper; + }()); +//# sourceMappingURL=collection.js.map + + /***/ }, + /* 14 */ + /***/ function(module, exports, __webpack_require__) { + + var store = __webpack_require__(165)('wks') + , uid = __webpack_require__(81) + , Symbol = __webpack_require__(11).Symbol + , USE_SYMBOL = typeof Symbol == 'function'; + + var $exports = module.exports = function(name){ + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); + }; + + $exports.store = store; + + /***/ }, + /* 15 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var Observable_1 = __webpack_require__(0); + var Subscriber_1 = __webpack_require__(3); + var Subscription_1 = __webpack_require__(22); + var ObjectUnsubscribedError_1 = __webpack_require__(265); + var SubjectSubscription_1 = __webpack_require__(697); + var rxSubscriber_1 = __webpack_require__(174); + /** + * @class SubjectSubscriber + */ + var SubjectSubscriber = (function (_super) { + __extends(SubjectSubscriber, _super); + function SubjectSubscriber(destination) { + _super.call(this, destination); + this.destination = destination; + } + return SubjectSubscriber; + }(Subscriber_1.Subscriber)); + exports.SubjectSubscriber = SubjectSubscriber; + /** + * @class Subject + */ + var Subject = (function (_super) { + __extends(Subject, _super); + function Subject() { + _super.call(this); + this.observers = []; + this.closed = false; + this.isStopped = false; + this.hasError = false; + this.thrownError = null; + } + Subject.prototype[rxSubscriber_1.$$rxSubscriber] = function () { + return new SubjectSubscriber(this); + }; + Subject.prototype.lift = function (operator) { + var subject = new AnonymousSubject(this, this); + subject.operator = operator; + return subject; + }; + Subject.prototype.next = function (value) { + if (this.closed) { + throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); + } + if (!this.isStopped) { + var observers = this.observers; + var len = observers.length; + var copy = observers.slice(); + for (var i = 0; i < len; i++) { + copy[i].next(value); + } + } + }; + Subject.prototype.error = function (err) { + if (this.closed) { + throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); + } + this.hasError = true; + this.thrownError = err; + this.isStopped = true; + var observers = this.observers; + var len = observers.length; + var copy = observers.slice(); + for (var i = 0; i < len; i++) { + copy[i].error(err); + } + this.observers.length = 0; + }; + Subject.prototype.complete = function () { + if (this.closed) { + throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); + } + this.isStopped = true; + var observers = this.observers; + var len = observers.length; + var copy = observers.slice(); + for (var i = 0; i < len; i++) { + copy[i].complete(); + } + this.observers.length = 0; + }; + Subject.prototype.unsubscribe = function () { + this.isStopped = true; + this.closed = true; + this.observers = null; + }; + Subject.prototype._subscribe = function (subscriber) { + if (this.closed) { + throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); + } + else if (this.hasError) { + subscriber.error(this.thrownError); + return Subscription_1.Subscription.EMPTY; + } + else if (this.isStopped) { + subscriber.complete(); + return Subscription_1.Subscription.EMPTY; + } + else { + this.observers.push(subscriber); + return new SubjectSubscription_1.SubjectSubscription(this, subscriber); + } + }; + Subject.prototype.asObservable = function () { + var observable = new Observable_1.Observable(); + observable.source = this; + return observable; + }; + Subject.create = function (destination, source) { + return new AnonymousSubject(destination, source); + }; + return Subject; + }(Observable_1.Observable)); + exports.Subject = Subject; + /** + * @class AnonymousSubject + */ + var AnonymousSubject = (function (_super) { + __extends(AnonymousSubject, _super); + function AnonymousSubject(destination, source) { + _super.call(this); + this.destination = destination; + this.source = source; + } + AnonymousSubject.prototype.next = function (value) { + var destination = this.destination; + if (destination && destination.next) { + destination.next(value); + } + }; + AnonymousSubject.prototype.error = function (err) { + var destination = this.destination; + if (destination && destination.error) { + this.destination.error(err); + } + }; + AnonymousSubject.prototype.complete = function () { + var destination = this.destination; + if (destination && destination.complete) { + this.destination.complete(); + } + }; + AnonymousSubject.prototype._subscribe = function (subscriber) { + var source = this.source; + if (source) { + return this.source.subscribe(subscriber); + } + else { + return Subscription_1.Subscription.EMPTY; + } + }; + return AnonymousSubject; + }(Subject)); + exports.AnonymousSubject = AnonymousSubject; +//# sourceMappingURL=Subject.js.map + + /***/ }, + /* 16 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lang__ = __webpack_require__(5); + /* harmony export (binding) */ __webpack_require__.d(exports, "b", function() { return MapWrapper; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "d", function() { return StringMapWrapper; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "a", function() { return ListWrapper; }); + /* harmony export (immutable) */ exports["e"] = isListLikeIterable; + /* harmony export (immutable) */ exports["g"] = areIterablesEqual; + /* harmony export (immutable) */ exports["f"] = iterateListLike; + /* harmony export (binding) */ __webpack_require__.d(exports, "c", function() { return SetWrapper; }); + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +// Safari and Internet Explorer do not support the iterable parameter to the +// Map constructor. We work around that by manually adding the items. + var createMapFromPairs = (function () { + try { + if (new Map([[1, 2]]).size === 1) { + return function createMapFromPairs(pairs) { return new Map(pairs); }; + } + } + catch (e) { + } + return function createMapAndPopulateFromPairs(pairs) { + var map = new Map(); + for (var i = 0; i < pairs.length; i++) { + var pair = pairs[i]; + map.set(pair[0], pair[1]); + } + return map; + }; + })(); + var createMapFromMap = (function () { + try { + if (new Map(new Map())) { + return function createMapFromMap(m) { return new Map(m); }; + } + } + catch (e) { + } + return function createMapAndPopulateFromMap(m) { + var map = new Map(); + m.forEach(function (v, k) { map.set(k, v); }); + return map; + }; + })(); + var _clearValues = (function () { + if ((new Map()).keys().next) { + return function _clearValues(m) { + var keyIterator = m.keys(); + var k; + while (!((k = keyIterator.next()).done)) { + m.set(k.value, null); + } + }; + } + else { + return function _clearValuesWithForeEach(m) { + m.forEach(function (v, k) { m.set(k, null); }); + }; + } + })(); +// Safari doesn't implement MapIterator.next(), which is used is Traceur's polyfill of Array.from +// TODO(mlaval): remove the work around once we have a working polyfill of Array.from + var _arrayFromMap = (function () { + try { + if ((new Map()).values().next) { + return function createArrayFromMap(m, getValues) { + return getValues ? Array.from(m.values()) : Array.from(m.keys()); + }; + } + } + catch (e) { + } + return function createArrayFromMapWithForeach(m, getValues) { + var res = new Array(m.size), i = 0; + m.forEach(function (v, k) { + res[i] = getValues ? v : k; + i++; + }); + return res; + }; + })(); + var MapWrapper = (function () { + function MapWrapper() { + } + MapWrapper.createFromStringMap = function (stringMap) { + var result = new Map(); + for (var prop in stringMap) { + result.set(prop, stringMap[prop]); + } + return result; + }; + MapWrapper.toStringMap = function (m) { + var r = {}; + m.forEach(function (v, k) { return r[k] = v; }); + return r; + }; + MapWrapper.createFromPairs = function (pairs) { return createMapFromPairs(pairs); }; + MapWrapper.iterable = function (m) { return m; }; + MapWrapper.keys = function (m) { return _arrayFromMap(m, false); }; + MapWrapper.values = function (m) { return _arrayFromMap(m, true); }; + return MapWrapper; + }()); + /** + * Wraps Javascript Objects + */ + var StringMapWrapper = (function () { + function StringMapWrapper() { + } + StringMapWrapper.get = function (map, key) { + return map.hasOwnProperty(key) ? map[key] : undefined; + }; + StringMapWrapper.set = function (map, key, value) { map[key] = value; }; + StringMapWrapper.keys = function (map) { return Object.keys(map); }; + StringMapWrapper.values = function (map) { + return Object.keys(map).map(function (k) { return map[k]; }); + }; + StringMapWrapper.isEmpty = function (map) { + for (var prop in map) { + return false; + } + return true; + }; + StringMapWrapper.forEach = function (map, callback) { + for (var _i = 0, _a = Object.keys(map); _i < _a.length; _i++) { + var k = _a[_i]; + callback(map[k], k); + } + }; + StringMapWrapper.merge = function (m1, m2) { + var m = {}; + for (var _i = 0, _a = Object.keys(m1); _i < _a.length; _i++) { + var k = _a[_i]; + m[k] = m1[k]; + } + for (var _b = 0, _c = Object.keys(m2); _b < _c.length; _b++) { + var k = _c[_b]; + m[k] = m2[k]; + } + return m; + }; + StringMapWrapper.equals = function (m1, m2) { + var k1 = Object.keys(m1); + var k2 = Object.keys(m2); + if (k1.length != k2.length) { + return false; + } + for (var i = 0; i < k1.length; i++) { + var key = k1[i]; + if (m1[key] !== m2[key]) { + return false; + } + } + return true; + }; + return StringMapWrapper; + }()); + var ListWrapper = (function () { + function ListWrapper() { + } + // JS has no way to express a statically fixed size list, but dart does so we + // keep both methods. + ListWrapper.createFixedSize = function (size) { return new Array(size); }; + ListWrapper.createGrowableSize = function (size) { return new Array(size); }; + ListWrapper.clone = function (array) { return array.slice(0); }; + ListWrapper.forEachWithIndex = function (array, fn) { + for (var i = 0; i < array.length; i++) { + fn(array[i], i); + } + }; + ListWrapper.first = function (array) { + if (!array) + return null; + return array[0]; + }; + ListWrapper.last = function (array) { + if (!array || array.length == 0) + return null; + return array[array.length - 1]; + }; + ListWrapper.indexOf = function (array, value, startIndex) { + if (startIndex === void 0) { startIndex = 0; } + return array.indexOf(value, startIndex); + }; + ListWrapper.contains = function (list, el) { return list.indexOf(el) !== -1; }; + ListWrapper.reversed = function (array) { + var a = ListWrapper.clone(array); + return a.reverse(); + }; + ListWrapper.concat = function (a, b) { return a.concat(b); }; + ListWrapper.insert = function (list, index, value) { list.splice(index, 0, value); }; + ListWrapper.removeAt = function (list, index) { + var res = list[index]; + list.splice(index, 1); + return res; + }; + ListWrapper.removeAll = function (list, items) { + for (var i = 0; i < items.length; ++i) { + var index = list.indexOf(items[i]); + list.splice(index, 1); + } + }; + ListWrapper.remove = function (list, el) { + var index = list.indexOf(el); + if (index > -1) { + list.splice(index, 1); + return true; + } + return false; + }; + ListWrapper.clear = function (list) { list.length = 0; }; + ListWrapper.isEmpty = function (list) { return list.length == 0; }; + ListWrapper.fill = function (list, value, start, end) { + if (start === void 0) { start = 0; } + if (end === void 0) { end = null; } + list.fill(value, start, end === null ? list.length : end); + }; + ListWrapper.equals = function (a, b) { + if (a.length != b.length) + return false; + for (var i = 0; i < a.length; ++i) { + if (a[i] !== b[i]) + return false; + } + return true; + }; + ListWrapper.slice = function (l, from, to) { + if (from === void 0) { from = 0; } + if (to === void 0) { to = null; } + return l.slice(from, to === null ? undefined : to); + }; + ListWrapper.splice = function (l, from, length) { return l.splice(from, length); }; + ListWrapper.sort = function (l, compareFn) { + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["e" /* isPresent */])(compareFn)) { + l.sort(compareFn); + } + else { + l.sort(); + } + }; + ListWrapper.toString = function (l) { return l.toString(); }; + ListWrapper.toJSON = function (l) { return JSON.stringify(l); }; + ListWrapper.maximum = function (list, predicate) { + if (list.length == 0) { + return null; + } + var solution = null; + var maxValue = -Infinity; + for (var index = 0; index < list.length; index++) { + var candidate = list[index]; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["d" /* isBlank */])(candidate)) { + continue; + } + var candidateValue = predicate(candidate); + if (candidateValue > maxValue) { + solution = candidate; + maxValue = candidateValue; + } + } + return solution; + }; + ListWrapper.flatten = function (list) { + var target = []; + _flattenArray(list, target); + return target; + }; + ListWrapper.addAll = function (list, source) { + for (var i = 0; i < source.length; i++) { + list.push(source[i]); + } + }; + return ListWrapper; + }()); + function _flattenArray(source, target) { + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["e" /* isPresent */])(source)) { + for (var i = 0; i < source.length; i++) { + var item = source[i]; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["f" /* isArray */])(item)) { + _flattenArray(item, target); + } + else { + target.push(item); + } + } + } + return target; + } + function isListLikeIterable(obj) { + if (!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["g" /* isJsObject */])(obj)) + return false; + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["f" /* isArray */])(obj) || + (!(obj instanceof Map) && + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["h" /* getSymbolIterator */])() in obj); // JS Iterable have a Symbol.iterator prop + } + function areIterablesEqual(a, b, comparator) { + var iterator1 = a[__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["h" /* getSymbolIterator */])()](); + var iterator2 = b[__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["h" /* getSymbolIterator */])()](); + while (true) { + var item1 = iterator1.next(); + var item2 = iterator2.next(); + if (item1.done && item2.done) + return true; + if (item1.done || item2.done) + return false; + if (!comparator(item1.value, item2.value)) + return false; + } + } + function iterateListLike(obj, fn) { + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["f" /* isArray */])(obj)) { + for (var i = 0; i < obj.length; i++) { + fn(obj[i]); + } + } + else { + var iterator = obj[__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__lang__["h" /* getSymbolIterator */])()](); + var item; + while (!((item = iterator.next()).done)) { + fn(item.value); + } + } + } +// Safari and Internet Explorer do not support the iterable parameter to the +// Set constructor. We work around that by manually adding the items. + var createSetFromList = (function () { + var test = new Set([1, 2, 3]); + if (test.size === 3) { + return function createSetFromList(lst) { return new Set(lst); }; + } + else { + return function createSetAndPopulateFromList(lst) { + var res = new Set(lst); + if (res.size !== lst.length) { + for (var i = 0; i < lst.length; i++) { + res.add(lst[i]); + } + } + return res; + }; + } + })(); + var SetWrapper = (function () { + function SetWrapper() { + } + SetWrapper.createFromList = function (lst) { return createSetFromList(lst); }; + SetWrapper.has = function (s, key) { return s.has(key); }; + SetWrapper.delete = function (m, k) { m.delete(k); }; + return SetWrapper; + }()); +//# sourceMappingURL=collection.js.map + + /***/ }, + /* 17 */ + /***/ function(module, exports, __webpack_require__) { + + var anObject = __webpack_require__(8) + , IE8_DOM_DEFINE = __webpack_require__(367) + , toPrimitive = __webpack_require__(73) + , dP = Object.defineProperty; + + exports.f = __webpack_require__(21) ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; + }; + + /***/ }, + /* 18 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__facade_lang__ = __webpack_require__(31); + /* harmony export (immutable) */ exports["a"] = getDOM; + /* unused harmony export setDOM */ + /* harmony export (immutable) */ exports["c"] = setRootDomAdapter; + /* harmony export (binding) */ __webpack_require__.d(exports, "b", function() { return DomAdapter; }); + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + var _DOM = null; + function getDOM() { + return _DOM; + } + function setDOM(adapter) { + _DOM = adapter; + } + function setRootDomAdapter(adapter) { + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["b" /* isBlank */])(_DOM)) { + _DOM = adapter; + } + } + /* tslint:disable:requireParameterType */ + /** + * Provides DOM operations in an environment-agnostic way. + * + * @security Tread carefully! Interacting with the DOM directly is dangerous and + * can introduce XSS risks. + */ + var DomAdapter = (function () { + function DomAdapter() { + this.resourceLoaderType = null; + } + Object.defineProperty(DomAdapter.prototype, "attrToPropMap", { + /** + * Maps attribute names to their corresponding property names for cases + * where attribute name doesn't match property name. + */ + get: function () { return this._attrToPropMap; }, + set: function (value) { this._attrToPropMap = value; }, + enumerable: true, + configurable: true + }); + ; + ; + return DomAdapter; + }()); +//# sourceMappingURL=dom_adapter.js.map + + /***/ }, + /* 19 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__compile_metadata__ = __webpack_require__(25); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__private_import_core__ = __webpack_require__(20); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util__ = __webpack_require__(29); + /* harmony export (binding) */ __webpack_require__.d(exports, "b", function() { return Identifiers; }); + /* harmony export (immutable) */ exports["d"] = resolveIdentifier; + /* harmony export (immutable) */ exports["c"] = identifierToken; + /* harmony export (immutable) */ exports["a"] = resolveIdentifierToken; + /* harmony export (immutable) */ exports["e"] = resolveEnumIdentifier; + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + + + + var APP_VIEW_MODULE_URL = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/view'); + var VIEW_UTILS_MODULE_URL = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/view_utils'); + var CD_MODULE_URL = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'change_detection/change_detection'); + var ANIMATION_STYLE_UTIL_ASSET_URL = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'animation/animation_style_util'); + var Identifiers = (function () { + function Identifiers() { + } + Identifiers.ANALYZE_FOR_ENTRY_COMPONENTS = { + name: 'ANALYZE_FOR_ENTRY_COMPONENTS', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'metadata/di'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["ANALYZE_FOR_ENTRY_COMPONENTS"] + }; + Identifiers.ViewUtils = { + name: 'ViewUtils', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/view_utils'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["a" /* ViewUtils */] + }; + Identifiers.AppView = { name: 'AppView', moduleUrl: APP_VIEW_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["b" /* AppView */] }; + Identifiers.DebugAppView = { + name: 'DebugAppView', + moduleUrl: APP_VIEW_MODULE_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["c" /* DebugAppView */] + }; + Identifiers.AppElement = { + name: 'AppElement', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/element'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["d" /* AppElement */] + }; + Identifiers.ElementRef = { + name: 'ElementRef', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/element_ref'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["ElementRef"] + }; + Identifiers.ViewContainerRef = { + name: 'ViewContainerRef', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/view_container_ref'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["ViewContainerRef"] + }; + Identifiers.ChangeDetectorRef = { + name: 'ChangeDetectorRef', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'change_detection/change_detector_ref'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["ChangeDetectorRef"] + }; + Identifiers.RenderComponentType = { + name: 'RenderComponentType', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'render/api'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["RenderComponentType"] + }; + Identifiers.QueryList = { + name: 'QueryList', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/query_list'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["QueryList"] + }; + Identifiers.TemplateRef = { + name: 'TemplateRef', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/template_ref'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["TemplateRef"] + }; + Identifiers.TemplateRef_ = { + name: 'TemplateRef_', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/template_ref'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["e" /* TemplateRef_ */] + }; + Identifiers.CodegenComponentFactoryResolver = { + name: 'CodegenComponentFactoryResolver', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/component_factory_resolver'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["f" /* CodegenComponentFactoryResolver */] + }; + Identifiers.ComponentFactoryResolver = { + name: 'ComponentFactoryResolver', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/component_factory_resolver'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["ComponentFactoryResolver"] + }; + Identifiers.ComponentFactory = { + name: 'ComponentFactory', + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["ComponentFactory"], + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/component_factory') + }; + Identifiers.NgModuleFactory = { + name: 'NgModuleFactory', + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["NgModuleFactory"], + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/ng_module_factory') + }; + Identifiers.NgModuleInjector = { + name: 'NgModuleInjector', + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["g" /* NgModuleInjector */], + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/ng_module_factory') + }; + Identifiers.RegisterModuleFactoryFn = { + name: 'registerModuleFactory', + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["h" /* registerModuleFactory */], + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/ng_module_factory_loader') + }; + Identifiers.ValueUnwrapper = { name: 'ValueUnwrapper', moduleUrl: CD_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["i" /* ValueUnwrapper */] }; + Identifiers.Injector = { + name: 'Injector', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'di/injector'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["Injector"] + }; + Identifiers.ViewEncapsulation = { + name: 'ViewEncapsulation', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'metadata/view'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["ViewEncapsulation"] + }; + Identifiers.ViewType = { + name: 'ViewType', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/view_type'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["j" /* ViewType */] + }; + Identifiers.ChangeDetectionStrategy = { + name: 'ChangeDetectionStrategy', + moduleUrl: CD_MODULE_URL, + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["ChangeDetectionStrategy"] + }; + Identifiers.StaticNodeDebugInfo = { + name: 'StaticNodeDebugInfo', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/debug_context'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["k" /* StaticNodeDebugInfo */] + }; + Identifiers.DebugContext = { + name: 'DebugContext', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'linker/debug_context'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["l" /* DebugContext */] + }; + Identifiers.Renderer = { + name: 'Renderer', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'render/api'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["Renderer"] + }; + Identifiers.SimpleChange = { name: 'SimpleChange', moduleUrl: CD_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["SimpleChange"] }; + Identifiers.UNINITIALIZED = { name: 'UNINITIALIZED', moduleUrl: CD_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["m" /* UNINITIALIZED */] }; + Identifiers.ChangeDetectorStatus = { + name: 'ChangeDetectorStatus', + moduleUrl: CD_MODULE_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["n" /* ChangeDetectorStatus */] + }; + Identifiers.checkBinding = { + name: 'checkBinding', + moduleUrl: VIEW_UTILS_MODULE_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["o" /* checkBinding */] + }; + Identifiers.flattenNestedViewRenderNodes = { + name: 'flattenNestedViewRenderNodes', + moduleUrl: VIEW_UTILS_MODULE_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["p" /* flattenNestedViewRenderNodes */] + }; + Identifiers.devModeEqual = { name: 'devModeEqual', moduleUrl: CD_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["q" /* devModeEqual */] }; + Identifiers.interpolate = { + name: 'interpolate', + moduleUrl: VIEW_UTILS_MODULE_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["r" /* interpolate */] + }; + Identifiers.castByValue = { + name: 'castByValue', + moduleUrl: VIEW_UTILS_MODULE_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["s" /* castByValue */] + }; + Identifiers.EMPTY_ARRAY = { + name: 'EMPTY_ARRAY', + moduleUrl: VIEW_UTILS_MODULE_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["t" /* EMPTY_ARRAY */] + }; + Identifiers.EMPTY_MAP = { name: 'EMPTY_MAP', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["u" /* EMPTY_MAP */] }; + Identifiers.pureProxies = [ + null, + { name: 'pureProxy1', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["v" /* pureProxy1 */] }, + { name: 'pureProxy2', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["w" /* pureProxy2 */] }, + { name: 'pureProxy3', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["x" /* pureProxy3 */] }, + { name: 'pureProxy4', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["y" /* pureProxy4 */] }, + { name: 'pureProxy5', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["z" /* pureProxy5 */] }, + { name: 'pureProxy6', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["A" /* pureProxy6 */] }, + { name: 'pureProxy7', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["B" /* pureProxy7 */] }, + { name: 'pureProxy8', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["C" /* pureProxy8 */] }, + { name: 'pureProxy9', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["D" /* pureProxy9 */] }, + { name: 'pureProxy10', moduleUrl: VIEW_UTILS_MODULE_URL, runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["E" /* pureProxy10 */] }, + ]; + Identifiers.SecurityContext = { + name: 'SecurityContext', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'security'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["SecurityContext"], + }; + Identifiers.AnimationKeyframe = { + name: 'AnimationKeyframe', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'animation/animation_keyframe'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["F" /* AnimationKeyframe */] + }; + Identifiers.AnimationStyles = { + name: 'AnimationStyles', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'animation/animation_styles'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["G" /* AnimationStyles */] + }; + Identifiers.NoOpAnimationPlayer = { + name: 'NoOpAnimationPlayer', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'animation/animation_player'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["H" /* NoOpAnimationPlayer */] + }; + Identifiers.AnimationGroupPlayer = { + name: 'AnimationGroupPlayer', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'animation/animation_group_player'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["I" /* AnimationGroupPlayer */] + }; + Identifiers.AnimationSequencePlayer = { + name: 'AnimationSequencePlayer', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'animation/animation_sequence_player'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["J" /* AnimationSequencePlayer */] + }; + Identifiers.prepareFinalAnimationStyles = { + name: 'prepareFinalAnimationStyles', + moduleUrl: ANIMATION_STYLE_UTIL_ASSET_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["K" /* prepareFinalAnimationStyles */] + }; + Identifiers.balanceAnimationKeyframes = { + name: 'balanceAnimationKeyframes', + moduleUrl: ANIMATION_STYLE_UTIL_ASSET_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["L" /* balanceAnimationKeyframes */] + }; + Identifiers.clearStyles = { + name: 'clearStyles', + moduleUrl: ANIMATION_STYLE_UTIL_ASSET_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["M" /* clearStyles */] + }; + Identifiers.renderStyles = { + name: 'renderStyles', + moduleUrl: ANIMATION_STYLE_UTIL_ASSET_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["N" /* renderStyles */] + }; + Identifiers.collectAndResolveStyles = { + name: 'collectAndResolveStyles', + moduleUrl: ANIMATION_STYLE_UTIL_ASSET_URL, + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["O" /* collectAndResolveStyles */] + }; + Identifiers.LOCALE_ID = { + name: 'LOCALE_ID', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'i18n/tokens'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["LOCALE_ID"] + }; + Identifiers.TRANSLATIONS_FORMAT = { + name: 'TRANSLATIONS_FORMAT', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'i18n/tokens'), + runtime: __WEBPACK_IMPORTED_MODULE_0__angular_core__["TRANSLATIONS_FORMAT"] + }; + Identifiers.AnimationOutput = { + name: 'AnimationOutput', + moduleUrl: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* assetUrl */])('core', 'animation/animation_output'), + runtime: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["P" /* AnimationOutput */] + }; + return Identifiers; + }()); + function resolveIdentifier(identifier) { + return new __WEBPACK_IMPORTED_MODULE_1__compile_metadata__["a" /* CompileIdentifierMetadata */]({ + name: identifier.name, + moduleUrl: identifier.moduleUrl, + reference: __WEBPACK_IMPORTED_MODULE_2__private_import_core__["Q" /* reflector */].resolveIdentifier(identifier.name, identifier.moduleUrl, identifier.runtime) + }); + } + function identifierToken(identifier) { + return new __WEBPACK_IMPORTED_MODULE_1__compile_metadata__["b" /* CompileTokenMetadata */]({ identifier: identifier }); + } + function resolveIdentifierToken(identifier) { + return identifierToken(resolveIdentifier(identifier)); + } + function resolveEnumIdentifier(enumType, name) { + var resolvedEnum = __WEBPACK_IMPORTED_MODULE_2__private_import_core__["Q" /* reflector */].resolveEnum(enumType.reference, name); + return new __WEBPACK_IMPORTED_MODULE_1__compile_metadata__["a" /* CompileIdentifierMetadata */]({ name: enumType.name + "." + name, moduleUrl: enumType.moduleUrl, reference: resolvedEnum }); + } +//# sourceMappingURL=identifiers.js.map + + /***/ }, + /* 20 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1); + /* harmony export (binding) */ __webpack_require__.d(exports, "Y", function() { return isDefaultChangeDetectionStrategy; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "n", function() { return ChangeDetectorStatus; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "X", function() { return LifecycleHooks; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "_0", function() { return LIFECYCLE_HOOKS_VALUES; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "Z", function() { return ReflectorReader; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "d", function() { return AppElement; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "f", function() { return CodegenComponentFactoryResolver; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "b", function() { return AppView; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "c", function() { return DebugAppView; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "g", function() { return NgModuleInjector; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "h", function() { return registerModuleFactory; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "j", function() { return ViewType; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "S", function() { return MAX_INTERPOLATION_VALUES; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "o", function() { return checkBinding; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "p", function() { return flattenNestedViewRenderNodes; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "r", function() { return interpolate; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "a", function() { return ViewUtils; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "l", function() { return DebugContext; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "k", function() { return StaticNodeDebugInfo; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "q", function() { return devModeEqual; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "m", function() { return UNINITIALIZED; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "i", function() { return ValueUnwrapper; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "e", function() { return TemplateRef_; }); + /* unused harmony export RenderDebugInfo */ + /* harmony export (binding) */ __webpack_require__.d(exports, "t", function() { return EMPTY_ARRAY; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "u", function() { return EMPTY_MAP; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "v", function() { return pureProxy1; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "w", function() { return pureProxy2; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "x", function() { return pureProxy3; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "y", function() { return pureProxy4; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "z", function() { return pureProxy5; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "A", function() { return pureProxy6; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "B", function() { return pureProxy7; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "C", function() { return pureProxy8; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "D", function() { return pureProxy9; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "E", function() { return pureProxy10; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "s", function() { return castByValue; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "R", function() { return Console; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "Q", function() { return reflector; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "_2", function() { return Reflector; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "_3", function() { return ReflectionCapabilities; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "H", function() { return NoOpAnimationPlayer; }); + /* unused harmony export AnimationPlayer */ + /* harmony export (binding) */ __webpack_require__.d(exports, "J", function() { return AnimationSequencePlayer; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "I", function() { return AnimationGroupPlayer; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "F", function() { return AnimationKeyframe; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "G", function() { return AnimationStyles; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "P", function() { return AnimationOutput; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "T", function() { return ANY_STATE; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "V", function() { return DEFAULT_STATE; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "W", function() { return EMPTY_STATE; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "U", function() { return FILL_STYLE_FLAG; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "K", function() { return prepareFinalAnimationStyles; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "L", function() { return balanceAnimationKeyframes; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "M", function() { return clearStyles; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "O", function() { return collectAndResolveStyles; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "N", function() { return renderStyles; }); + /* unused harmony export ViewMetadata */ + /* harmony export (binding) */ __webpack_require__.d(exports, "_1", function() { return ComponentStillLoadingError; }); + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + var isDefaultChangeDetectionStrategy = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].isDefaultChangeDetectionStrategy; + var ChangeDetectorStatus = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].ChangeDetectorStatus; + __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].CHANGE_DETECTION_STRATEGY_VALUES; + var LifecycleHooks = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].LifecycleHooks; + var LIFECYCLE_HOOKS_VALUES = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].LIFECYCLE_HOOKS_VALUES; + var ReflectorReader = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].ReflectorReader; + var AppElement = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].AppElement; + var CodegenComponentFactoryResolver = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].CodegenComponentFactoryResolver; + var AppView = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].AppView; + var DebugAppView = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].DebugAppView; + var NgModuleInjector = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].NgModuleInjector; + var registerModuleFactory = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].registerModuleFactory; + var ViewType = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].ViewType; + var MAX_INTERPOLATION_VALUES = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].MAX_INTERPOLATION_VALUES; + var checkBinding = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].checkBinding; + var flattenNestedViewRenderNodes = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].flattenNestedViewRenderNodes; + var interpolate = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].interpolate; + var ViewUtils = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].ViewUtils; + var DebugContext = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].DebugContext; + var StaticNodeDebugInfo = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].StaticNodeDebugInfo; + var devModeEqual = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].devModeEqual; + var UNINITIALIZED = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].UNINITIALIZED; + var ValueUnwrapper = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].ValueUnwrapper; + var TemplateRef_ = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].TemplateRef_; + var RenderDebugInfo = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].RenderDebugInfo; + var EMPTY_ARRAY = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].EMPTY_ARRAY; + var EMPTY_MAP = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].EMPTY_MAP; + var pureProxy1 = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].pureProxy1; + var pureProxy2 = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].pureProxy2; + var pureProxy3 = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].pureProxy3; + var pureProxy4 = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].pureProxy4; + var pureProxy5 = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].pureProxy5; + var pureProxy6 = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].pureProxy6; + var pureProxy7 = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].pureProxy7; + var pureProxy8 = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].pureProxy8; + var pureProxy9 = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].pureProxy9; + var pureProxy10 = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].pureProxy10; + var castByValue = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].castByValue; + var Console = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].Console; + var reflector = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].reflector; + var Reflector = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].Reflector; + var ReflectionCapabilities = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].ReflectionCapabilities; + var NoOpAnimationPlayer = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].NoOpAnimationPlayer; + var AnimationPlayer = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].AnimationPlayer; + var AnimationSequencePlayer = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].AnimationSequencePlayer; + var AnimationGroupPlayer = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].AnimationGroupPlayer; + var AnimationKeyframe = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].AnimationKeyframe; + var AnimationStyles = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].AnimationStyles; + var AnimationOutput = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].AnimationOutput; + var ANY_STATE = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].ANY_STATE; + var DEFAULT_STATE = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].DEFAULT_STATE; + var EMPTY_STATE = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].EMPTY_STATE; + var FILL_STYLE_FLAG = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].FILL_STYLE_FLAG; + var prepareFinalAnimationStyles = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].prepareFinalAnimationStyles; + var balanceAnimationKeyframes = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].balanceAnimationKeyframes; + var clearStyles = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].clearStyles; + var collectAndResolveStyles = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].collectAndResolveStyles; + var renderStyles = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].renderStyles; + var ViewMetadata = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].ViewMetadata; + var ComponentStillLoadingError = __WEBPACK_IMPORTED_MODULE_0__angular_core__["__core_private__"].ComponentStillLoadingError; +//# sourceMappingURL=private_import_core.js.map + + /***/ }, + /* 21 */ + /***/ function(module, exports, __webpack_require__) { + +// Thank's IE8 for his funny defineProperty + module.exports = !__webpack_require__(9)(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; + }); + + /***/ }, + /* 22 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + "use strict"; + var isArray_1 = __webpack_require__(48); + var isObject_1 = __webpack_require__(959); + var isFunction_1 = __webpack_require__(266); + var tryCatch_1 = __webpack_require__(24); + var errorObject_1 = __webpack_require__(23); + var UnsubscriptionError_1 = __webpack_require__(416); + /** + * Represents a disposable resource, such as the execution of an Observable. A + * Subscription has one important method, `unsubscribe`, that takes no argument + * and just disposes the resource held by the subscription. + * + * Additionally, subscriptions may be grouped together through the `add()` + * method, which will attach a child Subscription to the current Subscription. + * When a Subscription is unsubscribed, all its children (and its grandchildren) + * will be unsubscribed as well. + * + * @class Subscription + */ + var Subscription = (function () { + /** + * @param {function(): void} [unsubscribe] A function describing how to + * perform the disposal of resources when the `unsubscribe` method is called. + */ + function Subscription(unsubscribe) { + /** + * A flag to indicate whether this Subscription has already been unsubscribed. + * @type {boolean} + */ + this.closed = false; + if (unsubscribe) { + this._unsubscribe = unsubscribe; + } + } + /** + * Disposes the resources held by the subscription. May, for instance, cancel + * an ongoing Observable execution or cancel any other type of work that + * started when the Subscription was created. + * @return {void} + */ + Subscription.prototype.unsubscribe = function () { + var hasErrors = false; + var errors; + if (this.closed) { + return; + } + this.closed = true; + var _a = this, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions; + this._subscriptions = null; + if (isFunction_1.isFunction(_unsubscribe)) { + var trial = tryCatch_1.tryCatch(_unsubscribe).call(this); + if (trial === errorObject_1.errorObject) { + hasErrors = true; + (errors = errors || []).push(errorObject_1.errorObject.e); + } + } + if (isArray_1.isArray(_subscriptions)) { + var index = -1; + var len = _subscriptions.length; + while (++index < len) { + var sub = _subscriptions[index]; + if (isObject_1.isObject(sub)) { + var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub); + if (trial === errorObject_1.errorObject) { + hasErrors = true; + errors = errors || []; + var err = errorObject_1.errorObject.e; + if (err instanceof UnsubscriptionError_1.UnsubscriptionError) { + errors = errors.concat(err.errors); + } + else { + errors.push(err); + } + } + } + } + } + if (hasErrors) { + throw new UnsubscriptionError_1.UnsubscriptionError(errors); + } + }; + /** + * Adds a tear down to be called during the unsubscribe() of this + * Subscription. + * + * If the tear down being added is a subscription that is already + * unsubscribed, is the same reference `add` is being called on, or is + * `Subscription.EMPTY`, it will not be added. + * + * If this subscription is already in an `closed` state, the passed + * tear down logic will be executed immediately. + * + * @param {TeardownLogic} teardown The additional logic to execute on + * teardown. + * @return {Subscription} Returns the Subscription used or created to be + * added to the inner subscriptions list. This Subscription can be used with + * `remove()` to remove the passed teardown logic from the inner subscriptions + * list. + */ + Subscription.prototype.add = function (teardown) { + if (!teardown || (teardown === Subscription.EMPTY)) { + return Subscription.EMPTY; + } + if (teardown === this) { + return this; + } + var sub = teardown; + switch (typeof teardown) { + case 'function': + sub = new Subscription(teardown); + case 'object': + if (sub.closed || typeof sub.unsubscribe !== 'function') { + break; + } + else if (this.closed) { + sub.unsubscribe(); + } + else { + (this._subscriptions || (this._subscriptions = [])).push(sub); + } + break; + default: + throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.'); + } + return sub; + }; + /** + * Removes a Subscription from the internal list of subscriptions that will + * unsubscribe during the unsubscribe process of this Subscription. + * @param {Subscription} subscription The subscription to remove. + * @return {void} + */ + Subscription.prototype.remove = function (subscription) { + // HACK: This might be redundant because of the logic in `add()` + if (subscription == null || (subscription === this) || (subscription === Subscription.EMPTY)) { + return; + } + var subscriptions = this._subscriptions; + if (subscriptions) { + var subscriptionIndex = subscriptions.indexOf(subscription); + if (subscriptionIndex !== -1) { + subscriptions.splice(subscriptionIndex, 1); + } + } + }; + Subscription.EMPTY = (function (empty) { + empty.closed = true; + return empty; + }(new Subscription())); + return Subscription; + }()); + exports.Subscription = Subscription; +//# sourceMappingURL=Subscription.js.map + + /***/ }, + /* 23 */ + /***/ function(module, exports) { + + "use strict"; + "use strict"; +// typeof any so that it we don't have to cast when comparing a result to the error object + exports.errorObject = { e: {} }; +//# sourceMappingURL=errorObject.js.map + + /***/ }, + /* 24 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + "use strict"; + var errorObject_1 = __webpack_require__(23); + var tryCatchTarget; + function tryCatcher() { + try { + return tryCatchTarget.apply(this, arguments); + } + catch (e) { + errorObject_1.errorObject.e = e; + return errorObject_1.errorObject; + } + } + function tryCatch(fn) { + tryCatchTarget = fn; + return tryCatcher; + } + exports.tryCatch = tryCatch; + ; +//# sourceMappingURL=tryCatch.js.map + + /***/ }, + /* 25 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__facade_collection__ = __webpack_require__(13); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__facade_lang__ = __webpack_require__(4); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__selector__ = __webpack_require__(195); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util__ = __webpack_require__(29); + /* harmony export (binding) */ __webpack_require__.d(exports, "A", function() { return CompileMetadataWithIdentifier; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "r", function() { return CompileAnimationEntryMetadata; }); + /* unused harmony export CompileAnimationStateMetadata */ + /* harmony export (binding) */ __webpack_require__.d(exports, "g", function() { return CompileAnimationStateDeclarationMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "s", function() { return CompileAnimationStateTransitionMetadata; }); + /* unused harmony export CompileAnimationMetadata */ + /* harmony export (binding) */ __webpack_require__.d(exports, "m", function() { return CompileAnimationKeyframesSequenceMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "h", function() { return CompileAnimationStyleMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "l", function() { return CompileAnimationAnimateMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "k", function() { return CompileAnimationWithStepsMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "i", function() { return CompileAnimationSequenceMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "j", function() { return CompileAnimationGroupMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "a", function() { return CompileIdentifierMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "c", function() { return CompileDiDependencyMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "d", function() { return CompileProviderMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "v", function() { return CompileFactoryMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "b", function() { return CompileTokenMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "e", function() { return CompileTypeMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "y", function() { return CompileQueryMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "o", function() { return CompileStylesheetMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "p", function() { return CompileTemplateMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "q", function() { return CompileDirectiveMetadata; }); + /* harmony export (immutable) */ exports["n"] = createHostComponentMeta; + /* harmony export (binding) */ __webpack_require__.d(exports, "w", function() { return CompilePipeMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "t", function() { return CompileNgModuleMetadata; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "u", function() { return TransitiveCompileNgModuleMetadata; }); + /* harmony export (immutable) */ exports["f"] = removeIdentifierDuplicates; + /* harmony export (immutable) */ exports["z"] = isStaticSymbol; + /* harmony export (binding) */ __webpack_require__.d(exports, "x", function() { return ProviderMeta; }); + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + + + + + + function unimplemented() { + throw new Error('unimplemented'); + } +// group 0: "[prop] or (event) or @trigger" +// group 1: "prop" from "[prop]" +// group 2: "event" from "(event)" +// group 3: "@trigger" from "@trigger" + var HOST_REG_EXP = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))|(\@[-\w]+)$/; + var UNDEFINED = new Object(); + var CompileMetadataWithIdentifier = (function () { + function CompileMetadataWithIdentifier() { + } + Object.defineProperty(CompileMetadataWithIdentifier.prototype, "identifier", { + get: function () { return unimplemented(); }, + enumerable: true, + configurable: true + }); + return CompileMetadataWithIdentifier; + }()); + var CompileAnimationEntryMetadata = (function () { + function CompileAnimationEntryMetadata(name, definitions) { + if (name === void 0) { name = null; } + if (definitions === void 0) { definitions = null; } + this.name = name; + this.definitions = definitions; + } + return CompileAnimationEntryMetadata; + }()); + var CompileAnimationStateMetadata = (function () { + function CompileAnimationStateMetadata() { + } + return CompileAnimationStateMetadata; + }()); + var CompileAnimationStateDeclarationMetadata = (function (_super) { + __extends(CompileAnimationStateDeclarationMetadata, _super); + function CompileAnimationStateDeclarationMetadata(stateNameExpr, styles) { + _super.call(this); + this.stateNameExpr = stateNameExpr; + this.styles = styles; + } + return CompileAnimationStateDeclarationMetadata; + }(CompileAnimationStateMetadata)); + var CompileAnimationStateTransitionMetadata = (function (_super) { + __extends(CompileAnimationStateTransitionMetadata, _super); + function CompileAnimationStateTransitionMetadata(stateChangeExpr, steps) { + _super.call(this); + this.stateChangeExpr = stateChangeExpr; + this.steps = steps; + } + return CompileAnimationStateTransitionMetadata; + }(CompileAnimationStateMetadata)); + var CompileAnimationMetadata = (function () { + function CompileAnimationMetadata() { + } + return CompileAnimationMetadata; + }()); + var CompileAnimationKeyframesSequenceMetadata = (function (_super) { + __extends(CompileAnimationKeyframesSequenceMetadata, _super); + function CompileAnimationKeyframesSequenceMetadata(steps) { + if (steps === void 0) { steps = []; } + _super.call(this); + this.steps = steps; + } + return CompileAnimationKeyframesSequenceMetadata; + }(CompileAnimationMetadata)); + var CompileAnimationStyleMetadata = (function (_super) { + __extends(CompileAnimationStyleMetadata, _super); + function CompileAnimationStyleMetadata(offset, styles) { + if (styles === void 0) { styles = null; } + _super.call(this); + this.offset = offset; + this.styles = styles; + } + return CompileAnimationStyleMetadata; + }(CompileAnimationMetadata)); + var CompileAnimationAnimateMetadata = (function (_super) { + __extends(CompileAnimationAnimateMetadata, _super); + function CompileAnimationAnimateMetadata(timings, styles) { + if (timings === void 0) { timings = 0; } + if (styles === void 0) { styles = null; } + _super.call(this); + this.timings = timings; + this.styles = styles; + } + return CompileAnimationAnimateMetadata; + }(CompileAnimationMetadata)); + var CompileAnimationWithStepsMetadata = (function (_super) { + __extends(CompileAnimationWithStepsMetadata, _super); + function CompileAnimationWithStepsMetadata(steps) { + if (steps === void 0) { steps = null; } + _super.call(this); + this.steps = steps; + } + return CompileAnimationWithStepsMetadata; + }(CompileAnimationMetadata)); + var CompileAnimationSequenceMetadata = (function (_super) { + __extends(CompileAnimationSequenceMetadata, _super); + function CompileAnimationSequenceMetadata(steps) { + if (steps === void 0) { steps = null; } + _super.call(this, steps); + } + return CompileAnimationSequenceMetadata; + }(CompileAnimationWithStepsMetadata)); + var CompileAnimationGroupMetadata = (function (_super) { + __extends(CompileAnimationGroupMetadata, _super); + function CompileAnimationGroupMetadata(steps) { + if (steps === void 0) { steps = null; } + _super.call(this, steps); + } + return CompileAnimationGroupMetadata; + }(CompileAnimationWithStepsMetadata)); + var CompileIdentifierMetadata = (function () { + function CompileIdentifierMetadata(_a) { + var _b = _a === void 0 ? {} : _a, reference = _b.reference, name = _b.name, moduleUrl = _b.moduleUrl, prefix = _b.prefix, value = _b.value; + this.reference = reference; + this.name = name; + this.prefix = prefix; + this.moduleUrl = moduleUrl; + this.value = value; + } + Object.defineProperty(CompileIdentifierMetadata.prototype, "identifier", { + get: function () { return this; }, + enumerable: true, + configurable: true + }); + return CompileIdentifierMetadata; + }()); + var CompileDiDependencyMetadata = (function () { + function CompileDiDependencyMetadata(_a) { + var _b = _a === void 0 ? {} : _a, isAttribute = _b.isAttribute, isSelf = _b.isSelf, isHost = _b.isHost, isSkipSelf = _b.isSkipSelf, isOptional = _b.isOptional, isValue = _b.isValue, query = _b.query, viewQuery = _b.viewQuery, token = _b.token, value = _b.value; + this.isAttribute = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(isAttribute); + this.isSelf = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(isSelf); + this.isHost = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(isHost); + this.isSkipSelf = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(isSkipSelf); + this.isOptional = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(isOptional); + this.isValue = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(isValue); + this.query = query; + this.viewQuery = viewQuery; + this.token = token; + this.value = value; + } + return CompileDiDependencyMetadata; + }()); + var CompileProviderMetadata = (function () { + function CompileProviderMetadata(_a) { + var token = _a.token, useClass = _a.useClass, useValue = _a.useValue, useExisting = _a.useExisting, useFactory = _a.useFactory, deps = _a.deps, multi = _a.multi; + this.token = token; + this.useClass = useClass; + this.useValue = useValue; + this.useExisting = useExisting; + this.useFactory = useFactory; + this.deps = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["k" /* normalizeBlank */])(deps); + this.multi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(multi); + } + return CompileProviderMetadata; + }()); + var CompileFactoryMetadata = (function (_super) { + __extends(CompileFactoryMetadata, _super); + function CompileFactoryMetadata(_a) { + var reference = _a.reference, name = _a.name, moduleUrl = _a.moduleUrl, prefix = _a.prefix, diDeps = _a.diDeps, value = _a.value; + _super.call(this, { reference: reference, name: name, prefix: prefix, moduleUrl: moduleUrl, value: value }); + this.diDeps = _normalizeArray(diDeps); + } + return CompileFactoryMetadata; + }(CompileIdentifierMetadata)); + var CompileTokenMetadata = (function () { + function CompileTokenMetadata(_a) { + var value = _a.value, identifier = _a.identifier, identifierIsInstance = _a.identifierIsInstance; + this.value = value; + this.identifier = identifier; + this.identifierIsInstance = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(identifierIsInstance); + } + Object.defineProperty(CompileTokenMetadata.prototype, "reference", { + get: function () { + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(this.identifier)) { + return this.identifier.reference; + } + else { + return this.value; + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CompileTokenMetadata.prototype, "name", { + get: function () { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(this.value) ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__util__["a" /* sanitizeIdentifier */])(this.value) : this.identifier.name; + }, + enumerable: true, + configurable: true + }); + return CompileTokenMetadata; + }()); + /** + * Metadata regarding compilation of a type. + */ + var CompileTypeMetadata = (function (_super) { + __extends(CompileTypeMetadata, _super); + function CompileTypeMetadata(_a) { + var _b = _a === void 0 ? {} : _a, reference = _b.reference, name = _b.name, moduleUrl = _b.moduleUrl, prefix = _b.prefix, isHost = _b.isHost, value = _b.value, diDeps = _b.diDeps, lifecycleHooks = _b.lifecycleHooks; + _super.call(this, { reference: reference, name: name, moduleUrl: moduleUrl, prefix: prefix, value: value }); + this.isHost = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(isHost); + this.diDeps = _normalizeArray(diDeps); + this.lifecycleHooks = _normalizeArray(lifecycleHooks); + } + return CompileTypeMetadata; + }(CompileIdentifierMetadata)); + var CompileQueryMetadata = (function () { + function CompileQueryMetadata(_a) { + var _b = _a === void 0 ? {} : _a, selectors = _b.selectors, descendants = _b.descendants, first = _b.first, propertyName = _b.propertyName, read = _b.read; + this.selectors = selectors; + this.descendants = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(descendants); + this.first = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(first); + this.propertyName = propertyName; + this.read = read; + } + return CompileQueryMetadata; + }()); + /** + * Metadata about a stylesheet + */ + var CompileStylesheetMetadata = (function () { + function CompileStylesheetMetadata(_a) { + var _b = _a === void 0 ? {} : _a, moduleUrl = _b.moduleUrl, styles = _b.styles, styleUrls = _b.styleUrls; + this.moduleUrl = moduleUrl; + this.styles = _normalizeArray(styles); + this.styleUrls = _normalizeArray(styleUrls); + } + return CompileStylesheetMetadata; + }()); + /** + * Metadata regarding compilation of a template. + */ + var CompileTemplateMetadata = (function () { + function CompileTemplateMetadata(_a) { + var _b = _a === void 0 ? {} : _a, encapsulation = _b.encapsulation, template = _b.template, templateUrl = _b.templateUrl, styles = _b.styles, styleUrls = _b.styleUrls, externalStylesheets = _b.externalStylesheets, animations = _b.animations, ngContentSelectors = _b.ngContentSelectors, interpolation = _b.interpolation; + this.encapsulation = encapsulation; + this.template = template; + this.templateUrl = templateUrl; + this.styles = _normalizeArray(styles); + this.styleUrls = _normalizeArray(styleUrls); + this.externalStylesheets = _normalizeArray(externalStylesheets); + this.animations = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(animations) ? __WEBPACK_IMPORTED_MODULE_1__facade_collection__["a" /* ListWrapper */].flatten(animations) : []; + this.ngContentSelectors = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(ngContentSelectors) ? ngContentSelectors : []; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(interpolation) && interpolation.length != 2) { + throw new Error("'interpolation' should have a start and an end symbol."); + } + this.interpolation = interpolation; + } + return CompileTemplateMetadata; + }()); + /** + * Metadata regarding compilation of a directive. + */ + var CompileDirectiveMetadata = (function () { + function CompileDirectiveMetadata(_a) { + var _b = _a === void 0 ? {} : _a, type = _b.type, isComponent = _b.isComponent, selector = _b.selector, exportAs = _b.exportAs, changeDetection = _b.changeDetection, inputs = _b.inputs, outputs = _b.outputs, hostListeners = _b.hostListeners, hostProperties = _b.hostProperties, hostAttributes = _b.hostAttributes, providers = _b.providers, viewProviders = _b.viewProviders, queries = _b.queries, viewQueries = _b.viewQueries, entryComponents = _b.entryComponents, template = _b.template; + this.type = type; + this.isComponent = isComponent; + this.selector = selector; + this.exportAs = exportAs; + this.changeDetection = changeDetection; + this.inputs = inputs; + this.outputs = outputs; + this.hostListeners = hostListeners; + this.hostProperties = hostProperties; + this.hostAttributes = hostAttributes; + this.providers = _normalizeArray(providers); + this.viewProviders = _normalizeArray(viewProviders); + this.queries = _normalizeArray(queries); + this.viewQueries = _normalizeArray(viewQueries); + this.entryComponents = _normalizeArray(entryComponents); + this.template = template; + } + CompileDirectiveMetadata.create = function (_a) { + var _b = _a === void 0 ? {} : _a, type = _b.type, isComponent = _b.isComponent, selector = _b.selector, exportAs = _b.exportAs, changeDetection = _b.changeDetection, inputs = _b.inputs, outputs = _b.outputs, host = _b.host, providers = _b.providers, viewProviders = _b.viewProviders, queries = _b.queries, viewQueries = _b.viewQueries, entryComponents = _b.entryComponents, template = _b.template; + var hostListeners = {}; + var hostProperties = {}; + var hostAttributes = {}; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(host)) { + __WEBPACK_IMPORTED_MODULE_1__facade_collection__["b" /* StringMapWrapper */].forEach(host, function (value, key) { + var matches = key.match(HOST_REG_EXP); + if (matches === null) { + hostAttributes[key] = value; + } + else if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(matches[1])) { + hostProperties[matches[1]] = value; + } + else if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(matches[2])) { + hostListeners[matches[2]] = value; + } + }); + } + var inputsMap = {}; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(inputs)) { + inputs.forEach(function (bindConfig) { + // canonical syntax: `dirProp: elProp` + // if there is no `:`, use dirProp = elProp + var parts = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__util__["b" /* splitAtColon */])(bindConfig, [bindConfig, bindConfig]); + inputsMap[parts[0]] = parts[1]; + }); + } + var outputsMap = {}; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(outputs)) { + outputs.forEach(function (bindConfig) { + // canonical syntax: `dirProp: elProp` + // if there is no `:`, use dirProp = elProp + var parts = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__util__["b" /* splitAtColon */])(bindConfig, [bindConfig, bindConfig]); + outputsMap[parts[0]] = parts[1]; + }); + } + return new CompileDirectiveMetadata({ + type: type, + isComponent: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(isComponent), selector: selector, exportAs: exportAs, changeDetection: changeDetection, + inputs: inputsMap, + outputs: outputsMap, + hostListeners: hostListeners, + hostProperties: hostProperties, + hostAttributes: hostAttributes, + providers: providers, + viewProviders: viewProviders, + queries: queries, + viewQueries: viewQueries, + entryComponents: entryComponents, + template: template, + }); + }; + Object.defineProperty(CompileDirectiveMetadata.prototype, "identifier", { + get: function () { return this.type; }, + enumerable: true, + configurable: true + }); + return CompileDirectiveMetadata; + }()); + /** + * Construct {@link CompileDirectiveMetadata} from {@link ComponentTypeMetadata} and a selector. + */ + function createHostComponentMeta(compMeta) { + var template = __WEBPACK_IMPORTED_MODULE_3__selector__["a" /* CssSelector */].parse(compMeta.selector)[0].getMatchingElementTemplate(); + return CompileDirectiveMetadata.create({ + type: new CompileTypeMetadata({ + reference: Object, + name: compMeta.type.name + "_Host", + moduleUrl: compMeta.type.moduleUrl, + isHost: true + }), + template: new CompileTemplateMetadata({ + encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["ViewEncapsulation"].None, + template: template, + templateUrl: '', + styles: [], + styleUrls: [], + ngContentSelectors: [], + animations: [] + }), + changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["ChangeDetectionStrategy"].Default, + inputs: [], + outputs: [], + host: {}, + isComponent: true, + selector: '*', + providers: [], + viewProviders: [], + queries: [], + viewQueries: [] + }); + } + var CompilePipeMetadata = (function () { + function CompilePipeMetadata(_a) { + var _b = _a === void 0 ? {} : _a, type = _b.type, name = _b.name, pure = _b.pure; + this.type = type; + this.name = name; + this.pure = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["j" /* normalizeBool */])(pure); + } + Object.defineProperty(CompilePipeMetadata.prototype, "identifier", { + get: function () { return this.type; }, + enumerable: true, + configurable: true + }); + return CompilePipeMetadata; + }()); + /** + * Metadata regarding compilation of a directive. + */ + var CompileNgModuleMetadata = (function () { + function CompileNgModuleMetadata(_a) { + var _b = _a === void 0 ? {} : _a, type = _b.type, providers = _b.providers, declaredDirectives = _b.declaredDirectives, exportedDirectives = _b.exportedDirectives, declaredPipes = _b.declaredPipes, exportedPipes = _b.exportedPipes, entryComponents = _b.entryComponents, bootstrapComponents = _b.bootstrapComponents, importedModules = _b.importedModules, exportedModules = _b.exportedModules, schemas = _b.schemas, transitiveModule = _b.transitiveModule, id = _b.id; + this.type = type; + this.declaredDirectives = _normalizeArray(declaredDirectives); + this.exportedDirectives = _normalizeArray(exportedDirectives); + this.declaredPipes = _normalizeArray(declaredPipes); + this.exportedPipes = _normalizeArray(exportedPipes); + this.providers = _normalizeArray(providers); + this.entryComponents = _normalizeArray(entryComponents); + this.bootstrapComponents = _normalizeArray(bootstrapComponents); + this.importedModules = _normalizeArray(importedModules); + this.exportedModules = _normalizeArray(exportedModules); + this.schemas = _normalizeArray(schemas); + this.id = id; + this.transitiveModule = transitiveModule; + } + Object.defineProperty(CompileNgModuleMetadata.prototype, "identifier", { + get: function () { return this.type; }, + enumerable: true, + configurable: true + }); + return CompileNgModuleMetadata; + }()); + var TransitiveCompileNgModuleMetadata = (function () { + function TransitiveCompileNgModuleMetadata(modules, providers, entryComponents, directives, pipes) { + var _this = this; + this.modules = modules; + this.providers = providers; + this.entryComponents = entryComponents; + this.directives = directives; + this.pipes = pipes; + this.directivesSet = new Set(); + this.pipesSet = new Set(); + directives.forEach(function (dir) { return _this.directivesSet.add(dir.type.reference); }); + pipes.forEach(function (pipe) { return _this.pipesSet.add(pipe.type.reference); }); + } + return TransitiveCompileNgModuleMetadata; + }()); + function removeIdentifierDuplicates(items) { + var map = new Map(); + items.forEach(function (item) { + if (!map.get(item.identifier.reference)) { + map.set(item.identifier.reference, item); + } + }); + return __WEBPACK_IMPORTED_MODULE_1__facade_collection__["c" /* MapWrapper */].values(map); + } + function _normalizeArray(obj) { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(obj) ? obj : []; + } + function isStaticSymbol(value) { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["l" /* isStringMap */])(value) && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(value['name']) && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__facade_lang__["a" /* isPresent */])(value['filePath']); + } + var ProviderMeta = (function () { + function ProviderMeta(token, _a) { + var useClass = _a.useClass, useValue = _a.useValue, useExisting = _a.useExisting, useFactory = _a.useFactory, deps = _a.deps, multi = _a.multi; + this.token = token; + this.useClass = useClass; + this.useValue = useValue; + this.useExisting = useExisting; + this.useFactory = useFactory; + this.dependencies = deps; + this.multi = !!multi; + } + return ProviderMeta; + }()); +//# sourceMappingURL=compile_metadata.js.map + + /***/ }, + /* 26 */ + /***/ function(module, exports, __webpack_require__) { + +// 7.1.15 ToLength + var toInteger = __webpack_require__(72) + , min = Math.min; + module.exports = function(it){ + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 + }; + + /***/ }, + /* 27 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* WEBPACK VAR INJECTION */(function(global) {"use strict"; + var objectTypes = { + 'boolean': false, + 'function': true, + 'object': true, + 'number': false, + 'string': false, + 'undefined': false + }; + exports.root = (objectTypes[typeof self] && self) || (objectTypes[typeof window] && window); + var freeGlobal = objectTypes[typeof global] && global; + if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) { + exports.root = freeGlobal; + } +//# sourceMappingURL=root.js.map + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(64))) + + /***/ }, + /* 28 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* WEBPACK VAR INJECTION */(function(global) {/* unused harmony export scheduleMicroTask */ + /* unused harmony export global */ + /* harmony export (immutable) */ exports["f"] = getTypeNameForDebugging; + /* unused harmony export Math */ + /* unused harmony export Date */ + /* harmony export (immutable) */ exports["a"] = isPresent; + /* harmony export (immutable) */ exports["b"] = isBlank; + /* unused harmony export isBoolean */ + /* unused harmony export isNumber */ + /* unused harmony export isString */ + /* unused harmony export isFunction */ + /* unused harmony export isType */ + /* harmony export (immutable) */ exports["j"] = isStringMap; + /* unused harmony export isStrictStringMap */ + /* harmony export (immutable) */ exports["c"] = isArray; + /* harmony export (immutable) */ exports["i"] = isDate; + /* unused harmony export noop */ + /* harmony export (immutable) */ exports["g"] = stringify; + /* unused harmony export serializeEnum */ + /* unused harmony export deserializeEnum */ + /* unused harmony export resolveEnumToken */ + /* unused harmony export StringWrapper */ + /* unused harmony export StringJoiner */ + /* harmony export (binding) */ __webpack_require__.d(exports, "h", function() { return NumberWrapper; }); + /* unused harmony export RegExp */ + /* unused harmony export FunctionWrapper */ + /* unused harmony export looseIdentical */ + /* unused harmony export getMapKey */ + /* unused harmony export normalizeBlank */ + /* unused harmony export normalizeBool */ + /* harmony export (immutable) */ exports["d"] = isJsObject; + /* unused harmony export print */ + /* unused harmony export warn */ + /* harmony export (binding) */ __webpack_require__.d(exports, "k", function() { return Json; }); + /* unused harmony export DateWrapper */ + /* unused harmony export setValueOnPath */ + /* harmony export (immutable) */ exports["e"] = getSymbolIterator; + /* unused harmony export evalExpression */ + /* unused harmony export isPrimitive */ + /* unused harmony export hasConstructor */ + /* unused harmony export escape */ + /* unused harmony export escapeRegExp */ + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + var globalScope; + if (typeof window === 'undefined') { + if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) { + // TODO: Replace any with WorkerGlobalScope from lib.webworker.d.ts #3492 + globalScope = self; + } + else { + globalScope = global; + } + } + else { + globalScope = window; + } + function scheduleMicroTask(fn) { + Zone.current.scheduleMicroTask('scheduleMicrotask', fn); + } +// Need to declare a new variable for global here since TypeScript +// exports the original value of the symbol. + var _global = globalScope; + + function getTypeNameForDebugging(type) { + if (type['name']) { + return type['name']; + } + return typeof type; + } + var Math = _global.Math; + var Date = _global.Date; +// TODO: remove calls to assert in production environment +// Note: Can't just export this and import in in other files +// as `assert` is a reserved keyword in Dart + _global.assert = function assert(condition) { + // TODO: to be fixed properly via #2830, noop for now + }; + function isPresent(obj) { + return obj !== undefined && obj !== null; + } + function isBlank(obj) { + return obj === undefined || obj === null; + } + function isBoolean(obj) { + return typeof obj === 'boolean'; + } + function isNumber(obj) { + return typeof obj === 'number'; + } + function isString(obj) { + return typeof obj === 'string'; + } + function isFunction(obj) { + return typeof obj === 'function'; + } + function isType(obj) { + return isFunction(obj); + } + function isStringMap(obj) { + return typeof obj === 'object' && obj !== null; + } + var STRING_MAP_PROTO = Object.getPrototypeOf({}); + function isStrictStringMap(obj) { + return isStringMap(obj) && Object.getPrototypeOf(obj) === STRING_MAP_PROTO; + } + function isArray(obj) { + return Array.isArray(obj); + } + function isDate(obj) { + return obj instanceof Date && !isNaN(obj.valueOf()); + } + function noop() { } + function stringify(token) { + if (typeof token === 'string') { + return token; + } + if (token === undefined || token === null) { + return '' + token; + } + if (token.overriddenName) { + return token.overriddenName; + } + if (token.name) { + return token.name; + } + var res = token.toString(); + var newLineIndex = res.indexOf('\n'); + return (newLineIndex === -1) ? res : res.substring(0, newLineIndex); + } +// serialize / deserialize enum exist only for consistency with dart API +// enums in typescript don't need to be serialized + function serializeEnum(val) { + return val; + } + function deserializeEnum(val, values) { + return val; + } + function resolveEnumToken(enumValue, val) { + return enumValue[val]; + } + var StringWrapper = (function () { + function StringWrapper() { + } + StringWrapper.fromCharCode = function (code) { return String.fromCharCode(code); }; + StringWrapper.charCodeAt = function (s, index) { return s.charCodeAt(index); }; + StringWrapper.split = function (s, regExp) { return s.split(regExp); }; + StringWrapper.equals = function (s, s2) { return s === s2; }; + StringWrapper.stripLeft = function (s, charVal) { + if (s && s.length) { + var pos = 0; + for (var i = 0; i < s.length; i++) { + if (s[i] != charVal) + break; + pos++; + } + s = s.substring(pos); + } + return s; + }; + StringWrapper.stripRight = function (s, charVal) { + if (s && s.length) { + var pos = s.length; + for (var i = s.length - 1; i >= 0; i--) { + if (s[i] != charVal) + break; + pos--; + } + s = s.substring(0, pos); + } + return s; + }; + StringWrapper.replace = function (s, from, replace) { + return s.replace(from, replace); + }; + StringWrapper.replaceAll = function (s, from, replace) { + return s.replace(from, replace); + }; + StringWrapper.slice = function (s, from, to) { + if (from === void 0) { from = 0; } + if (to === void 0) { to = null; } + return s.slice(from, to === null ? undefined : to); + }; + StringWrapper.replaceAllMapped = function (s, from, cb) { + return s.replace(from, function () { + var matches = []; + for (var _i = 0; _i < arguments.length; _i++) { + matches[_i - 0] = arguments[_i]; + } + // Remove offset & string from the result array + matches.splice(-2, 2); + // The callback receives match, p1, ..., pn + return cb(matches); + }); + }; + StringWrapper.contains = function (s, substr) { return s.indexOf(substr) != -1; }; + StringWrapper.compare = function (a, b) { + if (a < b) { + return -1; + } + else if (a > b) { + return 1; + } + else { + return 0; + } + }; + return StringWrapper; + }()); + var StringJoiner = (function () { + function StringJoiner(parts) { + if (parts === void 0) { parts = []; } + this.parts = parts; + } + StringJoiner.prototype.add = function (part) { this.parts.push(part); }; + StringJoiner.prototype.toString = function () { return this.parts.join(''); }; + return StringJoiner; + }()); + var NumberWrapper = (function () { + function NumberWrapper() { + } + NumberWrapper.toFixed = function (n, fractionDigits) { return n.toFixed(fractionDigits); }; + NumberWrapper.equal = function (a, b) { return a === b; }; + NumberWrapper.parseIntAutoRadix = function (text) { + var result = parseInt(text); + if (isNaN(result)) { + throw new Error('Invalid integer literal when parsing ' + text); + } + return result; + }; + NumberWrapper.parseInt = function (text, radix) { + if (radix == 10) { + if (/^(\-|\+)?[0-9]+$/.test(text)) { + return parseInt(text, radix); + } + } + else if (radix == 16) { + if (/^(\-|\+)?[0-9ABCDEFabcdef]+$/.test(text)) { + return parseInt(text, radix); + } + } + else { + var result = parseInt(text, radix); + if (!isNaN(result)) { + return result; + } + } + throw new Error('Invalid integer literal when parsing ' + text + ' in base ' + radix); + }; + Object.defineProperty(NumberWrapper, "NaN", { + get: function () { return NaN; }, + enumerable: true, + configurable: true + }); + NumberWrapper.isNumeric = function (value) { return !isNaN(value - parseFloat(value)); }; + NumberWrapper.isNaN = function (value) { return isNaN(value); }; + NumberWrapper.isInteger = function (value) { return Number.isInteger(value); }; + return NumberWrapper; + }()); + var RegExp = _global.RegExp; + var FunctionWrapper = (function () { + function FunctionWrapper() { + } + FunctionWrapper.apply = function (fn, posArgs) { return fn.apply(null, posArgs); }; + FunctionWrapper.bind = function (fn, scope) { return fn.bind(scope); }; + return FunctionWrapper; + }()); +// JS has NaN !== NaN + function looseIdentical(a, b) { + return a === b || typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b); + } +// JS considers NaN is the same as NaN for map Key (while NaN !== NaN otherwise) +// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map + function getMapKey(value) { + return value; + } + function normalizeBlank(obj) { + return isBlank(obj) ? null : obj; + } + function normalizeBool(obj) { + return isBlank(obj) ? false : obj; + } + function isJsObject(o) { + return o !== null && (typeof o === 'function' || typeof o === 'object'); + } + function print(obj) { + console.log(obj); + } + function warn(obj) { + console.warn(obj); + } +// Can't be all uppercase as our transpiler would think it is a special directive... + var Json = (function () { + function Json() { + } + Json.parse = function (s) { return _global.JSON.parse(s); }; + Json.stringify = function (data) { + // Dart doesn't take 3 arguments + return _global.JSON.stringify(data, null, 2); + }; + return Json; + }()); + var DateWrapper = (function () { + function DateWrapper() { + } + DateWrapper.create = function (year, month, day, hour, minutes, seconds, milliseconds) { + if (month === void 0) { month = 1; } + if (day === void 0) { day = 1; } + if (hour === void 0) { hour = 0; } + if (minutes === void 0) { minutes = 0; } + if (seconds === void 0) { seconds = 0; } + if (milliseconds === void 0) { milliseconds = 0; } + return new Date(year, month - 1, day, hour, minutes, seconds, milliseconds); + }; + DateWrapper.fromISOString = function (str) { return new Date(str); }; + DateWrapper.fromMillis = function (ms) { return new Date(ms); }; + DateWrapper.toMillis = function (date) { return date.getTime(); }; + DateWrapper.now = function () { return new Date(); }; + DateWrapper.toJson = function (date) { return date.toJSON(); }; + return DateWrapper; + }()); + function setValueOnPath(global, path, value) { + var parts = path.split('.'); + var obj = global; + while (parts.length > 1) { + var name = parts.shift(); + if (obj.hasOwnProperty(name) && isPresent(obj[name])) { + obj = obj[name]; + } + else { + obj = obj[name] = {}; + } + } + if (obj === undefined || obj === null) { + obj = {}; + } + obj[parts.shift()] = value; + } + var _symbolIterator = null; + function getSymbolIterator() { + if (isBlank(_symbolIterator)) { + if (isPresent(globalScope.Symbol) && isPresent(Symbol.iterator)) { + _symbolIterator = Symbol.iterator; + } + else { + // es6-shim specific logic + var keys = Object.getOwnPropertyNames(Map.prototype); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (key !== 'entries' && key !== 'size' && + Map.prototype[key] === Map.prototype['entries']) { + _symbolIterator = key; + } + } + } + } + return _symbolIterator; + } + function evalExpression(sourceUrl, expr, declarations, vars) { + var fnBody = declarations + "\nreturn " + expr + "\n//# sourceURL=" + sourceUrl; + var fnArgNames = []; + var fnArgValues = []; + for (var argName in vars) { + fnArgNames.push(argName); + fnArgValues.push(vars[argName]); + } + return new (Function.bind.apply(Function, [void 0].concat(fnArgNames.concat(fnBody))))().apply(void 0, fnArgValues); + } + function isPrimitive(obj) { + return !isJsObject(obj); + } + function hasConstructor(value, type) { + return value.constructor === type; + } + function escape(s) { + return _global.encodeURI(s); + } + function escapeRegExp(s) { + return s.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); + } +//# sourceMappingURL=lang.js.map + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(64))) + + /***/ }, + /* 29 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__facade_collection__ = __webpack_require__(13); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__facade_lang__ = __webpack_require__(4); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__output_output_ast__ = __webpack_require__(12); + /* harmony export (binding) */ __webpack_require__.d(exports, "h", function() { return MODULE_SUFFIX; }); + /* harmony export (immutable) */ exports["f"] = camelCaseToDashCase; + /* harmony export (immutable) */ exports["b"] = splitAtColon; + /* harmony export (immutable) */ exports["a"] = sanitizeIdentifier; + /* harmony export (immutable) */ exports["d"] = visitValue; + /* harmony export (binding) */ __webpack_require__.d(exports, "i", function() { return ValueTransformer; }); + /* harmony export (immutable) */ exports["c"] = assetUrl; + /* harmony export (immutable) */ exports["e"] = createDiTokenExpression; + /* harmony export (binding) */ __webpack_require__.d(exports, "g", function() { return SyncAsyncResult; }); + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + + + var MODULE_SUFFIX = ''; + var CAMEL_CASE_REGEXP = /([A-Z])/g; + function camelCaseToDashCase(input) { + return __WEBPACK_IMPORTED_MODULE_1__facade_lang__["f" /* StringWrapper */].replaceAllMapped(input, CAMEL_CASE_REGEXP, function (m) { return '-' + m[1].toLowerCase(); }); + } + function splitAtColon(input, defaultValues) { + var colonIndex = input.indexOf(':'); + if (colonIndex == -1) + return defaultValues; + return [input.slice(0, colonIndex).trim(), input.slice(colonIndex + 1).trim()]; + } + function sanitizeIdentifier(name) { + return __WEBPACK_IMPORTED_MODULE_1__facade_lang__["f" /* StringWrapper */].replaceAll(name, /\W/g, '_'); + } + function visitValue(value, visitor, context) { + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__facade_lang__["c" /* isArray */])(value)) { + return visitor.visitArray(value, context); + } + else if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__facade_lang__["h" /* isStrictStringMap */])(value)) { + return visitor.visitStringMap(value, context); + } + else if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__facade_lang__["b" /* isBlank */])(value) || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__facade_lang__["i" /* isPrimitive */])(value)) { + return visitor.visitPrimitive(value, context); + } + else { + return visitor.visitOther(value, context); + } + } + var ValueTransformer = (function () { + function ValueTransformer() { + } + ValueTransformer.prototype.visitArray = function (arr, context) { + var _this = this; + return arr.map(function (value) { return visitValue(value, _this, context); }); + }; + ValueTransformer.prototype.visitStringMap = function (map, context) { + var _this = this; + var result = {}; + __WEBPACK_IMPORTED_MODULE_0__facade_collection__["b" /* StringMapWrapper */].forEach(map, function (value /** TODO #9100 */, key /** TODO #9100 */) { + result[key] = visitValue(value, _this, context); + }); + return result; + }; + ValueTransformer.prototype.visitPrimitive = function (value, context) { return value; }; + ValueTransformer.prototype.visitOther = function (value, context) { return value; }; + return ValueTransformer; + }()); + function assetUrl(pkg, path, type) { + if (path === void 0) { path = null; } + if (type === void 0) { type = 'src'; } + if (path == null) { + return "asset:@angular/lib/" + pkg + "/index"; + } + else { + return "asset:@angular/lib/" + pkg + "/src/" + path; + } + } + function createDiTokenExpression(token) { + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__facade_lang__["a" /* isPresent */])(token.value)) { + return __WEBPACK_IMPORTED_MODULE_2__output_output_ast__["a" /* literal */](token.value); + } + else if (token.identifierIsInstance) { + return __WEBPACK_IMPORTED_MODULE_2__output_output_ast__["b" /* importExpr */](token.identifier) + .instantiate([], __WEBPACK_IMPORTED_MODULE_2__output_output_ast__["c" /* importType */](token.identifier, [], [__WEBPACK_IMPORTED_MODULE_2__output_output_ast__["d" /* TypeModifier */].Const])); + } + else { + return __WEBPACK_IMPORTED_MODULE_2__output_output_ast__["b" /* importExpr */](token.identifier); + } + } + var SyncAsyncResult = (function () { + function SyncAsyncResult(syncResult, asyncResult) { + if (asyncResult === void 0) { asyncResult = null; } + this.syncResult = syncResult; + this.asyncResult = asyncResult; + if (!asyncResult) { + this.asyncResult = Promise.resolve(syncResult); + } + } + return SyncAsyncResult; + }()); +//# sourceMappingURL=util.js.map + + /***/ }, + /* 30 */, + /* 31 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* WEBPACK VAR INJECTION */(function(global) {/* unused harmony export scheduleMicroTask */ + /* harmony export (binding) */ __webpack_require__.d(exports, "j", function() { return _global; }); + /* unused harmony export getTypeNameForDebugging */ + /* unused harmony export Math */ + /* unused harmony export Date */ + /* harmony export (immutable) */ exports["a"] = isPresent; + /* harmony export (immutable) */ exports["b"] = isBlank; + /* unused harmony export isBoolean */ + /* harmony export (immutable) */ exports["g"] = isNumber; + /* harmony export (immutable) */ exports["l"] = isString; + /* harmony export (immutable) */ exports["h"] = isFunction; + /* unused harmony export isType */ + /* unused harmony export isStringMap */ + /* unused harmony export isStrictStringMap */ + /* harmony export (immutable) */ exports["c"] = isArray; + /* unused harmony export isDate */ + /* unused harmony export noop */ + /* harmony export (immutable) */ exports["n"] = stringify; + /* unused harmony export serializeEnum */ + /* unused harmony export deserializeEnum */ + /* unused harmony export resolveEnumToken */ + /* harmony export (binding) */ __webpack_require__.d(exports, "f", function() { return StringWrapper; }); + /* unused harmony export StringJoiner */ + /* harmony export (binding) */ __webpack_require__.d(exports, "o", function() { return NumberWrapper; }); + /* unused harmony export RegExp */ + /* unused harmony export FunctionWrapper */ + /* unused harmony export looseIdentical */ + /* unused harmony export getMapKey */ + /* unused harmony export normalizeBlank */ + /* unused harmony export normalizeBool */ + /* harmony export (immutable) */ exports["d"] = isJsObject; + /* unused harmony export print */ + /* unused harmony export warn */ + /* harmony export (binding) */ __webpack_require__.d(exports, "m", function() { return Json; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "k", function() { return DateWrapper; }); + /* harmony export (immutable) */ exports["i"] = setValueOnPath; + /* harmony export (immutable) */ exports["e"] = getSymbolIterator; + /* unused harmony export evalExpression */ + /* unused harmony export isPrimitive */ + /* unused harmony export hasConstructor */ + /* unused harmony export escape */ + /* unused harmony export escapeRegExp */ + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + var globalScope; + if (typeof window === 'undefined') { + if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) { + // TODO: Replace any with WorkerGlobalScope from lib.webworker.d.ts #3492 + globalScope = self; + } + else { + globalScope = global; + } + } + else { + globalScope = window; + } + function scheduleMicroTask(fn) { + Zone.current.scheduleMicroTask('scheduleMicrotask', fn); + } +// Need to declare a new variable for global here since TypeScript +// exports the original value of the symbol. + var _global = globalScope; + + function getTypeNameForDebugging(type) { + if (type['name']) { + return type['name']; + } + return typeof type; + } + var Math = _global.Math; + var Date = _global.Date; +// TODO: remove calls to assert in production environment +// Note: Can't just export this and import in in other files +// as `assert` is a reserved keyword in Dart + _global.assert = function assert(condition) { + // TODO: to be fixed properly via #2830, noop for now + }; + function isPresent(obj) { + return obj !== undefined && obj !== null; + } + function isBlank(obj) { + return obj === undefined || obj === null; + } + function isBoolean(obj) { + return typeof obj === 'boolean'; + } + function isNumber(obj) { + return typeof obj === 'number'; + } + function isString(obj) { + return typeof obj === 'string'; + } + function isFunction(obj) { + return typeof obj === 'function'; + } + function isType(obj) { + return isFunction(obj); + } + function isStringMap(obj) { + return typeof obj === 'object' && obj !== null; + } + var STRING_MAP_PROTO = Object.getPrototypeOf({}); + function isStrictStringMap(obj) { + return isStringMap(obj) && Object.getPrototypeOf(obj) === STRING_MAP_PROTO; + } + function isArray(obj) { + return Array.isArray(obj); + } + function isDate(obj) { + return obj instanceof Date && !isNaN(obj.valueOf()); + } + function noop() { } + function stringify(token) { + if (typeof token === 'string') { + return token; + } + if (token === undefined || token === null) { + return '' + token; + } + if (token.overriddenName) { + return token.overriddenName; + } + if (token.name) { + return token.name; + } + var res = token.toString(); + var newLineIndex = res.indexOf('\n'); + return (newLineIndex === -1) ? res : res.substring(0, newLineIndex); + } +// serialize / deserialize enum exist only for consistency with dart API +// enums in typescript don't need to be serialized + function serializeEnum(val) { + return val; + } + function deserializeEnum(val, values) { + return val; + } + function resolveEnumToken(enumValue, val) { + return enumValue[val]; + } + var StringWrapper = (function () { + function StringWrapper() { + } + StringWrapper.fromCharCode = function (code) { return String.fromCharCode(code); }; + StringWrapper.charCodeAt = function (s, index) { return s.charCodeAt(index); }; + StringWrapper.split = function (s, regExp) { return s.split(regExp); }; + StringWrapper.equals = function (s, s2) { return s === s2; }; + StringWrapper.stripLeft = function (s, charVal) { + if (s && s.length) { + var pos = 0; + for (var i = 0; i < s.length; i++) { + if (s[i] != charVal) + break; + pos++; + } + s = s.substring(pos); + } + return s; + }; + StringWrapper.stripRight = function (s, charVal) { + if (s && s.length) { + var pos = s.length; + for (var i = s.length - 1; i >= 0; i--) { + if (s[i] != charVal) + break; + pos--; + } + s = s.substring(0, pos); + } + return s; + }; + StringWrapper.replace = function (s, from, replace) { + return s.replace(from, replace); + }; + StringWrapper.replaceAll = function (s, from, replace) { + return s.replace(from, replace); + }; + StringWrapper.slice = function (s, from, to) { + if (from === void 0) { from = 0; } + if (to === void 0) { to = null; } + return s.slice(from, to === null ? undefined : to); + }; + StringWrapper.replaceAllMapped = function (s, from, cb) { + return s.replace(from, function () { + var matches = []; + for (var _i = 0; _i < arguments.length; _i++) { + matches[_i - 0] = arguments[_i]; + } + // Remove offset & string from the result array + matches.splice(-2, 2); + // The callback receives match, p1, ..., pn + return cb(matches); + }); + }; + StringWrapper.contains = function (s, substr) { return s.indexOf(substr) != -1; }; + StringWrapper.compare = function (a, b) { + if (a < b) { + return -1; + } + else if (a > b) { + return 1; + } + else { + return 0; + } + }; + return StringWrapper; + }()); + var StringJoiner = (function () { + function StringJoiner(parts) { + if (parts === void 0) { parts = []; } + this.parts = parts; + } + StringJoiner.prototype.add = function (part) { this.parts.push(part); }; + StringJoiner.prototype.toString = function () { return this.parts.join(''); }; + return StringJoiner; + }()); + var NumberWrapper = (function () { + function NumberWrapper() { + } + NumberWrapper.toFixed = function (n, fractionDigits) { return n.toFixed(fractionDigits); }; + NumberWrapper.equal = function (a, b) { return a === b; }; + NumberWrapper.parseIntAutoRadix = function (text) { + var result = parseInt(text); + if (isNaN(result)) { + throw new Error('Invalid integer literal when parsing ' + text); + } + return result; + }; + NumberWrapper.parseInt = function (text, radix) { + if (radix == 10) { + if (/^(\-|\+)?[0-9]+$/.test(text)) { + return parseInt(text, radix); + } + } + else if (radix == 16) { + if (/^(\-|\+)?[0-9ABCDEFabcdef]+$/.test(text)) { + return parseInt(text, radix); + } + } + else { + var result = parseInt(text, radix); + if (!isNaN(result)) { + return result; + } + } + throw new Error('Invalid integer literal when parsing ' + text + ' in base ' + radix); + }; + Object.defineProperty(NumberWrapper, "NaN", { + get: function () { return NaN; }, + enumerable: true, + configurable: true + }); + NumberWrapper.isNumeric = function (value) { return !isNaN(value - parseFloat(value)); }; + NumberWrapper.isNaN = function (value) { return isNaN(value); }; + NumberWrapper.isInteger = function (value) { return Number.isInteger(value); }; + return NumberWrapper; + }()); + var RegExp = _global.RegExp; + var FunctionWrapper = (function () { + function FunctionWrapper() { + } + FunctionWrapper.apply = function (fn, posArgs) { return fn.apply(null, posArgs); }; + FunctionWrapper.bind = function (fn, scope) { return fn.bind(scope); }; + return FunctionWrapper; + }()); +// JS has NaN !== NaN + function looseIdentical(a, b) { + return a === b || typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b); + } +// JS considers NaN is the same as NaN for map Key (while NaN !== NaN otherwise) +// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map + function getMapKey(value) { + return value; + } + function normalizeBlank(obj) { + return isBlank(obj) ? null : obj; + } + function normalizeBool(obj) { + return isBlank(obj) ? false : obj; + } + function isJsObject(o) { + return o !== null && (typeof o === 'function' || typeof o === 'object'); + } + function print(obj) { + console.log(obj); + } + function warn(obj) { + console.warn(obj); + } +// Can't be all uppercase as our transpiler would think it is a special directive... + var Json = (function () { + function Json() { + } + Json.parse = function (s) { return _global.JSON.parse(s); }; + Json.stringify = function (data) { + // Dart doesn't take 3 arguments + return _global.JSON.stringify(data, null, 2); + }; + return Json; + }()); + var DateWrapper = (function () { + function DateWrapper() { + } + DateWrapper.create = function (year, month, day, hour, minutes, seconds, milliseconds) { + if (month === void 0) { month = 1; } + if (day === void 0) { day = 1; } + if (hour === void 0) { hour = 0; } + if (minutes === void 0) { minutes = 0; } + if (seconds === void 0) { seconds = 0; } + if (milliseconds === void 0) { milliseconds = 0; } + return new Date(year, month - 1, day, hour, minutes, seconds, milliseconds); + }; + DateWrapper.fromISOString = function (str) { return new Date(str); }; + DateWrapper.fromMillis = function (ms) { return new Date(ms); }; + DateWrapper.toMillis = function (date) { return date.getTime(); }; + DateWrapper.now = function () { return new Date(); }; + DateWrapper.toJson = function (date) { return date.toJSON(); }; + return DateWrapper; + }()); + function setValueOnPath(global, path, value) { + var parts = path.split('.'); + var obj = global; + while (parts.length > 1) { + var name = parts.shift(); + if (obj.hasOwnProperty(name) && isPresent(obj[name])) { + obj = obj[name]; + } + else { + obj = obj[name] = {}; + } + } + if (obj === undefined || obj === null) { + obj = {}; + } + obj[parts.shift()] = value; + } + var _symbolIterator = null; + function getSymbolIterator() { + if (isBlank(_symbolIterator)) { + if (isPresent(globalScope.Symbol) && isPresent(Symbol.iterator)) { + _symbolIterator = Symbol.iterator; + } + else { + // es6-shim specific logic + var keys = Object.getOwnPropertyNames(Map.prototype); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (key !== 'entries' && key !== 'size' && + Map.prototype[key] === Map.prototype['entries']) { + _symbolIterator = key; + } + } + } + } + return _symbolIterator; + } + function evalExpression(sourceUrl, expr, declarations, vars) { + var fnBody = declarations + "\nreturn " + expr + "\n//# sourceURL=" + sourceUrl; + var fnArgNames = []; + var fnArgValues = []; + for (var argName in vars) { + fnArgNames.push(argName); + fnArgValues.push(vars[argName]); + } + return new (Function.bind.apply(Function, [void 0].concat(fnArgNames.concat(fnBody))))().apply(void 0, fnArgValues); + } + function isPrimitive(obj) { + return !isJsObject(obj); + } + function hasConstructor(value, type) { + return value.constructor === type; + } + function escape(s) { + return _global.encodeURI(s); + } + function escapeRegExp(s) { + return s.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); + } +//# sourceMappingURL=lang.js.map + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(64))) + + /***/ }, + /* 32 */ + /***/ function(module, exports) { + + var hasOwnProperty = {}.hasOwnProperty; + module.exports = function(it, key){ + return hasOwnProperty.call(it, key); + }; + + /***/ }, + /* 33 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + "use strict"; + var AsyncAction_1 = __webpack_require__(122); + var AsyncScheduler_1 = __webpack_require__(123); + exports.async = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction); +//# sourceMappingURL=async.js.map + + /***/ }, + /* 34 */ + /***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(2) + , fails = __webpack_require__(9) + , defined = __webpack_require__(59) + , quot = /"/g; +// B.2.3.2.1 CreateHTML(string, tag, attribute, value) + var createHTML = function(string, tag, attribute, value) { + var S = String(defined(string)) + , p1 = '<' + tag; + if(attribute !== '')p1 += ' ' + attribute + '="' + String(value).replace(quot, '"') + '"'; + return p1 + '>' + S + ''; + }; + module.exports = function(NAME, exec){ + var O = {}; + O[NAME] = exec(createHTML); + $export($export.P + $export.F * fails(function(){ + var test = ''[NAME]('"'); + return test !== test.toLowerCase() || test.split('"').length > 3; + }), 'String', O); + }; + + /***/ }, + /* 35 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony export (immutable) */ exports["a"] = unimplemented; + /* harmony export (binding) */ __webpack_require__.d(exports, "b", function() { return BaseError; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "c", function() { return WrappedError; }); + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + function unimplemented() { + throw new Error('unimplemented'); + } + /** + * @stable + */ + var BaseError = (function (_super) { + __extends(BaseError, _super); + function BaseError(message) { + // Errors don't use current this, instead they create a new instance. + // We have to do forward all of our api to the nativeInstance. + var nativeError = _super.call(this, message); + this._nativeError = nativeError; + } + Object.defineProperty(BaseError.prototype, "message", { + get: function () { return this._nativeError.message; }, + set: function (message) { this._nativeError.message = message; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BaseError.prototype, "name", { + get: function () { return this._nativeError.name; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BaseError.prototype, "stack", { + get: function () { return this._nativeError.stack; }, + set: function (value) { this._nativeError.stack = value; }, + enumerable: true, + configurable: true + }); + BaseError.prototype.toString = function () { return this._nativeError.toString(); }; + return BaseError; + }(Error)); + /** + * @stable + */ + var WrappedError = (function (_super) { + __extends(WrappedError, _super); + function WrappedError(message, error) { + _super.call(this, message + " caused by: " + (error instanceof Error ? error.message : error)); + this.originalError = error; + } + Object.defineProperty(WrappedError.prototype, "stack", { + get: function () { + return (this.originalError instanceof Error ? this.originalError : this._nativeError) + .stack; + }, + enumerable: true, + configurable: true + }); + return WrappedError; + }(BaseError)); +//# sourceMappingURL=errors.js.map + + /***/ }, + /* 36 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* WEBPACK VAR INJECTION */(function(global) {/* unused harmony export scheduleMicroTask */ + /* harmony export (binding) */ __webpack_require__.d(exports, "h", function() { return _global; }); + /* unused harmony export getTypeNameForDebugging */ + /* unused harmony export Math */ + /* unused harmony export Date */ + /* harmony export (immutable) */ exports["a"] = isPresent; + /* harmony export (immutable) */ exports["b"] = isBlank; + /* unused harmony export isBoolean */ + /* unused harmony export isNumber */ + /* harmony export (immutable) */ exports["f"] = isString; + /* unused harmony export isFunction */ + /* unused harmony export isType */ + /* unused harmony export isStringMap */ + /* unused harmony export isStrictStringMap */ + /* harmony export (immutable) */ exports["c"] = isArray; + /* unused harmony export isDate */ + /* unused harmony export noop */ + /* unused harmony export stringify */ + /* unused harmony export serializeEnum */ + /* unused harmony export deserializeEnum */ + /* unused harmony export resolveEnumToken */ + /* harmony export (binding) */ __webpack_require__.d(exports, "i", function() { return StringWrapper; }); + /* unused harmony export StringJoiner */ + /* unused harmony export NumberWrapper */ + /* unused harmony export RegExp */ + /* unused harmony export FunctionWrapper */ + /* unused harmony export looseIdentical */ + /* unused harmony export getMapKey */ + /* unused harmony export normalizeBlank */ + /* unused harmony export normalizeBool */ + /* harmony export (immutable) */ exports["d"] = isJsObject; + /* unused harmony export print */ + /* unused harmony export warn */ + /* harmony export (binding) */ __webpack_require__.d(exports, "g", function() { return Json; }); + /* unused harmony export DateWrapper */ + /* unused harmony export setValueOnPath */ + /* harmony export (immutable) */ exports["e"] = getSymbolIterator; + /* unused harmony export evalExpression */ + /* unused harmony export isPrimitive */ + /* unused harmony export hasConstructor */ + /* unused harmony export escape */ + /* unused harmony export escapeRegExp */ + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + var globalScope; + if (typeof window === 'undefined') { + if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) { + // TODO: Replace any with WorkerGlobalScope from lib.webworker.d.ts #3492 + globalScope = self; + } + else { + globalScope = global; + } + } + else { + globalScope = window; + } + function scheduleMicroTask(fn) { + Zone.current.scheduleMicroTask('scheduleMicrotask', fn); + } +// Need to declare a new variable for global here since TypeScript +// exports the original value of the symbol. + var _global = globalScope; + + function getTypeNameForDebugging(type) { + if (type['name']) { + return type['name']; + } + return typeof type; + } + var Math = _global.Math; + var Date = _global.Date; +// TODO: remove calls to assert in production environment +// Note: Can't just export this and import in in other files +// as `assert` is a reserved keyword in Dart + _global.assert = function assert(condition) { + // TODO: to be fixed properly via #2830, noop for now + }; + function isPresent(obj) { + return obj !== undefined && obj !== null; + } + function isBlank(obj) { + return obj === undefined || obj === null; + } + function isBoolean(obj) { + return typeof obj === 'boolean'; + } + function isNumber(obj) { + return typeof obj === 'number'; + } + function isString(obj) { + return typeof obj === 'string'; + } + function isFunction(obj) { + return typeof obj === 'function'; + } + function isType(obj) { + return isFunction(obj); + } + function isStringMap(obj) { + return typeof obj === 'object' && obj !== null; + } + var STRING_MAP_PROTO = Object.getPrototypeOf({}); + function isStrictStringMap(obj) { + return isStringMap(obj) && Object.getPrototypeOf(obj) === STRING_MAP_PROTO; + } + function isArray(obj) { + return Array.isArray(obj); + } + function isDate(obj) { + return obj instanceof Date && !isNaN(obj.valueOf()); + } + function noop() { } + function stringify(token) { + if (typeof token === 'string') { + return token; + } + if (token === undefined || token === null) { + return '' + token; + } + if (token.overriddenName) { + return token.overriddenName; + } + if (token.name) { + return token.name; + } + var res = token.toString(); + var newLineIndex = res.indexOf('\n'); + return (newLineIndex === -1) ? res : res.substring(0, newLineIndex); + } +// serialize / deserialize enum exist only for consistency with dart API +// enums in typescript don't need to be serialized + function serializeEnum(val) { + return val; + } + function deserializeEnum(val, values) { + return val; + } + function resolveEnumToken(enumValue, val) { + return enumValue[val]; + } + var StringWrapper = (function () { + function StringWrapper() { + } + StringWrapper.fromCharCode = function (code) { return String.fromCharCode(code); }; + StringWrapper.charCodeAt = function (s, index) { return s.charCodeAt(index); }; + StringWrapper.split = function (s, regExp) { return s.split(regExp); }; + StringWrapper.equals = function (s, s2) { return s === s2; }; + StringWrapper.stripLeft = function (s, charVal) { + if (s && s.length) { + var pos = 0; + for (var i = 0; i < s.length; i++) { + if (s[i] != charVal) + break; + pos++; + } + s = s.substring(pos); + } + return s; + }; + StringWrapper.stripRight = function (s, charVal) { + if (s && s.length) { + var pos = s.length; + for (var i = s.length - 1; i >= 0; i--) { + if (s[i] != charVal) + break; + pos--; + } + s = s.substring(0, pos); + } + return s; + }; + StringWrapper.replace = function (s, from, replace) { + return s.replace(from, replace); + }; + StringWrapper.replaceAll = function (s, from, replace) { + return s.replace(from, replace); + }; + StringWrapper.slice = function (s, from, to) { + if (from === void 0) { from = 0; } + if (to === void 0) { to = null; } + return s.slice(from, to === null ? undefined : to); + }; + StringWrapper.replaceAllMapped = function (s, from, cb) { + return s.replace(from, function () { + var matches = []; + for (var _i = 0; _i < arguments.length; _i++) { + matches[_i - 0] = arguments[_i]; + } + // Remove offset & string from the result array + matches.splice(-2, 2); + // The callback receives match, p1, ..., pn + return cb(matches); + }); + }; + StringWrapper.contains = function (s, substr) { return s.indexOf(substr) != -1; }; + StringWrapper.compare = function (a, b) { + if (a < b) { + return -1; + } + else if (a > b) { + return 1; + } + else { + return 0; + } + }; + return StringWrapper; + }()); + var StringJoiner = (function () { + function StringJoiner(parts) { + if (parts === void 0) { parts = []; } + this.parts = parts; + } + StringJoiner.prototype.add = function (part) { this.parts.push(part); }; + StringJoiner.prototype.toString = function () { return this.parts.join(''); }; + return StringJoiner; + }()); + var NumberWrapper = (function () { + function NumberWrapper() { + } + NumberWrapper.toFixed = function (n, fractionDigits) { return n.toFixed(fractionDigits); }; + NumberWrapper.equal = function (a, b) { return a === b; }; + NumberWrapper.parseIntAutoRadix = function (text) { + var result = parseInt(text); + if (isNaN(result)) { + throw new Error('Invalid integer literal when parsing ' + text); + } + return result; + }; + NumberWrapper.parseInt = function (text, radix) { + if (radix == 10) { + if (/^(\-|\+)?[0-9]+$/.test(text)) { + return parseInt(text, radix); + } + } + else if (radix == 16) { + if (/^(\-|\+)?[0-9ABCDEFabcdef]+$/.test(text)) { + return parseInt(text, radix); + } + } + else { + var result = parseInt(text, radix); + if (!isNaN(result)) { + return result; + } + } + throw new Error('Invalid integer literal when parsing ' + text + ' in base ' + radix); + }; + Object.defineProperty(NumberWrapper, "NaN", { + get: function () { return NaN; }, + enumerable: true, + configurable: true + }); + NumberWrapper.isNumeric = function (value) { return !isNaN(value - parseFloat(value)); }; + NumberWrapper.isNaN = function (value) { return isNaN(value); }; + NumberWrapper.isInteger = function (value) { return Number.isInteger(value); }; + return NumberWrapper; + }()); + var RegExp = _global.RegExp; + var FunctionWrapper = (function () { + function FunctionWrapper() { + } + FunctionWrapper.apply = function (fn, posArgs) { return fn.apply(null, posArgs); }; + FunctionWrapper.bind = function (fn, scope) { return fn.bind(scope); }; + return FunctionWrapper; + }()); +// JS has NaN !== NaN + function looseIdentical(a, b) { + return a === b || typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b); + } +// JS considers NaN is the same as NaN for map Key (while NaN !== NaN otherwise) +// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map + function getMapKey(value) { + return value; + } + function normalizeBlank(obj) { + return isBlank(obj) ? null : obj; + } + function normalizeBool(obj) { + return isBlank(obj) ? false : obj; + } + function isJsObject(o) { + return o !== null && (typeof o === 'function' || typeof o === 'object'); + } + function print(obj) { + console.log(obj); + } + function warn(obj) { + console.warn(obj); + } +// Can't be all uppercase as our transpiler would think it is a special directive... + var Json = (function () { + function Json() { + } + Json.parse = function (s) { return _global.JSON.parse(s); }; + Json.stringify = function (data) { + // Dart doesn't take 3 arguments + return _global.JSON.stringify(data, null, 2); + }; + return Json; + }()); + var DateWrapper = (function () { + function DateWrapper() { + } + DateWrapper.create = function (year, month, day, hour, minutes, seconds, milliseconds) { + if (month === void 0) { month = 1; } + if (day === void 0) { day = 1; } + if (hour === void 0) { hour = 0; } + if (minutes === void 0) { minutes = 0; } + if (seconds === void 0) { seconds = 0; } + if (milliseconds === void 0) { milliseconds = 0; } + return new Date(year, month - 1, day, hour, minutes, seconds, milliseconds); + }; + DateWrapper.fromISOString = function (str) { return new Date(str); }; + DateWrapper.fromMillis = function (ms) { return new Date(ms); }; + DateWrapper.toMillis = function (date) { return date.getTime(); }; + DateWrapper.now = function () { return new Date(); }; + DateWrapper.toJson = function (date) { return date.toJSON(); }; + return DateWrapper; + }()); + function setValueOnPath(global, path, value) { + var parts = path.split('.'); + var obj = global; + while (parts.length > 1) { + var name = parts.shift(); + if (obj.hasOwnProperty(name) && isPresent(obj[name])) { + obj = obj[name]; + } + else { + obj = obj[name] = {}; + } + } + if (obj === undefined || obj === null) { + obj = {}; + } + obj[parts.shift()] = value; + } + var _symbolIterator = null; + function getSymbolIterator() { + if (isBlank(_symbolIterator)) { + if (isPresent(globalScope.Symbol) && isPresent(Symbol.iterator)) { + _symbolIterator = Symbol.iterator; + } + else { + // es6-shim specific logic + var keys = Object.getOwnPropertyNames(Map.prototype); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (key !== 'entries' && key !== 'size' && + Map.prototype[key] === Map.prototype['entries']) { + _symbolIterator = key; + } + } + } + } + return _symbolIterator; + } + function evalExpression(sourceUrl, expr, declarations, vars) { + var fnBody = declarations + "\nreturn " + expr + "\n//# sourceURL=" + sourceUrl; + var fnArgNames = []; + var fnArgValues = []; + for (var argName in vars) { + fnArgNames.push(argName); + fnArgValues.push(vars[argName]); + } + return new (Function.bind.apply(Function, [void 0].concat(fnArgNames.concat(fnBody))))().apply(void 0, fnArgValues); + } + function isPrimitive(obj) { + return !isJsObject(obj); + } + function hasConstructor(value, type) { + return value.constructor === type; + } + function escape(s) { + return _global.encodeURI(s); + } + function escapeRegExp(s) { + return s.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); + } +//# sourceMappingURL=lang.js.map + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(64))) + + /***/ }, + /* 37 */ + /***/ function(module, exports, __webpack_require__) { + + var global = __webpack_require__(11) + , hide = __webpack_require__(40) + , has = __webpack_require__(32) + , SRC = __webpack_require__(81)('src') + , TO_STRING = 'toString' + , $toString = Function[TO_STRING] + , TPL = ('' + $toString).split(TO_STRING); + + __webpack_require__(69).inspectSource = function(it){ + return $toString.call(it); + }; + + (module.exports = function(O, key, val, safe){ + var isFunction = typeof val == 'function'; + if(isFunction)has(val, 'name') || hide(val, 'name', key); + if(O[key] === val)return; + if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); + if(O === global){ + O[key] = val; + } else { + if(!safe){ + delete O[key]; + hide(O, key, val); + } else { + if(O[key])O[key] = val; + else hide(O, key, val); + } + } +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(Function.prototype, TO_STRING, function toString(){ + return typeof this == 'function' && this[SRC] || $toString.call(this); + }); + + /***/ }, + /* 38 */ + /***/ function(module, exports, __webpack_require__) { + +// 7.1.13 ToObject(argument) + var defined = __webpack_require__(59); + module.exports = function(it){ + return Object(defined(it)); + }; + + /***/ }, + /* 39 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__di_metadata__ = __webpack_require__(140); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__di_forward_ref__ = __webpack_require__(203); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__di_injector__ = __webpack_require__(139); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__di_reflective_injector__ = __webpack_require__(484); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__di_reflective_provider__ = __webpack_require__(206); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__di_reflective_key__ = __webpack_require__(205); + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__di_opaque_token__ = __webpack_require__(204); + /* harmony namespace reexport (by used) */ __webpack_require__.d(exports, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__di_metadata__["a"]; }); + /* harmony namespace reexport (by used) */ __webpack_require__.d(exports, "c", function() { return __WEBPACK_IMPORTED_MODULE_0__di_metadata__["b"]; }); + /* harmony namespace reexport (by used) */ __webpack_require__.d(exports, "d", function() { return __WEBPACK_IMPORTED_MODULE_0__di_metadata__["c"]; }); + /* harmony namespace reexport (by used) */ __webpack_require__.d(exports, "e", function() { return __WEBPACK_IMPORTED_MODULE_0__di_metadata__["f"]; }); + /* harmony namespace reexport (by used) */ __webpack_require__.d(exports, "i", function() { return __WEBPACK_IMPORTED_MODULE_0__di_metadata__["e"]; }); + /* harmony namespace reexport (by used) */ __webpack_require__.d(exports, "j", function() { return __WEBPACK_IMPORTED_MODULE_0__di_metadata__["d"]; }); + /* harmony reexport (binding) */ __webpack_require__.d(exports, "k", function() { return __WEBPACK_IMPORTED_MODULE_1__di_forward_ref__["b"]; }); + /* harmony reexport (binding) */ __webpack_require__.d(exports, "h", function() { return __WEBPACK_IMPORTED_MODULE_1__di_forward_ref__["a"]; }); + /* harmony reexport (binding) */ __webpack_require__.d(exports, "g", function() { return __WEBPACK_IMPORTED_MODULE_2__di_injector__["b"]; }); + /* harmony reexport (binding) */ __webpack_require__.d(exports, "f", function() { return __WEBPACK_IMPORTED_MODULE_3__di_reflective_injector__["a"]; }); + /* harmony reexport (binding) */ __webpack_require__.d(exports, "l", function() { return __WEBPACK_IMPORTED_MODULE_4__di_reflective_provider__["c"]; }); + /* harmony reexport (binding) */ __webpack_require__.d(exports, "m", function() { return __WEBPACK_IMPORTED_MODULE_5__di_reflective_key__["a"]; }); + /* harmony reexport (binding) */ __webpack_require__.d(exports, "a", function() { return __WEBPACK_IMPORTED_MODULE_6__di_opaque_token__["a"]; }); + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + /** + * @module + * @description + * The `di` module provides dependency injection container services. + */ + + + + + + + +//# sourceMappingURL=di.js.map + + /***/ }, + /* 40 */ + /***/ function(module, exports, __webpack_require__) { + + var dP = __webpack_require__(17) + , createDesc = __webpack_require__(71); + module.exports = __webpack_require__(21) ? function(object, key, value){ + return dP.f(object, key, createDesc(1, value)); + } : function(object, key, value){ + object[key] = value; + return object; + }; + + /***/ }, + /* 41 */ + /***/ function(module, exports, __webpack_require__) { + + var fails = __webpack_require__(9); + + module.exports = function(method, arg){ + return !!method && fails(function(){ + arg ? method.call(null, function(){}, 1) : method.call(null); + }); + }; + + /***/ }, + /* 42 */ + /***/ function(module, exports, __webpack_require__) { + +// to indexed object, toObject with fallback for non-array-like ES3 strings + var IObject = __webpack_require__(118) + , defined = __webpack_require__(59); + module.exports = function(it){ + return IObject(defined(it)); + }; + + /***/ }, + /* 43 */, + /* 44 */, + /* 45 */ + /***/ function(module, exports, __webpack_require__) { + +// 0 -> Array#forEach +// 1 -> Array#map +// 2 -> Array#filter +// 3 -> Array#some +// 4 -> Array#every +// 5 -> Array#find +// 6 -> Array#findIndex + var ctx = __webpack_require__(58) + , IObject = __webpack_require__(118) + , toObject = __webpack_require__(38) + , toLength = __webpack_require__(26) + , asc = __webpack_require__(542); + module.exports = function(TYPE, $create){ + var IS_MAP = TYPE == 1 + , IS_FILTER = TYPE == 2 + , IS_SOME = TYPE == 3 + , IS_EVERY = TYPE == 4 + , IS_FIND_INDEX = TYPE == 6 + , NO_HOLES = TYPE == 5 || IS_FIND_INDEX + , create = $create || asc; + return function($this, callbackfn, that){ + var O = toObject($this) + , self = IObject(O) + , f = ctx(callbackfn, that, 3) + , length = toLength(self.length) + , index = 0 + , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined + , val, res; + for(;length > index; index++)if(NO_HOLES || index in self){ + val = self[index]; + res = f(val, index, O); + if(TYPE){ + if(IS_MAP)result[index] = res; // map + else if(res)switch(TYPE){ + case 3: return true; // some + case 5: return val; // find + case 6: return index; // findIndex + case 2: result.push(val); // filter + } else if(IS_EVERY)return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; + }; + }; + + /***/ }, + /* 46 */ + /***/ function(module, exports, __webpack_require__) { + +// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) + var has = __webpack_require__(32) + , toObject = __webpack_require__(38) + , IE_PROTO = __webpack_require__(250)('IE_PROTO') + , ObjectProto = Object.prototype; + + module.exports = Object.getPrototypeOf || function(O){ + O = toObject(O); + if(has(O, IE_PROTO))return O[IE_PROTO]; + if(typeof O.constructor == 'function' && O instanceof O.constructor){ + return O.constructor.prototype; + } return O instanceof Object ? ObjectProto : null; + }; + + /***/ }, + /* 47 */ + /***/ function(module, exports, __webpack_require__) { + +// most Object methods by ES6 should accept primitives + var $export = __webpack_require__(2) + , core = __webpack_require__(69) + , fails = __webpack_require__(9); + module.exports = function(KEY, exec){ + var fn = (core.Object || {})[KEY] || Object[KEY] + , exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); + }; + + /***/ }, + /* 48 */ + /***/ function(module, exports) { + + "use strict"; + "use strict"; + exports.isArray = Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); +//# sourceMappingURL=isArray.js.map + + /***/ }, + /* 49 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__assertions__ = __webpack_require__(276); + /* harmony export (binding) */ __webpack_require__.d(exports, "b", function() { return InterpolationConfig; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "a", function() { return DEFAULT_INTERPOLATION_CONFIG; }); + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + var InterpolationConfig = (function () { + function InterpolationConfig(start, end) { + this.start = start; + this.end = end; + } + InterpolationConfig.fromArray = function (markers) { + if (!markers) { + return DEFAULT_INTERPOLATION_CONFIG; + } + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__assertions__["a" /* assertInterpolationSymbols */])('interpolation', markers); + return new InterpolationConfig(markers[0], markers[1]); + }; + ; + return InterpolationConfig; + }()); + var DEFAULT_INTERPOLATION_CONFIG = new InterpolationConfig('{{', '}}'); +//# sourceMappingURL=interpolation_config.js.map + + /***/ }, + /* 50 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__facade_lang__ = __webpack_require__(4); + /* harmony export (binding) */ __webpack_require__.d(exports, "c", function() { return ParseLocation; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "b", function() { return ParseSourceFile; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "d", function() { return ParseSourceSpan; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "e", function() { return ParseErrorLevel; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "a", function() { return ParseError; }); + + var ParseLocation = (function () { + function ParseLocation(file, offset, line, col) { + this.file = file; + this.offset = offset; + this.line = line; + this.col = col; + } + ParseLocation.prototype.toString = function () { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(this.offset) ? this.file.url + "@" + this.line + ":" + this.col : this.file.url; + }; + return ParseLocation; + }()); + var ParseSourceFile = (function () { + function ParseSourceFile(content, url) { + this.content = content; + this.url = url; + } + return ParseSourceFile; + }()); + var ParseSourceSpan = (function () { + function ParseSourceSpan(start, end, details) { + if (details === void 0) { details = null; } + this.start = start; + this.end = end; + this.details = details; + } + ParseSourceSpan.prototype.toString = function () { + return this.start.file.content.substring(this.start.offset, this.end.offset); + }; + return ParseSourceSpan; + }()); + var ParseErrorLevel; + (function (ParseErrorLevel) { + ParseErrorLevel[ParseErrorLevel["WARNING"] = 0] = "WARNING"; + ParseErrorLevel[ParseErrorLevel["FATAL"] = 1] = "FATAL"; + })(ParseErrorLevel || (ParseErrorLevel = {})); + var ParseError = (function () { + function ParseError(span, msg, level) { + if (level === void 0) { level = ParseErrorLevel.FATAL; } + this.span = span; + this.msg = msg; + this.level = level; + } + ParseError.prototype.toString = function () { + var source = this.span.start.file.content; + var ctxStart = this.span.start.offset; + var contextStr = ''; + var details = ''; + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(ctxStart)) { + if (ctxStart > source.length - 1) { + ctxStart = source.length - 1; + } + var ctxEnd = ctxStart; + var ctxLen = 0; + var ctxLines = 0; + while (ctxLen < 100 && ctxStart > 0) { + ctxStart--; + ctxLen++; + if (source[ctxStart] == '\n') { + if (++ctxLines == 3) { + break; + } + } + } + ctxLen = 0; + ctxLines = 0; + while (ctxLen < 100 && ctxEnd < source.length - 1) { + ctxEnd++; + ctxLen++; + if (source[ctxEnd] == '\n') { + if (++ctxLines == 3) { + break; + } + } + } + var context = source.substring(ctxStart, this.span.start.offset) + '[ERROR ->]' + + source.substring(this.span.start.offset, ctxEnd + 1); + contextStr = " (\"" + context + "\")"; + } + if (this.span.details) { + details = ", " + this.span.details; + } + return "" + this.msg + contextStr + ": " + this.span.start + details; + }; + return ParseError; + }()); +//# sourceMappingURL=parse_util.js.map + + /***/ }, + /* 51 */ + /***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__facade_lang__ = __webpack_require__(4); + /* harmony export (binding) */ __webpack_require__.d(exports, "e", function() { return TextAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "d", function() { return BoundTextAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "f", function() { return AttrAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "k", function() { return BoundElementPropertyAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "m", function() { return BoundEventAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "n", function() { return ReferenceAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "j", function() { return VariableAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "i", function() { return ElementAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "h", function() { return EmbeddedTemplateAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "p", function() { return BoundDirectivePropertyAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "o", function() { return DirectiveAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "b", function() { return ProviderAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "a", function() { return ProviderAstType; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "g", function() { return NgContentAst; }); + /* harmony export (binding) */ __webpack_require__.d(exports, "l", function() { return PropertyBindingType; }); + /* harmony export (immutable) */ exports["c"] = templateVisitAll; + /** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + /** + * A segment of text within the template. + */ + var TextAst = (function () { + function TextAst(value, ngContentIndex, sourceSpan) { + this.value = value; + this.ngContentIndex = ngContentIndex; + this.sourceSpan = sourceSpan; + } + TextAst.prototype.visit = function (visitor, context) { return visitor.visitText(this, context); }; + return TextAst; + }()); + /** + * A bound expression within the text of a template. + */ + var BoundTextAst = (function () { + function BoundTextAst(value, ngContentIndex, sourceSpan) { + this.value = value; + this.ngContentIndex = ngContentIndex; + this.sourceSpan = sourceSpan; + } + BoundTextAst.prototype.visit = function (visitor, context) { + return visitor.visitBoundText(this, context); + }; + return BoundTextAst; + }()); + /** + * A plain attribute on an element. + */ + var AttrAst = (function () { + function AttrAst(name, value, sourceSpan) { + this.name = name; + this.value = value; + this.sourceSpan = sourceSpan; + } + AttrAst.prototype.visit = function (visitor, context) { return visitor.visitAttr(this, context); }; + return AttrAst; + }()); + /** + * A binding for an element property (e.g. `[property]="expression"`). + */ + var BoundElementPropertyAst = (function () { + function BoundElementPropertyAst(name, type, securityContext, value, unit, sourceSpan) { + this.name = name; + this.type = type; + this.securityContext = securityContext; + this.value = value; + this.unit = unit; + this.sourceSpan = sourceSpan; + } + BoundElementPropertyAst.prototype.visit = function (visitor, context) { + return visitor.visitElementProperty(this, context); + }; + return BoundElementPropertyAst; + }()); + /** + * A binding for an element event (e.g. `(event)="handler()"`). + */ + var BoundEventAst = (function () { + function BoundEventAst(name, target, handler, sourceSpan) { + this.name = name; + this.target = target; + this.handler = handler; + this.sourceSpan = sourceSpan; + } + BoundEventAst.prototype.visit = function (visitor, context) { + return visitor.visitEvent(this, context); + }; + Object.defineProperty(BoundEventAst.prototype, "fullName", { + get: function () { + if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__facade_lang__["a" /* isPresent */])(this.target)) { + return this.target + ":" + this.name; + } + else { + return this.name; + } + }, + enumerable: true, + configurable: true + }); + return BoundEventAst; + }()); + /** + * A reference declaration on an element (e.g. `let someName="expression"`). + */ + var ReferenceAst = (function () { + function ReferenceAst(name, value, sourceSpan) { + this.name = name; + this.value = value; + this.sourceSpan = sourceSpan; + } + ReferenceAst.prototype.visit = function (visitor, context) { + return visitor.visitReference(this, context); + }; + return ReferenceAst; + }()); + /** + * A variable declaration on a