interface EnvSchema { parse(value: unknown): TOutput; } type EnvParser = EnvSchema | ((value: string | undefined, context: { key: string; scope: "server" | "public"; }) => TOutput); type EnvShape = Record>; type InferEnvParser = TParser extends EnvSchema ? TOutput : TParser extends (value: string | undefined, context: any) => infer TOutput ? TOutput : never; type InferEnvShape = TShape extends EnvShape ? { [K in keyof TShape]: InferEnvParser; } : {}; interface FarmEnvConfig { server?: TServer; public?: TPublic; } interface ResolvedFarmEnv = Record, TPublic extends Record = Record> { server: TServer; public: TPublic; } type InferEnv = TConfig extends FarmEnvConfig ? ResolvedFarmEnv, InferEnvShape> : ResolvedFarmEnv; /** * Augmented by generated src/farm.d.ts for project-specific autocomplete. */ interface FarmEnvTypes { } type FarmServerEnv = FarmEnvTypes extends { server: infer TServer; } ? TServer extends Record ? TServer : Record : Record; type FarmPublicEnv = FarmEnvTypes extends { public: infer TPublic; } ? TPublic extends Record ? TPublic : Record : Record; type FarmTypedEnv = ResolvedFarmEnv; declare function resolveEnv | undefined>(config: TConfig, source?: Record): InferEnv>; declare function setEnv(env: ResolvedFarmEnv): void; declare function getResolvedEnv(): TEnv; declare function getEnv = FarmServerEnv>(): TServer; declare function getEnv>(key: TKey): FarmServerEnv[TKey]; declare function getPublicEnv = FarmPublicEnv>(): TPublic; declare function getPublicEnv>(key: TKey): FarmPublicEnv[TKey]; declare const env: FarmServerEnv; declare const serverEnv: Record; declare const publicEnv: FarmPublicEnv; export { type EnvParser, type EnvSchema, type EnvShape, type FarmEnvConfig, type FarmEnvTypes, type FarmPublicEnv, type FarmServerEnv, type FarmTypedEnv, type InferEnv, type InferEnvParser, type InferEnvShape, type ResolvedFarmEnv, env, getEnv, getPublicEnv, getResolvedEnv, publicEnv, resolveEnv, serverEnv, setEnv };