envalid
Validate environment variables.
Usage
// You can also use it with dotenv:
// import "https://deno.land/std/dotenv/load.ts";
import { bool, cleanEnv, num, str } from "https://deno.land/x/envalid/mod.ts";
// You can also do
// export default cleanEnv(
// to be importable from other locations.
const env = cleanEnv(Deno.env.toObject(), {
TEXT: str(),
IS_X: bool(),
APP_ID: num(),
SOMETHING: str({
default: "default value",
example: "some string",
desc: "description",
docs: "https://example.com/configuration#SOMETHING",
}),
CHOICE: str({ choices: ["can be this", "or this"] }),
});
Validators
url()
- Requires the value to be a URL.email()
- Requires the value to be an email address.num()
- Parses values like "42", "0.23", and "1e5" into numbers.json()
- Requires the value to be JSON, and callsJSON.parse()
on it.str()
- Requires the value to be set if a default value was not provided.port()
- Requires the value to be a port (1-6553), and converts it to number.host()
- Requires the value to be either a fully-qualified domain name or a v4/v6 IP address.bool()
- Requires the value to be one of "1", "0", "true", "false", "t", or "f", and converts it to boolean.
Custom Validators
You can create your own validators with makeValidator()
. It takes a single
parameter which should be a function that returns either the cleaned value, or
throws if the value is not acceptable.
import { cleanEnv, makeValidator } from "https://deno.land/x/envalid/mod.ts";
const twoUppercaseLetters = makeValidator((x) => {
if (/^[A-Za-z]{2}$/.test(x)) {
return x.toUpperCase();
} else {
throw new Error("Expected two letters");
}
});
const env = cleanEnv(Deno.env.toObject(), {
TWO_UPPERCASE_LETTERS: twoUppercaseLetters(),
});
Reporting Errors
By default, if any variable is missing or has an invalid value, an error message will be displayed and the process exits with 1. You can override this behavior by using your own reporter:
import { cleanEnv } from "https://deno.land/x/envalid/mod.ts";
const report = (error: string) => {
//
};
const env = cleanEnv(Deno.env.toObject(), {}, {
reporter: ({ errors, env }) => {
report("Invalid environment variables: " + Object.keys(errors));
},
});
The error classes EnvError
and EnvMissingError
can also be used to examine
the errors:
import {
cleanEnv,
EnvError,
EnvMissingError,
} from "https://deno.land/x/envalid/mod.ts";
const env = cleanEnv(Deno.env.toObject(), {}, {
reporter: ({ errors, env }) => {
for (const [envVar, err] of Object.entries(errors)) {
if (err instanceof EnvError) {
//
} else if (err instanceof EnvMissingError) {
//
} else {
//
}
}
},
});
Custom Middleware (Advanced)
The customCleanEnv()
function allows you to completely override the
preprocessing and validations. Its arguments are similar to cleanEnv()
except
for the third one being the custom middleware function.
The custom middleware function can modify the variables after they have been
cleaned and validated. The default middleware function,
applyDefaultMiddleware()
can also be combined with it.