{"version":3,"sources":["../../src/inspector/index.ts"],"names":[],"mappings":";;;AAYO,IAAM,kBAAA,GAAN,cAAiC,YAAA,CAAa;AAAA,EAC3C,UAAA;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,UAAA,uBAAiB,GAAA,EAAI;AAC1B,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,wCAAwC,CAAA;AACrD,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,oCAAA,EAAuC,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAE9D,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,EAKA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,OAAA,CAAQ,KAAK,oCAAoC,CAAA;AACjD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,KAAK,mBAAA,EAAoB;AAE/B,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,MAAA,OAAA,CAAQ,IAAI,6BAA6B,CAAA;AAEzC,MAAA,IAAA,CAAK,KAAK,SAAS,CAAA;AAAA,IACrB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,uCAAuC,KAAK,CAAA;AAC1D,MAAA,IAAA,CAAK,IAAA,CAAK,SAAS,KAAK,CAAA;AACxB,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB,aAAA,EAAoC;AACpD,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,aAAA,CAAc,IAAA,EAAM,aAAa,CAAA;AACrD,IAAA,IAAA,CAAK,IAAA,CAAK,uBAAuB,aAAa,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAA,CAAgB,eAAuB,OAAA,EAAuC;AAC5E,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,aAAa,CAAA;AACnD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,gBAAA,GAAmB,EAAE,GAAG,SAAA,EAAW,GAAG,OAAA,EAAQ;AACpD,MAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,aAAA,EAAe,gBAAgB,CAAA;AACnD,MAAA,IAAA,CAAK,IAAA,CAAK,oBAAoB,gBAAgB,CAAA;AAAA,IAChD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,aAAA,EAAkD;AAC7D,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,aAAa,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,GAAoC;AAClC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,GAAoC;AAClC,IAAA,MAAM,iBAAkC,EAAC;AACzC,IAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,IAAA,CAAK,UAAU,CAAA;AAG5C,IAAA,KAAA,MAAW,SAAA,IAAa,YAAA,CAAa,MAAA,EAAO,EAAG;AAC7C,MAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,YAAY,CAAA,EAAG;AAC5C,QAAA,cAAA,CAAe,KAAK,SAAS,CAAA;AAAA,MAC/B;AAAA,IACF;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,GAAwB;AACtB,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,IAAA,CAAK,KAAK,mBAAmB,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAA,GAKE;AACA,IAAA,MAAM,aAAa,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AACtD,IAAA,MAAM,gBAAA,GAAmB,WAAW,MAAA,CAAO,CAAC,KAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,WAAA,EAAa,CAAC,CAAA;AACnF,IAAA,MAAM,iBAAA,GAAoB,UAAA,CAAW,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,iBAAA,EAAmB,CAAC,CAAA,GAAI,WAAW,MAAA,IAAU,CAAA;AAC/H,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,GAAA,CAAI,GAAG,UAAA,CAAW,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA,EAAG,CAAC,CAAA;AAE/F,IAAA,OAAO;AAAA,MACL,iBAAiB,UAAA,CAAW,MAAA;AAAA,MAC5B,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,oBAAA,GAAsC;AAGlD,IAAA,OAAA,CAAQ,IAAI,sDAAsD,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAA,GAAqC;AAEjD,IAAA,OAAA,CAAQ,IAAI,sDAAsD,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,SAAA,CAAU,WAA0B,YAAA,EAAmD;AAC7F,IAAA,KAAA,MAAW,cAAA,IAAkB,YAAA,CAAa,MAAA,EAAO,EAAG;AAClD,MAAA,IAAI,cAAA,CAAe,SAAS,IAAA,CAAK,CAAA,KAAA,KAAS,MAAM,IAAA,KAAS,SAAA,CAAU,IAAI,CAAA,EAAG;AACxE,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACF","file":"index.mjs","sourcesContent":["/**\n * @fileoverview OrdoJS Dev Tools - Component Inspector\n *\n * Component inspector for debugging and analyzing component behavior.\n */\n\nimport { EventEmitter } from 'events';\nimport type { ComponentInfo } from '../types/index.js';\n\n/**\n * Component inspector for debugging and analyzing components\n */\nexport class ComponentInspector extends EventEmitter {\n  private components: Map<string, ComponentInfo>;\n  private isRunning: boolean;\n  private port: number;\n\n  /**\n   * Create a new ComponentInspector instance\n   *\n   * @param port - WebSocket port for inspector\n   */\n  constructor(port: number = 24679) {\n    super();\n\n    this.components = new Map();\n    this.isRunning = false;\n    this.port = port;\n  }\n\n  /**\n   * Start the component inspector\n   */\n  async start(): Promise<void> {\n    if (this.isRunning) {\n      console.warn('Component inspector is already running');\n      return;\n    }\n\n    try {\n      // Start WebSocket server for inspector communication\n      await this.startWebSocketServer();\n\n      this.isRunning = true;\n      console.log(`Component inspector started on port ${this.port}`);\n\n      this.emit('started');\n    } catch (error) {\n      console.error('Failed to start component inspector:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Stop the component inspector\n   */\n  async stop(): Promise<void> {\n    if (!this.isRunning) {\n      console.warn('Component inspector 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('Component inspector stopped');\n\n      this.emit('stopped');\n    } catch (error) {\n      console.error('Failed to stop component inspector:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Register a component for inspection\n   *\n   * @param componentInfo - Component information\n   */\n  registerComponent(componentInfo: ComponentInfo): void {\n    this.components.set(componentInfo.name, componentInfo);\n    this.emit('componentRegistered', componentInfo);\n  }\n\n  /**\n   * Update component information\n   *\n   * @param componentName - Component name\n   * @param updates - Component updates\n   */\n  updateComponent(componentName: string, updates: Partial<ComponentInfo>): void {\n    const component = this.components.get(componentName);\n    if (component) {\n      const updatedComponent = { ...component, ...updates };\n      this.components.set(componentName, updatedComponent);\n      this.emit('componentUpdated', updatedComponent);\n    }\n  }\n\n  /**\n   * Get component information\n   *\n   * @param componentName - Component name\n   * @returns Component information or undefined\n   */\n  getComponent(componentName: string): ComponentInfo | undefined {\n    return this.components.get(componentName);\n  }\n\n  /**\n   * Get all components\n   *\n   * @returns Array of all component information\n   */\n  getAllComponents(): ComponentInfo[] {\n    return Array.from(this.components.values());\n  }\n\n  /**\n   * Get component tree\n   *\n   * @returns Component tree structure\n   */\n  getComponentTree(): ComponentInfo[] {\n    const rootComponents: ComponentInfo[] = [];\n    const componentMap = new Map(this.components);\n\n    // Find root components (components without parents)\n    for (const component of componentMap.values()) {\n      if (!this.hasParent(component, componentMap)) {\n        rootComponents.push(component);\n      }\n    }\n\n    return rootComponents;\n  }\n\n  /**\n   * Clear all components\n   */\n  clearComponents(): void {\n    this.components.clear();\n    this.emit('componentsCleared');\n  }\n\n  /**\n   * Get inspector statistics\n   *\n   * @returns Inspector statistics\n   */\n  getStats(): {\n    totalComponents: number;\n    totalRenderCount: number;\n    averageRenderTime: number;\n    peakMemoryUsage: number;\n  } {\n    const components = Array.from(this.components.values());\n    const totalRenderCount = components.reduce((sum, comp) => sum + comp.renderCount, 0);\n    const averageRenderTime = components.reduce((sum, comp) => sum + comp.performance.averageRenderTime, 0) / components.length || 0;\n    const peakMemoryUsage = Math.max(...components.map(comp => comp.performance.peakMemoryUsage), 0);\n\n    return {\n      totalComponents: components.length,\n      totalRenderCount,\n      averageRenderTime,\n      peakMemoryUsage\n    };\n  }\n\n  /**\n   * Start WebSocket server for inspector 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 component inspector...');\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 component inspector...');\n  }\n\n  /**\n   * Check if component has a parent\n   *\n   * @param component - Component to check\n   * @param componentMap - Map of all components\n   * @returns True if component has a parent\n   */\n  private hasParent(component: ComponentInfo, componentMap: Map<string, ComponentInfo>): boolean {\n    for (const otherComponent of componentMap.values()) {\n      if (otherComponent.children.some(child => child.name === component.name)) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\n"]}