sanex3339 9 years ago
parent
commit
dfa76badb5
4 changed files with 39 additions and 6 deletions
  1. 3 3
      index.js
  2. 3 3
      index.ts
  3. 14 0
      src/NodeUtils.js
  4. 19 0
      src/NodeUtils.ts

+ 3 - 3
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);

+ 3 - 3
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;
         }
 

+ 14 - 0
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) {

+ 19 - 0
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
     }