type EnvValue = string | number | boolean; interface EnvFieldConfig { type: 'string' | 'number' | 'boolean' | 'enum'; required: boolean; defaultValue?: T; validators: Array<(value: T) => string | null>; transformer: (raw: string) => T; enumValues?: readonly string[]; } type InferEnvType = T extends EnvField ? U : never; type EnvSchema = Record>; type InferEnv = { [K in keyof T]: InferEnvType; }; /** * A builder for defining environment variable validation rules. */ export declare class EnvField { /** @internal */ _config: EnvFieldConfig; constructor(config: EnvFieldConfig); /** Mark the field as required (default). */ required(): EnvField; /** Mark the field as optional with a default value. */ default(value: T): EnvField; /** Add a custom validation rule. */ validate(fn: (value: T) => string | null): EnvField; } /** * Define a string environment variable. * * @example * ```ts * const env = createEnv({ * DATABASE_URL: envString().url().required(), * }); * ``` */ export declare function envString(): StringEnvField; declare class StringEnvField extends EnvField { /** Validate that the string is a valid URL. */ url(): StringEnvField; /** Validate minimum length. */ minLength(min: number): StringEnvField; /** Validate that the string matches a pattern. */ matches(pattern: RegExp): StringEnvField; /** Set a default value. */ default(value: string): StringEnvField; /** Mark as required. */ required(): StringEnvField; } /** * Define a numeric environment variable. * Automatically coerces the string value to a number. * * @example * ```ts * const env = createEnv({ * PORT: envNumber().port().default(3000), * }); * ``` */ export declare function envNumber(): NumberEnvField; declare class NumberEnvField extends EnvField { /** Validate that the number is a valid port (1-65535). */ port(): NumberEnvField; /** Validate minimum value. */ min(min: number): NumberEnvField; /** Validate maximum value. */ max(max: number): NumberEnvField; /** Set a default value. */ default(value: number): NumberEnvField; /** Mark as required. */ required(): NumberEnvField; } /** * Define a boolean environment variable. * Recognizes: "true", "1", "yes", "on" as true. * * @example * ```ts * const env = createEnv({ * DEBUG: envBoolean().default(false), * }); * ``` */ export declare function envBoolean(): BooleanEnvField; declare class BooleanEnvField extends EnvField { /** Set a default value. */ default(value: boolean): BooleanEnvField; /** Mark as required. */ required(): BooleanEnvField; } /** * Define an enum environment variable. * Value must be one of the specified options. * * @example * ```ts * const env = createEnv({ * NODE_ENV: envEnum(['development', 'production', 'test'] as const), * }); * // env.NODE_ENV is 'development' | 'production' | 'test' * ``` */ export declare function envEnum(values: T): EnvField; /** * Validate and type-safe environment variables. * Throws `EnvConfigError` at startup if validation fails. * * @example * ```ts * import { createEnv, envString, envNumber, envBoolean, envEnum } from 'guarden/env'; * * export const env = createEnv({ * DATABASE_URL: envString().url().required(), * PORT: envNumber().port().default(3000), * DEBUG: envBoolean().default(false), * NODE_ENV: envEnum(['development', 'production', 'test']), * }); * * // Fully typed! * env.DATABASE_URL // string * env.PORT // number * env.DEBUG // boolean * env.NODE_ENV // 'development' | 'production' | 'test' * ``` */ export declare function createEnv(schema: T, source?: Record): InferEnv; export {}; //# sourceMappingURL=schema.d.ts.map