Skip to content

Commit b91326e

Browse files
authored
feat(relese): 0.0.3 (#5)
* feat(relese): 0.0.3 * feat(typed): disposable events
1 parent e77073d commit b91326e

File tree

4 files changed

+51
-46
lines changed

4 files changed

+51
-46
lines changed

src/events/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ export class EventEmitterWrapper implements EventEmitter {
8787
}
8888

8989

90-
type Handler = (...args: any[]) => void;
90+
export type Handler = (...args: any[]) => void;
9191
interface EventMap {
9292
[k: string]: Handler | Handler[] | undefined;
9393
}

src/events/interface/index.ts

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1 @@
1-
export interface Listener<T> {
2-
(event: T): any;
3-
}
4-
5-
export interface Disposable {
6-
dispose();
7-
}
8-
9-
/** passes through events as they happen. You will not get events from before you start listening */
10-
export class TypedEvent<T> {
11-
private listeners: Listener<T>[] = [];
12-
private listenersOncer: Listener<T>[] = [];
13-
14-
on = (listener: Listener<T>): Disposable => {
15-
this.listeners.push(listener);
16-
return {
17-
dispose: () => this.off(listener)
18-
};
19-
}
20-
21-
once = (listener: Listener<T>): void => {
22-
this.listenersOncer.push(listener);
23-
}
24-
25-
off = (listener: Listener<T>) => {
26-
var callbackIndex = this.listeners.indexOf(listener);
27-
if (callbackIndex > -1) this.listeners.splice(callbackIndex, 1);
28-
}
29-
30-
emit = (event: T) => {
31-
/** Update any general listeners */
32-
this.listeners.forEach((listener) => listener(event));
33-
34-
/** Clear the `once` queue */
35-
if (this.listenersOncer.length > 0) {
36-
const toCall = this.listenersOncer;
37-
this.listenersOncer = [];
38-
toCall.forEach((listener) => listener(event));
39-
}
40-
}
41-
42-
pipe = (te: TypedEvent<T>): Disposable => {
43-
return this.on((e) => te.emit(e));
44-
}
45-
}
1+
export * from './typed';

src/events/interface/typed.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
export interface Listener<T> {
2+
(event: T): any;
3+
}
4+
5+
export interface Disposable {
6+
dispose();
7+
}
8+
9+
/** passes through events as they happen. You will not get events from before you start listening */
10+
export class TypedEvent<T> {
11+
private listeners: Listener<T>[] = [];
12+
private listenersOncer: Listener<T>[] = [];
13+
14+
on = (listener: Listener<T>): Disposable => {
15+
this.listeners.push(listener);
16+
return {
17+
dispose: () => this.off(listener)
18+
};
19+
}
20+
21+
once = (listener: Listener<T>): void => {
22+
this.listenersOncer.push(listener);
23+
}
24+
25+
off = (listener: Listener<T>) => {
26+
var callbackIndex = this.listeners.indexOf(listener);
27+
if (callbackIndex > -1) this.listeners.splice(callbackIndex, 1);
28+
}
29+
30+
emit = (event: T) => {
31+
/** Update any general listeners */
32+
this.listeners.forEach((listener) => listener(event));
33+
34+
/** Clear the `once` queue */
35+
if (this.listenersOncer.length > 0) {
36+
const toCall = this.listenersOncer;
37+
this.listenersOncer = [];
38+
toCall.forEach((listener) => listener(event));
39+
}
40+
}
41+
42+
pipe = (te: TypedEvent<T>): Disposable => {
43+
return this.on((e) => te.emit(e));
44+
}
45+
}

src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
// export * from './events';
22
export { EventEmitterWrapper } from './events';
3+
export { SafeEventEmitter } from './events';
4+
export type { Handler } from './events';
5+
// TypedEvent , Disposable , Listener
6+
export * from './events/interface';
37
// both styles of export have no impact on output of dist
48
// However we should Prefer Named Exports as opposed to defaults, see README for more info

0 commit comments

Comments
 (0)