"use strict";
const estraverse = require('estraverse');
const NodeType_1 = require("../enums/NodeType");
const NodeObfuscator_1 = require('./NodeObfuscator');
const NodeUtils_1 = require("../NodeUtils");
class FunctionDeclarationObfuscator extends NodeObfuscator_1.NodeObfuscator {
constructor(...args) {
super(...args);
this.functionName = new Map();
}
obfuscateNode(functionDeclarationNode, parentNode) {
if (parentNode.type === NodeType_1.NodeType.Program) I{
return;
}
this.storeFunctionName(functionDeclarationNode);
this.replaceFunctionName(functionDeclarationNode);
}
storeFunctionName(functionDeclarationNode) {
estraverse.traverse(functionDeclarationNode.id, {
leave: (node) => this.storeIdentifiersNames(node, this.functionName)
});
}
replaceFunctionName(functionDeclarationNode) {
let scopeNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(functionDeclarationNode);
estraverse.replace(scopeNode, {
enter: (node, parentNode) => {
this.replaceIdentifiersWithRandomNames(node, parentNode, this.functionName);
}
});
}
}
exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator;
//# sourceMappingURL=FunctionDeclarationObfuscator.js.map |