import { BaseObservable, IObservable, IObservableWithChange, IObserver, IReader, ITransaction } from './base.js'; import { DebugNameData, DebugOwner, IDebugNameData } from './debugName.js'; import { DisposableStore, EqualityComparer, Event, IDisposable, IValueWithChangeEvent } from './commonFacade/deps.js'; /** * Represents an efficient observable whose value never changes. */ export declare function constObservable(value: T): IObservable; export declare function observableFromPromise(promise: Promise): IObservable<{ value?: T; }>; export declare function observableFromEvent(owner: DebugOwner, event: Event, getValue: (args: TArgs | undefined) => T): IObservable; export declare function observableFromEvent(event: Event, getValue: (args: TArgs | undefined) => T): IObservable; export declare function observableFromEventOpts(options: IDebugNameData & { equalsFn?: EqualityComparer; }, event: Event, getValue: (args: TArgs | undefined) => T): IObservable; export declare class FromEventObservable extends BaseObservable { private readonly _debugNameData; private readonly event; readonly _getValue: (args: TArgs | undefined) => T; private readonly _getTransaction; private readonly _equalityComparator; static globalTransaction: ITransaction | undefined; private value; private hasValue; private subscription; constructor(_debugNameData: DebugNameData, event: Event, _getValue: (args: TArgs | undefined) => T, _getTransaction: () => ITransaction | undefined, _equalityComparator: EqualityComparer); private getDebugName; get debugName(): string; protected onFirstObserverAdded(): void; private readonly handleEvent; protected onLastObserverRemoved(): void; get(): T; } export declare namespace observableFromEvent { const Observer: typeof FromEventObservable; function batchEventsGlobally(tx: ITransaction, fn: () => void): void; } export declare function observableSignalFromEvent(debugName: string, event: Event): IObservable; /** * Creates a signal that can be triggered to invalidate observers. * Signals don't have a value - when they are triggered they indicate a change. * However, signals can carry a delta that is passed to observers. */ export declare function observableSignal(debugName: string): IObservableSignal; export declare function observableSignal(owner: object): IObservableSignal; export interface IObservableSignal extends IObservableWithChange { trigger(tx: ITransaction | undefined, change: TChange): void; } export declare function signalFromObservable(owner: DebugOwner | undefined, observable: IObservable): IObservable; /** * @deprecated Use `debouncedObservable2` instead. */ export declare function debouncedObservable(observable: IObservable, debounceMs: number, disposableStore: DisposableStore): IObservable; /** * Creates an observable that debounces the input observable. */ export declare function debouncedObservable2(observable: IObservable, debounceMs: number): IObservable; export declare function wasEventTriggeredRecently(event: Event, timeoutMs: number, disposableStore: DisposableStore): IObservable; /** * This makes sure the observable is being observed and keeps its cache alive. */ export declare function keepObserved(observable: IObservable): IDisposable; /** * This converts the given observable into an autorun. */ export declare function recomputeInitiallyAndOnChange(observable: IObservable, handleValue?: (value: T) => void): IDisposable; export declare class KeepAliveObserver implements IObserver { private readonly _forceRecompute; private readonly _handleValue; private _counter; constructor(_forceRecompute: boolean, _handleValue: ((value: any) => void) | undefined); beginUpdate(observable: IObservable): void; endUpdate(observable: IObservable): void; handlePossibleChange(observable: IObservable): void; handleChange(observable: IObservableWithChange, change: TChange): void; } export declare function derivedObservableWithCache(owner: DebugOwner, computeFn: (reader: IReader, lastValue: T | undefined) => T): IObservable; export declare function derivedObservableWithWritableCache(owner: object, computeFn: (reader: IReader, lastValue: T | undefined) => T): IObservable & { clearCache(transaction: ITransaction): void; setCache(newValue: T | undefined, tx: ITransaction | undefined): void; }; /** * When the items array changes, referential equal items are not mapped again. */ export declare function mapObservableArrayCached(owner: DebugOwner, items: IObservable, map: (input: TIn, store: DisposableStore) => TOut, keySelector?: (input: TIn) => TKey): IObservable; export declare class ValueWithChangeEventFromObservable implements IValueWithChangeEvent { readonly observable: IObservable; constructor(observable: IObservable); get onDidChange(): Event; get value(): T; } export declare function observableFromValueWithChangeEvent(owner: DebugOwner, value: IValueWithChangeEvent): IObservable; /** * Creates an observable that has the latest changed value of the given observables. * Initially (and when not observed), it has the value of the last observable. * When observed and any of the observables change, it has the value of the last changed observable. * If multiple observables change in the same transaction, the last observable wins. */ export declare function latestChangedValue[]>(owner: DebugOwner, observables: T): IObservable>; /** * Works like a derived. * However, if the value is not undefined, it is cached and will not be recomputed anymore. * In that case, the derived will unsubscribe from its dependencies. */ export declare function derivedConstOnceDefined(owner: DebugOwner, fn: (reader: IReader) => T): IObservable; type RemoveUndefined = T extends undefined ? never : T; export declare function runOnChange(observable: IObservableWithChange, cb: (value: T, previousValue: undefined | T, deltas: RemoveUndefined[]) => void): IDisposable; export declare function runOnChangeWithStore(observable: IObservableWithChange, cb: (value: T, previousValue: undefined | T, deltas: RemoveUndefined[], store: DisposableStore) => void): IDisposable; export {};