const PREFIX = "DWENGO_"; const DB_PREFIX = PREFIX + "DB_"; type EnvVar = {key: string, required?: boolean, defaultValue?: any} export const EnvVars: {[key: string]: EnvVar} = { "DbHost": {key: DB_PREFIX + "HOST", required: true}, "DbPort": {key: DB_PREFIX + "PORT", defaultValue: 5432}, "DbName": {key: DB_PREFIX + "NAME", defaultValue: "dwengo"}, "DbUsername": {key: DB_PREFIX + "USERNAME", required: true}, "DbPassword": {key: DB_PREFIX + "PASSWORD", required: true}, "DbUpdate": {key: DB_PREFIX + "UPDATE", defaultValue: false}, } as const; /** * Returns the value of the given environment variable if it is set. * Otherwise, * - throw an error if the environment variable was required, * - return the default value if there is one and it was not required, * - return an empty string if the environment variable is not required and there is also no default. * @param envVar The properties of the environment variable (from the EnvVar object). */ export function getEnvVar(envVar: EnvVar): string { const value: string | undefined = process.env[envVar.key]; if (value) { return value; } else if (envVar.required) { throw new Error(`Missing environment variable: ${envVar.key}`); } else { return envVar.defaultValue || ""; } } export function getNumericEnvVar(envVar: EnvVar): number { const valueString = getEnvVar(envVar); const value = parseInt(valueString); if (isNaN(value)) { throw new Error(`Invalid value for environment variable ${envVar.key}: ${valueString}. Expected a number.`) } else { return value; } }