@lincode/events 1.0.29 → 1.0.30

Sign up to get free protection for your applications and to get access to all the features.
package/lib/event.d.ts CHANGED
@@ -1,12 +1,21 @@
1
1
  import { Cancellable } from "@lincode/promiselikes";
2
2
  export declare class Event<Payload = void> {
3
3
  private cbs;
4
+ private state?;
4
5
  on(cb: (val: Payload) => void): Cancellable;
5
6
  once(cb: (val: Payload) => void): Cancellable;
6
7
  emit(value: Payload): void;
8
+ setState(value: Payload): void;
9
+ getState(): Payload | undefined;
7
10
  }
8
11
  type Emit<T> = (val: T, isState?: boolean) => void;
9
12
  type On<T> = (cb: (val: T) => void, once?: boolean) => Cancellable;
10
- export type EventFunctions = readonly [Emit<void>, On<void>];
11
- declare const _default: <T = void>() => readonly [Emit<T>, On<T>];
13
+ type GetState<T> = () => T | undefined;
14
+ export type EventFunctions = readonly [
15
+ Emit<void>,
16
+ On<void>,
17
+ Emit<void>,
18
+ GetState<void>
19
+ ];
20
+ declare const _default: <T = void>() => readonly [Emit<T>, On<T>, Emit<T>, GetState<T>];
12
21
  export default _default;
package/lib/event.js CHANGED
@@ -4,6 +4,8 @@ export class Event {
4
4
  this.cbs = new Set();
5
5
  }
6
6
  on(cb) {
7
+ if ("state" in this)
8
+ cb(this.state);
7
9
  this.cbs.add(cb);
8
10
  return new Cancellable(() => this.cbs.delete(cb));
9
11
  }
@@ -19,10 +21,21 @@ export class Event {
19
21
  for (const cb of this.cbs)
20
22
  cb(value);
21
23
  }
24
+ setState(value) {
25
+ if ("state" in this && this.state === value)
26
+ return;
27
+ this.state = value;
28
+ this.emit(value);
29
+ }
30
+ getState() {
31
+ return this.state;
32
+ }
22
33
  }
23
34
  export default () => {
24
35
  const event = new Event();
25
36
  const emit = (val) => event.emit(val);
26
37
  const on = (cb, once) => once ? event.once(cb) : event.on(cb);
27
- return [emit, on];
38
+ const emitState = (val) => event.setState(val);
39
+ const getState = () => event.getState();
40
+ return [emit, on, emitState, getState];
28
41
  };
@@ -7,6 +7,8 @@ class Event {
7
7
  this.cbs = new Set();
8
8
  }
9
9
  on(cb) {
10
+ if ("state" in this)
11
+ cb(this.state);
10
12
  this.cbs.add(cb);
11
13
  return new promiselikes_1.Cancellable(() => this.cbs.delete(cb));
12
14
  }
@@ -22,11 +24,22 @@ class Event {
22
24
  for (const cb of this.cbs)
23
25
  cb(value);
24
26
  }
27
+ setState(value) {
28
+ if ("state" in this && this.state === value)
29
+ return;
30
+ this.state = value;
31
+ this.emit(value);
32
+ }
33
+ getState() {
34
+ return this.state;
35
+ }
25
36
  }
26
37
  exports.Event = Event;
27
38
  exports.default = () => {
28
39
  const event = new Event();
29
40
  const emit = (val) => event.emit(val);
30
41
  const on = (cb, once) => once ? event.once(cb) : event.on(cb);
31
- return [emit, on];
42
+ const emitState = (val) => event.setState(val);
43
+ const getState = () => event.getState();
44
+ return [emit, on, emitState, getState];
32
45
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lincode/events",
3
- "version": "1.0.29",
3
+ "version": "1.0.30",
4
4
  "description": "Generated by ambients-cli",
5
5
  "author": "Lai Schwe",
6
6
  "license": "MIT",
package/src/event.ts CHANGED
@@ -2,8 +2,11 @@ import { Cancellable } from "@lincode/promiselikes"
2
2
 
3
3
  export class Event<Payload = void> {
4
4
  private cbs = new Set<(val: Payload) => void>()
5
+ private state?: Payload
5
6
 
6
7
  public on(cb: (val: Payload) => void): Cancellable {
8
+ if ("state" in this) cb(this.state!)
9
+
7
10
  this.cbs.add(cb)
8
11
  return new Cancellable(() => this.cbs.delete(cb))
9
12
  }
@@ -22,17 +25,35 @@ export class Event<Payload = void> {
22
25
  public emit(value: Payload): void {
23
26
  for (const cb of this.cbs) cb(value)
24
27
  }
28
+
29
+ public setState(value: Payload): void {
30
+ if ("state" in this && this.state === value) return
31
+ this.state = value
32
+ this.emit(value)
33
+ }
34
+
35
+ public getState(): Payload | undefined {
36
+ return this.state
37
+ }
25
38
  }
26
39
 
27
40
  type Emit<T> = (val: T, isState?: boolean) => void
28
41
  type On<T> = (cb: (val: T) => void, once?: boolean) => Cancellable
42
+ type GetState<T> = () => T | undefined
29
43
 
30
- export type EventFunctions = readonly [Emit<void>, On<void>]
44
+ export type EventFunctions = readonly [
45
+ Emit<void>,
46
+ On<void>,
47
+ Emit<void>,
48
+ GetState<void>
49
+ ]
31
50
 
32
51
  export default <T = void>() => {
33
52
  const event = new Event<T>()
34
53
  const emit: Emit<T> = (val: T) => event.emit(val)
35
54
  const on: On<T> = (cb: (val: T) => void, once?: boolean) =>
36
55
  once ? event.once(cb) : event.on(cb)
37
- return <const>[emit, on]
56
+ const emitState: Emit<T> = (val: T) => event.setState(val)
57
+ const getState: GetState<T> = () => event.getState()
58
+ return <const>[emit, on, emitState, getState]
38
59
  }