Add feature flags configuration for Pokedex Online

This commit is contained in:
2026-01-28 22:53:33 +00:00
parent 9c1d836e4f
commit bc48762925

View File

@@ -0,0 +1,132 @@
/**
* Feature Flags Configuration
*
* Defines all feature flags with metadata.
* Uses build-time obfuscation for production security.
*
* Pattern:
* - Development: Flags easily toggled via Developer Tools (Ctrl+Shift+D)
* - Production: Flags obfuscated and require permission-based backend query
* - All flags checked at runtime via useFeatureFlags composable
*
* Usage in components:
* ```javascript
* const { isEnabled } = useFeatureFlags();
* if (isEnabled('experimental-search')) { ... }
* ```
*/
export const FEATURE_FLAGS = {
// Gamemaster Explorer Features
EXPERIMENTAL_SEARCH: {
name: 'experimental-search',
description: 'Enable experimental search with regex support',
enabled: false,
requiredPermission: null,
tags: ['gamemaster', 'search']
},
GAMEMASTER_DIFF_VIEWER: {
name: 'gamemaster-diff-viewer',
description: 'Enable diff viewer for gamemaster file comparisons',
enabled: false,
requiredPermission: 'gamemaster-advanced',
tags: ['gamemaster', 'ui']
},
GAMEMASTER_BOOKMARKS: {
name: 'gamemaster-bookmarks',
description: 'Enable bookmarking feature for favorite gamemasters',
enabled: false,
requiredPermission: null,
tags: ['gamemaster', 'storage']
},
// Challonge Test Features
CHALLONGE_CACHED_TOURNAMENTS: {
name: 'challonge-cached-tournaments',
description: 'Cache tournament data for faster loading',
enabled: false,
requiredPermission: 'challonge-advanced',
tags: ['challonge', 'performance']
},
CHALLONGE_EXPORT_CSV: {
name: 'challonge-export-csv',
description: 'Allow exporting tournament data to CSV',
enabled: false,
requiredPermission: null,
tags: ['challonge', 'export']
},
// Developer/Admin Features
DEVELOPER_TOOLS: {
name: 'developer-tools',
description: 'Show developer tools panel (Ctrl+Shift+D)',
enabled: process.env.NODE_ENV === 'development',
requiredPermission: null,
tags: ['developer']
},
ADMIN_PANEL: {
name: 'admin-panel',
description: 'Show admin panel with system information',
enabled: false,
requiredPermission: 'admin',
tags: ['admin', 'maintenance']
},
// Performance Features
ENABLE_CACHING: {
name: 'enable-caching',
description: 'Enable client-side caching for API responses',
enabled: true,
requiredPermission: null,
tags: ['performance']
},
// UI Features
DARK_MODE: {
name: 'dark-mode',
description: 'Enable dark mode theme',
enabled: false,
requiredPermission: null,
tags: ['ui', 'theme']
}
};
/**
* Get all feature flags
* @returns {Object} All feature flags
*/
export function getAllFlags() {
return FEATURE_FLAGS;
}
/**
* Get flag by name
* @param {string} name - Flag name
* @returns {Object|null} Flag object or null if not found
*/
export function getFlag(name) {
return Object.values(FEATURE_FLAGS).find(flag => flag.name === name) || null;
}
/**
* Get all flags for a specific tag
* @param {string} tag - Tag name
* @returns {Object[]} Array of flags with the tag
*/
export function getFlagsByTag(tag) {
return Object.values(FEATURE_FLAGS).filter(flag => flag.tags.includes(tag));
}
/**
* Check if flag requires specific permission
* @param {string} name - Flag name
* @returns {string|null} Required permission or null if no permission required
*/
export function getFlagPermission(name) {
const flag = getFlag(name);
return flag ? flag.requiredPermission : null;
}