import { Accessor, PathOrAccessor, ObservableStore, MaxDepth, SafePaths, MetaData, MetaWeakMap } from './types';
/**
 * Возвращает строку пути в точечной нотации на основе переданной функции.
 * Первый аргумент функции интерпретируется как store, второй (если есть) — как функция-хелпер.
 * Поддерживает произвольные имена аргументов.
 *
 * @param store Объект, из которого строится путь
 * @param fn Стрелочная функция вида:
 *   - ($, t) => $.foo[t(bar),t(42)]
 *   - (obj) => obj.foo.bar
 *   - (u, helper) => u.arr[helper(0)]
 * @returns Строка вида "foo.123.456" или "arr.0"
 */
export declare function getStringOfObject<T, D extends number = MaxDepth>(store: T, fn: Accessor<T>): SafePaths<T, D>;
/**
 * Проверяет, является ли «путь» валидным (строка или Accessor-функция).
 * Если нет — бросает ошибку.
 */
export declare function validatePath(path: unknown): asserts path is string | Accessor<any>;
/**
 * Возвращает корректную dot-notation-строку из:
 * - строки (оставляем как есть);
 * - стрелочной функции-доступа (парсим через getStringOfObject),
 *   после чего обрезаем всё до и включая "$." или "state." (если есть),
 *   даже если "state" встречается внутри, например "store.state.user.name".
 *
 * Например:
 *   "store.$.settings.name"      → "settings.name"
 *   "$.items.0.value"            → "items.0.value"
 *   "store.state.user.name"      → "user.name"
 *   "state.app.config"           → "app.config"
 *   "my.store.state.deep.key"    → "deep.key"
 *
 * @param path Строка или Accessor-функция
 */
export declare function getStringPath<T extends object>(store: T, path: string | Accessor<any>): string;
/**
 * Приводит PathOrAccessor к “одиночной” строке.
 *
 * Теперь, если мы видим функцию, чьё имя первого аргумента — "t",
 * считаем её Accessor’ом и разбираем через getStringPath.
 * Если же имя первого аргумента — что-то другое (например, "store" или "prevState"),
 * считаем, что это функция вида (store) => строка, вызываем её и берём результат.
 */
export declare function normalizeCacheKey<T, D extends number = MaxDepth>(cacheKey: PathOrAccessor<T, D>, store: ObservableStore<T, D>): string;
/**
 * Плоское сравнение (shallow) двух значений (примитивов или простых объектов).
 */
export declare function shallowEqual(a: any, b: any): boolean;
/**
 * Разбивает dot-notation-строку на массив сегментов.
 * Например, "a.b.0.c" → ["a", "b", 0, "c"]
 */
export declare function splitPath(path: string): (string | number)[];
export declare function isArrayMethod(name: string, names?: string[]): boolean;
export declare function withMetaSupport<T>(target: T, cb: () => void | any): any;
export declare function setMetaData<T extends object>(metaMap: MetaWeakMap, target: T, meta: MetaData): void;
export declare function getMetaData<T extends object>(metaMap: MetaWeakMap, target: T): MetaData | undefined;
export declare function deleteMetaData<T extends object>(metaMap: MetaWeakMap, target: T): void;
export declare function wrapWithMetaUsingUUID(metaMap: MetaWeakMap, target: any): any;
export declare function calculateSnapshotHash(obj: any): string | false;
export declare function stringify(root: any): string;
export declare function detRandomId(): string;
