UNPKG

2.75 kBTypeScriptView Raw
1import { Event, Emitter } from './event';
2export interface Disposable {
3 /**
4 * Dispose this object.
5 */
6 dispose(): void;
7}
8export declare namespace Disposable {
9 function is(arg: unknown): arg is Disposable;
10 function create(func: () => void): Disposable;
11 /** Always provides a reference to a new disposable. */
12 const NULL: Disposable;
13}
14/**
15 * Utility for tracking a collection of Disposable objects.
16 *
17 * This utility provides a number of benefits over just using an array of
18 * Disposables:
19 *
20 * - the collection is auto-pruned when an element it contains is disposed by
21 * any code that has a reference to it
22 * - you can register to be notified when all elements in the collection have
23 * been disposed [1]
24 * - you can conveniently dispose all elements by calling dispose()
25 * on the collection
26 *
27 * Unlike an array, however, this utility does not give you direct access to
28 * its elements.
29 *
30 * Being notified when all elements are disposed is simple:
31 * ```
32 * const dc = new DisposableCollection(myDisposables);
33 * dc.onDispose(() => {
34 * console.log('All elements in the collection have been disposed');
35 * });
36 * ```
37 *
38 * [1] The collection will notify only once. It will continue to function in so
39 * far as accepting new Disposables and pruning them when they are disposed, but
40 * such activity will never result in another notification.
41 */
42export declare class DisposableCollection implements Disposable {
43 protected readonly disposables: Disposable[];
44 protected readonly onDisposeEmitter: Emitter<void>;
45 constructor(...toDispose: Disposable[]);
46 /**
47 * This event is fired only once
48 * on first dispose of not empty collection.
49 */
50 get onDispose(): Event<void>;
51 protected checkDisposed(): void;
52 get disposed(): boolean;
53 private disposingElements;
54 dispose(): void;
55 push(disposable: Disposable): Disposable;
56 pushAll(disposables: Disposable[]): Disposable[];
57}
58export type DisposableGroup = {
59 push(disposable: Disposable): void;
60} | {
61 add(disposable: Disposable): void;
62};
63export declare namespace DisposableGroup {
64 function canPush(candidate?: DisposableGroup): candidate is {
65 push(disposable: Disposable): void;
66 };
67 function canAdd(candidate?: DisposableGroup): candidate is {
68 add(disposable: Disposable): void;
69 };
70}
71export declare function disposableTimeout(...args: Parameters<typeof setTimeout>): Disposable;
72/**
73 * Wrapper for a {@link Disposable} that is not available immediately.
74 */
75export declare class DisposableWrapper implements Disposable {
76 private disposed;
77 private disposable;
78 set(disposable: Disposable): void;
79 dispose(): void;
80}
81//# sourceMappingURL=disposable.d.ts.map
\No newline at end of file