{"version":3,"file":"index.mjs","sources":["../../../../src/lib/core/react-env/index.ts"],"sourcesContent":["/**\n * @fileoverview React Environment Detection and Conflict Resolution\n *\n * This module provides utilities to detect and handle React version conflicts\n * that can cause blank pages when users have React, React DOM, or similar\n * packages installed alongside this library.\n *\n * Key features:\n * - Detects multiple React instances in the bundle\n * - Validates React version compatibility\n * - Provides warnings for version mismatches\n * - Offers fallback rendering strategies\n *\n * @module core/react-env\n * @version 1.0.0\n */\n\nimport React from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * React environment status information.\n */\nexport interface ReactEnvironmentStatus {\n  /** Whether React is available */\n  isReactAvailable: boolean;\n  /** Whether ReactDOM is available */\n  isReactDOMAvailable: boolean;\n  /** Detected React version */\n  reactVersion: string | null;\n  /** Whether multiple React instances are detected */\n  hasMultipleInstances: boolean;\n  /** Whether the React version is compatible */\n  isVersionCompatible: boolean;\n  /** List of detected issues */\n  issues: ReactEnvironmentIssue[];\n  /** Timestamp of the check */\n  checkedAt: number;\n}\n\n/**\n * React environment issue details.\n */\nexport interface ReactEnvironmentIssue {\n  /** Issue type */\n  type:\n    | 'multiple_instances'\n    | 'version_mismatch'\n    | 'missing_react'\n    | 'missing_react_dom'\n    | 'hooks_error'\n    | 'jsx_runtime_error';\n  /** Severity level */\n  severity: 'error' | 'warning' | 'info';\n  /** Human-readable message */\n  message: string;\n  /** Suggested resolution */\n  resolution?: string;\n}\n\n/**\n * Configuration for React environment checks.\n */\nexport interface ReactEnvironmentConfig {\n  /** Minimum supported React version */\n  minVersion?: string;\n  /** Maximum supported React version */\n  maxVersion?: string;\n  /** Whether to throw on critical issues */\n  throwOnCritical?: boolean;\n  /** Whether to log warnings to console */\n  logWarnings?: boolean;\n  /** Callback when issues are detected */\n  onIssuesDetected?: (issues: ReactEnvironmentIssue[]) => void;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Minimum supported React version */\nconst MIN_SUPPORTED_VERSION = '18.0.0';\n\n/** Maximum supported React version */\nconst MAX_SUPPORTED_VERSION = '20.0.0';\n\n/** Key used to track React instances on window */\nconst REACT_INSTANCE_KEY = '__ENZYME_REACT_INSTANCES__';\n\n/** Key used to store environment status */\nconst ENV_STATUS_KEY = '__ENZYME_REACT_ENV_STATUS__';\n\n// ============================================================================\n// Version Utilities\n// ============================================================================\n\n/**\n * Parses a semantic version string into components.\n */\nfunction parseVersion(version: string): { major: number; minor: number; patch: number } | null {\n  const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n  const major = match?.[1];\n  const minor = match?.[2];\n  const patch = match?.[3];\n  if (major === undefined || minor === undefined || patch === undefined) return null;\n  return {\n    major: parseInt(major, 10),\n    minor: parseInt(minor, 10),\n    patch: parseInt(patch, 10),\n  };\n}\n\n/**\n * Compares two version strings.\n * Returns -1 if a < b, 0 if a === b, 1 if a > b.\n */\nfunction compareVersions(a: string, b: string): number {\n  const versionA = parseVersion(a);\n  const versionB = parseVersion(b);\n\n  if (!versionA || !versionB) return 0;\n\n  if (versionA.major !== versionB.major) {\n    return versionA.major > versionB.major ? 1 : -1;\n  }\n  if (versionA.minor !== versionB.minor) {\n    return versionA.minor > versionB.minor ? 1 : -1;\n  }\n  if (versionA.patch !== versionB.patch) {\n    return versionA.patch > versionB.patch ? 1 : -1;\n  }\n  return 0;\n}\n\n/**\n * Checks if a version is within a supported range.\n */\nfunction isVersionInRange(version: string, min: string, max: string): boolean {\n  return compareVersions(version, min) >= 0 && compareVersions(version, max) < 0;\n}\n\n// ============================================================================\n// Environment Detection\n// ============================================================================\n\n/**\n * Detects the current React version.\n */\nexport function detectReactVersion(): string | null {\n  try {\n    // Access version property from React (typed as unknown to avoid any)\n    const reactObj = React as unknown as { version?: string };\n    const reactVersion = reactObj.version;\n    if (typeof reactVersion === 'string') {\n      return reactVersion;\n    }\n  } catch {\n    // React not available\n  }\n  return null;\n}\n\n/**\n * Window extended with React instance tracking.\n */\ninterface WindowWithReactTracking extends Window {\n  [REACT_INSTANCE_KEY]?: Set<string>;\n}\n\n/**\n * Detects if multiple React instances are present.\n * This is a common cause of blank pages and hook errors.\n */\nexport function detectMultipleReactInstances(): boolean {\n  if (typeof window === 'undefined') return false;\n\n  try {\n    // Track React instances using a window property\n    const win = window as WindowWithReactTracking;\n\n    // Initialize tracking set if not present\n    win[REACT_INSTANCE_KEY] ??= new Set<string>();\n\n    const instanceSet = win[REACT_INSTANCE_KEY];\n    if (instanceSet === undefined) return false;\n\n    // Generate a unique identifier for this React instance\n    const instanceId = `react-${detectReactVersion() ?? 'unknown'}-${Date.now()}`;\n    instanceSet.add(instanceId);\n\n    // Check if there are multiple instances\n    // This is a heuristic - if the Set grows beyond 1 unique entry\n    // AND the instances have different versions, we have a conflict\n    const instances = Array.from(instanceSet);\n\n    // Extract versions from instance IDs\n    const versions = new Set(\n      instances\n        .map((id: string) => id.split('-')[1])\n        .filter((v: string | undefined): v is string => v !== undefined && v !== 'unknown')\n    );\n\n    return versions.size > 1;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * React with hook functions typed.\n */\ninterface ReactWithHooks {\n  useState?: unknown;\n  useEffect?: unknown;\n  useContext?: unknown;\n  createElement?: unknown;\n}\n\n/**\n * Checks if React hooks are working correctly.\n * Multiple React instances often break hooks.\n */\nexport function validateReactHooks(): boolean {\n  try {\n    // This is a minimal check - if useState is callable, hooks should work\n    // The actual validation happens at runtime when components render\n    const reactObj = React as unknown as ReactWithHooks;\n    return (\n      typeof reactObj.useState === 'function' &&\n      typeof reactObj.useEffect === 'function' &&\n      typeof reactObj.useContext === 'function'\n    );\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Checks if JSX runtime is available.\n */\nexport function validateJSXRuntime(): boolean {\n  try {\n    // Check if createElement is available (needed for JSX)\n    const reactObj = React as unknown as ReactWithHooks;\n    return typeof reactObj.createElement === 'function';\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Window with ReactDOM for UMD builds.\n */\ninterface WindowWithReactDOM extends Window {\n  ReactDOM?: unknown;\n}\n\n/**\n * Checks if ReactDOM is available.\n */\nexport function validateReactDOM(): boolean {\n  if (typeof window === 'undefined') return true; // SSR context\n\n  try {\n    // Check window.ReactDOM for UMD builds\n    const win = window as WindowWithReactDOM;\n    if (win.ReactDOM !== undefined) return true;\n\n    // For ES modules, we can't easily check without dynamic import\n    // But if React is available, ReactDOM is usually bundled together\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n// ============================================================================\n// Environment Status\n// ============================================================================\n\n/**\n * Performs a comprehensive React environment check.\n */\nexport function checkReactEnvironment(config: ReactEnvironmentConfig = {}): ReactEnvironmentStatus {\n  const {\n    minVersion = MIN_SUPPORTED_VERSION,\n    maxVersion = MAX_SUPPORTED_VERSION,\n    logWarnings = true,\n    onIssuesDetected,\n  } = config;\n\n  const issues: ReactEnvironmentIssue[] = [];\n  const reactVersion = detectReactVersion();\n  const hasMultipleInstances = detectMultipleReactInstances();\n  const isReactAvailable = reactVersion !== null;\n  const isReactDOMAvailable = validateReactDOM();\n  const hooksValid = validateReactHooks();\n  const jsxValid = validateJSXRuntime();\n\n  // Check for missing React\n  if (!isReactAvailable) {\n    issues.push({\n      type: 'missing_react',\n      severity: 'error',\n      message: 'React is not available. Components will not render.',\n      resolution: 'Ensure React is installed: npm install react react-dom',\n    });\n  }\n\n  // Check for missing ReactDOM\n  if (!isReactDOMAvailable) {\n    issues.push({\n      type: 'missing_react_dom',\n      severity: 'error',\n      message: 'ReactDOM is not available. Portals and rendering will fail.',\n      resolution: 'Ensure ReactDOM is installed: npm install react-dom',\n    });\n  }\n\n  // Check for multiple instances\n  if (hasMultipleInstances) {\n    issues.push({\n      type: 'multiple_instances',\n      severity: 'error',\n      message: 'Multiple React instances detected. This causes blank pages and hook errors.',\n      resolution:\n        'Ensure only one version of React is installed. Check your package.json for duplicate react dependencies and use npm dedupe.',\n    });\n  }\n\n  // Check version compatibility\n  let isVersionCompatible = true;\n  if (reactVersion !== null && !isVersionInRange(reactVersion, minVersion, maxVersion)) {\n    isVersionCompatible = false;\n    issues.push({\n      type: 'version_mismatch',\n      severity: 'warning',\n      message: `React version ${reactVersion} may not be fully compatible. Supported: ${minVersion} - ${maxVersion}`,\n      resolution: `Update React to a supported version: npm install react@^18.3.1 react-dom@^18.3.1`,\n    });\n  }\n\n  // Check hooks\n  if (!hooksValid) {\n    issues.push({\n      type: 'hooks_error',\n      severity: 'error',\n      message:\n        'React hooks are not functioning correctly. This usually indicates multiple React instances.',\n      resolution: 'Run npm ls react to check for duplicate React installations.',\n    });\n  }\n\n  // Check JSX runtime\n  if (!jsxValid) {\n    issues.push({\n      type: 'jsx_runtime_error',\n      severity: 'error',\n      message: 'JSX runtime is not available. Components will not render correctly.',\n      resolution: 'Ensure you have the correct React version with JSX runtime support (React 17+).',\n    });\n  }\n\n  const status: ReactEnvironmentStatus = {\n    isReactAvailable,\n    isReactDOMAvailable,\n    reactVersion,\n    hasMultipleInstances,\n    isVersionCompatible,\n    issues,\n    checkedAt: Date.now(),\n  };\n\n  // Log warnings\n  if (logWarnings && issues.length > 0) {\n    const errorIssues = issues.filter((i) => i.severity === 'error');\n    const warningIssues = issues.filter((i) => i.severity === 'warning');\n\n    if (errorIssues.length > 0) {\n      console.error(\n        `[Enzyme] React environment errors detected:\\n${errorIssues.map((i) => `  - ${i.message}\\n    Resolution: ${i.resolution ?? 'N/A'}`).join('\\n')}`\n      );\n    }\n\n    if (warningIssues.length > 0) {\n      console.warn(\n        `[Enzyme] React environment warnings:\\n${warningIssues.map((i) => `  - ${i.message}\\n    Resolution: ${i.resolution ?? 'N/A'}`).join('\\n')}`\n      );\n    }\n  }\n\n  // Call callback\n  if (onIssuesDetected && issues.length > 0) {\n    onIssuesDetected(issues);\n  }\n\n  // Cache status\n  if (typeof window !== 'undefined') {\n    const win = window as WindowWithEnvStatus;\n    win[ENV_STATUS_KEY] = status;\n  }\n\n  return status;\n}\n\n/**\n * Window with cached environment status.\n */\ninterface WindowWithEnvStatus extends Window {\n  [ENV_STATUS_KEY]?: ReactEnvironmentStatus;\n}\n\n/**\n * Gets the cached React environment status.\n */\nexport function getCachedEnvironmentStatus(): ReactEnvironmentStatus | null {\n  if (typeof window === 'undefined') return null;\n  const win = window as WindowWithEnvStatus;\n  return win[ENV_STATUS_KEY] ?? null;\n}\n\n/**\n * Checks if the React environment is healthy.\n */\nexport function isReactEnvironmentHealthy(): boolean {\n  const status = getCachedEnvironmentStatus() ?? checkReactEnvironment({ logWarnings: false });\n  return (\n    status.isReactAvailable &&\n    status.isReactDOMAvailable &&\n    !status.hasMultipleInstances &&\n    status.issues.filter((i) => i.severity === 'error').length === 0\n  );\n}\n\n// ============================================================================\n// Safe Rendering Utilities\n// ============================================================================\n\n/**\n * Safely creates a React portal, returning null if ReactDOM is unavailable.\n */\nexport function safeCreatePortal(\n  children: React.ReactNode,\n  container: Element | DocumentFragment\n): React.ReactPortal | null {\n  try {\n    // Import createPortal from react-dom (statically imported at module level)\n    // eslint-disable-next-line @typescript-eslint/no-require-imports\n    const { createPortal } = require('react-dom') as {\n      createPortal?: typeof import('react-dom').createPortal;\n    };\n    if (typeof createPortal === 'function') {\n      return createPortal(children, container);\n    }\n  } catch {\n    console.warn('[Enzyme] createPortal failed - ReactDOM may not be available');\n  }\n  return null;\n}\n\n/**\n * Wraps a component with React environment validation.\n * Renders a fallback if the environment is unhealthy.\n */\nexport function withReactEnvironmentGuard<P extends object>(\n  Component: React.ComponentType<P>,\n  fallback?: React.ReactNode\n): React.FC<P> {\n  const GuardedComponent: React.FC<P> = (props) => {\n    const [isHealthy, setIsHealthy] = React.useState<boolean | null>(null);\n\n    React.useEffect(() => {\n      const status = checkReactEnvironment({ logWarnings: true });\n      setIsHealthy(status.issues.filter((i) => i.severity === 'error').length === 0);\n    }, []);\n\n    // During initial check, render nothing to avoid flash\n    if (isHealthy === null) {\n      return null;\n    }\n\n    // If unhealthy, render fallback\n    if (!isHealthy) {\n      if (fallback) {\n        return React.createElement(React.Fragment, null, fallback);\n      }\n      return React.createElement(\n        'div',\n        {\n          style: {\n            padding: '20px',\n            backgroundColor: '#fff3cd',\n            border: '1px solid #ffc107',\n            borderRadius: '4px',\n            color: '#856404',\n          },\n        },\n        React.createElement('strong', null, 'React Environment Error'),\n        React.createElement(\n          'p',\n          null,\n          'Multiple React instances detected. Please check your dependencies.'\n        ),\n        React.createElement('code', null, 'npm ls react')\n      );\n    }\n\n    return React.createElement(Component, props);\n  };\n\n  GuardedComponent.displayName = `withReactEnvironmentGuard(${Component.displayName ?? Component.name ?? 'Component'})`;\n\n  return GuardedComponent;\n}\n\n// ============================================================================\n// Initialization\n// ============================================================================\n\n// Run initial check on module load (client-side only)\nif (typeof window !== 'undefined') {\n  // Use queueMicrotask to avoid blocking\n  queueMicrotask(() => {\n    checkReactEnvironment({ logWarnings: true });\n  });\n}\n\n// Export all utilities\nexport { parseVersion, compareVersions, isVersionInRange };\n\n// Export React Environment Provider\nexport {\n  ReactEnvironmentProvider,\n  useReactEnvironment,\n  withReactEnvironmentCheck,\n  type ReactEnvironmentContextValue,\n  type ReactEnvironmentProviderProps,\n} from './ReactEnvironmentProvider';\n"],"names":["MIN_SUPPORTED_VERSION","MAX_SUPPORTED_VERSION","REACT_INSTANCE_KEY","ENV_STATUS_KEY","parseVersion","version","match","major","minor","patch","compareVersions","a","b","versionA","versionB","isVersionInRange","min","max","detectReactVersion","reactVersion","React","detectMultipleReactInstances","win","instanceSet","instanceId","instances","id","v","validateReactHooks","reactObj","validateJSXRuntime","validateReactDOM","checkReactEnvironment","config","minVersion","maxVersion","logWarnings","onIssuesDetected","issues","hasMultipleInstances","isReactAvailable","isReactDOMAvailable","hooksValid","jsxValid","isVersionCompatible","status","errorIssues","i","warningIssues","getCachedEnvironmentStatus","isReactEnvironmentHealthy","safeCreatePortal","children","container","createPortal","withReactEnvironmentGuard","Component","fallback","GuardedComponent","props","isHealthy","setIsHealthy"],"mappings":"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"}