All files / src/custom-nodes/string-array-nodes StringArrayNode.ts

95.65% Statements 22/23
75% Branches 6/8
100% Functions 1/1
95.65% Lines 22/23
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 105 106 107 108 109 110 111 112 113 114 115 1161x             1x       1x   1x 1x 1x   1x       1x         523x                                                   523x 523x       523x 523x 523x             523x 3x     520x                           33680x             520x   520x             7169x             520x                
import 'format-unicorn';
 
import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement';
import { TStatement } from '../../types/TStatement';
 
import { IOptions } from '../../interfaces/IOptions';
 
import { AppendState } from '../../enums/AppendState';
 
import { StringArray } from '../../StringArray';
 
import { StringArrayTemplate } from '../../templates/custom-nodes/string-array-nodes/string-array-node/StringArrayTemplate';
 
import { AbstractCustomNode } from '../AbstractCustomNode';
import { NodeAppender } from '../../node/NodeAppender';
import { NodeUtils } from '../../node/NodeUtils';
 
export class StringArrayNode extends AbstractCustomNode {
    /**
     * @type {number}
     */
    public static ARRAY_RANDOM_LENGTH: number = 4;
 
    /**
     * @type {AppendState}
     */
    protected appendState: AppendState = AppendState.AfterObfuscation;
 
    /**
     * @type {StringArray}
     */
    private stringArray: StringArray;
 
    /**
     * @type {string}
     */
    private stringArrayName: string;
 
    /**
     * @type {number}
     */
    private stringArrayRotateValue: number;
 
    /**
     * @param stringArray
     * @param stringArrayName
     * @param stringArrayRotateValue
     * @param options
     */
    constructor (
        stringArray: StringArray,
        stringArrayName: string,
        stringArrayRotateValue: number = 0,
        options: IOptions
    ) {
        super(options);
 
        this.stringArray = stringArray;
        this.stringArrayName = stringArrayName;
        this.stringArrayRotateValue = stringArrayRotateValue;
    }
 
    /**
     * @param blockScopeNode
     */
    public appendNode (blockScopeNode: TNodeWithBlockStatement): void {
        if (!this.stringArray.getLength()) {
            return;
        }
 
        NodeAppender.prependNode(blockScopeNode, this.getNode());
    }
 
    /**
     * @returns {string}
     */
    public getNodeIdentifier (): string {
        return this.stringArrayName;
    }
 
    /**
     * @returns {StringArray}
     */
    public getNodeData (): StringArray {
        return this.stringArray;
    }
 
    /**
     * @returns {TStatement[]}
     */
    public getNode (): TStatement[] {
        this.stringArray.rotateArray(this.stringArrayRotateValue);
 
        return super.getNode();
    }
 
    /**
     * @param data
     */
    public updateNodeData (data: string): void {
        this.stringArray.addToArray(data);
    }
 
    /**
     * @returns {TStatement[]}
     */
    protected getNodeStructure (): TStatement[] {
        return NodeUtils.convertCodeToStructure(
            StringArrayTemplate().formatUnicorn({
                stringArrayName: this.stringArrayName,
                stringArray: this.stringArray.toString()
            })
        );
    }
}