{"version":3,"file":"debug-mode.mjs","sources":["../../../src/lib/flags/debug-mode.ts"],"sourcesContent":["/**\n * @file Debug Mode Utility\n * @description Provides debug mode checking for non-React contexts\n *\n * This utility allows checking the debug-mode feature flag in non-React\n * files like ErrorReporter, system initialization, and other services.\n *\n * The utility checks:\n * 1. Runtime flag state from the feature flag provider (if initialized)\n * 2. Default flag value from configuration\n * 3. Falls back to NODE_ENV check\n */\n\nimport { getDefaultFlagValue } from '@/config/featureFlagConfig';\nimport { flagKeys } from './flag-keys';\n\n/**\n * Internal state to track feature flag provider initialization\n * This is set when the FeatureFlagProvider mounts\n */\nlet flagProviderInitialized = false;\nlet runtimeFlags: Record<string, boolean> = {};\n\n/**\n * Called by FeatureFlagProvider when it initializes\n * @internal\n */\nexport function _setFlagProviderInitialized(flags: Record<string, boolean>): void {\n  flagProviderInitialized = true;\n  runtimeFlags = flags;\n}\n\n/**\n * Called by FeatureFlagProvider when flags are updated\n * @internal\n */\nexport function _updateRuntimeFlags(flags: Record<string, boolean>): void {\n  runtimeFlags = flags;\n}\n\n/**\n * Called by FeatureFlagProvider when it unmounts (for testing)\n * @internal\n */\nexport function _resetFlagProvider(): void {\n  flagProviderInitialized = false;\n  runtimeFlags = {};\n}\n\n/**\n * Check if debug mode is enabled.\n *\n * This function can be safely called from anywhere, including:\n * - Service initialization\n * - Error reporters\n * - Store configuration\n * - Utility functions\n *\n * Resolution order:\n * 1. Runtime flags (if provider is initialized)\n * 2. Default flag configuration value\n * 3. NODE_ENV === 'development' (ultimate fallback)\n *\n * @returns True if debug mode is enabled\n *\n * @example\n * ```typescript\n * import { isDebugModeEnabled } from '@/lib/flags/debug-mode';\n *\n * if (isDebugModeEnabled()) {\n *   console.debug('[Debug]', detailedInfo);\n * }\n * ```\n */\nexport function isDebugModeEnabled(): boolean {\n  // First, check runtime flags if provider is initialized\n  if (flagProviderInitialized && flagKeys.DEBUG_MODE in runtimeFlags) {\n    return runtimeFlags[flagKeys.DEBUG_MODE] ?? false;\n  }\n\n  // Fall back to default flag configuration\n  const defaultValue = getDefaultFlagValue(flagKeys.DEBUG_MODE);\n\n  // If no default is set, use environment check\n  // This ensures debug mode works during bootstrap before providers mount\n  if (!defaultValue) {\n    return process.env['NODE_ENV'] === 'development';\n  }\n\n  return defaultValue;\n}\n\n/**\n * Check if a specific feature flag is enabled (non-React utility).\n *\n * For most cases, prefer using the `useFeatureFlag` hook in React components.\n * This utility is for service-level code that runs outside React.\n *\n * @param flagKey - The feature flag key to check\n * @returns True if the flag is enabled\n *\n * @example\n * ```typescript\n * import { isFlagEnabled } from '@/lib/flags/debug-mode';\n *\n * if (isFlagEnabled('analytics-v2')) {\n *   sendToNewAnalytics(event);\n * }\n * ```\n */\nexport function isFlagEnabled(flagKey: string): boolean {\n  // First, check runtime flags if provider is initialized\n  if (flagProviderInitialized && flagKey in runtimeFlags) {\n    return runtimeFlags[flagKey] ?? false;\n  }\n\n  // Fall back to default flag configuration\n  return getDefaultFlagValue(flagKey);\n}\n\n/**\n * Check if development mode (based on NODE_ENV only).\n *\n * Use this for build-time decisions that shouldn't be controlled by flags.\n * For runtime debug toggling, use `isDebugModeEnabled()` instead.\n *\n * @returns True if NODE_ENV is 'development'\n */\nexport function isDevelopmentEnv(): boolean {\n  return process.env['NODE_ENV'] === 'development';\n}\n"],"names":["flagProviderInitialized","runtimeFlags","_setFlagProviderInitialized","flags","_updateRuntimeFlags","_resetFlagProvider","isDebugModeEnabled","flagKeys","defaultValue","getDefaultFlagValue","isFlagEnabled","flagKey","isDevelopmentEnv"],"mappings":";;AAoBA,IAAIA,IAA0B,IAC1BC,IAAwC,CAAA;AAMrC,SAASC,EAA4BC,GAAsC;AAChF,EAAAH,IAA0B,IAC1BC,IAAeE;AACjB;AAMO,SAASC,EAAoBD,GAAsC;AACxE,EAAAF,IAAeE;AACjB;AAMO,SAASE,IAA2B;AACzC,EAAAL,IAA0B,IAC1BC,IAAe,CAAA;AACjB;AA2BO,SAASK,IAA8B;AAE5C,MAAIN,KAA2BO,EAAS,cAAcN;AACpD,WAAOA,EAAaM,EAAS,UAAU,KAAK;AAI9C,QAAMC,IAAeC,EAAoBF,EAAS,UAAU;AAI5D,SAAKC,KACI,QAAQ,IAAI,aAAgB;AAIvC;AAoBO,SAASE,EAAcC,GAA0B;AAEtD,SAAIX,KAA2BW,KAAWV,IACjCA,EAAaU,CAAO,KAAK,KAI3BF,EAAoBE,CAAO;AACpC;AAUO,SAASC,IAA4B;AAC1C,SAAO,QAAQ,IAAI,aAAgB;AACrC;"}