From d51c9d74857aca3c2f172609297266968bc7f809 Mon Sep 17 00:00:00 2001 From: Elizabeth Alexander Hunt Date: Mon, 12 May 2025 09:40:12 -0700 Subject: The big refactor TM --- u/process/env.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 u/process/env.ts (limited to 'u/process/env.ts') diff --git a/u/process/env.ts b/u/process/env.ts new file mode 100644 index 0000000..0e41b4f --- /dev/null +++ b/u/process/env.ts @@ -0,0 +1,36 @@ +import { Either, type IEither } from "@emprespresso/pengueno"; + +export const getRequiredEnv = (name: V): IEither => + Either + .fromFailable(() => Deno.env.get(name) as V) // could throw when no permission. + .flatMap((v) => + (v && Either.right(v)) || + Either.left( + new Error(`environment variable "${name}" is required D:`), + ) + ); + +type ObjectFromList, V = string> = { + [K in (T extends ReadonlyArray ? U : never)]: V; +}; + +export const getRequiredEnvVars = (vars: ReadonlyArray) => + vars + .map((envVar) => [envVar, getRequiredEnv(envVar)] as [V, IEither]) + .reduce( + ( + acc: IEither>, + x: [V, IEither], + ) => { + const [envVar, eitherVal] = x; + return acc.flatMap((args) => { + return eitherVal.mapRight((envValue) => + ({ + ...args, + [envVar]: envValue, + }) as ObjectFromList + ); + }); + }, + Either.right({} as ObjectFromList), + ); -- cgit v1.2.3-70-g09d2