45 lines
1.7 KiB
TypeScript
45 lines
1.7 KiB
TypeScript
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;
|
|
}
|
|
}
|