{"version":3,"sources":["../../src/hmr/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @fileoverview OrdoJS Dev Tools - Enhanced HMR\n *\n * Enhanced hot module replacement with state preservation and improved debugging.\n */\n\nimport { EventEmitter } from 'events';\nimport type { HMRUpdate } from '../types/index.js';\n\n/**\n * Enhanced HMR for improved hot module replacement\n */\nexport class EnhancedHMR extends EventEmitter {\n  private updates: Map<string, HMRUpdate>;\n  private isRunning: boolean;\n  private port: number;\n  private statePreservation: boolean;\n\n  /**\n   * Create a new EnhancedHMR instance\n   *\n   * @param port - WebSocket port for enhanced HMR\n   * @param statePreservation - Enable state preservation\n   */\n  constructor(port: number = 24684, statePreservation: boolean = true) {\n    super();\n\n    this.updates = new Map();\n    this.isRunning = false;\n    this.port = port;\n    this.statePreservation = statePreservation;\n  }\n\n  /**\n   * Start the enhanced HMR\n   */\n  async start(): Promise<void> {\n    if (this.isRunning) {\n      console.warn('Enhanced HMR is already running');\n      return;\n    }\n\n    try {\n      // Start WebSocket server for enhanced HMR communication\n      await this.startWebSocketServer();\n\n      this.isRunning = true;\n      console.log(`Enhanced HMR started on port ${this.port}`);\n\n      this.emit('started');\n    } catch (error) {\n      console.error('Failed to start enhanced HMR:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Stop the enhanced HMR\n   */\n  async stop(): Promise<void> {\n    if (!this.isRunning) {\n      console.warn('Enhanced HMR is not running');\n      return;\n    }\n\n    try {\n      // Clean up WebSocket server\n      await this.stopWebSocketServer();\n\n      this.isRunning = false;\n      console.log('Enhanced HMR stopped');\n\n      this.emit('stopped');\n    } catch (error) {\n      console.error('Failed to stop enhanced HMR:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Send an HMR update\n   *\n   * @param update - HMR update information\n   */\n  sendUpdate(update: HMRUpdate): void {\n    const updateId = this.generateUpdateId(update);\n    this.updates.set(updateId, update);\n    this.emit('updateSent', { updateId, update });\n  }\n\n  /**\n   * Get update by ID\n   *\n   * @param updateId - Update identifier\n   * @returns HMR update or undefined\n   */\n  getUpdate(updateId: string): HMRUpdate | undefined {\n    return this.updates.get(updateId);\n  }\n\n  /**\n   * Get all updates\n   *\n   * @returns Array of all updates\n   */\n  getAllUpdates(): HMRUpdate[] {\n    return Array.from(this.updates.values());\n  }\n\n  /**\n   * Clear all updates\n   */\n  clearUpdates(): void {\n    this.updates.clear();\n    this.emit('updatesCleared');\n  }\n\n  /**\n   * Get HMR statistics\n   *\n   * @returns HMR statistics\n   */\n  getHMRStats(): {\n    totalUpdates: number;\n    updatesByType: Record<string, number>;\n    updatesByFile: Record<string, number>;\n    averageUpdateTime: number;\n  } {\n    const updates = Array.from(this.updates.values());\n    const updatesByType: Record<string, number> = {};\n    const updatesByFile: Record<string, number> = {};\n    let totalUpdateTime = 0;\n\n    for (const update of updates) {\n      updatesByType[update.type] = (updatesByType[update.type] || 0) + 1;\n      updatesByFile[update.filePath] = (updatesByFile[update.filePath] || 0) + 1;\n      totalUpdateTime += Date.now() - update.timestamp;\n    }\n\n    const averageUpdateTime = updates.length > 0 ? totalUpdateTime / updates.length : 0;\n\n    return {\n      totalUpdates: updates.length,\n      updatesByType,\n      updatesByFile,\n      averageUpdateTime\n    };\n  }\n\n  /**\n   * Enable state preservation\n   */\n  enableStatePreservation(): void {\n    this.statePreservation = true;\n    this.emit('statePreservationEnabled');\n  }\n\n  /**\n   * Disable state preservation\n   */\n  disableStatePreservation(): void {\n    this.statePreservation = false;\n    this.emit('statePreservationDisabled');\n  }\n\n  /**\n   * Check if state preservation is enabled\n   *\n   * @returns True if state preservation is enabled\n   */\n  isStatePreservationEnabled(): boolean {\n    return this.statePreservation;\n  }\n\n  /**\n   * Generate update ID\n   *\n   * @param update - HMR update\n   * @returns Update ID\n   */\n  private generateUpdateId(update: HMRUpdate): string {\n    return `${update.type}-${update.filePath}-${update.timestamp}`;\n  }\n\n  /**\n   * Start WebSocket server for enhanced HMR communication\n   */\n  private async startWebSocketServer(): Promise<void> {\n    // Implementation for WebSocket server\n    // This would handle communication with the browser extension\n    console.log('Starting WebSocket server for enhanced HMR...');\n  }\n\n  /**\n   * Stop WebSocket server\n   */\n  private async stopWebSocketServer(): Promise<void> {\n    // Implementation for stopping WebSocket server\n    console.log('Stopping WebSocket server for enhanced HMR...');\n  }\n}\n"]}