cs-element
Version:
Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support
185 lines • 5.78 kB
TypeScript
/**
* Универсальный движок запросов для CSElement
* Поддерживает CSS-селекторы, XPath, объектные селекторы, индексирование и оптимизацию запросов
*/
import { ICSElement, QuerySelector } from '../types/interfaces';
/**
* Типы селекторов
*/
export declare enum SelectorType {
CSS = "css",
XPATH = "xpath",
OBJECT = "object"
}
/**
* CSS-селектор
*/
export interface CSSSelector {
type: SelectorType.CSS;
selector: string;
}
/**
* XPath-селектор
*/
export interface XPathSelector {
type: SelectorType.XPATH;
expression: string;
}
/**
* Объектный селектор
*/
export interface ObjectSelector {
type: SelectorType.OBJECT;
selector: QuerySelector;
}
/**
* Универсальный селектор
*/
export type UniversalSelector = CSSSelector | XPathSelector | ObjectSelector | string;
/**
* Индекс для быстрого поиска
*/
interface ElementIndex {
byName: Map<string, Set<ICSElement>>;
byId: Map<string, ICSElement>;
byClass: Map<string, Set<ICSElement>>;
byAttribute: Map<string, Map<any, Set<ICSElement>>>;
byDepth: Map<number, Set<ICSElement>>;
all: Set<ICSElement>;
}
/**
* Статистика запросов
*/
export interface QueryStats {
totalQueries: number;
cacheHits: number;
averageExecutionTime: number;
slowestQuery: {
selector: string;
time: number;
};
mostFrequentSelectors: Array<{
selector: string;
count: number;
}>;
}
/**
* Расширенный движок запросов
*/
export declare class QueryEngine {
private static indices;
private static queryCache;
private static cacheTimeout;
private static stats;
private static selectorFrequency;
/**
* Выполняет поиск элементов по универсальному селектору
*/
static query(root: ICSElement, selector: UniversalSelector): ICSElement[];
/**
* Находит первый элемент по селектору
*/
static queryOne(root: ICSElement, selector: UniversalSelector): ICSElement | null;
/**
* Выполняет поиск по CSS-селектору
*/
static queryCSS(root: ICSElement, selector: string): ICSElement[];
/**
* Выполняет поиск по XPath
*/
static queryXPath(root: ICSElement, expression: string): ICSElement[];
/**
* Выполняет поиск по объектному селектору
*/
static queryObject(root: ICSElement, selector: QuerySelector): ICSElement[];
/**
* Включить/выключить индексирование
*/
static setIndexingEnabled(enabled: boolean): void;
/**
* Создает или обновляет индекс для элемента
*/
static buildIndex(root: ICSElement): void;
/**
* Получает индекс для элемента
*/
static getIndex(root: ICSElement): ElementIndex;
/**
* Очищает кэш запросов
*/
static clearCache(): void;
/**
* Получает статистику запросов
*/
static getStats(): QueryStats;
/**
* Сбрасывает статистику
*/
static resetStats(): void;
/**
* Приватные методы
*/
private static getSelectorString;
private static getCachedResult;
private static cacheResult;
private static updateStats;
private static parseCSS;
private static parseSelectorPart;
private static executeCSS;
private static findDescendantsAndSelf;
private static findDescendantsByParsedSelector;
private static matchesParsedSelector;
private static matchesPseudoClass;
private static createXPathContext;
private static evaluateXPath;
private static traverseAndIndex;
/**
* Выполняет поиск по объекту селектора
*/
private static queryBySelector;
/**
* Рекурсивно обходит дерево и собирает подходящие элементы для объектного селектора
*/
private static traverseAndMatchObject;
/**
* Проверяет, соответствует ли элемент объектному селектору
*/
private static matchesObjectSelector;
/**
* Вычисляет глубину элемента в дереве
*/
private static getElementDepth;
/**
* Создает комплексный селектор для поиска элементов
*/
static createSelector(): SelectorBuilder;
}
/**
* Builder для создания сложных селекторов
*/
export declare class SelectorBuilder {
private selector;
withName(name: string): this;
withIndex(index: number): this;
withData(...keys: string[]): this;
withDepth(depth: number | {
min?: number;
max?: number;
}): this;
withCustom(predicate: (element: ICSElement) => boolean): this;
build(): QuerySelector;
}
/**
* Предопределенные селекторы
*/
export declare const CommonSelectors: {
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;
};
export {};
//# sourceMappingURL=QueryEngine.d.ts.map