diff --git a/index.js b/index.js index a3fa20a1..70e89d02 100644 --- a/index.js +++ b/index.js @@ -2,14 +2,14 @@ const Obfuscator_1 = require('./src/Obfuscator'); let escodegen = require('escodegen'), esprima = require('esprima'); class JavaScriptObfuscator { - static obfuscate(sourceCode, options) { + static obfuscate(sourceCode, options = {}) { let astTree = esprima.parse(sourceCode), obfuscator = new Obfuscator_1.Obfuscator(options); obfuscator.obfuscateNode(astTree); return JavaScriptObfuscator.generateCode(astTree, options); } - static generateCode(astTree, options) { + static generateCode(astTree, options = {}) { let escodegenParams = Object.assign({}, JavaScriptObfuscator.escodegenParams); - if (options.compact !== undefined) { + if (options.hasOwnProperty('compact')) { escodegenParams.format.compact = options.compact; } return escodegen.generate(astTree, escodegenParams); diff --git a/index.ts b/index.ts index dc32fc67..dc27da38 100644 --- a/index.ts +++ b/index.ts @@ -22,7 +22,7 @@ export class JavaScriptObfuscator { * @param sourceCode * @param options */ - public static obfuscate (sourceCode: string, options: any): string { + public static obfuscate (sourceCode: string, options: any = {}): string { let astTree: any = esprima.parse(sourceCode), obfuscator: Obfuscator = new Obfuscator(options); @@ -35,10 +35,10 @@ export class JavaScriptObfuscator { * @param astTree * @param options */ - private static generateCode (astTree: any, options: any): string { + private static generateCode (astTree: any, options: any = {}): string { let escodegenParams: any = Object.assign({}, JavaScriptObfuscator.escodegenParams); - if (options.compact !== undefined) { + if (options.hasOwnProperty('compact')) { escodegenParams.format.compact = options.compact; } diff --git a/src/NodeUtils.js b/src/NodeUtils.js index 5e66f4bf..706bd96f 100644 --- a/src/NodeUtils.js +++ b/src/NodeUtils.js @@ -1,4 +1,5 @@ "use strict"; +let estraverse = require('estraverse'); class NodeUtils { static getNodeScope(node, deep = 0) { let scopeNodes = [ @@ -16,6 +17,19 @@ class NodeUtils { if (deep > 0) { return NodeUtils.getNodeScope(node.parentNode, --deep); } + if (node.type !== 'BlockStatement') { + let blockStatementNode; + estraverse.traverse(node, { + enter: function (node, parent) { + switch (node.type) { + case 'BlockStatement': + blockStatementNode = node; + this['break'](); + } + } + }); + return blockStatementNode; + } return node; } static getParentNodeWithType(node, types, limitNodeTypes = [], deep = 0) { diff --git a/src/NodeUtils.ts b/src/NodeUtils.ts index c517df7a..b50023fb 100644 --- a/src/NodeUtils.ts +++ b/src/NodeUtils.ts @@ -1,3 +1,5 @@ +let estraverse = require('estraverse'); + export class NodeUtils { /** * @param node @@ -23,6 +25,23 @@ export class NodeUtils { return NodeUtils.getNodeScope(node.parentNode, --deep); } + if (node.type !== 'BlockStatement') { + let blockStatementNode: any; + + estraverse.traverse(node, { + enter: function (node, parent) { + switch (node.type) { + case 'BlockStatement': + blockStatementNode = node; + + this['break'](); + } + } + }); + + return blockStatementNode; + } + return node; // BlockStatement of scopeNodes }