env-sentinel
Version:
Zero-dependency tool that auto-validates .env files against schema.env, with optional fallback and secure warnings.
36 lines (35 loc) • 1.25 kB
JavaScript
import { log } from './log.js';
import { getValidator, parseRuleString } from './validation/index.js';
export function validateEnv(env, schema) {
let isValid = true;
for (const key in schema) {
const rawRule = schema[key];
const rules = parseRuleString(rawRule);
const value = env[key];
const ruleNames = rules.map((r) => r.name);
const isRequired = ruleNames.includes('required');
if (!isRequired && value === undefined)
continue;
if (isRequired && (value === undefined || value === '')) {
log.error(`Missing required variable: ${key}`);
isValid = false;
continue;
}
for (const rule of rules) {
if (['required', 'optional', 'string'].includes(rule.name)) {
continue;
}
const validator = getValidator(rule.name);
if (!validator) {
log.warn(`Unknown rule '${rule.name}' for ${key}`);
continue;
}
const result = validator(key, value, rule.args);
if (result !== true) {
log.error(result);
isValid = false;
}
}
}
return isValid;
}