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 == ""; } }