https://github.com/paperhive/envfefe
Parses, sanitizes, and validates environment variables – despite the constant negative press envfefe
https://github.com/paperhive/envfefe
docker environment-variables javascript nodejs parse typescript
Last synced: 12 months ago
JSON representation
Parses, sanitizes, and validates environment variables – despite the constant negative press envfefe
- Host: GitHub
- URL: https://github.com/paperhive/envfefe
- Owner: paperhive
- License: mit
- Created: 2017-11-26T22:02:06.000Z (over 8 years ago)
- Default Branch: main
- Last Pushed: 2023-03-04T02:29:15.000Z (over 3 years ago)
- Last Synced: 2024-08-09T19:19:13.495Z (almost 2 years ago)
- Topics: docker, environment-variables, javascript, nodejs, parse, typescript
- Language: TypeScript
- Homepage:
- Size: 443 KB
- Stars: 10
- Watchers: 4
- Forks: 2
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# envfefe
[](https://badge.fury.io/js/envfefe)
[](https://github.com/paperhive/envfefe/actions/workflows/test.yaml)
[](https://codecov.io/gh/paperhive/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](https://github.com/paperhive/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:
```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 to
`SNAKE_CASE` environment 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 `foo` for a number)
then `isSuccess(config)` will be `false` and `config.left` contains
the `FefeError` (see [FefeError docs](https://github.com/paperhive/fefe#fefeerror)).
## Advanced usage
### Optional variables
```javascript
const config = parse({
elasticHost: optional(string())
});
```
### Default values
```javascript
const config = parse({
elasticHost: defaultTo(string())
});
```