{"version":3,"file":"featureFlagConfig.mjs","sources":["../../src/config/featureFlagConfig.ts"],"sourcesContent":["import { flagKeys, type FlagCategory } from '@/lib/flags/flag-keys';\n\n/**\n * Global default values & source keys for feature flags.\n *\n * @see /src/lib/flags/flag-keys.ts for flag key definitions\n * @see /src/lib/docs/FEATURE-FLAGS.md for usage documentation\n */\n\nexport interface FeatureFlagDefinition {\n  /** The flag key string (e.g., 'dark-mode') */\n  key: string;\n  /** Default value when flag is not set */\n  defaultValue: boolean;\n  /** Human-readable description of what this flag controls */\n  description: string;\n  /** Category for organizational grouping */\n  category: FlagCategory;\n  /** If true, this flag is still in development */\n  experimental?: boolean;\n  /** Minimum user role required to see this feature even when enabled */\n  minRole?: string;\n  /** Dependencies on other flags (all must be enabled) */\n  dependencies?: string[];\n}\n\n/**\n * Central feature flag configuration.\n * This is the source of truth for all feature flags in the application.\n *\n * ## Categories\n * - **UI**: Visual features (dark-mode, new-dashboard)\n * - **AUTH**: Authentication features (mfa, email verification, social login)\n * - **DATA**: Data features (real-time, analytics)\n * - **REPORTS**: Report features (export, reports enabled)\n * - **SEARCH**: Search features (advanced filters, advanced search)\n * - **ADMIN**: Admin features (debug mode, maintenance mode)\n * - **UX**: User experience (announcements, onboarding, shortcuts)\n * - **BETA**: Experimental features\n */\nexport const featureFlagConfig: Record<keyof typeof flagKeys, FeatureFlagDefinition> = {\n  // ============================================\n  // UI Category\n  // ============================================\n  DARK_MODE: {\n    key: flagKeys.DARK_MODE,\n    defaultValue: true,\n    description: 'Enable dark mode toggle in theme settings',\n    category: 'UI',\n  },\n  NEW_DASHBOARD: {\n    key: flagKeys.NEW_DASHBOARD,\n    defaultValue: false,\n    description: 'Enable the redesigned dashboard experience',\n    category: 'UI',\n    experimental: true,\n  },\n\n  // ============================================\n  // AUTH Category\n  // ============================================\n  MFA_ENABLED: {\n    key: flagKeys.MFA_ENABLED,\n    defaultValue: false,\n    description: 'Enable multi-factor authentication (TOTP, SMS, etc.)',\n    category: 'AUTH',\n  },\n  EMAIL_VERIFICATION: {\n    key: flagKeys.EMAIL_VERIFICATION,\n    defaultValue: true,\n    description: 'Enable email verification flow for new accounts',\n    category: 'AUTH',\n  },\n  SOCIAL_LOGIN: {\n    key: flagKeys.SOCIAL_LOGIN,\n    defaultValue: false,\n    description: 'Enable social login providers (Google, GitHub, etc.)',\n    category: 'AUTH',\n  },\n  USER_PROFILE_EDITING: {\n    key: flagKeys.USER_PROFILE_EDITING,\n    defaultValue: true,\n    description: 'Enable user profile editing capabilities',\n    category: 'AUTH',\n  },\n  ADMIN_PANEL: {\n    key: flagKeys.ADMIN_PANEL,\n    defaultValue: true,\n    description: 'Enable admin panel access for authorized users',\n    category: 'AUTH',\n    minRole: 'admin',\n  },\n\n  // ============================================\n  // DATA Category\n  // ============================================\n  REAL_TIME_UPDATES: {\n    key: flagKeys.REAL_TIME_UPDATES,\n    defaultValue: true,\n    description: 'Enable real-time data updates via WebSocket/SSE',\n    category: 'DATA',\n  },\n  ANALYTICS_V2: {\n    key: flagKeys.ANALYTICS_V2,\n    defaultValue: false,\n    description: 'Enable v2 analytics tracking with enhanced metrics',\n    category: 'DATA',\n    experimental: true,\n  },\n  API_RATE_LIMIT_DISPLAY: {\n    key: flagKeys.API_RATE_LIMIT_DISPLAY,\n    defaultValue: false,\n    description: 'Display API rate limit information in the UI',\n    category: 'DATA',\n  },\n\n  // ============================================\n  // REPORTS Category\n  // ============================================\n  EXPORT_REPORTS: {\n    key: flagKeys.EXPORT_REPORTS,\n    defaultValue: true,\n    description: 'Enable report export functionality (PDF, CSV, Excel)',\n    category: 'REPORTS',\n  },\n  REPORTS_ENABLED: {\n    key: flagKeys.REPORTS_ENABLED,\n    defaultValue: true,\n    description: 'Enable the reports feature overall',\n    category: 'REPORTS',\n  },\n\n  // ============================================\n  // SEARCH Category\n  // ============================================\n  ADVANCED_FILTERS: {\n    key: flagKeys.ADVANCED_FILTERS,\n    defaultValue: false,\n    description: 'Enable advanced filtering options in lists',\n    category: 'SEARCH',\n    experimental: true,\n  },\n  ADVANCED_SEARCH: {\n    key: flagKeys.ADVANCED_SEARCH,\n    defaultValue: false,\n    description: 'Enable advanced search with boolean operators and filters',\n    category: 'SEARCH',\n    experimental: true,\n  },\n\n  // ============================================\n  // ADMIN Category\n  // ============================================\n  DEBUG_MODE: {\n    key: flagKeys.DEBUG_MODE,\n    defaultValue: false,\n    description: 'Enable debug mode toggle for developers',\n    category: 'ADMIN',\n    minRole: 'admin',\n  },\n  MAINTENANCE_MODE: {\n    key: flagKeys.MAINTENANCE_MODE,\n    defaultValue: false,\n    description: 'Display maintenance mode banner to users',\n    category: 'ADMIN',\n  },\n\n  // ============================================\n  // UX Category\n  // ============================================\n  FEATURE_ANNOUNCEMENTS: {\n    key: flagKeys.FEATURE_ANNOUNCEMENTS,\n    defaultValue: true,\n    description: 'Display feature announcement banners for new features',\n    category: 'UX',\n  },\n  ONBOARDING_TOUR: {\n    key: flagKeys.ONBOARDING_TOUR,\n    defaultValue: true,\n    description: 'Enable onboarding tour for new users',\n    category: 'UX',\n  },\n  KEYBOARD_SHORTCUTS: {\n    key: flagKeys.KEYBOARD_SHORTCUTS,\n    defaultValue: true,\n    description: 'Enable keyboard shortcuts throughout the application',\n    category: 'UX',\n  },\n\n  // ============================================\n  // BETA Category\n  // ============================================\n  BETA_FEATURES: {\n    key: flagKeys.BETA_FEATURES,\n    defaultValue: false,\n    description: 'Enable access to beta/preview features',\n    category: 'BETA',\n    minRole: 'admin',\n  },\n};\n\n/**\n * Get the default value for a feature flag\n */\nexport function getDefaultFlagValue(flagKey: string): boolean {\n  const flag = Object.values(featureFlagConfig).find((f) => f.key === flagKey);\n  return flag?.defaultValue ?? false;\n}\n\n/**\n * Get all feature flags as a map of key -> default value\n */\nexport function getDefaultFlags(): Record<string, boolean> {\n  return Object.values(featureFlagConfig).reduce(\n    (acc, flag) => {\n      acc[flag.key] = flag.defaultValue;\n      return acc;\n    },\n    {} as Record<string, boolean>\n  );\n}\n\n/**\n * Get feature flags by category\n */\nexport function getFlagsByCategory(category: FlagCategory): FeatureFlagDefinition[] {\n  return Object.values(featureFlagConfig).filter((flag) => flag.category === category);\n}\n\n/**\n * Get experimental feature flags\n */\nexport function getExperimentalFlags(): FeatureFlagDefinition[] {\n  return Object.values(featureFlagConfig).filter((flag) => flag.experimental === true);\n}\n\n/**\n * Get flags that require a specific role\n */\nexport function getFlagsRequiringRole(role: string): FeatureFlagDefinition[] {\n  return Object.values(featureFlagConfig).filter((flag) => flag.minRole === role);\n}\n\n/**\n * Get all flag definitions as an array\n */\nexport function getAllFlagDefinitions(): FeatureFlagDefinition[] {\n  return Object.values(featureFlagConfig);\n}\n\n/**\n * Check if a flag exists in the configuration\n */\nexport function isFlagDefined(flagKey: string): boolean {\n  return Object.values(featureFlagConfig).some((flag) => flag.key === flagKey);\n}\n\n/**\n * Get flag definition by key\n */\nexport function getFlagDefinition(flagKey: string): FeatureFlagDefinition | undefined {\n  return Object.values(featureFlagConfig).find((flag) => flag.key === flagKey);\n}\n"],"names":["featureFlagConfig","flagKeys","getDefaultFlagValue","flagKey","f","getDefaultFlags","acc","flag"],"mappings":"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"}