src/lib/AppSettings.ts   A
last analyzed

Complexity

Total Complexity 5
Complexity/F 1.67

Size

Lines of Code 50
Function Count 3

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 42
dl 0
loc 50
rs 10
c 0
b 0
f 0
wmc 5
mnd 2
bc 2
fnc 3
bpm 0.6666
cpm 1.6666
noi 0

3 Functions

Rating   Name   Duplication   Size   Complexity  
A AppSettings.ts ➔ loadSettings 0 3 1
A AppSettings.ts ➔ transformSettings 0 13 2
A AppSettings.ts ➔ loadLogTarget 0 11 2
1
/* It initializes a git instance */
2
3
import { LogTarget } from '@/traits/HasLogger';
4
5
export interface AppSettings {
6
    github_token: string;
7
    repository_storage_path: string;
8
    boosts_path: string;
9
    use_forks: boolean;
10
    use_pull_requests: boolean;
11
    log_target: LogTarget | LogTarget[];
12
    dry_run?: boolean;
13
    auto_merge_pull_requests?: boolean;
14
}
15
16
export function loadSettings(filename: string): AppSettings {
17
    return transformSettings(require(filename).default);
18
}
19
20
function loadLogTarget(settings) {
21
    if (!Array.isArray(settings.log_target)) {
22
        settings.log_target = [ settings.log_target ];
23
    }
24
25
    settings.log_target = settings.log_target
26
        .map(target => <LogTarget>target.toLowerCase())
27
        .filter((target: string) => [ 'console', 'file' ].includes(target));
28
29
    return settings;
30
}
31
32
const isString = (value: any) => typeof value === 'string';
33
const isUndefined = (value: any) => typeof value === 'undefined';
34
const getEnvVar = (settings, key: string) => process.env[settings[key].slice(1)];
35
const setDefaultValue = (settings, key: string, value: any) => isUndefined(settings[key]) && (settings[key] = value);
36
37
export function transformSettings(settings: AppSettings): AppSettings {
38
    // load settings from environment variable references starting with '$'
39
    Object.keys(settings)
40
        .filter(key => isString(settings[key]) && !!getEnvVar(settings, key))
41
        .forEach(key => (settings[key] = getEnvVar(settings, key)));
42
43
    setDefaultValue(settings, 'dry_run', false);
44
    setDefaultValue(settings, 'auto_merge_pull_requests', false);
45
46
    settings.use_forks = settings.use_pull_requests ? settings.use_forks : false;
47
48
    return loadLogTarget(settings);
49
}
50