/** * F5 CLI - Version Manager * Track and compare requirement versions with semantic versioning * * @module @f5/cli/core/version-manager * @version 1.0.0 */ import type { Requirement } from './excel-processor.js'; export interface VersionStats { total_requirements: number; added: number; modified: number; deleted: number; } export interface VersionInfo { id: string; source: string[]; imported_at: string; imported_by: string; checksum: string; stats: VersionStats; files: Record; } export interface Conflict { id: string; requirement_id: string; version_a: { version: string; value: Requirement; }; version_b: { version: string; value: Requirement; }; status: 'pending' | 'resolved'; resolution?: 'use_a' | 'use_b' | 'merge' | 'custom'; resolved_value?: Requirement; } export interface VersionMetadata { versions: VersionInfo[]; latest: string | null; conflicts: Conflict[]; created_at: string; last_updated: string; } export interface VersionData { version: string; created_at: string; source_files: string[]; requirements_count: number; stats: VersionStats; files: Record; requirements: Requirement[]; } export interface ChangeSet { previousVersion: string | null; currentVersion: string; new: Requirement[]; modified: Array<{ old: Requirement; new: Requirement; }>; deleted: Requirement[]; unchanged: Requirement[]; } export interface VersionManagerOptions { versionsDir?: string; metadataFile?: string; versionStrategy?: 'semantic' | 'date' | 'incremental'; } export declare class VersionManager { private options; private metadata; constructor(options?: VersionManagerOptions); /** * Load version metadata */ private loadMetadata; /** * Save version metadata */ private saveMetadata; /** * Get next version string */ getNextVersion(type?: 'major' | 'minor' | 'patch'): string; /** * Create new version */ createVersion(data: { version?: string; sourceFiles: string[]; requirements: Requirement[]; stats?: Partial; files?: Record; importedBy?: string; }): VersionInfo; /** * Calculate checksum for requirements */ private calculateChecksum; /** * Get git author if available */ private getGitAuthor; /** * Get version data */ getVersion(version: string): VersionData | null; /** * Get latest version */ getLatestVersion(): VersionData | null; /** * Get previous version */ getPreviousVersion(): VersionData | null; /** * Compare two versions */ compare(versionA: string, versionB: string): ChangeSet; /** * Compare with latest version */ compareWithLatest(newRequirements: Requirement[]): ChangeSet; /** * Compare requirements arrays */ private compareRequirements; /** * List all versions */ listVersions(): VersionInfo[]; /** * Get version history summary */ getHistorySummary(): { totalVersions: number; currentVersion: string | null; versions: Array<{ version: string; createdAt: string; requirementsCount: number; }>; createdAt: string; lastUpdated: string; }; /** * Rollback to a previous version */ rollbackTo(version: string): VersionData | null; /** * Add conflict */ addConflict(conflict: Omit): Conflict; /** * Get pending conflicts */ getPendingConflicts(): Conflict[]; /** * Resolve conflict */ resolveConflict(conflictId: string, resolution: 'use_a' | 'use_b' | 'merge' | 'custom', customValue?: Requirement): Conflict | null; /** * Merge two versions */ merge(versionA: string, versionB: string, options?: { strategy?: 'prefer_newer' | 'prefer_older' | 'manual'; }): { merged: Requirement[]; conflicts: Conflict[]; }; /** * Get versions directory */ getVersionsDir(): string; /** * Get current version */ getCurrentVersion(): string | null; } export default VersionManager;