UNPKG

@qtpy/state-management-observable

Version:

1. [Основная идея и архитектура](#основная-идея-и-архитектура) 1.1. [Прозрачная реактивность](#прозрачная-реактивность) 1.2. [Поддержка типизированных строковых ключей](#поддержка-типизированных-строковых-ключей) 1.3. [Подписки с «гранул

64 lines (63 loc) 4 kB
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;