瀏覽代碼

Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/297

sanex3339 6 年之前
父節點
當前提交
836f665cab
共有 5 個文件被更改,包括 30 次插入14200 次删除
  1. 0 0
      dist/index.browser.js
  2. 0 1201
      dist/index.cli.js
  3. 0 12991
      dist/index.js
  4. 29 7
      src/node-transformers/obfuscating-transformers/FunctionTransformer.ts
  5. 1 1
      src/node/NodeGuards.ts

文件差異過大導致無法顯示
+ 0 - 0
dist/index.browser.js


文件差異過大導致無法顯示
+ 0 - 1201
dist/index.cli.js


文件差異過大導致無法顯示
+ 0 - 12991
dist/index.js


+ 29 - 7
src/node-transformers/obfuscating-transformers/FunctionTransformer.ts

@@ -53,6 +53,16 @@ export class FunctionTransformer extends AbstractNodeTransformer {
         );
     }
 
+    /**
+     * @param {Node} node
+     * @returns {boolean}
+     */
+    private static isProhibitedPropertyNode(node: ESTree.Node): node is ESTree.Property & {key: ESTree.Identifier} {
+        return NodeGuards.isPropertyNode(node)
+            && node.shorthand
+            && NodeGuards.isIdentifierNode(node.key);
+    }
+
     /**
      * @param {TransformationStage} transformationStage
      * @returns {IVisitor | null}
@@ -98,11 +108,7 @@ export class FunctionTransformer extends AbstractNodeTransformer {
             .forEach((paramsNode: ESTree.Node) => {
                 estraverse.traverse(paramsNode, {
                     enter: (node: ESTree.Node): estraverse.VisitorOption | void => {
-                        if (
-                            NodeGuards.isPropertyNode(node)
-                            && node.shorthand
-                            && NodeGuards.isIdentifierNode(node.key)
-                        ) {
+                        if (FunctionTransformer.isProhibitedPropertyNode(node)) {
                             return estraverse.VisitorOption.Skip;
                         }
 
@@ -125,9 +131,25 @@ export class FunctionTransformer extends AbstractNodeTransformer {
      * @param {TNodeWithBlockScope} blockScopeNode
      */
     private replaceFunctionParams (functionNode: ESTree.Function, blockScopeNode: TNodeWithBlockScope): void {
+        const ignoredIdentifiersSet: Set <string> = new Set();
+
         const replaceVisitor: estraverse.Visitor = {
-            enter: (node: ESTree.Node, parentNode: ESTree.Node | null): void => {
-                if (parentNode && NodeGuards.isReplaceableIdentifierNode(node, parentNode)) {
+            enter: (node: ESTree.Node, parentNode: ESTree.Node | null): void | estraverse.VisitorOption => {
+                if (NodeGuards.isFunctionNode(node)) {
+                    this.replaceFunctionParams(node, blockScopeNode);
+
+                    return estraverse.VisitorOption.Skip;
+                }
+
+                if (FunctionTransformer.isProhibitedPropertyNode(node)) {
+                    ignoredIdentifiersSet.add(node.key.name);
+                }
+
+                if (
+                    parentNode
+                    && NodeGuards.isReplaceableIdentifierNode(node, parentNode)
+                    && !ignoredIdentifiersSet.has(node.name)
+                ) {
                     const newIdentifier: ESTree.Identifier = this.identifierObfuscatingReplacer
                         .replace(node.name, blockScopeNode);
                     const newIdentifierName: string = newIdentifier.name;

+ 1 - 1
src/node/NodeGuards.ts

@@ -124,7 +124,7 @@ export class NodeGuards {
      * @param {Node} node
      * @returns {boolean}
      */
-    public static isFunctionNode(node: ESTree.Node): node is ESTree.Function {
+    public static isFunctionNode (node: ESTree.Node): node is ESTree.Function {
         return NodeGuards.isFunctionDeclarationNode(node) ||
             NodeGuards.isFunctionExpressionNode(node) ||
             NodeGuards.isArrowFunctionExpressionNode(node);

部分文件因文件數量過多而無法顯示