Comparing version 0.4.0 to 0.5.0
@@ -5,4 +5,4 @@ declare type Unsubscribe = () => void; | ||
declare type Filter = (...args: any[]) => boolean; | ||
declare type Mapper = <T = any>(...args: any[]) => T; | ||
declare type Reducer = <T = any>(value: any, ...args: any[]) => T; | ||
declare type Mapper<T = any[]> = (...args: any[]) => T; | ||
declare type Reducer<T = any[]> = (value: T, ...args: any[]) => T; | ||
declare class FunctionExt extends Function { | ||
@@ -13,2 +13,3 @@ constructor(func: Function); | ||
static merge(...events: Event[]): Event; | ||
static interval(interval: number): Event; | ||
private listeners; | ||
@@ -23,7 +24,8 @@ readonly dispose: Dispose; | ||
clear(): void; | ||
toPromise(): Promise<any[]>; | ||
filter(filter: Filter): Event; | ||
map(mapper: Mapper): Event; | ||
reduce(reducer: Reducer, init: any): Event; | ||
map<T>(mapper: Mapper<T>): Event; | ||
reduce<T>(reducer: Reducer<T>, init: T): Event; | ||
} | ||
export default function event(): Event; | ||
export {}; |
@@ -26,3 +26,6 @@ "use strict"; | ||
this.listeners = listeners; | ||
this.dispose = dispose; | ||
this.dispose = () => { | ||
this.clear(); | ||
dispose && dispose(); | ||
}; | ||
} | ||
@@ -34,2 +37,9 @@ static merge(...events) { | ||
} | ||
static interval(interval) { | ||
let timerId = 0; | ||
let counter = 0; | ||
const intervalEvent = new Event(() => clearInterval(timerId)); | ||
timerId = setInterval(() => intervalEvent(counter++), interval); | ||
return intervalEvent; | ||
} | ||
get size() { | ||
@@ -61,2 +71,5 @@ return this.listeners.size; | ||
} | ||
toPromise() { | ||
return new Promise(resolve => this.once((...args) => resolve(args))); | ||
} | ||
filter(filter) { | ||
@@ -63,0 +76,0 @@ const dispose = this.on((...args) => __awaiter(this, void 0, void 0, function* () { |
{ | ||
"name": "evnty", | ||
"version": "0.4.0", | ||
"version": "0.5.0", | ||
"description": "0-Deps, simple, fast, for browser and node js anonymous event library", | ||
@@ -5,0 +5,0 @@ "main": "build/index.js", |
@@ -84,2 +84,14 @@ import event, { Event } from '../index'; | ||
it('Should return event promise', async () => { | ||
const listener = jest.fn(); | ||
const event = new Event(); | ||
event.on(listener); | ||
expect(listener).not.toBeCalled(); | ||
const promise = event.toPromise(); | ||
event('test'); | ||
const result = await promise; | ||
expect(result).toEqual(['test']); | ||
expect(listener).toBeCalledWith('test'); | ||
}); | ||
it('Should create filtered event', async () => { | ||
@@ -183,2 +195,16 @@ const listener = jest.fn(); | ||
}); | ||
it('Should create interval events', async () => { | ||
const listener = jest.fn(); | ||
const event = Event.interval(10); | ||
event.on(listener); | ||
await event.toPromise(); | ||
expect(listener).toBeCalledWith(0); | ||
event.dispose(); | ||
const result = await Promise.race([ | ||
new Promise(resolve => setTimeout(resolve, 100, null)), | ||
event.toPromise(), | ||
]); | ||
expect(result).toEqual(null); | ||
}); | ||
}); |
@@ -6,4 +6,4 @@ type Unsubscribe = () => void; | ||
type Filter = (...args: any[]) => boolean; | ||
type Mapper = <T = any>(...args: any[]) => T; | ||
type Reducer = <T = any>(value: any, ...args: any[]) => T; | ||
type Mapper<T = any[]> = (...args: any[]) => T; | ||
type Reducer<T = any[]> = (value: T, ...args: any[]) => T; | ||
@@ -28,2 +28,10 @@ class FunctionExt extends Function { | ||
static interval(interval: number) { | ||
let timerId = 0; | ||
let counter = 0; | ||
const intervalEvent = new Event(() => clearInterval(timerId)); | ||
timerId = setInterval(() => intervalEvent(counter++), interval); | ||
return intervalEvent; | ||
} | ||
private listeners: Listeners; | ||
@@ -36,3 +44,6 @@ readonly dispose: Dispose; | ||
this.listeners = listeners; | ||
this.dispose = dispose; | ||
this.dispose = () => { | ||
this.clear(); | ||
dispose && dispose(); | ||
}; | ||
} | ||
@@ -69,2 +80,6 @@ | ||
toPromise(): Promise<any[]> { | ||
return new Promise(resolve => this.once((...args) => resolve(args))); | ||
} | ||
filter(filter: Filter) { | ||
@@ -80,3 +95,3 @@ const dispose = this.on(async (...args) => { | ||
map(mapper: Mapper) { | ||
map<T>(mapper: Mapper<T>) { | ||
const dispose = this.on(async (...args) => { | ||
@@ -92,4 +107,4 @@ if (mappedEvent.size > 0) { | ||
reduce(reducer: Reducer, init: any) { | ||
let value: any = init; | ||
reduce<T>(reducer: Reducer<T>, init: T) { | ||
let value: T = init; | ||
const dispose = this.on(async (...args) => { | ||
@@ -96,0 +111,0 @@ if (reducedEvent.size > 0) { |
Sorry, the diff of this file is not supported yet
21110
440