import * as ESTree from 'estree'; import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement'; import { AppendState } from '../../enums/AppendState'; import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset'; import { SelfDefendingTemplate } from '../../templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate'; import { AbstractCustomNode } from '../AbstractCustomNode'; import { JavaScriptObfuscator } from '../../JavaScriptObfuscator'; import { NodeUtils } from '../../NodeUtils'; import { HiddenNodeAppender } from '../../hidden-node-appender/HiddenNodeAppender'; export class SelfDefendingUnicodeNode extends AbstractCustomNode { /** * @type {AppendState} */ protected appendState: AppendState = AppendState.AfterObfuscation; /** * @param blockScopeNode */ public appendNode (blockScopeNode: TNodeWithBlockStatement): void { HiddenNodeAppender.appendNode( blockScopeNode.body, this.getNode(), HiddenNodeAppender.getIndexByThreshold(blockScopeNode.body.length) ); } /** * @returns {ESTree.Node} */ protected getNodeStructure (): ESTree.Node { return NodeUtils.convertCodeToStructure( JavaScriptObfuscator.obfuscate( SelfDefendingTemplate(), NO_CUSTOM_NODES_PRESET ).getObfuscatedCode() ); } }