0.1.1 • Published 6 months ago

@c.s.chanhniem/envguard v0.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
6 months ago

EnvGuard

šŸ›”ļø A robust environment variable validation library for Node.js applications.

npm version License: MIT

Features

  • šŸš€ Lightweight and optimized for serverless cold starts
  • šŸŽÆ Strong type validation using Zod schemas
  • šŸ” Clear, structured error messages
  • šŸ’» Simple, intuitive API
  • ⚔ Fail-fast approach for robust serverless functions
  • šŸ“¦ ESM and CommonJS support

Installation

# Using npm
npm install @c-s-chanhniem/envguard

# Using yarn
yarn add @c-s-chanhniem/envguard

# Using pnpm
pnpm add @c-s-chanhniem/envguard

Quick Start

import { z } from 'zod';
import { loadEnvOrFail } from '@c-s-chanhniem/envguard';

// Define your environment schema
const envSchema = z.object({
  DATABASE_URL: z.string().url(),
  API_KEY: z.string().min(1),
  DEBUG: z.coerce.boolean().default(false),
  PORT: z.coerce.number().int().positive().default(8080),
});

// Validate environment variables
const config = loadEnvOrFail(envSchema);

// Use your fully typed configuration
console.log(`Server starting on port ${config.PORT}`);
console.log(`Database URL: ${config.DATABASE_URL}`);

Error Handling

EnvGuard provides clear error messages when validation fails:

try {
  const config = loadEnvOrFail(envSchema);
} catch (error) {
  if (error instanceof EnvGuardValidationError) {
    console.error('Environment validation failed:');
    console.error(error.errors);
    // {
    //   DATABASE_URL: 'Invalid url',
    //   API_KEY: 'Required'
    // }
  }
}

Usage with TypeScript

EnvGuard is written in TypeScript and provides excellent type inference:

import { z } from 'zod';
import { loadEnvOrFail } from '@c-s-chanhniem/envguard';

const envSchema = z.object({
  NODE_ENV: z.enum(['development', 'production', 'test']),
  API_VERSION: z.coerce.number().int().positive(),
  ENABLE_CACHE: z.coerce.boolean(),
});

// Config is fully typed
const config = loadEnvOrFail(envSchema);
//    ^? { NODE_ENV: 'development' | 'production' | 'test';
//        API_VERSION: number;
//        ENABLE_CACHE: boolean; }

Advanced Features

Custom Transformations

const envSchema = z.object({
  PORT: z.coerce.number().transform(x => x * 2),
  API_KEYS: z.string().transform(keys => keys.split(',')),
});

Default Values

const envSchema = z.object({
  NODE_ENV: z.enum(['development', 'production']).default('development'),
  TIMEOUT_MS: z.coerce.number().default(5000),
});

Complex Validations

const envSchema = z.object({
  DATABASE_POOL: z.coerce.number().min(1).max(100),
  CACHE_TTL: z.coerce.number().refine(
    val => val >= 0 && val <= 3600,
    'Cache TTL must be between 0 and 3600 seconds'
  ),
});

Contributing

Contributions are welcome! Please see our Contributing Guidelines for details.

License

MIT License Ā© 2025 EnvGuard Contributors

0.1.1

6 months ago

0.1.0

6 months ago