mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import * as estraverse from 'estraverse';
|
|
|
|
import { IMethodDefinitionNode } from "../interfaces/nodes/IMethodDefinitionNode";
|
|
import { ITreeNode } from "../interfaces/nodes/ITreeNode";
|
|
|
|
import { NodeObfuscator } from './NodeObfuscator';
|
|
import { NodeUtils } from "../NodeUtils";
|
|
|
|
/**
|
|
* replaces:
|
|
* function foo () { //... };
|
|
* foo();
|
|
*
|
|
* on:
|
|
* function _0x12d45f () { //... };
|
|
* _0x12d45f();
|
|
*/
|
|
export class MethodDefinitionObfuscator extends NodeObfuscator {
|
|
/**
|
|
* @type {string[]}
|
|
*/
|
|
private ignoredNames: string[] = ['constructor'];
|
|
|
|
/**
|
|
* @param methodDefinitionNode
|
|
* @param parentNode
|
|
*/
|
|
public obfuscateNode (methodDefinitionNode: IMethodDefinitionNode, parentNode: ITreeNode): void {
|
|
this.replaceMethodName(methodDefinitionNode);
|
|
}
|
|
|
|
/**
|
|
* @param methodDefinitionNode
|
|
*/
|
|
private replaceMethodName (methodDefinitionNode: IMethodDefinitionNode): void {
|
|
estraverse.replace(methodDefinitionNode.key, {
|
|
leave: (node: ITreeNode) => {
|
|
if (
|
|
NodeUtils.isIdentifierNode(node) &&
|
|
this.ignoredNames.indexOf(node.name) < 0 &&
|
|
methodDefinitionNode.computed === false
|
|
) {
|
|
methodDefinitionNode.computed = true;
|
|
node.name = this.replaceLiteralStringByArrayElement(node.name);
|
|
}
|
|
|
|
return estraverse.VisitorOption.Skip;
|
|
}
|
|
});
|
|
}
|
|
} |