UNPKG

cs-element

Version:

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

264 lines 11.4 kB
/** * Интерфейсы для системы Live queries (реактивных запросов) */ import { CSElement } from '../core/CSElement'; import { ICSElement } from './interfaces'; export interface QueryOptions { /** Максимальное количество результатов */ limit?: number; /** Смещение для пагинации */ offset?: number; /** Включать дочерние элементы */ includeChildren?: boolean; /** Максимальная глубина поиска */ maxDepth?: number; /** Сортировка результатов */ sort?: 'name' | 'index' | 'depth' | 'createdAt'; /** Порядок сортировки */ order?: 'asc' | 'desc'; /** Кэширование результатов */ cache?: boolean; /** Время жизни кэша (мс) */ cacheTTL?: number; /** Корневой элемент для поиска */ root?: ICSElement; /** Глубокий поиск (для некоторых движков) */ deep?: boolean; } export interface QueryResult<T = any> { /** Найденные элементы */ items: T[]; /** Общее количество найденных элементов */ total: number; /** Время выполнения запроса */ executionTime: number; /** Использовался ли кэш */ fromCache: boolean; /** Метаданные запроса */ metadata?: { selector: string; options: QueryOptions; timestamp: number; }; } export type LiveQueryCallback<T = any> = (results: T[], query: LiveQuery<T>) => void; export type LiveQueryErrorCallback = (error: Error, query: LiveQuery) => void; export type LiveQueryFilter<T = any> = (item: T) => boolean; export type LiveQueryTransform<T = any, R = any> = (item: T) => R; export type LiveQuerySort<T = any> = (a: T, b: T) => number; export interface LiveQueryConfig { /** Автоматический запуск при создании */ autoStart?: boolean; /** Дебаунс для обновлений (мс) */ debounce?: number; /** Максимальное количество результатов */ limit?: number; /** Кэширование результатов */ cache?: boolean; /** Время жизни кэша (мс) */ cacheTTL?: number; /** Глубокое наблюдение за изменениями */ deep?: boolean; /** Пакетная обработка обновлений */ batch?: boolean; } export interface LiveQuery<T = any> { /** Уникальный ID запроса */ id: string; /** Селектор запроса */ selector: string; /** Опции запроса */ options: QueryOptions; /** Конфигурация live query */ config: LiveQueryConfig; /** Текущие результаты */ results: T[]; /** Активен ли запрос */ active: boolean; /** Время последнего обновления */ lastUpdated: number; /** Количество обновлений */ updateCount: number; /** Наблюдаемые элементы */ watchedElements: Set<string>; /** Фильтры */ filters: LiveQueryFilter<T>[]; /** Трансформации */ transforms: LiveQueryTransform<T, any>[]; /** Сортировка */ sort?: LiveQuerySort<T>; /** Callback для результатов */ onResults?: LiveQueryCallback<T>; /** Callback для ошибок */ onError?: LiveQueryErrorCallback; } export interface LiveQueryManager { /** Создать live query */ createLiveQuery<T = any>(selector: string, options?: QueryOptions, config?: LiveQueryConfig): LiveQuery<T>; /** Запустить live query */ start(queryId: string): void; /** Остановить live query */ stop(queryId: string): void; /** Получить live query по ID */ getLiveQuery(queryId: string): LiveQuery | undefined; /** Получить все live queries */ getAllLiveQueries(): LiveQuery[]; /** Удалить live query */ removeLiveQuery(queryId: string): boolean; /** Обновить результаты запроса */ updateQuery(queryId: string): void; /** Обновить все активные запросы */ updateAllQueries(): void; /** Добавить фильтр к запросу */ addFilter<T>(queryId: string, filter: LiveQueryFilter<T>): void; /** Удалить фильтр из запроса */ removeFilter(queryId: string, filterIndex: number): void; /** Добавить трансформацию к запросу */ addTransform<T, R>(queryId: string, transform: LiveQueryTransform<T, R>): void; /** Установить сортировку для запроса */ setSort<T>(queryId: string, sort: LiveQuerySort<T>): void; /** Подписаться на результаты запроса */ subscribe<T>(queryId: string, callback: LiveQueryCallback<T>): string; /** Отписаться от результатов запроса */ unsubscribe(queryId: string, subscriptionId: string): boolean; /** Получить статистику live queries */ getStats(): LiveQueryStats; /** Очистить все live queries */ clear(): void; /** Уведомить об изменении элемента */ notifyElementChange(element: CSElement, changeType: 'create' | 'update' | 'delete'): void; /** Уведомить об изменении данных элемента */ notifyDataChange(element: CSElement, key: string, newValue: any, oldValue: any): void; /** Подписаться на события */ on(event: string, callback: LiveQueryEventCallback): this; /** Отписаться от событий */ off(event: string, callback: LiveQueryEventCallback): this; } export interface LiveQueryStats { /** Общее количество live queries */ totalQueries: number; /** Количество активных queries */ activeQueries: number; /** Общее количество обновлений */ totalUpdates: number; /** Среднее время выполнения запроса */ averageQueryTime: number; /** Использование памяти */ memoryUsage: number; /** Количество наблюдаемых элементов */ watchedElements: number; /** Статистика по селекторам */ selectorStats: Map<string, SelectorStats>; } export interface SelectorStats { /** Селектор */ selector: string; /** Количество запросов с этим селектором */ queryCount: number; /** Среднее количество результатов */ averageResults: number; /** Время последнего использования */ lastUsed: number; /** Общее время выполнения */ totalExecutionTime: number; } export interface LiveQuerySubscription { /** ID подписки */ id: string; /** ID запроса */ queryId: string; /** Callback */ callback: LiveQueryCallback; /** Активна ли подписка */ active: boolean; /** Время создания */ createdAt: number; } export interface LiveQueryEvent { /** Тип события */ type: 'query-created' | 'query-started' | 'query-stopped' | 'query-updated' | 'query-removed' | 'results-changed'; /** ID запроса */ queryId: string; /** Данные события */ data?: any; /** Временная метка */ timestamp: number; } export type LiveQueryEventCallback = (event: LiveQueryEvent) => void; export interface LiveQueryBuilder<T = any> { /** Установить селектор */ selector(selector: string): LiveQueryBuilder<T>; /** Установить опции запроса */ options(options: QueryOptions): LiveQueryBuilder<T>; /** Установить конфигурацию */ config(config: LiveQueryConfig): LiveQueryBuilder<T>; /** Добавить фильтр */ filter(filter: LiveQueryFilter<T>): LiveQueryBuilder<T>; /** Добавить трансформацию */ transform<R>(transform: LiveQueryTransform<T, R>): LiveQueryBuilder<R>; /** Установить сортировку */ sort(sort: LiveQuerySort<T>): LiveQueryBuilder<T>; /** Установить лимит */ limit(limit: number): LiveQueryBuilder<T>; /** Установить дебаунс */ debounce(ms: number): LiveQueryBuilder<T>; /** Включить кэширование */ cache(ttl?: number): LiveQueryBuilder<T>; /** Подписаться на результаты */ subscribe(callback: LiveQueryCallback<T>): LiveQueryBuilder<T>; /** Подписаться на ошибки */ onError(callback: LiveQueryErrorCallback): LiveQueryBuilder<T>; /** Создать и запустить запрос */ start(): LiveQuery<T>; /** Создать запрос без запуска */ build(): LiveQuery<T>; } export interface LiveQueryOptimizer { /** Оптимизировать запрос */ optimizeQuery(query: LiveQuery): LiveQuery; /** Объединить похожие запросы */ mergeQueries(queries: LiveQuery[]): LiveQuery[]; /** Предложить индексы для оптимизации */ suggestIndexes(queries: LiveQuery[]): string[]; /** Анализировать производительность */ analyzePerformance(query: LiveQuery): QueryPerformanceAnalysis; } export interface QueryPerformanceAnalysis { /** ID запроса */ queryId: string; /** Время выполнения */ executionTime: number; /** Количество проверенных элементов */ elementsScanned: number; /** Количество результатов */ resultsCount: number; /** Эффективность (результаты/проверенные) */ efficiency: number; /** Рекомендации по оптимизации */ recommendations: string[]; /** Предлагаемые индексы */ suggestedIndexes: string[]; } export interface LiveQueryIndex { /** Имя индекса */ name: string; /** Поля для индексации */ fields: string[]; /** Тип индекса */ type: 'btree' | 'hash' | 'text' | 'compound'; /** Индексированные значения */ values: Map<string, Set<string>>; /** Статистика использования */ stats: IndexStats; } export interface IndexStats { /** Количество использований */ usageCount: number; /** Время последнего использования */ lastUsed: number; /** Размер индекса */ size: number; /** Эффективность индекса */ efficiency: number; } //# sourceMappingURL=live-query-interfaces.d.ts.map