{"version":3,"file":"auto-setup.mjs","sources":["../../../src/lib/ux/auto-setup.ts"],"sourcesContent":["/**\n * @file Zero-Config Auto-Setup System\n * @description PhD-level automatic configuration and initialization system that\n * detects environment, capabilities, and user preferences to configure the library\n * with zero configuration required.\n *\n * Features:\n * - Single-line initialization\n * - Automatic environment detection (dev/staging/prod)\n * - Intelligent provider composition\n * - Auto-configuration based on context\n * - Performance monitoring auto-start\n * - Accessibility auto-enhancement\n */\n\n/* eslint-disable @typescript-eslint/strict-boolean-expressions */\n\nimport type React from 'react';\nimport { type ComponentType, createElement, type ReactNode } from 'react';\nimport { isDev, isTest } from '@/lib/core/config/env-helper';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Environment type\n */\nexport type Environment = 'development' | 'staging' | 'production' | 'test';\n\n/**\n * Detected environment info\n */\nexport interface EnvironmentInfo {\n  /** Environment type */\n  type: Environment;\n  /** Base URL */\n  baseUrl: string;\n  /** Is SSR */\n  isSSR: boolean;\n  /** Is browser */\n  isBrowser: boolean;\n  /** Debug mode enabled */\n  debugMode: boolean;\n  /** API endpoint */\n  apiEndpoint: string | null;\n  /** Version */\n  version: string | null;\n}\n\n/**\n * Feature flags for auto-setup\n */\nexport interface AutoSetupFeatures {\n  /** Enable performance monitoring */\n  performance?: boolean;\n  /** Enable error tracking */\n  errorTracking?: boolean;\n  /** Enable analytics */\n  analytics?: boolean;\n  /** Enable accessibility enhancements */\n  accessibility?: boolean;\n  /** Enable real-time features */\n  realtime?: boolean;\n  /** Enable offline support */\n  offline?: boolean;\n  /** Enable theming */\n  theming?: boolean;\n  /** Enable hydration system */\n  hydration?: boolean;\n}\n\n/**\n * Provider configuration\n */\nexport interface ProviderConfig {\n  /** Provider component */\n  Provider: ComponentType<{ children: ReactNode }>;\n  /** Provider props */\n  props?: Record<string, unknown>;\n  /** Priority (higher = outer) */\n  priority?: number;\n  /** Enabled condition */\n  enabled?: boolean | (() => boolean);\n}\n\n/**\n * Auto-setup configuration\n */\nexport interface AutoSetupConfig {\n  /** Features to enable */\n  features?: AutoSetupFeatures;\n  /** Custom providers */\n  providers?: ProviderConfig[];\n  /** Override environment detection */\n  environment?: Environment;\n  /** Enable debug logging */\n  debug?: boolean;\n  /** Analytics endpoint */\n  analyticsEndpoint?: string;\n  /** Error reporting endpoint */\n  errorEndpoint?: string;\n  /** Custom initialization */\n  onInit?: (env: EnvironmentInfo) => void | Promise<void>;\n  /** Custom cleanup */\n  onCleanup?: () => void;\n}\n\n/**\n * Auto-setup result\n */\nexport interface AutoSetupResult {\n  /** Environment info */\n  environment: EnvironmentInfo;\n  /** Active features */\n  features: AutoSetupFeatures;\n  /** Composed provider */\n  Provider: ComponentType<{ children: ReactNode }>;\n  /** Cleanup function */\n  cleanup: () => void;\n  /** Re-initialize */\n  reinit: () => Promise<void>;\n}\n\n// ============================================================================\n// Environment Detection\n// ============================================================================\n\n/**\n * Detect current environment\n */\nexport function detectEnvironment(): EnvironmentInfo {\n  const isBrowser = typeof window !== 'undefined';\n  const isSSR = !isBrowser;\n\n  let type: Environment = 'production';\n  let debugMode = false;\n  let baseUrl = '';\n  let apiEndpoint: string | null = null;\n  let version: string | null = null;\n\n  if (isBrowser) {\n    const {hostname} = window.location;\n    baseUrl = window.location.origin;\n\n    // Detect environment from hostname\n    if (hostname === 'localhost' || hostname === '127.0.0.1') {\n      type = 'development';\n      debugMode = true;\n    } else if (hostname.includes('staging') || hostname.includes('stage')) {\n      type = 'staging';\n      debugMode = true;\n    } else if (hostname.includes('test') || hostname.includes('preview')) {\n      type = 'test';\n      debugMode = true;\n    }\n\n    // Check for environment meta tags\n    const envMeta = document.querySelector('meta[name=\"environment\"]');\n    if (envMeta) {\n      type = envMeta.getAttribute('content') as Environment;\n    }\n\n    // Check for debug mode\n    const debugMeta = document.querySelector('meta[name=\"debug\"]');\n    if (debugMeta) {\n      debugMode = debugMeta.getAttribute('content') === 'true';\n    }\n\n    // Check for API endpoint\n    const apiMeta = document.querySelector('meta[name=\"api-endpoint\"]');\n    if (apiMeta) {\n      apiEndpoint = apiMeta.getAttribute('content');\n    }\n\n    // Check for version\n    const versionMeta = document.querySelector('meta[name=\"version\"]');\n    if (versionMeta) {\n      version = versionMeta.getAttribute('content');\n    }\n\n    // Check URL params for debug override\n    const params = new URLSearchParams(window.location.search);\n    if (params.has('debug')) {\n      debugMode = params.get('debug') !== 'false';\n    }\n  }\n\n  // Check environment using centralized helpers\n  if (isDev()) {\n    type = 'development';\n    debugMode = true;\n  } else if (isTest()) {\n    type = 'test';\n  }\n\n  // Check import.meta.env for additional config if available\n  if (typeof import.meta.env.VITE_API_URL === 'string' && import.meta.env.VITE_API_URL !== '') {\n    apiEndpoint = import.meta.env.VITE_API_URL;\n  }\n\n  if (typeof import.meta.env.VITE_APP_VERSION === 'string' && import.meta.env.VITE_APP_VERSION !== '') {\n    version = import.meta.env.VITE_APP_VERSION;\n  }\n\n  return {\n    type,\n    baseUrl,\n    isSSR,\n    isBrowser,\n    debugMode,\n    apiEndpoint,\n    version,\n  };\n}\n\n// ============================================================================\n// Feature Detection\n// ============================================================================\n\n/**\n * Detect available features based on environment\n */\nexport function detectAvailableFeatures(env: EnvironmentInfo): AutoSetupFeatures {\n\n\n  return {\n    performance: true,\n    errorTracking: true,\n    analytics: env.type === 'production',\n    accessibility: true,\n    realtime: env.isBrowser,\n    offline: env.isBrowser && 'serviceWorker' in navigator,\n    theming: env.isBrowser,\n    hydration: env.isSSR || (env.isBrowser && document.querySelector('[data-ssr]') !== null),\n  };\n}\n\n// ============================================================================\n// Provider Composition\n// ============================================================================\n\n/**\n * Compose multiple providers into a single provider\n */\nexport function composeProviders(\n  providers: ProviderConfig[]\n): ComponentType<{ children: ReactNode }> {\n  // Filter enabled providers and sort by priority\n  const activeProviders = providers\n    .filter((p) => {\n\n      return typeof p.enabled === 'function' ? p.enabled() : p.enabled ?? true;\n    })\n    .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n\n  // Create composed provider\n  return function ComposedProvider({ children }: { children: ReactNode }) {\n    return activeProviders.reduceRight((acc, { Provider, props }) => {\n      return createElement(Provider, { ...props, children: acc });\n    }, children as React.ReactElement);\n  };\n}\n\n// ============================================================================\n// Auto Setup Class\n// ============================================================================\n\n/**\n * Auto-setup manager\n */\nexport class AutoSetup {\n  private static instance: AutoSetup;\n  private config: AutoSetupConfig;\n  private readonly environment: EnvironmentInfo;\n  private readonly features: AutoSetupFeatures;\n  private providers: ProviderConfig[] = [];\n  private cleanupFns: Array<() => void> = [];\n  private isInitialized = false;\n\n  constructor(config: AutoSetupConfig = {}) {\n    this.config = config;\n    this.environment = config.environment\n      ? { ...detectEnvironment(), type: config.environment }\n      : detectEnvironment();\n    this.features = {\n      ...detectAvailableFeatures(this.environment),\n      ...config.features,\n    };\n  }\n\n  /**\n   * Get singleton instance\n   */\n  static getInstance(config?: AutoSetupConfig): AutoSetup {\n    if (!AutoSetup.instance) {\n      AutoSetup.instance = new AutoSetup(config);\n    }\n    return AutoSetup.instance;\n  }\n\n  /**\n   * Reset singleton\n   */\n  static reset(): void {\n    if (AutoSetup.instance) {\n      AutoSetup.instance.cleanup();\n      // Type-safe null assignment for singleton reset\n      (AutoSetup as unknown as { instance: AutoSetup | null }).instance = null;\n    }\n  }\n\n  /**\n   * Initialize the auto-setup\n   */\n  async init(): Promise<AutoSetupResult> {\n    if (this.isInitialized) {\n      return this.getResult();\n    }\n\n    this.log('Initializing auto-setup...');\n    this.log('Environment:', this.environment);\n    this.log('Features:', this.features);\n\n    // Initialize features\n    await this.initializeFeatures();\n\n    // Add custom providers\n    if (this.config.providers) {\n      this.providers.push(...this.config.providers);\n    }\n\n    // Call custom init\n    if (this.config.onInit) {\n      await this.config.onInit(this.environment);\n    }\n\n    this.isInitialized = true;\n    this.log('Auto-setup complete');\n\n    return this.getResult();\n  }\n\n  /**\n   * Cleanup all initialized features\n   */\n  cleanup(): void {\n    this.cleanupFns.forEach((fn) => {\n      try {\n        fn();\n      } catch {\n        // Ignore cleanup errors\n      }\n    });\n    this.cleanupFns = [];\n\n    if (this.config.onCleanup) {\n      this.config.onCleanup();\n    }\n\n    this.isInitialized = false;\n  }\n\n  /**\n   * Re-initialize\n   */\n  async reinit(): Promise<void> {\n    this.cleanup();\n    await this.init();\n  }\n\n  /**\n   * Add a provider\n   */\n  addProvider(config: ProviderConfig): void {\n    this.providers.push(config);\n  }\n\n  /**\n   * Get environment info\n   */\n  getEnvironment(): EnvironmentInfo {\n    return { ...this.environment };\n  }\n\n  /**\n   * Get active features\n   */\n  getFeatures(): AutoSetupFeatures {\n    return { ...this.features };\n  }\n\n  /**\n   * Initialize features\n   */\n  private async initializeFeatures(): Promise<void> {\n    if (this.environment.isSSR) return;\n\n    // Performance monitoring\n    if (this.features.performance) {\n      try {\n        const { initPerformanceMonitoring } = await import('../performance');\n        const cleanup = await initPerformanceMonitoring({\n          debug: this.config.debug ?? this.environment.debugMode,\n          reportToAnalytics: this.environment.type === 'production',\n        });\n        this.cleanupFns.push(cleanup);\n        this.log('Performance monitoring initialized');\n      } catch {\n        this.log('Performance monitoring not available');\n      }\n    }\n\n    // Accessibility\n    if (this.features.accessibility) {\n      try {\n        const { initAnnouncer, installSkipLinks } = await import('./accessibility-enhancer');\n        initAnnouncer();\n        installSkipLinks();\n        this.log('Accessibility enhancements initialized');\n      } catch {\n        this.log('Accessibility enhancer not available');\n      }\n    }\n\n    // Theming\n    if (this.features.theming) {\n      try {\n        const { getResponsiveManager } = await import('./responsive-optimizer');\n        getResponsiveManager();\n        this.log('Responsive manager initialized');\n      } catch {\n        this.log('Responsive manager not available');\n      }\n    }\n  }\n\n  /**\n   * Get the result\n   */\n  private getResult(): AutoSetupResult {\n    return {\n      environment: this.environment,\n      features: this.features,\n      Provider: composeProviders(this.providers),\n      cleanup: () => this.cleanup(),\n      reinit: async () => this.reinit(),\n    };\n  }\n\n  /**\n   * Debug logging\n   */\n  private log(message: string, ...args: unknown[]): void {\n    if (this.config.debug || this.environment.debugMode) {\n      console.info(`[AutoSetup] ${message}`, ...args);\n    }\n  }\n}\n\n// ============================================================================\n// Quick Setup Functions\n// ============================================================================\n\n/**\n * One-line initialization\n */\nexport async function autoSetup(config?: AutoSetupConfig): Promise<AutoSetupResult> {\n  return AutoSetup.getInstance(config).init();\n}\n\n/**\n * Get the auto-setup instance\n */\nexport function getAutoSetup(config?: AutoSetupConfig): AutoSetup {\n  return AutoSetup.getInstance(config);\n}\n\n/**\n * Reset auto-setup\n */\nexport function resetAutoSetup(): void {\n  AutoSetup.reset();\n}\n\n// ============================================================================\n// React Hook\n// ============================================================================\n\n/**\n * Hook for accessing auto-setup state\n */\nexport function useAutoSetup(): {\n  environment: EnvironmentInfo;\n  features: AutoSetupFeatures;\n  isInitialized: boolean;\n  isDevelopment: boolean;\n  isProduction: boolean;\n  isSSR: boolean;\n} {\n  const setup = AutoSetup.getInstance();\n  const env = setup.getEnvironment();\n  const features = setup.getFeatures();\n\n  return {\n    environment: env,\n    features,\n    isInitialized: true,\n    isDevelopment: env.type === 'development',\n    isProduction: env.type === 'production',\n    isSSR: env.isSSR,\n  };\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport default {\n  AutoSetup,\n  autoSetup,\n  getAutoSetup,\n  resetAutoSetup,\n  detectEnvironment,\n  detectAvailableFeatures,\n  composeProviders,\n  useAutoSetup,\n};\n"],"names":["detectEnvironment","isBrowser","isSSR","type","debugMode","baseUrl","apiEndpoint","version","hostname","envMeta","debugMeta","apiMeta","versionMeta","params","isDev","isTest","detectAvailableFeatures","env","composeProviders","providers","activeProviders","p","a","b","children","acc","Provider","props","createElement","AutoSetup","config","fn","initPerformanceMonitoring","cleanup","initAnnouncer","installSkipLinks","getResponsiveManager","message","args","autoSetup","getAutoSetup","resetAutoSetup","useAutoSetup","setup","features"],"mappings":"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"}