import * as format from 'string-template';
import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement';
import { TObfuscationEvent } from '../../types/event-emitters/TObfuscationEvent';
import { IOptions } from '../../interfaces/options/IOptions';
import { IStackTraceData } from '../../interfaces/stack-trace-analyzer/IStackTraceData';
import { ObfuscationEvents } from '../../enums/ObfuscationEvents';
import { ConsoleOutputDisableExpressionTemplate } from '../../templates/custom-nodes/console-output-nodes/console-output-disable-expression-node/ConsoleOutputDisableExpressionTemplate';
import { AbstractCustomNode } from '../AbstractCustomNode';
import { NodeAppender } from '../../node/NodeAppender';
import { Utils } from '../../Utils';
export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode {
/**
* @type {TObfuscationEvent}
*/
protected readonly appendEvent: TObfuscationEvent = ObfuscationEvents.BeforeObfuscation;
/**
* @type {string}
*/
protected callsControllerFunctionName: string;
/**
* @type {number}
*/
protected randomStackTraceIndex: number;
/**
* @type {IStackTraceData[]}
*/
protected stackTraceData: IStackTraceData[];
/**
* @param stackTraceData
* @param callsControllerFunctionName
* @param randomStackTraceIndex
* @param options
*/
constructor (
stackTraceData: IStackTraceData[],
callsControllerFunctionName: string,
randomStackTraceIndex: number,
options: IOptions
) {
super(options);
this.stackTraceData = stackTraceData;
this.callsControllerFunctionName = callsControllerFunctionName;
this.randomStackTraceIndex = randomStackTraceIndex;
}
/**
* @param blockScopeNode
*/
public appendNode (blockScopeNode: TNodeWithBlockStatement): void {
NodeAppender.appendNodeToOptimalBlockScope(
this.stackTraceData,
blockScopeNode,
this.getNode(),
this.randomStackTraceIndex
);
}
/**
* @returns {string}
*/
public getCode (): string {
return format(ConsoleOutputDisableExpressionTemplate(), {
consoleLogDisableFunctionName: Utils.getRandomVariableName(),
singleNodeCallControllerFunctionName: this.callsControllerFunctionName
});
}
}
|