import { BaseObservable } from "./BaseObservable"; export declare abstract class BaseObservableValue extends BaseObservable<(value: T) => void> { emit(argument: T): void; abstract get(): T; waitFor(predicate: (value: T) => boolean): IWaitHandle; flatMap(mapper: (value: T) => (BaseObservableValue | undefined)): BaseObservableValue; map(mapper: (value: T) => C): BaseObservableValue; } interface IWaitHandle { promise: Promise; dispose(): void; } export declare class ObservableValue extends BaseObservableValue { private _value; constructor(initialValue: T); get(): T; set(value: T): void; } export declare class RetainedObservableValue extends ObservableValue { private _freeCallback; constructor(initialValue: T, freeCallback: () => void); onUnsubscribeLast(): void; } export declare class FlatMapObservableValue extends BaseObservableValue { private readonly source; private readonly mapper; private sourceSubscription?; private targetSubscription?; constructor(source: BaseObservableValue

, mapper: (value: P) => (BaseObservableValue | undefined)); onUnsubscribeLast(): void; onSubscribeFirst(): void; private updateTargetSubscription; get(): C | undefined; } export declare class MappedObservableValue extends BaseObservableValue { private readonly source; private readonly mapper; private sourceSubscription?; constructor(source: BaseObservableValue

, mapper: (value: P) => C); onUnsubscribeLast(): void; onSubscribeFirst(): void; get(): C; } export declare function tests(): { "set emits an update": (assert: any) => void; "set doesn't emit if value hasn't changed": (assert: any) => void; "waitFor promise resolves on matching update": (assert: any) => Promise; "waitFor promise rejects when disposed": (assert: any) => Promise; "flatMap.get": (assert: any) => void; "flatMap update from source": (assert: any) => void; "flatMap update from target": (assert: any) => void; }; export {};