evnty 1.0.1 → 1.0.2
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 +31 -23
- package/build/index.cjs.map +1 -1
- package/build/index.js +9 -15
- package/build/index.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +9 -15
package/build/index.cjs
CHANGED
|
@@ -248,13 +248,13 @@ var __generator = (void 0) && (void 0).__generator || function(thisArg, body) {
|
|
|
248
248
|
trys: [],
|
|
249
249
|
ops: []
|
|
250
250
|
};
|
|
251
|
-
return
|
|
251
|
+
return(g = {
|
|
252
252
|
next: verb(0),
|
|
253
253
|
"throw": verb(1),
|
|
254
254
|
"return": verb(2)
|
|
255
255
|
}, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
256
256
|
return this;
|
|
257
|
-
}), g;
|
|
257
|
+
}), g);
|
|
258
258
|
function verb(n) {
|
|
259
259
|
return function(v) {
|
|
260
260
|
return step([
|
|
@@ -390,16 +390,26 @@ var Dismiss = /*#__PURE__*/ function(FunctionExt) {
|
|
|
390
390
|
]);
|
|
391
391
|
return Dismiss;
|
|
392
392
|
}(FunctionExt);
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
393
|
+
var eventEmitter = function() {
|
|
394
|
+
var _ref = _asyncToGenerator(function(listeners) {
|
|
395
|
+
var _len, args, _key;
|
|
396
|
+
var _arguments = arguments;
|
|
397
|
+
return __generator(this, function(_state) {
|
|
398
|
+
for(_len = _arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
|
|
399
|
+
args[_key - 1] = _arguments[_key];
|
|
400
|
+
}
|
|
401
|
+
return [
|
|
402
|
+
2,
|
|
403
|
+
Promise.allSettled(listeners().map(function(listener) {
|
|
404
|
+
return listener.apply(void 0, _toConsumableArray(args));
|
|
405
|
+
}))
|
|
406
|
+
];
|
|
407
|
+
});
|
|
401
408
|
});
|
|
402
|
-
|
|
409
|
+
return function eventEmitter(listeners) {
|
|
410
|
+
return _ref.apply(this, arguments);
|
|
411
|
+
};
|
|
412
|
+
}();
|
|
403
413
|
var Event = /*#__PURE__*/ function(FunctionExt) {
|
|
404
414
|
"use strict";
|
|
405
415
|
_inherits(Event, FunctionExt);
|
|
@@ -407,12 +417,13 @@ var Event = /*#__PURE__*/ function(FunctionExt) {
|
|
|
407
417
|
function Event(dispose) {
|
|
408
418
|
_classCallCheck(this, Event);
|
|
409
419
|
var _this;
|
|
410
|
-
var
|
|
411
|
-
|
|
420
|
+
var fn = eventEmitter.bind(null, function() {
|
|
421
|
+
return _this.listeners;
|
|
422
|
+
});
|
|
412
423
|
_this = _super.call(this, fn);
|
|
413
424
|
_defineProperty(_assertThisInitialized(_this), "listeners", void 0);
|
|
414
425
|
_defineProperty(_assertThisInitialized(_this), "dispose", void 0);
|
|
415
|
-
_this.listeners =
|
|
426
|
+
_this.listeners = [];
|
|
416
427
|
_this.dispose = function() {
|
|
417
428
|
_this.clear();
|
|
418
429
|
dispose && dispose();
|
|
@@ -435,25 +446,22 @@ var Event = /*#__PURE__*/ function(FunctionExt) {
|
|
|
435
446
|
{
|
|
436
447
|
key: "has",
|
|
437
448
|
value: function has(listener) {
|
|
438
|
-
return
|
|
449
|
+
return this.listeners.indexOf(listener) !== -1;
|
|
439
450
|
}
|
|
440
451
|
},
|
|
441
452
|
{
|
|
442
453
|
key: "off",
|
|
443
454
|
value: function off(listener) {
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
}
|
|
455
|
+
this.listeners = this.listeners.filter(function(l) {
|
|
456
|
+
return l !== listener;
|
|
457
|
+
});
|
|
448
458
|
}
|
|
449
459
|
},
|
|
450
460
|
{
|
|
451
461
|
key: "on",
|
|
452
462
|
value: function on(listener) {
|
|
453
463
|
var _this = this;
|
|
454
|
-
|
|
455
|
-
this.listeners.push(listener);
|
|
456
|
-
}
|
|
464
|
+
this.listeners.push(listener);
|
|
457
465
|
return new Dismiss(function() {
|
|
458
466
|
return _this.off(listener);
|
|
459
467
|
});
|
|
@@ -476,7 +484,7 @@ var Event = /*#__PURE__*/ function(FunctionExt) {
|
|
|
476
484
|
{
|
|
477
485
|
key: "clear",
|
|
478
486
|
value: function clear() {
|
|
479
|
-
this.listeners
|
|
487
|
+
this.listeners = [];
|
|
480
488
|
}
|
|
481
489
|
},
|
|
482
490
|
{
|
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 any[]> {\n (...args: T): void;\n}\n\nexport interface Dispose {\n (): void;\n}\n\nexport interface Filter<T extends any[]> {\n (...args: T): MaybePromise<boolean>;\n}\n\nexport interface Mapper<T extends any[], R> {\n (...args: T): R;\n}\n\nexport interface Reducer<T extends any[], R> {\n (value: R, ...args: T): R;\n}\n\nexport type Listeners<T extends any[]> = 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<any>) {\n await process();\n this();\n }\n afterTimes(count: number) {\n return () => {\n if (!--count) {\n this();\n }\n };\n }\n}\n\
|
|
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 any[]> {\n (...args: T): void;\n}\n\nexport interface Dispose {\n (): void;\n}\n\nexport interface Filter<T extends any[]> {\n (...args: T): MaybePromise<boolean>;\n}\n\nexport interface Mapper<T extends any[], R> {\n (...args: T): R;\n}\n\nexport interface Reducer<T extends any[], R> {\n (value: R, ...args: T): R;\n}\n\nexport type Listeners<T extends any[]> = 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<any>) {\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 any[]>(listeners: () => Listeners<A>, ...args: A) => {\n return Promise.allSettled(listeners().map((listener) => listener(...args)));\n};\n\nexport interface Event<T extends any[]> {\n (...args: T): Promise<void> | void;\n}\n\ntype EventTypes<T extends Event<any>[]> = T extends Event<infer E>[] ? E : never;\n\nexport class Event<T extends any[]> extends FunctionExt {\n static merge<E extends Event<unknown[]>[], ET extends any[] = EventTypes<E>>(...events: E) {\n const mergedEvent = new Event<ET>();\n events.forEach((event) => event.on((...args: ET) => mergedEvent(...args)));\n return mergedEvent;\n }\n\n static interval(interval: number) {\n let timerId: any = 0;\n let counter = 0;\n const intervalEvent = new Event<[number]>(() => clearInterval(timerId));\n timerId = 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 fn: (...args: T) => Promise<void> = eventEmitter.bind(null, () => this.listeners);\n super(fn);\n this.listeners = [];\n this.dispose = () => {\n this.clear();\n dispose && 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 this.listeners = this.listeners.filter((l) => l !== listener);\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 = [];\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","func","Object","setPrototypeOf","prototype","Function","dismiss","after","process","afterTimes","count","eventEmitter","listeners","args","Promise","allSettled","map","listener","dispose","fn","bind","clear","size","length","lacks","indexOf","has","off","filter","l","on","push","oneTimeListener","toPromise","resolve","filteredEvent","mapper","value","mappedEvent","reduce","reducer","init","reducedEvent","merge","events","mergedEvent","forEach","event","interval","timerId","counter","intervalEvent","clearInterval","setInterval"],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -20,9 +20,9 @@ export class Dismiss extends FunctionExt {
|
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
return Promise.
|
|
25
|
-
}
|
|
23
|
+
const eventEmitter = async (listeners, ...args)=>{
|
|
24
|
+
return Promise.allSettled(listeners().map((listener)=>listener(...args)));
|
|
25
|
+
};
|
|
26
26
|
export class Event extends FunctionExt {
|
|
27
27
|
static merge(...events) {
|
|
28
28
|
const mergedEvent = new Event();
|
|
@@ -39,10 +39,9 @@ export class Event extends FunctionExt {
|
|
|
39
39
|
listeners;
|
|
40
40
|
dispose;
|
|
41
41
|
constructor(dispose){
|
|
42
|
-
const
|
|
43
|
-
const fn = eventEmitter.bind(null, listeners);
|
|
42
|
+
const fn = eventEmitter.bind(null, ()=>this.listeners);
|
|
44
43
|
super(fn);
|
|
45
|
-
this.listeners =
|
|
44
|
+
this.listeners = [];
|
|
46
45
|
this.dispose = ()=>{
|
|
47
46
|
this.clear();
|
|
48
47
|
dispose && dispose();
|
|
@@ -55,18 +54,13 @@ export class Event extends FunctionExt {
|
|
|
55
54
|
return this.listeners.indexOf(listener) === -1;
|
|
56
55
|
}
|
|
57
56
|
has(listener) {
|
|
58
|
-
return
|
|
57
|
+
return this.listeners.indexOf(listener) !== -1;
|
|
59
58
|
}
|
|
60
59
|
off(listener) {
|
|
61
|
-
|
|
62
|
-
if (index !== -1) {
|
|
63
|
-
this.listeners.splice(index, 1);
|
|
64
|
-
}
|
|
60
|
+
this.listeners = this.listeners.filter((l)=>l !== listener);
|
|
65
61
|
}
|
|
66
62
|
on(listener) {
|
|
67
|
-
|
|
68
|
-
this.listeners.push(listener);
|
|
69
|
-
}
|
|
63
|
+
this.listeners.push(listener);
|
|
70
64
|
return new Dismiss(()=>this.off(listener));
|
|
71
65
|
}
|
|
72
66
|
once(listener) {
|
|
@@ -77,7 +71,7 @@ export class Event extends FunctionExt {
|
|
|
77
71
|
return this.on(oneTimeListener);
|
|
78
72
|
}
|
|
79
73
|
clear() {
|
|
80
|
-
this.listeners
|
|
74
|
+
this.listeners = [];
|
|
81
75
|
}
|
|
82
76
|
toPromise() {
|
|
83
77
|
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 any[]> {\n (...args: T): void;\n}\n\nexport interface Dispose {\n (): void;\n}\n\nexport interface Filter<T extends any[]> {\n (...args: T): MaybePromise<boolean>;\n}\n\nexport interface Mapper<T extends any[], R> {\n (...args: T): R;\n}\n\nexport interface Reducer<T extends any[], R> {\n (value: R, ...args: T): R;\n}\n\nexport type Listeners<T extends any[]> = 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<any>) {\n await process();\n this();\n }\n afterTimes(count: number) {\n return () => {\n if (!--count) {\n this();\n }\n };\n }\n}\n\
|
|
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 any[]> {\n (...args: T): void;\n}\n\nexport interface Dispose {\n (): void;\n}\n\nexport interface Filter<T extends any[]> {\n (...args: T): MaybePromise<boolean>;\n}\n\nexport interface Mapper<T extends any[], R> {\n (...args: T): R;\n}\n\nexport interface Reducer<T extends any[], R> {\n (value: R, ...args: T): R;\n}\n\nexport type Listeners<T extends any[]> = 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<any>) {\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 any[]>(listeners: () => Listeners<A>, ...args: A) => {\n return Promise.allSettled(listeners().map((listener) => listener(...args)));\n};\n\nexport interface Event<T extends any[]> {\n (...args: T): Promise<void> | void;\n}\n\ntype EventTypes<T extends Event<any>[]> = T extends Event<infer E>[] ? E : never;\n\nexport class Event<T extends any[]> extends FunctionExt {\n static merge<E extends Event<unknown[]>[], ET extends any[] = EventTypes<E>>(...events: E) {\n const mergedEvent = new Event<ET>();\n events.forEach((event) => event.on((...args: ET) => mergedEvent(...args)));\n return mergedEvent;\n }\n\n static interval(interval: number) {\n let timerId: any = 0;\n let counter = 0;\n const intervalEvent = new Event<[number]>(() => clearInterval(timerId));\n timerId = 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 fn: (...args: T) => Promise<void> = eventEmitter.bind(null, () => this.listeners);\n super(fn);\n this.listeners = [];\n this.dispose = () => {\n this.clear();\n dispose && 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 this.listeners = this.listeners.filter((l) => l !== listener);\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 = [];\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","timerId","counter","intervalEvent","clearInterval","setInterval","dispose","fn","bind","clear","size","length","lacks","indexOf","has","off","filter","l","push","once","oneTimeListener","toPromise","resolve","filteredEvent","mapper","mappedEvent","value","reduce","reducer","init","reducedEvent","createEvent"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "evnty",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "0-Deps, simple, fast, for browser and node js anonymous event library",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "build/index.cjs",
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
"homepage": "https://github.com/3axap4eHko/evnty#readme",
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@swc/cli": "^0.1.62",
|
|
46
|
-
"@swc/core": "^1.3.
|
|
46
|
+
"@swc/core": "^1.3.42",
|
|
47
47
|
"@swc/jest": "^0.2.24",
|
|
48
48
|
"@types/jest": "^29.5.0",
|
|
49
|
-
"@types/node": "^18.15.
|
|
49
|
+
"@types/node": "^18.15.6",
|
|
50
50
|
"@typescript-eslint/eslint-plugin": "^5.56.0",
|
|
51
51
|
"@typescript-eslint/parser": "^5.56.0",
|
|
52
52
|
"eslint": "^8.36.0",
|
package/src/index.ts
CHANGED
|
@@ -54,9 +54,9 @@ export class Dismiss extends FunctionExt {
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
return Promise.
|
|
59
|
-
}
|
|
57
|
+
const eventEmitter = async <A extends any[]>(listeners: () => Listeners<A>, ...args: A) => {
|
|
58
|
+
return Promise.allSettled(listeners().map((listener) => listener(...args)));
|
|
59
|
+
};
|
|
60
60
|
|
|
61
61
|
export interface Event<T extends any[]> {
|
|
62
62
|
(...args: T): Promise<void> | void;
|
|
@@ -83,10 +83,9 @@ export class Event<T extends any[]> extends FunctionExt {
|
|
|
83
83
|
readonly dispose: Dispose;
|
|
84
84
|
|
|
85
85
|
constructor(dispose?: Dispose) {
|
|
86
|
-
const
|
|
87
|
-
const fn: (...args: T) => Promise<void> = eventEmitter.bind(null, listeners);
|
|
86
|
+
const fn: (...args: T) => Promise<void> = eventEmitter.bind(null, () => this.listeners);
|
|
88
87
|
super(fn);
|
|
89
|
-
this.listeners =
|
|
88
|
+
this.listeners = [];
|
|
90
89
|
this.dispose = () => {
|
|
91
90
|
this.clear();
|
|
92
91
|
dispose && dispose();
|
|
@@ -102,20 +101,15 @@ export class Event<T extends any[]> extends FunctionExt {
|
|
|
102
101
|
}
|
|
103
102
|
|
|
104
103
|
has(listener: Listener<T>): boolean {
|
|
105
|
-
return
|
|
104
|
+
return this.listeners.indexOf(listener) !== -1;
|
|
106
105
|
}
|
|
107
106
|
|
|
108
107
|
off(listener: Listener<T>): void {
|
|
109
|
-
|
|
110
|
-
if (index !== -1) {
|
|
111
|
-
this.listeners.splice(index, 1);
|
|
112
|
-
}
|
|
108
|
+
this.listeners = this.listeners.filter((l) => l !== listener);
|
|
113
109
|
}
|
|
114
110
|
|
|
115
111
|
on(listener: Listener<T>): Dismiss {
|
|
116
|
-
|
|
117
|
-
this.listeners.push(listener);
|
|
118
|
-
}
|
|
112
|
+
this.listeners.push(listener);
|
|
119
113
|
return new Dismiss(() => this.off(listener));
|
|
120
114
|
}
|
|
121
115
|
|
|
@@ -128,7 +122,7 @@ export class Event<T extends any[]> extends FunctionExt {
|
|
|
128
122
|
}
|
|
129
123
|
|
|
130
124
|
clear() {
|
|
131
|
-
this.listeners
|
|
125
|
+
this.listeners = [];
|
|
132
126
|
}
|
|
133
127
|
|
|
134
128
|
toPromise(): Promise<T> {
|