envzo
TypeScript icon, indicating that this package has built-in type declarations

1.0.2 • Public • Published

Envzo

Name:

  • environment
  • zod

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;

Readme

Keywords

none

Package Sidebar

Install

npm i envzo

Weekly Downloads

1

Version

1.0.2

License

MIT

Unpacked Size

149 kB

Total Files

21

Last publish

Collaborators

  • cseitz