import { I as ISelectorModule, a as Selector, b as SelectorOptions, S as SelectorAPI } from './selector.interface-CA5y-kD_.js';
import { p as StorageType, M as Middleware, g as IPluginManager, e as IStoragePlugin, f as IPluginExecutor, n as ILogger, c as StorageKeyType, s as BaseStorage, o as StorageConfig, m as IEventEmitter, j as IStorage } from './storage.interface-2HKvqdAJ.js';
export { B as BatchingMiddlewareOptions, C as ConfigureMiddlewares, D as DefaultMiddlewares, G as GetDefaultMiddleware, d as IPlugin, I as IndexedDBStorage, r as IndexedDBStorageConfig, L as LocalStorageConfig, q as MemoryStorageConfig, a as MiddlewareAPI, N as NextFunction, P as PluginContext, S as ShallowCompareMiddlewareOptions, b as StorageAction, l as StorageEvent, k as StorageEvents, i as StorageInitStatus, h as StorageStatus } from './storage.interface-2HKvqdAJ.js';

interface SharedStateMiddlewareProps {
    storageType: StorageType;
    storageName: string;
}
declare const broadcastMiddleware: (props: SharedStateMiddlewareProps) => Middleware;

declare class StoragePluginModule implements IPluginManager<IStoragePlugin>, IPluginExecutor {
    protected readonly parentExecutor?: IPluginExecutor | undefined;
    protected readonly logger?: ILogger | undefined;
    protected readonly storageName: string;
    private plugins;
    constructor(parentExecutor?: IPluginExecutor | undefined, logger?: ILogger | undefined, storageName?: string);
    private createContext;
    add(plugin: IStoragePlugin): Promise<void>;
    remove(name: string): Promise<void>;
    get(name: string): IStoragePlugin | undefined;
    getAll(): IStoragePlugin[];
    initialize(): Promise<void>;
    destroy(): Promise<void>;
    executeBeforeSet<T>(value: T, metadata?: Record<string, any>): Promise<T>;
    executeAfterSet<T>(key: StorageKeyType, value: T, metadata?: Record<string, any>): Promise<T>;
    executeBeforeGet(key: StorageKeyType, metadata?: Record<string, any>): Promise<StorageKeyType>;
    executeAfterGet<T>(key: StorageKeyType, value: T | undefined, metadata?: Record<string, any>): Promise<T | undefined>;
    executeBeforeDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<boolean>;
    executeAfterDelete(key: StorageKeyType, metadata?: Record<string, any>): Promise<void>;
    executeOnClear(metadata?: Record<string, any>): Promise<void>;
}

declare class LocalStorage<T extends Record<string, any>> extends BaseStorage<T> {
    constructor(config: StorageConfig, pluginExecutor?: IPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger);
    protected doInitialize(): Promise<this>;
    protected doGet(key: StorageKeyType): Promise<any>;
    protected doSet(key: StorageKeyType, value: any): Promise<void>;
    protected doDelete(key: StorageKeyType): Promise<boolean>;
    protected doUpdate(updates: Array<{
        key: StorageKeyType;
        value: any;
    }>): Promise<void>;
    protected doClear(): Promise<void>;
    protected doKeys(): Promise<string[]>;
    protected doHas(key: StorageKeyType): Promise<boolean>;
    private getAllKeys;
    protected doDestroy(): Promise<void>;
}

declare class MemoryStorage<T extends Record<string, any>> extends BaseStorage<T> {
    private storage;
    constructor(config: StorageConfig, pluginExecutor?: IPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger);
    protected doInitialize(): Promise<this>;
    protected doGet(key: StorageKeyType): Promise<any>;
    protected doSet(key: StorageKeyType, value: any): Promise<void>;
    protected doDelete(key: StorageKeyType): Promise<boolean>;
    protected doUpdate(updates: Array<{
        key: StorageKeyType;
        value: any;
    }>): Promise<void>;
    protected doClear(): Promise<void>;
    protected doKeys(): Promise<string[]>;
    protected doHas(key: StorageKeyType): Promise<boolean>;
    protected doDestroy(): Promise<void>;
    private getAllKeys;
}

declare class SelectorModule<S extends Record<string, any>> implements ISelectorModule<S> {
    private readonly source;
    private readonly logger?;
    storageName: string;
    private subscriptions;
    private cachedState?;
    private localSelectorCache;
    private batchUpdateInProgress;
    private pendingUpdates;
    constructor(source: IStorage<S>, logger?: ILogger | undefined);
    /**
     * Генерирует имя для селектора на основе его типа и функции
     */
    private generateName;
    /**
     * Обрабатывает отложенные обновления, чтобы избежать каскадных уведомлений
     */
    private processPendingUpdates;
    createSelector<T>(selector: Selector<S, T>, options?: SelectorOptions<T>): SelectorAPI<T>;
    createSelector<Deps extends unknown[], T>(dependencies: {
        [K in keyof Deps]: SelectorAPI<Deps[K]>;
    }, resultFn: (...args: Deps) => T, options?: SelectorOptions<T>): SelectorAPI<T>;
    private createSimpleSelector;
    private createCombinedSelector;
    destroy(): void;
}

export { IEventEmitter, ILogger, IPluginExecutor, IPluginManager, ISelectorModule, IStorage, IStoragePlugin, LocalStorage, MemoryStorage, Middleware, SelectorAPI, SelectorModule, StorageConfig, StorageKeyType, StoragePluginModule, StorageType, broadcastMiddleware };
