diff --git a/dist/index.js b/dist/index.js index ca95c443..0a6be28f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -21,5 +21,5 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -require("source-map-support").install(),module.exports=function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=40)}([function(e,t){e.exports=require("inversify")},function(e,t){e.exports=require("tslib")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.Factory__ICalleeDataExtractor="Factory",e.Factory__IControlFlowCustomNode="Factory",e.Factory__IControlFlowReplacer="Factory",e.Factory__ICustomNode="Factory",e.Factory__ICustomNodeGroup="Factory",e.Factory__IIdentifierObfuscatingReplacer="Factory",e.Factory__INodeGuard="Factory",e.Factory__INodeTransformer="Factory",e.Factory__IObfuscationResult="Factory",e.Factory__IObfuscatingReplacer="Factory",e.Factory__TControlFlowStorage="Factory",e.IArrayUtils="IArrayUtils",e.ICalleeDataExtractor="ICalleeDataExtractor",e.ICryptUtils="ICryptUtils",e.ICustomNode="ICustomNode",e.ICustomNodeGroup="ICustomNodeGroup",e.IControlFlowReplacer="IControlFlowReplacer",e.IDeadCodeInjectionReplacer="IDeadCodeInjectionReplacer",e.IEscapeSequenceEncoder="IEscapeSequenceEncoder",e.IIdentifierObfuscatingReplacer="IIdentifierObfuscatingReplacer",e.IJavaScriptObfuscator="IJavaScriptObfuscator",e.ILogger="ILogger",e.INodeGuard="INodeGuard",e.INodeTransformer="INodeTransformer",e.IObfuscationEventEmitter="IObfuscationEventEmitter",e.IObfuscationResult="IObfuscationResult",e.IOptions="IOptions",e.IObfuscatingReplacer="IObfuscatingReplacer",e.IRandomGenerator="IRandomGenerator",e.ISourceCode="ISourceCode",e.ISourceMapCorrector="ISourceMapCorrector",e.IStackTraceAnalyzer="IStackTraceAnalyzer",e.ITransformersRunner="ITransformersRunner",e.Newable__ICustomNode="Newable",e.Newable__TControlFlowStorage="Newable",e.TCustomNodeGroupStorage="TCustomNodeGroupStorage",e.TStringArrayStorage="TStringArrayStorage"}(t.ServiceIdentifiers||(t.ServiceIdentifiers={}))},function(e,t,r){"use strict";function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"initialize",t=Object.keys(this)[0];return function(r,n){var o={configurable:!0,enumerable:!0},a=r[e];if(!a||"function"!=typeof a)throw new Error("`"+e+"` method with initialization logic not found. `@"+t+"` decorator requires `"+e+"` method");var i="_"+n,c=Object.getOwnPropertyDescriptor(r,i)||o,s=Object.getOwnPropertyDescriptor(r,e)||o,u=s.value;return Object.defineProperty(r,n,Object.assign({},c,{get:function(){if(void 0===this[i])throw new Error("Property `"+n+"` is not initialized! Initialize it first!");return this[i]},set:function(e){this[i]=e}})),Object.defineProperty(r,e,Object.assign({},s,{value:function(){u.apply(this,arguments),this[n]}})),c}}Object.defineProperty(t,"__esModule",{value:!0}),t.initializable=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:0;if(l.Node.isNodeHasBlockStatement(e)){if(void 0===e.body[t])throw new ReferenceError("Wrong index `"+t+"`. Block-statement body length is `"+e.body.length+"`");return e.body[t]}throw new TypeError("The specified node have no a block-statement")}},{key:"getBlockScopesOfNode",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=t.parentNode;if(!n)throw new ReferenceError("`parentNode` property of given node is `undefined`");if(l.Node.isBlockStatementNode(n)){if(!n.parentNode)throw new ReferenceError("`parentNode` property of `parentNode` of given node is `undefined`");-1!==e.nodesWithBlockScope.indexOf(n.parentNode.type)&&r.push(n)}return t!==n?e.getBlockScopesOfNode(n,r):(l.Node.isNodeHasBlockStatement(n)&&r.push(n),r)}},{key:"getNodeBlockScopeDepth",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=t.parentNode;if(!n)throw new ReferenceError("`parentNode` property of given node is `undefined`");return l.Node.isProgramNode(n)?r:l.Node.isBlockStatementNode(t)&&-1!==e.nodesWithBlockScope.indexOf(n.type)?e.getNodeBlockScopeDepth(n,++r):e.getNodeBlockScopeDepth(n,r)}},{key:"getUnaryExpressionArgumentNode",value:function(t){return l.Node.isUnaryExpressionNode(t.argument)?e.getUnaryExpressionArgumentNode(t.argument):t.argument}},{key:"parentize",value:function(e){return s.traverse(e,{enter:function(e,t){e.parentNode=t||e,e.obfuscatedNode=!1}}),e}},{key:"typedReplace",value:function(t,r,n){e.typedTraverse(t,r,n,"replace")}},{key:"typedTraverse",value:function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"traverse";s[n](e,{enter:function(e,n){if(e.type===t&&r.enter)return r.enter(e,n)},leave:function(e,n){if(e.type===t&&r.leave)return r.leave(e,n)}})}}]),e}();f.nodesWithBlockScope=[u.NodeType.ArrowFunctionExpression,u.NodeType.FunctionDeclaration,u.NodeType.FunctionExpression,u.NodeType.MethodDefinition,u.NodeType.Program],t.NodeUtils=f},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.Program,body:e,sourceType:"script",obfuscatedNode:!1}}},{key:"getArrayExpressionNode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.ArrayExpression,elements:e}}},{key:"getAssignmentExpressionNode",value:function(e,t,r){return{type:i.NodeType.AssignmentExpression,operator:e,left:t,right:r,obfuscatedNode:!1}}},{key:"getBinaryExpressionNode",value:function(e,t,r){return{type:i.NodeType.BinaryExpression,operator:e,left:t,right:r,obfuscatedNode:!1}}},{key:"getBlockStatementNode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.BlockStatement,body:e,obfuscatedNode:!1}}},{key:"getBreakStatement",value:function(e){var t={type:i.NodeType.BreakStatement,obfuscatedNode:!1};return e&&(t.label=e),t}},{key:"getCatchClauseNode",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.CatchClause,param:e.getIdentifierNode("err"),body:e.getBlockStatementNode(t),obfuscatedNode:!1}}},{key:"getCallExpressionNode",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return{type:i.NodeType.CallExpression,callee:e,arguments:t,obfuscatedNode:!1}}},{key:"getContinueStatement",value:function(e){var t={type:i.NodeType.ContinueStatement,obfuscatedNode:!1};return e&&(t.label=e),t}},{key:"getExpressionStatementNode",value:function(e){return{type:i.NodeType.ExpressionStatement,expression:e,obfuscatedNode:!1}}},{key:"getFunctionDeclarationNode",value:function(t,r,n){return{type:i.NodeType.FunctionDeclaration,id:e.getIdentifierNode(t),params:r,body:n,generator:!1,obfuscatedNode:!1}}},{key:"getFunctionExpressionNode",value:function(e,t){return{type:i.NodeType.FunctionExpression,params:e,body:t,generator:!1,obfuscatedNode:!1}}},{key:"getIfStatementNode",value:function(e,t,r){return Object.assign({type:i.NodeType.IfStatement,test:e,consequent:t},r&&{alternate:r},{obfuscatedNode:!1})}},{key:"getIdentifierNode",value:function(e){return{type:i.NodeType.Identifier,name:e,obfuscatedNode:!1}}},{key:"getLabeledStatement",value:function(e,t){return{type:i.NodeType.LabeledStatement,label:e,body:t,obfuscatedNode:!1}}},{key:"getLiteralNode",value:function(e,t){return t=void 0!==t?t:"'"+e+"'",{type:i.NodeType.Literal,value:e,raw:t,"x-verbatim-property":{content:t,precedence:a.Precedence.Primary},obfuscatedNode:!1}}},{key:"getLogicalExpressionNode",value:function(e,t,r){return{type:i.NodeType.LogicalExpression,operator:e,left:t,right:r,obfuscatedNode:!1}}},{key:"getMemberExpressionNode",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return{type:i.NodeType.MemberExpression,computed:r,object:e,property:t,obfuscatedNode:!1}}},{key:"getObjectExpressionNode",value:function(e){return{type:i.NodeType.ObjectExpression,properties:e,obfuscatedNode:!1}}},{key:"getPropertyNode",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return{type:i.NodeType.Property,key:e,value:t,kind:"init",method:!1,shorthand:!1,computed:r,obfuscatedNode:!1}}},{key:"getUnaryExpressionNode",value:function(e,t){var r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return{type:i.NodeType.UnaryExpression,operator:e,argument:t,prefix:r,obfuscatedNode:!1}}},{key:"getReturnStatementNode",value:function(e){return{type:i.NodeType.ReturnStatement,argument:e,obfuscatedNode:!1}}},{key:"getSwitchStatementNode",value:function(e,t){return{type:i.NodeType.SwitchStatement,discriminant:e,cases:t,obfuscatedNode:!1}}},{key:"getSwitchCaseNode",value:function(e,t){return{type:i.NodeType.SwitchCase,test:e,consequent:t,obfuscatedNode:!1}}},{key:"getUpdateExpressionNode",value:function(e,t){return{type:i.NodeType.UpdateExpression,operator:e,argument:t,prefix:!1,obfuscatedNode:!1}}},{key:"getVariableDeclarationNode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"var";return{type:i.NodeType.VariableDeclaration,declarations:e,kind:t,obfuscatedNode:!1}}},{key:"getVariableDeclaratorNode",value:function(e,t){return{type:i.NodeType.VariableDeclarator,id:e,init:t,obfuscatedNode:!1}}},{key:"getWhileStatementNode",value:function(e,t){return{type:i.NodeType.WhileStatement,test:e,body:t,obfuscatedNode:!1}}}]),e}();t.Nodes=c},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.ArrayExpression="ArrayExpression",e.ArrowFunctionExpression="ArrowFunctionExpression",e.AssignmentExpression="AssignmentExpression",e.AssignmentPattern="AssignmentPattern",e.BinaryExpression="BinaryExpression",e.BlockStatement="BlockStatement",e.BreakStatement="BreakStatement",e.CallExpression="CallExpression",e.CatchClause="CatchClause",e.ClassDeclaration="ClassDeclaration",e.ContinueStatement="ContinueStatement",e.ExpressionStatement="ExpressionStatement",e.FunctionDeclaration="FunctionDeclaration",e.FunctionExpression="FunctionExpression",e.Identifier="Identifier",e.IfStatement="IfStatement",e.LabeledStatement="LabeledStatement",e.Literal="Literal",e.LogicalExpression="LogicalExpression",e.MemberExpression="MemberExpression",e.MethodDefinition="MethodDefinition",e.ObjectExpression="ObjectExpression",e.ObjectPattern="ObjectPattern",e.Program="Program",e.Property="Property",e.ReturnStatement="ReturnStatement",e.SwitchCase="SwitchCase",e.SwitchStatement="SwitchStatement",e.TemplateLiteral="TemplateLiteral",e.TryStatement="TryStatement",e.UnaryExpression="UnaryExpression",e.UpdateExpression="UpdateExpression",e.VariableDeclaration="VariableDeclaration",e.VariableDeclarator="VariableDeclarator",e.WhileStatement="WhileStatement"}(t.NodeType||(t.NodeType={}))},function(e,t){e.exports=require("string-template")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e[e.BinaryExpressionFunctionNode=0]="BinaryExpressionFunctionNode",e[e.BlockStatementControlFlowFlatteningNode=1]="BlockStatementControlFlowFlatteningNode",e[e.CallExpressionControlFlowStorageCallNode=2]="CallExpressionControlFlowStorageCallNode",e[e.CallExpressionFunctionNode=3]="CallExpressionFunctionNode",e[e.ControlFlowStorageNode=4]="ControlFlowStorageNode",e[e.ExpressionWithOperatorControlFlowStorageCallNode=5]="ExpressionWithOperatorControlFlowStorageCallNode",e[e.LogicalExpressionFunctionNode=6]="LogicalExpressionFunctionNode",e[e.StringLiteralControlFlowStorageCallNode=7]="StringLiteralControlFlowStorageCallNode",e[e.StringLiteralNode=8]="StringLiteralNode"}(t.ControlFlowCustomNode||(t.ControlFlowCustomNode={}))},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r1?t-1:0),n=1;n-1||0===e.indexOf("//")?e.split("/")[2]:e.split("/")[0],t=t.split(":")[0]}},{key:"isCeilNumber",value:function(e){return e%1==0}},{key:"stringRotate",value:function(e,t){if(!e)throw new ReferenceError("Cannot rotate empty string.");for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{},r=new i.InversifyContainerFacade;r.load(e,t);var n=r.get(a.ServiceIdentifiers.IJavaScriptObfuscator),o=n.obfuscate(e);return r.unload(),o}},{key:"runCLI",value:function(e){var t=new c.JavaScriptObfuscatorCLI(e);t.initialize(),t.run()}}]),e}();t.JavaScriptObfuscator=s},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e[e.ConsoleOutputDisableExpressionNode=0]="ConsoleOutputDisableExpressionNode",e[e.DebugProtectionFunctionCallNode=1]="DebugProtectionFunctionCallNode",e[e.DebugProtectionFunctionIntervalNode=2]="DebugProtectionFunctionIntervalNode",e[e.DebugProtectionFunctionNode=3]="DebugProtectionFunctionNode",e[e.DomainLockNode=4]="DomainLockNode",e[e.NodeCallsControllerFunctionNode=5]="NodeCallsControllerFunctionNode",e[e.SelfDefendingUnicodeNode=6]="SelfDefendingUnicodeNode",e[e.StringArrayCallsWrapper=7]="StringArrayCallsWrapper",e[e.StringArrayNode=8]="StringArrayNode",e[e.StringArrayRotateFunctionNode=9]="StringArrayRotateFunctionNode"}(t.CustomNode||(t.CustomNode={}))},function(e,t,r){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:0,a=void 0;a=t.length?e.getOptimalBlockScope(t,o):r,e.prependNode(a,n)}},{key:"getOptimalBlockScope",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1/0,o=t[r];if(n<=0)throw new Error("Invalid `deep` argument value. Value should be bigger then 0.");return n>1&&o.stackTrace.length?e.getOptimalBlockScope(o.stackTrace,0,--n):o.callee}},{key:"insertNodeAtIndex",value:function(t,r,o){e.validateBodyStatements(r)||(r=[]),r=e.parentizeBodyStatementsBeforeAppend(t,r),t.body=[].concat(n(t.body.slice(0,o)),n(r),n(t.body.slice(o)))}},{key:"prependNode",value:function(t,r){e.validateBodyStatements(r)||(r=[]),r=e.parentizeBodyStatementsBeforeAppend(t,r),t.body=[].concat(n(r),n(t.body))}},{key:"parentizeBodyStatementsBeforeAppend",value:function(e,t){return t.forEach(function(t){t.parentNode=e}),t}},{key:"validateBodyStatements",value:function(e){return e.every(function(e){return!!e&&e.hasOwnProperty("type")})}}]),e}();t.NodeAppender=i},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:p.randomGeneratorPool;return this.getRandomGenerator().string({length:e,pool:t})}},{key:"getRandomVariableName",value:function(e){var t="_"+f.Utils.hexadecimalPrefix,r=this.getRandomInteger(1e4,99999999),n=f.Utils.decToHex(r),o=""+t+n.substr(0,e);return this.randomVariableNameSet.has(o)?this.getRandomVariableName(e):(this.randomVariableNameSet.add(o),o)}},{key:"getSeed",value:function(){return this.seed}}]),e}();d.randomGeneratorPool="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",d.randomGeneratorPoolNumbers="0123456789",d.randomGeneratorPoolHexadecimal="abcdef"+p.randomGeneratorPoolNumbers,a.__decorate([l.initializable(),a.__metadata("design:type",Object)],d.prototype,"randomGenerator",void 0),a.__decorate([l.initializable(),a.__metadata("design:type",Number)],d.prototype,"seed",void 0),a.__decorate([i.postConstruct(),a.__metadata("design:type",Function),a.__metadata("design:paramtypes",[]),a.__metadata("design:returntype",void 0)],d.prototype,"initialize",null),d=p=a.__decorate([i.injectable(),a.__param(0,i.inject(c.ServiceIdentifiers.ISourceCode)),a.__param(1,i.inject(c.ServiceIdentifiers.IOptions)),a.__metadata("design:paramtypes",[Object,Object])],d),t.RandomGenerator=d;var p},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(22);t.DEFAULT_PRESET=Object.freeze({compact:!0,config:"",controlFlowFlattening:!1,controlFlowFlatteningThreshold:.75,deadCodeInjection:!1,deadCodeInjectionThreshold:.4,debugProtection:!1,debugProtectionInterval:!1,disableConsoleOutput:!1,domainLock:[],log:!1,mangle:!1,renameGlobals:!1,reservedNames:[],rotateStringArray:!0,seed:0,selfDefending:!1,sourceMap:!1,sourceMapBaseUrl:"",sourceMapFileName:"",sourceMapMode:n.SourceMapMode.Separate,stringArray:!0,stringArrayEncoding:!1,stringArrayThreshold:.75,unicodeEscapeSequence:!1})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e[e.FunctionDeclarationCalleeDataExtractor=0]="FunctionDeclarationCalleeDataExtractor",e[e.FunctionExpressionCalleeDataExtractor=1]="FunctionExpressionCalleeDataExtractor",e[e.ObjectExpressionCalleeDataExtractor=2]="ObjectExpressionCalleeDataExtractor"}(t.CalleeDataExtractor||(t.CalleeDataExtractor={}))},function(e,t){e.exports=require("esprima")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e[e.BinaryExpressionControlFlowReplacer=0]="BinaryExpressionControlFlowReplacer",e[e.CallExpressionControlFlowReplacer=1]="CallExpressionControlFlowReplacer",e[e.LogicalExpressionControlFlowReplacer=2]="LogicalExpressionControlFlowReplacer",e[e.StringLiteralControlFlowReplacer=3]="StringLiteralControlFlowReplacer"}(t.ControlFlowReplacer||(t.ControlFlowReplacer={}))},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]&&arguments[1];this.storage=new Map([].concat(n(this.storage),n(e.getStorage()))),t&&(this.storageId=e.getStorageId())}},{key:"set",value:function(e,t){this.storage.set(e,t)}}]),e}();c.__decorate([l.initializable(),c.__metadata("design:type",String)],f.prototype,"storageId",void 0),c.__decorate([l.initializable(),c.__metadata("design:type",Map)],f.prototype,"storage",void 0),c.__decorate([s.postConstruct(),c.__metadata("design:type",Function),c.__metadata("design:paramtypes",[]),c.__metadata("design:returntype",void 0)],f.prototype,"initialize",null),f=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__metadata("design:paramtypes",[Object])],f),t.MapStorage=f},function(e,t){e.exports=require("path")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(17);e.exports=n.JavaScriptObfuscator},function(e,t){e.exports=require("reflect-metadata")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(13),o=r(0),a=r(2),i=r(30),c=r(43),s=r(44),u=r(45),l=r(46);t.analyzersModule=new o.ContainerModule(function(e){e(a.ServiceIdentifiers.IStackTraceAnalyzer).to(l.StackTraceAnalyzer).inSingletonScope(),e(a.ServiceIdentifiers.ICalleeDataExtractor).to(c.FunctionDeclarationCalleeDataExtractor).whenTargetNamed(i.CalleeDataExtractor.FunctionDeclarationCalleeDataExtractor),e(a.ServiceIdentifiers.ICalleeDataExtractor).to(s.FunctionExpressionCalleeDataExtractor).whenTargetNamed(i.CalleeDataExtractor.FunctionExpressionCalleeDataExtractor),e(a.ServiceIdentifiers.ICalleeDataExtractor).to(u.ObjectExpressionCalleeDataExtractor).whenTargetNamed(i.CalleeDataExtractor.ObjectExpressionCalleeDataExtractor),e(a.ServiceIdentifiers.Factory__ICalleeDataExtractor).toFactory(n.InversifyContainerFacade.getCacheFactory(a.ServiceIdentifiers.ICalleeDataExtractor))})},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rr)return"break";var a=e[o];s.traverse(a,{enter:function(r){if(l.Node.isCallExpressionNode(r))return a.parentNode!==f.NodeUtils.getBlockScopesOfNode(r)[0]?s.VisitorOption.Skip:void t.analyzeCallExpressionNode(n,e,r)}})}(a))break}return n}},{key:"analyzeCallExpressionNode",value:function(e,t,r){var n=this;p.calleeDataExtractorsList.forEach(function(o){var a=n.calleeDataExtractorFactory(o).extract(t,r.callee);a&&e.push(Object.assign({},a,{stackTrace:n.analyzeRecursive(a.callee.body)}))})}}],[{key:"getLimitIndex",value:function(e){var t=e-1,r=p.limitThresholdActivationLength-1,n=t;return t>r&&(n=Math.round(r+t*p.limitThreshold))>t&&(n=t),n}}]),e}();d.calleeDataExtractorsList=[u.CalleeDataExtractor.FunctionDeclarationCalleeDataExtractor,u.CalleeDataExtractor.FunctionExpressionCalleeDataExtractor,u.CalleeDataExtractor.ObjectExpressionCalleeDataExtractor],d.limitThresholdActivationLength=25,d.limitThreshold=.002,d=p=a.__decorate([i.injectable(),a.__param(0,i.inject(c.ServiceIdentifiers.Factory__ICalleeDataExtractor)),a.__metadata("design:paramtypes",[Function])],d),t.StackTraceAnalyzer=d;var p},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(13),o=r(0),a=r(2),i=r(32),c=r(48),s=r(49),u=r(50),l=r(51);t.controlFlowTransformersModule=new o.ContainerModule(function(e){e(a.ServiceIdentifiers.IControlFlowReplacer).to(c.BinaryExpressionControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.BinaryExpressionControlFlowReplacer),e(a.ServiceIdentifiers.IControlFlowReplacer).to(s.CallExpressionControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.CallExpressionControlFlowReplacer),e(a.ServiceIdentifiers.IControlFlowReplacer).to(u.LogicalExpressionControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.LogicalExpressionControlFlowReplacer),e(a.ServiceIdentifiers.IControlFlowReplacer).to(l.StringLiteralControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.StringLiteralControlFlowReplacer),e(a.ServiceIdentifiers.Factory__IControlFlowReplacer).toFactory(n.InversifyContainerFacade.getCacheFactory(a.ServiceIdentifiers.IControlFlowReplacer))})},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r 0;\n \n switch (isPositive) {\n case true:\n return this.item + '_' + this.value + '_' + i;\n default:\n this.item + '_' + this.value;\n }\n }\n }()\n };\n };\n \n var regExp = new RegExp(\"[{diff}]\", \"g\");\n var domains = \"{domains}\".replace(regExp, \"\").split(\";\");\n var document;\n var domain;\n \n for (var d in that) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n document = d;\n \n break;\n }\n }\n\n for (var d1 in that[document]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n domain = d1;\n \n break;\n }\n }\n \n if ((!document && !domain) || (!that[document] && !that[document][domain])) {\n return;\n }\n \n var currentDomain = that[document][domain];\n\n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n data;\n } else {\n return;\n }\n \n func();\n });\n\n {domainLockFunctionName}();\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.DomainLockNodeTemplate=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r> 1 + 255 % 0;\n \n if (string.indexOf('i' === i)) {\n recursiveFunc2(string)\n }\n };\n \n var recursiveFunc2 = function (string) {\n var i = ~-4 >> 1 + 255 % 0;\n \n if (string.indexOf((true+\"\")[3]) !== i) {\n recursiveFunc1(string)\n }\n };\n \n if (!test1()) {\n if (!test2()) {\n recursiveFunc1('indеxOf');\n } else {\n recursiveFunc1('indexOf');\n }\n } else {\n recursiveFunc1('indеxOf');\n }\n })\n \n {selfDefendingFunctionName}();\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.SelfDefendingTemplate=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n return output;\n });\n })();\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.AtobTemplate=n},function(e,t,r){"use strict";function n(){return"\n var rc4 = function (str, key) {\n var s = [], j = 0, x, res = '', newStr = '';\n \n str = atob(str);\n \n for (var k = 0, length = str.length; k < length; k++) {\n newStr += '%' + ('00' + str.charCodeAt(k).toString(16)).slice(-2);\n }\n \n str = decodeURIComponent(newStr);\n \t \n\t for (var i = 0; i < 256; i++) {\n s[i] = i;\n }\n \n for (i = 0; i < 256; i++) {\n j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n }\n \n i = 0;\n j = 0;\n \n for (var y = 0; y < str.length; y++) {\n i = (i + 1) % 256;\n j = (j + s[i]) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);\n }\n \n return res;\n }\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.Rc4Template=n},function(e,t,r){"use strict";function n(e){return"\n var StatesClass = function (rc4Bytes) {\n this.rc4Bytes = rc4Bytes;\n this.states = [1, 0, 0];\n this.newState = function(){return 'newState';};\n this.firstState = '"+e.encode("\\w+ *\\(\\) *{\\w+ *",!0)+"';\n this.secondState = '"+e.encode("['|\"].+['|\"];? *}",!0)+"';\n };\n \n StatesClass.prototype.checkState = function () {\n var regExp = new RegExp(this.firstState + this.secondState);\n\n return this.runState(regExp.test(this.newState.toString()) ? --this.states[1] : --this.states[0]);\n };\n \n StatesClass.prototype.runState = function (stateResult) {\n if (!Boolean(~stateResult)) {\n return stateResult;\n }\n \n return this.getState(this.rc4Bytes);\n };\n\n StatesClass.prototype.getState = function (rc4Bytes) {\n for (var i = 0, len = this.states.length; i < len; i++) {\n this.states.push(Math.round(Math.random()));\n len = this.states.length;\n }\n \n return rc4Bytes(this.states[0]);\n };\n\n new StatesClass({stringArrayCallsWrapperName}).checkState();\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.SelfDefendingTemplate=n},function(e,t,r){"use strict";function n(){return" \n if ({stringArrayCallsWrapperName}.initialized === undefined) {\n {atobPolyfill}\n \n {stringArrayCallsWrapperName}.base64DecodeUnicode = function (str) {\n var string = atob(str);\n var newStringChars = [];\n \n for (var i = 0, length = string.length; i < length; i++) {\n newStringChars += '%' + ('00' + string.charCodeAt(i).toString(16)).slice(-2);\n }\n \n return decodeURIComponent(newStringChars);\n };\n \n {stringArrayCallsWrapperName}.data = {};\n \n {stringArrayCallsWrapperName}.initialized = true;\n }\n \n var cachedValue = {stringArrayCallsWrapperName}.data[index];\n \n if (cachedValue === undefined) {\n {selfDefendingCode}\n \n value = {stringArrayCallsWrapperName}.base64DecodeUnicode(value);\n {stringArrayCallsWrapperName}.data[index] = value;\n } else {\n value = cachedValue;\n } \n "}Object.defineProperty(t,"__esModule",{value:!0}),t.StringArrayBase64DecodeNodeTemplate=n},function(e,t,r){"use strict";function n(){return"\n var {stringArrayCallsWrapperName} = function (index, key) {\n index = index - 0;\n \n var value = {stringArrayName}[index];\n \n {decodeNodeTemplate}\n \n return value;\n };\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.StringArrayCallsWrapperTemplate=n},function(e,t,r){"use strict";function n(){return"\n if ({stringArrayCallsWrapperName}.initialized === undefined) {\n {atobPolyfill}\n \n {rc4Polyfill}\n {stringArrayCallsWrapperName}.rc4 = rc4;\n \n {stringArrayCallsWrapperName}.data = {};\n \n {stringArrayCallsWrapperName}.initialized = true;\n }\n \n var cachedValue = {stringArrayCallsWrapperName}.data[index];\n\n if (cachedValue === undefined) {\n if ({stringArrayCallsWrapperName}.once === undefined) {\n {selfDefendingCode}\n \n {stringArrayCallsWrapperName}.once = true;\n }\n \n value = {stringArrayCallsWrapperName}.rc4(value, key);\n {stringArrayCallsWrapperName}.data[index] = value;\n } else {\n value = cachedValue;\n }\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.StringArrayRc4DecodeNodeTemplate=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rv.hostNodeSearchMinDepth&&t.splice(0,v.hostNodeSearchMinDepth),t.length>v.hostNodeSearchMaxDepth&&(t.length=v.hostNodeSearchMaxDepth),this.randomGenerator.getRandomGenerator().pickone(t))}},{key:"isVisitedFunctionNode",value:function(e){return(y.Node.isFunctionDeclarationNode(e)||y.Node.isFunctionExpressionNode(e)||y.Node.isArrowFunctionExpressionNode(e))&&this.visitedFunctionNodes.has(e)}},{key:"transformFunctionBody",value:function(e,t){var r=this;l.replace(e,{enter:function(e,n){if(r.isVisitedFunctionNode(e))return l.VisitorOption.Skip;if(!v.controlFlowReplacersMap.has(e.type))return e;if(r.randomGenerator.getMathRandom()>r.options.controlFlowFlatteningThreshold)return e;var o=v.controlFlowReplacersMap.get(e.type);return void 0===o?e:Object.assign({},r.controlFlowReplacerFactory(o).replace(e,n,t),{parentNode:n})}})}}]),t}(p.AbstractNodeTransformer);h.controlFlowReplacersMap=new Map([[d.NodeType.BinaryExpression,b.ControlFlowReplacer.BinaryExpressionControlFlowReplacer],[d.NodeType.CallExpression,b.ControlFlowReplacer.CallExpressionControlFlowReplacer],[d.NodeType.LogicalExpression,b.ControlFlowReplacer.LogicalExpressionControlFlowReplacer],[d.NodeType.Literal,b.ControlFlowReplacer.StringLiteralControlFlowReplacer]]),h.hostNodeSearchMinDepth=0,h.hostNodeSearchMaxDepth=2,h=v=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.Factory__TControlFlowStorage)),c.__param(1,s.inject(u.ServiceIdentifiers.Factory__IControlFlowReplacer)),c.__param(2,s.inject(u.ServiceIdentifiers.Factory__IControlFlowCustomNode)),c.__param(3,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(4,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Function,Function,Function,Object,Object])],h),t.FunctionControlFlowTransformer=h;var v},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rthis.options.controlFlowFlatteningThreshold||!m.canTransformBlockStatementNode(e))return e;var r=e.body,n=this.arrayUtils.arrayRange(r.length),o=this.arrayUtils.arrayShuffle(n),a=n.map(function(e){return o.indexOf(e)}),i=this.controlFlowCustomNodeFactory(f.ControlFlowCustomNode.BlockStatementControlFlowFlatteningNode);return i.initialize(r,o,a),i.getNode()[0]}}],[{key:"blockStatementHasProhibitedStatements",value:function(e){return e.body.some(function(e){var t=p.Node.isBreakStatementNode(e)||p.Node.isContinueStatementNode(e),r=p.Node.isVariableDeclarationNode(e)&&("const"===e.kind||"let"===e.kind);return p.Node.isFunctionDeclarationNode(e)||t||r})}},{key:"canTransformBlockStatementNode",value:function(e){var t=!0;return l.traverse(e,{enter:function(e){if(p.Node.isWhileStatementNode(e))return l.VisitorOption.Skip;p.Node.isBlockStatementNode(e)&&m.blockStatementHasProhibitedStatements(e)&&(t=!1)}}),e.body.length<=4&&(t=!1),t}}]),t}(d.AbstractNodeTransformer);y=m=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.Factory__IControlFlowCustomNode)),c.__param(1,s.inject(u.ServiceIdentifiers.IArrayUtils)),c.__param(2,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(3,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Function,Object,Object,Object])],y),t.BlockStatementControlFlowTransformer=y;var m},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rthis.options.deadCodeInjectionThreshold)return e;var r=this.collectedBlockStatements.length-1,n=this.randomGenerator.getRandomInteger(0,r),o=this.collectedBlockStatements.splice(n,1)[0];return o===e?e:this.replaceBlockStatementNode(e,o)}},{key:"collectBlockStatementNodes",value:function(e,t){var r=this,n=y.NodeUtils.clone(e),o=0,a=!0;l.replace(n,{enter:function(e,t){return d.Node.isBlockStatementNode(e)&&o++,o>b.maxNestedBlockStatementsCount||d.Node.isBreakStatementNode(e)||d.Node.isContinueStatementNode(e)?(a=!1,l.VisitorOption.Break):(d.Node.isIdentifierNode(e)&&!d.Node.isMemberExpressionNode(t)&&(e.name=r.randomGenerator.getRandomVariableName(6)),e)}}),a&&t.push(n)}},{key:"replaceBlockStatementNode",value:function(e,t){var r=this.randomGenerator.getMathRandom()>.5,n=this.randomGenerator.getMathRandom()>.5,o=r?"===":"!==",a=this.randomGenerator.getRandomString(3),i=n?a:this.randomGenerator.getRandomString(3),c=void 0,s=void 0;r&&n||!r&&!n?(c=e,s=t):(c=t,s=e);var u=p.Nodes.getBlockStatementNode([p.Nodes.getIfStatementNode(p.Nodes.getBinaryExpressionNode(o,p.Nodes.getLiteralNode(a),p.Nodes.getLiteralNode(i)),c,s)]);return u=y.NodeUtils.parentize(u)}}]),t}(f.AbstractNodeTransformer);m.maxNestedBlockStatementsCount=4,m.minCollectedBlockStatementsCount=5,m=b=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(1,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Object,Object])],m),t.DeadCodeInjectionTransformer=m;var b},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r1){var o=d.Nodes.getBinaryExpressionNode("+",n.shift(),n.shift());return n.forEach(function(e){o=d.Nodes.getBinaryExpressionNode("+",o,e)}),o}return n[0]}}],[{key:"isLiteralNodeWithStringValue",value:function(e){return e&&f.Node.isLiteralNode(e)&&"string"==typeof e.value}}]),t}(l.AbstractNodeTransformer);p=y=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(1,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Object,Object])],p),t.TemplateLiteralTransformer=p;var y},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r=m.minimumLengthForStringArray&&this.randomGenerator.getMathRandom()<=this.options.stringArrayThreshold}},{key:"getStringArrayHexadecimalIndex",value:function(e,t){if(this.stringLiteralHexadecimalIndexCache.has(e))return{fromCache:!0,index:this.stringLiteralHexadecimalIndexCache.get(e)};var r=p.Utils.decToHex(t),n=""+p.Utils.hexadecimalPrefix+r;return this.stringLiteralHexadecimalIndexCache.set(e,n),{fromCache:!1,index:n}}},{key:"getEncodedValue",value:function(e){var t=void 0,r=null;switch(this.options.stringArrayEncoding){case l.StringArrayEncoding.Rc4:r=this.randomGenerator.getRandomGenerator().pickone(this.rc4Keys),t=this.cryptUtils.btoa(this.cryptUtils.rc4(e,r));break;case l.StringArrayEncoding.Base64:t=this.cryptUtils.btoa(e);break;default:t=e}return{encodedValue:t,key:r}}},{key:"replaceWithLiteralNode",value:function(e){return d.Nodes.getLiteralNode(this.escapeSequenceEncoder.encode(e,this.options.unicodeEscapeSequence))}},{key:"replaceWithStringArrayCallNode",value:function(e){var t=this.getEncodedValue(e),r=t.encodedValue,n=t.key,o=this.escapeSequenceEncoder.encode(r,this.options.unicodeEscapeSequence),a=this.stringArrayStorage.getLength(),i=p.Utils.stringRotate(this.stringArrayStorage.getStorageId(),1),c="_"+p.Utils.hexadecimalPrefix+i,s=this.getStringArrayHexadecimalIndex(o,a),u=s.fromCache,l=s.index;u||this.stringArrayStorage.set(a,o);var f=[m.getHexadecimalLiteralNode(l)];return n&&f.push(m.getRc4KeyLiteralNode(this.escapeSequenceEncoder.encode(n,this.options.unicodeEscapeSequence))),d.Nodes.getCallExpressionNode(d.Nodes.getIdentifierNode(c),f)}}],[{key:"getHexadecimalLiteralNode",value:function(e){var t=d.Nodes.getLiteralNode(e);return t.obfuscatedNode=!0,t}},{key:"getRc4KeyLiteralNode",value:function(e){var t=d.Nodes.getLiteralNode(e);return t.obfuscatedNode=!0,t}}]),t}(f.AbstractObfuscatingReplacer);y.minimumLengthForStringArray=3,y.rc4KeyLength=4,y.rc4KeysCount=50,y=m=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.TCustomNodeGroupStorage)),c.__param(1,s.inject(u.ServiceIdentifiers.TStringArrayStorage)),c.__param(2,s.inject(u.ServiceIdentifiers.IEscapeSequenceEncoder)),c.__param(3,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(4,s.inject(u.ServiceIdentifiers.ICryptUtils)),c.__param(5,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Object,Object,Object,Object,Object,Object])],y),t.StringLiteralObfuscatingReplacer=y;var m},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),a=r(120),i=r(121),c=r(122);t.storagesModule=new n.ContainerModule(function(e){e(o.ServiceIdentifiers.TCustomNodeGroupStorage).to(i.CustomNodeGroupStorage).inSingletonScope(),e(o.ServiceIdentifiers.TStringArrayStorage).to(c.StringArrayStorage).inSingletonScope(),e(o.ServiceIdentifiers.Newable__TControlFlowStorage).toConstructor(a.ControlFlowStorage),e(o.ServiceIdentifiers.Factory__TControlFlowStorage).toFactory(function(e){return function(){var t=e.container.get(o.ServiceIdentifiers.Newable__TControlFlowStorage),r=e.container.get(o.ServiceIdentifiers.IRandomGenerator),n=new t(r);return n.initialize(),n}})})},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=r(1),c=r(0),s=r(2),u=r(38),l=function(e){function t(e){return n(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),t}(u.MapStorage);l=i.__decorate([c.injectable(),i.__param(0,c.inject(s.ServiceIdentifiers.IRandomGenerator)),i.__metadata("design:paramtypes",[Object])],l),t.ControlFlowStorage=l},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r=0?t:null}},{key:"getLength",value:function(){return this.storageLength}},{key:"getStorage",value:function(){return this.storage}},{key:"getStorageId",value:function(){return this.storageId}},{key:"mergeWith",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.storage=[].concat(n(this.storage),n(e.getStorage())),t&&(this.storageId=e.getStorageId())}},{key:"set",value:function(e,t){e===this.storageLength?this.storage.push(t):this.storage.splice(e,0,t),this.storageLength++}}]),e}();i.__decorate([u.initializable(),i.__metadata("design:type",Array)],l.prototype,"storage",void 0),i.__decorate([u.initializable(),i.__metadata("design:type",String)],l.prototype,"storageId",void 0),i.__decorate([c.postConstruct(),i.__metadata("design:type",Function),i.__metadata("design:paramtypes",[]),i.__metadata("design:returntype",void 0)],l.prototype,"initialize",null),l=i.__decorate([c.injectable(),i.__param(0,c.inject(s.ServiceIdentifiers.IRandomGenerator)),i.__metadata("design:paramtypes",[Object])],l),t.ArrayStorage=l},function(e,t){e.exports=require("md5")},function(e,t){e.exports=require("chance")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),a=r(127),i=r(128),c=r(129),s=r(28);t.utilsModule=new n.ContainerModule(function(e){e(o.ServiceIdentifiers.IArrayUtils).to(a.ArrayUtils).inSingletonScope(),e(o.ServiceIdentifiers.IRandomGenerator).to(s.RandomGenerator).inSingletonScope(),e(o.ServiceIdentifiers.ICryptUtils).to(i.CryptUtils).inSingletonScope(),e(o.ServiceIdentifiers.IEscapeSequenceEncoder).to(c.EscapeSequenceEncoder).inSingletonScope()})},function(e,t,r){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t>8-o%1*8)){if((n=e.charCodeAt(o+=.75))>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|n}return t}},{key:"hideString",value:function(e,t){var r=this,n=this.randomGenerator.getRandomGenerator().string({length:t,pool:s.RandomGenerator.randomGeneratorPool}),o=n.replace(new RegExp("["+function(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}(e)+"]","g"),""),a=o.split("");return this.randomGenerator.getRandomGenerator().shuffle(a),o=a.join(""),[function(e,t){for(var n=-1,o=-1,a="";n [options]").version(y.CLIUtils.getPackageConfig().version,"-v, --version").option("-o, --output ","Output path for obfuscated code").option("--compact ","Disable one line output code compacting",f.BooleanSanitizer).option("--config ","Name of js / json config file").option("--controlFlowFlattening ","Enables control flow flattening",f.BooleanSanitizer).option("--controlFlowFlatteningThreshold ","The probability that the control flow flattening transformation will be applied to the node",parseFloat).option("--deadCodeInjection ","Enables dead code injection",f.BooleanSanitizer).option("--deadCodeInjectionThreshold ","The probability that the dead code injection transformation will be applied to the node",parseFloat).option("--debugProtection ","Disable browser Debug panel (can cause DevTools enabled browser freeze)",f.BooleanSanitizer).option("--debugProtectionInterval ","Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)",f.BooleanSanitizer).option("--disableConsoleOutput ","Allow console.log, console.info, console.error and console.warn messages output into browser console",f.BooleanSanitizer).option("--domainLock ","Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)",l.ArraySanitizer).option("--log ","Enables logging of the information to the console",f.BooleanSanitizer).option("--mangle ","Enables mangling of variable names",f.BooleanSanitizer).option("--reservedNames ","Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)",l.ArraySanitizer).option("--renameGlobals ","Allows to enable obfuscation of global variable and function names with declaration.",f.BooleanSanitizer).option("--rotateStringArray ","Disable rotation of unicode array values during obfuscation",f.BooleanSanitizer).option("--seed ","Sets seed for random generator. This is useful for creating repeatable results.",parseFloat).option("--selfDefending ","Disables self-defending for obfuscated code",f.BooleanSanitizer).option("--sourceMap ","Enables source map generation",f.BooleanSanitizer).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",d.SourceMapModeSanitizer).option("--stringArray ","Disables gathering of all literal strings into an array and replacing every literal string with an array call",f.BooleanSanitizer).option("--stringArrayEncoding [true, false, base64, rc4]","Encodes all strings in strings array using base64 or rc4 (this option can slow down your code speed",p.StringArrayEncodingSanitizer).option("--stringArrayThreshold ","The probability that the literal string will be inserted into stringArray (Default: 0.8, Min: 0, Max: 1)",parseFloat).option("--unicodeEscapeSequence ","Allows to enable/disable string conversion to unicode escape sequence",f.BooleanSanitizer).parse(this.rawArguments)}},{key:"configureHelp",value:function(){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:"processSourceCode",value:function(){var e=this.buildOptions(),t=y.CLIUtils.getOutputCodePath(this.inputCLIOptions.output,this.inputPath);e.sourceMap?this.processSourceCodeWithSourceMap(t,e):this.processSourceCodeWithoutSourceMap(t,e)}},{key:"processSourceCodeWithoutSourceMap",value:function(e,t){var r=m.JavaScriptObfuscator.obfuscate(this.sourceCode,t).getObfuscatedCode();y.CLIUtils.writeFile(e,r)}},{key:"processSourceCodeWithSourceMap",value:function(e,t){var r=y.CLIUtils.getOutputSourceMapPath(e,t.sourceMapFileName||"");t=Object.assign({},t,{sourceMapFileName:c.basename(r)});var n=m.JavaScriptObfuscator.obfuscate(this.sourceCode,t);y.CLIUtils.writeFile(e,n.getObfuscatedCode()),"separate"===t.sourceMapMode&&n.getSourceMap()&&y.CLIUtils.writeFile(r,n.getSourceMap())}}],[{key:"filterOptions",value:function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&void 0!==e[r]&&(t[r]=e[r]);return t}}]),e}();a.__decorate([s.initializable(),a.__metadata("design:type",Object)],b.prototype,"commands",void 0),a.__decorate([s.initializable(),a.__metadata("design:type",Object)],b.prototype,"inputCLIOptions",void 0),a.__decorate([s.initializable(),a.__metadata("design:type",String)],b.prototype,"inputPath",void 0),a.__decorate([s.initializable(),a.__metadata("design:type",String)],b.prototype,"sourceCode",void 0),t.JavaScriptObfuscatorCLI=b},function(e,t){e.exports=require("commander")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ArraySanitizer=function(e){return e.split(",").map(function(e){return e.trim()})}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BooleanSanitizer=function(e){return"true"===e||"1"===e}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(22);t.SourceMapModeSanitizer=function(e){if(!Object.keys(n.SourceMapMode).some(function(t){return n.SourceMapMode[t]===e}))throw new ReferenceError("Invalid value of `--sourceMapMode` option");return e}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(27);t.StringArrayEncodingSanitizer=function(e){switch(e){case"true":case"1":case n.StringArrayEncoding.Base64:return!0;case n.StringArrayEncoding.Rc4:return n.StringArrayEncoding.Rc4;default:return!1}}},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:"";return t&&(e=e.substring(0,e.lastIndexOf("/"))+"/"+t),/\.js\.map$/.test(e)?/\.js$/.test(e)&&(e+=".map"):e=e.split(".")[0]+".js.map",e}},{key:"getPackageConfig",value:function(){return JSON.parse(a.readFileSync(c.join(c.dirname(a.realpathSync(process.argv[1])),"../package.json"),e.encoding))}},{key:"getUserConfig",value:function(e){var t=void 0;try{t=!function(){var e=new Error('Cannot find module "."');throw e.code="MODULE_NOT_FOUND",e}()}catch(r){try{t=require(e)}catch(e){throw new ReferenceError("Given config path must be a valid file path")}}return t}},{key:"isFilePath",value:function(e){try{return a.statSync(e).isFile()}catch(e){return!1}}},{key:"readSourceCode",value:function(t){if(!e.isFilePath(t))throw new ReferenceError("Given input path must be a valid file path");if(-1===e.availableInputExtensions.indexOf(c.extname(t)))throw new ReferenceError("Input file must have .js extension");return a.readFileSync(t,e.encoding)}},{key:"writeFile",value:function(t,r){i.sync(c.dirname(t)),a.writeFileSync(t,r,{encoding:e.encoding})}}]),e}();s.availableInputExtensions=[".js"],s.encoding="utf8",t.CLIUtils=s},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("mkdirp")},function(e,t){function r(e){throw new Error("Cannot find module '"+e+"'.")}r.keys=function(){return[]},r.resolve=r,e.exports=r,r.id=165}]); +require("source-map-support").install(),module.exports=function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=40)}([function(e,t){e.exports=require("inversify")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.Factory__ICalleeDataExtractor="Factory",e.Factory__IControlFlowCustomNode="Factory",e.Factory__IControlFlowReplacer="Factory",e.Factory__ICustomNode="Factory",e.Factory__ICustomNodeGroup="Factory",e.Factory__IIdentifierObfuscatingReplacer="Factory",e.Factory__INodeGuard="Factory",e.Factory__INodeTransformer="Factory",e.Factory__IObfuscationResult="Factory",e.Factory__IObfuscatingReplacer="Factory",e.Factory__TControlFlowStorage="Factory",e.IArrayUtils="IArrayUtils",e.ICalleeDataExtractor="ICalleeDataExtractor",e.ICryptUtils="ICryptUtils",e.ICustomNode="ICustomNode",e.ICustomNodeGroup="ICustomNodeGroup",e.IControlFlowReplacer="IControlFlowReplacer",e.IDeadCodeInjectionReplacer="IDeadCodeInjectionReplacer",e.IEscapeSequenceEncoder="IEscapeSequenceEncoder",e.IIdentifierObfuscatingReplacer="IIdentifierObfuscatingReplacer",e.IJavaScriptObfuscator="IJavaScriptObfuscator",e.ILogger="ILogger",e.INodeGuard="INodeGuard",e.INodeTransformer="INodeTransformer",e.IObfuscationEventEmitter="IObfuscationEventEmitter",e.IObfuscationResult="IObfuscationResult",e.IOptions="IOptions",e.IObfuscatingReplacer="IObfuscatingReplacer",e.IRandomGenerator="IRandomGenerator",e.ISourceCode="ISourceCode",e.ISourceMapCorrector="ISourceMapCorrector",e.IStackTraceAnalyzer="IStackTraceAnalyzer",e.ITransformersRunner="ITransformersRunner",e.Newable__ICustomNode="Newable",e.Newable__TControlFlowStorage="Newable",e.TCustomNodeGroupStorage="TCustomNodeGroupStorage",e.TStringArrayStorage="TStringArrayStorage"}(t.ServiceIdentifiers||(t.ServiceIdentifiers={}))},function(e,t){e.exports=require("tslib")},function(e,t,r){"use strict";function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"initialize",t=Object.keys(this)[0];return function(r,n){var o={configurable:!0,enumerable:!0},a=r[e];if(!a||"function"!=typeof a)throw new Error("`"+e+"` method with initialization logic not found. `@"+t+"` decorator requires `"+e+"` method");var i="_"+n,c=Object.getOwnPropertyDescriptor(r,i)||o,s=Object.getOwnPropertyDescriptor(r,e)||o,u=s.value;return Object.defineProperty(r,n,Object.assign({},c,{get:function(){if(void 0===this[i])throw new Error("Property `"+n+"` is not initialized! Initialize it first!");return this[i]},set:function(e){this[i]=e}})),Object.defineProperty(r,e,Object.assign({},s,{value:function(){u.apply(this,arguments),this[n]}})),c}}Object.defineProperty(t,"__esModule",{value:!0}),t.initializable=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:0;if(l.NodeGuards.isNodeHasBlockStatement(e)){if(void 0===e.body[t])throw new ReferenceError("Wrong index `"+t+"`. Block-statement body length is `"+e.body.length+"`");return e.body[t]}throw new TypeError("The specified node have no a block-statement")}},{key:"getBlockScopesOfNode",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=t.parentNode;if(!n)throw new ReferenceError("`parentNode` property of given node is `undefined`");if(l.NodeGuards.isBlockStatementNode(n)){if(!n.parentNode)throw new ReferenceError("`parentNode` property of `parentNode` of given node is `undefined`");-1!==e.nodesWithBlockScope.indexOf(n.parentNode.type)&&r.push(n)}return t!==n?e.getBlockScopesOfNode(n,r):(l.NodeGuards.isNodeHasBlockStatement(n)&&r.push(n),r)}},{key:"getNodeBlockScopeDepth",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=t.parentNode;if(!n)throw new ReferenceError("`parentNode` property of given node is `undefined`");return l.NodeGuards.isProgramNode(n)?r:l.NodeGuards.isBlockStatementNode(t)&&-1!==e.nodesWithBlockScope.indexOf(n.type)?e.getNodeBlockScopeDepth(n,++r):e.getNodeBlockScopeDepth(n,r)}},{key:"getUnaryExpressionArgumentNode",value:function(t){return l.NodeGuards.isUnaryExpressionNode(t.argument)?e.getUnaryExpressionArgumentNode(t.argument):t.argument}},{key:"parentize",value:function(e){return s.traverse(e,{enter:function(e,t){e.parentNode=t||e,e.obfuscatedNode=!1}}),e}},{key:"typedReplace",value:function(t,r,n){e.typedTraverse(t,r,n,"replace")}},{key:"typedTraverse",value:function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"traverse";s[n](e,{enter:function(e,n){if(e.type===t&&r.enter)return r.enter(e,n)},leave:function(e,n){if(e.type===t&&r.leave)return r.leave(e,n)}})}}]),e}();d.nodesWithBlockScope=[u.NodeType.ArrowFunctionExpression,u.NodeType.FunctionDeclaration,u.NodeType.FunctionExpression,u.NodeType.MethodDefinition,u.NodeType.Program],t.NodeUtils=d},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.Program,body:e,sourceType:"script",obfuscatedNode:!1}}},{key:"getArrayExpressionNode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.ArrayExpression,elements:e}}},{key:"getAssignmentExpressionNode",value:function(e,t,r){return{type:i.NodeType.AssignmentExpression,operator:e,left:t,right:r,obfuscatedNode:!1}}},{key:"getBinaryExpressionNode",value:function(e,t,r){return{type:i.NodeType.BinaryExpression,operator:e,left:t,right:r,obfuscatedNode:!1}}},{key:"getBlockStatementNode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.BlockStatement,body:e,obfuscatedNode:!1}}},{key:"getBreakStatement",value:function(e){var t={type:i.NodeType.BreakStatement,obfuscatedNode:!1};return e&&(t.label=e),t}},{key:"getCatchClauseNode",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{type:i.NodeType.CatchClause,param:e.getIdentifierNode("err"),body:e.getBlockStatementNode(t),obfuscatedNode:!1}}},{key:"getCallExpressionNode",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return{type:i.NodeType.CallExpression,callee:e,arguments:t,obfuscatedNode:!1}}},{key:"getContinueStatement",value:function(e){var t={type:i.NodeType.ContinueStatement,obfuscatedNode:!1};return e&&(t.label=e),t}},{key:"getExpressionStatementNode",value:function(e){return{type:i.NodeType.ExpressionStatement,expression:e,obfuscatedNode:!1}}},{key:"getFunctionDeclarationNode",value:function(t,r,n){return{type:i.NodeType.FunctionDeclaration,id:e.getIdentifierNode(t),params:r,body:n,generator:!1,obfuscatedNode:!1}}},{key:"getFunctionExpressionNode",value:function(e,t){return{type:i.NodeType.FunctionExpression,params:e,body:t,generator:!1,obfuscatedNode:!1}}},{key:"getIfStatementNode",value:function(e,t,r){return Object.assign({type:i.NodeType.IfStatement,test:e,consequent:t},r&&{alternate:r},{obfuscatedNode:!1})}},{key:"getIdentifierNode",value:function(e){return{type:i.NodeType.Identifier,name:e,obfuscatedNode:!1}}},{key:"getLabeledStatement",value:function(e,t){return{type:i.NodeType.LabeledStatement,label:e,body:t,obfuscatedNode:!1}}},{key:"getLiteralNode",value:function(e,t){return t=void 0!==t?t:"'"+e+"'",{type:i.NodeType.Literal,value:e,raw:t,"x-verbatim-property":{content:t,precedence:a.Precedence.Primary},obfuscatedNode:!1}}},{key:"getLogicalExpressionNode",value:function(e,t,r){return{type:i.NodeType.LogicalExpression,operator:e,left:t,right:r,obfuscatedNode:!1}}},{key:"getMemberExpressionNode",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return{type:i.NodeType.MemberExpression,computed:r,object:e,property:t,obfuscatedNode:!1}}},{key:"getObjectExpressionNode",value:function(e){return{type:i.NodeType.ObjectExpression,properties:e,obfuscatedNode:!1}}},{key:"getPropertyNode",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return{type:i.NodeType.Property,key:e,value:t,kind:"init",method:!1,shorthand:!1,computed:r,obfuscatedNode:!1}}},{key:"getUnaryExpressionNode",value:function(e,t){var r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return{type:i.NodeType.UnaryExpression,operator:e,argument:t,prefix:r,obfuscatedNode:!1}}},{key:"getReturnStatementNode",value:function(e){return{type:i.NodeType.ReturnStatement,argument:e,obfuscatedNode:!1}}},{key:"getSwitchStatementNode",value:function(e,t){return{type:i.NodeType.SwitchStatement,discriminant:e,cases:t,obfuscatedNode:!1}}},{key:"getSwitchCaseNode",value:function(e,t){return{type:i.NodeType.SwitchCase,test:e,consequent:t,obfuscatedNode:!1}}},{key:"getUpdateExpressionNode",value:function(e,t){return{type:i.NodeType.UpdateExpression,operator:e,argument:t,prefix:!1,obfuscatedNode:!1}}},{key:"getVariableDeclarationNode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"var";return{type:i.NodeType.VariableDeclaration,declarations:e,kind:t,obfuscatedNode:!1}}},{key:"getVariableDeclaratorNode",value:function(e,t){return{type:i.NodeType.VariableDeclarator,id:e,init:t,obfuscatedNode:!1}}},{key:"getWhileStatementNode",value:function(e,t){return{type:i.NodeType.WhileStatement,test:e,body:t,obfuscatedNode:!1}}}]),e}();t.Nodes=c},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e.ArrayExpression="ArrayExpression",e.ArrowFunctionExpression="ArrowFunctionExpression",e.AssignmentExpression="AssignmentExpression",e.AssignmentPattern="AssignmentPattern",e.BinaryExpression="BinaryExpression",e.BlockStatement="BlockStatement",e.BreakStatement="BreakStatement",e.CallExpression="CallExpression",e.CatchClause="CatchClause",e.ClassDeclaration="ClassDeclaration",e.ContinueStatement="ContinueStatement",e.ExpressionStatement="ExpressionStatement",e.FunctionDeclaration="FunctionDeclaration",e.FunctionExpression="FunctionExpression",e.Identifier="Identifier",e.IfStatement="IfStatement",e.LabeledStatement="LabeledStatement",e.Literal="Literal",e.LogicalExpression="LogicalExpression",e.MemberExpression="MemberExpression",e.MethodDefinition="MethodDefinition",e.ObjectExpression="ObjectExpression",e.ObjectPattern="ObjectPattern",e.Program="Program",e.Property="Property",e.ReturnStatement="ReturnStatement",e.SwitchCase="SwitchCase",e.SwitchStatement="SwitchStatement",e.TemplateLiteral="TemplateLiteral",e.TryStatement="TryStatement",e.UnaryExpression="UnaryExpression",e.UpdateExpression="UpdateExpression",e.VariableDeclaration="VariableDeclaration",e.VariableDeclarator="VariableDeclarator",e.WhileStatement="WhileStatement"}(t.NodeType||(t.NodeType={}))},function(e,t){e.exports=require("string-template")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e[e.BinaryExpressionFunctionNode=0]="BinaryExpressionFunctionNode",e[e.BlockStatementControlFlowFlatteningNode=1]="BlockStatementControlFlowFlatteningNode",e[e.CallExpressionControlFlowStorageCallNode=2]="CallExpressionControlFlowStorageCallNode",e[e.CallExpressionFunctionNode=3]="CallExpressionFunctionNode",e[e.ControlFlowStorageNode=4]="ControlFlowStorageNode",e[e.ExpressionWithOperatorControlFlowStorageCallNode=5]="ExpressionWithOperatorControlFlowStorageCallNode",e[e.LogicalExpressionFunctionNode=6]="LogicalExpressionFunctionNode",e[e.StringLiteralControlFlowStorageCallNode=7]="StringLiteralControlFlowStorageCallNode",e[e.StringLiteralNode=8]="StringLiteralNode"}(t.ControlFlowCustomNode||(t.ControlFlowCustomNode={}))},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r1?t-1:0),n=1;n-1||0===e.indexOf("//")?e.split("/")[2]:e.split("/")[0],t=t.split(":")[0]}},{key:"isCeilNumber",value:function(e){return e%1==0}},{key:"stringRotate",value:function(e,t){if(!e)throw new ReferenceError("Cannot rotate empty string.");for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{},r=new i.InversifyContainerFacade;r.load(e,t);var n=r.get(a.ServiceIdentifiers.IJavaScriptObfuscator),o=n.obfuscate(e);return r.unload(),o}},{key:"runCLI",value:function(e){var t=new c.JavaScriptObfuscatorCLI(e);t.initialize(),t.run()}}]),e}();t.JavaScriptObfuscator=s},function(e,t,r){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:0,a=void 0;a=t.length?e.getOptimalBlockScope(t,o):r,e.prependNode(a,n)}},{key:"getOptimalBlockScope",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1/0,o=t[r];if(n<=0)throw new Error("Invalid `deep` argument value. Value should be bigger then 0.");return n>1&&o.stackTrace.length?e.getOptimalBlockScope(o.stackTrace,0,--n):o.callee}},{key:"insertNodeAtIndex",value:function(t,r,o){e.validateBodyStatements(r)||(r=[]),r=e.parentizeBodyStatementsBeforeAppend(t,r),t.body=[].concat(n(t.body.slice(0,o)),n(r),n(t.body.slice(o)))}},{key:"prependNode",value:function(t,r){e.validateBodyStatements(r)||(r=[]),r=e.parentizeBodyStatementsBeforeAppend(t,r),t.body=[].concat(n(r),n(t.body))}},{key:"parentizeBodyStatementsBeforeAppend",value:function(e,t){return t.forEach(function(t){t.parentNode=e}),t}},{key:"validateBodyStatements",value:function(e){return e.every(function(e){return!!e&&e.hasOwnProperty("type")})}}]),e}();t.NodeAppender=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e[e.ConsoleOutputDisableExpressionNode=0]="ConsoleOutputDisableExpressionNode",e[e.DebugProtectionFunctionCallNode=1]="DebugProtectionFunctionCallNode",e[e.DebugProtectionFunctionIntervalNode=2]="DebugProtectionFunctionIntervalNode",e[e.DebugProtectionFunctionNode=3]="DebugProtectionFunctionNode",e[e.DomainLockNode=4]="DomainLockNode",e[e.NodeCallsControllerFunctionNode=5]="NodeCallsControllerFunctionNode",e[e.SelfDefendingUnicodeNode=6]="SelfDefendingUnicodeNode",e[e.StringArrayCallsWrapper=7]="StringArrayCallsWrapper",e[e.StringArrayNode=8]="StringArrayNode",e[e.StringArrayRotateFunctionNode=9]="StringArrayRotateFunctionNode"}(t.CustomNode||(t.CustomNode={}))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e[e.BlockStatementControlFlowTransformer=0]="BlockStatementControlFlowTransformer",e[e.ClassDeclarationTransformer=1]="ClassDeclarationTransformer",e[e.DeadCodeInjectionTransformer=2]="DeadCodeInjectionTransformer",e[e.FunctionControlFlowTransformer=3]="FunctionControlFlowTransformer",e[e.CatchClauseTransformer=4]="CatchClauseTransformer",e[e.FunctionDeclarationTransformer=5]="FunctionDeclarationTransformer",e[e.FunctionTransformer=6]="FunctionTransformer",e[e.LabeledStatementTransformer=7]="LabeledStatementTransformer",e[e.LiteralTransformer=8]="LiteralTransformer",e[e.MemberExpressionTransformer=9]="MemberExpressionTransformer",e[e.MethodDefinitionTransformer=10]="MethodDefinitionTransformer",e[e.ObfuscatingGuardsTransformer=11]="ObfuscatingGuardsTransformer",e[e.ObjectExpressionTransformer=12]="ObjectExpressionTransformer",e[e.ParentificationTransformer=13]="ParentificationTransformer",e[e.TemplateLiteralTransformer=14]="TemplateLiteralTransformer",e[e.VariableDeclarationTransformer=15]="VariableDeclarationTransformer"}(t.NodeTransformer||(t.NodeTransformer={}))},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:p.randomGeneratorPool;return this.getRandomGenerator().string({length:e,pool:t})}},{key:"getRandomVariableName",value:function(e){var t="_"+d.Utils.hexadecimalPrefix,r=this.getRandomInteger(1e4,99999999),n=d.Utils.decToHex(r),o=""+t+n.substr(0,e);return this.randomVariableNameSet.has(o)?this.getRandomVariableName(e):(this.randomVariableNameSet.add(o),o)}},{key:"getSeed",value:function(){return this.seed}}]),e}();f.randomGeneratorPool="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",f.randomGeneratorPoolNumbers="0123456789",f.randomGeneratorPoolHexadecimal="abcdef"+p.randomGeneratorPoolNumbers,a.__decorate([l.initializable(),a.__metadata("design:type",Object)],f.prototype,"randomGenerator",void 0),a.__decorate([l.initializable(),a.__metadata("design:type",Number)],f.prototype,"seed",void 0),a.__decorate([i.postConstruct(),a.__metadata("design:type",Function),a.__metadata("design:paramtypes",[]),a.__metadata("design:returntype",void 0)],f.prototype,"initialize",null),f=p=a.__decorate([i.injectable(),a.__param(0,i.inject(c.ServiceIdentifiers.ISourceCode)),a.__param(1,i.inject(c.ServiceIdentifiers.IOptions)),a.__metadata("design:paramtypes",[Object,Object])],f),t.RandomGenerator=f;var p},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(23);t.DEFAULT_PRESET=Object.freeze({compact:!0,config:"",controlFlowFlattening:!1,controlFlowFlatteningThreshold:.75,deadCodeInjection:!1,deadCodeInjectionThreshold:.4,debugProtection:!1,debugProtectionInterval:!1,disableConsoleOutput:!1,domainLock:[],log:!1,mangle:!1,renameGlobals:!1,reservedNames:[],rotateStringArray:!0,seed:0,selfDefending:!1,sourceMap:!1,sourceMapBaseUrl:"",sourceMapFileName:"",sourceMapMode:n.SourceMapMode.Separate,stringArray:!0,stringArrayEncoding:!1,stringArrayThreshold:.75,unicodeEscapeSequence:!1})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e[e.FunctionDeclarationCalleeDataExtractor=0]="FunctionDeclarationCalleeDataExtractor",e[e.FunctionExpressionCalleeDataExtractor=1]="FunctionExpressionCalleeDataExtractor",e[e.ObjectExpressionCalleeDataExtractor=2]="ObjectExpressionCalleeDataExtractor"}(t.CalleeDataExtractor||(t.CalleeDataExtractor={}))},function(e,t){e.exports=require("esprima")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});!function(e){e[e.BinaryExpressionControlFlowReplacer=0]="BinaryExpressionControlFlowReplacer",e[e.CallExpressionControlFlowReplacer=1]="CallExpressionControlFlowReplacer",e[e.LogicalExpressionControlFlowReplacer=2]="LogicalExpressionControlFlowReplacer",e[e.StringLiteralControlFlowReplacer=3]="StringLiteralControlFlowReplacer"}(t.ControlFlowReplacer||(t.ControlFlowReplacer={}))},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]&&arguments[1];this.storage=new Map([].concat(n(this.storage),n(e.getStorage()))),t&&(this.storageId=e.getStorageId())}},{key:"set",value:function(e,t){this.storage.set(e,t)}}]),e}();c.__decorate([l.initializable(),c.__metadata("design:type",String)],d.prototype,"storageId",void 0),c.__decorate([l.initializable(),c.__metadata("design:type",Map)],d.prototype,"storage",void 0),c.__decorate([s.postConstruct(),c.__metadata("design:type",Function),c.__metadata("design:paramtypes",[]),c.__metadata("design:returntype",void 0)],d.prototype,"initialize",null),d=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__metadata("design:paramtypes",[Object])],d),t.MapStorage=d},function(e,t){e.exports=require("path")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(17);e.exports=n.JavaScriptObfuscator},function(e,t){e.exports=require("reflect-metadata")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(13),o=r(0),a=r(1),i=r(31),c=r(43),s=r(44),u=r(45),l=r(46);t.analyzersModule=new o.ContainerModule(function(e){e(a.ServiceIdentifiers.IStackTraceAnalyzer).to(l.StackTraceAnalyzer).inSingletonScope(),e(a.ServiceIdentifiers.ICalleeDataExtractor).to(c.FunctionDeclarationCalleeDataExtractor).whenTargetNamed(i.CalleeDataExtractor.FunctionDeclarationCalleeDataExtractor),e(a.ServiceIdentifiers.ICalleeDataExtractor).to(s.FunctionExpressionCalleeDataExtractor).whenTargetNamed(i.CalleeDataExtractor.FunctionExpressionCalleeDataExtractor),e(a.ServiceIdentifiers.ICalleeDataExtractor).to(u.ObjectExpressionCalleeDataExtractor).whenTargetNamed(i.CalleeDataExtractor.ObjectExpressionCalleeDataExtractor),e(a.ServiceIdentifiers.Factory__ICalleeDataExtractor).toFactory(n.InversifyContainerFacade.getCacheFactory(a.ServiceIdentifiers.ICalleeDataExtractor))})},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rr)return"break";var a=e[o];s.traverse(a,{enter:function(r){if(l.NodeGuards.isCallExpressionNode(r))return a.parentNode!==d.NodeUtils.getBlockScopesOfNode(r)[0]?s.VisitorOption.Skip:void t.analyzeCallExpressionNode(n,e,r)}})}(a))break}return n}},{key:"analyzeCallExpressionNode",value:function(e,t,r){var n=this;p.calleeDataExtractorsList.forEach(function(o){var a=n.calleeDataExtractorFactory(o).extract(t,r.callee);a&&e.push(Object.assign({},a,{stackTrace:n.analyzeRecursive(a.callee.body)}))})}}],[{key:"getLimitIndex",value:function(e){var t=e-1,r=p.limitThresholdActivationLength-1,n=t;return t>r&&(n=Math.round(r+t*p.limitThreshold))>t&&(n=t),n}}]),e}();f.calleeDataExtractorsList=[u.CalleeDataExtractor.FunctionDeclarationCalleeDataExtractor,u.CalleeDataExtractor.FunctionExpressionCalleeDataExtractor,u.CalleeDataExtractor.ObjectExpressionCalleeDataExtractor],f.limitThresholdActivationLength=25,f.limitThreshold=.002,f=p=a.__decorate([i.injectable(),a.__param(0,i.inject(c.ServiceIdentifiers.Factory__ICalleeDataExtractor)),a.__metadata("design:paramtypes",[Function])],f),t.StackTraceAnalyzer=f;var p},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(13),o=r(0),a=r(1),i=r(33),c=r(20),s=r(48),u=r(49),l=r(50),d=r(51),f=r(52),p=r(53),y=r(54);t.controlFlowTransformersModule=new o.ContainerModule(function(e){e(a.ServiceIdentifiers.INodeTransformer).to(u.BlockStatementControlFlowTransformer).whenTargetNamed(c.NodeTransformer.BlockStatementControlFlowTransformer),e(a.ServiceIdentifiers.INodeTransformer).to(d.DeadCodeInjectionTransformer).whenTargetNamed(c.NodeTransformer.DeadCodeInjectionTransformer),e(a.ServiceIdentifiers.INodeTransformer).to(f.FunctionControlFlowTransformer).whenTargetNamed(c.NodeTransformer.FunctionControlFlowTransformer),e(a.ServiceIdentifiers.IControlFlowReplacer).to(s.BinaryExpressionControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.BinaryExpressionControlFlowReplacer),e(a.ServiceIdentifiers.IControlFlowReplacer).to(l.CallExpressionControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.CallExpressionControlFlowReplacer),e(a.ServiceIdentifiers.IControlFlowReplacer).to(p.LogicalExpressionControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.LogicalExpressionControlFlowReplacer),e(a.ServiceIdentifiers.IControlFlowReplacer).to(y.StringLiteralControlFlowReplacer).whenTargetNamed(i.ControlFlowReplacer.StringLiteralControlFlowReplacer),e(a.ServiceIdentifiers.Factory__IControlFlowReplacer).toFactory(n.InversifyContainerFacade.getCacheFactory(a.ServiceIdentifiers.IControlFlowReplacer))})},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rthis.options.controlFlowFlatteningThreshold||!m.canTransformBlockStatementNode(e))return e;var r=e.body,n=this.arrayUtils.arrayRange(r.length),o=this.arrayUtils.arrayShuffle(n),a=n.map(function(e){return o.indexOf(e)}),i=this.controlFlowCustomNodeFactory(d.ControlFlowCustomNode.BlockStatementControlFlowFlatteningNode);return i.initialize(r,o,a),i.getNode()[0]}}],[{key:"blockStatementHasProhibitedStatements",value:function(e){return e.body.some(function(e){var t=p.NodeGuards.isBreakStatementNode(e)||p.NodeGuards.isContinueStatementNode(e),r=p.NodeGuards.isVariableDeclarationNode(e)&&("const"===e.kind||"let"===e.kind);return p.NodeGuards.isFunctionDeclarationNode(e)||t||r})}},{key:"canTransformBlockStatementNode",value:function(e){var t=!0;return l.traverse(e,{enter:function(e){if(p.NodeGuards.isWhileStatementNode(e))return l.VisitorOption.Skip;p.NodeGuards.isBlockStatementNode(e)&&m.blockStatementHasProhibitedStatements(e)&&(t=!1)}}),e.body.length<=4&&(t=!1),t}}]),t}(f.AbstractNodeTransformer);y=m=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.Factory__IControlFlowCustomNode)),c.__param(1,s.inject(u.ServiceIdentifiers.IArrayUtils)),c.__param(2,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(3,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Function,Object,Object,Object])],y),t.BlockStatementControlFlowTransformer=y;var m},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rthis.options.deadCodeInjectionThreshold)return e;var r=this.collectedBlockStatements.length-1,n=this.randomGenerator.getRandomInteger(0,r),o=this.collectedBlockStatements.splice(n,1)[0];return o===e?e:this.replaceBlockStatementNode(e,o)}},{key:"collectBlockStatementNodes",value:function(e,t){var r=this,n=y.NodeUtils.clone(e),o=0,a=!0;l.replace(n,{enter:function(e,t){return f.NodeGuards.isBlockStatementNode(e)&&o++,o>b.maxNestedBlockStatementsCount||f.NodeGuards.isBreakStatementNode(e)||f.NodeGuards.isContinueStatementNode(e)?(a=!1,l.VisitorOption.Break):(f.NodeGuards.isIdentifierNode(e)&&!f.NodeGuards.isMemberExpressionNode(t)&&(e.name=r.randomGenerator.getRandomVariableName(6)),e)}}),a&&t.push(n)}},{key:"replaceBlockStatementNode",value:function(e,t){var r=this.randomGenerator.getMathRandom()>.5,n=this.randomGenerator.getMathRandom()>.5,o=r?"===":"!==",a=this.randomGenerator.getRandomString(3),i=n?a:this.randomGenerator.getRandomString(3),c=void 0,s=void 0;r&&n||!r&&!n?(c=e,s=t):(c=t,s=e);var u=p.Nodes.getBlockStatementNode([p.Nodes.getIfStatementNode(p.Nodes.getBinaryExpressionNode(o,p.Nodes.getLiteralNode(a),p.Nodes.getLiteralNode(i)),c,s)]);return u=y.NodeUtils.parentize(u)}}]),t}(d.AbstractNodeTransformer);m.maxNestedBlockStatementsCount=4,m.minCollectedBlockStatementsCount=5,m=b=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(1,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Object,Object])],m),t.DeadCodeInjectionTransformer=m;var b},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;rv.hostNodeSearchMinDepth&&t.splice(0,v.hostNodeSearchMinDepth),t.length>v.hostNodeSearchMaxDepth&&(t.length=v.hostNodeSearchMaxDepth),this.randomGenerator.getRandomGenerator().pickone(t))}},{key:"isVisitedFunctionNode",value:function(e){return(m.NodeGuards.isFunctionDeclarationNode(e)||m.NodeGuards.isFunctionExpressionNode(e)||m.NodeGuards.isArrowFunctionExpressionNode(e))&&this.visitedFunctionNodes.has(e)}},{key:"transformFunctionBody",value:function(e,t){var r=this;l.replace(e,{enter:function(e,n){if(r.isVisitedFunctionNode(e))return l.VisitorOption.Skip;if(!v.controlFlowReplacersMap.has(e.type))return e;if(r.randomGenerator.getMathRandom()>r.options.controlFlowFlatteningThreshold)return e;var o=v.controlFlowReplacersMap.get(e.type);return void 0===o?e:Object.assign({},r.controlFlowReplacerFactory(o).replace(e,n,t),{parentNode:n})}})}}]),t}(y.AbstractNodeTransformer);h.controlFlowReplacersMap=new Map([[p.NodeType.BinaryExpression,f.ControlFlowReplacer.BinaryExpressionControlFlowReplacer],[p.NodeType.CallExpression,f.ControlFlowReplacer.CallExpressionControlFlowReplacer],[p.NodeType.LogicalExpression,f.ControlFlowReplacer.LogicalExpressionControlFlowReplacer],[p.NodeType.Literal,f.ControlFlowReplacer.StringLiteralControlFlowReplacer]]),h.hostNodeSearchMinDepth=0,h.hostNodeSearchMaxDepth=2,h=v=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.Factory__TControlFlowStorage)),c.__param(1,s.inject(u.ServiceIdentifiers.Factory__IControlFlowReplacer)),c.__param(2,s.inject(u.ServiceIdentifiers.Factory__IControlFlowCustomNode)),c.__param(3,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(4,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Function,Function,Function,Object,Object])],h),t.FunctionControlFlowTransformer=h;var v},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r1){var o=f.Nodes.getBinaryExpressionNode("+",n.shift(),n.shift());return n.forEach(function(e){o=f.Nodes.getBinaryExpressionNode("+",o,e)}),o}return n[0]}}],[{key:"isLiteralNodeWithStringValue",value:function(e){return e&&d.NodeGuards.isLiteralNode(e)&&"string"==typeof e.value}}]),t}(l.AbstractNodeTransformer);p=y=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(1,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Object,Object])],p),t.TemplateLiteralTransformer=p;var y},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(13),o=r(0),a=r(1),i=r(12),c=r(19),s=r(35),u=r(60),l=r(61),d=r(62),f=r(63),p=r(64),y=r(66),m=r(67),b=r(68),g=r(69),h=r(70),v=r(71),_=r(73),N=r(75),O=r(77),S=r(79),C=r(81),w=r(82),j=r(83),I=r(85),E=r(87),F=r(94),T=r(96),k=r(99),P=r(100);t.customNodesModule=new o.ContainerModule(function(e){e(a.ServiceIdentifiers.ICustomNode).to(v.ConsoleOutputDisableExpressionNode).whenTargetNamed(c.CustomNode.ConsoleOutputDisableExpressionNode),e(a.ServiceIdentifiers.ICustomNode).to(_.DebugProtectionFunctionCallNode).whenTargetNamed(c.CustomNode.DebugProtectionFunctionCallNode),e(a.ServiceIdentifiers.ICustomNode).to(N.DebugProtectionFunctionIntervalNode).whenTargetNamed(c.CustomNode.DebugProtectionFunctionIntervalNode),e(a.ServiceIdentifiers.ICustomNode).to(O.DebugProtectionFunctionNode).whenTargetNamed(c.CustomNode.DebugProtectionFunctionNode),e(a.ServiceIdentifiers.ICustomNode).to(S.DomainLockNode).whenTargetNamed(c.CustomNode.DomainLockNode),e(a.ServiceIdentifiers.ICustomNode).to(j.NodeCallsControllerFunctionNode).whenTargetNamed(c.CustomNode.NodeCallsControllerFunctionNode),e(a.ServiceIdentifiers.ICustomNode).to(I.SelfDefendingUnicodeNode).whenTargetNamed(c.CustomNode.SelfDefendingUnicodeNode),e(a.ServiceIdentifiers.ICustomNode).to(E.StringArrayCallsWrapper).whenTargetNamed(c.CustomNode.StringArrayCallsWrapper),e(a.ServiceIdentifiers.ICustomNode).to(F.StringArrayNode).whenTargetNamed(c.CustomNode.StringArrayNode),e(a.ServiceIdentifiers.ICustomNode).to(T.StringArrayRotateFunctionNode).whenTargetNamed(c.CustomNode.StringArrayRotateFunctionNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(y.BinaryExpressionFunctionNode).whenTargetNamed(i.ControlFlowCustomNode.BinaryExpressionFunctionNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(m.BlockStatementControlFlowFlatteningNode).whenTargetNamed(i.ControlFlowCustomNode.BlockStatementControlFlowFlatteningNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(b.CallExpressionControlFlowStorageCallNode).whenTargetNamed(i.ControlFlowCustomNode.CallExpressionControlFlowStorageCallNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(g.CallExpressionFunctionNode).whenTargetNamed(i.ControlFlowCustomNode.CallExpressionFunctionNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(h.ControlFlowStorageNode).whenTargetNamed(i.ControlFlowCustomNode.ControlFlowStorageNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(C.ExpressionWithOperatorControlFlowStorageCallNode).whenTargetNamed(i.ControlFlowCustomNode.ExpressionWithOperatorControlFlowStorageCallNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(w.LogicalExpressionFunctionNode).whenTargetNamed(i.ControlFlowCustomNode.LogicalExpressionFunctionNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(P.StringLiteralNode).whenTargetNamed(i.ControlFlowCustomNode.StringLiteralNode),e(a.ServiceIdentifiers.Newable__ICustomNode).toConstructor(k.StringLiteralControlFlowStorageCallNode).whenTargetNamed(i.ControlFlowCustomNode.StringLiteralControlFlowStorageCallNode),e(a.ServiceIdentifiers.ICustomNodeGroup).to(u.ConsoleOutputCustomNodeGroup).whenTargetNamed(s.CustomNodeGroup.ConsoleOutputCustomNodeGroup),e(a.ServiceIdentifiers.ICustomNodeGroup).to(l.DebugProtectionCustomNodeGroup).whenTargetNamed(s.CustomNodeGroup.DebugProtectionCustomNodeGroup),e(a.ServiceIdentifiers.ICustomNodeGroup).to(d.DomainLockCustomNodeGroup).whenTargetNamed(s.CustomNodeGroup.DomainLockCustomNodeGroup),e(a.ServiceIdentifiers.ICustomNodeGroup).to(f.SelfDefendingCustomNodeGroup).whenTargetNamed(s.CustomNodeGroup.SelfDefendingCustomNodeGroup),e(a.ServiceIdentifiers.ICustomNodeGroup).to(p.StringArrayCustomNodeGroup).whenTargetNamed(s.CustomNodeGroup.StringArrayCustomNodeGroup),e(a.ServiceIdentifiers.Factory__ICustomNode).toFactory(n.InversifyContainerFacade.getFactory(a.ServiceIdentifiers.ICustomNode)),e(a.ServiceIdentifiers.Factory__IControlFlowCustomNode).toFactory(n.InversifyContainerFacade.getConstructorFactory(a.ServiceIdentifiers.Newable__ICustomNode,a.ServiceIdentifiers.IRandomGenerator,a.ServiceIdentifiers.IOptions)),e(a.ServiceIdentifiers.Factory__ICustomNodeGroup).toFactory(n.InversifyContainerFacade.getFactory(a.ServiceIdentifiers.ICustomNodeGroup))})},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r 0;\n \n switch (isPositive) {\n case true:\n return this.item + '_' + this.value + '_' + i;\n default:\n this.item + '_' + this.value;\n }\n }\n }()\n };\n };\n \n var regExp = new RegExp(\"[{diff}]\", \"g\");\n var domains = \"{domains}\".replace(regExp, \"\").split(\";\");\n var document;\n var domain;\n \n for (var d in that) {\n if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n document = d;\n \n break;\n }\n }\n\n for (var d1 in that[document]) {\n if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n domain = d1;\n \n break;\n }\n }\n \n if ((!document && !domain) || (!that[document] && !that[document][domain])) {\n return;\n }\n \n var currentDomain = that[document][domain];\n\n var ok = false;\n \n for (var i = 0; i < domains.length; i++) {\n var domain = domains[i];\n var position = currentDomain.length - domain.length;\n var lastIndex = currentDomain.indexOf(domain, position);\n var endsWith = lastIndex !== -1 && lastIndex === position;\n \n if (endsWith) {\n if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n ok = true;\n }\n \n break;\n }\n }\n \n if (!ok) {\n data;\n } else {\n return;\n }\n \n func();\n });\n\n {domainLockFunctionName}();\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.DomainLockNodeTemplate=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r> 1 + 255 % 0;\n \n if (string.indexOf('i' === i)) {\n recursiveFunc2(string)\n }\n };\n \n var recursiveFunc2 = function (string) {\n var i = ~-4 >> 1 + 255 % 0;\n \n if (string.indexOf((true+\"\")[3]) !== i) {\n recursiveFunc1(string)\n }\n };\n \n if (!test1()) {\n if (!test2()) {\n recursiveFunc1('indеxOf');\n } else {\n recursiveFunc1('indexOf');\n }\n } else {\n recursiveFunc1('indеxOf');\n }\n })\n \n {selfDefendingFunctionName}();\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.SelfDefendingTemplate=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n return output;\n });\n })();\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.AtobTemplate=n},function(e,t,r){"use strict";function n(){return"\n var rc4 = function (str, key) {\n var s = [], j = 0, x, res = '', newStr = '';\n \n str = atob(str);\n \n for (var k = 0, length = str.length; k < length; k++) {\n newStr += '%' + ('00' + str.charCodeAt(k).toString(16)).slice(-2);\n }\n \n str = decodeURIComponent(newStr);\n \t \n\t for (var i = 0; i < 256; i++) {\n s[i] = i;\n }\n \n for (i = 0; i < 256; i++) {\n j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n }\n \n i = 0;\n j = 0;\n \n for (var y = 0; y < str.length; y++) {\n i = (i + 1) % 256;\n j = (j + s[i]) % 256;\n x = s[i];\n s[i] = s[j];\n s[j] = x;\n res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);\n }\n \n return res;\n }\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.Rc4Template=n},function(e,t,r){"use strict";function n(e){return"\n var StatesClass = function (rc4Bytes) {\n this.rc4Bytes = rc4Bytes;\n this.states = [1, 0, 0];\n this.newState = function(){return 'newState';};\n this.firstState = '"+e.encode("\\w+ *\\(\\) *{\\w+ *",!0)+"';\n this.secondState = '"+e.encode("['|\"].+['|\"];? *}",!0)+"';\n };\n \n StatesClass.prototype.checkState = function () {\n var regExp = new RegExp(this.firstState + this.secondState);\n\n return this.runState(regExp.test(this.newState.toString()) ? --this.states[1] : --this.states[0]);\n };\n \n StatesClass.prototype.runState = function (stateResult) {\n if (!Boolean(~stateResult)) {\n return stateResult;\n }\n \n return this.getState(this.rc4Bytes);\n };\n\n StatesClass.prototype.getState = function (rc4Bytes) {\n for (var i = 0, len = this.states.length; i < len; i++) {\n this.states.push(Math.round(Math.random()));\n len = this.states.length;\n }\n \n return rc4Bytes(this.states[0]);\n };\n\n new StatesClass({stringArrayCallsWrapperName}).checkState();\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.SelfDefendingTemplate=n},function(e,t,r){"use strict";function n(){return" \n if ({stringArrayCallsWrapperName}.initialized === undefined) {\n {atobPolyfill}\n \n {stringArrayCallsWrapperName}.base64DecodeUnicode = function (str) {\n var string = atob(str);\n var newStringChars = [];\n \n for (var i = 0, length = string.length; i < length; i++) {\n newStringChars += '%' + ('00' + string.charCodeAt(i).toString(16)).slice(-2);\n }\n \n return decodeURIComponent(newStringChars);\n };\n \n {stringArrayCallsWrapperName}.data = {};\n \n {stringArrayCallsWrapperName}.initialized = true;\n }\n \n var cachedValue = {stringArrayCallsWrapperName}.data[index];\n \n if (cachedValue === undefined) {\n {selfDefendingCode}\n \n value = {stringArrayCallsWrapperName}.base64DecodeUnicode(value);\n {stringArrayCallsWrapperName}.data[index] = value;\n } else {\n value = cachedValue;\n } \n "}Object.defineProperty(t,"__esModule",{value:!0}),t.StringArrayBase64DecodeNodeTemplate=n},function(e,t,r){"use strict";function n(){return"\n var {stringArrayCallsWrapperName} = function (index, key) {\n index = index - 0;\n \n var value = {stringArrayName}[index];\n \n {decodeNodeTemplate}\n \n return value;\n };\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.StringArrayCallsWrapperTemplate=n},function(e,t,r){"use strict";function n(){return"\n if ({stringArrayCallsWrapperName}.initialized === undefined) {\n {atobPolyfill}\n \n {rc4Polyfill}\n {stringArrayCallsWrapperName}.rc4 = rc4;\n \n {stringArrayCallsWrapperName}.data = {};\n \n {stringArrayCallsWrapperName}.initialized = true;\n }\n \n var cachedValue = {stringArrayCallsWrapperName}.data[index];\n\n if (cachedValue === undefined) {\n if ({stringArrayCallsWrapperName}.once === undefined) {\n {selfDefendingCode}\n \n {stringArrayCallsWrapperName}.once = true;\n }\n \n value = {stringArrayCallsWrapperName}.rc4(value, key);\n {stringArrayCallsWrapperName}.data[index] = value;\n } else {\n value = cachedValue;\n }\n "}Object.defineProperty(t,"__esModule",{value:!0}),t.StringArrayRc4DecodeNodeTemplate=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r=m.minimumLengthForStringArray&&this.randomGenerator.getMathRandom()<=this.options.stringArrayThreshold}},{key:"getStringArrayHexadecimalIndex",value:function(e,t){if(this.stringLiteralHexadecimalIndexCache.has(e))return{fromCache:!0,index:this.stringLiteralHexadecimalIndexCache.get(e)};var r=p.Utils.decToHex(t),n=""+p.Utils.hexadecimalPrefix+r;return this.stringLiteralHexadecimalIndexCache.set(e,n),{fromCache:!1,index:n}}},{key:"getEncodedValue",value:function(e){var t=void 0,r=null;switch(this.options.stringArrayEncoding){case l.StringArrayEncoding.Rc4:r=this.randomGenerator.getRandomGenerator().pickone(this.rc4Keys),t=this.cryptUtils.btoa(this.cryptUtils.rc4(e,r));break;case l.StringArrayEncoding.Base64:t=this.cryptUtils.btoa(e);break;default:t=e}return{encodedValue:t,key:r}}},{key:"replaceWithLiteralNode",value:function(e){return f.Nodes.getLiteralNode(this.escapeSequenceEncoder.encode(e,this.options.unicodeEscapeSequence))}},{key:"replaceWithStringArrayCallNode",value:function(e){var t=this.getEncodedValue(e),r=t.encodedValue,n=t.key,o=this.escapeSequenceEncoder.encode(r,this.options.unicodeEscapeSequence),a=this.stringArrayStorage.getLength(),i=p.Utils.stringRotate(this.stringArrayStorage.getStorageId(),1),c="_"+p.Utils.hexadecimalPrefix+i,s=this.getStringArrayHexadecimalIndex(o,a),u=s.fromCache,l=s.index;u||this.stringArrayStorage.set(a,o);var d=[m.getHexadecimalLiteralNode(l)];return n&&d.push(m.getRc4KeyLiteralNode(this.escapeSequenceEncoder.encode(n,this.options.unicodeEscapeSequence))),f.Nodes.getCallExpressionNode(f.Nodes.getIdentifierNode(c),d)}}],[{key:"getHexadecimalLiteralNode",value:function(e){var t=f.Nodes.getLiteralNode(e);return t.obfuscatedNode=!0,t}},{key:"getRc4KeyLiteralNode",value:function(e){var t=f.Nodes.getLiteralNode(e);return t.obfuscatedNode=!0,t}}]),t}(d.AbstractObfuscatingReplacer);y.minimumLengthForStringArray=3,y.rc4KeyLength=4,y.rc4KeysCount=50,y=m=c.__decorate([s.injectable(),c.__param(0,s.inject(u.ServiceIdentifiers.TCustomNodeGroupStorage)),c.__param(1,s.inject(u.ServiceIdentifiers.TStringArrayStorage)),c.__param(2,s.inject(u.ServiceIdentifiers.IEscapeSequenceEncoder)),c.__param(3,s.inject(u.ServiceIdentifiers.IRandomGenerator)),c.__param(4,s.inject(u.ServiceIdentifiers.ICryptUtils)),c.__param(5,s.inject(u.ServiceIdentifiers.IOptions)),c.__metadata("design:paramtypes",[Object,Object,Object,Object,Object,Object])],y),t.StringLiteralObfuscatingReplacer=y;var m},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var r=0;r=0?t:null}},{key:"getLength",value:function(){return this.storageLength}},{key:"getStorage",value:function(){return this.storage}},{key:"getStorageId",value:function(){return this.storageId}},{key:"mergeWith",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.storage=[].concat(n(this.storage),n(e.getStorage())),t&&(this.storageId=e.getStorageId())}},{key:"set",value:function(e,t){e===this.storageLength?this.storage.push(t):this.storage.splice(e,0,t),this.storageLength++}}]),e}();i.__decorate([u.initializable(),i.__metadata("design:type",Array)],l.prototype,"storage",void 0),i.__decorate([u.initializable(),i.__metadata("design:type",String)],l.prototype,"storageId",void 0),i.__decorate([c.postConstruct(),i.__metadata("design:type",Function),i.__metadata("design:paramtypes",[]),i.__metadata("design:returntype",void 0)],l.prototype,"initialize",null),l=i.__decorate([c.injectable(),i.__param(0,c.inject(s.ServiceIdentifiers.IRandomGenerator)),i.__metadata("design:paramtypes",[Object])],l),t.ArrayStorage=l},function(e,t){e.exports=require("md5")},function(e,t){e.exports=require("chance")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1),a=r(128),i=r(129),c=r(130),s=r(29);t.utilsModule=new n.ContainerModule(function(e){e(o.ServiceIdentifiers.IArrayUtils).to(a.ArrayUtils).inSingletonScope(),e(o.ServiceIdentifiers.IRandomGenerator).to(s.RandomGenerator).inSingletonScope(),e(o.ServiceIdentifiers.ICryptUtils).to(i.CryptUtils).inSingletonScope(),e(o.ServiceIdentifiers.IEscapeSequenceEncoder).to(c.EscapeSequenceEncoder).inSingletonScope()})},function(e,t,r){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t>8-o%1*8)){if((n=e.charCodeAt(o+=.75))>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|n}return t}},{key:"hideString",value:function(e,t){var r=this,n=this.randomGenerator.getRandomGenerator().string({length:t,pool:s.RandomGenerator.randomGeneratorPool}),o=n.replace(new RegExp("["+function(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}(e)+"]","g"),""),a=o.split("");return this.randomGenerator.getRandomGenerator().shuffle(a),o=a.join(""),[function(e,t){for(var n=-1,o=-1,a="";n [options]").version(y.CLIUtils.getPackageConfig().version,"-v, --version").option("-o, --output ","Output path for obfuscated code").option("--compact ","Disable one line output code compacting",d.BooleanSanitizer).option("--config ","Name of js / json config file").option("--controlFlowFlattening ","Enables control flow flattening",d.BooleanSanitizer).option("--controlFlowFlatteningThreshold ","The probability that the control flow flattening transformation will be applied to the node",parseFloat).option("--deadCodeInjection ","Enables dead code injection",d.BooleanSanitizer).option("--deadCodeInjectionThreshold ","The probability that the dead code injection transformation will be applied to the node",parseFloat).option("--debugProtection ","Disable browser Debug panel (can cause DevTools enabled browser freeze)",d.BooleanSanitizer).option("--debugProtectionInterval ","Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)",d.BooleanSanitizer).option("--disableConsoleOutput ","Allow console.log, console.info, console.error and console.warn messages output into browser console",d.BooleanSanitizer).option("--domainLock ","Blocks the execution of the code in domains that do not match the passed RegExp patterns (comma separated)",l.ArraySanitizer).option("--log ","Enables logging of the information to the console",d.BooleanSanitizer).option("--mangle ","Enables mangling of variable names",d.BooleanSanitizer).option("--reservedNames ","Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp patterns (comma separated)",l.ArraySanitizer).option("--renameGlobals ","Allows to enable obfuscation of global variable and function names with declaration.",d.BooleanSanitizer).option("--rotateStringArray ","Disable rotation of unicode array values during obfuscation",d.BooleanSanitizer).option("--seed ","Sets seed for random generator. This is useful for creating repeatable results.",parseFloat).option("--selfDefending ","Disables self-defending for obfuscated code",d.BooleanSanitizer).option("--sourceMap ","Enables source map generation",d.BooleanSanitizer).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",f.SourceMapModeSanitizer).option("--stringArray ","Disables gathering of all literal strings into an array and replacing every literal string with an array call",d.BooleanSanitizer).option("--stringArrayEncoding [true, false, base64, rc4]","Encodes all strings in strings array using base64 or rc4 (this option can slow down your code speed",p.StringArrayEncodingSanitizer).option("--stringArrayThreshold ","The probability that the literal string will be inserted into stringArray (Default: 0.8, Min: 0, Max: 1)",parseFloat).option("--unicodeEscapeSequence ","Allows to enable/disable string conversion to unicode escape sequence",d.BooleanSanitizer).parse(this.rawArguments)}},{key:"configureHelp",value:function(){this.commands.on("--help",function(){console.log(" Examples:\n"),console.log(" %> javascript-obfuscator in.js --compact true --selfDefending false"),console.log(" %> javascript-obfuscator in.js --output out.js --compact true --selfDefending false"),console.log("")})}},{key:"processSourceCode",value:function(){var e=this.buildOptions(),t=y.CLIUtils.getOutputCodePath(this.inputCLIOptions.output,this.inputPath);e.sourceMap?this.processSourceCodeWithSourceMap(t,e):this.processSourceCodeWithoutSourceMap(t,e)}},{key:"processSourceCodeWithoutSourceMap",value:function(e,t){var r=m.JavaScriptObfuscator.obfuscate(this.sourceCode,t).getObfuscatedCode();y.CLIUtils.writeFile(e,r)}},{key:"processSourceCodeWithSourceMap",value:function(e,t){var r=y.CLIUtils.getOutputSourceMapPath(e,t.sourceMapFileName||"");t=Object.assign({},t,{sourceMapFileName:c.basename(r)});var n=m.JavaScriptObfuscator.obfuscate(this.sourceCode,t);y.CLIUtils.writeFile(e,n.getObfuscatedCode()),"separate"===t.sourceMapMode&&n.getSourceMap()&&y.CLIUtils.writeFile(r,n.getSourceMap())}}],[{key:"filterOptions",value:function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&void 0!==e[r]&&(t[r]=e[r]);return t}}]),e}();a.__decorate([s.initializable(),a.__metadata("design:type",Object)],b.prototype,"commands",void 0),a.__decorate([s.initializable(),a.__metadata("design:type",Object)],b.prototype,"inputCLIOptions",void 0),a.__decorate([s.initializable(),a.__metadata("design:type",String)],b.prototype,"inputPath",void 0),a.__decorate([s.initializable(),a.__metadata("design:type",String)],b.prototype,"sourceCode",void 0),t.JavaScriptObfuscatorCLI=b},function(e,t){e.exports=require("commander")},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ArraySanitizer=function(e){return e.split(",").map(function(e){return e.trim()})}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BooleanSanitizer=function(e){return"true"===e||"1"===e}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(23);t.SourceMapModeSanitizer=function(e){if(!Object.keys(n.SourceMapMode).some(function(t){return n.SourceMapMode[t]===e}))throw new ReferenceError("Invalid value of `--sourceMapMode` option");return e}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(28);t.StringArrayEncodingSanitizer=function(e){switch(e){case"true":case"1":case n.StringArrayEncoding.Base64:return!0;case n.StringArrayEncoding.Rc4:return n.StringArrayEncoding.Rc4;default:return!1}}},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:"";return t&&(e=e.substring(0,e.lastIndexOf("/"))+"/"+t),/\.js\.map$/.test(e)?/\.js$/.test(e)&&(e+=".map"):e=e.split(".")[0]+".js.map",e}},{key:"getPackageConfig",value:function(){return JSON.parse(a.readFileSync(c.join(c.dirname(a.realpathSync(process.argv[1])),"../package.json"),e.encoding))}},{key:"getUserConfig",value:function(e){var t=void 0;try{t=!function(){var e=new Error('Cannot find module "."');throw e.code="MODULE_NOT_FOUND",e}()}catch(r){try{t=require(e)}catch(e){throw new ReferenceError("Given config path must be a valid file path")}}return t}},{key:"isFilePath",value:function(e){try{return a.statSync(e).isFile()}catch(e){return!1}}},{key:"readSourceCode",value:function(t){if(!e.isFilePath(t))throw new ReferenceError("Given input path must be a valid file path");if(-1===e.availableInputExtensions.indexOf(c.extname(t)))throw new ReferenceError("Input file must have .js extension");return a.readFileSync(t,e.encoding)}},{key:"writeFile",value:function(t,r){i.sync(c.dirname(t)),a.writeFileSync(t,r,{encoding:e.encoding})}}]),e}();s.availableInputExtensions=[".js"],s.encoding="utf8",t.CLIUtils=s},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("mkdirp")},function(e,t){function r(e){throw new Error("Cannot find module '"+e+"'.")}r.keys=function(){return[]},r.resolve=r,e.exports=r,r.id=166}]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/JavaScriptObfuscator.ts b/src/JavaScriptObfuscator.ts index 0a3518c7..27d472d5 100644 --- a/src/JavaScriptObfuscator.ts +++ b/src/JavaScriptObfuscator.ts @@ -21,10 +21,10 @@ import { IStorage } from './interfaces/storages/IStorage'; import { ITransformersRunner } from './interfaces/node-transformers/ITransformersRunner'; import { LoggingMessage } from './enums/logger/LoggingMessage'; -import { NodeTransformer } from './enums/container/node-transformers/NodeTransformer'; +import { NodeTransformer } from './enums/node-transformers/NodeTransformer'; import { ObfuscationEvent } from './enums/event-emitters/ObfuscationEvent'; -import { Node } from './node/Node'; +import { NodeGuards } from './node/NodeGuards'; @injectable() export class JavaScriptObfuscator implements IJavaScriptObfuscator { @@ -78,8 +78,8 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator { * @type {NodeTransformer[]} */ private static readonly preparingTransformersList: NodeTransformer[] = [ - NodeTransformer.ParentizeTransformer, - NodeTransformer.NodeGuardTransformer + NodeTransformer.ObfuscatingGuardsTransformer, + NodeTransformer.ParentificationTransformer ]; /** @@ -192,7 +192,7 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator { * @returns {Program} */ private transformAstTree (astTree: ESTree.Program): ESTree.Program { - if (Node.isProgramNode(astTree) && !astTree.body.length) { + if (NodeGuards.isProgramNode(astTree) && !astTree.body.length) { this.logger.warn(LoggingMessage.EmptySourceCode); return astTree; diff --git a/src/analyzers/stack-trace-analyzer/StackTraceAnalyzer.ts b/src/analyzers/stack-trace-analyzer/StackTraceAnalyzer.ts index 107e10a7..ae2eceef 100644 --- a/src/analyzers/stack-trace-analyzer/StackTraceAnalyzer.ts +++ b/src/analyzers/stack-trace-analyzer/StackTraceAnalyzer.ts @@ -10,9 +10,9 @@ import { ICalleeData } from '../../interfaces/analyzers/stack-trace-analyzer/ICa import { IStackTraceAnalyzer } from '../../interfaces/analyzers/stack-trace-analyzer/IStackTraceAnalyzer'; import { IStackTraceData } from '../../interfaces/analyzers/stack-trace-analyzer/IStackTraceData'; -import { CalleeDataExtractor } from '../../enums/container/stack-trace-analyzer/CalleeDataExtractor'; +import { CalleeDataExtractor } from '../../enums/analyzers/stack-trace-analyzer/CalleeDataExtractor'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; import { NodeUtils } from '../../node/NodeUtils'; /** @@ -110,7 +110,7 @@ export class StackTraceAnalyzer implements IStackTraceAnalyzer { } /** - * @param {Node[]} blockScopeBody + * @param {NodeGuards[]} blockScopeBody * @returns {IStackTraceData[]} */ private analyzeRecursive (blockScopeBody: ESTree.Node[]): IStackTraceData[] { @@ -127,7 +127,7 @@ export class StackTraceAnalyzer implements IStackTraceAnalyzer { estraverse.traverse(blockScopeBodyNode, { enter: (node: ESTree.Node): any => { - if (!Node.isCallExpressionNode(node)) { + if (!NodeGuards.isCallExpressionNode(node)) { return; } @@ -145,7 +145,7 @@ export class StackTraceAnalyzer implements IStackTraceAnalyzer { /** * @param {IStackTraceData[]} stackTraceData - * @param {Node[]} blockScopeBody + * @param {NodeGuards[]} blockScopeBody * @param {CallExpression} callExpressionNode */ private analyzeCallExpressionNode ( diff --git a/src/analyzers/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts b/src/analyzers/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts index db798fbc..70e2c589 100644 --- a/src/analyzers/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts +++ b/src/analyzers/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor.ts @@ -6,18 +6,18 @@ import * as ESTree from 'estree'; import { ICalleeData } from '../../../interfaces/analyzers/stack-trace-analyzer/ICalleeData'; import { AbstractCalleeDataExtractor } from './AbstractCalleeDataExtractor'; -import { Node } from '../../../node/Node'; +import { NodeGuards } from '../../../node/NodeGuards'; import { NodeUtils } from '../../../node/NodeUtils'; @injectable() export class FunctionDeclarationCalleeDataExtractor extends AbstractCalleeDataExtractor { /** - * @param {Node[]} blockScopeBody + * @param {NodeGuards[]} blockScopeBody * @param {Identifier} callee * @returns {ICalleeData} */ public extract (blockScopeBody: ESTree.Node[], callee: ESTree.Identifier): ICalleeData | null { - if (!Node.isIdentifierNode(callee)) { + if (!NodeGuards.isIdentifierNode(callee)) { return null; } @@ -37,7 +37,7 @@ export class FunctionDeclarationCalleeDataExtractor extends AbstractCalleeDataEx } /** - * @param {Node} targetNode + * @param {NodeGuards} targetNode * @param {string} name * @returns {BlockStatement} */ @@ -46,7 +46,7 @@ export class FunctionDeclarationCalleeDataExtractor extends AbstractCalleeDataEx estraverse.traverse(targetNode, { enter: (node: ESTree.Node): any => { - if (Node.isFunctionDeclarationNode(node) && node.id.name === name) { + if (NodeGuards.isFunctionDeclarationNode(node) && node.id.name === name) { calleeBlockStatement = node.body; return estraverse.VisitorOption.Break; diff --git a/src/analyzers/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts b/src/analyzers/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts index 7e77d2fd..a3afd79a 100644 --- a/src/analyzers/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts +++ b/src/analyzers/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor.ts @@ -6,27 +6,27 @@ import * as ESTree from 'estree'; import { ICalleeData } from '../../../interfaces/analyzers/stack-trace-analyzer/ICalleeData'; import { AbstractCalleeDataExtractor } from './AbstractCalleeDataExtractor'; -import { Node } from '../../../node/Node'; +import { NodeGuards } from '../../../node/NodeGuards'; import { NodeUtils } from '../../../node/NodeUtils'; @injectable() export class FunctionExpressionCalleeDataExtractor extends AbstractCalleeDataExtractor { /** - * @param {Node[]} blockScopeBody + * @param {NodeGuards[]} blockScopeBody * @param {Identifier} callee * @returns {ICalleeData} */ public extract (blockScopeBody: ESTree.Node[], callee: ESTree.Identifier): ICalleeData | null { let calleeBlockStatement: ESTree.BlockStatement | null = null; - if (Node.isIdentifierNode(callee)) { + if (NodeGuards.isIdentifierNode(callee)) { calleeBlockStatement = this.getCalleeBlockStatement( NodeUtils.getBlockScopesOfNode(blockScopeBody[0])[0], callee.name ); } - if (Node.isFunctionExpressionNode(callee)) { + if (NodeGuards.isFunctionExpressionNode(callee)) { calleeBlockStatement = callee.body; } @@ -41,7 +41,7 @@ export class FunctionExpressionCalleeDataExtractor extends AbstractCalleeDataExt } /** - * @param {Node} targetNode + * @param {NodeGuards} targetNode * @param {string} name * @returns {BlockStatement} */ @@ -51,9 +51,9 @@ export class FunctionExpressionCalleeDataExtractor extends AbstractCalleeDataExt estraverse.traverse(targetNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if ( - Node.isFunctionExpressionNode(node) && - Node.isVariableDeclaratorNode(parentNode) && - Node.isIdentifierNode(parentNode.id) && + NodeGuards.isFunctionExpressionNode(node) && + NodeGuards.isVariableDeclaratorNode(parentNode) && + NodeGuards.isIdentifierNode(parentNode.id) && parentNode.id.name === name ) { calleeBlockStatement = node.body; diff --git a/src/analyzers/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts b/src/analyzers/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts index bdecf3bf..b4b034d2 100644 --- a/src/analyzers/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts +++ b/src/analyzers/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor.ts @@ -7,19 +7,19 @@ import { TObjectMembersCallsChain } from '../../../types/analyzers/stack-trace-a import { ICalleeData } from '../../../interfaces/analyzers/stack-trace-analyzer/ICalleeData'; -import { Node } from '../../../node/Node'; -import { NodeUtils } from '../../../node/NodeUtils'; import { AbstractCalleeDataExtractor } from './AbstractCalleeDataExtractor'; +import { NodeGuards } from '../../../node/NodeGuards'; +import { NodeUtils } from '../../../node/NodeUtils'; @injectable() export class ObjectExpressionCalleeDataExtractor extends AbstractCalleeDataExtractor { /** - * @param {Node[]} blockScopeBody + * @param {NodeGuards[]} blockScopeBody * @param {MemberExpression} callee * @returns {ICalleeData} */ public extract (blockScopeBody: ESTree.Node[], callee: ESTree.MemberExpression): ICalleeData | null { - if (!Node.isMemberExpressionNode(callee)) { + if (!NodeGuards.isMemberExpressionNode(callee)) { return null; } @@ -59,10 +59,10 @@ export class ObjectExpressionCalleeDataExtractor extends AbstractCalleeDataExtra memberExpression: ESTree.MemberExpression ): TObjectMembersCallsChain { // first step: processing memberExpression `property` property - if (Node.isIdentifierNode(memberExpression.property) && memberExpression.computed === false) { + if (NodeGuards.isIdentifierNode(memberExpression.property) && memberExpression.computed === false) { currentChain.unshift(memberExpression.property.name); } else if ( - Node.isLiteralNode(memberExpression.property) && + NodeGuards.isLiteralNode(memberExpression.property) && ( typeof memberExpression.property.value === 'string' || typeof memberExpression.property.value === 'number' @@ -74,9 +74,9 @@ export class ObjectExpressionCalleeDataExtractor extends AbstractCalleeDataExtra } // second step: processing memberExpression `object` property - if (Node.isMemberExpressionNode(memberExpression.object)) { + if (NodeGuards.isMemberExpressionNode(memberExpression.object)) { return this.createObjectMembersCallsChain(currentChain, memberExpression.object); - } else if (Node.isIdentifierNode(memberExpression.object)) { + } else if (NodeGuards.isIdentifierNode(memberExpression.object)) { currentChain.unshift(memberExpression.object.name); } @@ -84,7 +84,7 @@ export class ObjectExpressionCalleeDataExtractor extends AbstractCalleeDataExtra } /** - * @param {Node} targetNode + * @param {NodeGuards} targetNode * @param {TObjectMembersCallsChain} objectMembersCallsChain * @returns {BlockStatement} */ @@ -103,10 +103,10 @@ export class ObjectExpressionCalleeDataExtractor extends AbstractCalleeDataExtra estraverse.traverse(targetNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { if ( - Node.isVariableDeclaratorNode(node) && - Node.isIdentifierNode(node.id) && + NodeGuards.isVariableDeclaratorNode(node) && + NodeGuards.isIdentifierNode(node.id) && node.init && - Node.isObjectExpressionNode(node.init) && + NodeGuards.isObjectExpressionNode(node.init) && node.id.name === objectName ) { calleeBlockStatement = this.findCalleeBlockStatement(node.init.properties, objectMembersCallsChain); @@ -136,9 +136,9 @@ export class ObjectExpressionCalleeDataExtractor extends AbstractCalleeDataExtra for (const propertyNode of objectExpressionProperties) { const isTargetPropertyNodeWithIdentifierKey: boolean = - Node.isIdentifierNode(propertyNode.key) && propertyNode.key.name === nextItemInCallsChain; + NodeGuards.isIdentifierNode(propertyNode.key) && propertyNode.key.name === nextItemInCallsChain; const isTargetPropertyNodeWithLiteralKey: boolean = - Node.isLiteralNode(propertyNode.key) && + NodeGuards.isLiteralNode(propertyNode.key) && Boolean(propertyNode.key.value) && propertyNode.key.value === nextItemInCallsChain; @@ -146,11 +146,11 @@ export class ObjectExpressionCalleeDataExtractor extends AbstractCalleeDataExtra continue; } - if (Node.isObjectExpressionNode(propertyNode.value)) { + if (NodeGuards.isObjectExpressionNode(propertyNode.value)) { return this.findCalleeBlockStatement(propertyNode.value.properties, objectMembersCallsChain); } - if (Node.isFunctionExpressionNode(propertyNode.value)) { + if (NodeGuards.isFunctionExpressionNode(propertyNode.value)) { return propertyNode.value.body; } } diff --git a/src/container/InversifyContainerFacade.ts b/src/container/InversifyContainerFacade.ts index be70c46d..6cb04c9e 100644 --- a/src/container/InversifyContainerFacade.ts +++ b/src/container/InversifyContainerFacade.ts @@ -3,10 +3,11 @@ import { ServiceIdentifiers } from './ServiceIdentifiers'; import { analyzersModule } from './modules/analyzers/AnalyzersModule'; import { controlFlowTransformersModule } from './modules/node-transformers/ControlFlowTransformersModule'; +import { convertingTransformersModule } from './modules/node-transformers/ConvertingTransformersModule'; import { customNodesModule } from './modules/custom-nodes/CustomNodesModule'; -import { nodeGuardsModule } from './modules/node-guards/NodeGuardsModule'; import { nodeTransformersModule } from './modules/node-transformers/NodeTransformersModule'; import { obfuscatingTransformersModule } from './modules/node-transformers/ObfuscatingTransformersModule'; +import { preparingTransformersModule } from './modules/node-transformers/PreparingTransformersModule'; import { storagesModule } from './modules/storages/StoragesModule'; import { utilsModule } from './modules/utils/UtilsModule'; @@ -194,10 +195,11 @@ export class InversifyContainerFacade implements IInversifyContainerFacade { // modules this.container.load(analyzersModule); this.container.load(controlFlowTransformersModule); + this.container.load(convertingTransformersModule); this.container.load(customNodesModule); - this.container.load(nodeGuardsModule); this.container.load(nodeTransformersModule); this.container.load(obfuscatingTransformersModule); + this.container.load(preparingTransformersModule); this.container.load(storagesModule); this.container.load(utilsModule); } diff --git a/src/container/modules/analyzers/AnalyzersModule.ts b/src/container/modules/analyzers/AnalyzersModule.ts index d5dc82c5..16563837 100644 --- a/src/container/modules/analyzers/AnalyzersModule.ts +++ b/src/container/modules/analyzers/AnalyzersModule.ts @@ -5,7 +5,7 @@ import { ServiceIdentifiers } from '../../ServiceIdentifiers'; import { ICalleeDataExtractor } from '../../../interfaces/analyzers/stack-trace-analyzer/ICalleeDataExtractor'; import { IStackTraceAnalyzer } from '../../../interfaces/analyzers/stack-trace-analyzer/IStackTraceAnalyzer'; -import { CalleeDataExtractor } from '../../../enums/container/stack-trace-analyzer/CalleeDataExtractor'; +import { CalleeDataExtractor } from '../../../enums/analyzers/stack-trace-analyzer/CalleeDataExtractor'; import { FunctionDeclarationCalleeDataExtractor } from '../../../analyzers/stack-trace-analyzer/callee-data-extractors/FunctionDeclarationCalleeDataExtractor'; import { FunctionExpressionCalleeDataExtractor } from '../../../analyzers/stack-trace-analyzer/callee-data-extractors/FunctionExpressionCalleeDataExtractor'; import { ObjectExpressionCalleeDataExtractor } from '../../../analyzers/stack-trace-analyzer/callee-data-extractors/ObjectExpressionCalleeDataExtractor'; diff --git a/src/container/modules/custom-nodes/CustomNodesModule.ts b/src/container/modules/custom-nodes/CustomNodesModule.ts index 33926822..5ff2e2e5 100644 --- a/src/container/modules/custom-nodes/CustomNodesModule.ts +++ b/src/container/modules/custom-nodes/CustomNodesModule.ts @@ -5,9 +5,9 @@ import { ServiceIdentifiers } from '../../ServiceIdentifiers'; import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; import { ICustomNodeGroup } from '../../../interfaces/custom-nodes/ICustomNodeGroup'; -import { ControlFlowCustomNode } from "../../../enums/container/custom-nodes/ControlFlowCustomNode"; -import { CustomNode } from '../../../enums/container/custom-nodes/CustomNode'; -import { CustomNodeGroup } from '../../../enums/container/custom-nodes/CustomNodeGroup'; +import { ControlFlowCustomNode } from "../../../enums/custom-nodes/ControlFlowCustomNode"; +import { CustomNode } from '../../../enums/custom-nodes/CustomNode'; +import { CustomNodeGroup } from '../../../enums/custom-nodes/CustomNodeGroup'; import { ConsoleOutputCustomNodeGroup } from '../../../custom-nodes/console-output-nodes/group/ConsoleOutputCustomNodeGroup'; import { DebugProtectionCustomNodeGroup } from '../../../custom-nodes/debug-protection-nodes/group/DebugProtectionCustomNodeGroup'; diff --git a/src/container/modules/node-guards/NodeGuardsModule.ts b/src/container/modules/node-guards/NodeGuardsModule.ts deleted file mode 100644 index 339231f1..00000000 --- a/src/container/modules/node-guards/NodeGuardsModule.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { InversifyContainerFacade } from '../../InversifyContainerFacade'; -import { ContainerModule, interfaces } from 'inversify'; -import { ServiceIdentifiers } from '../../ServiceIdentifiers'; - -import { INodeGuard } from '../../../interfaces/node-guards/INodeGuard'; - -import { NodeGuard } from '../../../enums/container/node-guards/NodeGuard'; - -import { BlackListNodeGuard } from '../../../node-guards/BlackListNodeGuard'; -import { ConditionalCommentNodeGuard } from '../../../node-guards/ConditionalCommentNodeGuard'; - -export const nodeGuardsModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { - // node guards - bind(ServiceIdentifiers.INodeGuard) - .to(BlackListNodeGuard) - .inSingletonScope() - .whenTargetNamed(NodeGuard.BlackListNodeGuard); - - bind(ServiceIdentifiers.INodeGuard) - .to(ConditionalCommentNodeGuard) - .inSingletonScope() - .whenTargetNamed(NodeGuard.ConditionalCommentNodeGuard); - - // node guards factory - bind(ServiceIdentifiers.Factory__INodeGuard) - .toFactory(InversifyContainerFacade - .getCacheFactory( - ServiceIdentifiers.INodeGuard - )); -}); diff --git a/src/container/modules/node-transformers/ControlFlowTransformersModule.ts b/src/container/modules/node-transformers/ControlFlowTransformersModule.ts index 0898fbc9..a9e54331 100644 --- a/src/container/modules/node-transformers/ControlFlowTransformersModule.ts +++ b/src/container/modules/node-transformers/ControlFlowTransformersModule.ts @@ -3,15 +3,34 @@ import { ContainerModule, interfaces } from 'inversify'; import { ServiceIdentifiers } from '../../ServiceIdentifiers'; import { IControlFlowReplacer } from '../../../interfaces/node-transformers/control-flow-transformers/IControlFlowReplacer'; +import { INodeTransformer } from '../../../interfaces/node-transformers/INodeTransformer'; -import { ControlFlowReplacer } from '../../../enums/container/node-transformers/ControlFlowReplacer'; +import { ControlFlowReplacer } from '../../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/ControlFlowReplacer'; +import { NodeTransformer } from '../../../enums/node-transformers/NodeTransformer'; import { BinaryExpressionControlFlowReplacer } from '../../../node-transformers/control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer'; +import { BlockStatementControlFlowTransformer } from '../../../node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer'; import { CallExpressionControlFlowReplacer } from '../../../node-transformers/control-flow-transformers/control-flow-replacers/CallExpressionControlFlowReplacer'; +import { DeadCodeInjectionTransformer } from '../../../node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer'; +import { FunctionControlFlowTransformer } from '../../../node-transformers/control-flow-transformers/FunctionControlFlowTransformer'; import { LogicalExpressionControlFlowReplacer } from '../../../node-transformers/control-flow-transformers/control-flow-replacers/LogicalExpressionControlFlowReplacer'; import { StringLiteralControlFlowReplacer } from '../../../node-transformers/control-flow-transformers/control-flow-replacers/StringLiteralControlFlowReplacer'; export const controlFlowTransformersModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { + // control flow transformers + bind(ServiceIdentifiers.INodeTransformer) + .to(BlockStatementControlFlowTransformer) + .whenTargetNamed(NodeTransformer.BlockStatementControlFlowTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(DeadCodeInjectionTransformer) + .whenTargetNamed(NodeTransformer.DeadCodeInjectionTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(FunctionControlFlowTransformer) + .whenTargetNamed(NodeTransformer.FunctionControlFlowTransformer); + + // control flow replacers bind(ServiceIdentifiers.IControlFlowReplacer) .to(BinaryExpressionControlFlowReplacer) .whenTargetNamed(ControlFlowReplacer.BinaryExpressionControlFlowReplacer); @@ -28,6 +47,7 @@ export const controlFlowTransformersModule: interfaces.ContainerModule = new Con .to(StringLiteralControlFlowReplacer) .whenTargetNamed(ControlFlowReplacer.StringLiteralControlFlowReplacer); + // control flow replacer factory bind(ServiceIdentifiers.Factory__IControlFlowReplacer) .toFactory(InversifyContainerFacade .getCacheFactory(ServiceIdentifiers.IControlFlowReplacer)); diff --git a/src/container/modules/node-transformers/ConvertingTransformersModule.ts b/src/container/modules/node-transformers/ConvertingTransformersModule.ts new file mode 100644 index 00000000..eed77312 --- /dev/null +++ b/src/container/modules/node-transformers/ConvertingTransformersModule.ts @@ -0,0 +1,25 @@ +import { ContainerModule, interfaces } from 'inversify'; +import { ServiceIdentifiers } from '../../ServiceIdentifiers'; + +import { INodeTransformer } from '../../../interfaces/node-transformers/INodeTransformer'; + +import { NodeTransformer } from '../../../enums/node-transformers/NodeTransformer'; + +import { MemberExpressionTransformer } from '../../../node-transformers/converting-transformers/MemberExpressionTransformer'; +import { MethodDefinitionTransformer } from '../../../node-transformers/converting-transformers/MethodDefinitionTransformer'; +import { TemplateLiteralTransformer } from '../../../node-transformers/converting-transformers/TemplateLiteralTransformer'; + +export const convertingTransformersModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { + // converting transformers + bind(ServiceIdentifiers.INodeTransformer) + .to(MemberExpressionTransformer) + .whenTargetNamed(NodeTransformer.MemberExpressionTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(MethodDefinitionTransformer) + .whenTargetNamed(NodeTransformer.MethodDefinitionTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(TemplateLiteralTransformer) + .whenTargetNamed(NodeTransformer.TemplateLiteralTransformer); +}); diff --git a/src/container/modules/node-transformers/NodeTransformersModule.ts b/src/container/modules/node-transformers/NodeTransformersModule.ts index acab4287..1ef471bb 100644 --- a/src/container/modules/node-transformers/NodeTransformersModule.ts +++ b/src/container/modules/node-transformers/NodeTransformersModule.ts @@ -4,95 +4,9 @@ import { ServiceIdentifiers } from '../../ServiceIdentifiers'; import { INodeTransformer } from '../../../interfaces/node-transformers/INodeTransformer'; -import { NodeTransformer } from '../../../enums/container/node-transformers/NodeTransformer'; - -import { FunctionControlFlowTransformer } from '../../../node-transformers/control-flow-transformers/FunctionControlFlowTransformer'; - -import { BlockStatementControlFlowTransformer } from '../../../node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer'; -import { DeadCodeInjectionTransformer } from '../../../node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer'; -import { CatchClauseTransformer } from '../../../node-transformers/obfuscating-transformers/CatchClauseTransformer'; -import { ClassDeclarationTransformer } from '../../../node-transformers/obfuscating-transformers/ClassDeclarationTransformer'; -import { FunctionDeclarationTransformer } from '../../../node-transformers/obfuscating-transformers/FunctionDeclarationTransformer'; -import { FunctionTransformer } from '../../../node-transformers/obfuscating-transformers/FunctionTransformer'; -import { LabeledStatementTransformer } from '../../../node-transformers/obfuscating-transformers/LabeledStatementTransformer'; -import { LiteralTransformer } from '../../../node-transformers/obfuscating-transformers/LiteralTransformer'; -import { MemberExpressionTransformer } from '../../../node-transformers/converting-transformers/MemberExpressionTransformer'; -import { MethodDefinitionTransformer } from '../../../node-transformers/converting-transformers/MethodDefinitionTransformer'; -import { ObjectExpressionTransformer } from '../../../node-transformers/obfuscating-transformers/ObjectExpressionTransformer'; -import { ParentizeTransformer } from '../../../node-transformers/preparing-transformers/ParentizeTransformer'; -import { TemplateLiteralTransformer } from '../../../node-transformers/converting-transformers/TemplateLiteralTransformer'; -import { VariableDeclarationTransformer } from '../../../node-transformers/obfuscating-transformers/VariableDeclarationTransformer'; -import { NodeGuardTransformer } from '../../../node-transformers/preparing-transformers/NodeGuardTransformer'; +import { NodeTransformer } from '../../../enums/node-transformers/NodeTransformer'; export const nodeTransformersModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { - // preparing transformers - bind(ServiceIdentifiers.INodeTransformer) - .to(ParentizeTransformer) - .whenTargetNamed(NodeTransformer.ParentizeTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(NodeGuardTransformer) - .whenTargetNamed(NodeTransformer.NodeGuardTransformer); - - // control flow transformers - bind(ServiceIdentifiers.INodeTransformer) - .to(BlockStatementControlFlowTransformer) - .whenTargetNamed(NodeTransformer.BlockStatementControlFlowTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(DeadCodeInjectionTransformer) - .whenTargetNamed(NodeTransformer.DeadCodeInjectionTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(FunctionControlFlowTransformer) - .whenTargetNamed(NodeTransformer.FunctionControlFlowTransformer); - - // converting transformers - bind(ServiceIdentifiers.INodeTransformer) - .to(MemberExpressionTransformer) - .whenTargetNamed(NodeTransformer.MemberExpressionTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(MethodDefinitionTransformer) - .whenTargetNamed(NodeTransformer.MethodDefinitionTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(TemplateLiteralTransformer) - .whenTargetNamed(NodeTransformer.TemplateLiteralTransformer); - - // obfuscation transformers - bind(ServiceIdentifiers.INodeTransformer) - .to(CatchClauseTransformer) - .whenTargetNamed(NodeTransformer.CatchClauseTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(ClassDeclarationTransformer) - .whenTargetNamed(NodeTransformer.ClassDeclarationTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(FunctionDeclarationTransformer) - .whenTargetNamed(NodeTransformer.FunctionDeclarationTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(FunctionTransformer) - .whenTargetNamed(NodeTransformer.FunctionTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(LabeledStatementTransformer) - .whenTargetNamed(NodeTransformer.LabeledStatementTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(LiteralTransformer) - .whenTargetNamed(NodeTransformer.LiteralTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(ObjectExpressionTransformer) - .whenTargetNamed(NodeTransformer.ObjectExpressionTransformer); - - bind(ServiceIdentifiers.INodeTransformer) - .to(VariableDeclarationTransformer) - .whenTargetNamed(NodeTransformer.VariableDeclarationTransformer); - // node transformers factory bind(ServiceIdentifiers.Factory__INodeTransformer) .toFactory(InversifyContainerFacade diff --git a/src/container/modules/node-transformers/ObfuscatingTransformersModule.ts b/src/container/modules/node-transformers/ObfuscatingTransformersModule.ts index a9f3af3f..16071309 100644 --- a/src/container/modules/node-transformers/ObfuscatingTransformersModule.ts +++ b/src/container/modules/node-transformers/ObfuscatingTransformersModule.ts @@ -2,18 +2,61 @@ import { InversifyContainerFacade } from '../../InversifyContainerFacade'; import { ContainerModule, interfaces } from 'inversify'; import { ServiceIdentifiers } from '../../ServiceIdentifiers'; -import { IIdentifierObfuscatingReplacer } from '../../../interfaces/node-transformers/obfuscating-transformers/IIdentifierObfuscatingReplacer'; -import { IObfuscatingReplacer } from '../../../interfaces/node-transformers/obfuscating-transformers/IObfuscatingReplacer'; +import { IIdentifierObfuscatingReplacer } from '../../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer'; +import { INodeTransformer } from '../../../interfaces/node-transformers/INodeTransformer'; +import { IObfuscatingReplacer } from '../../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IObfuscatingReplacer'; -import { IdentifierObfuscatingReplacer } from '../../../enums/container/node-transformers/IdentifierObfuscatingReplacer'; -import { LiteralObfuscatingReplacer } from '../../../enums/container/node-transformers/LiteralObfuscatingReplacer'; +import { IdentifierObfuscatingReplacer } from '../../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer'; +import { LiteralObfuscatingReplacer } from '../../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/LiteralObfuscatingReplacer'; +import { NodeTransformer } from '../../../enums/node-transformers/NodeTransformer'; import { BaseIdentifierObfuscatingReplacer } from '../../../node-transformers/obfuscating-transformers/obfuscating-replacers/identifier-obfuscating-replacers/BaseIdentifierObfuscatingReplacer'; import { BooleanLiteralObfuscatingReplacer } from '../../../node-transformers/obfuscating-transformers/obfuscating-replacers/literal-obfuscating-replacers/BooleanLiteralObfuscatingReplacer'; +import { CatchClauseTransformer } from '../../../node-transformers/obfuscating-transformers/CatchClauseTransformer'; +import { ClassDeclarationTransformer } from '../../../node-transformers/obfuscating-transformers/ClassDeclarationTransformer'; +import { FunctionDeclarationTransformer } from '../../../node-transformers/obfuscating-transformers/FunctionDeclarationTransformer'; +import { FunctionTransformer } from '../../../node-transformers/obfuscating-transformers/FunctionTransformer'; +import { LabeledStatementTransformer } from '../../../node-transformers/obfuscating-transformers/LabeledStatementTransformer'; +import { LiteralTransformer } from '../../../node-transformers/obfuscating-transformers/LiteralTransformer'; import { NumberLiteralObfuscatingReplacer } from '../../../node-transformers/obfuscating-transformers/obfuscating-replacers/literal-obfuscating-replacers/NumberLiteralObfuscatingReplacer'; +import { ObjectExpressionTransformer } from '../../../node-transformers/obfuscating-transformers/ObjectExpressionTransformer'; import { StringLiteralObfuscatingReplacer } from '../../../node-transformers/obfuscating-transformers/obfuscating-replacers/literal-obfuscating-replacers/StringLiteralObfuscatingReplacer'; +import { VariableDeclarationTransformer } from '../../../node-transformers/obfuscating-transformers/VariableDeclarationTransformer'; export const obfuscatingTransformersModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { + // obfuscating transformers + bind(ServiceIdentifiers.INodeTransformer) + .to(CatchClauseTransformer) + .whenTargetNamed(NodeTransformer.CatchClauseTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(ClassDeclarationTransformer) + .whenTargetNamed(NodeTransformer.ClassDeclarationTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(FunctionDeclarationTransformer) + .whenTargetNamed(NodeTransformer.FunctionDeclarationTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(FunctionTransformer) + .whenTargetNamed(NodeTransformer.FunctionTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(LabeledStatementTransformer) + .whenTargetNamed(NodeTransformer.LabeledStatementTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(LiteralTransformer) + .whenTargetNamed(NodeTransformer.LiteralTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(ObjectExpressionTransformer) + .whenTargetNamed(NodeTransformer.ObjectExpressionTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(VariableDeclarationTransformer) + .whenTargetNamed(NodeTransformer.VariableDeclarationTransformer); + // literal obfuscating replacers bind(ServiceIdentifiers.IObfuscatingReplacer) .to(BooleanLiteralObfuscatingReplacer) diff --git a/src/container/modules/node-transformers/PreparingTransformersModule.ts b/src/container/modules/node-transformers/PreparingTransformersModule.ts new file mode 100644 index 00000000..16524115 --- /dev/null +++ b/src/container/modules/node-transformers/PreparingTransformersModule.ts @@ -0,0 +1,43 @@ +import { InversifyContainerFacade } from '../../InversifyContainerFacade'; +import { ContainerModule, interfaces } from 'inversify'; +import { ServiceIdentifiers } from '../../ServiceIdentifiers'; + +import { INodeTransformer } from '../../../interfaces/node-transformers/INodeTransformer'; +import { IObfuscatingGuard } from '../../../interfaces/node-transformers/preparing-transformers/obfuscating-guards/IObfuscatingGuard'; + +import { NodeTransformer } from '../../../enums/node-transformers/NodeTransformer'; +import { ObfuscatingGuard } from '../../../enums/node-transformers/preparing-transformers/obfuscating-guards/ObfuscatingGuard'; + +import { BlackListObfuscatingGuard } from '../../../node-transformers/preparing-transformers/obfuscating-guards/BlackListObfuscatingGuard'; +import { ConditionalCommentObfuscatingGuard } from '../../../node-transformers/preparing-transformers/obfuscating-guards/ConditionalCommentObfuscatingGuard'; +import { ObfuscatingGuardsTransformer } from '../../../node-transformers/preparing-transformers/ObfuscatingGuardsTransformer'; +import { ParentificationTransformer } from '../../../node-transformers/preparing-transformers/ParentificationTransformer'; + +export const preparingTransformersModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { + // preparing transformers + bind(ServiceIdentifiers.INodeTransformer) + .to(ObfuscatingGuardsTransformer) + .whenTargetNamed(NodeTransformer.ObfuscatingGuardsTransformer); + + bind(ServiceIdentifiers.INodeTransformer) + .to(ParentificationTransformer) + .whenTargetNamed(NodeTransformer.ParentificationTransformer); + + // obfuscating guards + bind(ServiceIdentifiers.INodeGuard) + .to(BlackListObfuscatingGuard) + .inSingletonScope() + .whenTargetNamed(ObfuscatingGuard.BlackListNodeGuard); + + bind(ServiceIdentifiers.INodeGuard) + .to(ConditionalCommentObfuscatingGuard) + .inSingletonScope() + .whenTargetNamed(ObfuscatingGuard.ConditionalCommentNodeGuard); + + // obfuscating guards factory + bind(ServiceIdentifiers.Factory__INodeGuard) + .toFactory(InversifyContainerFacade + .getCacheFactory( + ServiceIdentifiers.INodeGuard + )); +}); diff --git a/src/custom-nodes/AbstractCustomNodeGroup.ts b/src/custom-nodes/AbstractCustomNodeGroup.ts index 64a50ab6..641998bc 100644 --- a/src/custom-nodes/AbstractCustomNodeGroup.ts +++ b/src/custom-nodes/AbstractCustomNodeGroup.ts @@ -9,7 +9,7 @@ import { IOptions } from '../interfaces/options/IOptions'; import { IRandomGenerator } from '../interfaces/utils/IRandomGenerator'; import { IStackTraceData } from '../interfaces/analyzers/stack-trace-analyzer/IStackTraceData'; -import { CustomNode } from '../enums/container/custom-nodes/CustomNode'; +import { CustomNode } from '../enums/custom-nodes/CustomNode'; import { ObfuscationEvent } from '../enums/event-emitters/ObfuscationEvent'; @injectable() diff --git a/src/custom-nodes/console-output-nodes/group/ConsoleOutputCustomNodeGroup.ts b/src/custom-nodes/console-output-nodes/group/ConsoleOutputCustomNodeGroup.ts index eeb24a80..7a151a93 100644 --- a/src/custom-nodes/console-output-nodes/group/ConsoleOutputCustomNodeGroup.ts +++ b/src/custom-nodes/console-output-nodes/group/ConsoleOutputCustomNodeGroup.ts @@ -12,7 +12,7 @@ import { IStackTraceData } from '../../../interfaces/analyzers/stack-trace-analy import { initializable } from '../../../decorators/Initializable'; -import { CustomNode } from '../../../enums/container/custom-nodes/CustomNode'; +import { CustomNode } from '../../../enums/custom-nodes/CustomNode'; import { ObfuscationEvent } from '../../../enums/event-emitters/ObfuscationEvent'; import { AbstractCustomNodeGroup } from '../../AbstractCustomNodeGroup'; diff --git a/src/custom-nodes/debug-protection-nodes/group/DebugProtectionCustomNodeGroup.ts b/src/custom-nodes/debug-protection-nodes/group/DebugProtectionCustomNodeGroup.ts index bbe3e527..576a1ef1 100644 --- a/src/custom-nodes/debug-protection-nodes/group/DebugProtectionCustomNodeGroup.ts +++ b/src/custom-nodes/debug-protection-nodes/group/DebugProtectionCustomNodeGroup.ts @@ -12,7 +12,7 @@ import { IStackTraceData } from '../../../interfaces/analyzers/stack-trace-analy import { initializable } from '../../../decorators/Initializable'; -import { CustomNode } from '../../../enums/container/custom-nodes/CustomNode'; +import { CustomNode } from '../../../enums/custom-nodes/CustomNode'; import { ObfuscationEvent } from '../../../enums/event-emitters/ObfuscationEvent'; import { AbstractCustomNodeGroup } from '../../AbstractCustomNodeGroup'; diff --git a/src/custom-nodes/domain-lock-nodes/group/DomainLockCustomNodeGroup.ts b/src/custom-nodes/domain-lock-nodes/group/DomainLockCustomNodeGroup.ts index 3e24ca13..b2817778 100644 --- a/src/custom-nodes/domain-lock-nodes/group/DomainLockCustomNodeGroup.ts +++ b/src/custom-nodes/domain-lock-nodes/group/DomainLockCustomNodeGroup.ts @@ -12,7 +12,7 @@ import { IStackTraceData } from '../../../interfaces/analyzers/stack-trace-analy import { initializable } from '../../../decorators/Initializable'; -import { CustomNode } from '../../../enums/container/custom-nodes/CustomNode'; +import { CustomNode } from '../../../enums/custom-nodes/CustomNode'; import { ObfuscationEvent } from '../../../enums/event-emitters/ObfuscationEvent'; import { AbstractCustomNodeGroup } from '../../AbstractCustomNodeGroup'; diff --git a/src/custom-nodes/self-defending-nodes/group/SelfDefendingCustomNodeGroup.ts b/src/custom-nodes/self-defending-nodes/group/SelfDefendingCustomNodeGroup.ts index 5782078b..0a917848 100644 --- a/src/custom-nodes/self-defending-nodes/group/SelfDefendingCustomNodeGroup.ts +++ b/src/custom-nodes/self-defending-nodes/group/SelfDefendingCustomNodeGroup.ts @@ -12,7 +12,7 @@ import { IStackTraceData } from '../../../interfaces/analyzers/stack-trace-analy import { initializable } from '../../../decorators/Initializable'; -import { CustomNode } from '../../../enums/container/custom-nodes/CustomNode'; +import { CustomNode } from '../../../enums/custom-nodes/CustomNode'; import { ObfuscationEvent } from '../../../enums/event-emitters/ObfuscationEvent'; import { AbstractCustomNodeGroup } from '../../AbstractCustomNodeGroup'; diff --git a/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts b/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts index fa4e4c0f..7fdfe891 100644 --- a/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts +++ b/src/custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup.ts @@ -13,7 +13,7 @@ import { IStorage } from '../../../interfaces/storages/IStorage'; import { initializable } from '../../../decorators/Initializable'; -import { CustomNode } from '../../../enums/container/custom-nodes/CustomNode'; +import { CustomNode } from '../../../enums/custom-nodes/CustomNode'; import { ObfuscationEvent } from '../../../enums/event-emitters/ObfuscationEvent'; import { AbstractCustomNodeGroup } from '../../AbstractCustomNodeGroup'; diff --git a/src/enums/container/stack-trace-analyzer/CalleeDataExtractor.ts b/src/enums/analyzers/stack-trace-analyzer/CalleeDataExtractor.ts similarity index 100% rename from src/enums/container/stack-trace-analyzer/CalleeDataExtractor.ts rename to src/enums/analyzers/stack-trace-analyzer/CalleeDataExtractor.ts diff --git a/src/enums/container/custom-nodes/ControlFlowCustomNode.ts b/src/enums/custom-nodes/ControlFlowCustomNode.ts similarity index 100% rename from src/enums/container/custom-nodes/ControlFlowCustomNode.ts rename to src/enums/custom-nodes/ControlFlowCustomNode.ts diff --git a/src/enums/container/custom-nodes/CustomNode.ts b/src/enums/custom-nodes/CustomNode.ts similarity index 100% rename from src/enums/container/custom-nodes/CustomNode.ts rename to src/enums/custom-nodes/CustomNode.ts diff --git a/src/enums/container/custom-nodes/CustomNodeGroup.ts b/src/enums/custom-nodes/CustomNodeGroup.ts similarity index 100% rename from src/enums/container/custom-nodes/CustomNodeGroup.ts rename to src/enums/custom-nodes/CustomNodeGroup.ts diff --git a/src/enums/container/node-transformers/NodeTransformer.ts b/src/enums/node-transformers/NodeTransformer.ts similarity index 88% rename from src/enums/container/node-transformers/NodeTransformer.ts rename to src/enums/node-transformers/NodeTransformer.ts index db867e92..546ffefd 100644 --- a/src/enums/container/node-transformers/NodeTransformer.ts +++ b/src/enums/node-transformers/NodeTransformer.ts @@ -10,9 +10,9 @@ export enum NodeTransformer { LiteralTransformer, MemberExpressionTransformer, MethodDefinitionTransformer, - NodeGuardTransformer, + ObfuscatingGuardsTransformer, ObjectExpressionTransformer, - ParentizeTransformer, + ParentificationTransformer, TemplateLiteralTransformer, VariableDeclarationTransformer } diff --git a/src/enums/container/node-transformers/ControlFlowReplacer.ts b/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/ControlFlowReplacer.ts similarity index 100% rename from src/enums/container/node-transformers/ControlFlowReplacer.ts rename to src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/ControlFlowReplacer.ts diff --git a/src/enums/container/node-transformers/IdentifierObfuscatingReplacer.ts b/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer.ts similarity index 100% rename from src/enums/container/node-transformers/IdentifierObfuscatingReplacer.ts rename to src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer.ts diff --git a/src/enums/container/node-transformers/LiteralObfuscatingReplacer.ts b/src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/LiteralObfuscatingReplacer.ts similarity index 100% rename from src/enums/container/node-transformers/LiteralObfuscatingReplacer.ts rename to src/enums/node-transformers/obfuscating-transformers/obfuscating-replacers/LiteralObfuscatingReplacer.ts diff --git a/src/enums/container/node-guards/NodeGuard.ts b/src/enums/node-transformers/preparing-transformers/obfuscating-guards/ObfuscatingGuard.ts similarity index 65% rename from src/enums/container/node-guards/NodeGuard.ts rename to src/enums/node-transformers/preparing-transformers/obfuscating-guards/ObfuscatingGuard.ts index df78cb03..ecbbe697 100644 --- a/src/enums/container/node-guards/NodeGuard.ts +++ b/src/enums/node-transformers/preparing-transformers/obfuscating-guards/ObfuscatingGuard.ts @@ -1,4 +1,4 @@ -export enum NodeGuard { +export enum ObfuscatingGuard { BlackListNodeGuard, ConditionalCommentNodeGuard } diff --git a/src/interfaces/custom-nodes/ICustomNodeGroup.d.ts b/src/interfaces/custom-nodes/ICustomNodeGroup.d.ts index b0165626..836a4d0a 100644 --- a/src/interfaces/custom-nodes/ICustomNodeGroup.d.ts +++ b/src/interfaces/custom-nodes/ICustomNodeGroup.d.ts @@ -4,7 +4,7 @@ import { ICustomNode } from './ICustomNode'; import { IInitializable } from '../IInitializable'; import { IStackTraceData } from '../analyzers/stack-trace-analyzer/IStackTraceData'; -import { CustomNode } from '../../enums/container/custom-nodes/CustomNode'; +import { CustomNode } from '../../enums/custom-nodes/CustomNode'; import { ObfuscationEvent } from '../../enums/event-emitters/ObfuscationEvent'; export interface ICustomNodeGroup extends IInitializable { diff --git a/src/interfaces/node-guards/INodeGuard.ts b/src/interfaces/node-guards/INodeGuard.ts deleted file mode 100644 index 6292a044..00000000 --- a/src/interfaces/node-guards/INodeGuard.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { TNodeGuard } from '../../types/node/TNodeGuard'; - -export interface INodeGuard { - /** - * @param {Node} node - * @returns {boolean} - */ - check: TNodeGuard; -} diff --git a/src/interfaces/node-transformers/ITransformersRunner.d.ts b/src/interfaces/node-transformers/ITransformersRunner.d.ts index 3cf9a9a1..1b7d2361 100644 --- a/src/interfaces/node-transformers/ITransformersRunner.d.ts +++ b/src/interfaces/node-transformers/ITransformersRunner.d.ts @@ -1,6 +1,6 @@ import * as ESTree from 'estree'; -import { NodeTransformer } from '../../enums/container/node-transformers/NodeTransformer'; +import { NodeTransformer } from '../../enums/node-transformers/NodeTransformer'; export interface ITransformersRunner { /** diff --git a/src/interfaces/node-transformers/obfuscating-transformers/IIdentifierObfuscatingReplacer.d.ts b/src/interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer.d.ts similarity index 100% rename from src/interfaces/node-transformers/obfuscating-transformers/IIdentifierObfuscatingReplacer.d.ts rename to src/interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer.d.ts diff --git a/src/interfaces/node-transformers/obfuscating-transformers/IObfuscatingReplacer.d.ts b/src/interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IObfuscatingReplacer.d.ts similarity index 100% rename from src/interfaces/node-transformers/obfuscating-transformers/IObfuscatingReplacer.d.ts rename to src/interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IObfuscatingReplacer.d.ts diff --git a/src/interfaces/node-transformers/preparing-transformers/obfuscating-guards/IObfuscatingGuard.ts b/src/interfaces/node-transformers/preparing-transformers/obfuscating-guards/IObfuscatingGuard.ts new file mode 100644 index 00000000..318d6db1 --- /dev/null +++ b/src/interfaces/node-transformers/preparing-transformers/obfuscating-guards/IObfuscatingGuard.ts @@ -0,0 +1,9 @@ +import { TNodeGuard } from '../../../../types/node/TNodeGuard'; + +export interface IObfuscatingGuard { + /** + * @param {Node} node + * @returns {boolean} + */ + check: TNodeGuard; +} diff --git a/src/node-transformers/TransformersRunner.ts b/src/node-transformers/TransformersRunner.ts index fa842350..7ab161dc 100644 --- a/src/node-transformers/TransformersRunner.ts +++ b/src/node-transformers/TransformersRunner.ts @@ -12,10 +12,10 @@ import { TVisitorResult } from '../types/node-transformers/TVisitorResult'; import { ITransformersRunner } from '../interfaces/node-transformers/ITransformersRunner'; import { IVisitor } from '../interfaces/node-transformers/IVisitor'; -import { NodeTransformer } from '../enums/container/node-transformers/NodeTransformer'; +import { NodeTransformer } from '../enums/node-transformers/NodeTransformer'; import { VisitorDirection } from '../enums/node-transformers/VisitorDirection'; -import { Node } from '../node/Node'; +import { NodeGuards } from '../node/NodeGuards'; @injectable() export class TransformersRunner implements ITransformersRunner { @@ -98,7 +98,7 @@ export class TransformersRunner implements ITransformersRunner { const visitorResult: TVisitorResult = visitorFunction(node, parentNode); - if (!visitorResult || !Node.isNode(visitorResult)) { + if (!visitorResult || !NodeGuards.isNode(visitorResult)) { continue; } diff --git a/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts b/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts index d4cb0e25..dcc57f9a 100644 --- a/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts +++ b/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts @@ -12,10 +12,10 @@ import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; -import { ControlFlowCustomNode } from '../../enums/container/custom-nodes/ControlFlowCustomNode'; +import { ControlFlowCustomNode } from '../../enums/custom-nodes/ControlFlowCustomNode'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; @injectable() export class BlockStatementControlFlowTransformer extends AbstractNodeTransformer { @@ -54,11 +54,11 @@ export class BlockStatementControlFlowTransformer extends AbstractNodeTransforme */ private static blockStatementHasProhibitedStatements (blockStatementNode: ESTree.BlockStatement): boolean { return blockStatementNode.body.some((statement: ESTree.Statement) => { - const isBreakOrContinueStatement: boolean = Node.isBreakStatementNode(statement) || Node.isContinueStatementNode(statement); - const isVariableDeclarationWithLetOrConstKind: boolean = Node.isVariableDeclarationNode(statement) + const isBreakOrContinueStatement: boolean = NodeGuards.isBreakStatementNode(statement) || NodeGuards.isContinueStatementNode(statement); + const isVariableDeclarationWithLetOrConstKind: boolean = NodeGuards.isVariableDeclarationNode(statement) && (statement.kind === 'const' || statement.kind === 'let'); - return Node.isFunctionDeclarationNode(statement) || isBreakOrContinueStatement || isVariableDeclarationWithLetOrConstKind; + return NodeGuards.isFunctionDeclarationNode(statement) || isBreakOrContinueStatement || isVariableDeclarationWithLetOrConstKind; }); } @@ -71,12 +71,12 @@ export class BlockStatementControlFlowTransformer extends AbstractNodeTransforme estraverse.traverse(blockStatementNode, { enter: (node: ESTree.Node): any => { - if (Node.isWhileStatementNode(node)) { + if (NodeGuards.isWhileStatementNode(node)) { return estraverse.VisitorOption.Skip; } if ( - Node.isBlockStatementNode(node) + NodeGuards.isBlockStatementNode(node) && BlockStatementControlFlowTransformer.blockStatementHasProhibitedStatements(node) ) { canTransform = false; @@ -97,7 +97,7 @@ export class BlockStatementControlFlowTransformer extends AbstractNodeTransforme public getVisitor (): IVisitor { return { leave: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isBlockStatementNode(node)) { + if (NodeGuards.isBlockStatementNode(node)) { return this.transformNode(node, parentNode); } } @@ -106,8 +106,8 @@ export class BlockStatementControlFlowTransformer extends AbstractNodeTransforme /** * @param {BlockStatement} blockStatementNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (blockStatementNode: ESTree.BlockStatement, parentNode: ESTree.Node): ESTree.Node { if ( diff --git a/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts b/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts index 0342f54b..07a185b5 100644 --- a/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts +++ b/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts @@ -15,13 +15,13 @@ import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IStorage } from '../../interfaces/storages/IStorage'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; -import { ControlFlowCustomNode } from '../../enums/container/custom-nodes/ControlFlowCustomNode'; +import { ControlFlowCustomNode } from '../../enums/custom-nodes/ControlFlowCustomNode'; +import { ControlFlowReplacer } from '../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/ControlFlowReplacer'; import { NodeType } from '../../enums/node/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; import { NodeAppender } from '../../node/NodeAppender'; -import { ControlFlowReplacer } from '../../enums/container/node-transformers/ControlFlowReplacer'; import { NodeUtils } from '../../node/NodeUtils'; @injectable() @@ -107,9 +107,9 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { return { leave: (node: ESTree.Node, parentNode: ESTree.Node) => { if ( - Node.isFunctionDeclarationNode(node) || - Node.isFunctionExpressionNode(node) || - Node.isArrowFunctionExpressionNode(node) + NodeGuards.isFunctionDeclarationNode(node) || + NodeGuards.isFunctionExpressionNode(node) || + NodeGuards.isArrowFunctionExpressionNode(node) ) { return this.transformNode(node, parentNode); } @@ -119,13 +119,13 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { /** * @param {Function} functionNode - * @param {Node} parentNode + * @param {NodeGuards} parentNode * @returns {Function} */ public transformNode (functionNode: ESTree.Function, parentNode: ESTree.Node): ESTree.Function { this.visitedFunctionNodes.add(functionNode); - if (!Node.isBlockStatementNode(functionNode.body)) { + if (!NodeGuards.isBlockStatementNode(functionNode.body)) { return functionNode; } @@ -195,14 +195,14 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { } /** - * @param {Node} node + * @param {NodeGuards} node * @returns {boolean} */ private isVisitedFunctionNode (node: ESTree.Node): boolean { return ( - Node.isFunctionDeclarationNode(node) || - Node.isFunctionExpressionNode(node) || - Node.isArrowFunctionExpressionNode(node) + NodeGuards.isFunctionDeclarationNode(node) || + NodeGuards.isFunctionExpressionNode(node) || + NodeGuards.isArrowFunctionExpressionNode(node) ) && this.visitedFunctionNodes.has(node); } diff --git a/src/node-transformers/control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.ts b/src/node-transformers/control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.ts index b54aed13..60ab0f71 100644 --- a/src/node-transformers/control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.ts +++ b/src/node-transformers/control-flow-transformers/control-flow-replacers/BinaryExpressionControlFlowReplacer.ts @@ -10,7 +10,7 @@ import { IOptions } from '../../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../../interfaces/utils/IRandomGenerator'; import { IStorage } from '../../../interfaces/storages/IStorage'; -import { ControlFlowCustomNode } from '../../../enums/container/custom-nodes/ControlFlowCustomNode'; +import { ControlFlowCustomNode } from '../../../enums/custom-nodes/ControlFlowCustomNode'; import { ExpressionWithOperatorControlFlowReplacer } from './ExpressionWithOperatorControlFlowReplacer'; diff --git a/src/node-transformers/control-flow-transformers/control-flow-replacers/CallExpressionControlFlowReplacer.ts b/src/node-transformers/control-flow-transformers/control-flow-replacers/CallExpressionControlFlowReplacer.ts index 07c7929e..d4445241 100644 --- a/src/node-transformers/control-flow-transformers/control-flow-replacers/CallExpressionControlFlowReplacer.ts +++ b/src/node-transformers/control-flow-transformers/control-flow-replacers/CallExpressionControlFlowReplacer.ts @@ -11,10 +11,10 @@ import { IOptions } from '../../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../../interfaces/utils/IRandomGenerator'; import { IStorage } from '../../../interfaces/storages/IStorage'; -import { ControlFlowCustomNode } from '../../../enums/container/custom-nodes/ControlFlowCustomNode'; +import { ControlFlowCustomNode } from '../../../enums/custom-nodes/ControlFlowCustomNode'; import { AbstractControlFlowReplacer } from './AbstractControlFlowReplacer'; -import { Node } from '../../../node/Node'; +import { NodeGuards } from '../../../node/NodeGuards'; @injectable() export class CallExpressionControlFlowReplacer extends AbstractControlFlowReplacer { @@ -39,9 +39,9 @@ export class CallExpressionControlFlowReplacer extends AbstractControlFlowReplac /** * @param {CallExpression} callExpressionNode - * @param {Node} parentNode + * @param {NodeGuards} parentNode * @param {IStorage} controlFlowStorage - * @returns {Node} + * @returns {NodeGuards} */ public replace ( callExpressionNode: ESTree.CallExpression, @@ -50,7 +50,7 @@ export class CallExpressionControlFlowReplacer extends AbstractControlFlowReplac ): ESTree.Node { const callee: ESTree.Expression = callExpressionNode.callee; - if (!Node.isIdentifierNode(callee)) { + if (!NodeGuards.isIdentifierNode(callee)) { return callExpressionNode; } @@ -82,7 +82,7 @@ export class CallExpressionControlFlowReplacer extends AbstractControlFlowReplac * @param {string} storageKey * @param {Expression} callee * @param {(Expression | SpreadElement)[]} expressionArguments - * @returns {Node} + * @returns {NodeGuards} */ protected getControlFlowStorageCallNode ( controlFlowStorageId: string, @@ -98,7 +98,7 @@ export class CallExpressionControlFlowReplacer extends AbstractControlFlowReplac const statementNode: TStatement = controlFlowStorageCallCustomNode.getNode()[0]; - if (!statementNode || !Node.isExpressionStatementNode(statementNode)) { + if (!statementNode || !NodeGuards.isExpressionStatementNode(statementNode)) { throw new Error(`\`controlFlowStorageCallCustomNode.getNode()[0]\` should returns array with \`ExpressionStatement\` node`); } diff --git a/src/node-transformers/control-flow-transformers/control-flow-replacers/ExpressionWithOperatorControlFlowReplacer.ts b/src/node-transformers/control-flow-transformers/control-flow-replacers/ExpressionWithOperatorControlFlowReplacer.ts index a3b13415..9b4c48d8 100644 --- a/src/node-transformers/control-flow-transformers/control-flow-replacers/ExpressionWithOperatorControlFlowReplacer.ts +++ b/src/node-transformers/control-flow-transformers/control-flow-replacers/ExpressionWithOperatorControlFlowReplacer.ts @@ -10,10 +10,10 @@ import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; import { IOptions } from '../../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../../interfaces/utils/IRandomGenerator'; -import { ControlFlowCustomNode } from '../../../enums/container/custom-nodes/ControlFlowCustomNode'; +import { ControlFlowCustomNode } from '../../../enums/custom-nodes/ControlFlowCustomNode'; import { AbstractControlFlowReplacer } from './AbstractControlFlowReplacer'; -import { Node } from '../../../node/Node'; +import { NodeGuards } from '../../../node/NodeGuards'; @injectable() export abstract class ExpressionWithOperatorControlFlowReplacer extends AbstractControlFlowReplacer { @@ -46,7 +46,7 @@ export abstract class ExpressionWithOperatorControlFlowReplacer extends Abstract * @param {string} storageKey * @param {Expression} leftExpression * @param {Expression} rightExpression - * @returns {Node} + * @returns {NodeGuards} */ protected getControlFlowStorageCallNode ( controlFlowStorageId: string, @@ -62,7 +62,7 @@ export abstract class ExpressionWithOperatorControlFlowReplacer extends Abstract const statementNode: TStatement = controlFlowStorageCallCustomNode.getNode()[0]; - if (!statementNode || !Node.isExpressionStatementNode(statementNode)) { + if (!statementNode || !NodeGuards.isExpressionStatementNode(statementNode)) { throw new Error(`\`controlFlowStorageCallCustomNode.getNode()[0]\` should returns array with \`ExpressionStatement\` node`); } diff --git a/src/node-transformers/control-flow-transformers/control-flow-replacers/LogicalExpressionControlFlowReplacer.ts b/src/node-transformers/control-flow-transformers/control-flow-replacers/LogicalExpressionControlFlowReplacer.ts index e869e26f..cd46bf0c 100644 --- a/src/node-transformers/control-flow-transformers/control-flow-replacers/LogicalExpressionControlFlowReplacer.ts +++ b/src/node-transformers/control-flow-transformers/control-flow-replacers/LogicalExpressionControlFlowReplacer.ts @@ -10,10 +10,10 @@ import { IOptions } from '../../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../../interfaces/utils/IRandomGenerator'; import { IStorage } from '../../../interfaces/storages/IStorage'; -import { ControlFlowCustomNode } from '../../../enums/container/custom-nodes/ControlFlowCustomNode'; +import { ControlFlowCustomNode } from '../../../enums/custom-nodes/ControlFlowCustomNode'; import { ExpressionWithOperatorControlFlowReplacer } from './ExpressionWithOperatorControlFlowReplacer'; -import { Node } from '../../../node/Node'; +import { NodeGuards } from '../../../node/NodeGuards'; import { NodeUtils } from '../../../node/NodeUtils'; @injectable() @@ -39,9 +39,9 @@ export class LogicalExpressionControlFlowReplacer extends ExpressionWithOperator /** * @param {LogicalExpression} logicalExpressionNode - * @param {Node} parentNode + * @param {NodeGuards} parentNode * @param {IStorage} controlFlowStorage - * @returns {Node} + * @returns {NodeGuards} */ public replace ( logicalExpressionNode: ESTree.LogicalExpression, @@ -83,16 +83,16 @@ export class LogicalExpressionControlFlowReplacer extends ExpressionWithOperator return [leftExpression, rightExpression].some((expressionNode: ESTree.Node | ESTree.Expression): boolean => { let nodeForCheck: ESTree.Node | ESTree.Expression; - if (!Node.isUnaryExpressionNode(expressionNode)) { + if (!NodeGuards.isUnaryExpressionNode(expressionNode)) { nodeForCheck = expressionNode; } else { nodeForCheck = NodeUtils.getUnaryExpressionArgumentNode(expressionNode); } - return !Node.isLiteralNode(nodeForCheck) && - !Node.isIdentifierNode(nodeForCheck) && - !Node.isObjectExpressionNode(nodeForCheck) && - !Node.isExpressionStatementNode(nodeForCheck); + return !NodeGuards.isLiteralNode(nodeForCheck) && + !NodeGuards.isIdentifierNode(nodeForCheck) && + !NodeGuards.isObjectExpressionNode(nodeForCheck) && + !NodeGuards.isExpressionStatementNode(nodeForCheck); }); } } diff --git a/src/node-transformers/control-flow-transformers/control-flow-replacers/StringLiteralControlFlowReplacer.ts b/src/node-transformers/control-flow-transformers/control-flow-replacers/StringLiteralControlFlowReplacer.ts index 314ea341..c5376460 100644 --- a/src/node-transformers/control-flow-transformers/control-flow-replacers/StringLiteralControlFlowReplacer.ts +++ b/src/node-transformers/control-flow-transformers/control-flow-replacers/StringLiteralControlFlowReplacer.ts @@ -11,10 +11,10 @@ import { IOptions } from '../../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../../interfaces/utils/IRandomGenerator'; import { IStorage } from '../../../interfaces/storages/IStorage'; -import { ControlFlowCustomNode } from '../../../enums/container/custom-nodes/ControlFlowCustomNode'; +import { ControlFlowCustomNode } from '../../../enums/custom-nodes/ControlFlowCustomNode'; import { AbstractControlFlowReplacer } from './AbstractControlFlowReplacer'; -import { Node } from '../../../node/Node'; +import { NodeGuards } from '../../../node/NodeGuards'; @injectable() export class StringLiteralControlFlowReplacer extends AbstractControlFlowReplacer { @@ -39,16 +39,16 @@ export class StringLiteralControlFlowReplacer extends AbstractControlFlowReplace /** * @param {Literal} literalNode - * @param {Node} parentNode + * @param {NodeGuards} parentNode * @param {IStorage} controlFlowStorage - * @returns {Node} + * @returns {NodeGuards} */ public replace ( literalNode: ESTree.Literal, parentNode: ESTree.Node, controlFlowStorage: IStorage ): ESTree.Node { - if (Node.isPropertyNode(parentNode) && parentNode.key === literalNode) { + if (NodeGuards.isPropertyNode(parentNode) && parentNode.key === literalNode) { return literalNode; } @@ -76,7 +76,7 @@ export class StringLiteralControlFlowReplacer extends AbstractControlFlowReplace /** * @param {string} controlFlowStorageId * @param {string} storageKey - * @returns {Node} + * @returns {NodeGuards} */ protected getControlFlowStorageCallNode ( controlFlowStorageId: string, @@ -90,7 +90,7 @@ export class StringLiteralControlFlowReplacer extends AbstractControlFlowReplace const statementNode: TStatement = controlFlowStorageCallCustomNode.getNode()[0]; - if (!statementNode || !Node.isExpressionStatementNode(statementNode)) { + if (!statementNode || !NodeGuards.isExpressionStatementNode(statementNode)) { throw new Error(`\`controlFlowStorageCallCustomNode.getNode()[0]\` should returns array with \`ExpressionStatement\` node`); } diff --git a/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts b/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts index ea2fd659..c9486be9 100644 --- a/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts +++ b/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts @@ -10,7 +10,7 @@ import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; import { NodeType } from '../../enums/node/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; @injectable() export class MemberExpressionTransformer extends AbstractNodeTransformer { @@ -31,7 +31,7 @@ export class MemberExpressionTransformer extends AbstractNodeTransformer { public getVisitor (): IVisitor { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isMemberExpressionNode(node)) { + if (NodeGuards.isMemberExpressionNode(node)) { return this.transformNode(node, parentNode); } } @@ -51,11 +51,11 @@ export class MemberExpressionTransformer extends AbstractNodeTransformer { * Literal node will be obfuscated by LiteralTransformer * * @param {MemberExpression} memberExpressionNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (memberExpressionNode: ESTree.MemberExpression, parentNode: ESTree.Node): ESTree.Node { - if (Node.isIdentifierNode(memberExpressionNode.property)) { + if (NodeGuards.isIdentifierNode(memberExpressionNode.property)) { if (memberExpressionNode.computed) { return memberExpressionNode; } diff --git a/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts b/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts index 544acf2a..8f5ffb8e 100644 --- a/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts +++ b/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts @@ -10,7 +10,7 @@ import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; import { NodeType } from '../../enums/node/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; /** * replaces: @@ -45,7 +45,7 @@ export class MethodDefinitionTransformer extends AbstractNodeTransformer { public getVisitor (): IVisitor { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isMethodDefinitionNode(node)) { + if (NodeGuards.isMethodDefinitionNode(node)) { return this.transformNode(node, parentNode); } } @@ -64,12 +64,12 @@ export class MethodDefinitionTransformer extends AbstractNodeTransformer { * Literal node will be obfuscated by LiteralTransformer * * @param {MethodDefinition} methodDefinitionNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (methodDefinitionNode: ESTree.MethodDefinition, parentNode: ESTree.Node): ESTree.Node { if ( - Node.isIdentifierNode(methodDefinitionNode.key) && + NodeGuards.isIdentifierNode(methodDefinitionNode.key) && !MethodDefinitionTransformer.ignoredNames.includes(methodDefinitionNode.key.name) && methodDefinitionNode.computed === false ) { diff --git a/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts b/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts index c99d21b9..8176b9ff 100644 --- a/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts +++ b/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts @@ -8,7 +8,7 @@ import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; import { Nodes } from '../../node/Nodes'; /** @@ -29,11 +29,11 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer { } /** - * @param {Node} node + * @param {NodeGuards} node * @returns {boolean} */ private static isLiteralNodeWithStringValue (node: ESTree.Node): boolean { - return node && Node.isLiteralNode(node) && typeof node.value === 'string'; + return node && NodeGuards.isLiteralNode(node) && typeof node.value === 'string'; } /** @@ -42,7 +42,7 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer { public getVisitor (): IVisitor { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isTemplateLiteralNode(node)) { + if (NodeGuards.isTemplateLiteralNode(node)) { return this.transformNode(node, parentNode); } } @@ -51,8 +51,8 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer { /** * @param {TemplateLiteral} templateLiteralNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (templateLiteralNode: ESTree.TemplateLiteral, parentNode: ESTree.Node): ESTree.Node { const templateLiteralExpressions: ESTree.Expression[] = templateLiteralNode.expressions; @@ -72,7 +72,7 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer { }); nodes = nodes.filter((node: ESTree.Literal | ESTree.Expression) => { - return !(Node.isLiteralNode(node) && node.value === ''); + return !(NodeGuards.isLiteralNode(node) && node.value === ''); }); // since `+` is left-to-right associative diff --git a/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts b/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts index 45820c07..f5f6aad8 100644 --- a/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts +++ b/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts @@ -9,7 +9,7 @@ import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; import { Nodes } from '../../node/Nodes'; import { NodeUtils } from '../../node/NodeUtils'; @@ -52,14 +52,14 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { public getVisitor (): IVisitor { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isProgramNode(node)) { + if (NodeGuards.isProgramNode(node)) { this.analyzeNode(node, parentNode); return node; } }, leave: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isBlockStatementNode(node)) { + if (NodeGuards.isBlockStatementNode(node)) { return this.transformNode(node, parentNode); } } @@ -67,13 +67,13 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { } /** - * @param {Node} programNode - * @param {Node} parentNode + * @param {NodeGuards} programNode + * @param {NodeGuards} parentNode */ public analyzeNode (programNode: ESTree.Node, parentNode: ESTree.Node): void { estraverse.traverse(programNode, { enter: (node: ESTree.Node): any => { - if (Node.isBlockStatementNode(node)) { + if (NodeGuards.isBlockStatementNode(node)) { this.collectBlockStatementNodes(node, this.collectedBlockStatements); } } @@ -84,8 +84,8 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { /** * @param {BlockStatement} blockStatementNode - * @param {Node} parentNode - * @returns {Node | VisitorOption} + * @param {NodeGuards} parentNode + * @returns {NodeGuards | VisitorOption} */ public transformNode ( blockStatementNode: ESTree.BlockStatement, @@ -133,7 +133,7 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { /** * First step: count nested block statements in current block statement */ - if (Node.isBlockStatementNode(node)) { + if (NodeGuards.isBlockStatementNode(node)) { nestedBlockStatementsCount++; } @@ -143,8 +143,8 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { */ if ( nestedBlockStatementsCount > DeadCodeInjectionTransformer.maxNestedBlockStatementsCount || - Node.isBreakStatementNode(node) || - Node.isContinueStatementNode(node) + NodeGuards.isBreakStatementNode(node) || + NodeGuards.isContinueStatementNode(node) ) { isValidBlockStatementNode = false; @@ -155,7 +155,7 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { * Second step: rename all identifiers (except identifiers in member expressions) * in current block statement */ - if (Node.isIdentifierNode(node) && !Node.isMemberExpressionNode(parentNode)) { + if (NodeGuards.isIdentifierNode(node) && !NodeGuards.isMemberExpressionNode(parentNode)) { node.name = this.randomGenerator.getRandomVariableName(6); } diff --git a/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts b/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts index 6995e988..02736600 100644 --- a/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts @@ -6,15 +6,15 @@ import * as ESTree from 'estree'; import { TIdentifierObfuscatingReplacerFactory } from '../../types/container/node-transformers/TIdentifierObfuscatingReplacerFactory'; -import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/IIdentifierObfuscatingReplacer'; +import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer'; import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; -import { IdentifierObfuscatingReplacer } from '../../enums/container/node-transformers/IdentifierObfuscatingReplacer'; +import { IdentifierObfuscatingReplacer } from '../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; /** * replaces: @@ -55,7 +55,7 @@ export class CatchClauseTransformer extends AbstractNodeTransformer { public getVisitor (): IVisitor { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isCatchClauseNode(node)) { + if (NodeGuards.isCatchClauseNode(node)) { return this.transformNode(node, parentNode); } } @@ -64,8 +64,8 @@ export class CatchClauseTransformer extends AbstractNodeTransformer { /** * @param {CatchClause} catchClauseNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (catchClauseNode: ESTree.CatchClause, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; @@ -81,7 +81,7 @@ export class CatchClauseTransformer extends AbstractNodeTransformer { * @param {number} nodeIdentifier */ private storeCatchClauseParam (catchClauseNode: ESTree.CatchClause, nodeIdentifier: number): void { - if (Node.isIdentifierNode(catchClauseNode.param)) { + if (NodeGuards.isIdentifierNode(catchClauseNode.param)) { this.identifierObfuscatingReplacer.storeNames(catchClauseNode.param.name, nodeIdentifier); } } @@ -93,7 +93,7 @@ export class CatchClauseTransformer extends AbstractNodeTransformer { private replaceCatchClauseParam (catchClauseNode: ESTree.CatchClause, nodeIdentifier: number): void { estraverse.replace(catchClauseNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { - if (Node.isReplaceableIdentifierNode(node, parentNode)) { + if (NodeGuards.isReplaceableIdentifierNode(node, parentNode)) { const newIdentifier: ESTree.Identifier = this.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); const newIdentifierName: string = newIdentifier.name; diff --git a/src/node-transformers/obfuscating-transformers/ClassDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/ClassDeclarationTransformer.ts index f62bbc2d..f8390eb2 100644 --- a/src/node-transformers/obfuscating-transformers/ClassDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/ClassDeclarationTransformer.ts @@ -7,16 +7,16 @@ import * as ESTree from 'estree'; import { TIdentifierObfuscatingReplacerFactory } from "../../types/container/node-transformers/TIdentifierObfuscatingReplacerFactory"; import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; -import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/IIdentifierObfuscatingReplacer'; +import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer'; import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; -import { IdentifierObfuscatingReplacer } from "../../enums/container/node-transformers/IdentifierObfuscatingReplacer"; +import { IdentifierObfuscatingReplacer } from "../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer"; import { NodeType } from '../../enums/node/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; import { NodeUtils } from '../../node/NodeUtils'; /** @@ -64,7 +64,7 @@ export class ClassDeclarationTransformer extends AbstractNodeTransformer { public getVisitor (): IVisitor { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isClassDeclarationNode(node)) { + if (NodeGuards.isClassDeclarationNode(node)) { return this.transformNode(node, parentNode); } } @@ -73,8 +73,8 @@ export class ClassDeclarationTransformer extends AbstractNodeTransformer { /** * @param {ClassDeclaration} classDeclarationNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (classDeclarationNode: ESTree.ClassDeclaration, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; @@ -106,7 +106,7 @@ export class ClassDeclarationTransformer extends AbstractNodeTransformer { } /** - * @param {Node} scopeNode + * @param {NodeGuards} scopeNode * @param {number} nodeIdentifier */ private replaceScopeCachedIdentifiers (scopeNode: ESTree.Node, nodeIdentifier: number): void { @@ -120,7 +120,7 @@ export class ClassDeclarationTransformer extends AbstractNodeTransformer { } /** - * @param {Node} scopeNode + * @param {NodeGuards} scopeNode * @param {number} nodeIdentifier */ private replaceScopeIdentifiers (scopeNode: ESTree.Node, nodeIdentifier: number): void { @@ -128,7 +128,7 @@ export class ClassDeclarationTransformer extends AbstractNodeTransformer { estraverse.replace(scopeNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { - if (Node.isReplaceableIdentifierNode(node, parentNode)) { + if (NodeGuards.isReplaceableIdentifierNode(node, parentNode)) { const newIdentifier: ESTree.Identifier = this.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); const newIdentifierName: string = newIdentifier.name; diff --git a/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts index 068c02f2..94625c2b 100644 --- a/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts @@ -7,16 +7,16 @@ import * as ESTree from 'estree'; import { TIdentifierObfuscatingReplacerFactory } from "../../types/container/node-transformers/TIdentifierObfuscatingReplacerFactory"; import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; -import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/IIdentifierObfuscatingReplacer'; +import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer'; import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; -import { IdentifierObfuscatingReplacer } from "../../enums/container/node-transformers/IdentifierObfuscatingReplacer"; +import { IdentifierObfuscatingReplacer } from "../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer"; import { NodeType } from '../../enums/node/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; import { NodeUtils } from '../../node/NodeUtils'; /** @@ -64,7 +64,7 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer { public getVisitor (): IVisitor { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isFunctionDeclarationNode(node)) { + if (NodeGuards.isFunctionDeclarationNode(node)) { return this.transformNode(node, parentNode); } } @@ -73,8 +73,8 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer { /** * @param {FunctionDeclaration} functionDeclarationNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (functionDeclarationNode: ESTree.FunctionDeclaration, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; @@ -106,7 +106,7 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer { } /** - * @param {Node} scopeNode + * @param {NodeGuards} scopeNode * @param {number} nodeIdentifier */ private replaceScopeCachedIdentifiers (scopeNode: ESTree.Node, nodeIdentifier: number): void { @@ -120,7 +120,7 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer { } /** - * @param {Node} scopeNode + * @param {NodeGuards} scopeNode * @param {number} nodeIdentifier */ private replaceScopeIdentifiers (scopeNode: ESTree.Node, nodeIdentifier: number): void { @@ -128,7 +128,7 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer { estraverse.replace(scopeNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { - if (Node.isReplaceableIdentifierNode(node, parentNode)) { + if (NodeGuards.isReplaceableIdentifierNode(node, parentNode)) { const newIdentifier: ESTree.Identifier = this.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); const newIdentifierName: string = newIdentifier.name; diff --git a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts index bd93ee01..ebcc3e13 100644 --- a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts @@ -6,15 +6,15 @@ import * as ESTree from 'estree'; import { TIdentifierObfuscatingReplacerFactory } from '../../types/container/node-transformers/TIdentifierObfuscatingReplacerFactory'; -import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/IIdentifierObfuscatingReplacer'; +import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer'; import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; -import { IdentifierObfuscatingReplacer } from '../../enums/container/node-transformers/IdentifierObfuscatingReplacer'; +import { IdentifierObfuscatingReplacer } from '../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; /** * replaces: @@ -56,9 +56,9 @@ export class FunctionTransformer extends AbstractNodeTransformer { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { if ( - Node.isFunctionDeclarationNode(node) || - Node.isFunctionExpressionNode(node) || - Node.isArrowFunctionExpressionNode(node) + NodeGuards.isFunctionDeclarationNode(node) || + NodeGuards.isFunctionExpressionNode(node) || + NodeGuards.isArrowFunctionExpressionNode(node) ) { return this.transformNode(node, parentNode); } @@ -68,8 +68,8 @@ export class FunctionTransformer extends AbstractNodeTransformer { /** * @param {Function} functionNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (functionNode: ESTree.Function, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; @@ -87,19 +87,19 @@ export class FunctionTransformer extends AbstractNodeTransformer { private storeFunctionParams (functionNode: ESTree.Function, nodeIdentifier: number): void { functionNode.params .forEach((paramsNode: ESTree.Node) => { - if (Node.isObjectPatternNode(paramsNode)) { + if (NodeGuards.isObjectPatternNode(paramsNode)) { return estraverse.VisitorOption.Skip; } estraverse.traverse(paramsNode, { enter: (node: ESTree.Node): any => { - if (Node.isAssignmentPatternNode(node) && Node.isIdentifierNode(node.left)) { + if (NodeGuards.isAssignmentPatternNode(node) && NodeGuards.isIdentifierNode(node.left)) { this.identifierObfuscatingReplacer.storeNames(node.left.name, nodeIdentifier); return estraverse.VisitorOption.Skip; } - if (Node.isIdentifierNode(node)) { + if (NodeGuards.isIdentifierNode(node)) { this.identifierObfuscatingReplacer.storeNames(node.name, nodeIdentifier); } } @@ -114,7 +114,7 @@ export class FunctionTransformer extends AbstractNodeTransformer { private replaceFunctionParams (functionNode: ESTree.Function, nodeIdentifier: number): void { const replaceVisitor: estraverse.Visitor = { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { - if (Node.isReplaceableIdentifierNode(node, parentNode)) { + if (NodeGuards.isReplaceableIdentifierNode(node, parentNode)) { const newIdentifier: ESTree.Identifier = this.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); const newIdentifierName: string = newIdentifier.name; diff --git a/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts b/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts index 2520b501..80760b71 100644 --- a/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts @@ -6,15 +6,15 @@ import * as ESTree from 'estree'; import { TIdentifierObfuscatingReplacerFactory } from '../../types/container/node-transformers/TIdentifierObfuscatingReplacerFactory'; -import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/IIdentifierObfuscatingReplacer'; +import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer'; import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; -import { IdentifierObfuscatingReplacer } from '../../enums/container/node-transformers/IdentifierObfuscatingReplacer'; +import { IdentifierObfuscatingReplacer } from '../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; /** * replaces: @@ -63,7 +63,7 @@ export class LabeledStatementTransformer extends AbstractNodeTransformer { public getVisitor (): IVisitor { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isLabeledStatementNode(node)) { + if (NodeGuards.isLabeledStatementNode(node)) { return this.transformNode(node, parentNode); } } @@ -72,8 +72,8 @@ export class LabeledStatementTransformer extends AbstractNodeTransformer { /** * @param {LabeledStatement} labeledStatementNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (labeledStatementNode: ESTree.LabeledStatement, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; @@ -99,7 +99,7 @@ export class LabeledStatementTransformer extends AbstractNodeTransformer { private replaceLabeledStatementName (labeledStatementNode: ESTree.LabeledStatement, nodeIdentifier: number): void { estraverse.replace(labeledStatementNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { - if (Node.isLabelIdentifierNode(node, parentNode)) { + if (NodeGuards.isLabelIdentifierNode(node, parentNode)) { const newIdentifier: ESTree.Identifier = this.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); node.name = newIdentifier.name; diff --git a/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts b/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts index b9a031fd..4416bc48 100644 --- a/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts @@ -9,10 +9,10 @@ import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; -import { LiteralObfuscatingReplacer } from '../../enums/container/node-transformers/LiteralObfuscatingReplacer'; +import { LiteralObfuscatingReplacer } from '../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/LiteralObfuscatingReplacer'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; @injectable() export class LiteralTransformer extends AbstractNodeTransformer { @@ -43,7 +43,7 @@ export class LiteralTransformer extends AbstractNodeTransformer { public getVisitor (): IVisitor { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isLiteralNode(node) && !node.obfuscatedNode) { + if (NodeGuards.isLiteralNode(node) && !node.obfuscatedNode) { return this.transformNode(node, parentNode); } } @@ -52,11 +52,11 @@ export class LiteralTransformer extends AbstractNodeTransformer { /** * @param {Literal} literalNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (literalNode: ESTree.Literal, parentNode: ESTree.Node): ESTree.Node { - if (Node.isPropertyNode(parentNode) && parentNode.key === literalNode) { + if (NodeGuards.isPropertyNode(parentNode) && parentNode.key === literalNode) { return literalNode; } diff --git a/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts b/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts index 390ba45d..d94bbaa5 100644 --- a/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts @@ -10,7 +10,7 @@ import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; import { NodeType } from '../../enums/node/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; /** * replaces: @@ -50,7 +50,7 @@ export class ObjectExpressionTransformer extends AbstractNodeTransformer { public getVisitor (): IVisitor { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isObjectExpressionNode(node)) { + if (NodeGuards.isObjectExpressionNode(node)) { return this.transformNode(node, parentNode); } } @@ -59,8 +59,8 @@ export class ObjectExpressionTransformer extends AbstractNodeTransformer { /** * @param {ObjectExpression} objectExpressionNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (objectExpressionNode: ESTree.ObjectExpression, parentNode: ESTree.Node): ESTree.Node { objectExpressionNode.properties @@ -69,7 +69,7 @@ export class ObjectExpressionTransformer extends AbstractNodeTransformer { property.shorthand = false; } - if (Node.isIdentifierNode(property.key)) { + if (NodeGuards.isIdentifierNode(property.key)) { property.key = ObjectExpressionTransformer.transformIdentifierPropertyKey(property.key); } }); diff --git a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts index 9ff2957f..1400b826 100644 --- a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts @@ -7,16 +7,16 @@ import * as ESTree from 'estree'; import { TIdentifierObfuscatingReplacerFactory } from '../../types/container/node-transformers/TIdentifierObfuscatingReplacerFactory'; import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement'; -import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/IIdentifierObfuscatingReplacer'; +import { IIdentifierObfuscatingReplacer } from '../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer'; import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; -import { IdentifierObfuscatingReplacer } from "../../enums/container/node-transformers/IdentifierObfuscatingReplacer"; +import { IdentifierObfuscatingReplacer } from "../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer"; import { NodeType } from '../../enums/node/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { Node } from '../../node/Node'; +import { NodeGuards } from '../../node/NodeGuards'; import { NodeUtils } from '../../node/NodeUtils'; /** @@ -65,7 +65,7 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { public getVisitor (): IVisitor { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - if (Node.isVariableDeclarationNode(node)) { + if (NodeGuards.isVariableDeclarationNode(node)) { return this.transformNode(node, parentNode); } } @@ -74,8 +74,8 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { /** * @param {VariableDeclaration} variableDeclarationNode - * @param {Node} parentNode - * @returns {Node} + * @param {NodeGuards} parentNode + * @returns {NodeGuards} */ public transformNode (variableDeclarationNode: ESTree.VariableDeclaration, parentNode: ESTree.Node): ESTree.Node { const blockScopeOfVariableDeclarationNode: TNodeWithBlockStatement = NodeUtils @@ -109,7 +109,7 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { private storeVariableNames (variableDeclarationNode: ESTree.VariableDeclaration, nodeIdentifier: number): void { variableDeclarationNode.declarations .forEach((declarationNode: ESTree.VariableDeclarator) => { - if (Node.isObjectPatternNode(declarationNode.id)) { + if (NodeGuards.isObjectPatternNode(declarationNode.id)) { return estraverse.VisitorOption.Skip; } @@ -120,7 +120,7 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { } /** - * @param {Node} scopeNode + * @param {NodeGuards} scopeNode * @param {number} nodeIdentifier */ private replaceScopeCachedIdentifiers (scopeNode: ESTree.Node, nodeIdentifier: number): void { @@ -134,7 +134,7 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { } /** - * @param {Node} scopeNode + * @param {NodeGuards} scopeNode * @param {number} nodeIdentifier */ private replaceScopeIdentifiers (scopeNode: ESTree.Node, nodeIdentifier: number): void { @@ -142,7 +142,7 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { estraverse.replace(scopeNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { - if (!node.obfuscatedNode && Node.isReplaceableIdentifierNode(node, parentNode)) { + if (!node.obfuscatedNode && NodeGuards.isReplaceableIdentifierNode(node, parentNode)) { const newIdentifier: ESTree.Identifier = this.identifierObfuscatingReplacer.replace(node.name, nodeIdentifier); const newIdentifierName: string = newIdentifier.name; diff --git a/src/node-transformers/obfuscating-transformers/obfuscating-replacers/AbstractObfuscatingReplacer.ts b/src/node-transformers/obfuscating-transformers/obfuscating-replacers/AbstractObfuscatingReplacer.ts index c307ae99..efb57649 100644 --- a/src/node-transformers/obfuscating-transformers/obfuscating-replacers/AbstractObfuscatingReplacer.ts +++ b/src/node-transformers/obfuscating-transformers/obfuscating-replacers/AbstractObfuscatingReplacer.ts @@ -3,7 +3,7 @@ import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers'; import * as ESTree from 'estree'; -import { IObfuscatingReplacer } from '../../../interfaces/node-transformers/obfuscating-transformers/IObfuscatingReplacer'; +import { IObfuscatingReplacer } from '../../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IObfuscatingReplacer'; import { IOptions } from '../../../interfaces/options/IOptions'; @injectable() diff --git a/src/node-transformers/obfuscating-transformers/obfuscating-replacers/identifier-obfuscating-replacers/BaseIdentifierObfuscatingReplacer.ts b/src/node-transformers/obfuscating-transformers/obfuscating-replacers/identifier-obfuscating-replacers/BaseIdentifierObfuscatingReplacer.ts index 02d49dc9..016fc7f8 100644 --- a/src/node-transformers/obfuscating-transformers/obfuscating-replacers/identifier-obfuscating-replacers/BaseIdentifierObfuscatingReplacer.ts +++ b/src/node-transformers/obfuscating-transformers/obfuscating-replacers/identifier-obfuscating-replacers/BaseIdentifierObfuscatingReplacer.ts @@ -3,7 +3,7 @@ import { ServiceIdentifiers } from '../../../../container/ServiceIdentifiers'; import * as ESTree from 'estree'; -import { IIdentifierObfuscatingReplacer } from '../../../../interfaces/node-transformers/obfuscating-transformers/IIdentifierObfuscatingReplacer'; +import { IIdentifierObfuscatingReplacer } from '../../../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer'; import { IOptions } from '../../../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../../../interfaces/utils/IRandomGenerator'; diff --git a/src/node-transformers/preparing-transformers/NodeGuardTransformer.ts b/src/node-transformers/preparing-transformers/ObfuscatingGuardsTransformer.ts similarity index 52% rename from src/node-transformers/preparing-transformers/NodeGuardTransformer.ts rename to src/node-transformers/preparing-transformers/ObfuscatingGuardsTransformer.ts index e3d117f9..d0c6574e 100644 --- a/src/node-transformers/preparing-transformers/NodeGuardTransformer.ts +++ b/src/node-transformers/preparing-transformers/ObfuscatingGuardsTransformer.ts @@ -3,47 +3,48 @@ import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; import * as ESTree from 'estree'; +import { TObfuscatingGuardFactory } from '../../types/container/node-transformers/TObfuscatingGuardFactory'; + +import { IObfuscatingGuard } from '../../interfaces/node-transformers/preparing-transformers/obfuscating-guards/IObfuscatingGuard'; import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; import { IVisitor } from '../../interfaces/node-transformers/IVisitor'; -import { NodeGuard } from '../../enums/container/node-guards/NodeGuard'; +import { ObfuscatingGuard } from '../../enums/node-transformers/preparing-transformers/obfuscating-guards/ObfuscatingGuard'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; -import { TNodeGuardFactory } from '../../types/container/node-guards/TNodeGuardFactory'; -import { INodeGuard } from '../../interfaces/node-guards/INodeGuard'; /** - * Adds `parentNode` properties to each node + * Adds `ignoredNode` properties to each node */ @injectable() -export class NodeGuardTransformer extends AbstractNodeTransformer { +export class ObfuscatingGuardsTransformer extends AbstractNodeTransformer { /** - * @type {NodeGuard[]} + * @type {ObfuscatingGuard[]} */ - private static readonly nodeGuardsList: NodeGuard[] = [ - NodeGuard.BlackListNodeGuard, - NodeGuard.ConditionalCommentNodeGuard + private static readonly obfuscatingGuardsList: ObfuscatingGuard[] = [ + ObfuscatingGuard.BlackListNodeGuard, + ObfuscatingGuard.ConditionalCommentNodeGuard ]; /** - * @type {INodeGuard[]} + * @type {IObfuscatingGuard[]} */ - private readonly nodeGuards: INodeGuard[]; + private readonly obfuscatingGuards: IObfuscatingGuard[]; /** - * @param {TNodeGuardFactory} nodeGuardFactory + * @param {TObfuscatingGuardFactory} obfuscatingGuardFactory * @param {IRandomGenerator} randomGenerator * @param {IOptions} options */ constructor ( - @inject(ServiceIdentifiers.Factory__INodeGuard) nodeGuardFactory: TNodeGuardFactory, + @inject(ServiceIdentifiers.Factory__INodeGuard) obfuscatingGuardFactory: TObfuscatingGuardFactory, @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { super(randomGenerator, options); - this.nodeGuards = NodeGuardTransformer.nodeGuardsList.map(nodeGuardFactory); + this.obfuscatingGuards = ObfuscatingGuardsTransformer.obfuscatingGuardsList.map(obfuscatingGuardFactory); } /** @@ -63,7 +64,7 @@ export class NodeGuardTransformer extends AbstractNodeTransformer { * @returns {Node} */ public transformNode (node: ESTree.Node, parentNode: ESTree.Node): ESTree.Node { - const obfuscationAllowed: boolean = this.nodeGuards.every((nodeGuard: INodeGuard) => nodeGuard.check(node)); + const obfuscationAllowed: boolean = this.obfuscatingGuards.every((nodeGuard: IObfuscatingGuard) => nodeGuard.check(node)); node.ignoredNode = !obfuscationAllowed; diff --git a/src/node-transformers/preparing-transformers/ParentizeTransformer.ts b/src/node-transformers/preparing-transformers/ParentificationTransformer.ts similarity index 94% rename from src/node-transformers/preparing-transformers/ParentizeTransformer.ts rename to src/node-transformers/preparing-transformers/ParentificationTransformer.ts index a0813c87..1898e566 100644 --- a/src/node-transformers/preparing-transformers/ParentizeTransformer.ts +++ b/src/node-transformers/preparing-transformers/ParentificationTransformer.ts @@ -13,7 +13,7 @@ import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; * Adds `parentNode` properties to each node */ @injectable() -export class ParentizeTransformer extends AbstractNodeTransformer { +export class ParentificationTransformer extends AbstractNodeTransformer { /** * @param {IRandomGenerator} randomGenerator * @param {IOptions} options diff --git a/src/node-guards/BlackListNodeGuard.ts b/src/node-transformers/preparing-transformers/obfuscating-guards/BlackListObfuscatingGuard.ts similarity index 53% rename from src/node-guards/BlackListNodeGuard.ts rename to src/node-transformers/preparing-transformers/obfuscating-guards/BlackListObfuscatingGuard.ts index b7e30b2f..cdf2e85a 100644 --- a/src/node-guards/BlackListNodeGuard.ts +++ b/src/node-transformers/preparing-transformers/obfuscating-guards/BlackListObfuscatingGuard.ts @@ -2,19 +2,19 @@ import { injectable } from 'inversify'; import * as ESTree from 'estree'; -import { TNodeGuard } from '../types/node/TNodeGuard'; +import { TNodeGuard } from '../../../types/node/TNodeGuard'; -import { INodeGuard } from '../interfaces/node-guards/INodeGuard'; +import { IObfuscatingGuard } from '../../../interfaces/node-transformers/preparing-transformers/obfuscating-guards/IObfuscatingGuard'; -import { Node } from '../node/Node'; +import { NodeGuards } from '../../../node/NodeGuards'; @injectable() -export class BlackListNodeGuard implements INodeGuard { +export class BlackListObfuscatingGuard implements IObfuscatingGuard { /** * @type {((node: Node) => boolean)[]} */ private static readonly blackListGuards: TNodeGuard[] = [ - Node.isUseStrictOperator + NodeGuards.isUseStrictOperator ]; /** @@ -23,7 +23,7 @@ export class BlackListNodeGuard implements INodeGuard { private readonly blackListGuardsLength: number; constructor () { - this.blackListGuardsLength = BlackListNodeGuard.blackListGuards.length; + this.blackListGuardsLength = BlackListObfuscatingGuard.blackListGuards.length; } /** @@ -32,7 +32,7 @@ export class BlackListNodeGuard implements INodeGuard { */ public check (node: ESTree.Node): boolean { for (let i: number = 0; i < this.blackListGuardsLength; i++) { - if (BlackListNodeGuard.blackListGuards[i](node)) { + if (BlackListObfuscatingGuard.blackListGuards[i](node)) { return false; } } diff --git a/src/node-guards/ConditionalCommentNodeGuard.ts b/src/node-transformers/preparing-transformers/obfuscating-guards/ConditionalCommentObfuscatingGuard.ts similarity index 83% rename from src/node-guards/ConditionalCommentNodeGuard.ts rename to src/node-transformers/preparing-transformers/obfuscating-guards/ConditionalCommentObfuscatingGuard.ts index 93870140..c00f4cd8 100644 --- a/src/node-guards/ConditionalCommentNodeGuard.ts +++ b/src/node-transformers/preparing-transformers/obfuscating-guards/ConditionalCommentObfuscatingGuard.ts @@ -2,10 +2,10 @@ import { injectable } from 'inversify'; import * as ESTree from 'estree'; -import { INodeGuard } from '../interfaces/node-guards/INodeGuard'; +import { IObfuscatingGuard } from '../../../interfaces/node-transformers/preparing-transformers/obfuscating-guards/IObfuscatingGuard'; @injectable() -export class ConditionalCommentNodeGuard implements INodeGuard { +export class ConditionalCommentObfuscatingGuard implements IObfuscatingGuard { /** * @type {RegExp} */ @@ -66,13 +66,13 @@ export class ConditionalCommentNodeGuard implements INodeGuard { for (let i: number = 0; i < commentsLength; i++) { const comment: ESTree.Comment = comments[i]; - if (ConditionalCommentNodeGuard.obfuscationEnableCommentRegExp.test(comment.value)) { + if (ConditionalCommentObfuscatingGuard.obfuscationEnableCommentRegExp.test(comment.value)) { obfuscationAllowed = true; continue; } - if (ConditionalCommentNodeGuard.obfuscationDisableCommentRegExp.test(comment.value)) { + if (ConditionalCommentObfuscatingGuard.obfuscationDisableCommentRegExp.test(comment.value)) { obfuscationAllowed = false; } } diff --git a/src/node/Node.ts b/src/node/NodeGuards.ts similarity index 91% rename from src/node/Node.ts rename to src/node/NodeGuards.ts index e3f42464..3579c6e2 100644 --- a/src/node/Node.ts +++ b/src/node/NodeGuards.ts @@ -4,7 +4,7 @@ import { TNodeWithBlockStatement } from '../types/node/TNodeWithBlockStatement'; import { NodeType } from '../enums/node/NodeType'; -export class Node { +export class NodeGuards { /** * @param {Node} node * @returns {boolean} @@ -115,9 +115,9 @@ export class Node { * @returns {boolean} */ public static isLabelIdentifierNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.Identifier { - const parentNodeIsLabeledStatementNode: boolean = Node.isLabeledStatementNode(parentNode) && parentNode.label === node; - const parentNodeIsContinueStatementNode: boolean = Node.isContinueStatementNode(parentNode) && parentNode.label === node; - const parentNodeIsBreakStatementNode: boolean = Node.isBreakStatementNode(parentNode) && parentNode.label === node; + const parentNodeIsLabeledStatementNode: boolean = NodeGuards.isLabeledStatementNode(parentNode) && parentNode.label === node; + const parentNodeIsContinueStatementNode: boolean = NodeGuards.isContinueStatementNode(parentNode) && parentNode.label === node; + const parentNodeIsBreakStatementNode: boolean = NodeGuards.isBreakStatementNode(parentNode) && parentNode.label === node; return parentNodeIsLabeledStatementNode || parentNodeIsContinueStatementNode || parentNodeIsBreakStatementNode; } @@ -208,18 +208,18 @@ export class Node { * @returns {boolean} */ public static isReplaceableIdentifierNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.Identifier { - if (!Node.isIdentifierNode(node)) { + if (!NodeGuards.isIdentifierNode(node)) { return false; } - const parentNodeIsPropertyNode: boolean = Node.isPropertyNode(parentNode) && parentNode.key === node; + const parentNodeIsPropertyNode: boolean = NodeGuards.isPropertyNode(parentNode) && parentNode.key === node; const parentNodeIsMemberExpressionNode: boolean = ( - Node.isMemberExpressionNode(parentNode) && + NodeGuards.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node ); - return !parentNodeIsPropertyNode && !parentNodeIsMemberExpressionNode && !Node.isLabelIdentifierNode(node, parentNode); + return !parentNodeIsPropertyNode && !parentNodeIsMemberExpressionNode && !NodeGuards.isLabelIdentifierNode(node, parentNode); } /** diff --git a/src/node/NodeUtils.ts b/src/node/NodeUtils.ts index b15a0d96..a67b2ba3 100644 --- a/src/node/NodeUtils.ts +++ b/src/node/NodeUtils.ts @@ -8,7 +8,7 @@ import { TStatement } from '../types/node/TStatement'; import { NodeType } from '../enums/node/NodeType'; -import { Node } from './Node'; +import { NodeGuards } from './NodeGuards'; export class NodeUtils { /** @@ -96,7 +96,7 @@ export class NodeUtils { } /** - * @param {Node[]} structure + * @param {NodeGuards[]} structure * @returns {string} */ public static convertStructureToCode (structure: ESTree.Node[]): string { @@ -112,12 +112,12 @@ export class NodeUtils { } /** - * @param {Node} node + * @param {NodeGuards} node * @param {number} index - * @returns {Node} + * @returns {NodeGuards} */ public static getBlockStatementNodeByIndex (node: ESTree.Node, index: number = 0): ESTree.Node { - if (Node.isNodeHasBlockStatement(node)) { + if (NodeGuards.isNodeHasBlockStatement(node)) { if (node.body[index] === undefined) { throw new ReferenceError(`Wrong index \`${index}\`. Block-statement body length is \`${node.body.length}\``); } @@ -129,7 +129,7 @@ export class NodeUtils { } /** - * @param {Node} node + * @param {NodeGuards} node * @param {TNodeWithBlockStatement[]} blockScopes * @returns {TNodeWithBlockStatement[]} */ @@ -140,7 +140,7 @@ export class NodeUtils { throw new ReferenceError('`parentNode` property of given node is `undefined`'); } - if (Node.isBlockStatementNode(parentNode)) { + if (NodeGuards.isBlockStatementNode(parentNode)) { if (!parentNode.parentNode) { throw new ReferenceError('`parentNode` property of `parentNode` of given node is `undefined`'); } @@ -154,7 +154,7 @@ export class NodeUtils { return NodeUtils.getBlockScopesOfNode(parentNode, blockScopes); } - if (Node.isNodeHasBlockStatement(parentNode)) { + if (NodeGuards.isNodeHasBlockStatement(parentNode)) { blockScopes.push(parentNode); } @@ -162,7 +162,7 @@ export class NodeUtils { } /** - * @param {Node} node + * @param {NodeGuards} node * @param {number} depth * @returns {number} */ @@ -173,11 +173,11 @@ export class NodeUtils { throw new ReferenceError('`parentNode` property of given node is `undefined`'); } - if (Node.isProgramNode(parentNode)) { + if (NodeGuards.isProgramNode(parentNode)) { return depth; } - if (Node.isBlockStatementNode(node) && NodeUtils.nodesWithBlockScope.includes(parentNode.type)) { + if (NodeGuards.isBlockStatementNode(node) && NodeUtils.nodesWithBlockScope.includes(parentNode.type)) { return NodeUtils.getNodeBlockScopeDepth(parentNode, ++depth); } @@ -186,10 +186,10 @@ export class NodeUtils { /** * @param {UnaryExpression} unaryExpressionNode - * @returns {Node} + * @returns {NodeGuards} */ public static getUnaryExpressionArgumentNode (unaryExpressionNode: ESTree.UnaryExpression): ESTree.Node { - if (Node.isUnaryExpressionNode(unaryExpressionNode.argument)) { + if (NodeGuards.isUnaryExpressionNode(unaryExpressionNode.argument)) { return NodeUtils.getUnaryExpressionArgumentNode(unaryExpressionNode.argument); } @@ -212,7 +212,7 @@ export class NodeUtils { } /** - * @param {Node} astTree + * @param {NodeGuards} astTree * @param {string} nodeType * @param {visitor} visitor */ @@ -225,7 +225,7 @@ export class NodeUtils { } /** - * @param {Node} astTree + * @param {NodeGuards} astTree * @param {string} nodeType * @param {Visitor} visitor * @param {string} traverseType diff --git a/src/storages/custom-node-group/CustomNodeGroupStorage.ts b/src/storages/custom-node-group/CustomNodeGroupStorage.ts index f2986bb3..7979b750 100644 --- a/src/storages/custom-node-group/CustomNodeGroupStorage.ts +++ b/src/storages/custom-node-group/CustomNodeGroupStorage.ts @@ -7,7 +7,7 @@ import { ICustomNodeGroup } from '../../interfaces/custom-nodes/ICustomNodeGroup import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; -import { CustomNodeGroup } from '../../enums/container/custom-nodes/CustomNodeGroup'; +import { CustomNodeGroup } from '../../enums/custom-nodes/CustomNodeGroup'; import { MapStorage } from '../MapStorage'; diff --git a/src/types/container/custom-nodes/TControlFlowCustomNodeFactory.d.ts b/src/types/container/custom-nodes/TControlFlowCustomNodeFactory.d.ts index c9c5f8d3..bf2618bf 100644 --- a/src/types/container/custom-nodes/TControlFlowCustomNodeFactory.d.ts +++ b/src/types/container/custom-nodes/TControlFlowCustomNodeFactory.d.ts @@ -1,5 +1,5 @@ import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; -import { ControlFlowCustomNode } from '../../../enums/container/custom-nodes/ControlFlowCustomNode'; +import { ControlFlowCustomNode } from '../../../enums/custom-nodes/ControlFlowCustomNode'; export type TControlFlowCustomNodeFactory = (controlFlowCustomNodeName: ControlFlowCustomNode) => ICustomNode; diff --git a/src/types/container/custom-nodes/TCustomNodeFactory.d.ts b/src/types/container/custom-nodes/TCustomNodeFactory.d.ts index 358810d1..25592714 100644 --- a/src/types/container/custom-nodes/TCustomNodeFactory.d.ts +++ b/src/types/container/custom-nodes/TCustomNodeFactory.d.ts @@ -1,5 +1,5 @@ import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode'; -import { CustomNode } from '../../../enums/container/custom-nodes/CustomNode'; +import { CustomNode } from '../../../enums/custom-nodes/CustomNode'; export type TCustomNodeFactory = (customNodeName: CustomNode) => ICustomNode; diff --git a/src/types/container/custom-nodes/TCustomNodeGroupFactory.d.ts b/src/types/container/custom-nodes/TCustomNodeGroupFactory.d.ts index f90fa1a3..a2170a61 100644 --- a/src/types/container/custom-nodes/TCustomNodeGroupFactory.d.ts +++ b/src/types/container/custom-nodes/TCustomNodeGroupFactory.d.ts @@ -1,5 +1,5 @@ import { ICustomNodeGroup } from '../../../interfaces/custom-nodes/ICustomNodeGroup'; -import { CustomNodeGroup } from '../../../enums/container/custom-nodes/CustomNodeGroup'; +import { CustomNodeGroup } from '../../../enums/custom-nodes/CustomNodeGroup'; export type TCustomNodeGroupFactory = (customNodeGroupName: CustomNodeGroup) => ICustomNodeGroup; diff --git a/src/types/container/node-guards/TNodeGuardFactory.d.ts b/src/types/container/node-guards/TNodeGuardFactory.d.ts deleted file mode 100644 index 75e52a73..00000000 --- a/src/types/container/node-guards/TNodeGuardFactory.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { INodeGuard } from '../../../interfaces/node-guards/INodeGuard'; - -import { NodeGuard } from '../../../enums/container/node-guards/NodeGuard'; - -export type TNodeGuardFactory = (nodeGuard: NodeGuard) => INodeGuard; diff --git a/src/types/container/node-transformers/TControlFlowReplacerFactory.d.ts b/src/types/container/node-transformers/TControlFlowReplacerFactory.d.ts index 61298a5b..f3dc45a3 100644 --- a/src/types/container/node-transformers/TControlFlowReplacerFactory.d.ts +++ b/src/types/container/node-transformers/TControlFlowReplacerFactory.d.ts @@ -1,5 +1,5 @@ import { IControlFlowReplacer } from '../../../interfaces/node-transformers/control-flow-transformers/IControlFlowReplacer'; -import { ControlFlowReplacer } from '../../../enums/container/node-transformers/ControlFlowReplacer'; +import { ControlFlowReplacer } from '../../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/ControlFlowReplacer'; export type TControlFlowReplacerFactory = (replacer: ControlFlowReplacer) => IControlFlowReplacer; diff --git a/src/types/container/node-transformers/TIdentifierObfuscatingReplacerFactory.d.ts b/src/types/container/node-transformers/TIdentifierObfuscatingReplacerFactory.d.ts index 7f5d4ff3..23206583 100644 --- a/src/types/container/node-transformers/TIdentifierObfuscatingReplacerFactory.d.ts +++ b/src/types/container/node-transformers/TIdentifierObfuscatingReplacerFactory.d.ts @@ -1,5 +1,5 @@ -import { IIdentifierObfuscatingReplacer } from '../../../interfaces/node-transformers/obfuscating-transformers/IIdentifierObfuscatingReplacer'; +import { IIdentifierObfuscatingReplacer } from '../../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IIdentifierObfuscatingReplacer'; -import { IdentifierObfuscatingReplacer } from '../../../enums/container/node-transformers/IdentifierObfuscatingReplacer'; +import { IdentifierObfuscatingReplacer } from '../../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/IdentifierObfuscatingReplacer'; export type TIdentifierObfuscatingReplacerFactory = (replacer: IdentifierObfuscatingReplacer) => IIdentifierObfuscatingReplacer; diff --git a/src/types/container/node-transformers/TLiteralObfuscatingReplacerFactory.d.ts b/src/types/container/node-transformers/TLiteralObfuscatingReplacerFactory.d.ts index f3608d76..c5b2cda1 100644 --- a/src/types/container/node-transformers/TLiteralObfuscatingReplacerFactory.d.ts +++ b/src/types/container/node-transformers/TLiteralObfuscatingReplacerFactory.d.ts @@ -1,5 +1,5 @@ -import { IObfuscatingReplacer } from '../../../interfaces/node-transformers/obfuscating-transformers/IObfuscatingReplacer'; +import { IObfuscatingReplacer } from '../../../interfaces/node-transformers/obfuscating-transformers/obfuscating-replacers/IObfuscatingReplacer'; -import { LiteralObfuscatingReplacer } from '../../../enums/container/node-transformers/LiteralObfuscatingReplacer'; +import { LiteralObfuscatingReplacer } from '../../../enums/node-transformers/obfuscating-transformers/obfuscating-replacers/LiteralObfuscatingReplacer'; export type TLiteralObfuscatingReplacerFactory = (replacer: LiteralObfuscatingReplacer) => IObfuscatingReplacer; diff --git a/src/types/container/node-transformers/TNodeTransformerFactory.d.ts b/src/types/container/node-transformers/TNodeTransformerFactory.d.ts index b3e099cc..1049865b 100644 --- a/src/types/container/node-transformers/TNodeTransformerFactory.d.ts +++ b/src/types/container/node-transformers/TNodeTransformerFactory.d.ts @@ -1,5 +1,5 @@ import { INodeTransformer } from '../../../interfaces/node-transformers/INodeTransformer'; -import { NodeTransformer } from '../../../enums/container/node-transformers/NodeTransformer'; +import { NodeTransformer } from '../../../enums/node-transformers/NodeTransformer'; export type TNodeTransformerFactory = (nodeTransformerName: NodeTransformer) => INodeTransformer; diff --git a/src/types/container/node-transformers/TObfuscatingGuardFactory.d.ts b/src/types/container/node-transformers/TObfuscatingGuardFactory.d.ts new file mode 100644 index 00000000..9fdc533b --- /dev/null +++ b/src/types/container/node-transformers/TObfuscatingGuardFactory.d.ts @@ -0,0 +1,5 @@ +import { IObfuscatingGuard } from '../../../interfaces/node-transformers/preparing-transformers/obfuscating-guards/IObfuscatingGuard'; + +import { ObfuscatingGuard } from '../../../enums/node-transformers/preparing-transformers/obfuscating-guards/ObfuscatingGuard'; + +export type TObfuscatingGuardFactory = (nodeGuard: ObfuscatingGuard) => IObfuscatingGuard; diff --git a/src/types/container/stack-trace-analyzer/TCalleeDataExtractorFactory.d.ts b/src/types/container/stack-trace-analyzer/TCalleeDataExtractorFactory.d.ts index 7fb84c57..8ae54bf3 100644 --- a/src/types/container/stack-trace-analyzer/TCalleeDataExtractorFactory.d.ts +++ b/src/types/container/stack-trace-analyzer/TCalleeDataExtractorFactory.d.ts @@ -1,5 +1,5 @@ import { ICalleeDataExtractor } from '../../../interfaces/analyzers/stack-trace-analyzer/ICalleeDataExtractor'; -import { CalleeDataExtractor } from '../../../enums/container/stack-trace-analyzer/CalleeDataExtractor'; +import { CalleeDataExtractor } from '../../../enums/analyzers/stack-trace-analyzer/CalleeDataExtractor'; export type TCalleeDataExtractorFactory = (calleeDataExtractorName: CalleeDataExtractor) => ICalleeDataExtractor; diff --git a/test/functional-tests/analyzers/stack-trace-analyzer/StackTraceAnalyzer.spec.ts b/test/functional-tests/analyzers/stack-trace-analyzer/StackTraceAnalyzer.spec.ts index 25f3ed65..714df8b3 100644 --- a/test/functional-tests/analyzers/stack-trace-analyzer/StackTraceAnalyzer.spec.ts +++ b/test/functional-tests/analyzers/stack-trace-analyzer/StackTraceAnalyzer.spec.ts @@ -16,7 +16,7 @@ import { IStackTraceData } from '../../../../src/interfaces/analyzers/stack-trac import { readFileAsString } from '../../../helpers/readFileAsString'; import { InversifyContainerFacade } from '../../../../src/container/InversifyContainerFacade'; -import { Node } from '../../../../src/node/Node'; +import { NodeGuards } from '../../../../src/node/NodeGuards'; import { Nodes } from '../../../../src/node/Nodes'; import { NodeUtils } from '../../../../src/node/NodeUtils'; @@ -31,8 +31,8 @@ function getFunctionDeclarationByName (astTree: ESTree.Node, name: string): ESTr estraverse.traverse(astTree, { enter: (node: ESTree.Node): any => { if ( - Node.isFunctionDeclarationNode(node) && - Node.isIdentifierNode(node.id) && + NodeGuards.isFunctionDeclarationNode(node) && + NodeGuards.isIdentifierNode(node.id) && node.id.name === name ) { functionDeclarationNode = node; @@ -56,10 +56,10 @@ function getFunctionExpressionByName (astTree: ESTree.Node, name: string): ESTre estraverse.traverse(astTree, { enter: (node: ESTree.Node): any => { if ( - Node.isVariableDeclaratorNode(node) && + NodeGuards.isVariableDeclaratorNode(node) && node.init && - Node.isFunctionExpressionNode(node.init) && - Node.isIdentifierNode(node.id) && + NodeGuards.isFunctionExpressionNode(node.init) && + NodeGuards.isIdentifierNode(node.id) && node.id.name === name ) { functionExpressionNode = node.init; @@ -83,9 +83,9 @@ function getFunctionExpressionById (astTree: ESTree.Node, id: string): ESTree.Fu estraverse.traverse(astTree, { enter: (node: ESTree.Node): any => { if ( - Node.isFunctionExpressionNode(node) && + NodeGuards.isFunctionExpressionNode(node) && node.id && - Node.isIdentifierNode(node.id) && + NodeGuards.isIdentifierNode(node.id) && node.id.name === id ) { functionExpressionNode = node; @@ -111,10 +111,10 @@ function getObjectFunctionExpressionByName (astTree: ESTree.Node, objectName: st estraverse.traverse(astTree, { enter: (node: ESTree.Node): any => { if ( - Node.isVariableDeclaratorNode(node) && - Node.isIdentifierNode(node.id) && + NodeGuards.isVariableDeclaratorNode(node) && + NodeGuards.isIdentifierNode(node.id) && node.init && - Node.isObjectExpressionNode(node.init) && + NodeGuards.isObjectExpressionNode(node.init) && node.id.name === objectName ) { targetObjectExpressionNode = node.init; @@ -131,11 +131,11 @@ function getObjectFunctionExpressionByName (astTree: ESTree.Node, objectName: st estraverse.traverse(targetObjectExpressionNode, { enter: (node: ESTree.Node): any => { if ( - Node.isPropertyNode(node) && - Node.isFunctionExpressionNode(node.value) && + NodeGuards.isPropertyNode(node) && + NodeGuards.isFunctionExpressionNode(node.value) && ( - (Node.isIdentifierNode(node.key) && node.key.name === name) || - (Node.isLiteralNode(node.key) && node.key.value === name) + (NodeGuards.isIdentifierNode(node.key) && node.key.name === name) || + (NodeGuards.isLiteralNode(node.key) && node.key.value === name) ) ) { functionExpressionNode = node.value; diff --git a/test/functional-tests/node-guards/black-list-node-guard/BlackListNodeGuard.spec.ts b/test/functional-tests/node-transformers/parentizing-transformers/obfuscating-guards/black-list-node-guard/BlackListObfuscatingGuard.spec.ts similarity index 79% rename from test/functional-tests/node-guards/black-list-node-guard/BlackListNodeGuard.spec.ts rename to test/functional-tests/node-transformers/parentizing-transformers/obfuscating-guards/black-list-node-guard/BlackListObfuscatingGuard.spec.ts index dbd713f0..e88e21de 100644 --- a/test/functional-tests/node-guards/black-list-node-guard/BlackListNodeGuard.spec.ts +++ b/test/functional-tests/node-transformers/parentizing-transformers/obfuscating-guards/black-list-node-guard/BlackListObfuscatingGuard.spec.ts @@ -1,14 +1,14 @@ import { assert } from 'chai'; -import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult'; +import { IObfuscationResult } from '../../../../../../src/interfaces/IObfuscationResult'; -import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscatorFacade'; +import { JavaScriptObfuscator } from '../../../../../../src/JavaScriptObfuscatorFacade'; -import { NO_CUSTOM_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes'; +import { NO_CUSTOM_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; -import { readFileAsString } from '../../../helpers/readFileAsString'; +import { readFileAsString } from '../../../../../helpers/readFileAsString'; -describe('BlackListNodeGuard', () => { +describe('BlackListObfuscatingGuard', () => { describe('check (node: ESTree.Node): boolean', () => { describe('`\'use strict\';` operator', () => { const useStrictOperatorRegExp: RegExp = /'use *strict';/; diff --git a/test/functional-tests/node-guards/black-list-node-guard/fixtures/use-strict-operator.js b/test/functional-tests/node-transformers/parentizing-transformers/obfuscating-guards/black-list-node-guard/fixtures/use-strict-operator.js similarity index 100% rename from test/functional-tests/node-guards/black-list-node-guard/fixtures/use-strict-operator.js rename to test/functional-tests/node-transformers/parentizing-transformers/obfuscating-guards/black-list-node-guard/fixtures/use-strict-operator.js diff --git a/test/index.spec.ts b/test/index.spec.ts index 072bdd38..4a0a5121 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -39,7 +39,6 @@ import './functional-tests/custom-nodes/string-array-nodes/StringArrayCallsWrapp import './functional-tests/custom-nodes/string-array-nodes/StringArrayRotateFunctionNode.spec'; import './functional-tests/custom-nodes/string-array-nodes/StringArrayNode.spec'; import './functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec'; -import './functional-tests/node-guards/black-list-node-guard/BlackListNodeGuard.spec'; import './functional-tests/node-transformers/control-flow-transformers/block-statement-control-flow-transformer/BlockStatementControlFlowTransformer.spec'; import './functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec'; import './functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec'; @@ -58,6 +57,7 @@ import './functional-tests/node-transformers/obfuscating-transformers/labeled-st import './functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec'; import './functional-tests/node-transformers/obfuscating-transformers/object-expression-transformer/ObjectExpressionTransformer.spec'; import './functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec'; +import './functional-tests/node-transformers/parentizing-transformers/obfuscating-guards/black-list-node-guard/BlackListObfuscatingGuard.spec'; import './functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNodeTemplate.spec'; import './functional-tests/templates/custom-nodes/string-array-nodes/StringArrayCallsWrapperNodeTemplate.spec';