UNPKG

envase

Version:

Type-safe environment variable validation with Standard Schema compliance

43 lines 1.81 kB
import { EnvaseError } from "./errors/envase-error.js"; export const detectNodeEnv = (env) => { const nodeEnv = env.NODE_ENV; return { isProduction: nodeEnv === 'production', isTest: nodeEnv === 'test', isDevelopment: nodeEnv === 'development', }; }; export const envvar = (name, schema) => [name, schema]; export const parseEnv = (env, envSchema) => { const envvarValidationIssues = []; // biome-ignore lint/suspicious/noExplicitAny: Explicit 'any' is required due to nature of recursive processing const parseConfigObject = (schema) => { return Object.fromEntries(Object.entries(schema).map(([key, value]) => { if (Array.isArray(value)) { const [envvarName, schema] = value; const envvarValue = env[envvarName]; const result = schema['~standard'].validate(envvarValue); if (result instanceof Promise || ('then' in result && typeof result.then === 'function')) { throw new Error(`Schema validation for envvar "${envvarName}" must be synchronous`); } if (result.issues) { envvarValidationIssues.push({ name: envvarName, value: envvarValue, messages: result.issues.map(({ message }) => message), }); return [key, null]; } return [key, result.value]; } return [key, parseConfigObject(value)]; })); }; const config = parseConfigObject(envSchema); if (envvarValidationIssues.length > 0) { throw new EnvaseError(envvarValidationIssues); } return config; }; //# sourceMappingURL=core.js.map