hypertune
Version:
[Hypertune](https://www.hypertune.com/) is the most flexible platform for feature flags, A/B testing, analytics and app configuration. Built with full end-to-end type-safety, Git-style version control and local, synchronous, in-memory flag evaluation. Opt
68 lines • 3.44 kB
TypeScript
import { InitData, Expression, Query, Value, ObjectValueWithVariables, UpdateListener, DehydratedState, DeepPartial, InitDataProvider, ObjectValue, InitQuery, FieldQuery, Logs } from "../shared";
import Logger from "./Logger";
import LRUCache from "../shared/helpers/LRUCache";
/** @internal: Not part of the Hypertune public API */
export default class Context {
protected readonly initDataProvider: InitDataProvider | null;
protected readonly initDataRefreshIntervalMs: number;
protected readonly shouldSkipInitDataUpdateOnRefresh: boolean;
protected readonly query: Query<ObjectValueWithVariables> | null;
protected readonly initQuery: InitQuery;
protected variableValues: ObjectValue;
protected readonly updateListeners: Map<UpdateListener, boolean>;
protected shouldClose: boolean;
protected updateTimeout: NodeJS.Timeout | null;
readonly logger: Logger;
initData: InitData | null;
lastInitDataRefreshTime: number | null;
readonly getFieldCache: LRUCache<Expression> | null;
readonly getItemsCache: LRUCache<Expression[]> | null;
readonly evaluateCache: LRUCache<{
value: Value;
logs: Logs;
path: string;
args: {
[path: string]: ObjectValue;
};
shouldLogEvaluation: boolean;
}> | null;
override: DeepPartial<ObjectValue> | null;
constructor({ traceId, initData, lastInitDataRefreshTime, initDataProvider, initDataRefreshIntervalMs, shouldRefreshInitData, shouldRefreshInitDataOnCreate, shouldSkipInitDataUpdateOnRefresh, query, initQuery, variableValues, logger, cacheSize, override, }: {
traceId: string;
initData: InitData | null;
lastInitDataRefreshTime: number | null;
initDataProvider: InitDataProvider | null;
initDataRefreshIntervalMs: number;
shouldRefreshInitData: boolean;
shouldRefreshInitDataOnCreate: boolean;
shouldSkipInitDataUpdateOnRefresh: boolean;
query: Query<ObjectValueWithVariables> | null;
initQuery: InitQuery;
variableValues: ObjectValue;
logger: Logger;
cacheSize: number;
override: object | null;
});
private updateInitData;
initIfNeeded(traceId: string, retries: number): Promise<void>;
private initFromDataProvider;
private getHashData;
private getInitData;
private initAndStartIntervals;
isReady(): boolean;
close(traceId: string): Promise<void>;
getStateHash(): string;
addUpdateListener(listener: UpdateListener): void;
removeUpdateListener(listener: UpdateListener): void;
setOverride<TOverride extends ObjectValue>(traceId: string, override: DeepPartial<TOverride> | null): void;
private updateOverride;
dehydrate<TOverride extends ObjectValue, TVariableValues extends ObjectValue>(query?: Query<ObjectValueWithVariables>, variableValues?: TVariableValues): DehydratedState<TOverride, TVariableValues> | null;
hydrate<TOverride extends ObjectValue, TVariableValues extends ObjectValue>(traceId: string, dehydratedState: DehydratedState<TOverride, TVariableValues>): void;
private updateLastInitDataRefreshTime;
private withUpdateNotification;
private withUpdateNotificationAsync;
private notifyUpdateListenersIfNeeded;
reduce(fieldQuery: FieldQuery<ObjectValueWithVariables> | null, expression: Expression): Expression;
private log;
}
//# sourceMappingURL=Context.d.ts.map