diff --git a/app/main.ts b/app/main.ts index 3eba0c11636b85b6b597669d5bf358759a61b8e6..e4440c3889ac92338e16ed2f3283340138b2b469 100644 --- a/app/main.ts +++ b/app/main.ts @@ -13,30 +13,30 @@ logger.setUpLogger( environment === "development" ? LogSeverity.DEFAULT : LogSeverity.INFO, ); -const required = <T>(name: string, t?: T, fallback?: T): T => { - if (t === undefined && fallback === undefined) { +const requiredEnv = <T>( + name: string, + typeFn: (s: string) => T, + fallback?: T, +): T => { + const env = Deno.env.get(name); + if (env === undefined && fallback === undefined) { throw Error(`Environment variable "${name}" is required`); } else { - return t !== undefined ? t : fallback!; + return env !== undefined ? typeFn(env) : fallback!; } }; const serverConfigFromEnv = () => { - const asNumber = (str?: string) => (str ? Number(str) : undefined); - const asBoolean = (str?: string) => (str ? /^true$/i.test(str) : undefined); + const asBoolean = (str: string) => /^true$/i.test(str); return { - port: required("PORT", asNumber(Deno.env.get("PORT")), DEFAULT_PORT), - cacheEnabled: required( - "CACHE_ENABLED", - asBoolean(Deno.env.get("CACHE_ENABLED")), - DEFAULT_CACHE_ENABLED, - ), - cacheTtlMsBetterplace: required( + port: requiredEnv("PORT", Number, DEFAULT_PORT), + cacheEnabled: requiredEnv("CACHE_ENABLED", asBoolean, DEFAULT_CACHE_ENABLED), + cacheTtlMsBetterplace: requiredEnv( "CACHE_TTL_MS_BETTERPLACE", - asNumber(Deno.env.get("CACHE_TTL_MS_BETTERPLACE")), + Number, DEFAULT_CACHE_TTL_MS_BETTERPLACE, ), - fake: asBoolean(Deno.env.get("FAKE")) || false, // For local development. If set, the API returns dummy data + fake: requiredEnv("FAKE", asBoolean, false), // For local development. If set, the API returns dummy data }; };