{"version":3,"file":"performance-flags.mjs","sources":["../../../../src/lib/flags/integration/performance-flags.ts"],"sourcesContent":["/**\n * @fileoverview Performance feature flags for controlling monitoring and optimization.\n *\n * This module provides feature flag integration for the performance layer, enabling\n * dynamic control over monitoring, budgets, profiling, and optimization features.\n *\n * @module flags/integration/performance-flags\n *\n * @example\n * ```typescript\n * import {\n *   performanceFlags,\n *   usePerformanceFlagConfig,\n *   getFlaggedMonitoringConfig,\n * } from '@/lib/flags/integration/performance-flags';\n *\n * // Check performance feature flags\n * if (performanceFlags.isMonitoringEnabled()) {\n *   // Start performance monitoring\n * }\n *\n * // Use in component\n * function App() {\n *   const config = usePerformanceFlagConfig();\n *   // config.monitoringEnabled, config.profilingEnabled, etc.\n * }\n * ```\n */\n\nimport { useMemo } from 'react';\nimport {\n  createLibraryIntegration,\n  useLibraryFlags,\n  integrationRegistry,\n  type LibraryIntegration,\n} from './library-integration';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Performance flag keys\n */\nexport const PERFORMANCE_FLAG_KEYS = {\n  /** Enable performance monitoring */\n  PERF_MONITORING_ENABLED: 'perf-monitoring-enabled',\n  /** Enable web vitals collection */\n  PERF_VITALS_ENABLED: 'perf-vitals-enabled',\n  /** Enable render profiling */\n  PERF_PROFILING_ENABLED: 'perf-profiling-enabled',\n  /** Enable memory monitoring */\n  PERF_MEMORY_ENABLED: 'perf-memory-enabled',\n  /** Enable network monitoring */\n  PERF_NETWORK_ENABLED: 'perf-network-enabled',\n  /** Enable budget enforcement */\n  PERF_BUDGETS_ENABLED: 'perf-budgets-enabled',\n  /** Enable long task detection */\n  PERF_LONG_TASKS_ENABLED: 'perf-long-tasks-enabled',\n  /** Enable prefetching */\n  PERF_PREFETCH_ENABLED: 'perf-prefetch-enabled',\n  /** Enable predictive prefetch */\n  PERF_PREDICTIVE_ENABLED: 'perf-predictive-enabled',\n  /** Enable code splitting */\n  PERF_CODE_SPLITTING_ENABLED: 'perf-code-splitting-enabled',\n  /** Enable RUM (Real User Monitoring) */\n  PERF_RUM_ENABLED: 'perf-rum-enabled',\n  /** Enable synthetic monitoring */\n  PERF_SYNTHETIC_ENABLED: 'perf-synthetic-enabled',\n  /** Enable resource hints */\n  PERF_RESOURCE_HINTS_ENABLED: 'perf-resource-hints-enabled',\n  /** Enable image optimization */\n  PERF_IMAGE_OPT_ENABLED: 'perf-image-opt-enabled',\n  /** Enable bundle analysis */\n  PERF_BUNDLE_ANALYSIS_ENABLED: 'perf-bundle-analysis-enabled',\n  /** Enable degradation mode */\n  PERF_DEGRADATION_ENABLED: 'perf-degradation-enabled',\n} as const;\n\nexport type PerformanceFlagKey = (typeof PERFORMANCE_FLAG_KEYS)[keyof typeof PERFORMANCE_FLAG_KEYS];\n\n/**\n * Performance flag configuration\n */\nexport interface PerformanceFlagConfig {\n  /** Enable monitoring */\n  readonly monitoringEnabled: boolean;\n  /** Enable vitals collection */\n  readonly vitalsEnabled: boolean;\n  /** Enable render profiling */\n  readonly profilingEnabled: boolean;\n  /** Enable memory monitoring */\n  readonly memoryEnabled: boolean;\n  /** Enable network monitoring */\n  readonly networkEnabled: boolean;\n  /** Enable budget enforcement */\n  readonly budgetsEnabled: boolean;\n  /** Enable long task detection */\n  readonly longTasksEnabled: boolean;\n  /** Enable prefetching */\n  readonly prefetchEnabled: boolean;\n  /** Enable predictive prefetch */\n  readonly predictiveEnabled: boolean;\n  /** Enable code splitting */\n  readonly codeSplittingEnabled: boolean;\n  /** Enable RUM */\n  readonly rumEnabled: boolean;\n  /** Enable synthetic monitoring */\n  readonly syntheticEnabled: boolean;\n  /** Enable resource hints */\n  readonly resourceHintsEnabled: boolean;\n  /** Enable image optimization */\n  readonly imageOptEnabled: boolean;\n  /** Enable bundle analysis */\n  readonly bundleAnalysisEnabled: boolean;\n  /** Enable degradation mode */\n  readonly degradationEnabled: boolean;\n  /** Index signature for Record<string, unknown> compatibility */\n  [key: string]: unknown;\n}\n\n/**\n * Monitoring configuration with flag overrides\n */\nexport interface FlaggedMonitoringConfig {\n  /** Whether monitoring is active */\n  readonly active: boolean;\n  /** Sampling rate (0-1) */\n  readonly sampleRate: number;\n  /** Features to monitor */\n  readonly features: {\n    vitals: boolean;\n    memory: boolean;\n    network: boolean;\n    longTasks: boolean;\n    renders: boolean;\n  };\n  /** Budget configuration */\n  readonly budgets: {\n    enabled: boolean;\n    enforceOnViolation: boolean;\n  };\n}\n\n/**\n * Optimization configuration with flag overrides\n */\nexport interface FlaggedOptimizationConfig {\n  /** Whether optimization is active */\n  readonly active: boolean;\n  /** Prefetch configuration */\n  readonly prefetch: {\n    enabled: boolean;\n    predictive: boolean;\n    maxItems: number;\n  };\n  /** Code splitting configuration */\n  readonly codeSplitting: {\n    enabled: boolean;\n    threshold: number;\n  };\n  /** Image optimization */\n  readonly images: {\n    enabled: boolean;\n    lazy: boolean;\n    responsive: boolean;\n  };\n}\n\n// =============================================================================\n// Default Configuration\n// =============================================================================\n\n/**\n * Default performance flag configuration\n */\nexport const DEFAULT_PERFORMANCE_FLAG_CONFIG: PerformanceFlagConfig = {\n  monitoringEnabled: true,\n  vitalsEnabled: true,\n  profilingEnabled: false,\n  memoryEnabled: true,\n  networkEnabled: true,\n  budgetsEnabled: false,\n  longTasksEnabled: true,\n  prefetchEnabled: true,\n  predictiveEnabled: false,\n  codeSplittingEnabled: true,\n  rumEnabled: false,\n  syntheticEnabled: false,\n  resourceHintsEnabled: true,\n  imageOptEnabled: true,\n  bundleAnalysisEnabled: false,\n  degradationEnabled: false,\n};\n\n// =============================================================================\n// Library Integration\n// =============================================================================\n\n/**\n * Create performance flag integration\n */\nexport function createPerformanceFlagIntegration(): LibraryIntegration<PerformanceFlagConfig> {\n  return createLibraryIntegration<PerformanceFlagConfig>({\n    libraryId: 'performance',\n    defaultConfig: DEFAULT_PERFORMANCE_FLAG_CONFIG,\n    flagMappings: {\n      [PERFORMANCE_FLAG_KEYS.PERF_MONITORING_ENABLED]: 'monitoringEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_VITALS_ENABLED]: 'vitalsEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_PROFILING_ENABLED]: 'profilingEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_MEMORY_ENABLED]: 'memoryEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_NETWORK_ENABLED]: 'networkEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_BUDGETS_ENABLED]: 'budgetsEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_LONG_TASKS_ENABLED]: 'longTasksEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_PREFETCH_ENABLED]: 'prefetchEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_PREDICTIVE_ENABLED]: 'predictiveEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_CODE_SPLITTING_ENABLED]: 'codeSplittingEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_RUM_ENABLED]: 'rumEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_SYNTHETIC_ENABLED]: 'syntheticEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_RESOURCE_HINTS_ENABLED]: 'resourceHintsEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_IMAGE_OPT_ENABLED]: 'imageOptEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_BUNDLE_ANALYSIS_ENABLED]: 'bundleAnalysisEnabled',\n      [PERFORMANCE_FLAG_KEYS.PERF_DEGRADATION_ENABLED]: 'degradationEnabled',\n    },\n    onConfigChange: (config, changedFlags) => {\n      console.info('[Performance Flags] Config changed:', changedFlags, config);\n    },\n  });\n}\n\n// Initialize and register the performance integration\nconst performanceIntegration = createPerformanceFlagIntegration();\nintegrationRegistry.register(performanceIntegration);\n\n// =============================================================================\n// Performance Flag Helpers\n// =============================================================================\n\n/**\n * Performance flags helper class\n */\nclass PerformanceFlagsHelper {\n  setFlagGetter(getter: (flagKey: string) => boolean): void {\n    this.getFlag = getter;\n  }\n\n  isMonitoringEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_MONITORING_ENABLED);\n  }\n\n  isVitalsEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_VITALS_ENABLED);\n  }\n\n  isProfilingEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_PROFILING_ENABLED);\n  }\n\n  isMemoryEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_MEMORY_ENABLED);\n  }\n\n  isNetworkEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_NETWORK_ENABLED);\n  }\n\n  isBudgetsEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_BUDGETS_ENABLED);\n  }\n\n  isLongTasksEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_LONG_TASKS_ENABLED);\n  }\n\n  isPrefetchEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_PREFETCH_ENABLED);\n  }\n\n  isPredictiveEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_PREDICTIVE_ENABLED);\n  }\n\n  isCodeSplittingEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_CODE_SPLITTING_ENABLED);\n  }\n\n  isRumEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_RUM_ENABLED);\n  }\n\n  isSyntheticEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_SYNTHETIC_ENABLED);\n  }\n\n  isResourceHintsEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_RESOURCE_HINTS_ENABLED);\n  }\n\n  isImageOptEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_IMAGE_OPT_ENABLED);\n  }\n\n  isBundleAnalysisEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_BUNDLE_ANALYSIS_ENABLED);\n  }\n\n  isDegradationEnabled(): boolean {\n    return this.getFlag(PERFORMANCE_FLAG_KEYS.PERF_DEGRADATION_ENABLED);\n  }\n\n  getAllFlags(): Record<PerformanceFlagKey, boolean> {\n    return {\n      [PERFORMANCE_FLAG_KEYS.PERF_MONITORING_ENABLED]: this.isMonitoringEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_VITALS_ENABLED]: this.isVitalsEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_PROFILING_ENABLED]: this.isProfilingEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_MEMORY_ENABLED]: this.isMemoryEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_NETWORK_ENABLED]: this.isNetworkEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_BUDGETS_ENABLED]: this.isBudgetsEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_LONG_TASKS_ENABLED]: this.isLongTasksEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_PREFETCH_ENABLED]: this.isPrefetchEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_PREDICTIVE_ENABLED]: this.isPredictiveEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_CODE_SPLITTING_ENABLED]: this.isCodeSplittingEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_RUM_ENABLED]: this.isRumEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_SYNTHETIC_ENABLED]: this.isSyntheticEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_RESOURCE_HINTS_ENABLED]: this.isResourceHintsEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_IMAGE_OPT_ENABLED]: this.isImageOptEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_BUNDLE_ANALYSIS_ENABLED]: this.isBundleAnalysisEnabled(),\n      [PERFORMANCE_FLAG_KEYS.PERF_DEGRADATION_ENABLED]: this.isDegradationEnabled(),\n    };\n  }\n\n  private getFlag: (flagKey: string) => boolean = () => false;\n}\n\n/**\n * Global performance flags helper instance\n */\nexport const performanceFlags = new PerformanceFlagsHelper();\n\n// =============================================================================\n// React Hooks\n// =============================================================================\n\n/**\n * Hook to get performance flag configuration\n */\nexport function usePerformanceFlagConfig(): PerformanceFlagConfig {\n  const config = useLibraryFlags<PerformanceFlagConfig>('performance');\n  return config ?? DEFAULT_PERFORMANCE_FLAG_CONFIG;\n}\n\n/**\n * Hook to check a specific performance flag\n */\nexport function usePerformanceFlag(flagKey: PerformanceFlagKey): boolean {\n  const config = usePerformanceFlagConfig();\n\n  return useMemo(() => {\n    switch (flagKey) {\n      case PERFORMANCE_FLAG_KEYS.PERF_MONITORING_ENABLED:\n        return config.monitoringEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_VITALS_ENABLED:\n        return config.vitalsEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_PROFILING_ENABLED:\n        return config.profilingEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_MEMORY_ENABLED:\n        return config.memoryEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_NETWORK_ENABLED:\n        return config.networkEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_BUDGETS_ENABLED:\n        return config.budgetsEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_LONG_TASKS_ENABLED:\n        return config.longTasksEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_PREFETCH_ENABLED:\n        return config.prefetchEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_PREDICTIVE_ENABLED:\n        return config.predictiveEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_CODE_SPLITTING_ENABLED:\n        return config.codeSplittingEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_RUM_ENABLED:\n        return config.rumEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_SYNTHETIC_ENABLED:\n        return config.syntheticEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_RESOURCE_HINTS_ENABLED:\n        return config.resourceHintsEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_IMAGE_OPT_ENABLED:\n        return config.imageOptEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_BUNDLE_ANALYSIS_ENABLED:\n        return config.bundleAnalysisEnabled;\n      case PERFORMANCE_FLAG_KEYS.PERF_DEGRADATION_ENABLED:\n        return config.degradationEnabled;\n      default:\n        return false;\n    }\n  }, [config, flagKey]);\n}\n\n/**\n * Hook to get flagged monitoring configuration\n */\nexport function useFlaggedMonitoringConfig(options: {\n  defaultSampleRate?: number;\n} = {}): FlaggedMonitoringConfig {\n  const config = usePerformanceFlagConfig();\n  const { defaultSampleRate = 1 } = options;\n\n  return useMemo(() => ({\n    active: config.monitoringEnabled,\n    sampleRate: config.monitoringEnabled ? defaultSampleRate : 0,\n    features: {\n      vitals: config.vitalsEnabled,\n      memory: config.memoryEnabled,\n      network: config.networkEnabled,\n      longTasks: config.longTasksEnabled,\n      renders: config.profilingEnabled,\n    },\n    budgets: {\n      enabled: config.budgetsEnabled,\n      enforceOnViolation: config.degradationEnabled,\n    },\n  }), [config, defaultSampleRate]);\n}\n\n/**\n * Hook to get flagged optimization configuration\n */\nexport function useFlaggedOptimizationConfig(options: {\n  maxPrefetchItems?: number;\n  codeSplitThreshold?: number;\n} = {}): FlaggedOptimizationConfig {\n  const config = usePerformanceFlagConfig();\n  const { maxPrefetchItems = 10, codeSplitThreshold = 50000 } = options;\n\n  return useMemo(() => ({\n    active: config.prefetchEnabled || config.codeSplittingEnabled || config.imageOptEnabled,\n    prefetch: {\n      enabled: config.prefetchEnabled,\n      predictive: config.predictiveEnabled,\n      maxItems: maxPrefetchItems,\n    },\n    codeSplitting: {\n      enabled: config.codeSplittingEnabled,\n      threshold: codeSplitThreshold,\n    },\n    images: {\n      enabled: config.imageOptEnabled,\n      lazy: true,\n      responsive: true,\n    },\n  }), [config, maxPrefetchItems, codeSplitThreshold]);\n}\n\n// =============================================================================\n// Configuration Factories\n// =============================================================================\n\n/**\n * Get monitoring configuration based on flags\n */\nexport function getFlaggedMonitoringConfig(\n  getFlag: (flagKey: string) => boolean,\n  options: { defaultSampleRate?: number } = {}\n): FlaggedMonitoringConfig {\n  const { defaultSampleRate = 1 } = options;\n  const isActive = getFlag(PERFORMANCE_FLAG_KEYS.PERF_MONITORING_ENABLED);\n\n  return {\n    active: isActive,\n    sampleRate: isActive ? defaultSampleRate : 0,\n    features: {\n      vitals: getFlag(PERFORMANCE_FLAG_KEYS.PERF_VITALS_ENABLED),\n      memory: getFlag(PERFORMANCE_FLAG_KEYS.PERF_MEMORY_ENABLED),\n      network: getFlag(PERFORMANCE_FLAG_KEYS.PERF_NETWORK_ENABLED),\n      longTasks: getFlag(PERFORMANCE_FLAG_KEYS.PERF_LONG_TASKS_ENABLED),\n      renders: getFlag(PERFORMANCE_FLAG_KEYS.PERF_PROFILING_ENABLED),\n    },\n    budgets: {\n      enabled: getFlag(PERFORMANCE_FLAG_KEYS.PERF_BUDGETS_ENABLED),\n      enforceOnViolation: getFlag(PERFORMANCE_FLAG_KEYS.PERF_DEGRADATION_ENABLED),\n    },\n  };\n}\n\n/**\n * Get optimization configuration based on flags\n */\nexport function getFlaggedOptimizationConfig(\n  getFlag: (flagKey: string) => boolean,\n  options: { maxPrefetchItems?: number; codeSplitThreshold?: number } = {}\n): FlaggedOptimizationConfig {\n  const { maxPrefetchItems = 10, codeSplitThreshold = 50000 } = options;\n\n  const prefetchEnabled = getFlag(PERFORMANCE_FLAG_KEYS.PERF_PREFETCH_ENABLED);\n  const codeSplittingEnabled = getFlag(PERFORMANCE_FLAG_KEYS.PERF_CODE_SPLITTING_ENABLED);\n  const imageOptEnabled = getFlag(PERFORMANCE_FLAG_KEYS.PERF_IMAGE_OPT_ENABLED);\n\n  return {\n    active: prefetchEnabled || codeSplittingEnabled || imageOptEnabled,\n    prefetch: {\n      enabled: prefetchEnabled,\n      predictive: getFlag(PERFORMANCE_FLAG_KEYS.PERF_PREDICTIVE_ENABLED),\n      maxItems: maxPrefetchItems,\n    },\n    codeSplitting: {\n      enabled: codeSplittingEnabled,\n      threshold: codeSplitThreshold,\n    },\n    images: {\n      enabled: imageOptEnabled,\n      lazy: true,\n      responsive: true,\n    },\n  };\n}\n\n// =============================================================================\n// Performance Degradation Utilities\n// =============================================================================\n\n/**\n * Degradation level based on performance flags and budget violations\n */\nexport type DegradationLevel = 'none' | 'light' | 'moderate' | 'heavy';\n\n/**\n * Get degradation configuration based on flags\n */\nexport function getDegradationConfig(\n  getFlag: (flagKey: string) => boolean,\n  budgetViolations: number = 0\n): {\n  level: DegradationLevel;\n  disableAnimations: boolean;\n  disableImages: boolean;\n  disablePrefetch: boolean;\n  reduceQuality: boolean;\n} {\n  const degradationEnabled = getFlag(PERFORMANCE_FLAG_KEYS.PERF_DEGRADATION_ENABLED);\n\n  if (!degradationEnabled) {\n    return {\n      level: 'none',\n      disableAnimations: false,\n      disableImages: false,\n      disablePrefetch: false,\n      reduceQuality: false,\n    };\n  }\n\n  // Progressive degradation based on violations\n  if (budgetViolations >= 5) {\n    return {\n      level: 'heavy',\n      disableAnimations: true,\n      disableImages: true,\n      disablePrefetch: true,\n      reduceQuality: true,\n    };\n  } else if (budgetViolations >= 3) {\n    return {\n      level: 'moderate',\n      disableAnimations: true,\n      disableImages: false,\n      disablePrefetch: true,\n      reduceQuality: true,\n    };\n  } else if (budgetViolations >= 1) {\n    return {\n      level: 'light',\n      disableAnimations: false,\n      disableImages: false,\n      disablePrefetch: true,\n      reduceQuality: false,\n    };\n  }\n\n  return {\n    level: 'none',\n    disableAnimations: false,\n    disableImages: false,\n    disablePrefetch: false,\n    reduceQuality: false,\n  };\n}\n\n/**\n * Hook for performance degradation\n */\nexport function usePerformanceDegradation(budgetViolations: number = 0): {\n  level: DegradationLevel;\n  disableAnimations: boolean;\n  disableImages: boolean;\n  disablePrefetch: boolean;\n  reduceQuality: boolean;\n} {\n  const config = usePerformanceFlagConfig();\n\n  return useMemo(() => {\n    if (!config.degradationEnabled) {\n      return {\n        level: 'none',\n        disableAnimations: false,\n        disableImages: false,\n        disablePrefetch: false,\n        reduceQuality: false,\n      };\n    }\n\n    if (budgetViolations >= 5) {\n      return {\n        level: 'heavy',\n        disableAnimations: true,\n        disableImages: true,\n        disablePrefetch: true,\n        reduceQuality: true,\n      };\n    } else if (budgetViolations >= 3) {\n      return {\n        level: 'moderate',\n        disableAnimations: true,\n        disableImages: false,\n        disablePrefetch: true,\n        reduceQuality: true,\n      };\n    } else if (budgetViolations >= 1) {\n      return {\n        level: 'light',\n        disableAnimations: false,\n        disableImages: false,\n        disablePrefetch: true,\n        reduceQuality: false,\n      };\n    }\n\n    return {\n      level: 'none',\n      disableAnimations: false,\n      disableImages: false,\n      disablePrefetch: false,\n      reduceQuality: false,\n    };\n  }, [config.degradationEnabled, budgetViolations]);\n}\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport { performanceIntegration };\n"],"names":["PERFORMANCE_FLAG_KEYS","DEFAULT_PERFORMANCE_FLAG_CONFIG","createPerformanceFlagIntegration","createLibraryIntegration","config","changedFlags","performanceIntegration","integrationRegistry","PerformanceFlagsHelper","getter","performanceFlags","usePerformanceFlagConfig","useLibraryFlags","usePerformanceFlag","flagKey","useMemo","useFlaggedMonitoringConfig","options","defaultSampleRate","useFlaggedOptimizationConfig","maxPrefetchItems","codeSplitThreshold","getFlaggedMonitoringConfig","getFlag","isActive","getFlaggedOptimizationConfig","prefetchEnabled","codeSplittingEnabled","imageOptEnabled","getDegradationConfig","budgetViolations","usePerformanceDegradation"],"mappings":"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"}