@quilted/events
Advanced tools
Comparing version 0.1.9 to 0.1.10
@@ -27,3 +27,19 @@ import type { AbortBehavior } from './abort'; | ||
} | ||
export declare function createEmitter<Events = {}>(): Emitter<Events>; | ||
export declare function createEmitter<Events = {}>(internal?: Emitter<EmitterInternalEvents<Events>>): Emitter<Events>; | ||
export interface EmitterInternalEvents<Events = {}> { | ||
add: { | ||
event: keyof Events; | ||
handler: EmitterHandler<unknown>; | ||
all: Set<EmitterHandler<unknown>>; | ||
}; | ||
remove: { | ||
event: keyof Events; | ||
handler: EmitterHandler<unknown>; | ||
all: Set<EmitterHandler<unknown>>; | ||
}; | ||
} | ||
export interface EmitterWithInternals<Events = {}> extends Emitter<Events> { | ||
readonly internal: Emitter<EmitterInternalEvents<Events>>; | ||
} | ||
export declare function createEmitterWithInternals<Events = {}>(): EmitterWithInternals<Events>; | ||
//# sourceMappingURL=emitter.d.ts.map |
@@ -5,6 +5,6 @@ export { on } from './on'; | ||
export type { AbortBehavior } from './abort'; | ||
export { createEmitter } from './emitter'; | ||
export { addListener } from './listeners'; | ||
export type { Emitter, EmitterHandler } from './emitter'; | ||
export { createEmitter, createEmitterWithInternals } from './emitter'; | ||
export type { Emitter, EmitterHandler, EmitterInternalEvents, EmitterWithInternals, } from './emitter'; | ||
export type { EventTarget, EventTargetOn, EventTargetAddEventListener, EventTargetFunction, } from './types'; | ||
//# sourceMappingURL=index.d.ts.map |
# @quilted/events | ||
## 0.1.10 | ||
### Patch Changes | ||
- [`a419953a`](https://github.com/lemonmade/quilt/commit/a419953aff8c955aa8ca7ef2923869f051c3f24d) Thanks [@lemonmade](https://github.com/lemonmade)! - Add internal events for emitter | ||
## 0.1.9 | ||
@@ -4,0 +10,0 @@ |
@@ -5,3 +5,3 @@ { | ||
"type": "module", | ||
"version": "0.1.9", | ||
"version": "0.1.10", | ||
"license": "MIT", | ||
@@ -8,0 +8,0 @@ "engines": { |
@@ -36,3 +36,5 @@ import {on as onEvent} from './on'; | ||
// eslint-disable-next-line @typescript-eslint/ban-types | ||
export function createEmitter<Events = {}>(): Emitter<Events> { | ||
export function createEmitter<Events = {}>( | ||
internal?: Emitter<EmitterInternalEvents<Events>>, | ||
): Emitter<Events> { | ||
const handlerMap = new Map<keyof Events, Set<any>>(); | ||
@@ -77,3 +79,7 @@ | ||
signalAbort?.abort(); | ||
handlers!.delete(normalizedHandler); | ||
if (handlers == null) return; | ||
handlers.delete(normalizedHandler); | ||
internal?.emit('remove', {event, handler: handler as any, all: handlers}); | ||
if (handlers!.size === 0) handlerMap.delete(event); | ||
}; | ||
@@ -96,4 +102,37 @@ | ||
internal?.emit('add', {event, handler: handler as any, all: handlers}); | ||
signal?.addEventListener('abort', remove, {signal: signalAbort!.signal}); | ||
} | ||
} | ||
// eslint-disable-next-line @typescript-eslint/ban-types | ||
export interface EmitterInternalEvents<Events = {}> { | ||
add: { | ||
event: keyof Events; | ||
handler: EmitterHandler<unknown>; | ||
all: Set<EmitterHandler<unknown>>; | ||
}; | ||
remove: { | ||
event: keyof Events; | ||
handler: EmitterHandler<unknown>; | ||
all: Set<EmitterHandler<unknown>>; | ||
}; | ||
} | ||
// eslint-disable-next-line @typescript-eslint/ban-types | ||
export interface EmitterWithInternals<Events = {}> extends Emitter<Events> { | ||
readonly internal: Emitter<EmitterInternalEvents<Events>>; | ||
} | ||
export function createEmitterWithInternals< | ||
// eslint-disable-next-line @typescript-eslint/ban-types | ||
Events = {}, | ||
>(): EmitterWithInternals<Events> { | ||
const internal = createEmitter<EmitterInternalEvents<Events>>(); | ||
const emitter = createEmitter(internal); | ||
(emitter as any).internal = internal; | ||
return emitter as any; | ||
} |
@@ -5,6 +5,11 @@ export {on} from './on'; | ||
export type {AbortBehavior} from './abort'; | ||
export {createEmitter} from './emitter'; | ||
export {addListener} from './listeners'; | ||
export type {Emitter, EmitterHandler} from './emitter'; | ||
export {createEmitter, createEmitterWithInternals} from './emitter'; | ||
export type { | ||
Emitter, | ||
EmitterHandler, | ||
EmitterInternalEvents, | ||
EmitterWithInternals, | ||
} from './emitter'; | ||
export type { | ||
EventTarget, | ||
@@ -11,0 +16,0 @@ EventTargetOn, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
83535
1146