@qtpy/state-management-observable
Version:
1. [Основная идея и архитектура](#основная-идея-и-архитектура) 1.1. [Прозрачная реактивность](#прозрачная-реактивность) 1.2. [Поддержка типизированных строковых ключей](#поддержка-типизированных-строковых-ключей) 1.3. [Подписки с «гранул
81 lines (80 loc) • 5.17 kB
TypeScript
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;
}>;