import { IndexedDBStorage } from '../adapters/indexed-DB.service';
import { LocalStorage } from '../adapters/local-storage.service';
import { MemoryStorage } from '../adapters/memory-storage.service';
import { IAsyncStorage, IEventEmitter, ILogger, IndexedDBStorageConfig, IStorage, ISyncStorage, LocalStorageConfig, MemoryStorageConfig, StorageType, UniversalStorageConfig } from '../storage.interface';
export declare class StorageFactory {
    static createMemory<T extends Record<string, any>>(config: MemoryStorageConfig<T>, eventEmitter?: IEventEmitter, logger?: ILogger): MemoryStorage<T>;
    static createLocal<T extends Record<string, any>>(config: LocalStorageConfig<T>, eventEmitter?: IEventEmitter, logger?: ILogger): LocalStorage<T>;
    static createIndexedDB<T extends Record<string, any>>(config: IndexedDBStorageConfig<T>, eventEmitter?: IEventEmitter, logger?: ILogger): IndexedDBStorage<T>;
    static create<T extends Record<string, any>>(config: UniversalStorageConfig<T> & {
        type: 'memory';
    }, eventEmitter?: IEventEmitter, logger?: ILogger): ISyncStorage<T>;
    static create<T extends Record<string, any>>(config: UniversalStorageConfig<T> & {
        type: 'localStorage';
    }, eventEmitter?: IEventEmitter, logger?: ILogger): ISyncStorage<T>;
    static create<T extends Record<string, any>>(config: UniversalStorageConfig<T> & {
        type: 'indexedDB';
    }, eventEmitter?: IEventEmitter, logger?: ILogger): IAsyncStorage<T>;
    /**
     * Общая перегрузка для динамического `type`. Принимает ТОЛЬКО типы, которые фабрика
     * реально создаёт (`memory`/`localStorage`/`indexedDB`). `'worker'` сюда НЕ входит
     * намеренно: `WorkerCacheStorage` не создаётся лениво фабрикой (нужны воркер-опции),
     * поэтому `create({ type: 'worker' })` не должен типизироваться, а не падать в рантайме (R5).
     */
    static create<T extends Record<string, any>>(config: UniversalStorageConfig<T> & {
        type: Exclude<StorageType, 'worker'>;
    }, eventEmitter?: IEventEmitter, logger?: ILogger): IStorage<T>;
}
