import Workspace from "../../workspace/Workspace"; import { Experiment, HackleUser, Properties } from "../../model/model"; import UserEvent from "../../event/UserEvent"; export default interface Evaluator { evaluate(request: EvaluatorRequest, context: EvaluatorContext): EvaluatorEvaluation; } export declare type EvaluatorType = "EXPERIMENT" | "REMOTE_CONFIG" | "IN_APP_MESSAGE" | "SPLIT_URL"; export declare class EvaluatorKey { readonly type: EvaluatorType; readonly id: number | string; constructor(type: EvaluatorType, id: number | string); isEquals(other: EvaluatorKey): boolean; } export interface EvaluatorRequest { readonly key: EvaluatorKey; readonly workspace: Workspace; readonly user: HackleUser; toString(): string; } export interface EventEvaluatorRequest extends EvaluatorRequest { readonly event: UserEvent; } export interface EvaluatorEvaluation { readonly reason: string; readonly targetEvaluations: EvaluatorEvaluation[]; } declare type Constructor = abstract new (...args: any[]) => T; export declare class EvaluatorContext { private readonly _stack; private readonly _targetEvaluations; private readonly _properties; private readonly map; private constructor(); static create(): EvaluatorContext; get stack(): EvaluatorRequest[]; get targetEvaluations(): EvaluatorEvaluation[]; get properties(): Properties; contains(request: EvaluatorRequest): boolean; addRequest(request: EvaluatorRequest): void; removeRequest(request: EvaluatorRequest): void; getEvaluation(experiment: Experiment): EvaluatorEvaluation | undefined; addEvaluation(evaluation: EvaluatorEvaluation): void; setProperty(key: string, value: any): void; get = Constructor>(key: T): InstanceType | null; set = Constructor>(key: T, value: InstanceType): void; } export {};