import { DynamicModule } from '@nestjs/common';
import { Class } from 'type-fest';
import { ASYNC_OPTIONS_TYPE, ConfigurableModuleClass, OPTIONS_TYPE } from './config.module-definition.js';
import { AsyncOptions } from './types/async-options.js';
import { ConfigProvider } from './types/config-provider.interface.js';
import { AsyncOptionsOfModule, InjectedModule } from './types/injected-module.interface.js';
import { ConfigModuleOptions } from './types/config-module-options.interface.js';
export declare class ConfigModule extends ConfigurableModuleClass {
    private static config;
    private static providers;
    private static createConfigProvider;
    private static loadConfig;
    private static createConfigProviderFactory;
    private static createLoadedConfigProviderFactory;
    /**
     * Load config and provider before registering the module
     */
    static preload(options?: ConfigModuleOptions): Promise<void>;
    /**
     * Get the loaded config
     */
    static get<T extends ConfigProvider>(ConfigProviderClass: T): Promise<InstanceType<T> | undefined>;
    static getOrFail<T extends ConfigProvider>(ConfigProviderClass: T): Promise<InstanceType<T>>;
    static register(options: typeof OPTIONS_TYPE): DynamicModule;
    static registerAsync(options: typeof ASYNC_OPTIONS_TYPE): DynamicModule;
    static inject<M extends InjectedModule, AO extends AsyncOptionsOfModule<M>, O extends Awaited<ReturnType<AO['useFactory']>>, P extends Class<O>>(provider: P, module: M): DynamicModule;
    static inject<M extends InjectedModule, AO extends AsyncOptionsOfModule<M>, O extends Awaited<ReturnType<AO['useFactory']>>, P extends Class<any>>(provider: P, module: M, optionsFactory: (config: P['prototype']) => Promise<O> | O): DynamicModule;
    static inject<M extends InjectedModule, AO extends AsyncOptionsOfModule<M>, O extends Awaited<ReturnType<AO['useFactory']>>, P extends Class<O>>(provider: P, module: M, moduleAsyncOptions: Omit<AO, keyof AsyncOptions>): DynamicModule;
    static inject<M extends InjectedModule, AO extends AsyncOptionsOfModule<M>, O extends Awaited<ReturnType<AO['useFactory']>>, P extends Class<any>>(provider: P, module: M, moduleAsyncOptions: Omit<AO, keyof AsyncOptions>, optionsFactory: (config: P['prototype']) => Promise<O>): DynamicModule;
}
