deepsource-mcp-server
Version:
Model Context Protocol server for DeepSource
97 lines • 2.58 kB
JavaScript
/**
* @fileoverview Feature flags configuration for the DeepSource MCP server
*
* This module provides a centralized system for managing feature flags,
* allowing experimental and optional features to be toggled via environment
* variables without code changes.
*
* @packageDocumentation
*/
/**
* Default feature flag values used when environment variables are not set
*/
const DEFAULT_FEATURE_FLAGS = {
toolDiscovery: false,
enhancedLogging: false,
metrics: false,
cache: false,
};
/**
* Get current feature flags from environment variables
*
* @returns Current feature flag configuration
*
* @example
* ```typescript
* const features = getFeatureFlags();
* if (features.toolDiscovery) {
* await discoverTools();
* }
* ```
*/
export function getFeatureFlags() {
return {
toolDiscovery: process.env.FEATURE_TOOL_DISCOVERY === 'true',
enhancedLogging: process.env.FEATURE_ENHANCED_LOGGING === 'true',
metrics: process.env.FEATURE_METRICS === 'true',
cache: process.env.FEATURE_CACHE === 'true',
};
}
/**
* Check if a specific feature is enabled
*
* @param feature - The feature to check
* @returns Whether the feature is enabled
*
* @example
* ```typescript
* if (isFeatureEnabled('toolDiscovery')) {
* // Feature-specific code
* }
* ```
*/
export function isFeatureEnabled(feature) {
const flags = getFeatureFlags();
return flags[feature];
}
/**
* Get all enabled features as an array
*
* @returns Array of enabled feature names
*
* @example
* ```typescript
* const enabled = getEnabledFeatures();
* console.log('Enabled features:', enabled);
* // Output: ['toolDiscovery', 'metrics']
* ```
*/
export function getEnabledFeatures() {
const flags = getFeatureFlags();
return Object.keys(flags).filter((key) => flags[key]);
}
/**
* Get feature flags with defaults applied
*
* @returns Feature flags with defaults for unset values
*/
export function getFeaturesWithDefaults() {
const envFlags = getFeatureFlags();
return { ...DEFAULT_FEATURE_FLAGS, ...envFlags };
}
/**
* Log current feature flag configuration (for debugging)
*
* @param logger - Optional logger function (defaults to console.log)
*/
export function logFeatureFlags(logger = console.log // eslint-disable-line no-console
) {
const flags = getFeatureFlags();
const enabled = getEnabledFeatures();
logger('Feature flags configuration:', {
flags,
enabledCount: enabled.length,
enabledFeatures: enabled,
});
}
//# sourceMappingURL=features.js.map