Comparing version 0.6.22 to 0.7.0
export interface Unsubscribe { | ||
(): void; | ||
} | ||
export interface Listener { | ||
(...args: any[]): void; | ||
export interface Listener<T extends any[]> { | ||
(...args: T): void; | ||
} | ||
@@ -10,34 +10,37 @@ export interface Dispose { | ||
} | ||
export interface Filter { | ||
(...args: any[]): boolean; | ||
export interface Filter<T extends any[]> { | ||
(...args: T): boolean; | ||
} | ||
export interface Mapper<T = any[]> { | ||
(...args: any[]): T; | ||
export interface Mapper<T extends any[], R> { | ||
(...args: T): R; | ||
} | ||
export interface Reducer<T = any[]> { | ||
(value: T, ...args: any[]): T; | ||
export interface Reducer<T extends any[], R> { | ||
(value: R, ...args: T): R; | ||
} | ||
export interface Listeners extends Set<Listener> { | ||
} | ||
export declare type Listeners<T extends any[]> = Set<Listener<T>>; | ||
declare class FunctionExt extends Function { | ||
constructor(func: Function); | ||
} | ||
export declare class Event extends FunctionExt { | ||
static merge(...events: Event[]): Event; | ||
static interval(interval: number): Event; | ||
export interface Event<T extends any[]> { | ||
(...args: T): Promise<void> | void; | ||
} | ||
declare type EventTypes<T extends Event<any>[]> = T extends Event<infer E>[] ? E : never; | ||
export declare class Event<T extends any[]> extends FunctionExt { | ||
static merge<E extends Event<unknown[]>[], ET extends any[] = EventTypes<E>>(...events: E): Event<ET>; | ||
static interval(interval: number): Event<[number]>; | ||
private listeners; | ||
readonly dispose: Dispose; | ||
constructor(dispose?: Dispose); | ||
get size(): Number; | ||
has(listener: Listener): boolean; | ||
off(listener: Listener): void; | ||
on(listener: Listener): Unsubscribe; | ||
once(listener: Listener): Unsubscribe; | ||
get size(): number; | ||
has(listener: Listener<T>): boolean; | ||
off(listener: Listener<T>): void; | ||
on(listener: Listener<T>): Unsubscribe; | ||
once(listener: Listener<T>): Unsubscribe; | ||
clear(): void; | ||
toPromise(): Promise<any[]>; | ||
filter(filter: Filter): Event; | ||
map<T>(mapper: Mapper<T>): Event; | ||
reduce<T>(reducer: Reducer<T>, init: T): Event; | ||
toPromise(): Promise<T>; | ||
filter(filter: Filter<T>): Event<any[]>; | ||
map<R>(mapper: Mapper<T, R>): Event<any[]>; | ||
reduce<R>(reducer: Reducer<T, R>, init: R): Event<any[]>; | ||
} | ||
export default function event(): Event; | ||
export default function createEvent(): Event<any[]>; | ||
export {}; |
@@ -16,7 +16,7 @@ "use strict"; | ||
super(); | ||
return Object.setPrototypeOf(func, new.target.prototype); | ||
Object.setPrototypeOf(func, new.target.prototype); | ||
} | ||
} | ||
function eventEmitter(listeners, ...args) { | ||
return Promise.all([...listeners].map(listener => listener(...args))); | ||
return Promise.all([...listeners].map(listener => listener(...args))).then(() => { }); | ||
} | ||
@@ -26,3 +26,4 @@ class Event extends FunctionExt { | ||
const listeners = new Set(); | ||
super(eventEmitter.bind(null, listeners)); | ||
const fn = eventEmitter.bind(null, listeners); | ||
super(fn); | ||
this.listeners = listeners; | ||
@@ -55,3 +56,2 @@ this.dispose = () => { | ||
} | ||
; | ||
on(listener) { | ||
@@ -61,3 +61,2 @@ this.listeners.add(listener); | ||
} | ||
; | ||
once(listener) { | ||
@@ -70,3 +69,2 @@ const oneTimeListener = (...args) => { | ||
} | ||
; | ||
clear() { | ||
@@ -110,6 +108,6 @@ this.listeners.clear(); | ||
exports.Event = Event; | ||
function event() { | ||
function createEvent() { | ||
return new Event(); | ||
} | ||
exports.default = event; | ||
exports.default = createEvent; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "evnty", | ||
"version": "0.6.22", | ||
"version": "0.7.0", | ||
"description": "0-Deps, simple, fast, for browser and node js anonymous event library", | ||
@@ -10,3 +10,5 @@ "main": "build/index.js", | ||
"test": "jest", | ||
"test:cov": "COVERAGE=true jest" | ||
"test:cov": "COVERAGE=true jest", | ||
"lint": "eslint .", | ||
"prepare": "husky install" | ||
}, | ||
@@ -32,8 +34,17 @@ "repository": { | ||
"devDependencies": { | ||
"@types/jest": "^26.0.20", | ||
"jest": "^26.6.3", | ||
"ts-jest": "^26.5.1", | ||
"ts-node": "^9.1.1", | ||
"@types/jest": "^27.4.1", | ||
"@typescript-eslint/eslint-plugin": "^5.20.0", | ||
"@typescript-eslint/parser": "^5.20.0", | ||
"eslint": "^8.13.0", | ||
"eslint-config-airbnb-base": "^15.0.0", | ||
"eslint-config-prettier": "^8.5.0", | ||
"eslint-plugin-import": "^2.26.0", | ||
"husky": "^7.0.4", | ||
"jest": "^27.5.1", | ||
"prettier": "^2.6.2", | ||
"pretty-quick": "^3.1.3", | ||
"ts-jest": "^27.1.4", | ||
"ts-node": "^10.7.0", | ||
"typescript": "^4.1.5" | ||
} | ||
} |
@@ -79,4 +79,4 @@ # Evnty | ||
## License | ||
License [The MIT License](http://opensource.org/licenses/MIT) | ||
Copyright (c) 2021 Ivan Zakharchanka | ||
License [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | ||
Copyright (c) 2021-present Ivan Zakharchanka | ||
@@ -83,0 +83,0 @@ [npm-url]: https://www.npmjs.com/package/evnty |
@@ -1,2 +0,2 @@ | ||
import event, { Event } from '../index'; | ||
import createEvent, { Event } from '../index'; | ||
@@ -9,5 +9,9 @@ describe('Anonymous Event test suite', function () { | ||
it('Should be instantiable', () => { | ||
expect(() => event()).not.toThrow(); | ||
expect(() => createEvent()).not.toThrow(); | ||
}); | ||
it('Should be instantiable', () => { | ||
expect(() => createEvent()).not.toThrow(); | ||
}); | ||
it('Should call parent constructor', () => { | ||
@@ -14,0 +18,0 @@ const EventOriginal = Object.getPrototypeOf(Event); |
@@ -5,4 +5,4 @@ export interface Unsubscribe { | ||
export interface Listener { | ||
(...args: any[]): void; | ||
export interface Listener<T extends any[]> { | ||
(...args: T): void; | ||
} | ||
@@ -14,33 +14,37 @@ | ||
export interface Filter { | ||
(...args: any[]): boolean | ||
export interface Filter<T extends any[]> { | ||
(...args: T): boolean | ||
} | ||
export interface Mapper<T = any[]> { | ||
(...args: any[]): T; | ||
export interface Mapper<T extends any[], R> { | ||
(...args: T): R; | ||
} | ||
export interface Reducer<T = any[]> { | ||
(value: T, ...args: any[]): T | ||
export interface Reducer<T extends any[], R> { | ||
(value: R, ...args: T): R | ||
} | ||
export interface Listeners extends Set<Listener> { | ||
export type Listeners<T extends any[]> = Set<Listener<T>>; | ||
} | ||
class FunctionExt extends Function { | ||
constructor(func: Function) { | ||
super(); | ||
return Object.setPrototypeOf(func, new.target.prototype); | ||
Object.setPrototypeOf(func, new.target.prototype); | ||
} | ||
} | ||
function eventEmitter(listeners: Listeners, ...args: any[]) { | ||
return Promise.all([...listeners].map(listener => listener(...args))); | ||
function eventEmitter<A extends any[]>(listeners: Listeners<A>, ...args: A) { | ||
return Promise.all([...listeners].map(listener => listener(...args))).then(() => { }); | ||
} | ||
export class Event extends FunctionExt { | ||
static merge(...events: Event[]): Event { | ||
const mergedEvent = new Event(); | ||
events.forEach(event => event.on((...args) => mergedEvent(...args))); | ||
export interface Event<T extends any[]> { | ||
(...args: T): Promise<void> | void; | ||
} | ||
type EventTypes<T extends Event<any>[]> = T extends Event<infer E>[] ? E : never; | ||
export class Event<T extends any[]> extends FunctionExt { | ||
static merge<E extends Event<unknown[]>[], ET extends any[] = EventTypes<E>>(...events: E) { | ||
const mergedEvent = new Event<ET>(); | ||
events.forEach(event => event.on((...args: ET) => mergedEvent(...args))); | ||
return mergedEvent; | ||
@@ -52,3 +56,3 @@ } | ||
let counter = 0; | ||
const intervalEvent = new Event(() => clearInterval(timerId)); | ||
const intervalEvent = new Event<[number]>(() => clearInterval(timerId)); | ||
timerId = setInterval(() => intervalEvent(counter++), interval); | ||
@@ -58,8 +62,9 @@ return intervalEvent; | ||
private listeners: Listeners; | ||
private listeners: Listeners<T>; | ||
readonly dispose: Dispose; | ||
constructor(dispose?: Dispose) { | ||
const listeners = new Set<Listener>(); | ||
super(eventEmitter.bind(null, listeners)); | ||
const listeners = new Set<Listener<T>>(); | ||
const fn: (...args: T) => Promise<void> = eventEmitter.bind(null, listeners); | ||
super(fn); | ||
this.listeners = listeners; | ||
@@ -72,21 +77,21 @@ this.dispose = () => { | ||
get size(): Number { | ||
get size(): number { | ||
return this.listeners.size; | ||
} | ||
has(listener: Listener): boolean { | ||
has(listener: Listener<T>): boolean { | ||
return this.listeners.has(listener); | ||
} | ||
off(listener: Listener): void { | ||
off(listener: Listener<T>): void { | ||
this.listeners.delete(listener); | ||
}; | ||
} | ||
on(listener: Listener): Unsubscribe { | ||
on(listener: Listener<T>): Unsubscribe { | ||
this.listeners.add(listener); | ||
return () => this.off(listener); | ||
}; | ||
} | ||
once(listener: Listener): Unsubscribe { | ||
const oneTimeListener = (...args: any[]) => { | ||
once(listener: Listener<T>): Unsubscribe { | ||
const oneTimeListener = (...args: T) => { | ||
this.off(oneTimeListener); | ||
@@ -96,3 +101,3 @@ listener(...args); | ||
return this.on(oneTimeListener); | ||
}; | ||
} | ||
@@ -103,7 +108,7 @@ clear() { | ||
toPromise(): Promise<any[]> { | ||
toPromise(): Promise<T> { | ||
return new Promise(resolve => this.once((...args) => resolve(args))); | ||
} | ||
filter(filter: Filter) { | ||
filter(filter: Filter<T>) { | ||
const dispose = this.on(async (...args) => { | ||
@@ -118,3 +123,3 @@ if (filteredEvent.size > 0 && await filter(...args)) { | ||
map<T>(mapper: Mapper<T>) { | ||
map<R>(mapper: Mapper<T, R>) { | ||
const dispose = this.on(async (...args) => { | ||
@@ -130,4 +135,4 @@ if (mappedEvent.size > 0) { | ||
reduce<T>(reducer: Reducer<T>, init: T) { | ||
let value: T = init; | ||
reduce<R>(reducer: Reducer<T, R>, init: R) { | ||
let value = init; | ||
const dispose = this.on(async (...args) => { | ||
@@ -144,4 +149,4 @@ if (reducedEvent.size > 0) { | ||
export default function event() { | ||
export default function createEvent() { | ||
return new Event(); | ||
} |
@@ -8,2 +8,3 @@ { | ||
"preserveConstEnums": true, | ||
"experimentalDecorators": true, | ||
"sourceMap": true, | ||
@@ -10,0 +11,0 @@ "declaration": true, |
Sorry, the diff of this file is not supported yet
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
26921
15
483
14
1