From 12503ed39ba725ef1acf11defa71ad78b943c611 Mon Sep 17 00:00:00 2001
From: Malte Finsterwalder <malte@holi.team>
Date: Thu, 14 Sep 2023 10:12:48 +0200
Subject: [PATCH] HOLI-3881 simplify required env parsing

---
 app/main.ts | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/app/main.ts b/app/main.ts
index 3eba0c1..e4440c3 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
   };
 };
 
-- 
GitLab