import { BaseStorageConfig, IEventEmitter, ILogger, IStorageBase, StorageEvent, StorageInitStatus, StorageType } from '../storage.interface';
import { StorageKeyType } from '../utils/storage-key';
export type PathSelector<T, R> = (state: T) => R;
/**
 * Общая константа для глобальной подписки.
 * Используется в StorageCore и наследниках.
 */
export declare const GLOBAL_SUBSCRIPTION_KEY = "*";
/**
 * Абстрактный базовый класс с общей инфраструктурой хранилища.
 *
 * Содержит: status management, subscriptions, lifecycle wrappers,
 * state cache, event emission, singleton cleanup.
 *
 * Не содержит: middleware, plugin executor, do* методы, публичные CRUD-операции.
 */
export declare abstract class StorageCore<T extends Record<string, any>> implements IStorageBase<T> {
    protected readonly coreConfig: BaseStorageConfig<T>;
    protected readonly eventEmitter?: IEventEmitter | undefined;
    protected readonly logger?: ILogger | undefined;
    name: string;
    abstract readonly type: StorageType;
    /**
     * Синхронное ли хранилище — задаётся в SyncBaseStorage/AsyncBaseStorage.
     * Опциональный (не abstract): внешние кастомные адаптеры, наследующие StorageCore
     * и скомпилированные против прежней minor-версии, не обязаны его объявлять (R4).
     */
    readonly isSync?: boolean;
    private _initStatus;
    private _isDestroyed;
    private statusSubscribers;
    protected subscribers: Map<StorageKeyType, Set<(value: any) => void>>;
    protected _stateCache: T;
    constructor(coreConfig: BaseStorageConfig<T>, eventEmitter?: IEventEmitter | undefined, logger?: ILogger | undefined);
    get initStatus(): StorageInitStatus;
    waitForReady(): Promise<this>;
    onStatusChange(callback: (status: StorageInitStatus) => void): VoidFunction;
    protected updateInitStatus(update: Partial<StorageInitStatus>): void;
    protected ensureReady(): void;
    getStateSync(): T;
    subscribeToAll(callback: (event: {
        type: string;
        key?: StorageKeyType[] | StorageKeyType;
        value?: any;
        changedPaths?: string[];
    }) => void): VoidFunction;
    subscribe(key: string, callback: (value: any) => void): VoidFunction;
    subscribe<R>(pathSelector: PathSelector<T, R>, callback: (value: R) => void): VoidFunction;
    protected abstract subscribeByKey(key: string, callback: (value: any) => void): VoidFunction;
    protected abstract subscribeBySelector<R>(pathSelector: PathSelector<T, R>, callback: (value: R) => void): VoidFunction;
    /**
     * Хук изменения ключа. По умолчанию no-op.
     * Async-хранилища переопределяют для защиты от race condition в subscribeByKey
     * (см. AsyncBaseStorage). Sync версии не нужен — get() синхронный.
     */
    protected trackKeyVersion(_keyStr: string): void;
    protected notifySubscribers(key: StorageKeyType, value: any): void;
    initialize(): Promise<this>;
    /**
     * Subclass-specific initialization.
     * Called inside initialize() wrapper after status is set to LOADING.
     */
    protected abstract performInitialize(): Promise<void>;
    /**
     * Синхронный аналог {@link performInitialize} — реализуется только синхронными
     * хранилищами (Memory/LocalStorage, см. {@link SyncBaseStorage}). Async-хранилища
     * (IndexedDB/worker) его НЕ объявляют → {@link initializeSync} у них бросит.
     */
    protected performInitializeSync?(): void;
    /**
     * Синхронная инициализация: доводит хранилище до `READY` в пределах одного тика, без
     * `await`. Нужна для SSR — синхронного построения «пустого» стора из `initialState`
     * (см. `createSynapse` → `buildSyncShell`). Доступна только на sync-хранилищах;
     * у async-хранилищ бросает понятную ошибку.
     */
    initializeSync(): this;
    destroy(): Promise<void>;
    /**
     * Subclass-specific cleanup during destroy.
     * Should clear storage data, call doDestroy, cleanup middlewares.
     */
    protected abstract performCleanup(): Promise<void>;
    protected emitEvent(event: StorageEvent): Promise<void>;
}
