All files / webpack:/src/custom-nodes/unicode-array-nodes UnicodeArrayCallsWrapper.ts

90% Statements 9/10
50% Branches 1/2
100% Functions 1/1
88.89% Lines 8/9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 1051x                 1x   1x                                                         1x               1x                   13x                                 2x   2x                                                      
import * as esprima from 'esprima';
 
import { INode } from "../../interfaces/nodes/INode";
import { IOptions } from "../../interfaces/IOptions";
 
import { TNodeWithBlockStatement } from "../../types/TNodeWithBlockStatement";
 
import { AppendState } from "../../enums/AppendState";
 
import { Node } from '../Node';
import { NodeUtils } from "../../NodeUtils";
import { Utils } from "../../Utils";
 
export class UnicodeArrayCallsWrapper extends Node {
    /**
     * @type {AppendState}
     */
    protected appendState: AppendState = AppendState.AfterObfuscation;
 
    /**
     * @type {string[]}
     */
    private unicodeArray: string[];
 
    /**
     * @type {string}
     */
    private unicodeArrayName: string;
 
    /**
     * @type {string}
     */
    private unicodeArrayCallsWrapperName: string;
 
    /**
     * @param unicodeArrayCallsWrapperName
     * @param unicodeArrayName
     * @param unicodeArray
     * @param options
     */
    constructor (
        unicodeArrayCallsWrapperName: string,
        unicodeArrayName: string,
        unicodeArray: string[],
        options: IOptions
    ) {
        super(options);
 
        this.unicodeArrayCallsWrapperName = unicodeArrayCallsWrapperName;
        this.unicodeArrayName = unicodeArrayName;
        this.unicodeArray = unicodeArray;
 
        this.node = this.getNodeStructure();
    }
 
    /**
     * @param blockScopeNode
     */
    public appendNode (blockScopeNode: TNodeWithBlockStatement): void {
        INodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), 1);
    }
 
    /**
     * @returns {string}
     */
    public getNodeIdentifier (): string {
        return this.unicodeArrayCallsWrapperName;
    };
 
    /**
     * @returns {INode}
     */
    public getNode (): INode {
        if (!this.unicodeArray.length) {
            return;
        }
 
        this.updateNode();
 
        return super.getNode();
    }
 
    /**
     * @returns {INode}
     */
    protected getNodeStructure (): INode {
        let keyName: string = Utils.getRandomVariableName(),
            node: INode;
 
        node = esprima.parse(`
            var ${this.unicodeArrayCallsWrapperName} = function (${keyName}) {
                return ${this.unicodeArrayName}[parseInt(${keyName}, 0x010)];
            };
        `);
 
        NodeUtils.addXVerbatimPropertyToLiterals(node);
 
        return NodeUtils.getBlockStatementNodeByIndex(node);
    }
}
 
 
 
// WEBPACK FOOTER //
// ./src/custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper.ts