UNPKG

figue

Version:

Platform agnostic configuration management library, with environmental variables and validation, like convict but cross-env and zod schemas

54 lines (49 loc) 1.92 kB
import { ZodType, z } from 'zod'; type ConfigDefinitionElement<T = unknown> = { schema: ZodType<T>; env?: string; doc?: string; default?: T; }; type ConfigDefinition = { [P in keyof any]: ConfigDefinitionElement | ConfigDefinitionObject; }; type ConfigDefinitionObject = { [K in keyof any]: ConfigDefinitionElement | ConfigDefinition; }; type InferSchemaType<T extends ConfigDefinition> = { [P in keyof T]: T[P] extends ConfigDefinitionElement ? T[P]['schema']['_output'] : T[P] extends ConfigDefinition ? InferSchemaType<T[P]> : never; }; type EnvRecord = Record<string, unknown>; type DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]>; } : T; type Falsy = false | 0 | '' | null | undefined; declare function buildConfigSchema({ configDefinition }: { configDefinition: ConfigDefinition; }): z.ZodObject<any, "strip", z.ZodTypeAny, { [x: string]: any; }, { [x: string]: any; }>; declare function defineConfig<T extends ConfigDefinition, Config extends Record<string, unknown> = InferSchemaType<T>>(configDefinition: T, { envSources, envSource, defaults: rawDefaults, priority, getDefaults, }?: { envSources?: EnvRecord[]; envSource?: EnvRecord; defaults?: (Record<string, unknown> | Falsy)[] | Record<string, unknown>; getDefaults?: ((args: { configDefaults: Record<string, unknown>; envConfig: Record<string, unknown>; config: Record<string, unknown>; }) => (Record<string, unknown> | Falsy)[] | Record<string, unknown>); priority?: 'env' | 'defaults'; }): { config: Config; env: EnvRecord; envConfig: DeepPartial<Config>; schema: z.ZodObject<any, "strip", z.ZodTypeAny, { [x: string]: any; }, { [x: string]: any; }>; }; export { type ConfigDefinition, type ConfigDefinitionElement, type ConfigDefinitionObject, type EnvRecord, buildConfigSchema, defineConfig };