UNPKG

4.25 kBTypeScriptView Raw
1/** A handle to a resource that can be disposed. */
2export class Disposable implements DisposableLike {
3 /** Ensure that Object correctly implements the Disposable contract. */
4 static isDisposable(object: object): boolean;
5
6 /** Construct a Disposable. */
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 */
23export class CompositeDisposable implements DisposableLike {
24 /** Construct an instance, optionally with one or more disposables. */
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
58export class Emitter<OptionalEmissions = { [key: string]: any }, RequiredEmissions = {}> implements DisposableLike {
59 /** Construct an emitter. */
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
111export interface DisposableLike {
112 dispose(): void;
113}