/** * LIMITATION: * For NPM setup, this feature flag singleton is shared between RUM and Logs product. * This means that an experimental flag set on the RUM product will be set on the Logs product. * So keep in mind that in certain configurations, your experimental feature flag may affect other products. */ import { includes } from '../../tools/utils' import { display } from '../../tools/display' let enabledExperimentalFeatures: Set | undefined export function updateExperimentalFeatures(enabledFeatures: string[] | undefined): void { // Safely handle external data if (!Array.isArray(enabledFeatures)) { return } if (!enabledExperimentalFeatures) { enabledExperimentalFeatures = new Set(enabledFeatures) } enabledFeatures .filter((flag) => typeof flag === 'string') .forEach((flag: string) => { if (includes(flag, '-')) { display.warn(`please use snake case for '${flag}'`) } enabledExperimentalFeatures!.add(flag) }) } export function isExperimentalFeatureEnabled(featureName: string): boolean { return !!enabledExperimentalFeatures && enabledExperimentalFeatures.has(featureName) } export function resetExperimentalFeatures(): void { enabledExperimentalFeatures = new Set() } export function getExperimentalFeatures(): Set { return enabledExperimentalFeatures || new Set() }