From 40daf70209b2e3e96030592c664653c8ddbed5e6 Mon Sep 17 00:00:00 2001 From: Rushil Perera Date: Thu, 30 May 2024 09:46:42 -0400 Subject: [PATCH] feat: create helper function to read env variables with type safety Summary: Test Plan: --- src/libs/readEnvVariable.spec.ts | 19 +++++++++++++++++++ src/libs/readEnvVariable.ts | 15 +++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/libs/readEnvVariable.spec.ts create mode 100644 src/libs/readEnvVariable.ts diff --git a/src/libs/readEnvVariable.spec.ts b/src/libs/readEnvVariable.spec.ts new file mode 100644 index 0000000..61aa7be --- /dev/null +++ b/src/libs/readEnvVariable.spec.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from "bun:test"; + +import { readEnvVariable } from "./readEnvVariable"; + +describe("readEnvVariable", () => { + it("env & variable defined, returns env value", () => { + expect( + readEnvVariable({ ENABLE_ANIFY: "false" }, "ENABLE_ANIFY"), + ).toBe(false); + }); + + it("env defined but variable not defined, returns default value", () => { + expect(readEnvVariable({ FOO: "bar" }, "ENABLE_ANIFY")).toBe(true); + }); + + it("env not defined, returns default value", () => { + expect(readEnvVariable(undefined, "ENABLE_ANIFY")).toBe(true); + }); +}); diff --git a/src/libs/readEnvVariable.ts b/src/libs/readEnvVariable.ts new file mode 100644 index 0000000..b7b2f5c --- /dev/null +++ b/src/libs/readEnvVariable.ts @@ -0,0 +1,15 @@ +import type { Bindings } from "hono/types"; + +import type { Env } from "~/types/env"; + +type EnvVariable = keyof Omit; +const defaultValues: Record = { + ENABLE_ANIFY: true, +}; + +export function readEnvVariable( + env: Bindings | undefined, + envVariable: EnvVariable, +): T { + return JSON.parse(env?.[envVariable] ?? null) ?? defaultValues[envVariable]; +}