javascript-obfuscator
Version:
JavaScript obfuscator
72 lines (60 loc) • 2.97 kB
text/typescript
import { inject, injectable, } from 'inversify';
import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers';
import * as ESTree from 'estree';
import { TControlFlowCustomNodeFactory } from '../../../types/container/custom-nodes/TControlFlowCustomNodeFactory';
import { TControlFlowStorage } from '../../../types/storages/TControlFlowStorage';
import { TInitialData } from '../../../types/TInitialData';
import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode';
import { IOptions } from '../../../interfaces/options/IOptions';
import { IRandomGenerator } from '../../../interfaces/utils/IRandomGenerator';
import { ControlFlowCustomNode } from '../../../enums/custom-nodes/ControlFlowCustomNode';
import { BinaryExpressionFunctionNode } from '../../../custom-nodes/control-flow-flattening-nodes/BinaryExpressionFunctionNode';
import { ExpressionWithOperatorControlFlowReplacer } from './ExpressionWithOperatorControlFlowReplacer';
()
export class BinaryExpressionControlFlowReplacer extends ExpressionWithOperatorControlFlowReplacer {
/**
* @type {number}
*/
private static readonly usingExistingIdentifierChance: number = 0.5;
/**
* @param {TControlFlowCustomNodeFactory} controlFlowCustomNodeFactory
* @param {IRandomGenerator} randomGenerator
* @param {IOptions} options
*/
public constructor (
(ServiceIdentifiers.Factory__IControlFlowCustomNode)
controlFlowCustomNodeFactory: TControlFlowCustomNodeFactory,
(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator,
(ServiceIdentifiers.IOptions) options: IOptions
) {
super(controlFlowCustomNodeFactory, randomGenerator, options);
}
/**
* @param {BinaryExpression} binaryExpressionNode
* @param {Node} parentNode
* @param {TControlFlowStorage} controlFlowStorage
* @returns {Node}
*/
public replace (
binaryExpressionNode: ESTree.BinaryExpression,
parentNode: ESTree.Node,
controlFlowStorage: TControlFlowStorage
): ESTree.Node {
const operator: ESTree.BinaryOperator = binaryExpressionNode.operator;
const binaryExpressionFunctionCustomNode: ICustomNode<TInitialData<BinaryExpressionFunctionNode>> =
this.controlFlowCustomNodeFactory(ControlFlowCustomNode.BinaryExpressionFunctionNode);
binaryExpressionFunctionCustomNode.initialize(operator);
const storageKey: string = this.insertCustomNodeToControlFlowStorage(
binaryExpressionFunctionCustomNode,
controlFlowStorage,
operator,
BinaryExpressionControlFlowReplacer.usingExistingIdentifierChance
);
return this.getControlFlowStorageCallNode(
controlFlowStorage.getStorageId(),
storageKey,
binaryExpressionNode.left,
binaryExpressionNode.right
);
}
}