Parses, sanitizes, and validates environment variables.
npm install envfefe


> 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.
Imagine you use the following environment variables, e.g., in a Docker .env file:
``bash`
ELASTIC_HOST=elasticsearch
ELASTIC_PORT=9200
ENABLE_CACHE=true
LAUNCH_DATE=2017-12-08T10:00:00.000Z
GCLOUD_CREDENTIALS={"apiKey": "XYZ"}
WHITELIST=ada,john
Then you can use envfefe for parsing and sanitizing these into an object
that you can use in your application:
`typescript
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:`typescript`
{
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:`typescript`
{
elasticHost: string
elasticPort: number
enableCache: boolean
launchDate: Date
gcloudCredentials: unknown
whitelist: string[]
}
Note:
* camelCase keys are automatically translated toSNAKE_CASE
environment variable names.foo
* 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 for a number)isSuccess(config)
then will be false and config.left containsFefeError
the (see FefeError docs).
`javascript`
const config = parse({
elasticHost: optional(string())
});
`javascript``
const config = parse({
elasticHost: defaultTo(string())
});