From c29512b587802681a5920805682dd160f3095e20 Mon Sep 17 00:00:00 2001 From: Malte Finsterwalder <malte@holi.team> Date: Thu, 14 Sep 2023 14:27:06 +0200 Subject: [PATCH] HOLI-3881 simplify required env parsing --- app/main.ts | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/app/main.ts b/app/main.ts index ff94a29..173096c 100644 --- a/app/main.ts +++ b/app/main.ts @@ -14,45 +14,54 @@ logger.setUpLogger( environment === "development" ? LogSeverity.DEFAULT : LogSeverity.INFO, ); -const required = <T>(name: string, t?: T, fallback?: T): T => { - if (!t && 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 asNumber = (str?: string) => (str ? Number(str) : undefined); -const asBoolean = (str?: string) => (str ? /^true$/i.test(str) : undefined); -const fake = asBoolean(Deno.env.get("FAKE")) || false; // For local development. If set, the API returns dummy data + +const asBoolean = (str: string) => /^true$/i.test(str); + +const fake = requiredEnv("FAKE", asBoolean, false); // For local development. If set, the API returns dummy data const serverConfigFromEnv = (): ServerConfig => { return { - port: required("PORT", asNumber(Deno.env.get("PORT")) || DEFAULT_PORT), - cacheEnabled: required( + port: requiredEnv("PORT", Number, DEFAULT_PORT), + cacheEnabled: requiredEnv( "CACHE_ENABLED", - asBoolean(Deno.env.get("CACHE_ENABLED")), + asBoolean, DEFAULT_CACHE_ENABLED, ), - cacheTtlMsVoltastics: required( + cacheTtlMsVoltastics: requiredEnv( "DEFAULT_CACHE_TTL_MS_VOLTASTICS", - asNumber(Deno.env.get("DEFAULT_CACHE_TTL_MS_VOLTASTICS")), + Number, DEFAULT_CACHE_TTL_MS_VOLTASTICS, ), voltastics: { - baseUrl: required( + baseUrl: requiredEnv( "VOLUNTEERING_VOLTASTICS_API_URL", - Deno.env.get("VOLUNTEERING_VOLTASTICS_API_URL"), + String, fake ? "dummy value" : undefined, ), - apiToken: required( + apiToken: requiredEnv( "VOLUNTEERING_VOLTASTICS_API_KEY", - Deno.env.get("VOLUNTEERING_VOLTASTICS_API_KEY"), + String, fake ? "dummy value" : undefined, ), }, - imageProxyBaseUrl: Deno.env.get("IMAGE_PROXY_BASE_URL") || - (environment === "production" + imageProxyBaseUrl: requiredEnv( + "IMAGE_PROXY_BASE_URL", + String, + environment === "production" ? "https://images.holi.social" - : "https://dev-images.holi.social"), + : "https://dev-images.holi.social", + ), fake, }; }; -- GitLab