UNPKG

cs-element

Version:

Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support

272 lines 12.1 kB
/** * Интерфейсы для системы реактивности и 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