@affectively/aeon 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/compression/index.cjs +580 -0
- package/dist/compression/index.cjs.map +1 -0
- package/dist/compression/index.d.cts +189 -0
- package/dist/compression/index.d.ts +189 -0
- package/dist/compression/index.js +573 -0
- package/dist/compression/index.js.map +1 -0
- package/dist/core/index.d.cts +70 -5
- package/dist/core/index.d.ts +70 -5
- package/dist/crypto/index.cjs +100 -0
- package/dist/crypto/index.cjs.map +1 -0
- package/dist/crypto/index.d.cts +407 -0
- package/dist/crypto/index.d.ts +407 -0
- package/dist/crypto/index.js +96 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/distributed/index.cjs +420 -23
- package/dist/distributed/index.cjs.map +1 -1
- package/dist/distributed/index.d.cts +901 -2
- package/dist/distributed/index.d.ts +901 -2
- package/dist/distributed/index.js +420 -23
- package/dist/distributed/index.js.map +1 -1
- package/dist/index.cjs +1222 -55
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -811
- package/dist/index.d.ts +11 -811
- package/dist/index.js +1221 -56
- package/dist/index.js.map +1 -1
- package/dist/offline/index.cjs +419 -0
- package/dist/offline/index.cjs.map +1 -0
- package/dist/offline/index.d.cts +148 -0
- package/dist/offline/index.d.ts +148 -0
- package/dist/offline/index.js +415 -0
- package/dist/offline/index.js.map +1 -0
- package/dist/optimization/index.cjs +797 -0
- package/dist/optimization/index.cjs.map +1 -0
- package/dist/optimization/index.d.cts +347 -0
- package/dist/optimization/index.d.ts +347 -0
- package/dist/optimization/index.js +787 -0
- package/dist/optimization/index.js.map +1 -0
- package/dist/persistence/index.cjs +145 -0
- package/dist/persistence/index.cjs.map +1 -0
- package/dist/persistence/index.d.cts +63 -0
- package/dist/persistence/index.d.ts +63 -0
- package/dist/persistence/index.js +142 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/presence/index.cjs +489 -0
- package/dist/presence/index.cjs.map +1 -0
- package/dist/presence/index.d.cts +283 -0
- package/dist/presence/index.d.ts +283 -0
- package/dist/presence/index.js +485 -0
- package/dist/presence/index.js.map +1 -0
- package/dist/types-CMxO7QF0.d.cts +33 -0
- package/dist/types-CMxO7QF0.d.ts +33 -0
- package/dist/versioning/index.cjs +296 -14
- package/dist/versioning/index.cjs.map +1 -1
- package/dist/versioning/index.d.cts +66 -1
- package/dist/versioning/index.d.ts +66 -1
- package/dist/versioning/index.js +296 -14
- package/dist/versioning/index.js.map +1 -1
- package/package.json +51 -1
- package/dist/index-C_4CMV5c.d.cts +0 -1207
- package/dist/index-C_4CMV5c.d.ts +0 -1207
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/logger.ts","../../src/versioning/SchemaVersionManager.ts","../../src/versioning/MigrationEngine.ts","../../src/versioning/DataTransformer.ts","../../src/versioning/MigrationTracker.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Aeon Logger Interface\n *\n * Provides a pluggable logging interface that can be configured\n * by consumers to integrate with their preferred logging solution.\n */\n\n/**\n * Logger interface that consumers can implement\n */\nexport interface Logger {\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n}\n\n/**\n * Default console logger implementation\n */\nconst consoleLogger: Logger = {\n debug: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.debug('[AEON:DEBUG]', ...args);\n },\n info: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.info('[AEON:INFO]', ...args);\n },\n warn: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.warn('[AEON:WARN]', ...args);\n },\n error: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.error('[AEON:ERROR]', ...args);\n },\n};\n\n/**\n * No-op logger for production or when logging is disabled\n */\nconst noopLogger: Logger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n};\n\n/**\n * Current logger instance\n */\nlet currentLogger: Logger = consoleLogger;\n\n/**\n * Get the current logger instance\n */\nexport function getLogger(): Logger {\n return currentLogger;\n}\n\n/**\n * Set a custom logger implementation\n */\nexport function setLogger(logger: Logger): void {\n currentLogger = logger;\n}\n\n/**\n * Reset to the default console logger\n */\nexport function resetLogger(): void {\n currentLogger = consoleLogger;\n}\n\n/**\n * Disable all logging\n */\nexport function disableLogging(): void {\n currentLogger = noopLogger;\n}\n\n/**\n * Create a namespaced logger\n */\nexport function createNamespacedLogger(namespace: string): Logger {\n const logger = getLogger();\n return {\n debug: (...args: unknown[]) => logger.debug(`[${namespace}]`, ...args),\n info: (...args: unknown[]) => logger.info(`[${namespace}]`, ...args),\n warn: (...args: unknown[]) => logger.warn(`[${namespace}]`, ...args),\n error: (...args: unknown[]) => logger.error(`[${namespace}]`, ...args),\n };\n}\n\n// Export default logger for convenience\nexport const logger: Logger = {\n debug: (...args: unknown[]) => getLogger().debug(...args),\n info: (...args: unknown[]) => getLogger().info(...args),\n warn: (...args: unknown[]) => getLogger().warn(...args),\n error: (...args: unknown[]) => getLogger().error(...args),\n};\n","/**\n * Schema Version Manager\n *\n * Manages schema versioning across the application.\n * Tracks version history, compatibility, and migration paths.\n *\n * Features:\n * - Version tracking and comparison\n * - Compatibility matrix management\n * - Migration path calculation\n * - Version validation\n */\n\nimport { logger } from '../utils/logger';\n\nexport interface SchemaVersion {\n major: number;\n minor: number;\n patch: number;\n timestamp: string;\n description: string;\n breaking: boolean;\n}\n\nexport interface VersionMetadata {\n version: SchemaVersion;\n previousVersion?: SchemaVersion;\n changes: string[];\n migrationsRequired: string[];\n rollbackPossible: boolean;\n}\n\nexport interface CompatibilityRule {\n from: string;\n to: string;\n compatible: boolean;\n requiresMigration: boolean;\n migrationSteps: number;\n}\n\n/**\n * Schema Version Manager\n * Tracks and manages schema versions across the application\n */\nexport class SchemaVersionManager {\n private versions: Map<string, SchemaVersion> = new Map();\n private versionHistory: SchemaVersion[] = [];\n private compatibilityMatrix: Map<string, CompatibilityRule[]> = new Map();\n private currentVersion: SchemaVersion | null = null;\n\n constructor() {\n this.initializeDefaultVersions();\n }\n\n /**\n * Initialize default versions\n */\n private initializeDefaultVersions(): void {\n const v1_0_0: SchemaVersion = {\n major: 1,\n minor: 0,\n patch: 0,\n timestamp: new Date().toISOString(),\n description: 'Initial schema version',\n breaking: false,\n };\n\n this.registerVersion(v1_0_0);\n this.currentVersion = v1_0_0;\n }\n\n /**\n * Register a new schema version\n */\n registerVersion(version: SchemaVersion): void {\n const versionString = this.versionToString(version);\n\n this.versions.set(versionString, version);\n this.versionHistory.push(version);\n\n logger.debug('[SchemaVersionManager] Version registered', {\n version: versionString,\n breaking: version.breaking,\n description: version.description,\n });\n }\n\n /**\n * Get current version\n */\n getCurrentVersion(): SchemaVersion {\n if (!this.currentVersion) {\n throw new Error('No current version set');\n }\n return this.currentVersion;\n }\n\n /**\n * Set current version\n */\n setCurrentVersion(version: SchemaVersion): void {\n if (!this.versions.has(this.versionToString(version))) {\n throw new Error(`Version ${this.versionToString(version)} not registered`);\n }\n\n this.currentVersion = version;\n logger.debug('[SchemaVersionManager] Current version set', {\n version: this.versionToString(version),\n });\n }\n\n /**\n * Get version history\n */\n getVersionHistory(): SchemaVersion[] {\n return [...this.versionHistory];\n }\n\n /**\n * Check if version exists\n */\n hasVersion(version: SchemaVersion): boolean {\n return this.versions.has(this.versionToString(version));\n }\n\n /**\n * Get version by string (e.g., \"1.2.3\")\n */\n getVersion(versionString: string): SchemaVersion | undefined {\n return this.versions.get(versionString);\n }\n\n /**\n * Register compatibility rule\n */\n registerCompatibility(rule: CompatibilityRule): void {\n if (!this.compatibilityMatrix.has(rule.from)) {\n this.compatibilityMatrix.set(rule.from, []);\n }\n\n const rules = this.compatibilityMatrix.get(rule.from);\n if (rules) {\n rules.push(rule);\n }\n\n logger.debug('[SchemaVersionManager] Compatibility rule registered', {\n from: rule.from,\n to: rule.to,\n compatible: rule.compatible,\n requiresMigration: rule.requiresMigration,\n });\n }\n\n /**\n * Check if migration path exists\n */\n canMigrate(fromVersion: SchemaVersion | string, toVersion: SchemaVersion | string): boolean {\n const fromStr = typeof fromVersion === 'string' ? fromVersion : this.versionToString(fromVersion);\n const toStr = typeof toVersion === 'string' ? toVersion : this.versionToString(toVersion);\n\n const rules = this.compatibilityMatrix.get(fromStr) || [];\n return rules.some(r => r.to === toStr && r.requiresMigration);\n }\n\n /**\n * Get migration path\n */\n getMigrationPath(\n fromVersion: SchemaVersion,\n toVersion: SchemaVersion,\n ): SchemaVersion[] {\n const path: SchemaVersion[] = [];\n let current = fromVersion;\n\n const maxSteps = 100; // Prevent infinite loops\n let steps = 0;\n\n while (this.compareVersions(current, toVersion) !== 0 && steps < maxSteps) {\n const fromStr = this.versionToString(current);\n const rules = this.compatibilityMatrix.get(fromStr) || [];\n\n let found = false;\n for (const rule of rules) {\n const nextVersion = this.getVersion(rule.to);\n if (nextVersion) {\n // Find the closest path to target\n if (\n this.compareVersions(nextVersion, toVersion) <= 0 ||\n this.compareVersions(current, nextVersion) < this.compareVersions(current, toVersion)\n ) {\n current = nextVersion;\n path.push(current);\n found = true;\n break;\n }\n }\n }\n\n if (!found) {\n break;\n }\n\n steps++;\n }\n\n return path;\n }\n\n /**\n * Compare two versions\n * Returns: -1 if v1 < v2, 0 if equal, 1 if v1 > v2\n */\n compareVersions(v1: SchemaVersion | string, v2: SchemaVersion | string): number {\n const ver1 = typeof v1 === 'string' ? this.parseVersion(v1) : v1;\n const ver2 = typeof v2 === 'string' ? this.parseVersion(v2) : v2;\n\n if (ver1.major !== ver2.major) {\n return ver1.major < ver2.major ? -1 : 1;\n }\n if (ver1.minor !== ver2.minor) {\n return ver1.minor < ver2.minor ? -1 : 1;\n }\n if (ver1.patch !== ver2.patch) {\n return ver1.patch < ver2.patch ? -1 : 1;\n }\n return 0;\n }\n\n /**\n * Parse version string to SchemaVersion\n */\n parseVersion(versionString: string): SchemaVersion {\n const parts = versionString.split('.').map(Number);\n return {\n major: parts[0] || 0,\n minor: parts[1] || 0,\n patch: parts[2] || 0,\n timestamp: new Date().toISOString(),\n description: '',\n breaking: false,\n };\n }\n\n /**\n * Create new version\n */\n createVersion(\n major: number,\n minor: number,\n patch: number,\n description: string,\n breaking: boolean = false,\n ): SchemaVersion {\n return {\n major,\n minor,\n patch,\n timestamp: new Date().toISOString(),\n description,\n breaking,\n };\n }\n\n /**\n * Convert version to string\n */\n versionToString(version: SchemaVersion): string {\n return `${version.major}.${version.minor}.${version.patch}`;\n }\n\n /**\n * Get version metadata\n */\n getVersionMetadata(version: SchemaVersion): VersionMetadata {\n const history = this.versionHistory;\n const currentIndex = history.findIndex(\n v => this.versionToString(v) === this.versionToString(version),\n );\n\n return {\n version,\n previousVersion: currentIndex > 0 ? history[currentIndex - 1] : undefined,\n changes: [version.description],\n migrationsRequired: this.canMigrate(\n this.currentVersion || version,\n version,\n )\n ? [this.versionToString(version)]\n : [],\n rollbackPossible: currentIndex > 0,\n };\n }\n\n /**\n * Get all registered versions\n */\n getAllVersions(): SchemaVersion[] {\n return Array.from(this.versions.values()).sort((a, b) =>\n this.compareVersions(a, b),\n );\n }\n\n /**\n * Clear all versions (for testing)\n */\n clear(): void {\n this.versions.clear();\n this.versionHistory = [];\n this.compatibilityMatrix.clear();\n this.currentVersion = null;\n }\n}\n","/**\n * Migration Engine\n *\n * Executes schema migrations with rollback support.\n * Manages migration execution, error handling, and state management.\n *\n * Features:\n * - Migration execution and tracking\n * - Rollback support\n * - Error handling and recovery\n * - Migration state management\n */\n\nimport { logger } from '../utils/logger';\n\nexport interface Migration {\n id: string;\n version: string;\n name: string;\n up: (data: unknown) => unknown;\n down?: (data: unknown) => unknown;\n timestamp: string;\n description: string;\n}\n\nexport interface MigrationResult {\n migrationId: string;\n success: boolean;\n timestamp: string;\n duration: number;\n itemsAffected: number;\n errors: string[];\n}\n\nexport interface MigrationState {\n currentVersion: string;\n appliedMigrations: string[];\n failedMigrations: string[];\n lastMigrationTime: string;\n totalMigrationsRun: number;\n}\n\n/**\n * Migration Engine\n * Executes and manages schema migrations\n */\nexport class MigrationEngine {\n private migrations: Map<string, Migration> = new Map();\n private executedMigrations: MigrationResult[] = [];\n private state: MigrationState = {\n currentVersion: '1.0.0',\n appliedMigrations: [],\n failedMigrations: [],\n lastMigrationTime: new Date().toISOString(),\n totalMigrationsRun: 0,\n };\n\n /**\n * Register a migration\n */\n registerMigration(migration: Migration): void {\n this.migrations.set(migration.id, migration);\n\n logger.debug('[MigrationEngine] Migration registered', {\n id: migration.id,\n version: migration.version,\n name: migration.name,\n });\n }\n\n /**\n * Execute a migration\n */\n async executeMigration(\n migrationId: string,\n data: unknown,\n ): Promise<MigrationResult> {\n const migration = this.migrations.get(migrationId);\n if (!migration) {\n throw new Error(`Migration ${migrationId} not found`);\n }\n\n const startTime = Date.now();\n const result: MigrationResult = {\n migrationId,\n success: false,\n timestamp: new Date().toISOString(),\n duration: 0,\n itemsAffected: 0,\n errors: [],\n };\n\n try {\n logger.debug('[MigrationEngine] Executing migration', {\n id: migrationId,\n version: migration.version,\n });\n\n // Execute up migration\n migration.up(data);\n\n result.success = true;\n result.itemsAffected = Array.isArray(data) ? (data as unknown[]).length : 1;\n result.duration = Date.now() - startTime;\n\n // Track as applied\n this.state.appliedMigrations.push(migrationId);\n this.state.currentVersion = migration.version;\n this.state.totalMigrationsRun++;\n this.state.lastMigrationTime = result.timestamp;\n\n this.executedMigrations.push(result);\n\n logger.debug('[MigrationEngine] Migration executed successfully', {\n id: migrationId,\n duration: result.duration,\n itemsAffected: result.itemsAffected,\n });\n\n return result;\n } catch (error) {\n result.errors = [error instanceof Error ? error.message : String(error)];\n this.state.failedMigrations.push(migrationId);\n\n this.executedMigrations.push(result);\n\n logger.error('[MigrationEngine] Migration failed', {\n id: migrationId,\n error: result.errors[0],\n });\n\n throw new Error(`Migration ${migrationId} failed: ${result.errors[0]}`);\n }\n }\n\n /**\n * Rollback a migration\n */\n async rollbackMigration(\n migrationId: string,\n data: unknown,\n ): Promise<MigrationResult> {\n const migration = this.migrations.get(migrationId);\n if (!migration) {\n throw new Error(`Migration ${migrationId} not found`);\n }\n\n if (!migration.down) {\n throw new Error(`Migration ${migrationId} does not support rollback`);\n }\n\n const startTime = Date.now();\n const result: MigrationResult = {\n migrationId,\n success: false,\n timestamp: new Date().toISOString(),\n duration: 0,\n itemsAffected: 0,\n errors: [],\n };\n\n try {\n logger.debug('[MigrationEngine] Rolling back migration', {\n id: migrationId,\n version: migration.version,\n });\n\n // Execute down migration\n migration.down(data);\n\n result.success = true;\n result.itemsAffected = Array.isArray(data) ? (data as unknown[]).length : 1;\n result.duration = Date.now() - startTime;\n\n // Remove from applied migrations\n this.state.appliedMigrations = this.state.appliedMigrations.filter(\n id => id !== migrationId,\n );\n\n this.executedMigrations.push(result);\n\n logger.debug('[MigrationEngine] Migration rolled back', {\n id: migrationId,\n duration: result.duration,\n });\n\n return result;\n } catch (error) {\n result.errors = [error instanceof Error ? error.message : String(error)];\n\n this.executedMigrations.push(result);\n\n logger.error('[MigrationEngine] Rollback failed', {\n id: migrationId,\n error: result.errors[0],\n });\n\n throw new Error(`Rollback for ${migrationId} failed: ${result.errors[0]}`);\n }\n }\n\n /**\n * Get migration state\n */\n getState(): MigrationState {\n return { ...this.state };\n }\n\n /**\n * Get migration execution history\n */\n getExecutionHistory(): MigrationResult[] {\n return [...this.executedMigrations];\n }\n\n /**\n * Get migration by ID\n */\n getMigration(migrationId: string): Migration | undefined {\n return this.migrations.get(migrationId);\n }\n\n /**\n * Get all registered migrations\n */\n getAllMigrations(): Migration[] {\n return Array.from(this.migrations.values());\n }\n\n /**\n * Get applied migrations\n */\n getAppliedMigrations(): string[] {\n return [...this.state.appliedMigrations];\n }\n\n /**\n * Get failed migrations\n */\n getFailedMigrations(): string[] {\n return [...this.state.failedMigrations];\n }\n\n /**\n * Get pending migrations\n */\n getPendingMigrations(): Migration[] {\n return this.getAllMigrations().filter(\n m => !this.state.appliedMigrations.includes(m.id),\n );\n }\n\n /**\n * Get migration statistics\n */\n getStatistics() {\n const successful = this.executedMigrations.filter(m => m.success).length;\n const failed = this.executedMigrations.filter(m => !m.success).length;\n const totalDuration = this.executedMigrations.reduce((sum, m) => sum + m.duration, 0);\n const totalAffected = this.executedMigrations.reduce((sum, m) => sum + m.itemsAffected, 0);\n\n return {\n totalExecuted: this.executedMigrations.length,\n successful,\n failed,\n successRate: this.executedMigrations.length > 0 ? (successful / this.executedMigrations.length) * 100 : 0,\n totalDurationMs: totalDuration,\n averageDurationMs: this.executedMigrations.length > 0 ? totalDuration / this.executedMigrations.length : 0,\n totalAffected,\n };\n }\n\n /**\n * Clear history (for testing)\n */\n clear(): void {\n this.migrations.clear();\n this.executedMigrations = [];\n this.state = {\n currentVersion: '1.0.0',\n appliedMigrations: [],\n failedMigrations: [],\n lastMigrationTime: new Date().toISOString(),\n totalMigrationsRun: 0,\n };\n }\n}\n","/**\n * Data Transformer\n *\n * Transforms data structures during schema migrations.\n * Handles field transformation, type casting, and validation.\n *\n * Features:\n * - Field-level transformation\n * - Type conversion and casting\n * - Validation during transformation\n * - Error handling and reporting\n * - Batch transformation support\n */\n\nimport { logger } from '../utils/logger';\n\nexport interface FieldTransformer {\n (value: unknown): unknown;\n}\n\nexport interface TransformationRule {\n field: string;\n transformer: FieldTransformer;\n required?: boolean;\n defaultValue?: unknown;\n}\n\nexport interface TransformationResult {\n success: boolean;\n itemsTransformed: number;\n itemsFailed: number;\n errors: Array<{ item: unknown; error: string }>;\n warnings: string[];\n duration: number;\n}\n\n/**\n * Data Transformer\n * Transforms data structures during schema migrations\n */\nexport class DataTransformer {\n private rules: Map<string, TransformationRule> = new Map();\n private transformationHistory: TransformationResult[] = [];\n\n /**\n * Register a transformation rule\n */\n registerRule(rule: TransformationRule): void {\n this.rules.set(rule.field, rule);\n\n logger.debug('[DataTransformer] Rule registered', {\n field: rule.field,\n required: rule.required,\n hasDefault: rule.defaultValue !== undefined,\n });\n }\n\n /**\n * Transform a single field value\n */\n transformField(field: string, value: unknown): unknown {\n const rule = this.rules.get(field);\n if (!rule) {\n // No rule = no transformation\n return value;\n }\n\n try {\n return rule.transformer(value);\n } catch (error) {\n if (rule.required) {\n throw new Error(`Failed to transform required field ${field}: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n // Return default value or original value\n return rule.defaultValue !== undefined ? rule.defaultValue : value;\n }\n }\n\n /**\n * Transform a single object\n */\n transformObject(data: Record<string, unknown>): Record<string, unknown> {\n const transformed: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(data)) {\n try {\n transformed[key] = this.transformField(key, value);\n } catch (error) {\n logger.warn('[DataTransformer] Field transformation failed', {\n field: key,\n error: error instanceof Error ? error.message : String(error),\n });\n\n // If field is not required, include original value\n const rule = this.rules.get(key);\n if (!rule || !rule.required) {\n transformed[key] = value;\n }\n }\n }\n\n return transformed;\n }\n\n /**\n * Transform a collection of items\n */\n transformCollection(items: unknown[]): TransformationResult {\n const startTime = Date.now();\n const result: TransformationResult = {\n success: true,\n itemsTransformed: 0,\n itemsFailed: 0,\n errors: [],\n warnings: [],\n duration: 0,\n };\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n\n try {\n if (typeof item === 'object' && item !== null && !Array.isArray(item)) {\n this.transformObject(item as Record<string, unknown>);\n result.itemsTransformed++;\n } else {\n // Cannot transform non-object items\n result.warnings.push(`Item ${i} is not a transformable object`);\n }\n } catch (error) {\n result.errors.push({\n item,\n error: error instanceof Error ? error.message : String(error),\n });\n result.itemsFailed++;\n }\n }\n\n result.duration = Date.now() - startTime;\n result.success = result.itemsFailed === 0;\n\n this.transformationHistory.push(result);\n\n logger.debug('[DataTransformer] Collection transformed', {\n total: items.length,\n transformed: result.itemsTransformed,\n failed: result.itemsFailed,\n duration: result.duration,\n });\n\n return result;\n }\n\n /**\n * Validate transformed data\n */\n validateTransformation(original: unknown[], transformed: unknown[]): {\n valid: boolean;\n issues: string[];\n } {\n const issues: string[] = [];\n\n if (original.length !== transformed.length) {\n issues.push(`Item count mismatch: ${original.length} -> ${transformed.length}`);\n }\n\n // Check that all items were processed\n for (let i = 0; i < Math.min(original.length, transformed.length); i++) {\n const orig = original[i];\n const trans = transformed[i];\n\n if (!this.validateItem(orig, trans)) {\n issues.push(`Item ${i} validation failed`);\n }\n }\n\n return {\n valid: issues.length === 0,\n issues,\n };\n }\n\n /**\n * Validate a single item transformation\n */\n private validateItem(original: unknown, transformed: unknown): boolean {\n // Basic validation: ensure transformed exists if original exists\n if (original === null || original === undefined) {\n return true;\n }\n\n if (typeof original === 'object' && typeof transformed !== 'object') {\n return false;\n }\n\n return true;\n }\n\n /**\n * Get transformation history\n */\n getTransformationHistory(): TransformationResult[] {\n return [...this.transformationHistory];\n }\n\n /**\n * Get transformation statistics\n */\n getStatistics() {\n const totalTransformed = this.transformationHistory.reduce(\n (sum, r) => sum + r.itemsTransformed,\n 0,\n );\n const totalFailed = this.transformationHistory.reduce(\n (sum, r) => sum + r.itemsFailed,\n 0,\n );\n const totalDuration = this.transformationHistory.reduce(\n (sum, r) => sum + r.duration,\n 0,\n );\n\n return {\n totalBatches: this.transformationHistory.length,\n totalTransformed,\n totalFailed,\n successRate: totalTransformed + totalFailed > 0 ? (totalTransformed / (totalTransformed + totalFailed)) * 100 : 0,\n totalDurationMs: totalDuration,\n averageBatchDurationMs: this.transformationHistory.length > 0 ? totalDuration / this.transformationHistory.length : 0,\n };\n }\n\n /**\n * Get registered rules\n */\n getRules(): TransformationRule[] {\n return Array.from(this.rules.values());\n }\n\n /**\n * Get rule for field\n */\n getRule(field: string): TransformationRule | undefined {\n return this.rules.get(field);\n }\n\n /**\n * Clear all rules (for testing)\n */\n clearRules(): void {\n this.rules.clear();\n }\n\n /**\n * Clear history (for testing)\n */\n clearHistory(): void {\n this.transformationHistory = [];\n }\n\n /**\n * Clear all state (for testing)\n */\n clear(): void {\n this.clearRules();\n this.clearHistory();\n }\n}\n","/**\n * Migration Tracker\n *\n * Tracks migration history and enables rollback.\n * Maintains detailed audit trail of all schema changes.\n *\n * Features:\n * - Migration history tracking\n * - Rollback path calculation\n * - Data snapshots for recovery\n * - Audit trail with timestamps\n * - Migration dependency tracking\n */\n\nimport { logger } from '../utils/logger';\n\nexport interface MigrationRecord {\n id: string;\n migrationId: string;\n timestamp: string;\n version: string;\n direction: 'up' | 'down';\n status: 'pending' | 'applied' | 'failed' | 'rolled-back';\n duration: number;\n itemsAffected: number;\n dataSnapshot?: {\n beforeHash: string;\n afterHash: string;\n itemCount: number;\n };\n errorMessage?: string;\n appliedBy: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RollbackPath {\n path: string[];\n canRollback: boolean;\n affectedVersions: string[];\n estimatedDuration: number;\n}\n\n/**\n * Migration Tracker\n * Tracks and manages migration history with rollback support\n */\nexport class MigrationTracker {\n private migrations: MigrationRecord[] = [];\n private snapshots: Map<string, { beforeHash: string; afterHash: string; itemCount: number }> = new Map();\n\n /**\n * Track a new migration\n */\n recordMigration(record: MigrationRecord): void {\n this.migrations.push({ ...record });\n\n logger.debug('[MigrationTracker] Migration recorded', {\n id: record.id,\n migrationId: record.migrationId,\n version: record.version,\n status: record.status,\n });\n }\n\n /**\n * Track migration with snapshot\n */\n trackMigration(\n migrationId: string,\n version: string,\n beforeHash: string,\n afterHash: string,\n itemCount: number,\n duration: number,\n itemsAffected: number,\n appliedBy: string = 'system',\n ): void {\n const record: MigrationRecord = {\n id: `${migrationId}-${Date.now()}`,\n migrationId,\n timestamp: new Date().toISOString(),\n version,\n direction: 'up',\n status: 'applied',\n duration,\n itemsAffected,\n dataSnapshot: {\n beforeHash,\n afterHash,\n itemCount,\n },\n appliedBy,\n };\n\n this.recordMigration(record);\n this.snapshots.set(record.id, {\n beforeHash,\n afterHash,\n itemCount,\n });\n }\n\n /**\n * Get all migration records\n */\n getMigrations(): MigrationRecord[] {\n return this.migrations.map(m => ({ ...m }));\n }\n\n /**\n * Get migrations for a specific version\n */\n getMigrationsForVersion(version: string): MigrationRecord[] {\n return this.migrations.filter(m => m.version === version);\n }\n\n /**\n * Get migration by ID\n */\n getMigration(id: string): MigrationRecord | undefined {\n return this.migrations.find(m => m.id === id);\n }\n\n /**\n * Check if can rollback\n */\n canRollback(fromVersion: string, toVersion: string): boolean {\n // Find all migrations from fromVersion going down to toVersion\n const fromIndex = this.migrations.findIndex(m => m.version === fromVersion);\n const toIndex = this.migrations.findIndex(m => m.version === toVersion);\n\n if (fromIndex === -1 || toIndex === -1) {\n return false;\n }\n\n if (toIndex >= fromIndex) {\n return false;\n }\n\n // Check all migrations in between have rollback support (dataSnapshot)\n for (let i = fromIndex; i > toIndex; i--) {\n if (!this.migrations[i]?.dataSnapshot) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Get rollback path\n */\n getRollbackPath(fromVersion: string, toVersion: string): RollbackPath {\n const canRollback = this.canRollback(fromVersion, toVersion);\n const path: string[] = [];\n const affectedVersions: string[] = [];\n let estimatedDuration = 0;\n\n if (canRollback) {\n const fromIndex = this.migrations.findIndex(m => m.version === fromVersion);\n const toIndex = this.migrations.findIndex(m => m.version === toVersion);\n\n for (let i = fromIndex; i > toIndex; i--) {\n const migration = this.migrations[i];\n if (migration) {\n path.push(migration.migrationId);\n affectedVersions.push(migration.version);\n estimatedDuration += migration.duration;\n }\n }\n }\n\n return {\n path,\n canRollback,\n affectedVersions,\n estimatedDuration,\n };\n }\n\n /**\n * Get applied migrations\n */\n getAppliedMigrations(): MigrationRecord[] {\n return this.migrations.filter(m => m.status === 'applied');\n }\n\n /**\n * Get failed migrations\n */\n getFailedMigrations(): MigrationRecord[] {\n return this.migrations.filter(m => m.status === 'failed');\n }\n\n /**\n * Get pending migrations\n */\n getPendingMigrations(): MigrationRecord[] {\n return this.migrations.filter(m => m.status === 'pending');\n }\n\n /**\n * Get latest migration\n */\n getLatestMigration(): MigrationRecord | undefined {\n return this.migrations[this.migrations.length - 1];\n }\n\n /**\n * Get migration timeline\n */\n getTimeline(): Array<{ timestamp: string; version: string; status: string }> {\n return this.migrations.map(m => ({\n timestamp: m.timestamp,\n version: m.version,\n status: m.status,\n }));\n }\n\n /**\n * Get migration statistics\n */\n getStatistics() {\n const applied = this.migrations.filter(m => m.status === 'applied').length;\n const failed = this.migrations.filter(m => m.status === 'failed').length;\n const pending = this.migrations.filter(m => m.status === 'pending').length;\n const rolledBack = this.migrations.filter(m => m.status === 'rolled-back').length;\n\n const totalDuration = this.migrations.reduce((sum, m) => sum + m.duration, 0);\n const totalAffected = this.migrations.reduce((sum, m) => sum + m.itemsAffected, 0);\n\n return {\n total: this.migrations.length,\n applied,\n failed,\n pending,\n rolledBack,\n successRate: this.migrations.length > 0 ? (applied / this.migrations.length) * 100 : 0,\n totalDurationMs: totalDuration,\n averageDurationMs: this.migrations.length > 0 ? totalDuration / this.migrations.length : 0,\n totalItemsAffected: totalAffected,\n };\n }\n\n /**\n * Get audit trail\n */\n getAuditTrail(migrationId?: string) {\n const filtered = migrationId\n ? this.migrations.filter(m => m.migrationId === migrationId)\n : this.migrations;\n\n return filtered.map(m => ({\n id: m.id,\n timestamp: m.timestamp,\n migrationId: m.migrationId,\n version: m.version,\n status: m.status,\n appliedBy: m.appliedBy,\n duration: m.duration,\n itemsAffected: m.itemsAffected,\n error: m.errorMessage,\n }));\n }\n\n /**\n * Get data snapshot for recovery\n */\n getSnapshot(recordId: string) {\n return this.snapshots.get(recordId);\n }\n\n /**\n * Update migration status\n */\n updateMigrationStatus(recordId: string, status: MigrationRecord['status'], error?: string): void {\n const migration = this.migrations.find(m => m.id === recordId);\n if (migration) {\n migration.status = status;\n if (error) {\n migration.errorMessage = error;\n }\n\n logger.debug('[MigrationTracker] Migration status updated', {\n recordId,\n status,\n hasError: !!error,\n });\n }\n }\n\n /**\n * Clear history (for testing)\n */\n clear(): void {\n this.migrations = [];\n this.snapshots.clear();\n }\n\n /**\n * Get total migrations tracked\n */\n getTotalMigrations(): number {\n return this.migrations.length;\n }\n\n /**\n * Find migrations by time range\n */\n getMigrationsByTimeRange(startTime: string, endTime: string): MigrationRecord[] {\n const start = new Date(startTime).getTime();\n const end = new Date(endTime).getTime();\n\n return this.migrations.filter(m => {\n const time = new Date(m.timestamp).getTime();\n return time >= start && time <= end;\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/logger.ts","../../src/versioning/SchemaVersionManager.ts","../../src/versioning/MigrationEngine.ts","../../src/versioning/DataTransformer.ts","../../src/versioning/MigrationTracker.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Aeon Logger Interface\n *\n * Provides a pluggable logging interface that can be configured\n * by consumers to integrate with their preferred logging solution.\n */\n\n/**\n * Logger interface that consumers can implement\n */\nexport interface Logger {\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n}\n\n/**\n * Default console logger implementation\n */\nconst consoleLogger: Logger = {\n debug: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.debug('[AEON:DEBUG]', ...args);\n },\n info: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.info('[AEON:INFO]', ...args);\n },\n warn: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.warn('[AEON:WARN]', ...args);\n },\n error: (...args: unknown[]) => {\n // eslint-disable-next-line no-console\n console.error('[AEON:ERROR]', ...args);\n },\n};\n\n/**\n * No-op logger for production or when logging is disabled\n */\nconst noopLogger: Logger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n};\n\n/**\n * Current logger instance\n */\nlet currentLogger: Logger = consoleLogger;\n\n/**\n * Get the current logger instance\n */\nexport function getLogger(): Logger {\n return currentLogger;\n}\n\n/**\n * Set a custom logger implementation\n */\nexport function setLogger(logger: Logger): void {\n currentLogger = logger;\n}\n\n/**\n * Reset to the default console logger\n */\nexport function resetLogger(): void {\n currentLogger = consoleLogger;\n}\n\n/**\n * Disable all logging\n */\nexport function disableLogging(): void {\n currentLogger = noopLogger;\n}\n\n/**\n * Create a namespaced logger\n */\nexport function createNamespacedLogger(namespace: string): Logger {\n const logger = getLogger();\n return {\n debug: (...args: unknown[]) => logger.debug(`[${namespace}]`, ...args),\n info: (...args: unknown[]) => logger.info(`[${namespace}]`, ...args),\n warn: (...args: unknown[]) => logger.warn(`[${namespace}]`, ...args),\n error: (...args: unknown[]) => logger.error(`[${namespace}]`, ...args),\n };\n}\n\n// Export default logger for convenience\nexport const logger: Logger = {\n debug: (...args: unknown[]) => getLogger().debug(...args),\n info: (...args: unknown[]) => getLogger().info(...args),\n warn: (...args: unknown[]) => getLogger().warn(...args),\n error: (...args: unknown[]) => getLogger().error(...args),\n};\n","/**\n * Schema Version Manager\n *\n * Manages schema versioning across the application.\n * Tracks version history, compatibility, and migration paths.\n *\n * Features:\n * - Version tracking and comparison\n * - Compatibility matrix management\n * - Migration path calculation\n * - Version validation\n */\n\nimport { logger } from '../utils/logger';\n\nexport interface SchemaVersion {\n major: number;\n minor: number;\n patch: number;\n timestamp: string;\n description: string;\n breaking: boolean;\n}\n\nexport interface VersionMetadata {\n version: SchemaVersion;\n previousVersion?: SchemaVersion;\n changes: string[];\n migrationsRequired: string[];\n rollbackPossible: boolean;\n}\n\nexport interface CompatibilityRule {\n from: string;\n to: string;\n compatible: boolean;\n requiresMigration: boolean;\n migrationSteps: number;\n}\n\n/**\n * Schema Version Manager\n * Tracks and manages schema versions across the application\n */\nexport class SchemaVersionManager {\n private versions: Map<string, SchemaVersion> = new Map();\n private versionHistory: SchemaVersion[] = [];\n private compatibilityMatrix: Map<string, CompatibilityRule[]> = new Map();\n private currentVersion: SchemaVersion | null = null;\n\n constructor() {\n this.initializeDefaultVersions();\n }\n\n /**\n * Initialize default versions\n */\n private initializeDefaultVersions(): void {\n const v1_0_0: SchemaVersion = {\n major: 1,\n minor: 0,\n patch: 0,\n timestamp: new Date().toISOString(),\n description: 'Initial schema version',\n breaking: false,\n };\n\n this.registerVersion(v1_0_0);\n this.currentVersion = v1_0_0;\n }\n\n /**\n * Register a new schema version\n */\n registerVersion(version: SchemaVersion): void {\n const versionString = this.versionToString(version);\n\n this.versions.set(versionString, version);\n this.versionHistory.push(version);\n\n logger.debug('[SchemaVersionManager] Version registered', {\n version: versionString,\n breaking: version.breaking,\n description: version.description,\n });\n }\n\n /**\n * Get current version\n */\n getCurrentVersion(): SchemaVersion {\n if (!this.currentVersion) {\n throw new Error('No current version set');\n }\n return this.currentVersion;\n }\n\n /**\n * Set current version\n */\n setCurrentVersion(version: SchemaVersion): void {\n if (!this.versions.has(this.versionToString(version))) {\n throw new Error(\n `Version ${this.versionToString(version)} not registered`,\n );\n }\n\n this.currentVersion = version;\n logger.debug('[SchemaVersionManager] Current version set', {\n version: this.versionToString(version),\n });\n }\n\n /**\n * Get version history\n */\n getVersionHistory(): SchemaVersion[] {\n return [...this.versionHistory];\n }\n\n /**\n * Check if version exists\n */\n hasVersion(version: SchemaVersion): boolean {\n return this.versions.has(this.versionToString(version));\n }\n\n /**\n * Get version by string (e.g., \"1.2.3\")\n */\n getVersion(versionString: string): SchemaVersion | undefined {\n return this.versions.get(versionString);\n }\n\n /**\n * Register compatibility rule\n */\n registerCompatibility(rule: CompatibilityRule): void {\n if (!this.compatibilityMatrix.has(rule.from)) {\n this.compatibilityMatrix.set(rule.from, []);\n }\n\n const rules = this.compatibilityMatrix.get(rule.from);\n if (rules) {\n rules.push(rule);\n }\n\n logger.debug('[SchemaVersionManager] Compatibility rule registered', {\n from: rule.from,\n to: rule.to,\n compatible: rule.compatible,\n requiresMigration: rule.requiresMigration,\n });\n }\n\n /**\n * Check if migration path exists\n */\n canMigrate(\n fromVersion: SchemaVersion | string,\n toVersion: SchemaVersion | string,\n ): boolean {\n const fromStr =\n typeof fromVersion === 'string'\n ? fromVersion\n : this.versionToString(fromVersion);\n const toStr =\n typeof toVersion === 'string'\n ? toVersion\n : this.versionToString(toVersion);\n\n const rules = this.compatibilityMatrix.get(fromStr) || [];\n return rules.some((r) => r.to === toStr && r.requiresMigration);\n }\n\n /**\n * Get migration path\n */\n getMigrationPath(\n fromVersion: SchemaVersion,\n toVersion: SchemaVersion,\n ): SchemaVersion[] {\n const path: SchemaVersion[] = [];\n let current = fromVersion;\n\n const maxSteps = 100; // Prevent infinite loops\n let steps = 0;\n\n while (this.compareVersions(current, toVersion) !== 0 && steps < maxSteps) {\n const fromStr = this.versionToString(current);\n const rules = this.compatibilityMatrix.get(fromStr) || [];\n\n let found = false;\n for (const rule of rules) {\n const nextVersion = this.getVersion(rule.to);\n if (nextVersion) {\n // Find the closest path to target\n if (\n this.compareVersions(nextVersion, toVersion) <= 0 ||\n this.compareVersions(current, nextVersion) <\n this.compareVersions(current, toVersion)\n ) {\n current = nextVersion;\n path.push(current);\n found = true;\n break;\n }\n }\n }\n\n if (!found) {\n break;\n }\n\n steps++;\n }\n\n return path;\n }\n\n /**\n * Compare two versions\n * Returns: -1 if v1 < v2, 0 if equal, 1 if v1 > v2\n */\n compareVersions(\n v1: SchemaVersion | string,\n v2: SchemaVersion | string,\n ): number {\n const ver1 = typeof v1 === 'string' ? this.parseVersion(v1) : v1;\n const ver2 = typeof v2 === 'string' ? this.parseVersion(v2) : v2;\n\n if (ver1.major !== ver2.major) {\n return ver1.major < ver2.major ? -1 : 1;\n }\n if (ver1.minor !== ver2.minor) {\n return ver1.minor < ver2.minor ? -1 : 1;\n }\n if (ver1.patch !== ver2.patch) {\n return ver1.patch < ver2.patch ? -1 : 1;\n }\n return 0;\n }\n\n /**\n * Parse version string to SchemaVersion\n */\n parseVersion(versionString: string): SchemaVersion {\n const parts = versionString.split('.').map(Number);\n return {\n major: parts[0] || 0,\n minor: parts[1] || 0,\n patch: parts[2] || 0,\n timestamp: new Date().toISOString(),\n description: '',\n breaking: false,\n };\n }\n\n /**\n * Create new version\n */\n createVersion(\n major: number,\n minor: number,\n patch: number,\n description: string,\n breaking: boolean = false,\n ): SchemaVersion {\n return {\n major,\n minor,\n patch,\n timestamp: new Date().toISOString(),\n description,\n breaking,\n };\n }\n\n /**\n * Convert version to string\n */\n versionToString(version: SchemaVersion): string {\n return `${version.major}.${version.minor}.${version.patch}`;\n }\n\n /**\n * Get version metadata\n */\n getVersionMetadata(version: SchemaVersion): VersionMetadata {\n const history = this.versionHistory;\n const currentIndex = history.findIndex(\n (v) => this.versionToString(v) === this.versionToString(version),\n );\n\n return {\n version,\n previousVersion: currentIndex > 0 ? history[currentIndex - 1] : undefined,\n changes: [version.description],\n migrationsRequired: this.canMigrate(\n this.currentVersion || version,\n version,\n )\n ? [this.versionToString(version)]\n : [],\n rollbackPossible: currentIndex > 0,\n };\n }\n\n /**\n * Get all registered versions\n */\n getAllVersions(): SchemaVersion[] {\n return Array.from(this.versions.values()).sort((a, b) =>\n this.compareVersions(a, b),\n );\n }\n\n /**\n * Clear all versions (for testing)\n */\n clear(): void {\n this.versions.clear();\n this.versionHistory = [];\n this.compatibilityMatrix.clear();\n this.currentVersion = null;\n }\n}\n","/**\n * Migration Engine\n *\n * Executes schema migrations with rollback support.\n * Manages migration execution, error handling, and state management.\n *\n * Features:\n * - Migration execution and tracking\n * - Rollback support\n * - Error handling and recovery\n * - Migration state management\n */\n\nimport { logger } from '../utils/logger';\n\nexport interface Migration {\n id: string;\n version: string;\n name: string;\n up: (data: unknown) => unknown;\n down?: (data: unknown) => unknown;\n timestamp: string;\n description: string;\n}\n\nexport interface MigrationResult {\n migrationId: string;\n success: boolean;\n timestamp: string;\n duration: number;\n itemsAffected: number;\n errors: string[];\n}\n\nexport interface MigrationState {\n currentVersion: string;\n appliedMigrations: string[];\n failedMigrations: string[];\n lastMigrationTime: string;\n totalMigrationsRun: number;\n}\n\n/**\n * Migration Engine\n * Executes and manages schema migrations\n */\nexport class MigrationEngine {\n private migrations: Map<string, Migration> = new Map();\n private executedMigrations: MigrationResult[] = [];\n private state: MigrationState = {\n currentVersion: '1.0.0',\n appliedMigrations: [],\n failedMigrations: [],\n lastMigrationTime: new Date().toISOString(),\n totalMigrationsRun: 0,\n };\n\n /**\n * Register a migration\n */\n registerMigration(migration: Migration): void {\n this.migrations.set(migration.id, migration);\n\n logger.debug('[MigrationEngine] Migration registered', {\n id: migration.id,\n version: migration.version,\n name: migration.name,\n });\n }\n\n /**\n * Execute a migration\n */\n async executeMigration(\n migrationId: string,\n data: unknown,\n ): Promise<MigrationResult> {\n const migration = this.migrations.get(migrationId);\n if (!migration) {\n throw new Error(`Migration ${migrationId} not found`);\n }\n\n const startTime = Date.now();\n const result: MigrationResult = {\n migrationId,\n success: false,\n timestamp: new Date().toISOString(),\n duration: 0,\n itemsAffected: 0,\n errors: [],\n };\n\n try {\n logger.debug('[MigrationEngine] Executing migration', {\n id: migrationId,\n version: migration.version,\n });\n\n // Execute up migration\n migration.up(data);\n\n result.success = true;\n result.itemsAffected = Array.isArray(data)\n ? (data as unknown[]).length\n : 1;\n result.duration = Date.now() - startTime;\n\n // Track as applied\n this.state.appliedMigrations.push(migrationId);\n this.state.currentVersion = migration.version;\n this.state.totalMigrationsRun++;\n this.state.lastMigrationTime = result.timestamp;\n\n this.executedMigrations.push(result);\n\n logger.debug('[MigrationEngine] Migration executed successfully', {\n id: migrationId,\n duration: result.duration,\n itemsAffected: result.itemsAffected,\n });\n\n return result;\n } catch (error) {\n result.errors = [error instanceof Error ? error.message : String(error)];\n this.state.failedMigrations.push(migrationId);\n\n this.executedMigrations.push(result);\n\n logger.error('[MigrationEngine] Migration failed', {\n id: migrationId,\n error: result.errors[0],\n });\n\n throw new Error(`Migration ${migrationId} failed: ${result.errors[0]}`);\n }\n }\n\n /**\n * Rollback a migration\n */\n async rollbackMigration(\n migrationId: string,\n data: unknown,\n ): Promise<MigrationResult> {\n const migration = this.migrations.get(migrationId);\n if (!migration) {\n throw new Error(`Migration ${migrationId} not found`);\n }\n\n if (!migration.down) {\n throw new Error(`Migration ${migrationId} does not support rollback`);\n }\n\n const startTime = Date.now();\n const result: MigrationResult = {\n migrationId,\n success: false,\n timestamp: new Date().toISOString(),\n duration: 0,\n itemsAffected: 0,\n errors: [],\n };\n\n try {\n logger.debug('[MigrationEngine] Rolling back migration', {\n id: migrationId,\n version: migration.version,\n });\n\n // Execute down migration\n migration.down(data);\n\n result.success = true;\n result.itemsAffected = Array.isArray(data)\n ? (data as unknown[]).length\n : 1;\n result.duration = Date.now() - startTime;\n\n // Remove from applied migrations\n this.state.appliedMigrations = this.state.appliedMigrations.filter(\n (id) => id !== migrationId,\n );\n\n this.executedMigrations.push(result);\n\n logger.debug('[MigrationEngine] Migration rolled back', {\n id: migrationId,\n duration: result.duration,\n });\n\n return result;\n } catch (error) {\n result.errors = [error instanceof Error ? error.message : String(error)];\n\n this.executedMigrations.push(result);\n\n logger.error('[MigrationEngine] Rollback failed', {\n id: migrationId,\n error: result.errors[0],\n });\n\n throw new Error(\n `Rollback for ${migrationId} failed: ${result.errors[0]}`,\n );\n }\n }\n\n /**\n * Get migration state\n */\n getState(): MigrationState {\n return { ...this.state };\n }\n\n /**\n * Get migration execution history\n */\n getExecutionHistory(): MigrationResult[] {\n return [...this.executedMigrations];\n }\n\n /**\n * Get migration by ID\n */\n getMigration(migrationId: string): Migration | undefined {\n return this.migrations.get(migrationId);\n }\n\n /**\n * Get all registered migrations\n */\n getAllMigrations(): Migration[] {\n return Array.from(this.migrations.values());\n }\n\n /**\n * Get applied migrations\n */\n getAppliedMigrations(): string[] {\n return [...this.state.appliedMigrations];\n }\n\n /**\n * Get failed migrations\n */\n getFailedMigrations(): string[] {\n return [...this.state.failedMigrations];\n }\n\n /**\n * Get pending migrations\n */\n getPendingMigrations(): Migration[] {\n return this.getAllMigrations().filter(\n (m) => !this.state.appliedMigrations.includes(m.id),\n );\n }\n\n /**\n * Get migration statistics\n */\n getStatistics() {\n const successful = this.executedMigrations.filter((m) => m.success).length;\n const failed = this.executedMigrations.filter((m) => !m.success).length;\n const totalDuration = this.executedMigrations.reduce(\n (sum, m) => sum + m.duration,\n 0,\n );\n const totalAffected = this.executedMigrations.reduce(\n (sum, m) => sum + m.itemsAffected,\n 0,\n );\n\n return {\n totalExecuted: this.executedMigrations.length,\n successful,\n failed,\n successRate:\n this.executedMigrations.length > 0\n ? (successful / this.executedMigrations.length) * 100\n : 0,\n totalDurationMs: totalDuration,\n averageDurationMs:\n this.executedMigrations.length > 0\n ? totalDuration / this.executedMigrations.length\n : 0,\n totalAffected,\n };\n }\n\n /**\n * Clear history (for testing)\n */\n clear(): void {\n this.migrations.clear();\n this.executedMigrations = [];\n this.state = {\n currentVersion: '1.0.0',\n appliedMigrations: [],\n failedMigrations: [],\n lastMigrationTime: new Date().toISOString(),\n totalMigrationsRun: 0,\n };\n }\n}\n","/**\n * Data Transformer\n *\n * Transforms data structures during schema migrations.\n * Handles field transformation, type casting, and validation.\n *\n * Features:\n * - Field-level transformation\n * - Type conversion and casting\n * - Validation during transformation\n * - Error handling and reporting\n * - Batch transformation support\n */\n\nimport { logger } from '../utils/logger';\n\nexport interface FieldTransformer {\n (value: unknown): unknown;\n}\n\nexport interface TransformationRule {\n field: string;\n transformer: FieldTransformer;\n required?: boolean;\n defaultValue?: unknown;\n}\n\nexport interface TransformationResult {\n success: boolean;\n itemsTransformed: number;\n itemsFailed: number;\n errors: Array<{ item: unknown; error: string }>;\n warnings: string[];\n duration: number;\n}\n\n/**\n * Data Transformer\n * Transforms data structures during schema migrations\n */\nexport class DataTransformer {\n private rules: Map<string, TransformationRule> = new Map();\n private transformationHistory: TransformationResult[] = [];\n\n /**\n * Register a transformation rule\n */\n registerRule(rule: TransformationRule): void {\n this.rules.set(rule.field, rule);\n\n logger.debug('[DataTransformer] Rule registered', {\n field: rule.field,\n required: rule.required,\n hasDefault: rule.defaultValue !== undefined,\n });\n }\n\n /**\n * Transform a single field value\n */\n transformField(field: string, value: unknown): unknown {\n const rule = this.rules.get(field);\n if (!rule) {\n // No rule = no transformation\n return value;\n }\n\n try {\n return rule.transformer(value);\n } catch (error) {\n if (rule.required) {\n throw new Error(\n `Failed to transform required field ${field}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n // Return default value or original value\n return rule.defaultValue !== undefined ? rule.defaultValue : value;\n }\n }\n\n /**\n * Transform a single object\n */\n transformObject(data: Record<string, unknown>): Record<string, unknown> {\n const transformed: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(data)) {\n try {\n transformed[key] = this.transformField(key, value);\n } catch (error) {\n logger.warn('[DataTransformer] Field transformation failed', {\n field: key,\n error: error instanceof Error ? error.message : String(error),\n });\n\n // If field is not required, include original value\n const rule = this.rules.get(key);\n if (!rule || !rule.required) {\n transformed[key] = value;\n }\n }\n }\n\n return transformed;\n }\n\n /**\n * Transform a collection of items\n */\n transformCollection(items: unknown[]): TransformationResult {\n const startTime = Date.now();\n const result: TransformationResult = {\n success: true,\n itemsTransformed: 0,\n itemsFailed: 0,\n errors: [],\n warnings: [],\n duration: 0,\n };\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n\n try {\n if (typeof item === 'object' && item !== null && !Array.isArray(item)) {\n this.transformObject(item as Record<string, unknown>);\n result.itemsTransformed++;\n } else {\n // Cannot transform non-object items\n result.warnings.push(`Item ${i} is not a transformable object`);\n }\n } catch (error) {\n result.errors.push({\n item,\n error: error instanceof Error ? error.message : String(error),\n });\n result.itemsFailed++;\n }\n }\n\n result.duration = Date.now() - startTime;\n result.success = result.itemsFailed === 0;\n\n this.transformationHistory.push(result);\n\n logger.debug('[DataTransformer] Collection transformed', {\n total: items.length,\n transformed: result.itemsTransformed,\n failed: result.itemsFailed,\n duration: result.duration,\n });\n\n return result;\n }\n\n /**\n * Validate transformed data\n */\n validateTransformation(\n original: unknown[],\n transformed: unknown[],\n ): {\n valid: boolean;\n issues: string[];\n } {\n const issues: string[] = [];\n\n if (original.length !== transformed.length) {\n issues.push(\n `Item count mismatch: ${original.length} -> ${transformed.length}`,\n );\n }\n\n // Check that all items were processed\n for (let i = 0; i < Math.min(original.length, transformed.length); i++) {\n const orig = original[i];\n const trans = transformed[i];\n\n if (!this.validateItem(orig, trans)) {\n issues.push(`Item ${i} validation failed`);\n }\n }\n\n return {\n valid: issues.length === 0,\n issues,\n };\n }\n\n /**\n * Validate a single item transformation\n */\n private validateItem(original: unknown, transformed: unknown): boolean {\n // Basic validation: ensure transformed exists if original exists\n if (original === null || original === undefined) {\n return true;\n }\n\n if (typeof original === 'object' && typeof transformed !== 'object') {\n return false;\n }\n\n return true;\n }\n\n /**\n * Get transformation history\n */\n getTransformationHistory(): TransformationResult[] {\n return [...this.transformationHistory];\n }\n\n /**\n * Get transformation statistics\n */\n getStatistics() {\n const totalTransformed = this.transformationHistory.reduce(\n (sum, r) => sum + r.itemsTransformed,\n 0,\n );\n const totalFailed = this.transformationHistory.reduce(\n (sum, r) => sum + r.itemsFailed,\n 0,\n );\n const totalDuration = this.transformationHistory.reduce(\n (sum, r) => sum + r.duration,\n 0,\n );\n\n return {\n totalBatches: this.transformationHistory.length,\n totalTransformed,\n totalFailed,\n successRate:\n totalTransformed + totalFailed > 0\n ? (totalTransformed / (totalTransformed + totalFailed)) * 100\n : 0,\n totalDurationMs: totalDuration,\n averageBatchDurationMs:\n this.transformationHistory.length > 0\n ? totalDuration / this.transformationHistory.length\n : 0,\n };\n }\n\n /**\n * Get registered rules\n */\n getRules(): TransformationRule[] {\n return Array.from(this.rules.values());\n }\n\n /**\n * Get rule for field\n */\n getRule(field: string): TransformationRule | undefined {\n return this.rules.get(field);\n }\n\n /**\n * Clear all rules (for testing)\n */\n clearRules(): void {\n this.rules.clear();\n }\n\n /**\n * Clear history (for testing)\n */\n clearHistory(): void {\n this.transformationHistory = [];\n }\n\n /**\n * Clear all state (for testing)\n */\n clear(): void {\n this.clearRules();\n this.clearHistory();\n }\n}\n","/**\n * Migration Tracker\n *\n * Tracks migration history and enables rollback.\n * Maintains detailed audit trail of all schema changes.\n *\n * Features:\n * - Migration history tracking\n * - Rollback path calculation\n * - Data snapshots for recovery\n * - Audit trail with timestamps\n * - Migration dependency tracking\n */\n\nimport { logger } from '../utils/logger';\nimport type {\n PersistedEnvelope,\n PersistenceDeserializer,\n PersistenceSerializer,\n StorageAdapter,\n} from '../persistence';\n\nexport interface MigrationRecord {\n id: string;\n migrationId: string;\n timestamp: string;\n version: string;\n direction: 'up' | 'down';\n status: 'pending' | 'applied' | 'failed' | 'rolled-back';\n duration: number;\n itemsAffected: number;\n dataSnapshot?: {\n beforeHash: string;\n afterHash: string;\n itemCount: number;\n };\n errorMessage?: string;\n appliedBy: string;\n metadata?: Record<string, unknown>;\n previousHash?: string;\n integrityHash?: string;\n}\n\nexport interface RollbackPath {\n path: string[];\n canRollback: boolean;\n affectedVersions: string[];\n estimatedDuration: number;\n}\n\nexport interface MigrationIntegrityEntry {\n recordId: string;\n previousHash: string;\n hash: string;\n}\n\nexport interface MigrationTrackerPersistenceData {\n migrations: MigrationRecord[];\n snapshots: Array<{\n recordId: string;\n beforeHash: string;\n afterHash: string;\n itemCount: number;\n }>;\n integrity: {\n algorithm: 'sha256-chain-v1';\n entries: MigrationIntegrityEntry[];\n rootHash: string;\n };\n}\n\nexport interface MigrationTrackerPersistenceConfig {\n adapter: StorageAdapter;\n key?: string;\n autoPersist?: boolean;\n autoLoad?: boolean;\n persistDebounceMs?: number;\n serializer?: PersistenceSerializer<MigrationTrackerPersistenceData>;\n deserializer?: PersistenceDeserializer<MigrationTrackerPersistenceData>;\n}\n\nexport interface MigrationTrackerOptions {\n persistence?: MigrationTrackerPersistenceConfig;\n}\n\n/**\n * Migration Tracker\n * Tracks and manages migration history with rollback support\n */\nexport class MigrationTracker {\n private static readonly DEFAULT_PERSIST_KEY = 'aeon:migration-tracker:v1';\n private static readonly INTEGRITY_ROOT = 'aeon:migration-integrity-root:v1';\n private migrations: MigrationRecord[] = [];\n private snapshots: Map<\n string,\n { beforeHash: string; afterHash: string; itemCount: number }\n > = new Map();\n private persistence:\n | (MigrationTrackerPersistenceConfig & { key: string })\n | null = null;\n private persistTimer: ReturnType<typeof setTimeout> | null = null;\n private persistInFlight = false;\n private persistPending = false;\n\n constructor(options?: MigrationTrackerOptions) {\n if (options?.persistence) {\n this.persistence = {\n ...options.persistence,\n key:\n options.persistence.key ?? MigrationTracker.DEFAULT_PERSIST_KEY,\n autoPersist: options.persistence.autoPersist ?? true,\n autoLoad: options.persistence.autoLoad ?? false,\n persistDebounceMs: options.persistence.persistDebounceMs ?? 25,\n };\n }\n\n if (this.persistence?.autoLoad) {\n void this.loadFromPersistence().catch((error) => {\n logger.error('[MigrationTracker] Failed to load persistence', {\n key: this.persistence?.key,\n error: error instanceof Error ? error.message : String(error),\n });\n });\n }\n }\n\n /**\n * Track a new migration\n */\n recordMigration(record: MigrationRecord): void {\n this.migrations.push({ ...record });\n this.schedulePersist();\n\n logger.debug('[MigrationTracker] Migration recorded', {\n id: record.id,\n migrationId: record.migrationId,\n version: record.version,\n status: record.status,\n });\n }\n\n /**\n * Track migration with snapshot\n */\n trackMigration(\n migrationId: string,\n version: string,\n beforeHash: string,\n afterHash: string,\n itemCount: number,\n duration: number,\n itemsAffected: number,\n appliedBy = 'system',\n ): void {\n const record: MigrationRecord = {\n id: `${migrationId}-${Date.now()}`,\n migrationId,\n timestamp: new Date().toISOString(),\n version,\n direction: 'up',\n status: 'applied',\n duration,\n itemsAffected,\n dataSnapshot: {\n beforeHash,\n afterHash,\n itemCount,\n },\n appliedBy,\n };\n\n this.recordMigration(record);\n this.snapshots.set(record.id, {\n beforeHash,\n afterHash,\n itemCount,\n });\n }\n\n /**\n * Get all migration records\n */\n getMigrations(): MigrationRecord[] {\n return this.migrations.map((m) => ({ ...m }));\n }\n\n /**\n * Get migrations for a specific version\n */\n getMigrationsForVersion(version: string): MigrationRecord[] {\n return this.migrations.filter((m) => m.version === version);\n }\n\n /**\n * Get migration by ID\n */\n getMigration(id: string): MigrationRecord | undefined {\n return this.migrations.find((m) => m.id === id);\n }\n\n /**\n * Check if can rollback\n */\n canRollback(fromVersion: string, toVersion: string): boolean {\n // Find all migrations from fromVersion going down to toVersion\n const fromIndex = this.migrations.findIndex(\n (m) => m.version === fromVersion,\n );\n const toIndex = this.migrations.findIndex((m) => m.version === toVersion);\n\n if (fromIndex === -1 || toIndex === -1) {\n return false;\n }\n\n if (toIndex >= fromIndex) {\n return false;\n }\n\n // Check all migrations in between have rollback support (dataSnapshot)\n for (let i = fromIndex; i > toIndex; i--) {\n if (!this.migrations[i]?.dataSnapshot) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Get rollback path\n */\n getRollbackPath(fromVersion: string, toVersion: string): RollbackPath {\n const canRollback = this.canRollback(fromVersion, toVersion);\n const path: string[] = [];\n const affectedVersions: string[] = [];\n let estimatedDuration = 0;\n\n if (canRollback) {\n const fromIndex = this.migrations.findIndex(\n (m) => m.version === fromVersion,\n );\n const toIndex = this.migrations.findIndex((m) => m.version === toVersion);\n\n for (let i = fromIndex; i > toIndex; i--) {\n const migration = this.migrations[i];\n if (migration) {\n path.push(migration.migrationId);\n affectedVersions.push(migration.version);\n estimatedDuration += migration.duration;\n }\n }\n }\n\n return {\n path,\n canRollback,\n affectedVersions,\n estimatedDuration,\n };\n }\n\n /**\n * Get applied migrations\n */\n getAppliedMigrations(): MigrationRecord[] {\n return this.migrations.filter((m) => m.status === 'applied');\n }\n\n /**\n * Get failed migrations\n */\n getFailedMigrations(): MigrationRecord[] {\n return this.migrations.filter((m) => m.status === 'failed');\n }\n\n /**\n * Get pending migrations\n */\n getPendingMigrations(): MigrationRecord[] {\n return this.migrations.filter((m) => m.status === 'pending');\n }\n\n /**\n * Get latest migration\n */\n getLatestMigration(): MigrationRecord | undefined {\n return this.migrations[this.migrations.length - 1];\n }\n\n /**\n * Get migration timeline\n */\n getTimeline(): Array<{ timestamp: string; version: string; status: string }> {\n return this.migrations.map((m) => ({\n timestamp: m.timestamp,\n version: m.version,\n status: m.status,\n }));\n }\n\n /**\n * Get migration statistics\n */\n getStatistics() {\n const applied = this.migrations.filter(\n (m) => m.status === 'applied',\n ).length;\n const failed = this.migrations.filter((m) => m.status === 'failed').length;\n const pending = this.migrations.filter(\n (m) => m.status === 'pending',\n ).length;\n const rolledBack = this.migrations.filter(\n (m) => m.status === 'rolled-back',\n ).length;\n\n const totalDuration = this.migrations.reduce(\n (sum, m) => sum + m.duration,\n 0,\n );\n const totalAffected = this.migrations.reduce(\n (sum, m) => sum + m.itemsAffected,\n 0,\n );\n\n return {\n total: this.migrations.length,\n applied,\n failed,\n pending,\n rolledBack,\n successRate:\n this.migrations.length > 0\n ? (applied / this.migrations.length) * 100\n : 0,\n totalDurationMs: totalDuration,\n averageDurationMs:\n this.migrations.length > 0 ? totalDuration / this.migrations.length : 0,\n totalItemsAffected: totalAffected,\n };\n }\n\n /**\n * Get audit trail\n */\n getAuditTrail(migrationId?: string) {\n const filtered = migrationId\n ? this.migrations.filter((m) => m.migrationId === migrationId)\n : this.migrations;\n\n return filtered.map((m) => ({\n id: m.id,\n timestamp: m.timestamp,\n migrationId: m.migrationId,\n version: m.version,\n status: m.status,\n appliedBy: m.appliedBy,\n duration: m.duration,\n itemsAffected: m.itemsAffected,\n error: m.errorMessage,\n }));\n }\n\n /**\n * Get data snapshot for recovery\n */\n getSnapshot(recordId: string) {\n return this.snapshots.get(recordId);\n }\n\n /**\n * Update migration status\n */\n updateMigrationStatus(\n recordId: string,\n status: MigrationRecord['status'],\n error?: string,\n ): void {\n const migration = this.migrations.find((m) => m.id === recordId);\n if (migration) {\n migration.status = status;\n if (error) {\n migration.errorMessage = error;\n }\n\n logger.debug('[MigrationTracker] Migration status updated', {\n recordId,\n status,\n hasError: !!error,\n });\n this.schedulePersist();\n }\n }\n\n /**\n * Persist tracker state with integrity chain verification metadata.\n */\n async saveToPersistence(): Promise<void> {\n if (!this.persistence) {\n return;\n }\n\n const normalizedMigrations = this.migrations.map((migration) => ({\n ...migration,\n previousHash: undefined,\n integrityHash: undefined,\n }));\n\n const integrityEntries: MigrationIntegrityEntry[] = [];\n let previousHash = MigrationTracker.INTEGRITY_ROOT;\n\n for (const migration of normalizedMigrations) {\n const hash = await this.computeDigestHex(\n `${previousHash}|${this.stableStringify(migration)}`,\n );\n integrityEntries.push({\n recordId: migration.id,\n previousHash,\n hash,\n });\n previousHash = hash;\n }\n\n const persistedMigrations = normalizedMigrations.map((migration, index) => ({\n ...migration,\n previousHash: integrityEntries[index]?.previousHash,\n integrityHash: integrityEntries[index]?.hash,\n }));\n\n const data: MigrationTrackerPersistenceData = {\n migrations: persistedMigrations,\n snapshots: Array.from(this.snapshots.entries()).map(\n ([recordId, snapshot]) => ({\n recordId,\n beforeHash: snapshot.beforeHash,\n afterHash: snapshot.afterHash,\n itemCount: snapshot.itemCount,\n }),\n ),\n integrity: {\n algorithm: 'sha256-chain-v1',\n entries: integrityEntries,\n rootHash: previousHash,\n },\n };\n\n const envelope: PersistedEnvelope<MigrationTrackerPersistenceData> = {\n version: 1,\n updatedAt: Date.now(),\n data,\n };\n\n const serialize =\n this.persistence.serializer ??\n ((value: PersistedEnvelope<MigrationTrackerPersistenceData>) =>\n JSON.stringify(value));\n\n await this.persistence.adapter.setItem(this.persistence.key, serialize(envelope));\n }\n\n /**\n * Load tracker state and verify integrity chain.\n */\n async loadFromPersistence(): Promise<{\n migrations: number;\n snapshots: number;\n }> {\n if (!this.persistence) {\n return { migrations: 0, snapshots: 0 };\n }\n\n const raw = await this.persistence.adapter.getItem(this.persistence.key);\n if (!raw) {\n return { migrations: 0, snapshots: 0 };\n }\n\n const deserialize =\n this.persistence.deserializer ??\n ((value: string) =>\n JSON.parse(value) as PersistedEnvelope<MigrationTrackerPersistenceData>);\n\n const envelope = deserialize(raw);\n if (envelope.version !== 1 || !envelope.data) {\n throw new Error('Invalid migration tracker persistence payload');\n }\n if (\n !Array.isArray(envelope.data.migrations) ||\n !Array.isArray(envelope.data.snapshots) ||\n !envelope.data.integrity ||\n !Array.isArray(envelope.data.integrity.entries) ||\n typeof envelope.data.integrity.rootHash !== 'string'\n ) {\n throw new Error('Invalid migration tracker persistence structure');\n }\n\n if (envelope.data.integrity.algorithm !== 'sha256-chain-v1') {\n throw new Error('Unsupported migration integrity algorithm');\n }\n\n if (\n envelope.data.integrity.entries.length !== envelope.data.migrations.length\n ) {\n throw new Error('Migration integrity entry count mismatch');\n }\n\n const validatedMigrations: MigrationRecord[] = [];\n let previousHash = MigrationTracker.INTEGRITY_ROOT;\n\n for (let i = 0; i < envelope.data.migrations.length; i++) {\n const migration = envelope.data.migrations[i];\n const integrity = envelope.data.integrity.entries[i];\n\n if (!this.isValidMigrationRecord(migration)) {\n throw new Error('Invalid persisted migration record');\n }\n if (\n !integrity ||\n integrity.recordId !== migration.id ||\n integrity.previousHash !== previousHash\n ) {\n throw new Error('Migration integrity chain mismatch');\n }\n\n const expectedHash = await this.computeDigestHex(\n `${previousHash}|${this.stableStringify({\n ...migration,\n previousHash: undefined,\n integrityHash: undefined,\n })}`,\n );\n\n if (expectedHash !== integrity.hash) {\n throw new Error('Migration integrity verification failed');\n }\n\n validatedMigrations.push({\n ...migration,\n previousHash: integrity.previousHash,\n integrityHash: integrity.hash,\n });\n\n previousHash = expectedHash;\n }\n\n if (previousHash !== envelope.data.integrity.rootHash) {\n throw new Error('Migration integrity root hash mismatch');\n }\n\n const validatedSnapshots = new Map<\n string,\n { beforeHash: string; afterHash: string; itemCount: number }\n >();\n\n for (const snapshot of envelope.data.snapshots) {\n if (\n typeof snapshot.recordId !== 'string' ||\n typeof snapshot.beforeHash !== 'string' ||\n typeof snapshot.afterHash !== 'string' ||\n typeof snapshot.itemCount !== 'number'\n ) {\n throw new Error('Invalid persisted migration snapshot');\n }\n\n validatedSnapshots.set(snapshot.recordId, {\n beforeHash: snapshot.beforeHash,\n afterHash: snapshot.afterHash,\n itemCount: snapshot.itemCount,\n });\n }\n\n this.migrations = validatedMigrations;\n this.snapshots = validatedSnapshots;\n\n logger.debug('[MigrationTracker] Loaded from persistence', {\n key: this.persistence.key,\n migrations: this.migrations.length,\n snapshots: this.snapshots.size,\n });\n\n return { migrations: this.migrations.length, snapshots: this.snapshots.size };\n }\n\n /**\n * Remove persisted migration tracker state.\n */\n async clearPersistence(): Promise<void> {\n if (!this.persistence) {\n return;\n }\n await this.persistence.adapter.removeItem(this.persistence.key);\n }\n\n /**\n * Clear history (for testing)\n */\n clear(): void {\n this.migrations = [];\n this.snapshots.clear();\n this.schedulePersist();\n }\n\n /**\n * Get total migrations tracked\n */\n getTotalMigrations(): number {\n return this.migrations.length;\n }\n\n /**\n * Find migrations by time range\n */\n getMigrationsByTimeRange(\n startTime: string,\n endTime: string,\n ): MigrationRecord[] {\n const start = new Date(startTime).getTime();\n const end = new Date(endTime).getTime();\n\n return this.migrations.filter((m) => {\n const time = new Date(m.timestamp).getTime();\n return time >= start && time <= end;\n });\n }\n\n private schedulePersist(): void {\n if (!this.persistence || this.persistence.autoPersist === false) {\n return;\n }\n\n if (this.persistTimer) {\n clearTimeout(this.persistTimer);\n }\n\n this.persistTimer = setTimeout(() => {\n void this.persistSafely();\n }, this.persistence.persistDebounceMs ?? 25);\n }\n\n private async persistSafely(): Promise<void> {\n if (!this.persistence) {\n return;\n }\n\n if (this.persistInFlight) {\n this.persistPending = true;\n return;\n }\n\n this.persistInFlight = true;\n try {\n await this.saveToPersistence();\n } catch (error) {\n logger.error('[MigrationTracker] Persistence write failed', {\n key: this.persistence.key,\n error: error instanceof Error ? error.message : String(error),\n });\n } finally {\n this.persistInFlight = false;\n const shouldRunAgain = this.persistPending;\n this.persistPending = false;\n if (shouldRunAgain) {\n void this.persistSafely();\n }\n }\n }\n\n private isValidMigrationRecord(value: unknown): value is MigrationRecord {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const record = value as Partial<MigrationRecord>;\n const validDirection = record.direction === 'up' || record.direction === 'down';\n const validStatus =\n record.status === 'pending' ||\n record.status === 'applied' ||\n record.status === 'failed' ||\n record.status === 'rolled-back';\n return (\n typeof record.id === 'string' &&\n typeof record.migrationId === 'string' &&\n typeof record.timestamp === 'string' &&\n typeof record.version === 'string' &&\n validDirection &&\n validStatus &&\n typeof record.duration === 'number' &&\n typeof record.itemsAffected === 'number' &&\n typeof record.appliedBy === 'string'\n );\n }\n\n private stableStringify(value: unknown): string {\n if (value === null || typeof value !== 'object') {\n return JSON.stringify(value);\n }\n\n if (Array.isArray(value)) {\n return `[${value.map((item) => this.stableStringify(item)).join(',')}]`;\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => a.localeCompare(b),\n );\n\n return `{${entries\n .map(([key, entryValue]) =>\n `${JSON.stringify(key)}:${this.stableStringify(entryValue)}`,\n )\n .join(',')}}`;\n }\n\n private async computeDigestHex(value: string): Promise<string> {\n if (globalThis.crypto?.subtle) {\n const bytes = new TextEncoder().encode(value);\n const normalized = bytes.buffer.slice(\n bytes.byteOffset,\n bytes.byteOffset + bytes.byteLength,\n );\n const digest = await globalThis.crypto.subtle.digest(\n 'SHA-256',\n normalized,\n );\n return this.toHex(new Uint8Array(digest));\n }\n\n return this.fallbackDigestHex(value);\n }\n\n private toHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('');\n }\n\n private fallbackDigestHex(value: string): string {\n let hash = 2166136261;\n for (let i = 0; i < value.length; i++) {\n hash ^= value.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return (hash >>> 0).toString(16).padStart(8, '0');\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@affectively/aeon",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Distributed synchronization, schema versioning, and conflict resolution for real-time collaborative applications",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"distributed",
|
|
@@ -51,6 +51,46 @@
|
|
|
51
51
|
"default": "./dist/core/index.cjs"
|
|
52
52
|
}
|
|
53
53
|
},
|
|
54
|
+
"./offline": {
|
|
55
|
+
"import": {
|
|
56
|
+
"types": "./dist/offline/index.d.ts",
|
|
57
|
+
"default": "./dist/offline/index.js"
|
|
58
|
+
},
|
|
59
|
+
"require": {
|
|
60
|
+
"types": "./dist/offline/index.d.cts",
|
|
61
|
+
"default": "./dist/offline/index.cjs"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"./compression": {
|
|
65
|
+
"import": {
|
|
66
|
+
"types": "./dist/compression/index.d.ts",
|
|
67
|
+
"default": "./dist/compression/index.js"
|
|
68
|
+
},
|
|
69
|
+
"require": {
|
|
70
|
+
"types": "./dist/compression/index.d.cts",
|
|
71
|
+
"default": "./dist/compression/index.cjs"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"./optimization": {
|
|
75
|
+
"import": {
|
|
76
|
+
"types": "./dist/optimization/index.d.ts",
|
|
77
|
+
"default": "./dist/optimization/index.js"
|
|
78
|
+
},
|
|
79
|
+
"require": {
|
|
80
|
+
"types": "./dist/optimization/index.d.cts",
|
|
81
|
+
"default": "./dist/optimization/index.cjs"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"./presence": {
|
|
85
|
+
"import": {
|
|
86
|
+
"types": "./dist/presence/index.d.ts",
|
|
87
|
+
"default": "./dist/presence/index.js"
|
|
88
|
+
},
|
|
89
|
+
"require": {
|
|
90
|
+
"types": "./dist/presence/index.d.cts",
|
|
91
|
+
"default": "./dist/presence/index.cjs"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
54
94
|
"./versioning": {
|
|
55
95
|
"import": {
|
|
56
96
|
"types": "./dist/versioning/index.d.ts",
|
|
@@ -90,6 +130,16 @@
|
|
|
90
130
|
"types": "./dist/crypto/index.d.cts",
|
|
91
131
|
"default": "./dist/crypto/index.cjs"
|
|
92
132
|
}
|
|
133
|
+
},
|
|
134
|
+
"./persistence": {
|
|
135
|
+
"import": {
|
|
136
|
+
"types": "./dist/persistence/index.d.ts",
|
|
137
|
+
"default": "./dist/persistence/index.js"
|
|
138
|
+
},
|
|
139
|
+
"require": {
|
|
140
|
+
"types": "./dist/persistence/index.d.cts",
|
|
141
|
+
"default": "./dist/persistence/index.cjs"
|
|
142
|
+
}
|
|
93
143
|
}
|
|
94
144
|
},
|
|
95
145
|
"files": [
|