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         529x                                                   529x 529x       529x 529x 529x             529x 3x     526x                           32365x             526x   526x             5998x             526x                
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()
            })
        );
    }
}