import { TObfuscationEvent } from '../../../types/event-emitters/TObfuscationEvent';
import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode';
import { IStackTraceData } from '../../../interfaces/stack-trace-analyzer/IStackTraceData';
import { ObfuscationEvents } from '../../../enums/ObfuscationEvents';
import { NodeCallsControllerFunctionNode } from '../../node-calls-controller-nodes/NodeCallsControllerFunctionNode';
import { SelfDefendingUnicodeNode } from '../SelfDefendingUnicodeNode';
import { AbstractCustomNodesFactory } from '../../AbstractCustomNodesFactory';
import { NodeAppender } from '../../../node/NodeAppender';
import { Utils } from '../../../Utils';
export class SelfDefendingCustomNodesFactory extends AbstractCustomNodesFactory {
/**
* @type {TObfuscationEvent}
*/
protected appendEvent: TObfuscationEvent = ObfuscationEvents.AfterObfuscation;
/**
* @param stackTraceData
* @returns {Map<string, ICustomNode>}
*/
public initializeCustomNodes (stackTraceData: IStackTraceData[]): Map <string, ICustomNode> | undefined {
if (!this.options.selfDefending) {
return;
}
const callsControllerFunctionName: string = Utils.getRandomVariableName();
const randomStackTraceIndex: number = NodeAppender.getRandomStackTraceIndex(stackTraceData.length);
return this.syncCustomNodesWithNodesFactory(new Map <string, ICustomNode> ([
[
'selfDefendingUnicodeNode',
new SelfDefendingUnicodeNode(
stackTraceData,
callsControllerFunctionName,
randomStackTraceIndex,
this.options
)
],
[
'SelfDefendingNodeCallsControllerFunctionNode',
new NodeCallsControllerFunctionNode(
stackTraceData,
callsControllerFunctionName,
randomStackTraceIndex,
this.options
)
]
]));
}
}
|