All files OptionsNormalizer.ts

100% Statements 17/17
100% Branches 4/4
100% Functions 4/4
100% Lines 17/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 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    1x       1x                     1x                   6x   6x 6x 6x   6x               6x 2x     6x               6x 3x     6x               6x     6x               6x      
import { IObfuscatorOptions } from "./interfaces/IObfuscatorOptions";
 
export class OptionsNormalizer {
    /**
     * @type {IObfuscatorOptions}
     */
    private static DISABLED_UNICODE_ARRAY_OPTIONS: IObfuscatorOptions = {
        encodeUnicodeLiterals: false,
        rotateUnicodeArray: false,
        unicodeArray: false,
        unicodeArrayThreshold: 0,
        wrapUnicodeArrayCalls: false
    };
 
    /**
     * @type {IObfuscatorOptions}
     */
    private static SELF_DEFENDING_OPTIONS: IObfuscatorOptions = {
        compact: true,
        selfDefending: true
    };
 
    /**
     * @param options
     * @returns {IObfuscatorOptions}
     */
    public static normalizeOptionsPreset (options: IObfuscatorOptions): IObfuscatorOptions {
        let normalizedOptions: IObfuscatorOptions = Object.assign({}, options);
 
        normalizedOptions = OptionsNormalizer.unicodeArrayRule(normalizedOptions);
        normalizedOptions = OptionsNormalizer.unicodeArrayThresholdRule(normalizedOptions);
        normalizedOptions = OptionsNormalizer.selfDefendingRule(normalizedOptions);
 
        return normalizedOptions;
    }
 
    /**
     * @param options
     * @returns {IObfuscatorOptions}
     */
    private static selfDefendingRule (options: IObfuscatorOptions): IObfuscatorOptions {
        if (options['selfDefending']) {
            Object.assign(options, OptionsNormalizer.SELF_DEFENDING_OPTIONS);
        }
 
        return options;
    }
 
    /**
     * @param options
     * @returns {IObfuscatorOptions}
     */
    private static unicodeArrayRule (options: IObfuscatorOptions): IObfuscatorOptions {
        if (!options['unicodeArray']) {
            Object.assign(options, OptionsNormalizer.DISABLED_UNICODE_ARRAY_OPTIONS);
        }
 
        return options;
    }
 
    /**
     * @param options
     * @returns {IObfuscatorOptions}
     */
    private static unicodeArrayThresholdRule (options: IObfuscatorOptions): IObfuscatorOptions {
        const minValue: number = 0,
            maxValue: number = 1;
 
        options['unicodeArrayThreshold'] = Math.min(
            Math.max(
                options['unicodeArrayThreshold'],
                minValue
            ),
            maxValue
        );
 
        return options;
    }
}