Zod powered ENV parser
ZodEnv -ZodEnv - is a utility for parsing and validating environment variables based on predefined schemas using Zod.
Installation
To use this package in your Deno project, you can import it directly from the URL:
import { parse } from "https://deno.land/x/zodenv/mod.ts";
Usage
You can define schemas for your environment variables using the callback passed
to the parse
function. This callback receives argument e
which is an
extended z
(Zod) object. It has all methods of a regular Zod object with some
extra features added.
Here is an examples:
import { load } from "https://deno.land/std@0.208.0/dotenv/mod.ts";
import { parse } from "https://deno.land/x/zodenv/mod.ts";
await load({
export: true,
});
const [parsed, env] = parse((e) => ({
PORT: e.port().optional(),
ENABLE_FEATURE: e.boolean().default(true),
}));
env("PORT"); // number | undefined
env("ENABLE_FEATURE"); // boolean
Schema Definitions
The e
object passed to the parse
function’s callback provides various extra
methods on top of Zod’s methods to define schema rules for different types of
environment variables:
oneOf()
: Schema for parsing union string literal values.boolean()
: Schema for parsing boolean values. Properly parses"true"
and"false"
string valuesemailArray()
: Schema for parsing email arrays. Example:EMAIL_ARRAY="email@test.com, another@test.com"
stringArray()
: Schema for parsing string arrays. Example:STRING_ARRAY="value_1,value_2,value_3"
numberArray()
: Schema for parsing number arrays. Example:NUMBER_ARRAY="42,17,44"
json()
: Schema for parsing JSON values. Example:JSON="{ \"a\": \"string\", \"b\": 16 }"
integer()
: Schema for parsing integer values.float()
: Schema for parsing float values.url()
: Schema for parsing URL values.email()
: Schema for parsing email values.port()
: Schema for parsing port values. Validates wether port is within the acceptable range from 0 to 65536.domain()
: Schema for parsing domain values.
Testing
This package includes test cases to ensure proper parsing and validation. To run tests, execute:
deno test
Contributing
Contributions are welcome! Feel free to open issues or submit pull requests for any improvements or additional features.
License
This package is licensed under the MIT License.