evnty 1.0.0 → 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 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 g = {
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
- function eventEmitter(listeners) {
394
- for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
395
- args[_key - 1] = arguments[_key];
396
- }
397
- return Promise.all(listeners.map(function(listener) {
398
- return listener.apply(void 0, _toConsumableArray(args));
399
- })).then(function() {
400
- return void 0;
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 listeners = [];
411
- var fn = eventEmitter.bind(null, listeners);
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 = 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 !this.lacks(listener);
449
+ return this.listeners.indexOf(listener) !== -1;
439
450
  }
440
451
  },
441
452
  {
442
453
  key: "off",
443
454
  value: function off(listener) {
444
- var index = this.listeners.indexOf(listener);
445
- if (index !== -1) {
446
- this.listeners.splice(index, 1);
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
- if (this.lacks(listener)) {
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.splice(0);
487
+ this.listeners = [];
480
488
  }
481
489
  },
482
490
  {
@@ -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\nfunction eventEmitter<A extends any[]>(listeners: Listeners<A>, ...args: A) {\n return Promise.all(listeners.map((listener) => listener(...args))).then(() => void 0);\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 listeners: Listeners<T> = [];\n const fn: (...args: T) => Promise<void> = eventEmitter.bind(null, listeners);\n super(fn);\n this.listeners = 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.lacks(listener);\n }\n\n off(listener: Listener<T>): void {\n const index = this.listeners.indexOf(listener);\n if (index !== -1) {\n this.listeners.splice(index, 1);\n }\n }\n\n on(listener: Listener<T>): Dismiss {\n if (this.lacks(listener)) {\n this.listeners.push(listener);\n }\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","func","Object","setPrototypeOf","prototype","Function","dismiss","after","process","afterTimes","count","eventEmitter","listeners","args","Promise","all","map","listener","then","dispose","fn","bind","clear","size","length","lacks","indexOf","has","off","index","splice","on","push","oneTimeListener","toPromise","resolve","filter","filteredEvent","mapper","value","mappedEvent","reduce","reducer","init","reducedEvent","merge","events","mergedEvent","forEach","event","interval","timerId","counter","intervalEvent","clearInterval","setInterval"],"mappings":"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"}
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
- function eventEmitter(listeners, ...args) {
24
- return Promise.all(listeners.map((listener)=>listener(...args))).then(()=>void 0);
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 listeners = [];
43
- const fn = eventEmitter.bind(null, listeners);
42
+ const fn = eventEmitter.bind(null, ()=>this.listeners);
44
43
  super(fn);
45
- this.listeners = 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 !this.lacks(listener);
57
+ return this.listeners.indexOf(listener) !== -1;
59
58
  }
60
59
  off(listener) {
61
- const index = this.listeners.indexOf(listener);
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
- if (this.lacks(listener)) {
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.splice(0);
74
+ this.listeners = [];
81
75
  }
82
76
  toPromise() {
83
77
  return new Promise((resolve)=>this.once((...args)=>resolve(args)));
@@ -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\nfunction eventEmitter<A extends any[]>(listeners: Listeners<A>, ...args: A) {\n return Promise.all(listeners.map((listener) => listener(...args))).then(() => void 0);\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 listeners: Listeners<T> = [];\n const fn: (...args: T) => Promise<void> = eventEmitter.bind(null, listeners);\n super(fn);\n this.listeners = 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.lacks(listener);\n }\n\n off(listener: Listener<T>): void {\n const index = this.listeners.indexOf(listener);\n if (index !== -1) {\n this.listeners.splice(index, 1);\n }\n }\n\n on(listener: Listener<T>): Dismiss {\n if (this.lacks(listener)) {\n this.listeners.push(listener);\n }\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","all","map","listener","then","Event","merge","events","mergedEvent","forEach","event","on","interval","timerId","counter","intervalEvent","clearInterval","setInterval","dispose","fn","bind","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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"}
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.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.41",
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.5",
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
- function eventEmitter<A extends any[]>(listeners: Listeners<A>, ...args: A) {
58
- return Promise.all(listeners.map((listener) => listener(...args))).then(() => void 0);
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 listeners: Listeners<T> = [];
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 = 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 !this.lacks(listener);
104
+ return this.listeners.indexOf(listener) !== -1;
106
105
  }
107
106
 
108
107
  off(listener: Listener<T>): void {
109
- const index = this.listeners.indexOf(listener);
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
- if (this.lacks(listener)) {
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.splice(0);
125
+ this.listeners = [];
132
126
  }
133
127
 
134
128
  toPromise(): Promise<T> {