cs-element
Version:
Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support
158 lines • 6.38 kB
TypeScript
/**
* Интерфейсы для системы истории изменений (Undo/Redo)
*/
export interface HistorySnapshot {
/** Уникальный ID снимка */
id: string;
/** Временная метка создания */
timestamp: number;
/** Данные элемента на момент снимка */
data: any;
/** Метаданные снимка */
metadata: {
/** Описание операции */
operation: string;
/** Пользователь или система, инициировавшая изменение */
source?: string;
/** Дополнительные данные */
[key: string]: any;
};
/** Размер снимка в байтах */
size: number;
}
export interface HistoryOperation {
/** Уникальный ID операции */
id: string;
/** Тип операции */
type: 'create' | 'update' | 'delete' | 'batch' | 'transaction';
/** Временная метка операции */
timestamp: number;
/** Данные до операции */
before: any;
/** Данные после операции */
after: any;
/** Путь к измененному свойству */
path?: string[];
/** Описание операции */
description: string;
/** Возможно ли отменить операцию */
canUndo: boolean;
/** Возможно ли повторить операцию */
canRedo: boolean;
/** Дополнительные метаданные */
metadata?: Record<string, any>;
}
export interface HistoryState {
/** Текущая позиция в истории */
currentIndex: number;
/** Максимальное количество операций в истории */
maxSize: number;
/** Общее количество операций */
totalOperations: number;
/** Размер истории в байтах */
totalSize: number;
/** Можно ли выполнить undo */
canUndo: boolean;
/** Можно ли выполнить redo */
canRedo: boolean;
/** Статистика */
stats: {
undoCount: number;
redoCount: number;
snapshotCount: number;
lastCleanup: number;
};
}
export interface HistoryConfig {
/** Максимальное количество операций в истории */
maxOperations?: number;
/** Максимальный размер истории в байтах */
maxSize?: number;
/** Интервал создания снимков (каждые N операций) */
snapshotInterval?: number;
/** Автоматическая очистка старых записей */
autoCleanup?: boolean;
/** Сжатие снимков */
compression?: boolean;
/** Отслеживание определенных операций */
trackOperations?: string[];
/** Игнорировать определенные операции */
ignoreOperations?: string[];
}
export interface HistoryManager {
/** Добавить операцию в историю */
addOperation(operation: Omit<HistoryOperation, 'id' | 'timestamp'>): void;
/** Создать снимок состояния */
createSnapshot(data: any, description: string): HistorySnapshot;
/** Отменить последнюю операцию */
undo(): Promise<any>;
/** Повторить отмененную операцию */
redo(): Promise<any>;
/** Отменить до определенной операции */
undoTo(operationId: string): Promise<any>;
/** Повторить до определенной операции */
redoTo(operationId: string): Promise<any>;
/** Получить текущее состояние истории */
getState(): HistoryState;
/** Получить список операций */
getOperations(limit?: number): HistoryOperation[];
/** Получить список снимков */
getSnapshots(limit?: number): HistorySnapshot[];
/** Очистить историю */
clear(): void;
/** Очистить старые записи */
cleanup(): void;
/** Получить операцию по ID */
getOperation(id: string): HistoryOperation | null;
/** Получить снимок по ID */
getSnapshot(id: string): HistorySnapshot | null;
/** Экспорт истории */
export(): HistoryExport;
/** Импорт истории */
import(data: HistoryExport): void;
/** Подписка на события истории */
on(event: HistoryEvent, callback: HistoryEventCallback): void;
/** Отписка от событий */
off(event: HistoryEvent, callback: HistoryEventCallback): void;
/** Создать diff между двумя состояниями */
createDiff(before: any, after: any, path?: string[]): HistoryDiff[];
}
export type HistoryEvent = 'operation-added' | 'snapshot-created' | 'undo-performed' | 'redo-performed' | 'history-cleared' | 'cleanup-performed';
export interface HistoryEventData {
operation?: HistoryOperation;
snapshot?: HistorySnapshot;
state: HistoryState;
timestamp: number;
}
export type HistoryEventCallback = (data: HistoryEventData) => void;
export interface HistoryExport {
version: string;
timestamp: number;
operations: HistoryOperation[];
snapshots: HistorySnapshot[];
state: HistoryState;
config: HistoryConfig;
}
export interface HistoryDiff {
/** Тип изменения */
type: 'added' | 'removed' | 'modified';
/** Путь к свойству */
path: string[];
/** Старое значение */
oldValue?: any;
/** Новое значение */
newValue?: any;
/** Индекс для массивов */
index?: number;
}
export interface BatchOperation {
/** ID батча */
id: string;
/** Операции в батче */
operations: HistoryOperation[];
/** Описание батча */
description: string;
/** Можно ли отменить весь батч */
canUndo: boolean;
}
//# sourceMappingURL=history-interfaces.d.ts.map