All files / src Options.ts

90% Statements 9/10
50% Branches 1/2
100% Functions 2/2
90% Lines 9/10
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 1131x             1x   1x   1x                                                                                                                                         21x                                     1x 21x 21x         21x            
import * as Joi from 'joi';
 
import { IObfuscatorOptions } from "./interfaces/IObfuscatorOptions";
import { IOptions } from "./interfaces/IOptions";
 
import { TSourceMapMode } from "./types/TSourceMapMode";
 
import { DEFAULT_PRESET } from "./preset-options/DefaultPreset";
 
import { OptionsNormalizer } from "./OptionsNormalizer";
 
export class Options implements IOptions {
    /**
     * @type {boolean}
     */
    public readonly compact: boolean;
 
    /**
     * @type {boolean}
     */
    public readonly debugProtection: boolean;
 
    /**
     * @type {boolean}
     */
    public readonly debugProtectionInterval: boolean;
 
    /**
     * @type {boolean}
     */
    public readonly disableConsoleOutput: boolean;
 
    /**
     * @type {boolean}
     */
    public readonly encodeUnicodeLiterals: boolean;
 
    /**
     * @type {string[]}
     */
    public readonly reservedNames: string[];
 
    /**
     * @type {boolean}
     */
    public readonly rotateUnicodeArray: boolean;
 
    /**
     * @type {boolean}
     */
    public readonly selfDefending: boolean;
 
    /**
     * @type {boolean}
     */
    public readonly sourceMap: boolean;
 
    /**
     * @type {TSourceMapMode}
     */
    public readonly sourceMapMode: TSourceMapMode;
 
    /**
     * @type {boolean}
     */
    public readonly unicodeArray: boolean;
 
    /**
     * @type {number}
     */
    public readonly unicodeArrayThreshold: number;
 
    /**
     * @type {boolean}
     */
    public readonly wrapUnicodeArrayCalls: boolean;
 
    /**
     * @type {Joi.ObjectSchema}
     */
    private schema: Joi.ObjectSchema = Joi.object({
        compact: Joi.boolean(),
        debugProtection: Joi.boolean(),
        debugProtectionInterval: Joi.boolean(),
        disableConsoleOutput: Joi.boolean(),
        encodeUnicodeLiterals: Joi.boolean(),
        reservedNames: Joi.array().items(Joi.string()),
        rotateUnicodeArray: Joi.boolean(),
        selfDefending: Joi.boolean(),
        sourceMap: Joi.boolean(),
        sourceMapMode: Joi.string().valid(['inline', 'separate']),
        unicodeArray: Joi.boolean(),
        unicodeArrayThreshold: Joi.number().min(0).max(1),
        wrapUnicodeArrayCalls: Joi.boolean()
    });
 
    /**
     * @param obfuscatorOptions
     */
    constructor (obfuscatorOptions: IObfuscatorOptions) {
        Joi.validate(obfuscatorOptions, this.schema, (error: Joi.ValidationError) => {
            Iif (error) {
                throw error;
            }
        });
 
        Object.assign(
            this,
            OptionsNormalizer.normalizeOptions(Object.assign({}, DEFAULT_PRESET, obfuscatorOptions))
        );
    }
}