1 |
|
2 | export class Disposable implements DisposableLike {
|
3 |
|
4 | static isDisposable(object: object): boolean;
|
5 |
|
6 |
|
7 | constructor(disposableAction?: () => void);
|
8 |
|
9 | /** A callback which will be called within dispose(). */
|
10 | disposalAction?(): void;
|
11 |
|
12 | /**
|
13 | * Perform the disposal action, indicating that the resource associated
|
14 | * with this disposable is no longer needed.
|
15 | */
|
16 | dispose(): void;
|
17 | }
|
18 |
|
19 | /**
|
20 | * An object that aggregates multiple Disposable instances together into a
|
21 | * single disposable, so they can all be disposed as a group.
|
22 | */
|
23 | export class CompositeDisposable implements DisposableLike {
|
24 |
|
25 | constructor(...disposables: DisposableLike[]);
|
26 |
|
27 | /**
|
28 | * Dispose all disposables added to this composite disposable.
|
29 | * If this object has already been disposed, this method has no effect.
|
30 | */
|
31 | dispose(): void;
|
32 |
|
33 | // Managing Disposables
|
34 | /**
|
35 | * Add disposables to be disposed when the composite is disposed.
|
36 | * If this object has already been disposed, this method has no effect.
|
37 | */
|
38 | add(...disposables: DisposableLike[]): void;
|
39 |
|
40 | /** Remove a previously added disposable. */
|
41 | remove(disposable: DisposableLike): void;
|
42 |
|
43 | /** Alias to CompositeDisposable::remove. */
|
44 | delete(disposable: DisposableLike): void;
|
45 |
|
46 | /**
|
47 | * Clear all disposables. They will not be disposed by the next call to
|
48 | * dispose.
|
49 | */
|
50 | clear(): void;
|
51 | }
|
52 |
|
53 | /**
|
54 | * Utility class to be used when implementing event-based APIs that allows
|
55 | * for handlers registered via ::on to be invoked with calls to ::emit.
|
56 | */
|
57 | // tslint:disable-next-line:no-any
|
58 | export class Emitter<OptionalEmissions = { [key: string]: any }, RequiredEmissions = {}> implements DisposableLike {
|
59 |
|
60 | constructor();
|
61 |
|
62 | /** Clear out any existing subscribers. */
|
63 | clear(): void;
|
64 |
|
65 | /** Unsubscribe all handlers. */
|
66 | dispose(): boolean;
|
67 |
|
68 | // Event Subscription
|
69 | /** Registers a handler to be invoked whenever the given event is emitted. */
|
70 | on<T extends keyof OptionalEmissions>(eventName: T, handler: (value?: OptionalEmissions[T]) => void): Disposable;
|
71 | /** Registers a handler to be invoked whenever the given event is emitted. */
|
72 | on<T extends keyof RequiredEmissions>(eventName: T, handler: (value: RequiredEmissions[T]) => void): Disposable;
|
73 |
|
74 | /**
|
75 | * Register the given handler function to be invoked the next time an event
|
76 | * with the given name is emitted via ::emit.
|
77 | */
|
78 | once<T extends keyof OptionalEmissions>(eventName: T, handler: (value?: OptionalEmissions[T]) => void): Disposable;
|
79 | /**
|
80 | * Register the given handler function to be invoked the next time an event
|
81 | * with the given name is emitted via ::emit.
|
82 | */
|
83 | once<T extends keyof RequiredEmissions>(eventName: T, handler: (value: RequiredEmissions[T]) => void): Disposable;
|
84 |
|
85 | /**
|
86 | * Register the given handler function to be invoked before all other
|
87 | * handlers existing at the time of subscription whenever events by the
|
88 | * given name are emitted via ::emit.
|
89 | */
|
90 | preempt<T extends keyof OptionalEmissions>(
|
91 | eventName: T,
|
92 | handler: (value?: OptionalEmissions[T]) => void,
|
93 | ): Disposable;
|
94 | /**
|
95 | * Register the given handler function to be invoked before all other
|
96 | * handlers existing at the time of subscription whenever events by the
|
97 | * given name are emitted via ::emit.
|
98 | */
|
99 | preempt<T extends keyof RequiredEmissions>(
|
100 | eventName: T,
|
101 | handler: (value: RequiredEmissions[T]) => void,
|
102 | ): Disposable;
|
103 |
|
104 | // Event Emission
|
105 | /** Invoke the handlers registered via ::on for the given event name. */
|
106 | emit<T extends keyof OptionalEmissions>(eventName: T, value?: OptionalEmissions[T]): void;
|
107 | /** Invoke the handlers registered via ::on for the given event name. */
|
108 | emit<T extends keyof RequiredEmissions>(eventName: T, value: RequiredEmissions[T]): void;
|
109 | }
|
110 |
|
111 | export interface DisposableLike {
|
112 | dispose(): void;
|
113 | }
|