{"version":3,"file":"ConfigRegistry.mjs","sources":["../../../../../src/lib/core/config/registry/ConfigRegistry.ts"],"sourcesContent":["/**\n * @fileoverview Centralized configuration registry for the library module.\n *\n * The ConfigRegistry provides:\n * - Single source of truth for all library configuration\n * - Type-safe configuration access with path notation\n * - Runtime configuration updates with change events\n * - Environment-specific overrides\n * - Configuration source tracking\n *\n * @module core/config/registry/ConfigRegistry\n */\n\nimport type {\n  LibraryConfig,\n  DeepPartial,\n  DeepReadonly,\n  ConfigPath,\n  ConfigSource,\n  ConfigChangeEvent,\n  ConfigChangeListener,\n  Unsubscribe,\n  IConfigRegistry,\n  Environment,\n} from '../types';\n\nimport {\n  DEFAULT_NETWORK_CONFIG,\n  DEFAULT_CACHE_CONFIG,\n  DEFAULT_FLAGS_CONFIG,\n  DEFAULT_AUTH_CONFIG,\n  DEFAULT_LAYOUTS_CONFIG,\n  DEFAULT_VDOM_CONFIG,\n  DEFAULT_UI_CONFIG,\n  DEFAULT_MONITORING_CONFIG,\n} from '../constants/timing.constants';\n\nimport { detectEnvironment as detectEnvFromConfig } from '@/lib/config/environment-config';\n\n// =============================================================================\n// Default Configuration\n// =============================================================================\n\n/**\n * Complete default library configuration.\n */\nconst DEFAULT_LIBRARY_CONFIG: LibraryConfig = {\n  network: DEFAULT_NETWORK_CONFIG,\n  cache: DEFAULT_CACHE_CONFIG,\n  flags: DEFAULT_FLAGS_CONFIG,\n  auth: DEFAULT_AUTH_CONFIG,\n  layouts: DEFAULT_LAYOUTS_CONFIG,\n  vdom: DEFAULT_VDOM_CONFIG,\n  ui: DEFAULT_UI_CONFIG,\n  monitoring: DEFAULT_MONITORING_CONFIG,\n};\n\n// =============================================================================\n// Environment Overrides\n// =============================================================================\n\n/**\n * Environment-specific configuration overrides.\n */\nconst ENVIRONMENT_OVERRIDES: Record<Environment, DeepPartial<LibraryConfig>> = {\n  development: {\n    network: {\n      defaultTimeout: 60000,       // Longer timeout for debugging\n      maxRetryAttempts: 1,         // Fewer retries in dev\n    },\n    cache: {\n      defaultTTL: 60000,           // Shorter cache in dev\n    },\n    monitoring: {\n      samplingRate: 1.0,           // Full sampling in dev\n    },\n  },\n  staging: {\n    network: {\n      defaultTimeout: 45000,\n      maxRetryAttempts: 2,\n    },\n    monitoring: {\n      samplingRate: 0.5,           // 50% sampling in staging\n    },\n  },\n  production: {\n    network: {\n      defaultTimeout: 30000,\n      maxRetryAttempts: 3,\n    },\n    cache: {\n      defaultTTL: 300000,          // 5 minute cache in prod\n    },\n    monitoring: {\n      samplingRate: 0.1,           // 10% sampling in prod\n    },\n  },\n  test: {\n    network: {\n      defaultTimeout: 5000,        // Fast timeout in tests\n      maxRetryAttempts: 0,         // No retries in tests\n    },\n    cache: {\n      defaultTTL: 0,               // No cache in tests\n    },\n    monitoring: {\n      samplingRate: 0,             // No monitoring in tests\n    },\n  },\n};\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get a value at a dot-notation path from an object.\n */\nfunction getAtPath<T>(obj: unknown, path: string, defaultValue?: T): T {\n  const parts = path.split('.');\n  let current: unknown = obj;\n\n  for (const part of parts) {\n    if (current === null || current === undefined) {\n      return defaultValue as T;\n    }\n    if (typeof current === 'object' && part in current) {\n      current = (current as Record<string, unknown>)[part];\n    } else {\n      return defaultValue as T;\n    }\n  }\n\n  return (current ?? defaultValue) as T;\n}\n\n/**\n * Set a value at a dot-notation path in an object.\n */\nfunction setAtPath<T extends object>(obj: T, path: string, value: unknown): T {\n  const parts = path.split('.');\n  const result = { ...obj } as Record<string, unknown>;\n  let current = result;\n\n  for (let i = 0; i < parts.length - 1; i++) {\n    const part = parts[i];\n    if (part !== undefined && part !== null && part !== '' && typeof current[part] === 'object' && current[part] !== null) {\n      current[part] = { ...current[part] };\n    } else if (part !== undefined && part !== null && part !== '') {\n      current[part] = {};\n    }\n    if (part !== undefined && part !== null && part !== '') {\n      current = current[part] as Record<string, unknown>;\n    }\n  }\n\n  const lastPart = parts[parts.length - 1];\n  if (lastPart !== undefined) {\n    current[lastPart] = value;\n  }\n  return result as T;\n}\n\n/**\n * Check if a path exists in an object.\n */\nfunction hasPath(obj: unknown, path: string): boolean {\n  const parts = path.split('.');\n  let current: unknown = obj;\n\n  for (const part of parts) {\n    if (current === null || current === undefined) {\n      return false;\n    }\n    if (typeof current === 'object' && part in current) {\n      current = (current as Record<string, unknown>)[part];\n    } else {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Deep merge two objects.\n */\nfunction deepMerge<T extends object>(target: T, source: DeepPartial<T>): T {\n  const result = { ...target } as Record<string, unknown>;\n\n  for (const key of Object.keys(source)) {\n    const sourceValue = (source as Record<string, unknown>)[key];\n    const targetValue = result[key];\n\n    if (\n      sourceValue !== null &&\n      typeof sourceValue === 'object' &&\n      !Array.isArray(sourceValue) &&\n      targetValue !== null &&\n      typeof targetValue === 'object' &&\n      !Array.isArray(targetValue)\n    ) {\n      result[key] = deepMerge(\n        targetValue,\n        sourceValue\n      );\n    } else if (sourceValue !== undefined) {\n      result[key] = sourceValue;\n    }\n  }\n\n  return result as T;\n}\n\n/**\n * Deep freeze an object.\n */\nfunction deepFreeze<T extends object>(obj: T): DeepReadonly<T> {\n  const propNames = Object.getOwnPropertyNames(obj);\n\n  for (const name of propNames) {\n    const value = (obj as Record<string, unknown>)[name];\n\n    if (value != null && typeof value === 'object' && !Object.isFrozen(value)) {\n      deepFreeze(value);\n    }\n  }\n\n  return Object.freeze(obj) as DeepReadonly<T>;\n}\n\n// =============================================================================\n// ConfigRegistry Implementation\n// =============================================================================\n\n/**\n * Centralized configuration registry for the library.\n *\n * Provides type-safe access to all library configuration with support for:\n * - Runtime updates\n * - Environment-specific overrides\n * - Change subscriptions\n * - Source tracking\n *\n * @example\n * ```typescript\n * const registry = ConfigRegistry.getInstance();\n *\n * // Get complete config\n * const config = registry.getConfig();\n *\n * // Get specific value\n * const timeout = registry.get('network.defaultTimeout');\n *\n * // Update at runtime\n * registry.set('network.defaultTimeout', 60000);\n *\n * // Subscribe to changes\n * const unsub = registry.subscribe((event) => {\n *   console.log(`${event.path} changed to ${event.newValue}`);\n * });\n * ```\n */\nexport class ConfigRegistry implements IConfigRegistry {\n  private static instance: ConfigRegistry | null = null;\n\n  private config: LibraryConfig;\n  private sources: Map<string, ConfigSource> = new Map();\n  private listeners: Set<ConfigChangeListener> = new Set();\n  private pathListeners: Map<string, Set<ConfigChangeListener>> = new Map();\n  private environment: Environment = 'development';\n  private frozen = false;\n\n  private constructor() {\n    this.config = { ...DEFAULT_LIBRARY_CONFIG };\n    this.initializeSources();\n    this.detectEnvironment();\n  }\n\n  /**\n   * Get the singleton instance.\n   */\n  static getInstance(): ConfigRegistry {\n    ConfigRegistry.instance ??= new ConfigRegistry();\n    return ConfigRegistry.instance;\n  }\n\n  /**\n   * Reset the singleton instance (for testing).\n   */\n  static resetInstance(): void {\n    ConfigRegistry.instance = null;\n  }\n\n  /**\n   * Get the complete library configuration (frozen).\n   */\n  getConfig(): DeepReadonly<LibraryConfig> {\n    return deepFreeze({ ...this.config });\n  }\n\n  /**\n   * Get a configuration value by path.\n   */\n  get<T>(path: ConfigPath, defaultValue?: T): T {\n    return getAtPath<T>(this.config, path, defaultValue);\n  }\n\n  /**\n   * Check if a configuration path exists.\n   */\n  has(path: ConfigPath): boolean {\n    return hasPath(this.config, path);\n  }\n\n  // ===========================================================================\n  // IConfigRegistry Implementation\n  // ===========================================================================\n\n  /**\n   * Set a runtime configuration value.\n   */\n  set(path: ConfigPath, value: unknown, source: ConfigSource = 'runtime'): void {\n    if (this.frozen) {\n      console.warn('[ConfigRegistry] Cannot modify frozen configuration');\n      return;\n    }\n\n    const previousValue = this.get(path);\n\n    if (JSON.stringify(previousValue) === JSON.stringify(value)) {\n      return; // No change\n    }\n\n    this.config = setAtPath(this.config, path, value);\n    this.sources.set(path, source);\n\n    const event: ConfigChangeEvent = {\n      path,\n      previousValue,\n      newValue: value,\n      source,\n      timestamp: new Date(),\n    };\n\n    this.emitChange(event);\n  }\n\n  /**\n   * Reset configuration to defaults.\n   */\n  reset(path?: ConfigPath): void {\n    if (path != null) {\n      const defaultValue = getAtPath(DEFAULT_LIBRARY_CONFIG, path);\n      this.set(path, defaultValue, 'default');\n    } else {\n      this.config = { ...DEFAULT_LIBRARY_CONFIG };\n      this.sources.clear();\n      this.initializeSources();\n      this.applyEnvironmentOverrides(this.environment);\n    }\n  }\n\n  /**\n   * Subscribe to all configuration changes.\n   */\n  subscribe(listener: ConfigChangeListener): Unsubscribe {\n    this.listeners.add(listener);\n    return () => {\n      this.listeners.delete(listener);\n    };\n  }\n\n  /**\n   * Subscribe to changes at a specific path.\n   */\n  subscribeToPath(path: ConfigPath, listener: ConfigChangeListener): Unsubscribe {\n    if (!this.pathListeners.has(path)) {\n      this.pathListeners.set(path, new Set());\n    }\n    const listeners = this.pathListeners.get(path);\n    if (listeners != null) {\n      listeners.add(listener);\n    }\n\n    return () => {\n      const listeners = this.pathListeners.get(path);\n      if (listeners) {\n        listeners.delete(listener);\n        if (listeners.size === 0) {\n          this.pathListeners.delete(path);\n        }\n      }\n    };\n  }\n\n  /**\n   * Apply environment-specific overrides.\n   */\n  applyEnvironmentOverrides(env: Environment): void {\n    this.environment = env;\n    const overrides = ENVIRONMENT_OVERRIDES[env];\n\n    if (overrides != null && typeof overrides === 'object') {\n      this.config = deepMerge(this.config, overrides);\n      this.traverseAndMarkSource(overrides, '', 'environment');\n    }\n  }\n\n  /**\n   * Get the source of a configuration value.\n   */\n  getSource(path: ConfigPath): ConfigSource {\n    return this.sources.get(path) ?? 'default';\n  }\n\n  /**\n   * Get the current environment.\n   */\n  getEnvironment(): Environment {\n    return this.environment;\n  }\n\n  /**\n   * Apply a partial configuration overlay.\n   */\n  applyOverlay(overlay: DeepPartial<LibraryConfig>, source: ConfigSource = 'override'): void {\n    this.config = deepMerge(this.config, overlay);\n    this.traverseAndMarkSource(overlay, '', source);\n  }\n\n  /**\n   * Freeze the configuration (prevent further modifications).\n   */\n  freeze(): void {\n    this.frozen = true;\n  }\n\n  // ===========================================================================\n  // Additional Methods\n  // ===========================================================================\n\n  /**\n   * Unfreeze the configuration.\n   */\n  unfreeze(): void {\n    this.frozen = false;\n  }\n\n  /**\n   * Check if configuration is frozen.\n   */\n  isFrozen(): boolean {\n    return this.frozen;\n  }\n\n  /**\n   * Get all configuration paths.\n   */\n  getAllPaths(): string[] {\n    return Array.from(this.sources.keys());\n  }\n\n  /**\n   * Export configuration as JSON.\n   */\n  toJSON(): string {\n    return JSON.stringify(this.config, null, 2);\n  }\n\n  /**\n   * Import configuration from JSON.\n   */\n  fromJSON(json: string, source: ConfigSource = 'runtime'): void {\n    try {\n      const parsed = JSON.parse(json) as DeepPartial<LibraryConfig>;\n      this.applyOverlay(parsed, source);\n    } catch (error) {\n      console.error('[ConfigRegistry] Failed to parse JSON:', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Initialize source tracking for all paths.\n   */\n  private initializeSources(): void {\n    this.traverseAndMarkSource(this.config, '', 'default');\n  }\n\n  private traverseAndMarkSource(obj: unknown, prefix: string, source: ConfigSource): void {\n    if (obj === null || typeof obj !== 'object') {\n      if (prefix) {\n        this.sources.set(prefix, source);\n      }\n      return;\n    }\n\n    for (const [key, value] of Object.entries(obj)) {\n      const path = prefix ? `${prefix}.${key}` : key;\n      if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n        this.traverseAndMarkSource(value, path, source);\n      } else {\n        this.sources.set(path, source);\n      }\n    }\n  }\n\n  /**\n   * Detect and apply environment.\n   * Uses centralized detectEnvironment() from environment-config to avoid\n   * duplicating environment detection logic across the codebase.\n   */\n  private detectEnvironment(): void {\n    const detectedEnv = detectEnvFromConfig();\n    this.applyEnvironmentOverrides(detectedEnv);\n  }\n\n  // ===========================================================================\n  // Private Methods\n  // ===========================================================================\n\n  private emitChange(event: ConfigChangeEvent): void {\n    // Notify global listeners\n    for (const listener of this.listeners) {\n      try {\n        listener(event);\n      } catch (error) {\n        console.error('[ConfigRegistry] Error in change listener:', error);\n      }\n    }\n\n    // Notify path-specific listeners\n    for (const [path, listeners] of this.pathListeners) {\n      if (event.path === path || event.path.startsWith(`${path}.`)) {\n        for (const listener of listeners) {\n          try {\n            listener(event);\n          } catch (error) {\n            console.error('[ConfigRegistry] Error in path listener:', error);\n          }\n        }\n      }\n    }\n  }\n}\n\n// =============================================================================\n// Convenience Functions\n// =============================================================================\n\n/**\n * Get the ConfigRegistry singleton instance.\n */\nexport function getConfigRegistry(): ConfigRegistry {\n  return ConfigRegistry.getInstance();\n}\n\n/**\n * Get the complete library configuration.\n */\nexport function getLibConfig(): DeepReadonly<LibraryConfig> {\n  return getConfigRegistry().getConfig();\n}\n\n/**\n * Get a configuration value by path.\n */\nexport function getLibConfigValue<T>(path: ConfigPath, defaultValue?: T): T {\n  return getConfigRegistry().get(path, defaultValue);\n}\n\n/**\n * Set a runtime configuration value.\n */\nexport function setLibConfigValue(path: ConfigPath, value: unknown): void {\n  getConfigRegistry().set(path, value, 'runtime');\n}\n\n/**\n * Subscribe to configuration changes.\n */\nexport function subscribeToLibConfig(listener: ConfigChangeListener): Unsubscribe {\n  return getConfigRegistry().subscribe(listener);\n}\n\n// =============================================================================\n// Typed Accessors\n// =============================================================================\n\n/**\n * Type-safe accessors for configuration domains.\n */\nexport const LIB_CONFIG: {\n  readonly network: DeepReadonly<LibraryConfig['network']>;\n  readonly cache: DeepReadonly<LibraryConfig['cache']>;\n  readonly flags: DeepReadonly<LibraryConfig['flags']>;\n  readonly auth: DeepReadonly<LibraryConfig['auth']>;\n  readonly layouts: DeepReadonly<LibraryConfig['layouts']>;\n  readonly vdom: DeepReadonly<LibraryConfig['vdom']>;\n  readonly ui: DeepReadonly<LibraryConfig['ui']>;\n  readonly monitoring: DeepReadonly<LibraryConfig['monitoring']>;\n} = {\n  get network() {\n    return getConfigRegistry().getConfig().network;\n  },\n  get cache() {\n    return getConfigRegistry().getConfig().cache;\n  },\n  get flags() {\n    return getConfigRegistry().getConfig().flags;\n  },\n  get auth() {\n    return getConfigRegistry().getConfig().auth;\n  },\n  get layouts() {\n    return getConfigRegistry().getConfig().layouts;\n  },\n  get vdom() {\n    return getConfigRegistry().getConfig().vdom;\n  },\n  get ui() {\n    return getConfigRegistry().getConfig().ui;\n  },\n  get monitoring() {\n    return getConfigRegistry().getConfig().monitoring;\n  },\n};\n"],"names":["DEFAULT_LIBRARY_CONFIG","DEFAULT_NETWORK_CONFIG","DEFAULT_CACHE_CONFIG","DEFAULT_FLAGS_CONFIG","DEFAULT_AUTH_CONFIG","DEFAULT_LAYOUTS_CONFIG","DEFAULT_VDOM_CONFIG","DEFAULT_UI_CONFIG","DEFAULT_MONITORING_CONFIG","ENVIRONMENT_OVERRIDES","getAtPath","obj","path","defaultValue","parts","current","part","setAtPath","value","result","i","lastPart","hasPath","deepMerge","target","source","key","sourceValue","targetValue","deepFreeze","propNames","name","ConfigRegistry","previousValue","event","listener","listeners","env","overrides","overlay","json","parsed","error","prefix","detectedEnv","detectEnvFromConfig","getConfigRegistry","getLibConfig","getLibConfigValue","setLibConfigValue","subscribeToLibConfig","LIB_CONFIG"],"mappings":"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"}