env-validator-gen
v1.0.0
Published
Scan source files for process.env usage and generate a Zod validation schema that fails fast on missing variables
Maintainers
Readme
env-validator-gen
Scans your source files for process.env.* usage and generates a typed validation schema that crashes early if any required variables are missing — no manual list maintenance needed.
Install
npm install -g env-validator-gen
# or run directly
npx env-validator-gen ./srcUsage
Given source files that use environment variables:
// src/db.ts
const client = new Client({ url: process.env.DATABASE_URL });
// src/auth.ts
const secret = process.env.JWT_SECRET;
const expiry = process.env.TOKEN_EXPIRY;Run the scanner:
npx env-validator-gen ./srcGenerates src/env.ts:
// Auto-generated by env-validator-gen. Do not edit manually.
import { z } from 'zod';
const envSchema = z.object({
DATABASE_URL: z.string().min(1, 'DATABASE_URL is required'),
JWT_SECRET: z.string().min(1, 'JWT_SECRET is required'),
TOKEN_EXPIRY: z.string().min(1, 'TOKEN_EXPIRY is required'),
});
export const env = envSchema.parse(process.env);
export type Env = z.infer<typeof envSchema>;Import it at your app's entry point and it validates all env vars at startup — throwing a descriptive error if any are missing.
Options
| Flag | Description |
|------|-------------|
| --out <file> | Output file path (default: src/env.ts) |
| --raw | Generate a plain Node.js validator instead of Zod |
| --dotenv | Add import 'dotenv/config' to the generated file |
| --print | Print to stdout instead of writing a file |
Examples
# Custom output path
npx env-validator-gen ./src --out config/env.ts
# Plain Node.js validator (no Zod dependency)
npx env-validator-gen ./src --raw
# With dotenv auto-load
npx env-validator-gen ./src --dotenv
# Preview without writing
npx env-validator-gen ./src --printRaw mode (no Zod)
With --raw, generates a plain validator with no dependencies:
// Auto-generated by env-validator-gen. Do not edit manually.
const REQUIRED_ENV_VARS = [
'DATABASE_URL',
'JWT_SECRET',
'TOKEN_EXPIRY',
] as const;
const missing = REQUIRED_ENV_VARS.filter((k) => !process.env[k]);
if (missing.length > 0) {
console.error(`Missing required environment variables: ${missing.join(', ')}`);
process.exit(1);
}
export const env = process.env as Record<typeof REQUIRED_ENV_VARS[number], string>;What gets scanned
The scanner detects all three common patterns:
process.env.DATABASE_URL // dot notation
process.env['DATABASE_URL'] // bracket with single quotes
process.env["DATABASE_URL"] // bracket with double quotesScanned file types: .ts, .tsx, .js, .jsx, .mjs, .cjs
Ignored directories: node_modules, dist, .git, coverage, .next, build
Use as a library
import { scanFiles, scanContent, generateZodValidator, generateRawValidator } from 'env-validator-gen';
// Scan a directory
const keys = scanFiles('./src');
// Or scan a string of code
const keys2 = scanContent('const x = process.env.API_KEY;');
// Generate output
const zodSchema = generateZodValidator(keys, { withDotenvLoad: true });
const rawSchema = generateRawValidator(keys);License
MIT
