import { BaseObservable, IChangeContext, IObservable, IObservableWithChange, IObserver, IReader, ISettableObservable, ITransaction } from './base.js'; import { DebugNameData, DebugOwner, IDebugNameData } from './debugName.js'; import { DisposableStore, EqualityComparer, IDisposable } from './commonFacade/deps.js'; /** * Creates an observable that is derived from other observables. * The value is only recomputed when absolutely needed. * * {@link computeFn} should start with a JS Doc using `@description` to name the derived. */ export declare function derived(computeFn: (reader: IReader) => T): IObservable; export declare function derived(owner: DebugOwner, computeFn: (reader: IReader) => T): IObservable; export declare function derivedWithSetter(owner: DebugOwner | undefined, computeFn: (reader: IReader) => T, setter: (value: T, transaction: ITransaction | undefined) => void): ISettableObservable; export declare function derivedOpts(options: IDebugNameData & { equalsFn?: EqualityComparer; onLastObserverRemoved?: (() => void); }, computeFn: (reader: IReader) => T): IObservable; /** * Represents an observable that is derived from other observables. * The value is only recomputed when absolutely needed. * * {@link computeFn} should start with a JS Doc using `@description` to name the derived. * * Use `createEmptyChangeSummary` to create a "change summary" that can collect the changes. * Use `handleChange` to add a reported change to the change summary. * The compute function is given the last change summary. * The change summary is discarded after the compute function was called. * * @see derived */ export declare function derivedHandleChanges(options: IDebugNameData & { createEmptyChangeSummary: () => TChangeSummary; handleChange: (context: IChangeContext, changeSummary: TChangeSummary) => boolean; equalityComparer?: EqualityComparer; }, computeFn: (reader: IReader, changeSummary: TChangeSummary) => T): IObservable; export declare function derivedWithStore(computeFn: (reader: IReader, store: DisposableStore) => T): IObservable; export declare function derivedWithStore(owner: object, computeFn: (reader: IReader, store: DisposableStore) => T): IObservable; export declare function derivedDisposable(computeFn: (reader: IReader) => T): IObservable; export declare function derivedDisposable(owner: DebugOwner, computeFn: (reader: IReader) => T): IObservable; export declare class Derived extends BaseObservable implements IReader, IObserver { readonly _debugNameData: DebugNameData; readonly _computeFn: (reader: IReader, changeSummary: TChangeSummary) => T; private readonly createChangeSummary; private readonly _handleChange; private readonly _handleLastObserverRemoved; private readonly _equalityComparator; private state; private value; private updateCount; private dependencies; private dependenciesToBeRemoved; private changeSummary; private _isUpdating; private _isComputing; get debugName(): string; constructor(_debugNameData: DebugNameData, _computeFn: (reader: IReader, changeSummary: TChangeSummary) => T, createChangeSummary: (() => TChangeSummary) | undefined, _handleChange: ((context: IChangeContext, summary: TChangeSummary) => boolean) | undefined, _handleLastObserverRemoved: (() => void) | undefined, _equalityComparator: EqualityComparer); protected onLastObserverRemoved(): void; get(): T; private _recomputeIfNeeded; toString(): string; beginUpdate(_observable: IObservable): void; private _removedObserverToCallEndUpdateOn; endUpdate(_observable: IObservable): void; handlePossibleChange(observable: IObservable): void; handleChange(observable: IObservableWithChange, change: TChange): void; private _isReaderValid; readObservable(observable: IObservable): T; addObserver(observer: IObserver): void; removeObserver(observer: IObserver): void; log(): IObservableWithChange; } export declare class DerivedWithSetter extends Derived implements ISettableObservable { readonly set: (value: T, tx: ITransaction | undefined) => void; constructor(debugNameData: DebugNameData, computeFn: (reader: IReader, changeSummary: TChangeSummary) => T, createChangeSummary: (() => TChangeSummary) | undefined, handleChange: ((context: IChangeContext, summary: TChangeSummary) => boolean) | undefined, handleLastObserverRemoved: (() => void) | undefined, equalityComparator: EqualityComparer, set: (value: T, tx: ITransaction | undefined) => void); }