envzo
v1.0.2
Published
Name: - `env`ironment - `zo`d
Downloads
2
Readme
Envzo
Name:
env
ironmentzo
d
Heavily inspired by...
I wanted to create something almost the same as envsafe
and envalid
,
except I disliked the fact that imports were global.
For example, one would import { str } from 'envalid'
when I felt that would clog my global imports.
I set out to create a simple and modular alternative to envsafe
and envalid
that would eliminate
those global variables, allow validators to be built and reused, and allow string interpolation with types.
Note: Some portions of my code, such as the built-in validators, was pulled directly from envsafe! KATT's code is excellent and I love everything he works on!
Usage
import { envzo } from 'envzo';
// Pull port number from PORT environment variable
const env = envzo.parse(process.env, ({ port }) => ({
listenPort: port({ key: 'PORT', default: 1234 })
}))
console.log(env.listenPort);
String templating can be used.
import { envzo } from 'envzo';
const env = envzo.parse(process.env, v => ({
mongo: `mongodb://${v.host({ key: 'MONGO_HOST' })}/${v.string({ key: 'MONGO_DB' })}`
}))
You can also define custom validators.
import { Envzo } from 'envzo';
export const envzo = new Envzo({
validators: {
powerOfTwo: Envzo.makeValidator<number>(({ input, errors, parse }) => {
// Use the `number` validator to parse into a number
const num = parse.number(input);
if (Math.log2(num) % 1 !== 0) {
// not a power of two!
throw errors.invalid('Power of Two', input);
}
return num;
})
}
});
const env = envzo.parse(process.env, v => ({
num: v.powerOfTwo({ key: 'NUMBER' })
}))
// num is a power of two
const { num } = env;