From f008c002915ee19b5bf93b6cae648f10ca861a22 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Thu, 3 Jul 2025 13:14:29 -0700 Subject: Adds join functions to Eithers --- u/process/env.ts | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) (limited to 'u/process/env.ts') diff --git a/u/process/env.ts b/u/process/env.ts index 76961c9..88fb490 100644 --- a/u/process/env.ts +++ b/u/process/env.ts @@ -1,33 +1,27 @@ import { IOptional, Either, Optional, type IEither } from '@emprespresso/pengueno'; -export const getEnv = (name: string): IOptional => - Optional.from(process.env[name]).filter((val) => val.trim() !== ''); +export const getEnv = (name: string): IOptional => Optional.from(process.env[name]); export const getRequiredEnv = (name: string): IEither => - getEnv(name) - .map((envVal) => Either.right(envVal)) - .orSome(() => Either.left(new Error(`environment variable "${name}" is required D:`))) - .get(); + Either.fromFailable(() => getEnv(name).get()).mapLeft( + () => 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), - ); +export const getRequiredEnvVars = (vars: Array) => { + type Environment = ObjectFromList; + const emptyEnvironment = Either.right({}); + const addTo = (env: Environment, key: V) => (val: string) => + { + ...env, + [key]: val, + }; + return Either.joinRight( + vars, + (envVar: V, environment: Environment) => getRequiredEnv(envVar).mapRight(addTo(environment, envVar)), + emptyEnvironment, + ); +}; -- cgit v1.2.3-70-g09d2