figue
Version:
Platform agnostic configuration management library, with environmental variables and validation, like convict but cross-env and zod schemas
46 lines (44 loc) • 1.86 kB
TypeScript
import { StandardSchemaV1 } from "@standard-schema/spec";
//#region src/types.d.ts
type Falsy = false | 0 | '' | null | undefined;
type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
//# sourceMappingURL=types.d.ts.map
//#endregion
//#region src/figue.types.d.ts
type ConfigDefinitionElement<T extends StandardSchemaV1 = StandardSchemaV1> = {
schema: T;
env?: string;
doc?: string;
default?: StandardSchemaV1.InferOutput<T>;
};
type ConfigDefinition = { [P in keyof any]: ConfigDefinitionElement | ConfigDefinitionObject };
type ConfigDefinitionObject = { [K in keyof any]: ConfigDefinitionElement | ConfigDefinition };
type InferSchemaType<T extends ConfigDefinition> = Expand<{ [P in keyof T]: T[P] extends ConfigDefinitionElement ? StandardSchemaV1.InferOutput<T[P]['schema']> : T[P] extends ConfigDefinition ? Expand<InferSchemaType<T[P]>> : never }>;
type EnvRecord = Record<string, unknown>;
//#endregion
//#region src/figue.d.ts
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: Record<string, unknown>;
};
//# sourceMappingURL=figue.d.ts.map
//#endregion
export { type ConfigDefinition, type ConfigDefinitionElement, type ConfigDefinitionObject, type EnvRecord, defineConfig };
//# sourceMappingURL=index.d.ts.map