cs-element
Version:
Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support
272 lines • 12.1 kB
TypeScript
/**
* Интерфейсы для системы реактивности и computed свойств
*/
export type ComputedFunction<T = any> = () => T;
export type WatchCallback<T = any> = (newValue: T, oldValue: T, path: string[]) => void;
export type ReactiveCallback = () => void;
export type DisposeFn = () => void;
export interface ComputedProperty<T = any> {
/** Уникальный ID computed свойства */
id: string;
/** Функция вычисления */
compute: ComputedFunction<T>;
/** Зависимости (пути к свойствам) */
dependencies: Set<string>;
/** Кэшированное значение */
cachedValue: T;
/** Флаг валидности кэша */
isValid: boolean;
/** Временная метка последнего обновления */
lastUpdated: number;
/** Конфигурация */
config: ComputedConfig;
/** Родительский computed (для auto-dispose) */
parent?: string;
/** Дочерние computed и watchers (для auto-dispose) */
children: Set<string>;
/** Функция очистки */
dispose?: DisposeFn;
/** Флаг - был ли disposed */
isDisposed: boolean;
}
export interface ComputedConfig {
/** Ленивое вычисление (вычислять только при обращении) */
lazy?: boolean;
/** Кэширование результата */
cache?: boolean;
/** Время жизни кэша в миллисекундах */
ttl?: number;
/** Максимальная глубина отслеживания зависимостей */
maxDepth?: number;
/** Отладочная информация */
debug?: boolean;
/** Родительский контекст для auto-dispose */
parent?: string;
/** Автоматическая очистка при пересоздании родителя */
autoDispose?: boolean;
}
export interface ReactiveProperty {
/** Путь к свойству */
path: string[];
/** Список наблюдателей */
watchers: Set<ReactiveWatcher>;
/** Список computed свойств, зависящих от этого */
computedDependents: Set<string>;
/** Значение по умолчанию */
defaultValue?: any;
/** Валидатор значения */
validator?: (value: any) => boolean;
}
export interface ReactiveWatcher {
/** Уникальный ID наблюдателя */
id: string;
/** Путь к отслеживаемому свойству */
path: string[];
/** Callback функция */
callback: WatchCallback;
/** Конфигурация наблюдателя */
config: WatcherConfig;
/** Активен ли наблюдатель */
active: boolean;
/** Родительский computed (для auto-dispose) */
parent?: string;
/** Дочерние watchers (для auto-dispose) */
children: Set<string>;
/** Функция очистки */
dispose?: DisposeFn;
/** Флаг - был ли disposed */
isDisposed: boolean;
}
export interface WatcherConfig {
/** Немедленный вызов при создании */
immediate?: boolean;
/** Глубокое отслеживание объектов */
deep?: boolean;
/** Отслеживание только изменений значения (не ссылки) */
flush?: 'sync' | 'async' | 'post';
/** Максимальное количество вызовов */
maxCalls?: number;
/** Отладочная информация */
debug?: boolean;
/** Родительский контекст для auto-dispose */
parent?: string;
/** Автоматическая очистка при пересоздании родителя */
autoDispose?: boolean;
}
/**
* Контекст выполнения для отслеживания иерархии
*/
export interface ReactiveContext {
/** ID текущего выполняющегося computed */
currentComputed?: string;
/** ID текущего выполняющегося watcher */
currentWatcher?: string;
/** Стек выполнения для вложенных computed */
computedStack: string[];
/** Стек выполнения для вложенных watchers */
watcherStack: string[];
/** Функции очистки для текущего контекста */
cleanupFns: DisposeFn[];
}
/**
* Область видимости для auto-dispose
*/
export interface ReactiveScope {
/** ID области видимости */
id: string;
/** Все computed в этой области */
computedProperties: Set<string>;
/** Все watchers в этой области */
watchers: Set<string>;
/** Родительская область */
parent?: string;
/** Дочерние области */
children: Set<string>;
/** Функция очистки всей области */
dispose: DisposeFn;
/** Флаг - была ли disposed */
isDisposed: boolean;
}
export interface ReactivityManager {
/** Создать computed свойство */
computed<T>(compute: ComputedFunction<T>, config?: ComputedConfig): ComputedProperty<T>;
/** Создать наблюдатель */
watch(path: string | string[], callback: WatchCallback, config?: WatcherConfig): ReactiveWatcher;
/** Удалить наблюдатель */
unwatch(watcherId: string): boolean;
/** Получить значение computed свойства */
getComputedValue<T>(computedId: string): T | undefined;
/** Инвалидировать computed свойство */
invalidateComputed(computedId: string): void;
/** Инвалидировать все computed свойства, зависящие от пути */
invalidateByPath(path: string[]): void;
/** Уведомить об изменении свойства */
notify(path: string[], newValue: any, oldValue: any): void;
/** Создать реактивную ссылку */
ref<T>(value: T): ReactiveRef<T>;
/** Создать реактивный объект */
reactive<T extends object>(obj: T): T;
/** Получить все зависимости computed свойства */
getDependencies(computedId: string): string[];
/** Получить граф зависимостей */
getDependencyGraph(): DependencyGraph;
/** Очистить все computed свойства и наблюдатели */
clear(): void;
/** Получить статистику */
getStats(): ReactivityStats;
/** Подписаться на события */
on(event: ReactivityEvent, callback: ReactivityEventCallback): this;
/** Отписаться от событий */
off(event: ReactivityEvent, callback: ReactivityEventCallback): this;
/** Создать новую область видимости */
createScope(parentId?: string): ReactiveScope;
/** Выполнить функцию в контексте области видимости */
runInScope<T>(scopeId: string, fn: () => T): T;
/** Очистить область видимости и все её дочерние элементы */
disposeScope(scopeId: string): void;
/** Очистить computed и все его дочерние элементы */
disposeComputed(computedId: string): void;
/** Очистить watcher и все его дочерние элементы */
disposeWatcher(watcherId: string): void;
/** Получить текущий контекст выполнения */
getCurrentContext(): ReactiveContext;
/** Установить родителя для auto-dispose */
setParent(childId: string, parentId: string, type: 'computed' | 'watcher'): void;
/** Получить всех детей элемента */
getChildren(parentId: string, type?: 'computed' | 'watcher'): string[];
/** Проверить, был ли элемент disposed */
isDisposed(id: string, type: 'computed' | 'watcher'): boolean;
}
export interface ReactiveRef<T = any> {
/** Текущее значение */
value: T;
/** Уникальный ID ссылки */
readonly id: string;
/** Список наблюдателей */
readonly watchers: Set<ReactiveWatcher>;
/** Родительский контекст */
parent?: string;
/** Функция очистки */
dispose?: DisposeFn;
/** Флаг - был ли disposed */
isDisposed: boolean;
}
export interface DependencyGraph {
/** Узлы графа (свойства) */
nodes: Map<string, DependencyNode>;
/** Рёбра графа (зависимости) */
edges: Map<string, Set<string>>;
}
export interface DependencyNode {
/** Путь к свойству */
path: string[];
/** Тип узла */
type: 'property' | 'computed' | 'ref';
/** Количество зависимых узлов */
dependentCount: number;
/** Количество зависимостей */
dependencyCount: number;
}
export interface ReactivityStats {
/** Количество computed свойств */
computedCount: number;
/** Количество активных наблюдателей */
watcherCount: number;
/** Количество реактивных ссылок */
refCount: number;
/** Количество уведомлений за последнюю секунду */
notificationsPerSecond: number;
/** Среднее время вычисления computed свойств */
averageComputeTime: number;
/** Использование памяти */
memoryUsage: number;
/** Количество активных областей видимости */
scopeCount: number;
/** Количество disposed элементов */
disposedCount: number;
}
export interface ReactivityConfig {
/** Максимальное количество computed свойств */
maxComputed?: number;
/** Максимальное количество наблюдателей */
maxWatchers?: number;
/** Время жизни кэша по умолчанию */
defaultTTL?: number;
/** Максимальная глубина отслеживания */
maxDepth?: number;
/** Батчинг уведомлений */
batchNotifications?: boolean;
/** Размер батча */
batchSize?: number;
/** Отладочный режим */
debug?: boolean;
/** Включить auto-dispose по умолчанию */
autoDispose?: boolean;
/** Максимальная глубина иерархии для auto-dispose */
maxDisposeDepth?: number;
/** Предупреждать о потенциальных утечках памяти */
warnMemoryLeaks?: boolean;
}
export type ReactivityEvent = 'computed-created' | 'computed-updated' | 'computed-invalidated' | 'computed-disposed' | 'watcher-created' | 'watcher-triggered' | 'watcher-removed' | 'watcher-disposed' | 'property-changed' | 'dependency-added' | 'dependency-removed' | 'scope-created' | 'scope-disposed' | 'memory-leak-detected';
export interface ReactivityEventData {
event: ReactivityEvent;
timestamp: number;
computedId?: string;
watcherId?: string;
scopeId?: string;
path?: string[];
newValue?: any;
oldValue?: any;
dependencies?: string[];
parent?: string;
children?: string[];
memoryUsage?: number;
leakInfo?: {
type: 'computed' | 'watcher' | 'scope';
id: string;
age: number;
dependencies: number;
};
}
export type ReactivityEventCallback = (data: ReactivityEventData) => void;
//# sourceMappingURL=reactivity-interfaces.d.ts.map