import { ParameterConfig, EmptyParameterConfiguration, ParameterConfiguration, } from './ParameterConfig'; import type { ReactNativeFeatureFlagDecision } from '../client'; import type { DecisionReason } from './Decision'; /** * An object that contains the decided flag and the reason for the feature flag decision. */ export class FeatureFlagDecision implements ParameterConfig { isOn: boolean; reason: DecisionReason; config: ParameterConfig; constructor(isOn: boolean, reason: DecisionReason, config: ParameterConfig) { this.isOn = isOn; this.reason = reason; this.config = config; } static of( isOn: boolean, reason: DecisionReason, config: ParameterConfig = new EmptyParameterConfiguration() ): FeatureFlagDecision { return new FeatureFlagDecision(isOn, reason, config); } static withReactNativeFeatureFlagDecision( decision: ReactNativeFeatureFlagDecision ): FeatureFlagDecision { return new FeatureFlagDecision( decision.isOn, decision.reason, new ParameterConfiguration(decision.parameters) ); } static on( reason: DecisionReason, config: ParameterConfig = new EmptyParameterConfiguration() ): FeatureFlagDecision { return new FeatureFlagDecision(true, reason, config); } static off( reason: DecisionReason, config: ParameterConfig = new EmptyParameterConfiguration() ): FeatureFlagDecision { return new FeatureFlagDecision(false, reason, config); } getSync( key: string, defaultValue: string | number | boolean ): string | number | boolean { return this.config.getSync(key, defaultValue); } }