UNPKG

cs-element

Version:

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

215 lines 6.61 kB
/** * Интерфейсы для системы миграций CSElement * Поддерживает версионирование схем и автоматическое применение миграций */ import { ICSElement } from './interfaces'; import { TypedElementSchema } from './typed-elements-interfaces'; /** * Направление миграции */ export type MigrationDirection = 'up' | 'down'; /** * Статус миграции */ export type MigrationStatus = 'pending' | 'running' | 'completed' | 'failed' | 'rolled_back'; /** * Тип миграции */ export type MigrationType = 'schema' | 'data' | 'index' | 'constraint' | 'custom'; /** * Контекст выполнения миграции */ export interface MigrationContext { fromVersion: string; toVersion: string; direction: MigrationDirection; schemaName?: string; options?: Record<string, any>; transactionId?: string; } /** * Результат выполнения миграции */ export interface MigrationResult { success: boolean; error?: string; message?: string; processedCount?: number; executionTime?: number; metadata?: Record<string, any>; } /** * Интерфейс миграции */ export interface IMigration { id: string; version: string; description: string; type: MigrationType; dependencies: string[]; up(context: MigrationContext): Promise<MigrationResult>; down(context: MigrationContext): Promise<MigrationResult>; canApply(context: MigrationContext): Promise<boolean>; canRollback(context: MigrationContext): Promise<boolean>; validate(context: MigrationContext): Promise<boolean>; } /** * Запись о выполненной миграции */ export interface MigrationRecord { migrationId: string; version: string; status: MigrationStatus; startedAt: Date; completedAt?: Date; executionTime?: number; result?: MigrationResult; context: MigrationContext; contentHash?: string; } /** * План миграции */ export interface MigrationPlan { migrations: IMigration[]; executionOrder: string[]; targetVersion: string; currentVersion: string; direction: MigrationDirection; estimatedTime?: number; warnings?: string[]; } /** * Конфигурация миграции схемы */ export interface SchemaMigrationConfig { schemaName: string; oldSchema: TypedElementSchema; newSchema: TypedElementSchema; fieldMapping?: Record<string, string>; transformers?: Record<string, (value: any) => any>; defaultValues?: Record<string, any>; fieldsToRemove?: string[]; } /** * Конфигурация миграции данных */ export interface DataMigrationConfig { selector?: (element: ICSElement) => boolean; transformer: (element: ICSElement) => Promise<ICSElement>; batchSize?: number; concurrency?: number; onError?: (error: Error, element: ICSElement) => 'skip' | 'retry' | 'abort'; } /** * Интерфейс менеджера миграций */ export interface IMigrationManager { registerMigration(migration: IMigration): void; getMigrations(): IMigration[]; getMigration(id: string): IMigration | undefined; getHistory(): Promise<MigrationRecord[]>; getCurrentVersion(): Promise<string>; createPlan(targetVersion: string): Promise<MigrationPlan>; migrate(targetVersion?: string): Promise<MigrationResult[]>; rollback(targetVersion?: string): Promise<MigrationResult[]>; checkStatus(): Promise<{ currentVersion: string; pendingMigrations: string[]; lastMigration?: MigrationRecord; }>; createSchemaMigration(config: SchemaMigrationConfig): IMigration; createDataMigration(config: DataMigrationConfig & { id: string; version: string; description: string; }): IMigration; validateIntegrity(): Promise<boolean>; reset(): Promise<void>; } /** * Фабрика миграций */ export interface IMigrationFactory { createSchemaMigration(config: SchemaMigrationConfig & { id: string; version: string; description: string; }): IMigration; createDataMigration(config: DataMigrationConfig & { id: string; version: string; description: string; }): IMigration; createCustomMigration(config: { id: string; version: string; description: string; dependencies?: string[]; up: (context: MigrationContext) => Promise<MigrationResult>; down: (context: MigrationContext) => Promise<MigrationResult>; canApply?: (context: MigrationContext) => Promise<boolean>; canRollback?: (context: MigrationContext) => Promise<boolean>; validate?: (context: MigrationContext) => Promise<boolean>; }): IMigration; } /** * Хранилище миграций */ export interface IMigrationStorage { saveRecord(record: MigrationRecord): Promise<void>; getRecord(migrationId: string): Promise<MigrationRecord | undefined>; getAllRecords(): Promise<MigrationRecord[]>; getRecordsByStatus(status: MigrationStatus): Promise<MigrationRecord[]>; updateStatus(migrationId: string, status: MigrationStatus): Promise<void>; deleteRecord(migrationId: string): Promise<void>; clear(): Promise<void>; } /** * События миграций */ export interface MigrationEvents { 'migration:start': { migration: IMigration; context: MigrationContext; }; 'migration:complete': { migration: IMigration; result: MigrationResult; }; 'migration:error': { migration: IMigration; error: Error; }; 'migration:progress': { migration: IMigration; progress: number; message?: string; }; 'plan:start': { plan: MigrationPlan; }; 'plan:complete': { plan: MigrationPlan; results: MigrationResult[]; }; 'migration:warning': { migration: IMigration; warning: string; }; } /** * Утилиты для версий */ export interface IVersionUtils { compare(version1: string, version2: string): number; isValid(version: string): boolean; getNext(version: string, type?: 'major' | 'minor' | 'patch'): string; parse(version: string): { major: number; minor: number; patch: number; }; format(major: number, minor: number, patch: number): string; } //# sourceMappingURL=migration-interfaces.d.ts.map