import { ConfigurableSchema, ConfigurationSchema, NestedConfigurationSchema } from './schema'; export declare const optionsKey: unique symbol; export declare const configurationSchema: unique symbol; export declare const loadedValues: unique symbol; export declare const KONVENIENT_CONFIGURATION_CLASS = "__konvenient_configuration_class"; export interface ConfigurationOptions { pathPrefix?: string; envPrefix?: string; } export interface FinalizedConfigurationOptions extends Required { name: string; } export interface DecoratedPrototype { [optionsKey]: FinalizedConfigurationOptions; [configurationSchema]: ConfigurationSchema; [KONVENIENT_CONFIGURATION_CLASS]: boolean; } export interface DecoratedConstructor { prototype: DecoratedPrototype; new (): any; } export declare type LoadedTarget = { [loadedValues]: Record; }; /** * Marks a class as a configuration class. Configuration classes * shall adhere to the following requirements: * * * have a default or no argument constructor. * * @returns The actual decorator applied to the class. */ export declare function Configuration(options?: Partial): (constructor: new () => T) => new () => T; /** * Marks a field on a configuration class configurable (loadable with convict). Configurable * fields shall adhere to the following requirements: * * * have a default value. * * @param propertySchema The convict schema used to load, validate and transform the configuration value. * @returns The actual decorator applied to the field. */ export declare function Configurable(propertySchema?: ConfigurableSchema): (target: any, propertyKey: string) => void; /** * Marks a field on a configuration class as nested configuration. Nested configuration * fields shall adhere to the following requirements: * * * have a configuration class as their default value. * * @returns The actual decorator applied to the field. */ export declare function Nested(): (target: any, propertyKey: string) => void; export declare function nestedSchemaOf(target: any): NestedConfigurationSchema; export declare function isDecoratedPrototype(target: any): target is DecoratedPrototype; export declare function extractSchemaFromPrototype(target: any): ConfigurationSchema;