Code coverage report for src/custom-nodes/string-array-nodes/StringArrayNode.ts

# 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()
                })
            );
        }
    }