import { IsBoolean, IsIn, IsInt, Min, Max, validateSync } from 'class-validator';
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}
*/
@IsBoolean()
public readonly compact: boolean;
/**
* @type {boolean}
*/
@IsBoolean()
public readonly debugProtection: boolean;
/**
* @type {boolean}
*/
@IsBoolean()
public readonly debugProtectionInterval: boolean;
/**
* @type {boolean}
*/
@IsBoolean()
public readonly disableConsoleOutput: boolean;
/**
* @type {boolean}
*/
@IsBoolean()
public readonly encodeUnicodeLiterals: boolean;
/**
* @type {string[]}
*/
public readonly reservedNames: string[];
/**
* @type {boolean}
*/
@IsBoolean()
public readonly rotateUnicodeArray: boolean;
/**
* @type {boolean}
*/
@IsBoolean()
public readonly selfDefending: boolean;
/**
* @type {boolean}
*/
@IsBoolean()
public readonly sourceMap: boolean;
/**
* @type {TSourceMapMode}
*/
@IsIn(['inline', 'separate'])
public readonly sourceMapMode: TSourceMapMode;
/**
* @type {boolean}
*/
@IsBoolean()
public readonly unicodeArray: boolean;
/**
* @type {number}
*/
@IsInt()
@Min(0)
@Max(1)
public readonly unicodeArrayThreshold: number;
/**
* @type {boolean}
*/
@IsBoolean()
public readonly wrapUnicodeArrayCalls: boolean;
/**
* @param obfuscatorOptions
*/
constructor (obfuscatorOptions: IObfuscatorOptions) {
validateSync(this);
Object.assign(
this,
OptionsNormalizer.normalizeOptions(Object.assign({}, DEFAULT_PRESET, obfuscatorOptions))
);
}
}
|