{"version":3,"file":"ModuleProvider.mjs","sources":["../../../src/lib/vdom/ModuleProvider.tsx"],"sourcesContent":["/**\n * @file Module Provider Component\n * @module vdom/ModuleProvider\n * @description Root provider component for the Virtual Modular DOM system.\n * Provides context, configuration, and services to all module boundaries.\n * Manages global state, security, and performance monitoring.\n *\n * @author Agent 5 - PhD Virtual DOM Expert\n * @version 1.0.0\n */\n\nimport { useState, useCallback, useMemo, useEffect, type FC } from 'react';\nimport {\n  type ModuleId,\n  type ModuleProviderConfig,\n  type ModulePerformanceMetrics,\n  type PerformanceBudget,\n  type ModuleSecurityConfig,\n  type VDOMPoolConfig,\n  DEFAULT_POOL_CONFIG,\n  DEFAULT_HYDRATION_CONFIG,\n} from './types';\nimport { VDOMPool, setDefaultPool } from './vdom-pool';\nimport { ModuleRegistry, setDefaultRegistry } from './module-registry';\nimport { ModuleLoader, setDefaultLoader } from './module-loader';\nimport { ModuleEventBus, setDefaultEventBus } from './event-bus';\nimport {\n  type SecuritySandbox,\n  createSecuritySandbox,\n  createStrictSecurityConfig,\n  createRelaxedSecurityConfig,\n} from './security-sandbox';\nimport { isDev, devWarn } from '@/lib/core/config/env-helper';\nimport {\n  ModuleSystemContext,\n  ModuleHierarchyContext,\n  type ModuleSystemContextValue,\n  type ModuleProviderProps,\n} from './ModuleProviderContext';\n\n// ============================================================================\n// Default Configuration\n// ============================================================================\n\n/**\n * Creates default provider configuration.\n * @param isDev - Whether in development mode\n * @returns Default configuration\n */\nfunction createDefaultConfig(isDev: boolean): ModuleProviderConfig {\n  return {\n    devMode: isDev,\n    strictMode: !isDev,\n    security: isDev ? createRelaxedSecurityConfig() : createStrictSecurityConfig(),\n    hydration: DEFAULT_HYDRATION_CONFIG,\n    performanceBudget: {\n      maxInitTime: 100,\n      maxMountTime: 50,\n      maxRenderTime: 16, // 60fps\n      maxHydrationTime: 200,\n      maxVNodes: 10000,\n      maxMemory: 50 * 1024 * 1024, // 50MB\n    },\n    poolConfig: DEFAULT_POOL_CONFIG,\n    enableTelemetry: isDev,\n  };\n}\n\n// ============================================================================\n// ModuleProvider Component\n// ============================================================================\n\n/**\n * Root provider for the Virtual Modular DOM system.\n * Initializes and provides all core services to the module tree.\n *\n * @example\n * ```tsx\n * function App() {\n *   return (\n *     <ModuleProvider\n *       config={{\n *         devMode: process.env.NODE_ENV === 'development',\n *         enableTelemetry: true,\n *       }}\n *       onReady={() => console.log('Module system ready')}\n *     >\n *       <ModuleBoundary id=\"app\" name=\"Application\">\n *         <YourApp />\n *       </ModuleBoundary>\n *     </ModuleProvider>\n *   );\n * }\n * ```\n */\nexport const ModuleProvider: FC<ModuleProviderProps> = ({\n  children,\n  config: userConfig,\n  pool: userPool,\n  registry: userRegistry,\n  loader: userLoader,\n  eventBus: userEventBus,\n  onReady,\n  onError: _onError,\n}) => {\n  // Determine if development mode\n  const isDevMode = userConfig?.devMode ?? isDev();\n\n  // Merge configuration\n  const config = useMemo<ModuleProviderConfig>(() => {\n    const defaults = createDefaultConfig(isDevMode);\n    return {\n      ...defaults,\n      ...userConfig,\n      security: { ...defaults.security, ...userConfig?.security },\n      hydration: { ...defaults.hydration, ...userConfig?.hydration },\n      performanceBudget: {\n        ...defaults.performanceBudget,\n        ...userConfig?.performanceBudget,\n      },\n      poolConfig: { ...defaults.poolConfig, ...userConfig?.poolConfig },\n    };\n  }, [isDevMode, userConfig]);\n\n  // Initialize services with useState\n  const [pool] = useState<VDOMPool>(() => {\n    const instance = userPool ?? new VDOMPool(config.poolConfig as VDOMPoolConfig);\n    setDefaultPool(instance);\n    return instance;\n  });\n\n  const [registry] = useState<ModuleRegistry>(() => {\n    const instance = userRegistry ?? new ModuleRegistry();\n    setDefaultRegistry(instance);\n    return instance;\n  });\n\n  const [loader] = useState<ModuleLoader>(() => {\n    const instance = userLoader ?? new ModuleLoader(registry);\n    setDefaultLoader(instance);\n    return instance;\n  });\n\n  const [eventBus] = useState<ModuleEventBus>(() => {\n    const instance =\n      userEventBus ??\n      new ModuleEventBus({\n        enableSecurity: true,\n      });\n    setDefaultEventBus(instance);\n    return instance;\n  });\n\n  const [security] = useState<SecuritySandbox>(() =>\n    createSecuritySandbox('__root__' as ModuleId, config.security as ModuleSecurityConfig)\n  );\n\n  // Services are initialized synchronously in useState, so we're always initialized\n  const isInitialized = true;\n\n  // Callback to report metrics\n  const reportMetrics = useCallback(\n    (moduleId: ModuleId, metrics: ModulePerformanceMetrics) => {\n      if (config.enableTelemetry === true && config.telemetryReporter !== undefined) {\n        config.telemetryReporter(metrics);\n      }\n\n      if (config.devMode === true) {\n        devWarn(`[Module ${moduleId}] Metrics:`, metrics);\n      }\n    },\n    [config]\n  );\n\n  // Callback to check performance budget\n  const checkBudget = useCallback(\n    (moduleId: ModuleId, metrics: ModulePerformanceMetrics) => {\n      const budget = config.performanceBudget;\n      if (!budget) {\n        return;\n      }\n\n      const violations: Array<{\n        metric: keyof PerformanceBudget;\n        value: number;\n        budget: number;\n      }> = [];\n\n      if (\n        budget.maxInitTime !== undefined &&\n        budget.maxInitTime !== null &&\n        metrics.initTime > budget.maxInitTime\n      ) {\n        violations.push({\n          metric: 'maxInitTime',\n          value: metrics.initTime,\n          budget: budget.maxInitTime,\n        });\n      }\n\n      if (\n        budget.maxMountTime !== undefined &&\n        budget.maxMountTime !== null &&\n        metrics.mountTime > budget.maxMountTime\n      ) {\n        violations.push({\n          metric: 'maxMountTime',\n          value: metrics.mountTime,\n          budget: budget.maxMountTime,\n        });\n      }\n\n      if (\n        budget.maxRenderTime !== undefined &&\n        budget.maxRenderTime !== null &&\n        metrics.avgRenderTime > budget.maxRenderTime\n      ) {\n        violations.push({\n          metric: 'maxRenderTime',\n          value: metrics.avgRenderTime,\n          budget: budget.maxRenderTime,\n        });\n      }\n\n      if (\n        budget.maxHydrationTime !== undefined &&\n        budget.maxHydrationTime !== null &&\n        metrics.hydrationTime > budget.maxHydrationTime\n      ) {\n        violations.push({\n          metric: 'maxHydrationTime',\n          value: metrics.hydrationTime,\n          budget: budget.maxHydrationTime,\n        });\n      }\n\n      if (\n        budget.maxVNodes !== undefined &&\n        budget.maxVNodes !== null &&\n        metrics.vNodeCount > budget.maxVNodes\n      ) {\n        violations.push({\n          metric: 'maxVNodes',\n          value: metrics.vNodeCount,\n          budget: budget.maxVNodes,\n        });\n      }\n\n      if (\n        budget.maxMemory !== undefined &&\n        budget.maxMemory !== null &&\n        metrics.memoryEstimate > budget.maxMemory\n      ) {\n        violations.push({\n          metric: 'maxMemory',\n          value: metrics.memoryEstimate,\n          budget: budget.maxMemory,\n        });\n      }\n\n      // Report violations\n      for (const violation of violations) {\n        if (config.devMode === true) {\n          console.warn(`[Module ${moduleId}] Performance budget exceeded:`, violation);\n        }\n\n        budget.onBudgetExceeded?.(violation.metric, violation.value, violation.budget);\n      }\n    },\n    [config]\n  );\n\n  // Context value\n  const contextValue = useMemo<ModuleSystemContextValue>(\n    () => ({\n      config,\n      pool,\n      registry,\n      loader,\n      eventBus,\n      security,\n      isInitialized,\n      reportMetrics,\n      checkBudget,\n    }),\n    [config, pool, registry, loader, eventBus, security, isInitialized, reportMetrics, checkBudget]\n  );\n\n  // Hierarchy context for root\n  const hierarchyValue = useMemo(\n    () => ({\n      moduleId: null,\n      depth: 0,\n      path: [] as ModuleId[],\n    }),\n    []\n  );\n\n  // Call onReady after mount (services are initialized)\n  useEffect(() => {\n    onReady?.();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []); // Only call once on mount\n\n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      // Cleanup is handled by the individual service instances\n      // Don't dispose shared instances as they may be used elsewhere\n    };\n  }, []);\n\n  return (\n    <ModuleSystemContext.Provider value={contextValue}>\n      <ModuleHierarchyContext.Provider value={hierarchyValue}>\n        {children}\n      </ModuleHierarchyContext.Provider>\n    </ModuleSystemContext.Provider>\n  );\n};\n\nModuleProvider.displayName = 'ModuleProvider';\n"],"names":["createDefaultConfig","isDev","createRelaxedSecurityConfig","createStrictSecurityConfig","DEFAULT_HYDRATION_CONFIG","DEFAULT_POOL_CONFIG","ModuleProvider","children","userConfig","userPool","userRegistry","userLoader","userEventBus","onReady","_onError","isDevMode","config","useMemo","defaults","pool","useState","instance","VDOMPool","setDefaultPool","registry","ModuleRegistry","setDefaultRegistry","loader","ModuleLoader","setDefaultLoader","eventBus","ModuleEventBus","setDefaultEventBus","security","createSecuritySandbox","isInitialized","reportMetrics","useCallback","moduleId","metrics","devWarn","checkBudget","budget","violations","violation","contextValue","hierarchyValue","useEffect","jsx","ModuleSystemContext","ModuleHierarchyContext"],"mappings":"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"}