evnty 1.0.19 → 1.1.0

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
@@ -45,30 +45,30 @@ class Dismiss extends FunctionExt {
45
45
  }
46
46
  }
47
47
  const eventEmitter = async (listeners, ...args)=>{
48
- return Promise.allSettled(listeners().map((listener)=>listener(...args)));
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((...args)=>mergedEvent(...args)));
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 fn = eventEmitter.bind(null, ()=>this.listeners);
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 && 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)));
@@ -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\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 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 = [];\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","timerId","counter","intervalEvent","clearInterval","setInterval","dispose","fn","bind","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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"}
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 any[]> {
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 any[]> {
11
+ export interface Filter<T extends unknown[]> {
12
12
  (...args: T): MaybePromise<boolean>;
13
13
  }
14
- export interface Mapper<T extends any[], R> {
14
+ export interface Mapper<T extends unknown[], R> {
15
15
  (...args: T): R;
16
16
  }
17
- export interface Reducer<T extends any[], R> {
17
+ export interface Reducer<T extends unknown[], R> {
18
18
  (value: R, ...args: T): R;
19
19
  }
20
- export type Listeners<T extends any[]> = Listener<T>[];
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<any>): Promise<void>;
29
+ after(process: () => MaybePromise<unknown>): Promise<void>;
30
30
  afterTimes(count: number): () => void;
31
31
  }
32
- export interface Event<T extends any[]> {
32
+ export interface Event<T extends unknown[]> {
33
33
  (...args: T): Promise<void> | void;
34
34
  }
35
- type EventTypes<T extends Event<any>[]> = T extends Event<infer E>[] ? E : never;
36
- export declare class Event<T extends any[]> extends FunctionExt {
37
- static merge<E extends Event<unknown[]>[], ET extends any[] = EventTypes<E>>(...events: E): Event<ET>;
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<any[]>;
51
- map<R>(mapper: Mapper<T, R>): Event<any[]>;
52
- reduce<R>(reducer: Reducer<T, R>, init: R): Event<any[]>;
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().map((listener)=>listener(...args)));
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((...args)=>mergedEvent(...args)));
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 fn = eventEmitter.bind(null, ()=>this.listeners);
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 && 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)));
@@ -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\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 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 = [];\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","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 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.0.19",
4
+ "version": "1.1.0",
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 any[]> {
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 any[]> {
15
+ export interface Filter<T extends unknown[]> {
16
16
  (...args: T): MaybePromise<boolean>;
17
17
  }
18
18
 
19
- export interface Mapper<T extends any[], R> {
19
+ export interface Mapper<T extends unknown[], R> {
20
20
  (...args: T): R;
21
21
  }
22
22
 
23
- export interface Reducer<T extends any[], R> {
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 any[]> = Listener<T>[];
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<any>) {
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 any[]>(listeners: () => Listeners<A>, ...args: A) => {
58
- return Promise.allSettled(listeners().map((listener) => listener(...args)));
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 any[]> {
61
+ export interface Event<T extends unknown[]> {
62
62
  (...args: T): Promise<void> | void;
63
63
  }
64
64
 
65
- type EventTypes<T extends Event<any>[]> = T extends Event<infer E>[] ? E : never;
66
-
67
- export class Event<T extends any[]> extends FunctionExt {
68
- static merge<E extends Event<unknown[]>[], ET extends any[] = EventTypes<E>>(...events: E) {
69
- const mergedEvent = new Event<ET>();
70
- events.forEach((event) => event.on((...args: ET) => mergedEvent(...args)));
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 fn: (...args: T) => Promise<void> = eventEmitter.bind(null, () => this.listeners);
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 && 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> {