@furystack/utils 6.0.1 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/debounce.d.ts.map +1 -1
- package/esm/disposable.d.ts.map +1 -1
- package/esm/event-hub.d.ts +6 -10
- package/esm/event-hub.d.ts.map +1 -1
- package/esm/event-hub.js.map +1 -1
- package/esm/event-hub.spec.js.map +1 -1
- package/package.json +3 -3
- package/src/event-hub.spec.ts +10 -16
- package/src/event-hub.ts +18 -9
package/esm/debounce.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../src/debounce.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../src/debounce.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,QAAQ,8CAA+C,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,QAAQ,oCAW9E,KAAK,KAAK,QAC3B,CAAA"}
|
package/esm/disposable.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disposable.d.ts","sourceRoot":"","sources":["../src/disposable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM;AAEN;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED;;;;;GAKG;AACH,eAAO,MAAM,KAAK,6CAA8C,CAAC,
|
|
1
|
+
{"version":3,"file":"disposable.d.ts","sourceRoot":"","sources":["../src/disposable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM;AAEN;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED;;;;;GAKG;AACH,eAAO,MAAM,KAAK,6CAA8C,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,aAM9F,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,6CACX,CAAC,YACD,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,QAAQ,CAAC,sBAUtC,CAAA"}
|
package/esm/event-hub.d.ts
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import type { Disposable } from './disposable.js';
|
|
2
|
-
type ListenerFunction<
|
|
3
|
-
|
|
4
|
-
}> = (arg: EventTypeMap[T]) => void;
|
|
5
|
-
export declare class EventHub<T extends string, EventTypeMap extends {
|
|
6
|
-
[K in T]: any;
|
|
7
|
-
}> implements Disposable {
|
|
2
|
+
type ListenerFunction<EventTypeMap extends Object, T extends keyof EventTypeMap> = (arg: EventTypeMap[T]) => void;
|
|
3
|
+
export declare class EventHub<EventTypeMap extends Object> implements Disposable {
|
|
8
4
|
private listeners;
|
|
9
|
-
addListener<TEvent extends
|
|
10
|
-
removeListener<TEvent extends
|
|
11
|
-
subscribe<TEvent extends
|
|
12
|
-
emit<TEvent extends
|
|
5
|
+
addListener<TEvent extends keyof EventTypeMap>(event: TEvent, listener: ListenerFunction<EventTypeMap, TEvent>): void;
|
|
6
|
+
removeListener<TEvent extends keyof EventTypeMap>(event: TEvent, listener: ListenerFunction<EventTypeMap, TEvent>): void;
|
|
7
|
+
subscribe<TEvent extends keyof EventTypeMap>(event: TEvent, listener: ListenerFunction<EventTypeMap, TEvent>): Disposable;
|
|
8
|
+
emit<TEvent extends keyof EventTypeMap>(event: TEvent, arg: EventTypeMap[TEvent]): void;
|
|
13
9
|
dispose(): void;
|
|
14
10
|
}
|
|
15
11
|
export {};
|
package/esm/event-hub.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-hub.d.ts","sourceRoot":"","sources":["../src/event-hub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,KAAK,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"event-hub.d.ts","sourceRoot":"","sources":["../src/event-hub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,KAAK,gBAAgB,CAAC,YAAY,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,YAAY,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;AAEjH,qBAAa,QAAQ,CAAC,YAAY,SAAS,MAAM,CAAE,YAAW,UAAU;IACtE,OAAO,CAAC,SAAS,CAAyF;IAEnG,WAAW,CAAC,MAAM,SAAS,MAAM,YAAY,EAClD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC;IAQ3C,cAAc,CAAC,MAAM,SAAS,MAAM,YAAY,EACrD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC;IAO3C,SAAS,CAAC,MAAM,SAAS,MAAM,YAAY,EAChD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,GAC/C,UAAU;IAKN,IAAI,CAAC,MAAM,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC;IAMhF,OAAO;CAGf"}
|
package/esm/event-hub.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-hub.js","sourceRoot":"","sources":["../src/event-hub.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,QAAQ;IACX,SAAS,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"event-hub.js","sourceRoot":"","sources":["../src/event-hub.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,QAAQ;IACX,SAAS,GAAG,IAAI,GAAG,EAA+E,CAAA;IAEnG,WAAW,CAChB,KAAa,EACb,QAAgD;QAEhD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QACtC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,QAA8D,CAAC,CAAA;IAChG,CAAC;IAEM,cAAc,CACnB,KAAa,EACb,QAAgD;QAEhD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,QAA8D,CAAC,CAAA;QACnG,CAAC;IACH,CAAC;IAEM,SAAS,CACd,KAAa,EACb,QAAgD;QAEhD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACjC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAA;IAChE,CAAC;IAEM,IAAI,CAAoC,KAAa,EAAE,GAAyB;QACrF,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-hub.spec.js","sourceRoot":"","sources":["../src/event-hub.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEjD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,QAAQ,GAAG,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"file":"event-hub.spec.js","sourceRoot":"","sources":["../src/event-hub.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/utils",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.1",
|
|
4
4
|
"description": "General utilities",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"homepage": "https://github.com/furystack/furystack",
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"typescript": "^5.4.
|
|
38
|
-
"vitest": "^1.
|
|
37
|
+
"typescript": "^5.4.5",
|
|
38
|
+
"vitest": "^1.6.0"
|
|
39
39
|
}
|
|
40
40
|
}
|
package/src/event-hub.spec.ts
CHANGED
|
@@ -3,10 +3,7 @@ import { describe, expect, it, vi } from 'vitest'
|
|
|
3
3
|
|
|
4
4
|
describe('EventHub', () => {
|
|
5
5
|
it('Should fail on type errors', () => {
|
|
6
|
-
const eventHub = new EventHub<
|
|
7
|
-
'ExampleNumberEvent' | 'ExampleStringEvent',
|
|
8
|
-
{ ExampleNumberEvent: number; ExampleStringEvent: string }
|
|
9
|
-
>()
|
|
6
|
+
const eventHub = new EventHub<{ ExampleNumberEvent: number; ExampleStringEvent: string }>()
|
|
10
7
|
const numberListener = vi.fn((_val: number) => {})
|
|
11
8
|
const stringListener = vi.fn((_val: string) => {})
|
|
12
9
|
// @ts-expect-error Type 'string' is not assignable to type 'number'
|
|
@@ -22,7 +19,7 @@ describe('EventHub', () => {
|
|
|
22
19
|
|
|
23
20
|
it('Should remove a listener', () => {
|
|
24
21
|
// Arrange
|
|
25
|
-
const eventHub = new EventHub<
|
|
22
|
+
const eventHub = new EventHub<{ ExampleNumberEvent: number }>()
|
|
26
23
|
const numberListener = vi.fn((_val: number) => {})
|
|
27
24
|
|
|
28
25
|
// Act
|
|
@@ -36,15 +33,12 @@ describe('EventHub', () => {
|
|
|
36
33
|
|
|
37
34
|
it('should distribute events through listeners', () => {
|
|
38
35
|
// Arrange
|
|
39
|
-
const eventHub = new EventHub<
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
ExampleObjectEvent2: { b: string }
|
|
46
|
-
}
|
|
47
|
-
>()
|
|
36
|
+
const eventHub = new EventHub<{
|
|
37
|
+
ExampleNumberEvent: number
|
|
38
|
+
ExampleStringEvent: string
|
|
39
|
+
ExampleObjectEvent1: { a: number }
|
|
40
|
+
ExampleObjectEvent2: { b: string }
|
|
41
|
+
}>()
|
|
48
42
|
const numberListener = vi.fn((_val: number) => {})
|
|
49
43
|
|
|
50
44
|
const stringListener = vi.fn((_val: string) => {})
|
|
@@ -81,7 +75,7 @@ describe('EventHub', () => {
|
|
|
81
75
|
})
|
|
82
76
|
|
|
83
77
|
it('Should add and remove a listener with subscription', () => {
|
|
84
|
-
const eventHub = new EventHub<
|
|
78
|
+
const eventHub = new EventHub<{ ExampleNumberEvent: number }>()
|
|
85
79
|
const numberListener = vi.fn((_val: number) => {})
|
|
86
80
|
|
|
87
81
|
const subscription = eventHub.subscribe('ExampleNumberEvent', numberListener)
|
|
@@ -94,7 +88,7 @@ describe('EventHub', () => {
|
|
|
94
88
|
})
|
|
95
89
|
|
|
96
90
|
it('should clear all listeners on dispose', () => {
|
|
97
|
-
const hub = new EventHub<
|
|
91
|
+
const hub = new EventHub<{ test: string }>()
|
|
98
92
|
|
|
99
93
|
const listener = vi.fn((_val: string) => {})
|
|
100
94
|
|
package/src/event-hub.ts
CHANGED
|
@@ -1,29 +1,38 @@
|
|
|
1
1
|
import type { Disposable } from './disposable.js'
|
|
2
2
|
|
|
3
|
-
type ListenerFunction<
|
|
3
|
+
type ListenerFunction<EventTypeMap extends Object, T extends keyof EventTypeMap> = (arg: EventTypeMap[T]) => void
|
|
4
4
|
|
|
5
|
-
export class EventHub<
|
|
6
|
-
private listeners = new Map<
|
|
5
|
+
export class EventHub<EventTypeMap extends Object> implements Disposable {
|
|
6
|
+
private listeners = new Map<keyof EventTypeMap, Set<ListenerFunction<EventTypeMap, keyof EventTypeMap>>>()
|
|
7
7
|
|
|
8
|
-
public addListener<TEvent extends
|
|
8
|
+
public addListener<TEvent extends keyof EventTypeMap>(
|
|
9
|
+
event: TEvent,
|
|
10
|
+
listener: ListenerFunction<EventTypeMap, TEvent>,
|
|
11
|
+
) {
|
|
9
12
|
if (!this.listeners.has(event)) {
|
|
10
13
|
this.listeners.set(event, new Set())
|
|
11
14
|
}
|
|
12
|
-
this.listeners.get(event)!.add(listener as ListenerFunction<
|
|
15
|
+
this.listeners.get(event)!.add(listener as ListenerFunction<EventTypeMap, keyof EventTypeMap>)
|
|
13
16
|
}
|
|
14
17
|
|
|
15
|
-
public removeListener<TEvent extends
|
|
18
|
+
public removeListener<TEvent extends keyof EventTypeMap>(
|
|
19
|
+
event: TEvent,
|
|
20
|
+
listener: ListenerFunction<EventTypeMap, TEvent>,
|
|
21
|
+
) {
|
|
16
22
|
if (this.listeners.has(event)) {
|
|
17
|
-
this.listeners.get(event)!.delete(listener as ListenerFunction<
|
|
23
|
+
this.listeners.get(event)!.delete(listener as ListenerFunction<EventTypeMap, keyof EventTypeMap>)
|
|
18
24
|
}
|
|
19
25
|
}
|
|
20
26
|
|
|
21
|
-
public subscribe<TEvent extends
|
|
27
|
+
public subscribe<TEvent extends keyof EventTypeMap>(
|
|
28
|
+
event: TEvent,
|
|
29
|
+
listener: ListenerFunction<EventTypeMap, TEvent>,
|
|
30
|
+
): Disposable {
|
|
22
31
|
this.addListener(event, listener)
|
|
23
32
|
return { dispose: () => this.removeListener(event, listener) }
|
|
24
33
|
}
|
|
25
34
|
|
|
26
|
-
public emit<TEvent extends
|
|
35
|
+
public emit<TEvent extends keyof EventTypeMap>(event: TEvent, arg: EventTypeMap[TEvent]) {
|
|
27
36
|
if (this.listeners.has(event)) {
|
|
28
37
|
this.listeners.get(event)!.forEach((listener) => listener(arg))
|
|
29
38
|
}
|