import { Expression, ObjectValue, Query, Step, Value, UpdateListener, DehydratedState, DeepPartial, ObjectValueWithVariables, FieldQuery, Logs, InitData } from "../shared";
import Context from "./Context";
import Logger from "./Logger";
export type NodeProps = {
    readonly logger: Logger | null;
    readonly context: Context | null;
    readonly parent: Node | null;
    readonly step: Step | null;
    readonly initDataHash: string | null;
    readonly expression: Expression | null;
};
export default class Node {
    props: NodeProps;
    typeName: string;
    constructor(props: NodeProps);
    protected updateIfNeeded(): void;
    getFieldNode(fieldName: string, { fieldArguments }?: {
        fieldArguments?: ObjectValue;
    }): Node;
    /**
     * @deprecated This method will be removed in the next major SDK version.
     */
    protected getField(fieldName: string, fieldArguments: ObjectValue): NodeProps;
    protected getFieldNodeProps(fieldName: string, { fieldArguments }?: {
        fieldArguments?: ObjectValue;
    }): NodeProps;
    private getReducedFieldExpression;
    getItemNodes({ fallbackLength, }?: {
        fallbackLength?: number;
    }): Node[];
    /**
     * @deprecated This method will be removed in the next major SDK version.
     */
    _getItems(fallbackLength: number): NodeProps[];
    getItemNodeProps({ fallbackLength, }?: {
        fallbackLength?: number;
    }): NodeProps[];
    private _getItemExpressions;
    getFieldValue(fieldName: string, { fallback, query, fieldArguments, }: {
        fallback: Value;
        query?: FieldQuery<ObjectValue> | null;
        fieldArguments?: ObjectValue;
    }): Value;
    /**
     * @deprecated This method will be removed in the next major SDK version.
     */
    protected evaluate(query: FieldQuery<ObjectValue> | null, fallback: Value): Value;
    getValue({ query, fallback, }: {
        query?: FieldQuery<ObjectValue> | null;
        fallback: Value;
    }): Value;
    private getNodeOverride;
    protected getValueAndLogsWithCache(query: FieldQuery<ObjectValue> | null): {
        value: Value | null;
        logs: Logs;
        path: string;
        args: {
            [path: string]: ObjectValue;
        };
        shouldLogEvaluation: boolean;
    };
    private getValueAndLogs;
    private createProps;
    private createPropsArray;
    _logUnexpectedTypeError(): void;
    protected logUnexpectedValueError(value: Value): void;
    private log;
    private logReductionLogs;
    getStateHash(): string | null;
    getInitResponse(): InitData | null;
    getHashResponse(): string | null;
    addUpdateListener(listener: UpdateListener): void;
    removeUpdateListener(listener: UpdateListener): void;
    /**
     * Initialize from the init data provider if needed
     */
    initIfNeeded(traceId?: string, retries?: number): Promise<void>;
    /**
     * Returns the timestamp of the last time the SDK was initialized from
     * the init data provider
     */
    getLastInitDataRefreshTime(): number | null;
    /**
     * @returns @deprecated use `getLastInitDataRefreshTime` instead
     */
    getLastDataProviderInitTime(): number | null;
    /**
     * Indicates whether the SDK is ready to evaluate flags and log events.
     */
    isReady(): boolean;
    flushLogs(traceId?: string): Promise<void>;
    setOverride<T extends ObjectValue>(override: DeepPartial<T> | null, traceId?: string): void;
    dehydrate<TOverride extends ObjectValue, TVariableValues extends ObjectValue>(query?: Query<ObjectValueWithVariables>, variableValues?: TVariableValues): DehydratedState<TOverride, TVariableValues> | null;
    hydrate<TOverride extends ObjectValue, TVariableValues extends ObjectValue>(dehydratedState: DehydratedState<TOverride, TVariableValues>, traceId?: string): void;
    /**
     * Close flushes any remaining logs and stops all background processes
     * ensuring clean shutdown.
     */
    close(traceId?: string): Promise<void>;
    getFlagValues<FlagValues extends ObjectValue, FlagPath extends keyof FlagValues & string>({ flagFallbacks, flagPaths, }: {
        flagFallbacks: FlagValues;
        flagPaths: FlagPath[];
    }): Pick<FlagValues, FlagPath>;
    private getFlagValue;
    getEncodedFlagValues<FlagValues extends ObjectValue, Flag extends keyof FlagValues & string>({ flagFallbacks, flagPaths, }: {
        flagFallbacks: FlagValues;
        flagPaths: Flag[];
    }): string;
}
//# sourceMappingURL=Node.d.ts.map