/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import { IReader, IObservable, BaseObservable, IObserver } from './base.mjs';
export declare function derived<T>(
	debugName: string | (() => string),
	computeFn: (reader: IReader) => T,
): IObservable<T>;
export declare class Derived<T> extends BaseObservable<T, void> implements IReader, IObserver {
	private readonly _debugName;
	private readonly computeFn;
	private hadValue;
	private hasValue;
	private value;
	private updateCount;
	private _dependencies;
	get dependencies(): ReadonlySet<IObservable<any>>;
	/**
	 * Dependencies that have to be removed when {@link runFn} ran through.
	 */
	private staleDependencies;
	get debugName(): string;
	constructor(_debugName: string | (() => string), computeFn: (reader: IReader) => T);
	protected onLastObserverRemoved(): void;
	get(): T;
	beginUpdate(): void;
	handleChange<T, TChange>(_observable: IObservable<T, TChange>, _change: TChange): void;
	endUpdate(): void;
	subscribeTo<T>(observable: IObservable<T>): void;
	toString(): string;
}
