configcat-common
Version:
ConfigCat is a configuration as a service that lets you manage your features and configurations without actually deploying new code.
97 lines • 5.26 kB
TypeScript
import type { LoggerWrapper } from "./ConfigCatLogger";
import { EvaluateLogBuilder } from "./EvaluateLogBuilder";
import type { IPercentageOption, ITargetingRule, PercentageOption, ProjectConfig, Setting, SettingValue, SettingValueContainer, TargetingRule, VariationIdValue } from "./ProjectConfig";
import type { User } from "./User";
export declare class EvaluateContext {
readonly key: string;
readonly setting: Setting;
readonly user: User | undefined;
readonly settings: Readonly<{
[name: string]: Setting;
}>;
private $visitedFlags?;
get visitedFlags(): string[];
isMissingUserObjectLogged?: boolean;
isMissingUserObjectAttributeLogged?: boolean;
logBuilder?: EvaluateLogBuilder;
constructor(key: string, setting: Setting, user: User | undefined, settings: Readonly<{
[name: string]: Setting;
}>);
static forPrerequisiteFlag(key: string, setting: Setting, dependentFlagContext: EvaluateContext): EvaluateContext;
}
export interface IEvaluateResult {
selectedValue: SettingValueContainer;
matchedTargetingRule?: TargetingRule;
matchedPercentageOption?: PercentageOption;
}
export interface IRolloutEvaluator {
evaluate(defaultValue: SettingValue, context: EvaluateContext): IEvaluateResult;
}
export declare class RolloutEvaluator implements IRolloutEvaluator {
private readonly logger;
constructor(logger: LoggerWrapper);
evaluate(defaultValue: SettingValue, context: EvaluateContext): IEvaluateResult;
private evaluateSetting;
private evaluateTargetingRules;
private evaluatePercentageOptions;
private evaluateConditions;
private evaluateUserCondition;
private evaluateTextEquals;
private evaluateSensitiveTextEquals;
private evaluateTextIsOneOf;
private evaluateSensitiveTextIsOneOf;
private evaluateTextSliceEqualsAnyOf;
private evaluateSensitiveTextSliceEqualsAnyOf;
private evaluateTextContainsAnyOf;
private evaluateSemVerIsOneOf;
private evaluateSemVerRelation;
private evaluateNumberRelation;
private evaluateDateTimeRelation;
private evaluateArrayContainsAnyOf;
private evaluateSensitiveArrayContainsAnyOf;
private evaluatePrerequisiteFlagCondition;
private evaluateSegmentCondition;
}
export declare type SettingTypeOf<T> = T extends boolean ? boolean : T extends number ? number : T extends string ? string : T extends null ? boolean | number | string | null : T extends undefined ? boolean | number | string | undefined : any;
/** The evaluated value and additional information about the evaluation of a feature flag or setting. */
export interface IEvaluationDetails<TValue extends SettingValue = SettingValue> {
/** Key of the feature flag or setting. */
key: string;
/** Evaluated value of the feature or setting flag. */
value: TValue;
/** Variation ID of the feature or setting flag (if available). */
variationId?: VariationIdValue;
/** Time of last successful config download (if there has been a successful download already). */
fetchTime?: Date;
/** The User object used for the evaluation (if available). */
user?: User;
/**
* Indicates whether the default value passed to the setting evaluation methods like `IConfigCatClient.getValueAsync`, `IConfigCatClient.getValueDetailsAsync`, etc.
* is used as the result of the evaluation.
*/
isDefaultValue: boolean;
/** Error message in case evaluation failed. */
errorMessage?: string;
/** The exception object related to the error in case evaluation failed (if any). */
errorException?: any;
/** The targeting rule (if any) that matched during the evaluation and was used to return the evaluated value. */
matchedTargetingRule?: ITargetingRule;
/** The percentage option (if any) that was used to select the evaluated value. */
matchedPercentageOption?: IPercentageOption;
}
export declare function evaluationDetailsFromDefaultValue<T extends SettingValue>(key: string, defaultValue: T, fetchTime?: Date, user?: User, errorMessage?: string, errorException?: any): IEvaluationDetails<SettingTypeOf<T>>;
export declare function evaluate<T extends SettingValue>(evaluator: IRolloutEvaluator, settings: Readonly<{
[name: string]: Setting;
}> | null, key: string, defaultValue: T, user: User | undefined, remoteConfig: ProjectConfig | null, logger: LoggerWrapper): IEvaluationDetails<SettingTypeOf<T>>;
export declare function evaluateAll(evaluator: IRolloutEvaluator, settings: Readonly<{
[name: string]: Setting;
}> | null, user: User | undefined, remoteConfig: ProjectConfig | null, logger: LoggerWrapper, defaultReturnValue: string): [IEvaluationDetails[], any[] | undefined];
export declare function checkSettingsAvailable(settings: Readonly<{
[name: string]: Setting;
}> | null, logger: LoggerWrapper, defaultReturnValue: string): settings is Readonly<{
[name: string]: Setting;
}>;
export declare function isAllowedValue(value: unknown): value is NonNullable<SettingValue>;
export declare function handleInvalidReturnValue(value: unknown): never;
export declare function getTimestampAsDate(projectConfig: ProjectConfig | null): Date | undefined;
//# sourceMappingURL=RolloutEvaluator.d.ts.map