evnty 1.0.19 → 1.1.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/build/index.cjs +8 -8
- package/build/index.cjs.map +1 -1
- package/build/index.d.ts +14 -13
- package/build/index.js +8 -8
- package/build/index.js.map +1 -1
- package/package.json +1 -4
- package/src/index.ts +24 -21
package/build/index.cjs
CHANGED
|
@@ -45,30 +45,30 @@ class Dismiss extends FunctionExt {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
const eventEmitter = async (listeners, ...args)=>{
|
|
48
|
-
return Promise.allSettled(listeners
|
|
48
|
+
return Promise.allSettled(listeners.map((listener)=>listener(...args)));
|
|
49
49
|
};
|
|
50
50
|
class Event extends FunctionExt {
|
|
51
51
|
static merge(...events) {
|
|
52
52
|
const mergedEvent = new Event();
|
|
53
|
-
events.forEach((event)=>event.on(
|
|
53
|
+
events.forEach((event)=>event.on(mergedEvent));
|
|
54
54
|
return mergedEvent;
|
|
55
55
|
}
|
|
56
56
|
static interval(interval) {
|
|
57
|
-
let timerId = 0;
|
|
58
57
|
let counter = 0;
|
|
59
58
|
const intervalEvent = new Event(()=>clearInterval(timerId));
|
|
60
|
-
timerId = setInterval(()=>intervalEvent(counter++), interval);
|
|
59
|
+
const timerId = setInterval(()=>intervalEvent(counter++), interval);
|
|
61
60
|
return intervalEvent;
|
|
62
61
|
}
|
|
63
62
|
listeners;
|
|
64
63
|
dispose;
|
|
65
64
|
constructor(dispose){
|
|
66
|
-
const
|
|
65
|
+
const listeners = [];
|
|
66
|
+
const fn = (...args)=>eventEmitter(listeners, ...args);
|
|
67
67
|
super(fn);
|
|
68
|
-
this.listeners =
|
|
68
|
+
this.listeners = listeners;
|
|
69
69
|
this.dispose = ()=>{
|
|
70
70
|
this.clear();
|
|
71
|
-
dispose
|
|
71
|
+
dispose?.();
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
74
|
get size() {
|
|
@@ -99,7 +99,7 @@ class Event extends FunctionExt {
|
|
|
99
99
|
return this.on(oneTimeListener);
|
|
100
100
|
}
|
|
101
101
|
clear() {
|
|
102
|
-
this.listeners
|
|
102
|
+
this.listeners.splice(0);
|
|
103
103
|
}
|
|
104
104
|
toPromise() {
|
|
105
105
|
return new Promise((resolve)=>this.once((...args)=>resolve(args)));
|
package/build/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["type MaybePromise<T> = Promise<T> | PromiseLike<T> | T;\n\nexport interface Unsubscribe {\n (): void;\n}\n\nexport interface Listener<T extends
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["type MaybePromise<T> = Promise<T> | PromiseLike<T> | T;\n\nexport interface Unsubscribe {\n (): void;\n}\n\nexport interface Listener<T extends unknown[]> {\n (...args: T): void;\n}\n\nexport interface Dispose {\n (): void;\n}\n\nexport interface Filter<T extends unknown[]> {\n (...args: T): MaybePromise<boolean>;\n}\n\nexport interface Mapper<T extends unknown[], R> {\n (...args: T): R;\n}\n\nexport interface Reducer<T extends unknown[], R> {\n (value: R, ...args: T): R;\n}\n\nexport type Listeners<T extends unknown[]> = Listener<T>[];\n\nclass FunctionExt extends Function {\n constructor(func: Function) {\n super();\n return Object.setPrototypeOf(func, new.target.prototype);\n }\n}\n\nexport interface Dismiss {\n (): Promise<void> | void;\n}\n\nexport class Dismiss extends FunctionExt {\n constructor(dismiss: Unsubscribe) {\n super(dismiss);\n }\n async after(process: () => MaybePromise<unknown>) {\n await process();\n this();\n }\n afterTimes(count: number) {\n return () => {\n if (!--count) {\n this();\n }\n };\n }\n}\n\nconst eventEmitter = async <A extends unknown[]>(listeners: Listeners<A>, ...args: A) => {\n return Promise.allSettled(listeners.map((listener) => listener(...args)));\n};\n\nexport interface Event<T extends unknown[]> {\n (...args: T): Promise<void> | void;\n}\n\nexport class Event<T extends unknown[]> extends FunctionExt {\n static merge<T extends unknown[][]>(\n ...events: {\n [K in keyof T]: Event<T[K]>;\n }\n ) {\n const mergedEvent = new Event<T[number]>();\n events.forEach((event) => event.on(mergedEvent));\n return mergedEvent;\n }\n\n static interval(interval: number) {\n let counter = 0;\n const intervalEvent = new Event<[number]>(() => clearInterval(timerId));\n const timerId: NodeJS.Timer = setInterval(() => intervalEvent(counter++), interval);\n return intervalEvent;\n }\n\n private listeners: Listeners<T>;\n readonly dispose: Dispose;\n\n constructor(dispose?: Dispose) {\n const listeners: Listeners<T> = [];\n const fn = (...args: T) => eventEmitter(listeners, ...args);\n\n super(fn);\n this.listeners = listeners;\n this.dispose = () => {\n this.clear();\n dispose?.();\n };\n }\n\n get size(): number {\n return this.listeners.length;\n }\n\n lacks(listener: Listener<T>): boolean {\n return this.listeners.indexOf(listener) === -1;\n }\n\n has(listener: Listener<T>): boolean {\n return this.listeners.indexOf(listener) !== -1;\n }\n\n off(listener: Listener<T>): void {\n let index = this.listeners.indexOf(listener);\n while (~index) {\n this.listeners.splice(index, 1);\n index = this.listeners.indexOf(listener);\n }\n }\n\n on(listener: Listener<T>): Dismiss {\n this.listeners.push(listener);\n return new Dismiss(() => this.off(listener));\n }\n\n once(listener: Listener<T>): Dismiss {\n const oneTimeListener = (...args: T) => {\n this.off(oneTimeListener);\n listener(...args);\n };\n return this.on(oneTimeListener);\n }\n\n clear() {\n this.listeners.splice(0);\n }\n\n toPromise(): Promise<T> {\n return new Promise((resolve) => this.once((...args) => resolve(args)));\n }\n\n filter(filter: Filter<T>) {\n const dispose = this.on(async (...args) => {\n if (filteredEvent.size > 0 && (await filter(...args))) {\n filteredEvent(...args);\n }\n });\n const filteredEvent = new Event(dispose);\n return filteredEvent;\n }\n\n map<R>(mapper: Mapper<T, R>) {\n const dispose = this.on(async (...args) => {\n if (mappedEvent.size > 0) {\n const value = await mapper(...args);\n mappedEvent(value);\n }\n });\n const mappedEvent = new Event(dispose);\n return mappedEvent;\n }\n\n reduce<R>(reducer: Reducer<T, R>, init: R) {\n let value = init;\n const dispose = this.on(async (...args) => {\n if (reducedEvent.size > 0) {\n value = await reducer(value, ...args);\n reducedEvent(value);\n }\n });\n const reducedEvent = new Event(dispose);\n return reducedEvent;\n }\n}\n\nexport const once = <T extends any[]>(event: Event<T>): Promise<T> => {\n return new Promise((resolve) => event.once((...args) => resolve(args)));\n};\n\nexport default function createEvent<T extends any[]>() {\n return new Event<T>();\n}\n"],"names":["Dismiss","Event","once","createEvent","FunctionExt","Function","constructor","func","Object","setPrototypeOf","prototype","dismiss","after","process","afterTimes","count","eventEmitter","listeners","args","Promise","allSettled","map","listener","merge","events","mergedEvent","forEach","event","on","interval","counter","intervalEvent","clearInterval","timerId","setInterval","dispose","fn","clear","size","length","lacks","indexOf","has","off","index","splice","push","oneTimeListener","toPromise","resolve","filter","filteredEvent","mapper","mappedEvent","value","reduce","reducer","init","reducedEvent"],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -2,22 +2,22 @@ type MaybePromise<T> = Promise<T> | PromiseLike<T> | T;
|
|
|
2
2
|
export interface Unsubscribe {
|
|
3
3
|
(): void;
|
|
4
4
|
}
|
|
5
|
-
export interface Listener<T extends
|
|
5
|
+
export interface Listener<T extends unknown[]> {
|
|
6
6
|
(...args: T): void;
|
|
7
7
|
}
|
|
8
8
|
export interface Dispose {
|
|
9
9
|
(): void;
|
|
10
10
|
}
|
|
11
|
-
export interface Filter<T extends
|
|
11
|
+
export interface Filter<T extends unknown[]> {
|
|
12
12
|
(...args: T): MaybePromise<boolean>;
|
|
13
13
|
}
|
|
14
|
-
export interface Mapper<T extends
|
|
14
|
+
export interface Mapper<T extends unknown[], R> {
|
|
15
15
|
(...args: T): R;
|
|
16
16
|
}
|
|
17
|
-
export interface Reducer<T extends
|
|
17
|
+
export interface Reducer<T extends unknown[], R> {
|
|
18
18
|
(value: R, ...args: T): R;
|
|
19
19
|
}
|
|
20
|
-
export type Listeners<T extends
|
|
20
|
+
export type Listeners<T extends unknown[]> = Listener<T>[];
|
|
21
21
|
declare class FunctionExt extends Function {
|
|
22
22
|
constructor(func: Function);
|
|
23
23
|
}
|
|
@@ -26,15 +26,16 @@ export interface Dismiss {
|
|
|
26
26
|
}
|
|
27
27
|
export declare class Dismiss extends FunctionExt {
|
|
28
28
|
constructor(dismiss: Unsubscribe);
|
|
29
|
-
after(process: () => MaybePromise<
|
|
29
|
+
after(process: () => MaybePromise<unknown>): Promise<void>;
|
|
30
30
|
afterTimes(count: number): () => void;
|
|
31
31
|
}
|
|
32
|
-
export interface Event<T extends
|
|
32
|
+
export interface Event<T extends unknown[]> {
|
|
33
33
|
(...args: T): Promise<void> | void;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
export declare class Event<T extends unknown[]> extends FunctionExt {
|
|
36
|
+
static merge<T extends unknown[][]>(...events: {
|
|
37
|
+
[K in keyof T]: Event<T[K]>;
|
|
38
|
+
}): Event<T[number]>;
|
|
38
39
|
static interval(interval: number): Event<[number]>;
|
|
39
40
|
private listeners;
|
|
40
41
|
readonly dispose: Dispose;
|
|
@@ -47,9 +48,9 @@ export declare class Event<T extends any[]> extends FunctionExt {
|
|
|
47
48
|
once(listener: Listener<T>): Dismiss;
|
|
48
49
|
clear(): void;
|
|
49
50
|
toPromise(): Promise<T>;
|
|
50
|
-
filter(filter: Filter<T>): Event<
|
|
51
|
-
map<R>(mapper: Mapper<T, R>): Event<
|
|
52
|
-
reduce<R>(reducer: Reducer<T, R>, init: R): Event<
|
|
51
|
+
filter(filter: Filter<T>): Event<unknown[]>;
|
|
52
|
+
map<R>(mapper: Mapper<T, R>): Event<unknown[]>;
|
|
53
|
+
reduce<R>(reducer: Reducer<T, R>, init: R): Event<unknown[]>;
|
|
53
54
|
}
|
|
54
55
|
export declare const once: <T extends any[]>(event: Event<T>) => Promise<T>;
|
|
55
56
|
export default function createEvent<T extends any[]>(): Event<T>;
|
package/build/index.js
CHANGED
|
@@ -21,30 +21,30 @@ export class Dismiss extends FunctionExt {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
const eventEmitter = async (listeners, ...args)=>{
|
|
24
|
-
return Promise.allSettled(listeners
|
|
24
|
+
return Promise.allSettled(listeners.map((listener)=>listener(...args)));
|
|
25
25
|
};
|
|
26
26
|
export class Event extends FunctionExt {
|
|
27
27
|
static merge(...events) {
|
|
28
28
|
const mergedEvent = new Event();
|
|
29
|
-
events.forEach((event)=>event.on(
|
|
29
|
+
events.forEach((event)=>event.on(mergedEvent));
|
|
30
30
|
return mergedEvent;
|
|
31
31
|
}
|
|
32
32
|
static interval(interval) {
|
|
33
|
-
let timerId = 0;
|
|
34
33
|
let counter = 0;
|
|
35
34
|
const intervalEvent = new Event(()=>clearInterval(timerId));
|
|
36
|
-
timerId = setInterval(()=>intervalEvent(counter++), interval);
|
|
35
|
+
const timerId = setInterval(()=>intervalEvent(counter++), interval);
|
|
37
36
|
return intervalEvent;
|
|
38
37
|
}
|
|
39
38
|
listeners;
|
|
40
39
|
dispose;
|
|
41
40
|
constructor(dispose){
|
|
42
|
-
const
|
|
41
|
+
const listeners = [];
|
|
42
|
+
const fn = (...args)=>eventEmitter(listeners, ...args);
|
|
43
43
|
super(fn);
|
|
44
|
-
this.listeners =
|
|
44
|
+
this.listeners = listeners;
|
|
45
45
|
this.dispose = ()=>{
|
|
46
46
|
this.clear();
|
|
47
|
-
dispose
|
|
47
|
+
dispose?.();
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
50
|
get size() {
|
|
@@ -75,7 +75,7 @@ export class Event extends FunctionExt {
|
|
|
75
75
|
return this.on(oneTimeListener);
|
|
76
76
|
}
|
|
77
77
|
clear() {
|
|
78
|
-
this.listeners
|
|
78
|
+
this.listeners.splice(0);
|
|
79
79
|
}
|
|
80
80
|
toPromise() {
|
|
81
81
|
return new Promise((resolve)=>this.once((...args)=>resolve(args)));
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["type MaybePromise<T> = Promise<T> | PromiseLike<T> | T;\n\nexport interface Unsubscribe {\n (): void;\n}\n\nexport interface Listener<T extends
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["type MaybePromise<T> = Promise<T> | PromiseLike<T> | T;\n\nexport interface Unsubscribe {\n (): void;\n}\n\nexport interface Listener<T extends unknown[]> {\n (...args: T): void;\n}\n\nexport interface Dispose {\n (): void;\n}\n\nexport interface Filter<T extends unknown[]> {\n (...args: T): MaybePromise<boolean>;\n}\n\nexport interface Mapper<T extends unknown[], R> {\n (...args: T): R;\n}\n\nexport interface Reducer<T extends unknown[], R> {\n (value: R, ...args: T): R;\n}\n\nexport type Listeners<T extends unknown[]> = Listener<T>[];\n\nclass FunctionExt extends Function {\n constructor(func: Function) {\n super();\n return Object.setPrototypeOf(func, new.target.prototype);\n }\n}\n\nexport interface Dismiss {\n (): Promise<void> | void;\n}\n\nexport class Dismiss extends FunctionExt {\n constructor(dismiss: Unsubscribe) {\n super(dismiss);\n }\n async after(process: () => MaybePromise<unknown>) {\n await process();\n this();\n }\n afterTimes(count: number) {\n return () => {\n if (!--count) {\n this();\n }\n };\n }\n}\n\nconst eventEmitter = async <A extends unknown[]>(listeners: Listeners<A>, ...args: A) => {\n return Promise.allSettled(listeners.map((listener) => listener(...args)));\n};\n\nexport interface Event<T extends unknown[]> {\n (...args: T): Promise<void> | void;\n}\n\nexport class Event<T extends unknown[]> extends FunctionExt {\n static merge<T extends unknown[][]>(\n ...events: {\n [K in keyof T]: Event<T[K]>;\n }\n ) {\n const mergedEvent = new Event<T[number]>();\n events.forEach((event) => event.on(mergedEvent));\n return mergedEvent;\n }\n\n static interval(interval: number) {\n let counter = 0;\n const intervalEvent = new Event<[number]>(() => clearInterval(timerId));\n const timerId: NodeJS.Timer = setInterval(() => intervalEvent(counter++), interval);\n return intervalEvent;\n }\n\n private listeners: Listeners<T>;\n readonly dispose: Dispose;\n\n constructor(dispose?: Dispose) {\n const listeners: Listeners<T> = [];\n const fn = (...args: T) => eventEmitter(listeners, ...args);\n\n super(fn);\n this.listeners = listeners;\n this.dispose = () => {\n this.clear();\n dispose?.();\n };\n }\n\n get size(): number {\n return this.listeners.length;\n }\n\n lacks(listener: Listener<T>): boolean {\n return this.listeners.indexOf(listener) === -1;\n }\n\n has(listener: Listener<T>): boolean {\n return this.listeners.indexOf(listener) !== -1;\n }\n\n off(listener: Listener<T>): void {\n let index = this.listeners.indexOf(listener);\n while (~index) {\n this.listeners.splice(index, 1);\n index = this.listeners.indexOf(listener);\n }\n }\n\n on(listener: Listener<T>): Dismiss {\n this.listeners.push(listener);\n return new Dismiss(() => this.off(listener));\n }\n\n once(listener: Listener<T>): Dismiss {\n const oneTimeListener = (...args: T) => {\n this.off(oneTimeListener);\n listener(...args);\n };\n return this.on(oneTimeListener);\n }\n\n clear() {\n this.listeners.splice(0);\n }\n\n toPromise(): Promise<T> {\n return new Promise((resolve) => this.once((...args) => resolve(args)));\n }\n\n filter(filter: Filter<T>) {\n const dispose = this.on(async (...args) => {\n if (filteredEvent.size > 0 && (await filter(...args))) {\n filteredEvent(...args);\n }\n });\n const filteredEvent = new Event(dispose);\n return filteredEvent;\n }\n\n map<R>(mapper: Mapper<T, R>) {\n const dispose = this.on(async (...args) => {\n if (mappedEvent.size > 0) {\n const value = await mapper(...args);\n mappedEvent(value);\n }\n });\n const mappedEvent = new Event(dispose);\n return mappedEvent;\n }\n\n reduce<R>(reducer: Reducer<T, R>, init: R) {\n let value = init;\n const dispose = this.on(async (...args) => {\n if (reducedEvent.size > 0) {\n value = await reducer(value, ...args);\n reducedEvent(value);\n }\n });\n const reducedEvent = new Event(dispose);\n return reducedEvent;\n }\n}\n\nexport const once = <T extends any[]>(event: Event<T>): Promise<T> => {\n return new Promise((resolve) => event.once((...args) => resolve(args)));\n};\n\nexport default function createEvent<T extends any[]>() {\n return new Event<T>();\n}\n"],"names":["FunctionExt","Function","constructor","func","Object","setPrototypeOf","prototype","Dismiss","dismiss","after","process","afterTimes","count","eventEmitter","listeners","args","Promise","allSettled","map","listener","Event","merge","events","mergedEvent","forEach","event","on","interval","counter","intervalEvent","clearInterval","timerId","setInterval","dispose","fn","clear","size","length","lacks","indexOf","has","off","index","splice","push","once","oneTimeListener","toPromise","resolve","filter","filteredEvent","mapper","mappedEvent","value","reduce","reducer","init","reducedEvent","createEvent"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "evnty",
|
|
3
3
|
"description": "0-Deps, simple, fast, for browser and node js anonymous event library",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.1.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
7
7
|
"main": "build/index.cjs",
|
|
@@ -46,17 +46,14 @@
|
|
|
46
46
|
},
|
|
47
47
|
"homepage": "https://github.com/3axap4eHko/evnty#readme",
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@swc/core": "^1.3.44",
|
|
50
49
|
"@swc/jest": "^0.2.24",
|
|
51
50
|
"@types/jest": "^29.5.0",
|
|
52
|
-
"@types/node": "^18.15.11",
|
|
53
51
|
"@typescript-eslint/eslint-plugin": "^5.57.0",
|
|
54
52
|
"@typescript-eslint/parser": "^5.57.0",
|
|
55
53
|
"eslint": "^8.37.0",
|
|
56
54
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
57
55
|
"eslint-config-prettier": "^8.8.0",
|
|
58
56
|
"eslint-plugin-import": "^2.27.5",
|
|
59
|
-
"fast-glob": "^3.2.12",
|
|
60
57
|
"husky": "^8.0.3",
|
|
61
58
|
"inop": "^0.2.5",
|
|
62
59
|
"jest": "^29.5.0",
|
package/src/index.ts
CHANGED
|
@@ -4,7 +4,7 @@ export interface Unsubscribe {
|
|
|
4
4
|
(): void;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
-
export interface Listener<T extends
|
|
7
|
+
export interface Listener<T extends unknown[]> {
|
|
8
8
|
(...args: T): void;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -12,19 +12,19 @@ export interface Dispose {
|
|
|
12
12
|
(): void;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export interface Filter<T extends
|
|
15
|
+
export interface Filter<T extends unknown[]> {
|
|
16
16
|
(...args: T): MaybePromise<boolean>;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export interface Mapper<T extends
|
|
19
|
+
export interface Mapper<T extends unknown[], R> {
|
|
20
20
|
(...args: T): R;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export interface Reducer<T extends
|
|
23
|
+
export interface Reducer<T extends unknown[], R> {
|
|
24
24
|
(value: R, ...args: T): R;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
export type Listeners<T extends
|
|
27
|
+
export type Listeners<T extends unknown[]> = Listener<T>[];
|
|
28
28
|
|
|
29
29
|
class FunctionExt extends Function {
|
|
30
30
|
constructor(func: Function) {
|
|
@@ -41,7 +41,7 @@ export class Dismiss extends FunctionExt {
|
|
|
41
41
|
constructor(dismiss: Unsubscribe) {
|
|
42
42
|
super(dismiss);
|
|
43
43
|
}
|
|
44
|
-
async after(process: () => MaybePromise<
|
|
44
|
+
async after(process: () => MaybePromise<unknown>) {
|
|
45
45
|
await process();
|
|
46
46
|
this();
|
|
47
47
|
}
|
|
@@ -54,28 +54,29 @@ export class Dismiss extends FunctionExt {
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
const eventEmitter = async <A extends
|
|
58
|
-
return Promise.allSettled(listeners
|
|
57
|
+
const eventEmitter = async <A extends unknown[]>(listeners: Listeners<A>, ...args: A) => {
|
|
58
|
+
return Promise.allSettled(listeners.map((listener) => listener(...args)));
|
|
59
59
|
};
|
|
60
60
|
|
|
61
|
-
export interface Event<T extends
|
|
61
|
+
export interface Event<T extends unknown[]> {
|
|
62
62
|
(...args: T): Promise<void> | void;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
export class Event<T extends unknown[]> extends FunctionExt {
|
|
66
|
+
static merge<T extends unknown[][]>(
|
|
67
|
+
...events: {
|
|
68
|
+
[K in keyof T]: Event<T[K]>;
|
|
69
|
+
}
|
|
70
|
+
) {
|
|
71
|
+
const mergedEvent = new Event<T[number]>();
|
|
72
|
+
events.forEach((event) => event.on(mergedEvent));
|
|
71
73
|
return mergedEvent;
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
static interval(interval: number) {
|
|
75
|
-
let timerId: any = 0;
|
|
76
77
|
let counter = 0;
|
|
77
78
|
const intervalEvent = new Event<[number]>(() => clearInterval(timerId));
|
|
78
|
-
timerId = setInterval(() => intervalEvent(counter++), interval);
|
|
79
|
+
const timerId: NodeJS.Timer = setInterval(() => intervalEvent(counter++), interval);
|
|
79
80
|
return intervalEvent;
|
|
80
81
|
}
|
|
81
82
|
|
|
@@ -83,12 +84,14 @@ export class Event<T extends any[]> extends FunctionExt {
|
|
|
83
84
|
readonly dispose: Dispose;
|
|
84
85
|
|
|
85
86
|
constructor(dispose?: Dispose) {
|
|
86
|
-
const
|
|
87
|
+
const listeners: Listeners<T> = [];
|
|
88
|
+
const fn = (...args: T) => eventEmitter(listeners, ...args);
|
|
89
|
+
|
|
87
90
|
super(fn);
|
|
88
|
-
this.listeners =
|
|
91
|
+
this.listeners = listeners;
|
|
89
92
|
this.dispose = () => {
|
|
90
93
|
this.clear();
|
|
91
|
-
dispose
|
|
94
|
+
dispose?.();
|
|
92
95
|
};
|
|
93
96
|
}
|
|
94
97
|
|
|
@@ -126,7 +129,7 @@ export class Event<T extends any[]> extends FunctionExt {
|
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
clear() {
|
|
129
|
-
this.listeners
|
|
132
|
+
this.listeners.splice(0);
|
|
130
133
|
}
|
|
131
134
|
|
|
132
135
|
toPromise(): Promise<T> {
|