import { Variant, VariantId, VariantValueType, JsonValue, VariantAllocation } from './types'; /** * Options for creating a variant. */ export interface CreateVariantOptions { /** Variant value */ readonly value: T; /** Human-readable name */ readonly name?: string; /** Description */ readonly description?: string; /** Whether this is the control variant */ readonly isControl?: boolean; /** Additional payload data */ readonly payload?: Record; /** File/config attachments */ readonly attachments?: string[]; } /** * Variant with weight for traffic allocation. */ export interface WeightedVariant extends Variant { /** Weight for traffic allocation (0-100) */ readonly weight: number; } /** * Variant statistics for experiments. */ export interface VariantStats { /** Variant ID */ readonly variantId: VariantId; /** Number of users assigned */ readonly userCount: number; /** Number of conversions */ readonly conversions: number; /** Conversion rate */ readonly conversionRate: number; /** Average value (for numeric metrics) */ readonly averageValue?: number; /** Standard deviation */ readonly standardDeviation?: number; /** Confidence interval */ readonly confidenceInterval?: [number, number]; } /** * Variant comparison result. */ export interface VariantComparison { /** Control variant stats */ readonly control: VariantStats; /** Treatment variant stats */ readonly treatment: VariantStats; /** Relative lift (treatment vs control) */ readonly relativeLift: number; /** Statistical significance (p-value) */ readonly pValue: number; /** Whether result is statistically significant */ readonly isSignificant: boolean; /** Confidence level used */ readonly confidenceLevel: number; } /** * Manager for creating and working with flag variants. */ export declare class VariantManager { /** * Create a new variant. */ createVariant(id: VariantId, options: CreateVariantOptions): Variant; /** * Create a boolean variant. */ createBooleanVariant(id: VariantId, value: boolean, options?: Omit, 'value'>): Variant; /** * Create a string variant. */ createStringVariant(id: VariantId, value: string, options?: Omit, 'value'>): Variant; /** * Create a number variant. */ createNumberVariant(id: VariantId, value: number, options?: Omit, 'value'>): Variant; /** * Create a JSON variant. */ createJsonVariant(id: VariantId, value: T, options?: Omit, 'value'>): Variant; /** * Infer the value type from a value. */ inferValueType(value: JsonValue): VariantValueType; /** * Validate a variant value against its declared type. */ validateVariant(variant: Variant): boolean; /** * Coerce a value to the expected type. */ coerceValue(value: unknown, targetType: VariantValueType): T | null; /** * Select a variant based on a bucket value and allocations. */ selectVariant(variants: readonly Variant[], bucket: number, allocations?: readonly VariantAllocation[]): Variant | null; /** * Get the control variant from a list. */ getControlVariant(variants: readonly Variant[]): Variant | null; /** * Get all treatment (non-control) variants. */ getTreatmentVariants(variants: readonly Variant[]): Variant[]; /** * Create equal allocations for variants. */ createEqualAllocations(variants: readonly Variant[]): VariantAllocation[]; /** * Create weighted allocations with control getting most traffic. */ createControlHeavyAllocations(variants: readonly Variant[], controlPercentage?: number): VariantAllocation[]; } /** * Fluent builder for creating variants. */ export declare class VariantBuilder { private variant; /** * Set the variant ID. */ id(id: VariantId): this; /** * Set the variant name. */ name(name: string): this; /** * Set the variant description. */ description(description: string): this; /** * Set the variant value. */ value(value: T): this; /** * Mark as control variant. */ asControl(): this; /** * Add payload data. */ payload(data: Record): this; /** * Add attachments. */ attachments(...files: string[]): this; /** * Build the variant. */ build(): Variant; } /** * Create a new variant builder. */ export declare function createVariant(): VariantBuilder; /** * Common variant patterns. */ export declare const VariantSets: { /** * Simple on/off boolean variants. */ boolean(): [Variant, Variant]; /** * A/B test variants (control + treatment). */ abTest(controlValue: T, treatmentValue: T): [Variant, Variant]; /** * A/B/C test variants. */ abcTest(controlValue: T, treatmentAValue: T, treatmentBValue: T): [Variant, Variant, Variant]; /** * Multi-value variants from a map. */ fromMap(values: Record, controlId?: string): Variant[]; /** * Color variants for UI experiments. */ colors(colors: Record, controlColor?: string): Variant[]; /** * Size variants (e.g., for button sizes). */ sizes(): Variant[]; }; /** * Calculate basic statistics for a variant. */ export declare function calculateVariantStats(variantId: VariantId, values: number[], conversions: number): VariantStats; /** * Compare two variants using a z-test. */ export declare function compareVariants(control: VariantStats, treatment: VariantStats, confidenceLevel?: number): VariantComparison; /** * Get the singleton variant manager instance. */ export declare function getVariantManager(): VariantManager;