All files / src/node-obfuscators LiteralObfuscator.ts

94.12% Statements 16/17
80% Branches 8/10
100% Functions 0/0
94.12% Lines 16/17
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 521x         1x 1x   1x           209x       209x 38x     171x       24x   24x     76x   76x       69x   69x     2x     169x            
import * as escodegen from 'escodegen';
 
import { ILiteralNode } from "../interfaces/nodes/ILiteralNode";
 
import { INode } from "../interfaces/nodes/INode";
import { NodeObfuscator } from './NodeObfuscator';
import { Nodes } from "../Nodes";
 
export class LiteralObfuscator extends NodeObfuscator {
    /**
     * @param literalNode
     * @param parentNode
     */
    public obfuscateNode (literalNode: ILiteralNode, parentNode: INode): void {
        Iif (Nodes.isPropertyNode(parentNode) && parentNode.key === literalNode) {
            return;
        }
 
        if (literalNode['x-verbatim-property']) {
            return;
        }
 
        let content: string;
 
        switch (typeof literalNode.value) {
            case 'boolean':
                content = this.replaceLiteralBooleanWithJSFuck(<boolean>literalNode.value);
 
                break;
 
            case 'number':
                content = this.replaceLiteralNumberWithHexadecimalValue(<number>literalNode.value);
 
                break;
 
 
            case 'string':
                content = this.replaceLiteralValueWithUnicodeValue(<string>literalNode.value);
 
                break;
 
            default:
                return;
        }
 
        literalNode['x-verbatim-property'] = {
            content : content,
            precedence: escodegen.Precedence.Primary
        };
    }
}