UNPKG

cs-element

Version:

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

228 lines 9.43 kB
/** * Интерфейсы для системы плагинов CSElement */ import { ICSElement } from './interfaces'; /** * Базовый интерфейс плагина */ export interface CSElementPlugin { /** Уникальное имя плагина */ readonly name: string; /** Версия плагина */ readonly version: string; /** Описание плагина */ readonly description?: string; /** Зависимости от других плагинов */ readonly dependencies?: string[]; /** Функция установки плагина */ install(CSElementClass: typeof import('../core/CSElement').CSElement, options?: any): void; /** Функция удаления плагина (опционально) */ uninstall?(): void; } /** * Хуки жизненного цикла элемента */ export interface LifecycleHooks { /** Перед созданием элемента */ beforeCreate?: (name: string, options?: any) => void | Promise<void>; /** После создания элемента */ afterCreate?: (element: ICSElement) => void | Promise<void>; /** Перед добавлением дочернего элемента */ beforeAddElement?: (parent: ICSElement, child: ICSElement) => void | Promise<void>; /** После добавления дочернего элемента */ afterAddElement?: (parent: ICSElement, child: ICSElement) => void | Promise<void>; /** Перед удалением элемента */ beforeRemoveElement?: (parent: ICSElement, child: ICSElement) => void | Promise<void>; /** После удаления элемента */ afterRemoveElement?: (parent: ICSElement, child: ICSElement) => void | Promise<void>; /** Перед установкой данных */ beforeSetData?: (element: ICSElement, key: string, value: any) => void | Promise<void>; /** После установки данных */ afterSetData?: (element: ICSElement, key: string, value: any) => void | Promise<void>; /** Перед удалением данных */ beforeDeleteData?: (element: ICSElement, key: string) => void | Promise<void>; /** После удаления данных */ afterDeleteData?: (element: ICSElement, key: string) => void | Promise<void>; /** Перед уничтожением элемента */ beforeDestroy?: (element: ICSElement) => void | Promise<void>; /** После уничтожения элемента */ afterDestroy?: (element: ICSElement) => void | Promise<void>; } /** * Приоритет middleware */ export declare enum MiddlewarePriority { HIGHEST = 1000, HIGH = 750, NORMAL = 500, LOW = 250, LOWEST = 1 } /** * Результат middleware */ export interface MiddlewareResult<T = any> { /** Результат операции */ result?: T; /** Должна ли операция быть прервана */ abort?: boolean; /** Модифицированные аргументы для следующего middleware */ modifiedArgs?: any[]; /** Дополнительные метаданные */ metadata?: Record<string, any>; } /** * Middleware функция с расширенными возможностями */ export type MiddlewareFunction<T = any> = (context: MiddlewareContext, next: (modifiedArgs?: any[]) => Promise<T>) => Promise<T | MiddlewareResult<T>>; /** * Конфигурация middleware */ export interface MiddlewareConfig { /** Функция middleware */ middleware: MiddlewareFunction; /** Приоритет выполнения (больше = раньше) */ priority?: number; /** Имя middleware для отладки */ name?: string; /** Условие выполнения middleware */ condition?: (context: MiddlewareContext) => boolean; /** Должен ли middleware выполняться асинхронно */ async?: boolean; /** Максимальное время выполнения в мс */ timeout?: number; } /** * Контекст middleware с расширенными возможностями */ export interface MiddlewareContext { /** Элемент, на котором выполняется операция */ element: ICSElement; /** Тип операции */ operation: 'setData' | 'deleteData' | 'addElement' | 'removeElement' | string; /** Аргументы операции */ args: any[]; /** Метаданные */ metadata: Record<string, any>; /** Время начала операции */ startTime: number; /** ID операции для трассировки */ operationId: string; /** Стек middleware */ middlewareStack: string[]; /** Пользовательский контекст */ userContext?: any; /** Флаги операции */ flags: { /** Операция была прервана */ aborted: boolean; /** Операция модифицирована */ modified: boolean; /** Операция выполняется в транзакции */ inTransaction: boolean; }; } /** * Статистика middleware */ export interface MiddlewareStats { /** Общее количество выполнений */ totalExecutions: number; /** Среднее время выполнения в мс */ averageExecutionTime: number; /** Количество ошибок */ errorCount: number; /** Количество прерываний */ abortCount: number; /** Последнее время выполнения */ lastExecuted: number; } /** * Менеджер middleware с расширенными возможностями */ export interface AdvancedMiddlewareManager { /** Добавить middleware с конфигурацией */ addMiddleware(operation: string, config: MiddlewareConfig): void; /** Удалить middleware по имени */ removeMiddleware(operation: string, name: string): boolean; /** Получить все middleware для операции */ getMiddleware(operation: string): MiddlewareConfig[]; /** Очистить все middleware для операции */ clearMiddleware(operation: string): void; /** Очистить все middleware для всех операций */ clearAllMiddleware(): void; /** Выполнить middleware цепочку */ executeMiddleware(context: MiddlewareContext, operation: () => Promise<any>): Promise<any>; /** Получить статистику middleware */ getStats(operation?: string, name?: string): MiddlewareStats | Record<string, MiddlewareStats>; /** Включить/выключить middleware */ toggleMiddleware(operation: string, name: string, enabled: boolean): void; /** Установить глобальный таймаут для middleware */ setGlobalTimeout(timeout: number): void; } /** * Менеджер плагинов */ export interface PluginManager { /** Установить плагин */ use(plugin: CSElementPlugin, options?: any): void; /** Удалить плагин */ uninstall(pluginName: string): boolean; /** Получить установленный плагин */ getPlugin(name: string): CSElementPlugin | null; /** Получить все установленные плагины */ getPlugins(): CSElementPlugin[]; /** Проверить, установлен ли плагин */ hasPlugin(name: string): boolean; /** Добавить хук жизненного цикла */ addHook(hookName: keyof LifecycleHooks, callback: Function): void; /** Удалить хук жизненного цикла */ removeHook(hookName: keyof LifecycleHooks, callback: Function): void; /** Добавить middleware с конфигурацией */ addAdvancedMiddleware(operation: string, config: MiddlewareConfig): void; /** Выполнить хуки */ executeHooks(hookName: keyof LifecycleHooks, ...args: any[]): Promise<void>; /** Выполнить middleware */ executeMiddleware(context: MiddlewareContext, operation: () => Promise<any>): Promise<any>; /** * Очистить все плагины и хуки (для тестирования) */ clear(): void; /** * Получить статистику */ getStats(): { totalPlugins: number; totalHooks: number; totalMiddleware: number; pluginsByType: Record<string, number>; }; } /** * Опции для установки плагина */ export interface PluginOptions { /** Дополнительные настройки плагина */ [key: string]: any; } /** * Информация о плагине */ export interface PluginInfo { name: string; version: string; description?: string; dependencies: string[]; installed: boolean; options?: PluginOptions; } /** * Событие плагина */ export interface PluginEvent { type: 'install' | 'uninstall' | 'error'; plugin: string; data?: any; timestamp: number; } //# sourceMappingURL=plugin-interfaces.d.ts.map