{"version":3,"sources":["../src/core/performance-monitor.ts"],"names":["_PerformanceMonitor","__publicField","duration","fileId","success","startTime","type","metadata","renderEvents","e","successEvents","errorEvents","avgRenderTime","sum","avgUploadTime","uploadSpeed","errorRate","successRate","memory","firstRender","firstUpload","PerformanceMonitor","PerformanceOptimizer","func","wait","timeout","args","limit","inThrottle","keyGenerator","cache","key","result","operation","options","maxAttempts","delay","lastError","i","error","resolve"],"mappings":"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","file":"chunk-GUDLRPF5.cjs","sourcesContent":["export interface PerformanceMetrics {\r\n  bundleSize: {\r\n    raw: number;\r\n    gzipped: number;\r\n    minified: number;\r\n  };\r\n  runtime: {\r\n    renderTime: number;\r\n    uploadSpeed: number;\r\n    memoryUsage: number;\r\n    cpuUsage: number;\r\n  };\r\n  userExperience: {\r\n    timeToInteractive: number;\r\n    firstUploadTime: number;\r\n    errorRate: number;\r\n    successRate: number;\r\n  };\r\n}\r\n\r\nexport class PerformanceMonitor {\r\n  private static instance: PerformanceMonitor;\r\n  private events: Array<{\r\n    type: \"render\" | \"upload\" | \"validation\" | \"error\" | \"success\";\r\n    timestamp: number;\r\n    duration?: number;\r\n    metadata?: Record<string, any>;\r\n  }> = [];\r\n  private startTime: number = performance.now();\r\n  private renderStartTime: number = 0;\r\n  private uploadStartTimes: Map<string, number> = new Map();\r\n\r\n  private constructor() {}\r\n\r\n  static getInstance(): PerformanceMonitor {\r\n    if (!PerformanceMonitor.instance) {\r\n      PerformanceMonitor.instance = new PerformanceMonitor();\r\n    }\r\n    return PerformanceMonitor.instance;\r\n  }\r\n\r\n  startRender(): void {\r\n    this.renderStartTime = performance.now();\r\n  }\r\n\r\n  endRender(): number {\r\n    const duration = performance.now() - this.renderStartTime;\r\n    this.events.push({\r\n      type: \"render\",\r\n      timestamp: Date.now(),\r\n      duration,\r\n    });\r\n    return duration;\r\n  }\r\n\r\n  startUpload(fileId: string): void {\r\n    this.uploadStartTimes.set(fileId, performance.now());\r\n  }\r\n\r\n  endUpload(fileId: string, success: boolean): number {\r\n    const startTime = this.uploadStartTimes.get(fileId);\r\n    if (!startTime) return 0;\r\n\r\n    const duration = performance.now() - startTime;\r\n    this.uploadStartTimes.delete(fileId);\r\n\r\n    this.events.push({\r\n      type: success ? \"success\" : \"error\",\r\n      timestamp: Date.now(),\r\n      duration,\r\n      metadata: { fileId, success },\r\n    });\r\n\r\n    return duration;\r\n  }\r\n\r\n  recordEvent(\r\n    type: \"render\" | \"upload\" | \"validation\" | \"error\" | \"success\",\r\n    metadata?: Record<string, any>\r\n  ): void {\r\n    this.events.push({\r\n      type,\r\n      timestamp: Date.now(),\r\n      metadata,\r\n    });\r\n  }\r\n\r\n  getMetrics(): PerformanceMetrics {\r\n    const renderEvents = this.events.filter((e) => e.type === \"render\");\r\n    const successEvents = this.events.filter((e) => e.type === \"success\");\r\n    const errorEvents = this.events.filter((e) => e.type === \"error\");\r\n\r\n    const avgRenderTime =\r\n      renderEvents.length > 0\r\n        ? renderEvents.reduce((sum, e) => sum + (e.duration || 0), 0) /\r\n          renderEvents.length\r\n        : 0;\r\n\r\n    const avgUploadTime =\r\n      successEvents.length > 0\r\n        ? successEvents.reduce((sum, e) => sum + (e.duration || 0), 0) /\r\n          successEvents.length\r\n        : 0;\r\n\r\n    const uploadSpeed = avgUploadTime > 0 ? 1000 / avgUploadTime : 0; // files per second\r\n    const errorRate =\r\n      this.events.length > 0 ? errorEvents.length / this.events.length : 0;\r\n    const successRate =\r\n      this.events.length > 0 ? successEvents.length / this.events.length : 0;\r\n\r\n    return {\r\n      bundleSize: {\r\n        raw: this.getBundleSize(),\r\n        gzipped: this.getBundleSize() * 0.3, // Approximate gzip ratio\r\n        minified: this.getBundleSize() * 0.7, // Approximate minification ratio\r\n      },\r\n      runtime: {\r\n        renderTime: avgRenderTime,\r\n        uploadSpeed,\r\n        memoryUsage: this.getMemoryUsage(),\r\n        cpuUsage: this.getCpuUsage(),\r\n      },\r\n      userExperience: {\r\n        timeToInteractive: this.getTimeToInteractive(),\r\n        firstUploadTime: this.getFirstUploadTime(),\r\n        errorRate,\r\n        successRate,\r\n      },\r\n    };\r\n  }\r\n\r\n  private getBundleSize(): number {\r\n    // This would be calculated during build time\r\n    // For now, return an estimated size based on typical React component\r\n    return 40 * 1024; // 40KB estimated\r\n  }\r\n\r\n  private getMemoryUsage(): number {\r\n    if (\"memory\" in performance) {\r\n      const memory = (performance as any).memory;\r\n      return memory.usedJSHeapSize / memory.jsHeapSizeLimit;\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  private getCpuUsage(): number {\r\n    // CPU usage is difficult to measure in browsers\r\n    // This is a simplified approximation\r\n    return 0;\r\n  }\r\n\r\n  private getTimeToInteractive(): number {\r\n    const firstRender = this.events.find((e) => e.type === \"render\");\r\n    return firstRender ? firstRender.timestamp - this.startTime : 0;\r\n  }\r\n\r\n  private getFirstUploadTime(): number {\r\n    const firstUpload = this.events.find((e) => e.type === \"success\");\r\n    return firstUpload ? firstUpload.timestamp - this.startTime : 0;\r\n  }\r\n\r\n  reset(): void {\r\n    this.events = [];\r\n    this.startTime = performance.now();\r\n    this.uploadStartTimes.clear();\r\n  }\r\n\r\n  exportData(): Array<{\r\n    type: \"render\" | \"upload\" | \"validation\" | \"error\" | \"success\";\r\n    timestamp: number;\r\n    duration?: number;\r\n    metadata?: Record<string, any>;\r\n  }> {\r\n    return [...this.events];\r\n  }\r\n}\r\n\r\n// Performance optimization utilities\r\nexport class PerformanceOptimizer {\r\n  static debounce<T extends (...args: any[]) => any>(\r\n    func: T,\r\n    wait: number\r\n  ): (...args: Parameters<T>) => void {\r\n    let timeout: NodeJS.Timeout;\r\n    return (...args: Parameters<T>) => {\r\n      clearTimeout(timeout);\r\n      timeout = setTimeout(() => func(...args), wait);\r\n    };\r\n  }\r\n\r\n  static throttle<T extends (...args: any[]) => any>(\r\n    func: T,\r\n    limit: number\r\n  ): (...args: Parameters<T>) => void {\r\n    let inThrottle: boolean;\r\n    return (...args: Parameters<T>) => {\r\n      if (!inThrottle) {\r\n        func(...args);\r\n        inThrottle = true;\r\n        setTimeout(() => (inThrottle = false), limit);\r\n      }\r\n    };\r\n  }\r\n\r\n  static memoize<T extends (...args: any[]) => any>(\r\n    func: T,\r\n    keyGenerator?: (...args: Parameters<T>) => string\r\n  ): T {\r\n    const cache = new Map<string, ReturnType<T>>();\r\n\r\n    return ((...args: Parameters<T>) => {\r\n      const key = keyGenerator ? keyGenerator(...args) : JSON.stringify(args);\r\n\r\n      if (cache.has(key)) {\r\n        return cache.get(key);\r\n      }\r\n\r\n      const result = func(...args);\r\n      cache.set(key, result);\r\n      return result;\r\n    }) as T;\r\n  }\r\n\r\n  static async retry<T>(\r\n    operation: () => Promise<T>,\r\n    options: { maxAttempts?: number; delay?: number } = {}\r\n  ): Promise<T> {\r\n    const { maxAttempts = 3, delay = 1000 } = options;\r\n    let lastError: Error;\r\n\r\n    for (let i = 0; i < maxAttempts; i++) {\r\n      try {\r\n        return await operation();\r\n      } catch (error) {\r\n        lastError = error as Error;\r\n        if (i < maxAttempts - 1) {\r\n          await new Promise((resolve) =>\r\n            setTimeout(resolve, delay * Math.pow(2, i))\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    throw lastError!;\r\n  }\r\n}\r\n"]}