UNPKG

cs-element

Version:

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

185 lines 5.78 kB
/** * Универсальный движок запросов для 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