This typescript/javascript package parses environment variables – despite the constant negative press envfefe
Disclaimer: the author of this package opposes Trump and other racists and misogynists.
envfefe makes extensive use of the fefe module that provides type-safe and purely functional validation, sanitization and transformation.
Usage
Imagine you use the following environment variables, e.g., in a Docker .env file:
ELASTIC_HOST=elasticsearch
ELASTIC_PORT=9200
ENABLE_CACHE=true
LAUNCH_DATE=2017-12-08T10:00:00.000Z
GCLOUD_CREDENTIALS={"apiKey": "XYZ"}
WHITELIST=ada,johnThen you can use envfefe for parsing and sanitizing these into an object
that you can use in your application:
import { parseEnv } from 'envfefe' import { parseBoolean, parseDate, parseJson, parseNumber, pipe, string, success } from 'fefe' const config = parseEnv({ elasticHost: string(), elasticPort: pipe(string()).pipe(parseNumber()), enableCache: pipe(string()).pipe(parseBoolean()), launchDate: pipe(string()).pipe(parseDate()), gcloudCredentials: pipe(string()).pipe(parseJson()), whitelist: pipe(string()).pipe(value => success(value.split(','))), })
If validation passes (check via isSuccess(config)) then config.right will equal:
{ elasticHost: 'elasticsearch', elasticPort: 9000, enableCache: true, launchDate: Date('2017-12-08T10:00:00.000Z'), gcloudCredentials: {apiKey: 'XYZ'}, whitelist: ['ada', 'john'] }
This module comes with full TypeScript support so if you are using
TypeScript then config.right will have the correct types automatically:
{ elasticHost: string elasticPort: number enableCache: boolean launchDate: Date gcloudCredentials: unknown whitelist: string[] }
Note:
camelCasekeys are automatically translated toSNAKE_CASEenvironment variable names.- By default all variables are mandatory. See below for optional variables and default values.
- Values in the resulting object have proper types. If it can't be
sanitized because of a wrong type (like providing
foofor a number) thenisSuccess(config)will befalseandconfig.leftcontains theFefeError(see FefeError docs).
Advanced usage
Optional variables
const config = parse({ elasticHost: optional(string()) });
Default values
const config = parse({ elasticHost: defaultTo(string()) });
