import { IOptional, Either, Optional, type IEither } from '@emprespresso/pengueno'; export const getEnv = (name: string): IOptional => Optional.from(process.env[name]); export const getRequiredEnv = (name: string): IEither => 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: 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, ); };