{"version":3,"sources":["../../src/profiler/index.ts"],"names":[],"mappings":";;;AAYO,IAAM,mBAAA,GAAN,cAAkC,YAAA,CAAa;AAAA,EAC5C,QAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOR,WAAA,CAAY,OAAe,KAAA,EAAO;AAChC,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,QAAA,uBAAe,GAAA,EAAI;AACxB,IAAA,IAAA,CAAK,cAAA,uBAAqB,GAAA,EAAI;AAC9B,IAAA,IAAA,CAAK,YAAA,uBAAmB,GAAA,EAAI;AAC5B,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,OAAA,CAAQ,KAAK,yCAAyC,CAAA;AACtD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,KAAK,oBAAA,EAAqB;AAEhC,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,qCAAA,EAAwC,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAE/D,MAAA,IAAA,CAAK,KAAK,SAAS,CAAA;AAAA,IACrB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,yCAAyC,KAAK,CAAA;AAC5D,MAAA,IAAA,CAAK,IAAA,CAAK,SAAS,KAAK,CAAA;AACxB,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,OAAA,CAAQ,KAAK,qCAAqC,CAAA;AAClD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,OAAO,CAAA,IAAK,KAAK,cAAA,EAAgB;AACjD,QAAA,MAAM,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,MAC7B;AAGA,MAAA,MAAM,KAAK,mBAAA,EAAoB;AAE/B,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,MAAA,OAAA,CAAQ,IAAI,8BAA8B,CAAA;AAE1C,MAAA,IAAA,CAAK,KAAK,SAAS,CAAA;AAAA,IACrB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,wCAAwC,KAAK,CAAA;AAC3D,MAAA,IAAA,CAAK,IAAA,CAAK,SAAS,KAAK,CAAA;AACxB,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAA,CAAa,IAAA,EAAc,QAAA,GAAgC,EAAC,EAAuB;AACjF,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AACjC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,CAAA,mBAAA,CAAqB,CAAA;AAAA,IACvD;AAEA,IAAA,MAAM,OAAA,GAA8B;AAAA,MAClC,IAAA;AAAA,MACA,SAAA,EAAW,YAAY,GAAA,EAAI;AAAA,MAC3B,OAAA,EAAS,CAAA;AAAA,MACT,QAAA,EAAU,CAAA;AAAA,MACV,cAAc,EAAC;AAAA,MACf;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AACrC,IAAA,IAAA,CAAK,IAAA,CAAK,kBAAkB,OAAO,CAAA;AAEnC,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,IAAA,EAAkC;AAC5C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,CAAA,eAAA,CAAiB,CAAA;AAAA,IACnD;AAEA,IAAA,OAAA,CAAQ,OAAA,GAAU,YAAY,GAAA,EAAI;AAClC,IAAA,OAAA,CAAQ,QAAA,GAAW,OAAA,CAAQ,OAAA,GAAU,OAAA,CAAQ,SAAA;AAE7C,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,IAAI,CAAA;AAC/B,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AAE/B,IAAA,IAAA,CAAK,IAAA,CAAK,kBAAkB,OAAO,CAAA;AAEnC,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,eACE,WAAA,EACA,eAAA,EACA,WAAmB,SAAA,EACnB,QAAA,GAAgC,EAAC,EACT;AACxB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,WAAW,CAAA;AACnD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,WAAW,CAAA,eAAA,CAAiB,CAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,WAAA,GAAsC;AAAA,MAC1C,IAAA,EAAM,eAAA;AAAA,MACN,SAAA,EAAW,YAAY,GAAA,EAAI;AAAA,MAC3B,OAAA,EAAS,CAAA;AAAA,MACT,QAAA,EAAU,CAAA;AAAA,MACV,QAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA,EAAG;AACvC,MAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,WAAA,EAAa,EAAE,CAAA;AAAA,IACvC;AAEA,IAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA,CAAG,KAAK,WAAW,CAAA;AACpD,IAAA,OAAA,CAAQ,YAAA,CAAa,KAAK,WAAW,CAAA;AAErC,IAAA,IAAA,CAAK,IAAA,CAAK,oBAAoB,WAAW,CAAA;AAEzC,IAAA,OAAO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAA,CAAe,aAAqB,eAAA,EAAiD;AACnF,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,WAAW,CAAA;AACnD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,WAAW,CAAA,eAAA,CAAiB,CAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA;AACtD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,IACtE;AAEA,IAAA,MAAM,cAAc,YAAA,CAAa,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,eAAe,CAAA;AACrE,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,aAAA,EAAgB,eAAe,CAAA,wBAAA,EAA2B,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,IAC1F;AAEA,IAAA,WAAA,CAAY,OAAA,GAAU,YAAY,GAAA,EAAI;AACtC,IAAA,WAAA,CAAY,QAAA,GAAW,WAAA,CAAY,OAAA,GAAU,WAAA,CAAY,SAAA;AAEzD,IAAA,IAAA,CAAK,IAAA,CAAK,oBAAoB,WAAW,CAAA;AAEzC,IAAA,OAAO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,IAAA,EAA8C;AACvD,IAAA,OAAO,IAAA,CAAK,SAAS,GAAA,CAAI,IAAI,KAAK,IAAA,CAAK,cAAA,CAAe,IAAI,IAAI,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAA,GAAuC;AACrC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAA,GAA0C;AACxC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAsB;AACpB,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,aAAa,KAAA,EAAM;AACxB,IAAA,IAAA,CAAK,KAAK,iBAAiB,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAA,GAKE;AACA,IAAA,MAAM,cAAc,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AACrD,IAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,MAAA,CAAO,CAAC,GAAA,EAAK,YAAY,GAAA,GAAM,OAAA,CAAQ,YAAA,CAAa,MAAA,EAAQ,CAAC,CAAA;AACnG,IAAA,MAAM,sBAAA,GAAyB,WAAA,CAAY,MAAA,CAAO,CAAC,GAAA,EAAK,OAAA,KAAY,GAAA,GAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAA,GAAI,WAAA,CAAY,MAAA,IAAU,CAAA;AAEvH,IAAA,OAAO;AAAA,MACL,eAAe,WAAA,CAAY,MAAA;AAAA,MAC3B,cAAA,EAAgB,KAAK,cAAA,CAAe,IAAA;AAAA,MACpC,iBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,oBAAA,GAAsC;AAGlD,IAAA,OAAA,CAAQ,IAAI,uDAAuD,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAA,GAAqC;AAEjD,IAAA,OAAA,CAAQ,IAAI,uDAAuD,CAAA;AAAA,EACrE;AACF","file":"index.mjs","sourcesContent":["/**\n * @fileoverview OrdoJS Dev Tools - Performance Profiler\n *\n * Performance profiler for analyzing and optimizing application performance.\n */\n\nimport { EventEmitter } from 'events';\nimport type { PerformanceMeasurement, PerformanceProfile } from '../types/index.js';\n\n/**\n * Performance profiler for analyzing application performance\n */\nexport class PerformanceProfiler extends EventEmitter {\n  private profiles: Map<string, PerformanceProfile>;\n  private activeProfiles: Map<string, PerformanceProfile>;\n  private measurements: Map<string, PerformanceMeasurement[]>;\n  private isRunning: boolean;\n  private port: number;\n\n  /**\n   * Create a new PerformanceProfiler instance\n   *\n   * @param port - WebSocket port for profiler\n   */\n  constructor(port: number = 24680) {\n    super();\n\n    this.profiles = new Map();\n    this.activeProfiles = new Map();\n    this.measurements = new Map();\n    this.isRunning = false;\n    this.port = port;\n  }\n\n  /**\n   * Start the performance profiler\n   */\n  async start(): Promise<void> {\n    if (this.isRunning) {\n      console.warn('Performance profiler is already running');\n      return;\n    }\n\n    try {\n      // Start WebSocket server for profiler communication\n      await this.startWebSocketServer();\n\n      this.isRunning = true;\n      console.log(`Performance profiler started on port ${this.port}`);\n\n      this.emit('started');\n    } catch (error) {\n      console.error('Failed to start performance profiler:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Stop the performance profiler\n   */\n  async stop(): Promise<void> {\n    if (!this.isRunning) {\n      console.warn('Performance profiler is not running');\n      return;\n    }\n\n    try {\n      // Stop all active profiles\n      for (const [name, profile] of this.activeProfiles) {\n        await this.stopProfile(name);\n      }\n\n      // Clean up WebSocket server\n      await this.stopWebSocketServer();\n\n      this.isRunning = false;\n      console.log('Performance profiler stopped');\n\n      this.emit('stopped');\n    } catch (error) {\n      console.error('Failed to stop performance profiler:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Start a performance profile\n   *\n   * @param name - Profile name\n   * @param metadata - Profile metadata\n   * @returns Profile instance\n   */\n  startProfile(name: string, metadata: Record<string, any> = {}): PerformanceProfile {\n    if (this.activeProfiles.has(name)) {\n      throw new Error(`Profile '${name}' is already active`);\n    }\n\n    const profile: PerformanceProfile = {\n      name,\n      startTime: performance.now(),\n      endTime: 0,\n      duration: 0,\n      measurements: [],\n      metadata\n    };\n\n    this.activeProfiles.set(name, profile);\n    this.emit('profileStarted', profile);\n\n    return profile;\n  }\n\n  /**\n   * Stop a performance profile\n   *\n   * @param name - Profile name\n   * @returns Completed profile\n   */\n  stopProfile(name: string): PerformanceProfile {\n    const profile = this.activeProfiles.get(name);\n    if (!profile) {\n      throw new Error(`Profile '${name}' is not active`);\n    }\n\n    profile.endTime = performance.now();\n    profile.duration = profile.endTime - profile.startTime;\n\n    this.activeProfiles.delete(name);\n    this.profiles.set(name, profile);\n\n    this.emit('profileStopped', profile);\n\n    return profile;\n  }\n\n  /**\n   * Add a performance measurement\n   *\n   * @param profileName - Profile name\n   * @param measurementName - Measurement name\n   * @param category - Measurement category\n   * @param metadata - Measurement metadata\n   * @returns Measurement instance\n   */\n  addMeasurement(\n    profileName: string,\n    measurementName: string,\n    category: string = 'general',\n    metadata: Record<string, any> = {}\n  ): PerformanceMeasurement {\n    const profile = this.activeProfiles.get(profileName);\n    if (!profile) {\n      throw new Error(`Profile '${profileName}' is not active`);\n    }\n\n    const measurement: PerformanceMeasurement = {\n      name: measurementName,\n      startTime: performance.now(),\n      endTime: 0,\n      duration: 0,\n      category,\n      metadata\n    };\n\n    if (!this.measurements.has(profileName)) {\n      this.measurements.set(profileName, []);\n    }\n\n    this.measurements.get(profileName)!.push(measurement);\n    profile.measurements.push(measurement);\n\n    this.emit('measurementAdded', measurement);\n\n    return measurement;\n  }\n\n  /**\n   * End a performance measurement\n   *\n   * @param profileName - Profile name\n   * @param measurementName - Measurement name\n   * @returns Completed measurement\n   */\n  endMeasurement(profileName: string, measurementName: string): PerformanceMeasurement {\n    const profile = this.activeProfiles.get(profileName);\n    if (!profile) {\n      throw new Error(`Profile '${profileName}' is not active`);\n    }\n\n    const measurements = this.measurements.get(profileName);\n    if (!measurements) {\n      throw new Error(`No measurements found for profile '${profileName}'`);\n    }\n\n    const measurement = measurements.find(m => m.name === measurementName);\n    if (!measurement) {\n      throw new Error(`Measurement '${measurementName}' not found in profile '${profileName}'`);\n    }\n\n    measurement.endTime = performance.now();\n    measurement.duration = measurement.endTime - measurement.startTime;\n\n    this.emit('measurementEnded', measurement);\n\n    return measurement;\n  }\n\n  /**\n   * Get a profile by name\n   *\n   * @param name - Profile name\n   * @returns Profile or undefined\n   */\n  getProfile(name: string): PerformanceProfile | undefined {\n    return this.profiles.get(name) || this.activeProfiles.get(name);\n  }\n\n  /**\n   * Get all profiles\n   *\n   * @returns Array of all profiles\n   */\n  getAllProfiles(): PerformanceProfile[] {\n    return Array.from(this.profiles.values());\n  }\n\n  /**\n   * Get active profiles\n   *\n   * @returns Array of active profiles\n   */\n  getActiveProfiles(): PerformanceProfile[] {\n    return Array.from(this.activeProfiles.values());\n  }\n\n  /**\n   * Clear all profiles\n   */\n  clearProfiles(): void {\n    this.profiles.clear();\n    this.activeProfiles.clear();\n    this.measurements.clear();\n    this.emit('profilesCleared');\n  }\n\n  /**\n   * Get profiler statistics\n   *\n   * @returns Profiler statistics\n   */\n  getStats(): {\n    totalProfiles: number;\n    activeProfiles: number;\n    totalMeasurements: number;\n    averageProfileDuration: number;\n  } {\n    const allProfiles = Array.from(this.profiles.values());\n    const totalMeasurements = allProfiles.reduce((sum, profile) => sum + profile.measurements.length, 0);\n    const averageProfileDuration = allProfiles.reduce((sum, profile) => sum + profile.duration, 0) / allProfiles.length || 0;\n\n    return {\n      totalProfiles: allProfiles.length,\n      activeProfiles: this.activeProfiles.size,\n      totalMeasurements,\n      averageProfileDuration\n    };\n  }\n\n  /**\n   * Start WebSocket server for profiler 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 performance profiler...');\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 performance profiler...');\n  }\n}\n"]}