bind-event-listener
Advanced tools
Comparing version 2.1.0-beta.0 to 2.1.0
export declare type UnbindFn = () => void; | ||
declare type ExtractEventTypeFromHandler<MaybeFn extends unknown> = MaybeFn extends (this: any, event: infer MaybeEvent) => any ? MaybeEvent extends Event ? MaybeEvent : Event : never; | ||
declare type GetEventType<Target extends EventTarget, EventName extends string> = `on${EventName}` extends keyof Target ? ExtractEventTypeFromHandler<Target[`on${EventName}`]> : Event; | ||
declare type ListenerObject<TEvent extends Event> = { | ||
handleEvent(this: ListenerObject<TEvent>, e: TEvent): void; | ||
}; | ||
export declare type Listener<Target extends EventTarget, EventName extends string> = ListenerObject<GetEventType<Target, EventName>> | { | ||
(this: Target, e: GetEventType<Target, EventName>): void; | ||
}; | ||
export declare type Binding<Target extends EventTarget = EventTarget, EventName extends string = string> = { | ||
@@ -9,8 +15,2 @@ type: EventName; | ||
}; | ||
export declare type Listener<Target extends EventTarget, EventName extends string> = ListenerObject<GetEventType<Target, EventName>> | { | ||
(this: Target, e: GetEventType<Target, EventName>): void; | ||
}; | ||
export declare type ListenerObject<TEvent extends Event> = { | ||
handleEvent(this: ListenerObject<TEvent>, e: TEvent): void; | ||
}; | ||
export {}; |
{ | ||
"name": "bind-event-listener", | ||
"version": "2.1.0-beta.0", | ||
"version": "2.1.0", | ||
"private": false, | ||
@@ -5,0 +5,0 @@ "description": "Making binding and unbinding DOM events easier", |
@@ -12,14 +12,19 @@ export type UnbindFn = () => void; | ||
type GetEventType<Target extends EventTarget, EventName extends string> = | ||
// Does the target have a on${eventName} property? | ||
`on${EventName}` extends keyof Target | ||
? ExtractEventTypeFromHandler<Target[`on${EventName}`]> | ||
: Event; | ||
// Given an EventTarget and an EventName - return the event type (eg `MouseEvent`) | ||
// Rather than switching on every time of EventTarget and looking up the appropriate `EventMap` | ||
// We are being sneaky an pulling the type out of any `on${EventName}` property | ||
// This is surprisingly robust | ||
type GetEventType< | ||
Target extends EventTarget, | ||
EventName extends string, | ||
> = `on${EventName}` extends keyof Target | ||
? ExtractEventTypeFromHandler<Target[`on${EventName}`]> | ||
: Event; | ||
export type Binding<Target extends EventTarget = EventTarget, EventName extends string = string> = { | ||
type: EventName; | ||
listener: Listener<Target, EventName>; | ||
options?: boolean | AddEventListenerOptions; | ||
// For listener objects, the handleEvent function has the object as the `this` binding | ||
type ListenerObject<TEvent extends Event> = { | ||
handleEvent(this: ListenerObject<TEvent>, e: TEvent): void; | ||
}; | ||
// event listeners can be an object or a function | ||
export type Listener<Target extends EventTarget, EventName extends string> = | ||
@@ -29,5 +34,6 @@ | ListenerObject<GetEventType<Target, EventName>> | ||
export type ListenerObject<TEvent extends Event> = { | ||
// For listener objects, the handleEvent function has the object as the `this` binding | ||
handleEvent(this: ListenerObject<TEvent>, e: TEvent): void; | ||
export type Binding<Target extends EventTarget = EventTarget, EventName extends string = string> = { | ||
type: EventName; | ||
listener: Listener<Target, EventName>; | ||
options?: boolean | AddEventListenerOptions; | ||
}; |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
22292
279
1