@catgirls/env
Version:
Nyaa~! Environment variables, but make them type-safe! •⩊•
121 lines (85 loc) • 3.06 kB
Markdown
Nyaa~! Environment variables, but make them type-safe! •⩊•
A smol but powerful TypeScript library that makes handling environment variables not completely awful. It gives you:
- Full type safety with runtime validation via Zod 🛡️
- Clear separation of client/server env vars to avoid leaking secrets 🤫
- Proper error messages when things go boom 💥
- Zero-config transforms for common types like numbers and bools
- Built-in transformers for quick type conversion 🔄
```bash
pnpm add @catgirls/env
```
_swishes tail excitedly_
First, define your env config schema:
```typescript
import { z } from "zod";
import { createServerEnv, transformers } from "@catgirls/env";
const env = createServerEnv({
DATABASE_URL: {
schema: z.string().url(),
},
PORT: {
schema: z.number(),
transform: transformers.number, // Using built-in transformer!
},
DEBUG_MODE: {
schema: z.boolean().optional(),
transform: transformers.optionalBoolean, // Optional transformer
},
FEATURE_FLAGS: {
schema: z.object({
enableNewStuff: z.boolean(),
}),
transform: transformers.json, // Type-safe JSON parsing
},
});
// Typescript knows all the types! *purrs*
env.DATABASE_URL; // string
env.PORT; // number
env.DEBUG_MODE; // boolean | undefined
```
Meow! We provide several built-in transformers to make your life easier:
```typescript
// Numbers
transformers.number(val: string) => number
transformers.optionalNumber(val?: string) => number | undefined
// Booleans
transformers.boolean(val: string) => boolean
transformers.optionalBoolean(val?: string) => boolean | undefined
// JSON
transformers.json<T>(val: string) => T
```
For client-side envs (like Next.js), use `createClientEnv` instead:
```typescript
const clientEnv = createClientEnv({
NEXT_PUBLIC_API_URL: {
schema: z.string().url(),
},
});
```
Because raw `process.env` makes me hiss. No types, no validation, everything's a string - it's like living in the JavaScript stone age! This little package fixes that with:
- Runtime validation so things fail fast instead of in prod
- Proper TypeScript types that actually match your runtime checks
- Clear error messages when someone forgets required vars
- Client/server separation to avoid accidentally exposing secrets
- Built-in transformers for common type conversions
Server-side env validator that yells if you try to use it client-side.
Client-safe env validator that automatically prefixes keys with `NEXT_PUBLIC_`.
Collection of helper functions for common type conversions.
Pretty error when validation fails, with details about what went wrong.
MIT - Go wild! ₍⸍⸌̣ʷ̣̫⸍̣⸌₎
---
_made with <3 by catgirls from vatican city_
**purrs contentedly at well-typed environment variables**