cs-element
Version:
Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support
720 lines • 27.5 kB
TypeScript
import { EventEmitter } from 'eventemitter3';
import { ICSElement, ICSElementPattern, ElementOptions, ElementValue, SerializationOptions, SerializedElement, ValidationResult, QuerySelector } from '../types/interfaces';
import { CSElementPlugin, PluginOptions, PluginManager } from '../types/plugin-interfaces';
import { HistoryManager, HistoryConfig } from '../types/history-interfaces';
import { ReactivityManager, ReactivityConfig, ComputedProperty, ReactiveWatcher, ReactiveRef, ComputedFunction, WatchCallback, ComputedConfig, WatcherConfig } from '../types/reactivity-interfaces';
import { LiveQueryManager, LiveQuery, LiveQueryConfig, LiveQueryBuilder, LiveQueryCallback, QueryOptions } from '../types/live-query-interfaces';
import { GraphAlgorithmsManager } from '../types/graph-interfaces';
import { PersistenceManager } from '../types/persistence-interfaces';
import { ElementValidator } from '../utils/Validator';
/**
* Основная реализация CSElement
* Потокобезопасный класс для работы с графовыми структурами
*/
export declare class CSElement extends EventEmitter implements ICSElement {
private _id;
private _name;
private _index;
private _data;
private _elements;
private _elementsByIndex;
private _owners;
private _mainOwner;
private _lock;
private _lastElement;
/**
* Получить количество всех элементов в системе
*/
static get totalElementsCount(): number;
/**
* Получить все элементы из глобального реестра
*/
static getAllElements(): CSElement[];
constructor(name?: string, options?: ElementOptions);
get id(): string;
get name(): string;
get index(): number;
get data(): ReadonlyMap<string, any>;
get mainOwner(): ICSElementPattern | null;
get lastElement(): ICSElement | null;
/**
* Получить владельца по имени или индексу
*/
getOwner(nameOrIndex: string | number): ICSElementPattern | null;
/**
* Асинхронно получить владельца
*/
getOwnerAsync(nameOrIndex: string | number): Promise<ICSElementPattern | null>;
/**
* Получить элемент по имени или индексу
*/
getElement(nameOrIndex: string | number): ICSElementPattern | null;
/**
* Асинхронно получить элемент
*/
getElementAsync(nameOrIndex: string | number): Promise<ICSElementPattern | null>;
/**
* Получить относительный индекс для владельца
*/
getRelativeIndex(owner: ICSElementPattern): number;
/**
* Количество дочерних элементов
*/
elementsCount(): number;
/**
* Количество владельцев
*/
ownersCount(): number;
/**
* Получить все дочерние элементы
*/
getAllElements(): ReadonlyArray<ICSElementPattern>;
/**
* Получить всех владельцев
*/
getAllOwners(): ReadonlyArray<ICSElementPattern>;
/**
* Проверяет наличие дочернего элемента по имени или индексу
*/
hasElement(nameOrIndex: string | number): boolean;
/**
* Добавить новый элемент
*/
addElement(value: ElementValue, options?: ElementOptions): Promise<ICSElement>;
/**
* Удалить элемент
*/
removeElement(nameOrIndex: string | number | ICSElement): Promise<boolean>;
/**
* Установить данные
*/
setData(key: string, value: any): Promise<void>;
/**
* Получить данные
*/
getData(key: string): any;
/**
* Удалить данные
*/
deleteData(key: string): Promise<boolean>;
/**
* Войти в блокировку
*/
enterLock(): Promise<void>;
/**
* Выйти из блокировки
*/
leaveLock(): Promise<void>;
/**
* Проверить заблокирован ли элемент
*/
isLocked(): boolean;
/**
* Добавить себя как дочерний элемент к другому элементу
*/
addTo(owner: CSElement, options?: ElementOptions): Promise<ICSElement>;
/**
* Удалить себя из владельца
*/
removeFrom(owner: CSElement): Promise<boolean>;
/**
* Установить имя элемента (fluent API)
*/
setName(name: string): this;
/**
* Установить индекс элемента (fluent API)
*/
setIndex(index: number): this;
/**
* Добавить данные (fluent API)
*/
withData(key: string, value: any): this;
/**
* Добавить несколько данных сразу (fluent API)
*/
withDataObject(data: Record<string, any>): this;
/**
* Добавить дочерний элемент (fluent API)
*/
withChild(nameOrElement: string | CSElement, options?: ElementOptions): this;
/**
* Добавить несколько дочерних элементов (fluent API)
*/
withChildren(...names: string[]): this;
/**
* Создать новый элемент с fluent API
*/
static create(name?: string, options?: ElementOptions): CSElement;
/**
* Найти элемент по ID глобально
*/
static getElementById(id: string): CSElement | null;
/**
* Найти все элементы по имени глобально
*/
static getElementsByName(name: string): CSElement[];
/**
* Установить плагин
*/
static use(plugin: CSElementPlugin, options?: PluginOptions): void;
/**
* Удалить плагин
*/
static uninstall(pluginName: string): boolean;
/**
* Получить менеджер плагинов
*/
static get plugins(): PluginManager;
/**
* Проверить, установлен ли плагин
*/
static hasPlugin(name: string): boolean;
/**
* Получить информацию о плагинах
*/
static getPluginInfo(): import("../types/plugin-interfaces").PluginInfo[];
/**
* Получить менеджер персистентности
*/
static get persistence(): PersistenceManager;
/**
* Сохранить элемент в хранилище
*/
save(adapterName?: string, options?: any): Promise<any>;
/**
* Загрузить элемент из хранилища и восстановить его состояние
*/
static load(elementId: string, adapterName?: string, options?: any): Promise<CSElement | null>;
/**
* Удалить элемент из хранилища
*/
deleteFromStorage(adapterName?: string, options?: any): Promise<any>;
/**
* Найти все элементы по условию
*/
findElements(predicate: (element: CSElement) => boolean): Promise<CSElement[]>;
/**
* Найти первый элемент по условию
*/
findElement(predicate: (element: CSElement) => boolean): Promise<CSElement | null>;
/**
* Обход всех элементов в глубину
*/
traverseDepthFirst(callback: (element: CSElement) => void | Promise<void>, includeThis?: boolean): Promise<void>;
/**
* Обход всех элементов в ширину
*/
traverseBreadthFirst(callback: (element: CSElement) => void | Promise<void>, includeThis?: boolean): Promise<void>;
/**
* Получить путь до элемента
*/
getPath(): string[];
/**
* Получить глубину элемента
*/
getDepth(): number;
/**
* Экспорт структуры в JSON
*/
toJSON(includeData?: boolean): any;
/**
* Клонировать элемент со всей структурой
*/
clone(deep?: boolean): Promise<CSElement>;
/**
* Удалить элемент из глобального реестра (вызывается при уничтожении)
*/
destroy(): void;
/**
* Получить статистику элемента
*/
getStats(): {
totalElements: number;
maxDepth: number;
totalData: number;
};
/**
* Проверить является ли элемент предком
*/
isAncestorOf(element: CSElement): boolean;
/**
* Проверить является ли элемент потомком
*/
isDescendantOf(element: CSElement): boolean;
/**
* Улучшенная сериализация с опциями
*/
serialize(options?: SerializationOptions): SerializedElement;
/**
* Десериализация из объекта
*/
static deserialize(data: SerializedElement): CSElement;
/**
* Валидирует элемент используя глобальный валидатор
*/
validate(elementType?: string): ValidationResult;
/**
* Валидирует элемент используя кастомный валидатор
*/
validateWith(validator: ElementValidator, elementType?: string): ValidationResult;
/**
* Поиск элементов по селектору
*/
query(selector: string | QuerySelector): CSElement[];
/**
* Поиск первого элемента по селектору
*/
queryOne(selector: string | QuerySelector): CSElement | null;
/**
* Проверяет, соответствует ли элемент селектору
*/
matches(selector: string | QuerySelector): boolean;
/**
* Создает селектор для поиска
*/
static createSelector(): import("../utils/QueryEngine").SelectorBuilder;
/**
* Получает предопределенные селекторы
*/
static get selectors(): {
byName: (name: string) => QuerySelector;
byIndex: (index: number) => QuerySelector;
leaves: () => QuerySelector;
roots: () => QuerySelector;
withChildrenCount: (count: number) => QuerySelector;
atDepth: (depth: number) => QuerySelector;
withDataType: (key: string, type: string) => QuerySelector;
};
/**
* Массовое обновление данных с валидацией
*/
updateData(updates: Record<string, any>, validate?: boolean): Promise<ValidationResult | null>;
/**
* Получает все данные как обычный объект
*/
getDataAsObject(): Record<string, any>;
/**
* Проверяет наличие данных по ключу
*/
hasData(key: string): boolean;
/**
* Получает размер данных
*/
getDataSize(): number;
/**
* Очищает все данные
*/
clearData(): Promise<void>;
/**
* Получить менеджер истории
*/
static get history(): HistoryManager;
/**
* Настроить систему истории
*/
static configureHistory(config: HistoryConfig): void;
/**
* Отменить последнюю операцию
*/
static undo(): Promise<any>;
/**
* Повторить отмененную операцию
*/
static redo(): Promise<any>;
/**
* Отменить до определенной операции
*/
static undoTo(operationId: string): Promise<any>;
/**
* Повторить до определенной операции
*/
static redoTo(operationId: string): Promise<any>;
/**
* Получить состояние истории
*/
static getHistoryState(): import("../types/history-interfaces").HistoryState;
/**
* Получить операции истории
*/
static getHistoryOperations(limit?: number): import("../types/history-interfaces").HistoryOperation[];
/**
* Получить снимки истории
*/
static getHistorySnapshots(limit?: number): import("../types/history-interfaces").HistorySnapshot[];
/**
* Создать снимок текущего состояния элемента
*/
createSnapshot(description?: string): import("../types/history-interfaces").HistorySnapshot;
/**
* Очистить историю
*/
static clearHistory(): void;
/**
* Экспорт истории
*/
static exportHistory(): import("../types/history-interfaces").HistoryExport;
/**
* Импорт истории
*/
static importHistory(data: any): void;
/**
* Подписка на события истории
*/
static onHistoryEvent(event: string, callback: Function): void;
/**
* Отписка от событий истории
*/
static offHistoryEvent(event: string, callback: Function): void;
private recordOperation;
/**
* Получить глобальный менеджер реактивности
*/
static get reactivity(): ReactivityManager;
/**
* Настроить систему реактивности
*/
static configureReactivity(config: ReactivityConfig): void;
/**
* Создать computed свойство
*/
static computed<T>(compute: ComputedFunction<T>, config?: ComputedConfig): ComputedProperty<T>;
/**
* Создать наблюдатель за изменениями
*/
static watch(path: string | string[], callback: WatchCallback, config?: WatcherConfig): ReactiveWatcher;
/**
* Удалить наблюдатель
*/
static unwatch(watcherId: string): boolean;
/**
* Получить значение computed свойства
*/
static getComputedValue<T>(computedId: string): T | undefined;
/**
* Создать реактивную ссылку
*/
static ref<T>(value: T): ReactiveRef<T>;
/**
* Создать реактивный объект
*/
static reactive<T extends object>(obj: T): T;
/**
* Получить граф зависимостей
*/
static getDependencyGraph(): import("../types/reactivity-interfaces").DependencyGraph;
/**
* Получить статистику реактивности
*/
static getReactivityStats(): import("../types/reactivity-interfaces").ReactivityStats;
/**
* Очистить все реактивные данные
*/
static clearReactivity(): void;
/**
* Подписаться на события реактивности
*/
static onReactivityEvent(event: string, callback: Function): void;
/**
* Отписаться от событий реактивности
*/
static offReactivityEvent(event: string, callback: Function): void;
/**
* Создать новую область видимости
*/
static createScope(parentId?: string): import("../types/reactivity-interfaces").ReactiveScope;
/**
* Выполнить функцию в контексте области видимости
*/
static runInScope<T>(scopeId: string, fn: () => T): T;
/**
* Очистить область видимости и все её дочерние элементы
*/
static disposeScope(scopeId: string): void;
/**
* Очистить computed и все его дочерние элементы
*/
static disposeComputed(computedId: string): void;
/**
* Очистить watcher и все его дочерние элементы
*/
static disposeWatcher(watcherId: string): void;
/**
* Получить текущий контекст выполнения
*/
static getCurrentContext(): import("../types/reactivity-interfaces").ReactiveContext;
/**
* Установить родителя для auto-dispose
*/
static setParent(childId: string, parentId: string, type: 'computed' | 'watcher'): void;
/**
* Получить всех детей элемента
*/
static getChildren(parentId: string, type?: 'computed' | 'watcher'): string[];
/**
* Проверить, был ли элемент disposed
*/
static isDisposed(id: string, type: 'computed' | 'watcher'): boolean;
/**
* Создать computed свойство для этого элемента
*/
computed<T>(compute: ComputedFunction<T>, config?: ComputedConfig): ComputedProperty<T>;
/**
* Создать наблюдатель за свойством этого элемента
*/
watch(property: string, callback: WatchCallback, config?: WatcherConfig): ReactiveWatcher;
/**
* Наблюдать за дочерними элементами
*/
watchChildren(callback: WatchCallback, config?: WatcherConfig): ReactiveWatcher;
/**
* Создать реактивную версию данных элемента
*/
makeReactive(): this;
private notifyDataChange;
private notifyChildrenChange;
/**
* Получить менеджер Live queries
*/
static get liveQueries(): LiveQueryManager;
/**
* Получить менеджер алгоритмов работы с графами
*/
static get graphAlgorithms(): GraphAlgorithmsManager;
/**
* Создать live query
*/
static createLiveQuery<T = any>(selector: string, options?: QueryOptions, config?: LiveQueryConfig): LiveQuery<T>;
/**
* Получить builder для live query
*/
static queryBuilder<T = any>(): LiveQueryBuilder<T>;
/**
* Подписаться на live query
*/
static subscribeLiveQuery<T>(queryId: string, callback: LiveQueryCallback<T>): string;
/**
* Отписаться от live query
*/
static unsubscribeLiveQuery(queryId: string, subscriptionId: string): boolean;
/**
* Запустить live query
*/
static startLiveQuery(queryId: string): void;
/**
* Остановить live query
*/
static stopLiveQuery(queryId: string): void;
/**
* Получить live query
*/
static getLiveQuery(queryId: string): LiveQuery | undefined;
/**
* Получить все live queries
*/
static getAllLiveQueries(): LiveQuery[];
/**
* Удалить live query
*/
static removeLiveQuery(queryId: string): boolean;
/**
* Получить статистику live query
*/
static getLiveQueryStats(): import("../types/live-query-interfaces").LiveQueryStats;
/**
* Очистить все live query
*/
static clearLiveQueries(): void;
/**
* Обновить все live query
*/
static updateAllLiveQueries(): void;
/**
* Подписаться на события live query
*/
static onLiveQueryEvent(callback: (event: any) => void): void;
/**
* Отписаться от событий live query
*/
static offLiveQueryEvent(callback: (event: any) => void): void;
/**
* Создать live query для дочерних элементов
*/
createChildrenLiveQuery<T = any>(selector?: string, options?: QueryOptions, config?: LiveQueryConfig): LiveQuery<T>;
/**
* Создать live query для всех потомков
*/
createDescendantsLiveQuery<T = any>(selector?: string, options?: QueryOptions, config?: LiveQueryConfig): LiveQuery<T>;
/**
* Наблюдать за дочерними элементами
*/
watchChildrenLive<T = any>(callback: LiveQueryCallback<T>, config?: LiveQueryConfig): LiveQuery<T>;
/**
* Наблюдать за элементами с определенными данными
*/
watchElementsWithData<T = any>(dataKey: string, callback: LiveQueryCallback<T>, config?: LiveQueryConfig): LiveQuery<T>;
/**
* Уведомить live query об изменении элемента
*/
private notifyElementChange;
/**
* Найти путь между узлами
*/
static findPath(from: CSElement, to: CSElement, options?: any): Promise<import("../types/graph-interfaces").PathResult | null>;
/**
* Найти кратчайший путь
*/
static findShortestPath(from: CSElement, to: CSElement, options?: any): Promise<import("../types/graph-interfaces").PathResult | null>;
/**
* Найти все пути
*/
static findAllPaths(from: CSElement, to: CSElement, options?: any): Promise<import("../types/graph-interfaces").PathResult[]>;
/**
* Обнаружить циклы
*/
static detectCycles(root: CSElement, options?: any): Promise<import("../types/graph-interfaces").CycleResult>;
/**
* Проверить наличие циклов
*/
static hasCycle(root: CSElement, options?: any): Promise<boolean>;
/**
* Найти цикл
*/
static findCycle(root: CSElement, options?: any): Promise<import("../types/graph-interfaces").GraphCycle | null>;
/**
* Найти компоненты связности
*/
static findConnectedComponents(root: CSElement, options?: any): Promise<import("../types/graph-interfaces").ComponentResult>;
/**
* Найти сильно связанные компоненты
*/
static findStronglyConnectedComponents(root: CSElement, options?: any): Promise<import("../types/graph-interfaces").ComponentResult>;
/**
* Проверить связность
*/
static isConnected(root: CSElement, options?: any): Promise<boolean>;
/**
* Построить представление графа
*/
static buildGraph(root: CSElement, options?: any): Promise<import("../types/graph-interfaces").GraphRepresentation>;
/**
* Проанализировать граф
*/
static analyzeGraph(root: CSElement, options?: any): Promise<import("../types/graph-interfaces").GraphAnalysisResult>;
/**
* Получить статистику графа
*/
static getGraphStatistics(root: CSElement, options?: any): Promise<import("../types/graph-interfaces").GraphStatistics>;
/**
* Получить расстояние между узлами
*/
static getDistance(from: CSElement, to: CSElement, options?: any): Promise<number>;
/**
* Получить соседей
*/
static getNeighbors(node: CSElement, options?: any): CSElement[];
/**
* Получить степень вершины
*/
static getDegree(node: CSElement, options?: any): number;
/**
* Топологическая сортировка
*/
static topologicalSort(root: CSElement, options?: any): Promise<string[]>;
/**
* Минимальное остовное дерево
*/
static minimumSpanningTree(root: CSElement, options?: any): Promise<import("../types/graph-interfaces").GraphRepresentation>;
/**
* Рассчитать центральность
*/
static calculateCentrality(root: CSElement, options?: any): Promise<Map<string, number>>;
/**
* Получить метрики производительности
*/
static getGraphAlgorithmMetrics(): import("../types/graph-interfaces").AlgorithmMetrics;
/**
* Очистить кэш алгоритмов
*/
static clearGraphAlgorithmCache(): void;
/**
* Настроить алгоритмы
*/
static configureGraphAlgorithms(config: any): void;
/**
* Подписаться на события
*/
static onGraphAlgorithmEvent(callback: (event: any) => void): void;
/**
* Отписаться от событий
*/
static offGraphAlgorithmEvent(callback: (event: any) => void): void;
/**
* Найти путь до другого элемента
*/
findPathTo(target: CSElement, options?: any): Promise<import("../types/graph-interfaces").PathResult | null>;
/**
* Найти кратчайший путь до другого элемента
*/
findShortestPathTo(target: CSElement, options?: any): Promise<import("../types/graph-interfaces").PathResult | null>;
/**
* Найти все пути до другого элемента
*/
findAllPathsTo(target: CSElement, options?: any): Promise<import("../types/graph-interfaces").PathResult[]>;
/**
* Обнаружить циклы начиная отсюда
*/
detectCyclesFromHere(options?: any): Promise<import("../types/graph-interfaces").CycleResult>;
/**
* Проверить наличие циклов отсюда
*/
hasCycleFromHere(options?: any): Promise<boolean>;
/**
* Найти компоненты связности отсюда
*/
findConnectedComponentsFromHere(options?: any): Promise<import("../types/graph-interfaces").ComponentResult>;
/**
* Проверить связность отсюда
*/
isConnectedFromHere(options?: any): Promise<boolean>;
/**
* Построить граф отсюда
*/
buildGraphFromHere(options?: any): Promise<import("../types/graph-interfaces").GraphRepresentation>;
/**
* Проанализировать граф отсюда
*/
analyzeGraphFromHere(options?: any): Promise<import("../types/graph-interfaces").GraphAnalysisResult>;
/**
* Получить статистику графа отсюда
*/
getGraphStatisticsFromHere(options?: any): Promise<import("../types/graph-interfaces").GraphStatistics>;
/**
* Получить расстояние до другого элемента
*/
getDistanceTo(target: CSElement, options?: any): Promise<number>;
/**
* Получить соседей отсюда
*/
getNeighborsFromHere(options?: any): CSElement[];
/**
* Получить степень отсюда
*/
getDegreeFromHere(options?: any): number;
/**
* Топологическая сортировка отсюда
*/
topologicalSortFromHere(options?: any): Promise<string[]>;
/**
* Минимальное остовное дерево отсюда
*/
minimumSpanningTreeFromHere(options?: any): Promise<import("../types/graph-interfaces").GraphRepresentation>;
/**
* Рассчитать центральность для этого узла
*/
calculateCentralityFromHere(options?: any): Promise<Map<string, number>>;
/**
* Преобразует элемент и его потомков в простой объект для JSPath
*/
toJSPathObject(): any;
}
//# sourceMappingURL=CSElement.d.ts.map