UNPKG

@qtpy/state-management-observable

Version:

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

81 lines (80 loc) 5.17 kB
import { Accessor, PathOrAccessor, ObservableStore, MaxDepth, SafePaths, MetaData, MetaWeakMap, SSRStore } 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 | undefined, target: T, meta: MetaData, primitiveMetaMap?: Map<string, MetaData>, path?: string): void; export declare function getMetaData<T extends object>(metaMap: WeakMap<object, MetaData>, target: T, primitiveMetaMap?: Map<string, MetaData>, path?: string): MetaData | undefined; export declare function deleteMetaData<T extends object>(metaMap: WeakMap<object, MetaData>, target: T, primitiveMetaMap?: Map<string, MetaData>, path?: string): void; export declare function calculateSnapshotHash(obj: any): string | false; export declare function getRandomId(): string; export declare const getCheckIsSSR: () => boolean; export declare function ssrStore<T extends object, D extends number = 0>(store: SSRStore<T, D>, ssrStoreId?: string): SSRStore<T, D>; export declare function isPathValid(state: any, path: string): boolean; export declare function getByPath(obj: any, path: string): any; export declare class WrapArray extends Array { constructor(...args: any[]); } export declare function wrapArrayMethods(node: any, metaMap: WeakMap<object, MetaData>): any; export declare class WrapObject extends Object { constructor(...args: any[]); } export declare function wrapObjectMethods(node: object, metaMap: WeakMap<object, MetaData>): object; export declare function wrapNode(node: any, parent: any, key: string | number | null, metaMap: WeakMap<object, MetaData>): any; export declare function iterateObjectTree(obj: any, showPrimitive?: boolean, visited?: WeakSet<WeakKey>, currentPath?: string, parent?: any, parentKey?: string | number | null): IterableIterator<{ node: any; path: string; parent: any; key: string | number | null; }>;