import { Result } from "../common/result"; import { DomainEvent } from "../domain/domain-event"; export interface EventVersionSchema { readonly version: number; readonly eventType: string; readonly schema: Record; readonly migration?: EventMigrationFunction; readonly deprecated?: boolean; readonly deprecatedAt?: Date; readonly migrationDeadline?: Date; } export type EventMigrationFunction = (eventData: Record, fromVersion: number, toVersion: number) => Record; export interface VersionedEvent> extends DomainEvent { readonly eventVersion: number; readonly originalVersion?: number; readonly migrationHistory?: EventMigration[]; } export interface EventMigration { readonly fromVersion: number; readonly toVersion: number; readonly migratedAt: Date; readonly migrationFunction?: string; } export interface EventVersionManager { registerVersion(schema: EventVersionSchema): Promise>; getVersionSchema(eventType: string, version: number): Promise>; getLatestVersion(eventType: string): Promise>; getVersions(eventType: string): Promise>; migrateEvent(event: DomainEvent, targetVersion: number): Promise>; migrateToLatest(event: DomainEvent): Promise>; validateEvent(event: DomainEvent, version: number): Promise>; getMigrationPath(eventType: string, fromVersion: number, toVersion: number): Promise>; deprecateVersion(eventType: string, version: number, migrationDeadline?: Date): Promise>; } export interface EventVersionRegistry { register(schema: EventVersionSchema): Promise>; get(eventType: string, version: number): Promise>; getVersions(eventType: string): Promise>; getLatest(eventType: string): Promise>; hasVersion(eventType: string, version: number): Promise; getEventTypes(): Promise; } export declare class InMemoryEventVersionRegistry implements EventVersionRegistry { private schemas; register(schema: EventVersionSchema): Promise>; get(eventType: string, version: number): Promise>; getVersions(eventType: string): Promise>; getLatest(eventType: string): Promise>; hasVersion(eventType: string, version: number): Promise; getEventTypes(): Promise; } export declare class BaseEventVersionManager implements EventVersionManager { private registry; constructor(registry: EventVersionRegistry); registerVersion(schema: EventVersionSchema): Promise>; getVersionSchema(eventType: string, version: number): Promise>; getLatestVersion(eventType: string): Promise>; getVersions(eventType: string): Promise>; migrateEvent(event: DomainEvent, targetVersion: number): Promise>; migrateToLatest(event: DomainEvent): Promise>; validateEvent(event: DomainEvent, version: number): Promise>; getMigrationPath(eventType: string, fromVersion: number, toVersion: number): Promise>; deprecateVersion(eventType: string, version: number, migrationDeadline?: Date): Promise>; private validateAgainstSchema; } export declare class EventVersionBuilder { private eventType; private config; constructor(eventType: string); version(version: number): EventVersionBuilder; schema(schema: Record): EventVersionBuilder; migration(migration: EventMigrationFunction): EventVersionBuilder; deprecated(deprecated?: boolean): EventVersionBuilder; migrationDeadline(deadline: Date): EventVersionBuilder; build(): EventVersionSchema; } export declare function createEventVersion(eventType: string): EventVersionBuilder;