# All files / src/node-obfuscators FunctionObfuscator.js

100% Statements 18/18
100% Branches 1/1
100% Functions 5/5
100% Lines 17/17

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    1x
    1x

    64x

    16x

    16x
    16x

    16x
    16x

    4x
    4x

    16x
    16x

    975x

    16x

    4x

    16x

    1x
     "use strict";
    const estraverse = require('estraverse');
    const NodeObfuscator_1 = require('./NodeObfuscator');
    class FunctionObfuscator extends NodeObfuscator_1.NodeObfuscator {
        constructor(...args) {
            super(...args);
            this.functionParams = new Map();
        }
        obfuscateNode(functionNode) {
            this.storeFunctionParams(functionNode);
            this.replaceFunctionParams(functionNode);
        }
        storeFunctionParams(functionNode) {
            functionNode.params
                .forEach((paramsNode) => {
                estraverse.traverse(paramsNode, {
                    leave: (node) => this.storeIdentifiersNames(node, this.functionParams)
                });
            });
        }
        replaceFunctionParams(functionNode) {
            let replaceVisitor = {
                leave: (node, parentNode) => {
                    this.replaceIdentifiersWithRandomNames(node, parentNode, this.functionParams);
                }
            };
            functionNode.params
                .forEach((paramsNode) => {
                estraverse.replace(paramsNode, replaceVisitor);
            });
            estraverse.replace(functionNode.body, replaceVisitor);
        }
    }
    exports.FunctionObfuscator = FunctionObfuscator;
    //# sourceMappingURL=FunctionObfuscator.js.map