From 9970036d203ba2d0a46b35ba6fad21d49441cdd4 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sun, 27 Jul 2025 17:03:10 -0700 Subject: hai --- lib/process/env.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 lib/process/env.ts (limited to 'lib/process/env.ts') diff --git a/lib/process/env.ts b/lib/process/env.ts new file mode 100644 index 0000000..f59fadf --- /dev/null +++ b/lib/process/env.ts @@ -0,0 +1,25 @@ +import { IOptional, Either, Optional, type IEither, type ObjectFromList } from '@emprespresso/pengueno'; + +// type safe environment variables + +export const getEnv = (name: string): IOptional => Optional.from(process.env[name]); + +export const getRequiredEnv = (name: V): IEither => + Either.fromFailable(() => getEnv(name).get()).mapLeft( + () => new Error(`environment variable "${name}" is required D:`), + ); + +export const getRequiredEnvVars = (vars: Array): IEither> => { + type Environment = ObjectFromList; + const emptyEnvironment = Either.right({}); + const addTo = (env: Environment, key: V, val: string) => + { + ...env, + [key]: val, + }; + return vars.reduce( + (environment, key) => + environment.joinRight(getRequiredEnv(key), (value, environment) => addTo(environment, key, value)), + emptyEnvironment, + ); +}; -- cgit v1.2.3-70-g09d2