{"version":3,"file":"virtual-module.mjs","sources":["../../../src/lib/vdom/virtual-module.ts"],"sourcesContent":["/**\n * @file Virtual Module System\n * @module vdom/virtual-module\n * @description Core virtual module management system providing module boundary\n * definition, lifecycle management, dependency tracking, and lazy mounting.\n * Implements a finite state machine for module lifecycle transitions.\n *\n * @author Agent 5 - PhD Virtual DOM Expert\n * @version 1.0.0\n */\n\nimport type { ErrorInfo, ReactNode } from 'react';\nimport {\n  type ModuleId,\n  type VirtualModule,\n  type VirtualNode,\n  type ModuleBoundaryConfig,\n  type ModuleBoundaryState,\n  type ModuleDependency,\n  type ModuleLifecycleHooks,\n  type ModulePerformanceMetrics,\n  ModuleLifecycleState,\n  ModuleLifecycleEvent,\n  HydrationState,\n  createModuleId,\n} from './types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Valid lifecycle state transitions.\n * Maps current state to allowed next states.\n */\nconst VALID_TRANSITIONS: Record<ModuleLifecycleState, ModuleLifecycleState[]> = {\n  [ModuleLifecycleState.REGISTERED]: [\n    ModuleLifecycleState.INITIALIZING,\n    ModuleLifecycleState.DISPOSED,\n  ],\n  [ModuleLifecycleState.INITIALIZING]: [\n    ModuleLifecycleState.INITIALIZED,\n    ModuleLifecycleState.ERROR,\n  ],\n  [ModuleLifecycleState.INITIALIZED]: [\n    ModuleLifecycleState.MOUNTING,\n    ModuleLifecycleState.SUSPENDED,\n    ModuleLifecycleState.DISPOSED,\n  ],\n  [ModuleLifecycleState.MOUNTING]: [ModuleLifecycleState.MOUNTED, ModuleLifecycleState.ERROR],\n  [ModuleLifecycleState.MOUNTED]: [\n    ModuleLifecycleState.UNMOUNTING,\n    ModuleLifecycleState.SUSPENDED,\n    ModuleLifecycleState.ERROR,\n  ],\n  [ModuleLifecycleState.SUSPENDED]: [\n    ModuleLifecycleState.MOUNTING,\n    ModuleLifecycleState.UNMOUNTING,\n    ModuleLifecycleState.DISPOSED,\n  ],\n  [ModuleLifecycleState.UNMOUNTING]: [ModuleLifecycleState.UNMOUNTED, ModuleLifecycleState.ERROR],\n  [ModuleLifecycleState.UNMOUNTED]: [ModuleLifecycleState.MOUNTING, ModuleLifecycleState.DISPOSED],\n  [ModuleLifecycleState.ERROR]: [\n    ModuleLifecycleState.INITIALIZING,\n    ModuleLifecycleState.MOUNTING,\n    ModuleLifecycleState.DISPOSED,\n  ],\n  [ModuleLifecycleState.DISPOSED]: [],\n};\n\n// ============================================================================\n// Module State Factory\n// ============================================================================\n\n/**\n * Creates initial module boundary state.\n * @returns Fresh module boundary state\n */\nfunction createInitialState(): ModuleBoundaryState {\n  return {\n    lifecycleState: ModuleLifecycleState.REGISTERED,\n    hydrationState: HydrationState.DEHYDRATED,\n    isVisible: false,\n    isActive: false,\n    error: null,\n    errorInfo: null,\n    slots: new Map(),\n    moduleState: new Map(),\n    metrics: createInitialMetrics(),\n  };\n}\n\n/**\n * Creates initial performance metrics.\n * @returns Fresh performance metrics object\n */\nfunction createInitialMetrics(): ModulePerformanceMetrics {\n  return {\n    initTime: 0,\n    mountTime: 0,\n    hydrationTime: 0,\n    renderCount: 0,\n    totalRenderTime: 0,\n    avgRenderTime: 0,\n    peakRenderTime: 0,\n    updateCount: 0,\n    memoryEstimate: 0,\n    vNodeCount: 0,\n    domNodeCount: 0,\n    lastMeasuredAt: 0,\n  };\n}\n\n// ============================================================================\n// VirtualModuleManager Class\n// ============================================================================\n\n/**\n * Manager class for virtual module lifecycle and state.\n * Implements the Module Boundary pattern with full lifecycle management.\n */\nexport class VirtualModuleManager {\n  /** Module configuration */\n  private readonly config: ModuleBoundaryConfig;\n\n  /** Current module state */\n  private state: ModuleBoundaryState;\n\n  /** Lifecycle hooks */\n  private readonly hooks: ModuleLifecycleHooks;\n\n  /** Event listeners for lifecycle events */\n  private readonly listeners: Map<ModuleLifecycleEvent, Set<() => void>>;\n\n  /** Child modules */\n  private readonly children: Map<ModuleId, VirtualModuleManager>;\n\n  /** Parent module reference */\n  private parent: VirtualModuleManager | null = null;\n\n  /** Virtual DOM nodes */\n  private vdom: VirtualNode[] = [];\n\n  /** Container element */\n  private container: Element | null = null;\n\n  /** Portal roots */\n  private readonly portals: Map<string, Element> = new Map();\n\n  /** Performance measurement marks */\n  private readonly perfMarks: Map<string, number> = new Map();\n\n  /** Dependency resolution cache */\n  private resolvedDependencies: Map<ModuleId, VirtualModuleManager> | null = null;\n\n  /**\n   * Creates a new VirtualModuleManager.\n   * @param config - Module boundary configuration\n   */\n  constructor(config: ModuleBoundaryConfig) {\n    this.config = config;\n    this.state = createInitialState();\n    this.hooks = config.lifecycle ?? {};\n    this.listeners = new Map();\n    this.children = new Map();\n\n    // Initialize listener sets for all lifecycle events\n    Object.values(ModuleLifecycleEvent).forEach((event) => {\n      this.listeners.set(event, new Set());\n    });\n  }\n\n  // ==========================================================================\n  // Getters\n  // ==========================================================================\n\n  /**\n   * Gets the module ID.\n   */\n  get id(): ModuleId {\n    return this.config.id;\n  }\n\n  /**\n   * Gets the module name.\n   */\n  get name(): string {\n    return this.config.name;\n  }\n\n  /**\n   * Gets the current lifecycle state.\n   */\n  get lifecycleState(): ModuleLifecycleState {\n    return this.state.lifecycleState;\n  }\n\n  /**\n   * Gets the current hydration state.\n   */\n  get hydrationState(): HydrationState {\n    return this.state.hydrationState;\n  }\n\n  /**\n   * Gets whether the module is mounted.\n   */\n  get isMounted(): boolean {\n    return this.state.lifecycleState === ModuleLifecycleState.MOUNTED;\n  }\n\n  /**\n   * Gets whether the module is visible.\n   */\n  get isVisible(): boolean {\n    return this.state.isVisible;\n  }\n\n  /**\n   * Gets whether the module has an error.\n   */\n  get hasError(): boolean {\n    return this.state.error !== null;\n  }\n\n  /**\n   * Gets the current error.\n   */\n  get error(): Error | null {\n    return this.state.error;\n  }\n\n  /**\n   * Gets the performance metrics.\n   */\n  get metrics(): ModulePerformanceMetrics {\n    return { ...this.state.metrics };\n  }\n\n  /**\n   * Gets the module configuration.\n   */\n  getConfig(): ModuleBoundaryConfig {\n    return this.config;\n  }\n\n  /**\n   * Gets the current state (immutable snapshot).\n   */\n  getState(): Readonly<ModuleBoundaryState> {\n    return this.state;\n  }\n\n  /**\n   * Gets the virtual DOM nodes.\n   */\n  getVDOM(): ReadonlyArray<VirtualNode> {\n    return this.vdom;\n  }\n\n  /**\n   * Gets child modules.\n   */\n  getChildren(): ReadonlyMap<ModuleId, VirtualModuleManager> {\n    return this.children;\n  }\n\n  /**\n   * Gets the parent module.\n   */\n  getParent(): VirtualModuleManager | null {\n    return this.parent;\n  }\n\n  // ==========================================================================\n  // Lifecycle Management\n  // ==========================================================================\n\n  /**\n   * Initializes the module.\n   * @throws Error if initialization fails\n   */\n  async initialize(): Promise<void> {\n    if (this.state.lifecycleState !== ModuleLifecycleState.REGISTERED) {\n      throw new Error(`Cannot initialize module in state: ${this.state.lifecycleState}`);\n    }\n\n    this.markPerf('init:start');\n\n    try {\n      this.transitionTo(ModuleLifecycleState.INITIALIZING);\n      this.emitLifecycleEvent(ModuleLifecycleEvent.BEFORE_INIT);\n\n      // Execute initialization hook\n      if (this.hooks.onBeforeInit) {\n        await this.hooks.onBeforeInit();\n      }\n\n      // Resolve dependencies\n      await this.resolveDependencies();\n\n      // Execute after init hook\n      if (this.hooks.onAfterInit) {\n        await this.hooks.onAfterInit();\n      }\n\n      this.transitionTo(ModuleLifecycleState.INITIALIZED);\n    } catch (error) {\n      this.handleError(error instanceof Error ? error : new Error(String(error)));\n      throw error;\n    } finally {\n      this.markPerf('init:end');\n      this.updateMetric('initTime', this.measurePerf('init:start', 'init:end'));\n    }\n  }\n\n  /**\n   * Mounts the module to a container element.\n   * @param container - DOM container element\n   */\n  async mount(container: Element): Promise<void> {\n    const validStates = [\n      ModuleLifecycleState.INITIALIZED,\n      ModuleLifecycleState.SUSPENDED,\n      ModuleLifecycleState.UNMOUNTED,\n    ] as const;\n\n    if (!validStates.includes(this.state.lifecycleState as (typeof validStates)[number])) {\n      throw new Error(`Cannot mount module in state: ${this.state.lifecycleState}`);\n    }\n\n    this.markPerf('mount:start');\n\n    try {\n      this.transitionTo(ModuleLifecycleState.MOUNTING);\n      this.emitLifecycleEvent(ModuleLifecycleEvent.BEFORE_MOUNT);\n\n      if (this.hooks.onBeforeMount) {\n        await this.hooks.onBeforeMount();\n      }\n\n      this.container = container;\n\n      // Mount child modules\n      for (const child of this.children.values()) {\n        if (child.lifecycleState !== ModuleLifecycleState.MOUNTED) {\n          const childContainer = this.findChildContainer(child.id);\n          if (childContainer) {\n            await child.mount(childContainer);\n          }\n        }\n      }\n\n      if (this.hooks.onAfterMount) {\n        await this.hooks.onAfterMount();\n      }\n\n      this.state = {\n        ...this.state,\n        isActive: true,\n      };\n\n      this.transitionTo(ModuleLifecycleState.MOUNTED);\n    } catch (error) {\n      this.handleError(error instanceof Error ? error : new Error(String(error)));\n      throw error;\n    } finally {\n      this.markPerf('mount:end');\n      this.updateMetric('mountTime', this.measurePerf('mount:start', 'mount:end'));\n    }\n  }\n\n  /**\n   * Unmounts the module.\n   */\n  async unmount(): Promise<void> {\n    if (this.state.lifecycleState !== ModuleLifecycleState.MOUNTED) {\n      return; // Already unmounted or not mounted\n    }\n\n    try {\n      this.transitionTo(ModuleLifecycleState.UNMOUNTING);\n      this.emitLifecycleEvent(ModuleLifecycleEvent.BEFORE_UNMOUNT);\n\n      if (this.hooks.onBeforeUnmount) {\n        await this.hooks.onBeforeUnmount();\n      }\n\n      // Unmount child modules first\n      for (const child of this.children.values()) {\n        await child.unmount();\n      }\n\n      // Clear container reference\n      this.container = null;\n\n      // Clear portals\n      this.portals.clear();\n\n      if (this.hooks.onAfterUnmount) {\n        await this.hooks.onAfterUnmount();\n      }\n\n      this.state = {\n        ...this.state,\n        isActive: false,\n      };\n\n      this.transitionTo(ModuleLifecycleState.UNMOUNTED);\n    } catch (error) {\n      this.handleError(error instanceof Error ? error : new Error(String(error)));\n      throw error;\n    }\n  }\n\n  /**\n   * Suspends the module (lazy state).\n   */\n  async suspend(): Promise<void> {\n    const validStates = [ModuleLifecycleState.INITIALIZED, ModuleLifecycleState.MOUNTED] as const;\n\n    if (!validStates.includes(this.state.lifecycleState as (typeof validStates)[number])) {\n      return;\n    }\n\n    // Unmount if currently mounted\n    if (this.state.lifecycleState === ModuleLifecycleState.MOUNTED) {\n      await this.unmount();\n    }\n\n    this.transitionTo(ModuleLifecycleState.SUSPENDED);\n  }\n\n  /**\n   * Disposes the module and releases resources.\n   */\n  async dispose(): Promise<void> {\n    if (this.state.lifecycleState === ModuleLifecycleState.DISPOSED) {\n      return;\n    }\n\n    try {\n      // Unmount if mounted\n      if (this.state.lifecycleState === ModuleLifecycleState.MOUNTED) {\n        await this.unmount();\n      }\n\n      this.emitLifecycleEvent(ModuleLifecycleEvent.DISPOSE);\n\n      if (this.hooks.onDispose) {\n        await this.hooks.onDispose();\n      }\n\n      // Dispose child modules\n      for (const child of this.children.values()) {\n        await child.dispose();\n      }\n\n      // Clear all data\n      this.children.clear();\n      this.listeners.forEach((set) => set.clear());\n      this.listeners.clear();\n      this.vdom = [];\n      this.resolvedDependencies = null;\n      this.parent = null;\n\n      this.transitionTo(ModuleLifecycleState.DISPOSED);\n    } catch {\n      // Even if disposal fails, mark as disposed\n      this.state = {\n        ...this.state,\n        lifecycleState: ModuleLifecycleState.DISPOSED,\n      };\n    }\n  }\n\n  /**\n   * Handles an error in the module.\n   * @param error - The error that occurred\n   * @param errorInfo - React error info (optional)\n   */\n  handleError(error: Error, errorInfo?: ErrorInfo): void {\n    this.state = {\n      ...this.state,\n      error,\n      errorInfo: errorInfo ?? null,\n    };\n\n    // Call error hook\n    if (this.hooks.onError) {\n      this.hooks.onError(error, errorInfo);\n    }\n\n    // Emit error event\n    this.emitLifecycleEvent(ModuleLifecycleEvent.ERROR);\n\n    // Transition to error state if not already\n    if (this.state.lifecycleState !== ModuleLifecycleState.ERROR) {\n      try {\n        this.transitionTo(ModuleLifecycleState.ERROR);\n      } catch {\n        // Force error state even if transition fails\n        this.state = {\n          ...this.state,\n          lifecycleState: ModuleLifecycleState.ERROR,\n        };\n      }\n    }\n  }\n\n  /**\n   * Clears the error state and allows recovery.\n   */\n  clearError(): void {\n    this.state = {\n      ...this.state,\n      error: null,\n      errorInfo: null,\n    };\n  }\n\n  // ==========================================================================\n  // Error Handling\n  // ==========================================================================\n\n  /**\n   * Attempts to recover from error state.\n   */\n  async recover(): Promise<void> {\n    if (this.state.lifecycleState !== ModuleLifecycleState.ERROR) {\n      return;\n    }\n\n    this.clearError();\n\n    // Try to reinitialize\n    this.state = {\n      ...this.state,\n      lifecycleState: ModuleLifecycleState.REGISTERED,\n    };\n\n    await this.initialize();\n  }\n\n  /**\n   * Gets resolved dependencies.\n   */\n  getDependencies(): ReadonlyMap<ModuleId, VirtualModuleManager> {\n    return this.resolvedDependencies ?? new Map();\n  }\n\n  /**\n   * Registers a child module.\n   * @param child - Child module manager\n   */\n  registerChild(child: VirtualModuleManager): void {\n    if (this.children.has(child.id)) {\n      throw new Error(`Child module already registered: ${child.id} in ${this.config.name}`);\n    }\n\n    child.parent = this;\n    this.children.set(child.id, child);\n  }\n\n  // ==========================================================================\n  // Dependency Management\n  // ==========================================================================\n\n  /**\n   * Unregisters a child module.\n   * @param moduleId - ID of child module\n   */\n  async unregisterChild(moduleId: ModuleId): Promise<void> {\n    const child = this.children.get(moduleId);\n    if (!child) {\n      return;\n    }\n\n    await child.dispose();\n    this.children.delete(moduleId);\n  }\n\n  /**\n   * Gets a child module by ID.\n   * @param moduleId - Child module ID\n   */\n  getChild(moduleId: ModuleId): VirtualModuleManager | null {\n    return this.children.get(moduleId) ?? null;\n  }\n\n  /**\n   * Sets content for a named slot.\n   * @param name - Slot name\n   * @param content - React content\n   */\n  setSlot(name: string, content: ReactNode): void {\n    const slotDef = this.config.slots?.find((s) => s.name === name);\n\n    if (slotDef?.accepts && content !== null) {\n      // Validate slot content type would happen here\n    }\n\n    const newSlots = new Map(this.state.slots);\n    newSlots.set(name, content);\n\n    this.state = {\n      ...this.state,\n      slots: newSlots,\n    };\n  }\n\n  // ==========================================================================\n  // Child Module Management\n  // ==========================================================================\n\n  /**\n   * Gets content from a named slot.\n   * @param name - Slot name\n   */\n  getSlot(name: string): ReactNode | null {\n    return this.state.slots.get(name) ?? null;\n  }\n\n  /**\n   * Clears a named slot.\n   * @param name - Slot name\n   */\n  clearSlot(name: string): void {\n    const newSlots = new Map(this.state.slots);\n    newSlots.delete(name);\n\n    this.state = {\n      ...this.state,\n      slots: newSlots,\n    };\n  }\n\n  /**\n   * Sets a module-scoped state value.\n   * @param key - State key\n   * @param value - State value\n   */\n  setModuleState<T>(key: string, value: T): void {\n    const newState = new Map(this.state.moduleState);\n    newState.set(key, value);\n\n    this.state = {\n      ...this.state,\n      moduleState: newState,\n    };\n  }\n\n  /**\n   * Gets a module-scoped state value.\n   * @param key - State key\n   */\n  getModuleState<T>(key: string): T | undefined {\n    return this.state.moduleState.get(key) as T | undefined;\n  }\n\n  // ==========================================================================\n  // Slot Management\n  // ==========================================================================\n\n  /**\n   * Clears all module-scoped state.\n   */\n  clearModuleState(): void {\n    this.state = {\n      ...this.state,\n      moduleState: new Map(),\n    };\n  }\n\n  /**\n   * Updates visibility state.\n   * @param isVisible - Whether module is visible\n   */\n  setVisibility(isVisible: boolean): void {\n    if (this.state.isVisible === isVisible) {\n      return;\n    }\n\n    this.state = {\n      ...this.state,\n      isVisible,\n    };\n  }\n\n  /**\n   * Sets the virtual DOM nodes.\n   * @param nodes - Virtual DOM nodes\n   */\n  setVDOM(nodes: VirtualNode[]): void {\n    this.vdom = nodes;\n    this.updateMetric('vNodeCount', this.countVNodes(nodes));\n  }\n\n  // ==========================================================================\n  // Module State Management\n  // ==========================================================================\n\n  /**\n   * Registers a portal root.\n   * @param name - Portal name\n   * @param element - Portal container element\n   */\n  registerPortal(name: string, element: Element): void {\n    this.portals.set(name, element);\n  }\n\n  /**\n   * Gets a portal root.\n   * @param name - Portal name\n   */\n  getPortal(name: string): Element | null {\n    return this.portals.get(name) ?? null;\n  }\n\n  /**\n   * Unregisters a portal.\n   * @param name - Portal name\n   */\n  unregisterPortal(name: string): void {\n    this.portals.delete(name);\n  }\n\n  // ==========================================================================\n  // Visibility Management\n  // ==========================================================================\n\n  /**\n   * Subscribes to a lifecycle event.\n   * @param event - Lifecycle event type\n   * @param handler - Event handler\n   * @returns Unsubscribe function\n   */\n  subscribe(event: ModuleLifecycleEvent, handler: () => void): () => void {\n    const listeners = this.listeners.get(event);\n    if (!listeners) {\n      return () => {};\n    }\n\n    listeners.add(handler);\n\n    return () => {\n      listeners.delete(handler);\n    };\n  }\n\n  // ==========================================================================\n  // VDOM Management\n  // ==========================================================================\n\n  /**\n   * Records a render.\n   * @param renderTime - Time taken to render (ms)\n   */\n  recordRender(renderTime: number): void {\n    const { renderCount, totalRenderTime, peakRenderTime } = this.state.metrics;\n\n    const newRenderCount = renderCount + 1;\n    const newTotalRenderTime = totalRenderTime + renderTime;\n    const newPeakRenderTime = Math.max(peakRenderTime, renderTime);\n    const newAvgRenderTime = newTotalRenderTime / newRenderCount;\n\n    this.state = {\n      ...this.state,\n      metrics: {\n        ...this.state.metrics,\n        renderCount: newRenderCount,\n        totalRenderTime: newTotalRenderTime,\n        avgRenderTime: newAvgRenderTime,\n        peakRenderTime: newPeakRenderTime,\n        lastMeasuredAt: Date.now(),\n      },\n    };\n  }\n\n  /**\n   * Exports the module to a VirtualModule interface.\n   */\n  toVirtualModule(): VirtualModule {\n    return {\n      config: this.config,\n      state: this.state,\n      vdom: this.vdom,\n      container: this.container,\n      portals: this.portals,\n      children: new Map(\n        Array.from(this.children.entries()).map(([id, manager]) => [id, manager.toVirtualModule()])\n      ),\n      parent: this.parent?.toVirtualModule() ?? null,\n    };\n  }\n\n  // ==========================================================================\n  // Portal Management\n  // ==========================================================================\n\n  /**\n   * Validates if a state transition is allowed.\n   * @param from - Current state\n   * @param to - Target state\n   * @returns Whether the transition is valid\n   */\n  private isValidTransition(from: ModuleLifecycleState, to: ModuleLifecycleState): boolean {\n    return VALID_TRANSITIONS[from]?.includes(to) ?? false;\n  }\n\n  /**\n   * Transitions to a new lifecycle state.\n   * @param to - Target state\n   * @throws Error if transition is invalid\n   */\n  private transitionTo(to: ModuleLifecycleState): void {\n    const from = this.state.lifecycleState;\n\n    if (!this.isValidTransition(from, to)) {\n      throw new Error(\n        `Invalid lifecycle transition: ${from} -> ${to} for module ${this.config.name}`\n      );\n    }\n\n    this.state = {\n      ...this.state,\n      lifecycleState: to,\n    };\n\n    // Emit corresponding lifecycle event\n    const eventMap: Partial<Record<ModuleLifecycleState, ModuleLifecycleEvent>> = {\n      [ModuleLifecycleState.INITIALIZED]: ModuleLifecycleEvent.AFTER_INIT,\n      [ModuleLifecycleState.MOUNTED]: ModuleLifecycleEvent.AFTER_MOUNT,\n      [ModuleLifecycleState.UNMOUNTED]: ModuleLifecycleEvent.AFTER_UNMOUNT,\n      [ModuleLifecycleState.ERROR]: ModuleLifecycleEvent.ERROR,\n      [ModuleLifecycleState.DISPOSED]: ModuleLifecycleEvent.DISPOSE,\n    };\n\n    const event = eventMap[to];\n    if (event) {\n      this.emitLifecycleEvent(event);\n    }\n  }\n\n  /**\n   * Resolves module dependencies using topological sort.\n   */\n  private async resolveDependencies(): Promise<void> {\n    if (this.config.dependencies == null || this.config.dependencies.length === 0) {\n      this.resolvedDependencies = new Map();\n      return;\n    }\n\n    // Build dependency graph\n    const { dependencies } = this.config;\n    const resolved = new Map<ModuleId, VirtualModuleManager>();\n    const visited = new Set<ModuleId>();\n    const inProgress = new Set<ModuleId>();\n\n    const resolve = async (dep: ModuleDependency): Promise<void> => {\n      if (visited.has(dep.moduleId)) {\n        return;\n      }\n\n      if (inProgress.has(dep.moduleId)) {\n        throw new Error(\n          `Circular dependency detected: ${dep.moduleId} in module ${this.config.name}`\n        );\n      }\n\n      inProgress.add(dep.moduleId);\n\n      // Get dependency module manager (would be from registry in real implementation)\n      const manager = this.findDependency(dep.moduleId);\n\n      if (!manager && dep.required) {\n        throw new Error(\n          `Required dependency not found: ${dep.moduleId} for module ${this.config.name}`\n        );\n      }\n\n      if (manager) {\n        // Resolve transitive dependencies\n        if (manager.config.dependencies) {\n          for (const transDep of manager.config.dependencies) {\n            await resolve(transDep);\n          }\n        }\n\n        resolved.set(dep.moduleId, manager);\n      }\n\n      inProgress.delete(dep.moduleId);\n      visited.add(dep.moduleId);\n    };\n\n    for (const dep of dependencies) {\n      await resolve(dep);\n    }\n\n    this.resolvedDependencies = resolved;\n  }\n\n  // ==========================================================================\n  // Event Management\n  // ==========================================================================\n\n  /**\n   * Finds a dependency module.\n   * @param moduleId - ID of the dependency\n   * @returns Module manager or null\n   */\n  private findDependency(moduleId: ModuleId): VirtualModuleManager | null {\n    // Check parent chain\n    let current: VirtualModuleManager | null = this.parent;\n    while (current) {\n      if (current.id === moduleId) {\n        return current;\n      }\n      const child = current.children.get(moduleId);\n      if (child) {\n        return child;\n      }\n      current = current.parent;\n    }\n    return null;\n  }\n\n  /**\n   * Finds container element for a child module.\n   * @param moduleId - Child module ID\n   */\n  private findChildContainer(moduleId: ModuleId): Element | null {\n    if (!this.container) {\n      return null;\n    }\n\n    // Look for slot with module ID\n    return this.container.querySelector(`[data-module-slot=\"${moduleId}\"]`);\n  }\n\n  // ==========================================================================\n  // Performance Measurement\n  // ==========================================================================\n\n  /**\n   * Counts total virtual nodes recursively.\n   */\n  private countVNodes(nodes: VirtualNode[]): number {\n    let count = nodes.length;\n    for (const node of nodes) {\n      if (Array.isArray(node.children)) {\n        const childNodes = node.children.filter((c): c is VirtualNode => typeof c !== 'string');\n        count += this.countVNodes(childNodes);\n      }\n    }\n    return count;\n  }\n\n  /**\n   * Emits a lifecycle event.\n   * @param event - Lifecycle event type\n   */\n  private emitLifecycleEvent(event: ModuleLifecycleEvent): void {\n    const listeners = this.listeners.get(event);\n    if (!listeners) {\n      return;\n    }\n\n    for (const listener of listeners) {\n      try {\n        listener();\n      } catch (error) {\n        console.error(`Error in lifecycle event handler for ${event}:`, error);\n      }\n    }\n  }\n\n  /**\n   * Marks a performance timestamp.\n   * @param name - Mark name\n   */\n  private markPerf(name: string): void {\n    this.perfMarks.set(name, performance.now());\n  }\n\n  /**\n   * Measures time between two marks.\n   * @param startMark - Start mark name\n   * @param endMark - End mark name\n   */\n  private measurePerf(startMark: string, endMark: string): number {\n    const start = this.perfMarks.get(startMark);\n    const end = this.perfMarks.get(endMark);\n\n    if (start === undefined || end === undefined) {\n      return 0;\n    }\n\n    return end - start;\n  }\n\n  // ==========================================================================\n  // Serialization\n  // ==========================================================================\n\n  /**\n   * Updates a performance metric.\n   * @param metric - Metric name\n   * @param value - Metric value\n   */\n  private updateMetric<K extends keyof ModulePerformanceMetrics>(\n    metric: K,\n    value: ModulePerformanceMetrics[K]\n  ): void {\n    this.state = {\n      ...this.state,\n      metrics: {\n        ...this.state.metrics,\n        [metric]: value,\n        lastMeasuredAt: Date.now(),\n      },\n    };\n  }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Creates a new virtual module manager.\n * @param config - Module configuration\n * @returns New VirtualModuleManager instance\n *\n * @example\n * ```typescript\n * const module = createVirtualModule({\n *   id: createModuleId('my-module'),\n *   name: 'My Module',\n *   version: '1.0.0',\n *   lifecycle: {\n *     onAfterMount: () => console.log('Module mounted'),\n *   },\n * });\n * ```\n */\nexport function createVirtualModule(config: ModuleBoundaryConfig): VirtualModuleManager {\n  return new VirtualModuleManager(config);\n}\n\n/**\n * Creates a module ID with validation.\n * @param id - Raw ID string\n * @returns Branded ModuleId\n *\n * @example\n * ```typescript\n * const moduleId = createValidatedModuleId('feature-dashboard');\n * ```\n */\nexport function createValidatedModuleId(id: string): ModuleId {\n  if (!id) {\n    throw new Error('Module ID must be a non-empty string');\n  }\n\n  // Validate format (alphanumeric, hyphens, underscores)\n  if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(id)) {\n    throw new Error(\n      'Module ID must start with a letter and contain only alphanumeric characters, hyphens, and underscores'\n    );\n  }\n\n  return createModuleId(id);\n}\n\n/**\n * Creates a minimal module configuration.\n * @param id - Module ID\n * @param name - Module name\n * @returns Minimal module configuration\n */\nexport function createMinimalConfig(id: string, name: string): ModuleBoundaryConfig {\n  return {\n    id: createValidatedModuleId(id),\n    name,\n  };\n}\n"],"names":["VALID_TRANSITIONS","ModuleLifecycleState","createInitialState","HydrationState","createInitialMetrics","VirtualModuleManager","config","ModuleLifecycleEvent","event","error","container","child","childContainer","set","errorInfo","moduleId","name","content","s","newSlots","key","value","newState","isVisible","nodes","element","handler","listeners","renderTime","renderCount","totalRenderTime","peakRenderTime","newRenderCount","newTotalRenderTime","newPeakRenderTime","newAvgRenderTime","id","manager","from","to","dependencies","resolved","visited","inProgress","resolve","dep","transDep","current","count","node","childNodes","c","listener","startMark","endMark","start","end","metric","createVirtualModule","createValidatedModuleId","createModuleId","createMinimalConfig"],"mappings":"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"}