diff options
author | Elizabeth Hunt <me@liz.coffee> | 2025-07-03 13:14:29 -0700 |
---|---|---|
committer | Elizabeth Hunt <me@liz.coffee> | 2025-07-03 13:14:29 -0700 |
commit | f008c002915ee19b5bf93b6cae648f10ca861a22 (patch) | |
tree | 6eb9708884ad351c6ae2f38bf5a3035df1f0d54d /u/process/env.ts | |
parent | b2327674c851c9942e8eb2f94b1b5f1524521a19 (diff) | |
download | ci-f008c002915ee19b5bf93b6cae648f10ca861a22.tar.gz ci-f008c002915ee19b5bf93b6cae648f10ca861a22.zip |
Adds join functions to Eithers
Diffstat (limited to 'u/process/env.ts')
-rw-r--r-- | u/process/env.ts | 42 |
1 files changed, 18 insertions, 24 deletions
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 = <V extends string>(name: string): IOptional<V> => - Optional.from(<V>process.env[name]).filter((val) => val.trim() !== ''); +export const getEnv = <V extends string>(name: string): IOptional<V> => Optional.from(<V>process.env[name]); export const getRequiredEnv = <V extends string>(name: string): IEither<Error, V> => - getEnv<V>(name) - .map((envVal) => Either.right<Error, V>(<V>envVal)) - .orSome(() => Either.left<Error, V>(new Error(`environment variable "${name}" is required D:`))) - .get(); + Either.fromFailable(() => getEnv<V>(name).get()).mapLeft( + () => new Error(`environment variable "${name}" is required D:`), + ); type ObjectFromList<T extends ReadonlyArray<string>, V = string> = { [K in T extends ReadonlyArray<infer U> ? U : never]: V; }; -export const getRequiredEnvVars = <V extends string>(vars: ReadonlyArray<V>) => - vars - .map((envVar) => [envVar, getRequiredEnv(envVar)] as [V, IEither<Error, V>]) - .reduce( - (acc: IEither<Error, ObjectFromList<typeof vars>>, x: [V, IEither<Error, V>]) => { - const [envVar, eitherVal] = x; - return acc.flatMap((args) => { - return eitherVal.mapRight( - (envValue) => - ({ - ...args, - [envVar]: envValue, - }) as ObjectFromList<typeof vars>, - ); - }); - }, - Either.right({} as ObjectFromList<typeof vars>), - ); +export const getRequiredEnvVars = <V extends string>(vars: Array<V>) => { + type Environment = ObjectFromList<typeof vars>; + const emptyEnvironment = Either.right<Error, Environment>(<Environment>{}); + const addTo = (env: Environment, key: V) => (val: string) => + <Environment>{ + ...env, + [key]: val, + }; + return Either.joinRight<V, Error, Environment>( + vars, + (envVar: V, environment: Environment) => getRequiredEnv(envVar).mapRight(addTo(environment, envVar)), + emptyEnvironment, + ); +}; |