58 lines
2.1 KiB
TypeScript
58 lines
2.1 KiB
TypeScript
|
import ms from "ms";
|
||
|
import { EnvSettingString, envSettingsType, SettingString, settingsType } from "../type/settingTypes";
|
||
|
|
||
|
export abstract class SettingHelper {
|
||
|
private static settings: { [key in SettingString]?: string } = {};
|
||
|
private static envSettings: { [key in EnvSettingString]?: string } = {};
|
||
|
|
||
|
public static getSetting(key: SettingString): string | number | boolean | ms.StringValue {
|
||
|
let settingType = settingsType[key];
|
||
|
return this.settings[key] ?? settingType.default ?? "";
|
||
|
}
|
||
|
|
||
|
public static getEnvSetting(key: EnvSettingString): string {
|
||
|
let settingType = envSettingsType[key];
|
||
|
return this.envSettings[key] ?? settingType.default ?? "";
|
||
|
}
|
||
|
|
||
|
public static async configure() {}
|
||
|
|
||
|
public static async configurEnv() {
|
||
|
this.envSettings = {
|
||
|
"database.type": process.env.DB_TYPE,
|
||
|
"database.host": process.env.DB_HOST,
|
||
|
"database.port": process.env.DB_PORT,
|
||
|
"database.name": process.env.DB_NAME,
|
||
|
"database.username": process.env.DB_USERNAME,
|
||
|
"database.password": process.env.DB_PASSWORD,
|
||
|
};
|
||
|
this.checkEnvSettings();
|
||
|
}
|
||
|
|
||
|
private static checkEnvSettings() {
|
||
|
if (!["mysql", "sqlite", "postgres"].includes(this.envSettings["database.type"]))
|
||
|
throw new Error("set valid value to DB_TYPE (mysql|sqlite|postgres)");
|
||
|
if (this.checkIfEmptyOrNotString(this.envSettings["database.name"]))
|
||
|
throw new Error("set valid value to DB_NAME (name of database or filepath for sqlite)");
|
||
|
if (
|
||
|
this.checkIfEmptyOrNotString(this.envSettings["database.host"]) &&
|
||
|
this.envSettings["database.type"] != "sqlite"
|
||
|
)
|
||
|
throw new Error("set valid value to DB_HOST");
|
||
|
if (
|
||
|
this.checkIfEmptyOrNotString(this.envSettings["database.username"]) &&
|
||
|
this.envSettings["database.type"] != "sqlite"
|
||
|
)
|
||
|
throw new Error("set valid value to DB_USERNAME");
|
||
|
if (
|
||
|
this.checkIfEmptyOrNotString(this.envSettings["database.password"]) &&
|
||
|
this.envSettings["database.type"] != "sqlite"
|
||
|
)
|
||
|
throw new Error("set valid value to DB_PASSWORD");
|
||
|
}
|
||
|
|
||
|
private static checkIfEmptyOrNotString(val: any) {
|
||
|
return typeof val != "string" || val == "";
|
||
|
}
|
||
|
}
|