/** * An interface which represents an object which needs * to be disposed when it is no longer in use. */ export interface IDisposable { dispose: () => void } /** * Dispose all of the items in an array of disposables * @param disposables The array of disposable objects */ export function dispose<T extends IDisposable> (disposables: T[]): T[] { disposables.forEach(d => d.dispose()); return []; } /** * Convert a dispose function into an IDisposable object * @param dispose The dipose function */ export function toDisposable (dispose: () => void): IDisposable { return { dispose }; } /** * Combine an array of disposables into a single disposable object * @param disposables The array of disposable objects */ export function combinedDisposable (disposables: IDisposable[]): IDisposable { return toDisposable(() => dispose(disposables)); } /** * A Disposable object which does nothing */ export const EmptyDisposable = toDisposable(() => null);