{"version":3,"file":"library-integration.mjs","sources":["../../../../src/lib/flags/integration/library-integration.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport React from 'react';\n/**\n * @fileoverview Unified library integration layer for feature flags.\n *\n * This module provides a centralized system for connecting feature flags to all\n * library modules in the application. It enables runtime configuration changes,\n * flag-based behavior modification, and consistent integration patterns.\n *\n * @module flags/integration/library-integration\n *\n * @example\n * ```typescript\n * import {\n *   LibraryFlagIntegration,\n *   createLibraryIntegration,\n *   useLibraryFlags,\n * } from '@/lib/flags/integration/library-integration';\n *\n * // Create integration for a library\n * const apiIntegration = createLibraryIntegration({\n *   libraryId: 'api',\n *   defaultConfig: { retryEnabled: true, cacheEnabled: true },\n *   flagMappings: {\n *     'api-retry-enabled': 'retryEnabled',\n *     'api-cache-enabled': 'cacheEnabled',\n *   },\n * });\n *\n * // Use in component\n * function ApiConsumer() {\n *   const config = useLibraryFlags('api');\n *   // config updates automatically when flags change\n * }\n * ```\n */\n\nimport { createContext, useContext, useState, useEffect, useMemo, type ReactNode } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Library module identifier\n */\nexport type LibraryId =\n  | 'api'\n  | 'routing'\n  | 'ui'\n  | 'performance'\n  | 'auth'\n  | 'monitoring'\n  | 'state'\n  | 'realtime'\n  | 'theme'\n  | 'config'\n  | 'hydration'\n  | 'streaming'\n  | 'vdom'\n  | 'ux'\n  | string;\n\n/**\n * Flag-to-config field mapping\n */\nexport type FlagMapping<TConfig> = {\n  [flagKey: string]: keyof TConfig | ((flagValue: boolean) => Partial<TConfig>);\n};\n\n/**\n * Flag value transformer\n */\nexport type FlagTransformer<T> = (flagValue: boolean, currentValue: T) => T;\n\n/**\n * Library integration configuration\n */\nexport interface LibraryIntegrationConfig<TConfig extends Record<string, unknown>> {\n  /** Unique library identifier */\n  readonly libraryId: LibraryId;\n  /** Default configuration when flags are not set */\n  readonly defaultConfig: TConfig;\n  /** Mapping from flag keys to config properties */\n  readonly flagMappings: FlagMapping<TConfig>;\n  /** Optional transformers for complex mappings */\n  readonly transformers?: Readonly<Record<string, FlagTransformer<unknown>>>;\n  /** Whether to cache configuration */\n  readonly cacheEnabled?: boolean;\n  /** Cache TTL in milliseconds */\n  readonly cacheTTL?: number;\n  /** Callback when config changes */\n  readonly onConfigChange?: (config: TConfig, changedFlags: string[]) => void;\n  /** Priority for evaluation order */\n  readonly priority?: number;\n}\n\n/**\n * Library integration instance\n */\nexport interface LibraryIntegration<TConfig extends Record<string, unknown>> {\n  /** Library identifier */\n  readonly libraryId: LibraryId;\n  /** Get current configuration based on flags */\n  getConfig(flags: Record<string, boolean>): TConfig;\n  /** Get specific config property */\n  getConfigValue<K extends keyof TConfig>(key: K, flags: Record<string, boolean>): TConfig[K];\n  /** Check if a flag affects this library */\n  isAffectedByFlag(flagKey: string): boolean;\n  /** Get all affecting flag keys */\n  getAffectingFlags(): string[];\n  /** Subscribe to config changes */\n  subscribe(callback: (config: TConfig) => void): () => void;\n  /** Update flags and notify subscribers */\n  updateFlags(flags: Record<string, boolean>): void;\n  /** Reset to default config */\n  reset(): void;\n  /** Get integration metadata */\n  getMetadata(): IntegrationMetadata;\n}\n\n/**\n * Integration metadata\n */\nexport interface IntegrationMetadata {\n  readonly libraryId: LibraryId;\n  readonly flagCount: number;\n  readonly priority: number;\n  readonly lastUpdated: number;\n  readonly cacheEnabled: boolean;\n}\n\n/**\n * Global integration registry\n */\nexport interface IntegrationRegistry {\n  /** Register a library integration */\n  register<TConfig extends Record<string, unknown>>(integration: LibraryIntegration<TConfig>): void;\n  /** Unregister a library integration */\n  unregister(libraryId: LibraryId): void;\n  /** Get integration by library ID */\n  get<TConfig extends Record<string, unknown>>(\n    libraryId: LibraryId\n  ): LibraryIntegration<TConfig> | undefined;\n  /** Get all registered integrations */\n  getAll(): LibraryIntegration<Record<string, unknown>>[];\n  /** Update flags across all integrations */\n  updateFlags(flags: Record<string, boolean>): void;\n  /** Get libraries affected by a flag */\n  getAffectedLibraries(flagKey: string): LibraryId[];\n  /** Clear all registrations */\n  clear(): void;\n}\n\n// =============================================================================\n// Implementation\n// =============================================================================\n\n/**\n * Create a library integration instance\n */\nexport function createLibraryIntegration<TConfig extends Record<string, unknown>>(\n  config: LibraryIntegrationConfig<TConfig>\n): LibraryIntegration<TConfig> {\n  const {\n    libraryId,\n    defaultConfig,\n    flagMappings,\n    transformers = {},\n    cacheEnabled = true,\n    cacheTTL = 60000,\n    onConfigChange,\n    priority = 0,\n  } = config;\n\n  let cachedConfig: TConfig | null = null;\n  let cachedFlags: Record<string, boolean> = {};\n  let cacheTimestamp = 0;\n  let lastFlags: Record<string, boolean> = {};\n  const subscribers = new Set<(config: TConfig) => void>();\n\n  const isCacheValid = (): boolean => {\n    if (!cacheEnabled || !cachedConfig) return false;\n    return Date.now() - cacheTimestamp < cacheTTL;\n  };\n\n  const flagsChanged = (newFlags: Record<string, boolean>): boolean => {\n    const affectingFlags = Object.keys(flagMappings);\n    for (const flagKey of affectingFlags) {\n      if (newFlags[flagKey] !== cachedFlags[flagKey]) {\n        return true;\n      }\n    }\n    return false;\n  };\n\n  const computeConfig = (flags: Record<string, boolean>): TConfig => {\n    const result = { ...defaultConfig };\n\n    for (const [flagKey, mapping] of Object.entries(flagMappings)) {\n      const flagValue = flags[flagKey] ?? false;\n\n      if (typeof mapping === 'function') {\n        // Complex mapping function\n        const updates = mapping(flagValue);\n        Object.assign(result, updates);\n      } else {\n        // Direct property mapping\n        const configKey = mapping;\n        const transformer = transformers[String(configKey)];\n\n        if (transformer) {\n          (result as Record<string, unknown>)[String(configKey)] = transformer(\n            flagValue,\n            result[configKey]\n          );\n        } else {\n          (result as Record<string, unknown>)[String(configKey)] = flagValue;\n        }\n      }\n    }\n\n    return result;\n  };\n\n  const notifySubscribers = (config: TConfig): void => {\n    for (const callback of subscribers) {\n      try {\n        callback(config);\n      } catch (error) {\n        console.error(`[LibraryIntegration:${libraryId}] Subscriber error:`, error);\n      }\n    }\n  };\n\n  return {\n    libraryId,\n\n    getConfig(flags: Record<string, boolean>): TConfig {\n      if (isCacheValid() && !flagsChanged(flags)) {\n        return cachedConfig as TConfig;\n      }\n\n      const newConfig = computeConfig(flags);\n      cachedConfig = newConfig;\n      cachedFlags = { ...flags };\n      cacheTimestamp = Date.now();\n\n      return newConfig;\n    },\n\n    getConfigValue<K extends keyof TConfig>(key: K, flags: Record<string, boolean>): TConfig[K] {\n      const fullConfig = this.getConfig(flags);\n      return fullConfig[key];\n    },\n\n    isAffectedByFlag(flagKey: string): boolean {\n      return flagKey in flagMappings;\n    },\n\n    getAffectingFlags(): string[] {\n      return Object.keys(flagMappings);\n    },\n\n    subscribe(callback: (config: TConfig) => void): () => void {\n      subscribers.add(callback);\n      return () => {\n        subscribers.delete(callback);\n      };\n    },\n\n    updateFlags(flags: Record<string, boolean>): void {\n      const changedFlags: string[] = [];\n\n      for (const flagKey of Object.keys(flagMappings)) {\n        if (flags[flagKey] !== lastFlags[flagKey]) {\n          changedFlags.push(flagKey);\n        }\n      }\n\n      if (changedFlags.length === 0) return;\n\n      lastFlags = { ...flags };\n      const newConfig = computeConfig(flags);\n\n      cachedConfig = newConfig;\n      cachedFlags = { ...flags };\n      cacheTimestamp = Date.now();\n\n      onConfigChange?.(newConfig, changedFlags);\n      notifySubscribers(newConfig);\n    },\n\n    reset(): void {\n      cachedConfig = null;\n      cachedFlags = {};\n      cacheTimestamp = 0;\n      lastFlags = {};\n      notifySubscribers(defaultConfig);\n    },\n\n    getMetadata(): IntegrationMetadata {\n      return {\n        libraryId,\n        flagCount: Object.keys(flagMappings).length,\n        priority,\n        lastUpdated: cacheTimestamp,\n        cacheEnabled,\n      };\n    },\n  };\n}\n\n// =============================================================================\n// Global Registry\n// =============================================================================\n\n/**\n * Global integration registry singleton\n */\nclass GlobalIntegrationRegistry implements IntegrationRegistry {\n  private integrations = new Map<LibraryId, LibraryIntegration<Record<string, unknown>>>();\n  private currentFlags: Record<string, boolean> = {};\n\n  register<TConfig extends Record<string, unknown>>(\n    integration: LibraryIntegration<TConfig>\n  ): void {\n    this.integrations.set(\n      integration.libraryId,\n      integration as unknown as LibraryIntegration<Record<string, unknown>>\n    );\n\n    // Apply current flags to new integration\n    if (Object.keys(this.currentFlags).length > 0) {\n      integration.updateFlags(this.currentFlags);\n    }\n  }\n\n  unregister(libraryId: LibraryId): void {\n    const integration = this.integrations.get(libraryId);\n    if (integration) {\n      integration.reset();\n      this.integrations.delete(libraryId);\n    }\n  }\n\n  get<TConfig extends Record<string, unknown>>(\n    libraryId: LibraryId\n  ): LibraryIntegration<TConfig> | undefined {\n    return this.integrations.get(libraryId) as LibraryIntegration<TConfig> | undefined;\n  }\n\n  getAll(): LibraryIntegration<Record<string, unknown>>[] {\n    return Array.from(this.integrations.values()).sort(\n      (a, b) => b.getMetadata().priority - a.getMetadata().priority\n    );\n  }\n\n  updateFlags(flags: Record<string, boolean>): void {\n    this.currentFlags = { ...flags };\n\n    for (const integration of this.integrations.values()) {\n      integration.updateFlags(flags);\n    }\n  }\n\n  getAffectedLibraries(flagKey: string): LibraryId[] {\n    const affected: LibraryId[] = [];\n\n    for (const integration of this.integrations.values()) {\n      if (integration.isAffectedByFlag(flagKey)) {\n        affected.push(integration.libraryId);\n      }\n    }\n\n    return affected;\n  }\n\n  clear(): void {\n    for (const integration of this.integrations.values()) {\n      integration.reset();\n    }\n    this.integrations.clear();\n    this.currentFlags = {};\n  }\n}\n\n/**\n * Global integration registry instance\n */\nexport const integrationRegistry = new GlobalIntegrationRegistry();\n\n/**\n * Get the global integration registry\n */\nexport function getIntegrationRegistry(): IntegrationRegistry {\n  return integrationRegistry;\n}\n\n// =============================================================================\n// React Integration\n// =============================================================================\n\n/**\n * Library integration context value\n */\nexport interface LibraryIntegrationContextValue {\n  /** Current flags */\n  readonly flags: Record<string, boolean>;\n  /** Get config for a library */\n  getLibraryConfig<TConfig extends Record<string, unknown>>(libraryId: LibraryId): TConfig | null;\n  /** Check if a library is flag-enabled */\n  isLibraryEnabled(libraryId: LibraryId): boolean;\n  /** Get all registered library IDs */\n  getRegisteredLibraries(): LibraryId[];\n  /** Subscribe to library config changes */\n  subscribeToLibrary<TConfig extends Record<string, unknown>>(\n    libraryId: LibraryId,\n    callback: (config: TConfig) => void\n  ): () => void;\n}\n\nconst LibraryIntegrationContext = createContext<LibraryIntegrationContextValue | null>(null);\n\n/**\n * Props for LibraryIntegrationProvider\n */\nexport interface LibraryIntegrationProviderProps {\n  readonly children: ReactNode;\n  /** Flag provider function */\n  readonly getFlag: (flagKey: string) => boolean;\n  /** All current flags */\n  readonly flags?: Record<string, boolean>;\n  /** Auto-sync with flag changes */\n  readonly autoSync?: boolean;\n  /** Sync interval in ms */\n  readonly syncInterval?: number;\n}\n\n/**\n * Provider component for library integration\n */\nexport function LibraryIntegrationProvider({\n  children,\n  getFlag,\n  flags: externalFlags = {},\n  autoSync = true,\n  syncInterval = 5000,\n}: LibraryIntegrationProviderProps): React.JSX.Element {\n  const [flags, setFlags] = useState<Record<string, boolean>>(externalFlags);\n\n  // Sync flags from external source\n  useEffect(() => {\n    setFlags(externalFlags);\n    integrationRegistry.updateFlags(externalFlags);\n  }, [externalFlags]);\n\n  // Auto-sync with flag provider\n  useEffect(() => {\n    if (!autoSync) return;\n\n    const syncFlags = (): void => {\n      const allIntegrations = integrationRegistry.getAll();\n      const allFlagKeys = new Set<string>();\n\n      for (const integration of allIntegrations) {\n        for (const flagKey of integration.getAffectingFlags()) {\n          allFlagKeys.add(flagKey);\n        }\n      }\n\n      const updatedFlags: Record<string, boolean> = {};\n      for (const flagKey of allFlagKeys) {\n        updatedFlags[flagKey] = getFlag(flagKey);\n      }\n\n      setFlags(updatedFlags);\n      integrationRegistry.updateFlags(updatedFlags);\n    };\n\n    const interval = setInterval(syncFlags, syncInterval);\n    syncFlags(); // Initial sync\n\n    return () => clearInterval(interval);\n  }, [autoSync, syncInterval, getFlag]);\n\n  const contextValue = useMemo<LibraryIntegrationContextValue>(\n    () => ({\n      flags,\n\n      getLibraryConfig<TConfig extends Record<string, unknown>>(\n        libraryId: LibraryId\n      ): TConfig | null {\n        const integration = integrationRegistry.get<TConfig>(libraryId);\n        if (!integration) return null;\n        return integration.getConfig(flags);\n      },\n\n      isLibraryEnabled(libraryId: LibraryId): boolean {\n        const integration = integrationRegistry.get(libraryId);\n        if (!integration) return true; // Default to enabled if not registered\n        const config = integration.getConfig(flags);\n        return (config as { enabled?: boolean }).enabled ?? true;\n      },\n\n      getRegisteredLibraries(): LibraryId[] {\n        return integrationRegistry.getAll().map((i) => i.libraryId);\n      },\n\n      subscribeToLibrary<TConfig extends Record<string, unknown>>(\n        libraryId: LibraryId,\n        callback: (config: TConfig) => void\n      ): () => void {\n        const integration = integrationRegistry.get<TConfig>(libraryId);\n        if (!integration) return () => {};\n        return integration.subscribe(callback);\n      },\n    }),\n    [flags]\n  );\n\n  return (\n    <LibraryIntegrationContext.Provider value={contextValue}>\n      {children}\n    </LibraryIntegrationContext.Provider>\n  );\n}\n\n/**\n * Hook to access library integration context\n */\nexport function useLibraryIntegrationContext(): LibraryIntegrationContextValue {\n  const context = useContext(LibraryIntegrationContext);\n  if (!context) {\n    throw new Error(\n      'useLibraryIntegrationContext must be used within a LibraryIntegrationProvider'\n    );\n  }\n  return context;\n}\n\n/**\n * Hook to get configuration for a specific library\n */\nexport function useLibraryFlags<TConfig extends Record<string, unknown>>(\n  libraryId: LibraryId\n): TConfig | null {\n  const context = useContext(LibraryIntegrationContext);\n  const [config, setConfig] = useState<TConfig | null>(null);\n\n  useEffect(() => {\n    if (!context) return;\n\n    // Get initial config\n    setTimeout(() => {\n      setConfig(context.getLibraryConfig<TConfig>(libraryId));\n    }, 0);\n\n    // Subscribe to updates\n    return context.subscribeToLibrary<TConfig>(libraryId, (newConfig: TConfig) => {\n      setTimeout(() => {\n        setConfig(newConfig);\n      }, 0);\n    });\n  }, [context, libraryId]);\n\n  return config;\n}\n\n/**\n * Hook to check if a library feature is enabled\n */\nexport function useLibraryFeature(libraryId: LibraryId, featureKey: string): boolean {\n  const config = useLibraryFlags<Record<string, unknown>>(libraryId);\n  return config ? Boolean(config[featureKey]) : false;\n}\n\n/**\n * Hook to subscribe to multiple library configs\n */\nexport function useMultiLibraryFlags<TConfigs extends Record<LibraryId, Record<string, unknown>>>(\n  libraryIds: (keyof TConfigs)[]\n): Partial<TConfigs> {\n  const context = useContext(LibraryIntegrationContext);\n  const [configs, setConfigs] = useState<Partial<TConfigs>>({});\n\n  useEffect(() => {\n    if (!context) return;\n\n    // Get initial configs\n    setTimeout(() => {\n      const initialConfigs: Partial<TConfigs> = {};\n      for (const id of libraryIds) {\n        const config = context.getLibraryConfig(id as LibraryId);\n        if (config) {\n          initialConfigs[id] = config as TConfigs[typeof id];\n        }\n      }\n      setConfigs(initialConfigs);\n    }, 0);\n\n    // Subscribe to all\n    const unsubscribers = libraryIds.map((id) =>\n      context.subscribeToLibrary(id as LibraryId, (newConfig) => {\n        setTimeout(() => {\n          setConfigs((prev) => ({\n            ...prev,\n            [id]: newConfig,\n          }));\n        }, 0);\n      })\n    );\n\n    return () => {\n      for (const unsub of unsubscribers) {\n        unsub();\n      }\n    };\n  }, [context, libraryIds]);\n\n  return configs;\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Create a simple flag-to-boolean config integration\n */\nexport function createSimpleIntegration(\n  libraryId: LibraryId,\n  flagKeys: string[]\n): LibraryIntegration<Record<string, boolean>> {\n  const defaultConfig: Record<string, boolean> = {};\n  const flagMappings: FlagMapping<Record<string, boolean>> = {};\n\n  for (const flagKey of flagKeys) {\n    // Convert flag key to config key (e.g., 'api-retry-enabled' -> 'retryEnabled')\n    const configKey = flagKey\n      .split('-')\n      .filter((_, i) => i > 0) // Remove library prefix\n      .map((part, i) => (i === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1)))\n      .join('');\n\n    defaultConfig[configKey || flagKey] = false;\n    (flagMappings as Record<string, string>)[flagKey] = configKey || flagKey;\n  }\n\n  return createLibraryIntegration({\n    libraryId,\n    defaultConfig,\n    flagMappings,\n  });\n}\n\n/**\n * Batch register multiple integrations\n */\nexport function registerIntegrations(\n  integrations: LibraryIntegration<Record<string, unknown>>[]\n): () => void {\n  for (const integration of integrations) {\n    integrationRegistry.register(integration);\n  }\n\n  return () => {\n    for (const integration of integrations) {\n      integrationRegistry.unregister(integration.libraryId);\n    }\n  };\n}\n\n/**\n * Create a flag impact report across all libraries\n */\nexport function createFlagImpactReport(flagKey: string): {\n  affectedLibraries: LibraryId[];\n  configChanges: Record<LibraryId, Record<string, unknown>>;\n} {\n  const affectedLibraries = integrationRegistry.getAffectedLibraries(flagKey);\n  const configChanges: Record<LibraryId, Record<string, unknown>> = {};\n\n  for (const libraryId of affectedLibraries) {\n    const integration = integrationRegistry.get(libraryId);\n    if (integration) {\n      const withFlag = integration.getConfig({ [flagKey]: true });\n      const withoutFlag = integration.getConfig({ [flagKey]: false });\n\n      const changes: Record<string, unknown> = {};\n      for (const key of Object.keys(withFlag)) {\n        if (withFlag[key] !== withoutFlag[key]) {\n          changes[key] = { from: withoutFlag[key], to: withFlag[key] };\n        }\n      }\n\n      if (Object.keys(changes).length > 0) {\n        configChanges[libraryId] = changes;\n      }\n    }\n  }\n\n  return { affectedLibraries, configChanges };\n}\n"],"names":["createLibraryIntegration","config","libraryId","defaultConfig","flagMappings","transformers","cacheEnabled","cacheTTL","onConfigChange","priority","cachedConfig","cachedFlags","cacheTimestamp","lastFlags","subscribers","isCacheValid","flagsChanged","newFlags","affectingFlags","flagKey","computeConfig","flags","result","mapping","flagValue","updates","configKey","transformer","notifySubscribers","callback","error","newConfig","key","changedFlags","GlobalIntegrationRegistry","integration","a","b","affected","integrationRegistry","getIntegrationRegistry","LibraryIntegrationContext","createContext","LibraryIntegrationProvider","children","getFlag","externalFlags","autoSync","syncInterval","setFlags","useState","useEffect","syncFlags","allIntegrations","allFlagKeys","updatedFlags","interval","contextValue","useMemo","i","useLibraryIntegrationContext","context","useContext","useLibraryFlags","setConfig","useLibraryFeature","featureKey","useMultiLibraryFlags","libraryIds","configs","setConfigs","initialConfigs","id","unsubscribers","prev","unsub","createSimpleIntegration","flagKeys","_","part","registerIntegrations","integrations","createFlagImpactReport","affectedLibraries","configChanges","withFlag","withoutFlag","changes"],"mappings":"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"}