import { Disposable, DisposableStore } from './disposable'; export interface IReference extends Disposable { readonly object: T; } export declare abstract class ReferenceCollection { private readonly references; acquire(key: string, ...args: any[]): IReference; protected abstract createReferencedObject(key: string, ...args: any[]): T; protected abstract destroyReferencedObject(key: string, object: T): void; } /** * Unwraps a reference collection of promised values. Makes sure * references are disposed whenever promises get rejected. */ export declare class AsyncReferenceCollection { private referenceCollection; constructor(referenceCollection: ReferenceCollection>); acquire(key: string, ...args: any[]): Promise>; } export declare class ImmortalReference implements IReference { object: T; constructor(object: T); dispose(): void; } export declare function disposeOnReturn(fn: (store: DisposableStore) => void): void;