cs-element
Version:
Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support
228 lines • 9.43 kB
TypeScript
/**
* Интерфейсы для системы плагинов 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