import { IObservable, IReader, ITransaction, ISettableObservable, IObservableWithChange } from "../base.js"; import { IChangeTracker } from "../changeTracker.js"; import { DisposableStore, EqualityComparer, IDisposable } from "../commonFacade/deps.js"; import { DebugLocation } from "../debugLocation.js"; import { DebugOwner, IDebugNameData } from "../debugName.js"; import { IDerivedReader } from "./derivedImpl.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: IDerivedReader, debugLocation?: DebugLocation) => T): IObservableWithChange; export declare function derived(owner: DebugOwner, computeFn: (reader: IDerivedReader) => T, debugLocation?: DebugLocation): IObservableWithChange; export declare function derivedWithSetter(owner: DebugOwner | undefined, computeFn: (reader: IReader) => T, setter: (value: T, transaction: ITransaction | undefined) => void, debugLocation?: DebugLocation): ISettableObservable; export declare function derivedOpts(options: IDebugNameData & { equalsFn?: EqualityComparer; onLastObserverRemoved?: (() => void); }, computeFn: (reader: IReader) => T, debugLocation?: DebugLocation): 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 & { changeTracker: IChangeTracker; equalityComparer?: EqualityComparer; }, computeFn: (reader: IDerivedReader, changeSummary: TChangeSummary) => T, debugLocation?: DebugLocation): IObservableWithChange; /** * @deprecated Use `derived(reader => { reader.store.add(...) })` instead! */ export declare function derivedWithStore(computeFn: (reader: IReader, store: DisposableStore) => T): IObservable; /** * @deprecated Use `derived(reader => { reader.store.add(...) })` instead! */ export declare function derivedWithStore(owner: DebugOwner, 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;