import { PredefinedEnvironmentVariables } from "@types"; import dotenv, { config } from "dotenv"; import envVarInterface, { ExtenderTypeOptional, Extensions, IEnv, IOptionalVariable } from "env-var"; config() // Their interface is really bad so I moved it to the side type EnvInterface = IEnv & ExtenderTypeOptional, T>; //@LoggerManager.logInstanceMethods export class PredefinedConfig { private predefinedEnvVariablesInterface: EnvInterface; constructor( env: Record = process.env, envFile: Record = (process.env.NODE_ENV === "dev" && dotenv.config().parsed) || {}, ) { this.predefinedEnvVariablesInterface = envVarInterface.from( Object.assign({}, envFile, env) as PredefinedEnvironmentVariables, ); } get NODE_ENV() { return this.predefinedEnvVariablesInterface.get("NODE_ENV").required(true).asString(); } get SERVER_PORT() { return this.predefinedEnvVariablesInterface.get("SERVER_PORT").default(4000).asIntPositive(); } get DB_HOST() { return this.predefinedEnvVariablesInterface.get("DB_HOST").required(true).asString(); } get DB_NAME() { return this.predefinedEnvVariablesInterface.get("DB_NAME").required(true).asString(); } get DB_PORT() { return this.predefinedEnvVariablesInterface.get("DB_PORT").default(5432).asIntPositive(); } get DB_USERNAME() { return this.predefinedEnvVariablesInterface.get("DB_USERNAME").required(true).asString(); } get DB_PASSWORD() { return this.predefinedEnvVariablesInterface.get("DB_PASSWORD").required(true).asString(); } get DB_CONNECTION_TIMEOUT_MILLIS() { return this.predefinedEnvVariablesInterface.get("DB_CONNECTION_TIMEOUT_MILLIS").default(0).asIntPositive(); } get DB_MIN_CONNECTIONS_ALLOWED() { return this.predefinedEnvVariablesInterface.get("DB_MIN_CONNECTIONS_ALLOWED").default(1).asIntPositive(); } get DB_MAX_CONNECTIONS_ALLOWED() { return this.predefinedEnvVariablesInterface.get("DB_MAX_CONNECTIONS_ALLOWED").default(1).asIntPositive(); } get DB_IDLE_IN_TRANSACTION_SESSION_TIMEOUT_MILLIS() { return this.predefinedEnvVariablesInterface .get("DB_IDLE_IN_TRANSACTION_SESSION_TIMEOUT_MILLIS") .default(0) .asIntPositive(); } get CACHE_HOST() { return this.predefinedEnvVariablesInterface.get("CACHE_HOST").required(false).asString(); } get CACHE_PORT() { return this.predefinedEnvVariablesInterface.get("CACHE_PORT").default(6379).asIntPositive(); } get CACHE_PASSWORD() { return this.predefinedEnvVariablesInterface.get("CACHE_PASSWORD").required(false).asString(); } get CACHE_CONNECTION_TIMEOUT_MILLIS() { return this.predefinedEnvVariablesInterface .get("CACHE_CONNECTION_TIMEOUT_MILLIS") .default(10000) .asIntPositive(); } get CACHE_COMMAND_TIMEOUT_MILLIS() { return this.predefinedEnvVariablesInterface.get("CACHE_COMMAND_TIMEOUT_MILLIS").default(10000).asIntPositive(); } }