const PREFIX = 'DWENGO_'; const DB_PREFIX = PREFIX + 'DB_'; type EnvVar = { key: string; required?: boolean; defaultValue?: any }; export const EnvVars: { [key: string]: EnvVar } = { Port: { key: PREFIX + 'PORT', defaultValue: 3000 }, 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; } }