All files index.ts

80% Statements 12/15
71.42% Branches 5/7
100% Functions 4/4
80% Lines 12/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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               3x 1x   1x     3x                 2x       2x       2x   2x                 2x 2x          
export default class Config {
    private static instance: Config;
 
    private context: string = '';
 
    /**
     * 
     * @param context 
     * @returns Singleton instance
     */
    public static getInstance(context: string) {
        if(!Config.instance) {
            Config.instance = new Config();
            
            Config.instance.context = context;
        }
 
        return Config.instance;
    }
 
    /**
     * Build config object from desired environment
     * @param env 
     * @returns AWS CDK configuration object of T
     */
    public build<T>(env: string): T | {} {
        Iif(!env) {
            throw new Error(`[build] Missing "env" in argument`);
        }
 
        Iif(!this.context) {
            throw new Error(`[build] instance has no context value`);
        }
 
        const obj = this.tryParseJson<T>(this.context);
 
        return obj[env as keyof typeof obj] as T ?? {};
    }
 
    /**
     * Try parse JSON string to object
     * @param str 
     * @returns JSON object of type T or {}
     */
    private tryParseJson<T>(str: string): T | {} {
        try {
            return JSON.parse(str);
        } catch(ex) {
            return {}
        }
    }
}