-
Notifications
You must be signed in to change notification settings - Fork 31
/
AutoSettingsLoader.ts
53 lines (47 loc) · 1.56 KB
/
AutoSettingsLoader.ts
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
import { ConfluenceSettings, DEFAULT_SETTINGS } from "../Settings";
import { DefaultSettingsLoader } from "./DefaultSettingsLoader";
import { EnvironmentVariableSettingsLoader } from "./EnvironmentVariableSettingsLoader";
import { ConfigFileSettingsLoader } from "./ConfigFileSettingsLoader";
import { CommandLineArgumentSettingsLoader } from "./CommandLineArgumentSettingsLoader";
import { SettingsLoader } from "./SettingsLoader";
export class AutoSettingsLoader extends SettingsLoader {
constructor(private loaders: SettingsLoader[] = []) {
super();
if (loaders.length === 0) {
this.loaders.push(new DefaultSettingsLoader());
this.loaders.push(new ConfigFileSettingsLoader());
this.loaders.push(new EnvironmentVariableSettingsLoader());
this.loaders.push(new CommandLineArgumentSettingsLoader());
}
}
private combineSettings(): ConfluenceSettings {
let settings: Partial<ConfluenceSettings> = {};
for (const loader of this.loaders) {
const partialSettings = loader.loadPartial();
for (const key in partialSettings) {
const propertyKey = key as keyof ConfluenceSettings;
if (
Object.prototype.hasOwnProperty.call(
partialSettings,
propertyKey
)
) {
const element = partialSettings[propertyKey];
if (
element &&
typeof element === typeof DEFAULT_SETTINGS[propertyKey]
) {
settings = {
...settings,
[propertyKey]: element,
};
}
}
}
}
return settings as ConfluenceSettings;
}
loadPartial(): Partial<ConfluenceSettings> {
return this.combineSettings();
}
}