aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Gaurish Sethia <78847111+gaurishhs@users.noreply.github.com> 2023-03-21 09:02:28 +0530
committerGravatar GitHub <noreply@github.com> 2023-03-20 20:32:28 -0700
commit02e5c5f795fedb63e88454fef9d632a3cad5901e (patch)
treecfbc76f944924d8401513be7f68cf50e06fb9722
parent2503b3409eb4725e791819dd509473bcf759fc86 (diff)
downloadbun-02e5c5f795fedb63e88454fef9d632a3cad5901e.tar.gz
bun-02e5c5f795fedb63e88454fef9d632a3cad5901e.tar.zst
bun-02e5c5f795fedb63e88454fef9d632a3cad5901e.zip
Make event emitter type-safe (#2414)
* Add filePath property on MatchedRoute * Fix #1880 #851 * Fix #1972 as well * FMC * Bump querystring-es3 * fix querystring status * Fix typos in docs * Make event-emitter by default type-safe * Remove Makefile.save * Resolve merge conflict * Tweaks --------- Co-authored-by: Colin McDonnell <colinmcd@alum.mit.edu> Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
-rw-r--r--packages/bun-types/events.d.ts56
1 files changed, 35 insertions, 21 deletions
diff --git a/packages/bun-types/events.d.ts b/packages/bun-types/events.d.ts
index 96c97db32..ce69f4e0c 100644
--- a/packages/bun-types/events.d.ts
+++ b/packages/bun-types/events.d.ts
@@ -56,13 +56,18 @@ declare module "events" {
interface StaticEventEmitterOptions {
signal?: AbortSignal | undefined;
}
- interface EventEmitter {
+ interface EventEmitter<
+ Events extends Record<string | symbol, any[]> = Record<
+ string | symbol,
+ any[]
+ >,
+ > {
/**
* Alias for `emitter.on(eventName, listener)`.
*/
- addListener(
- eventName: string | symbol,
- listener: (...args: any[]) => void,
+ addListener<K extends keyof Events>(
+ eventName: K,
+ listener: (...args: Events[K]) => void,
): this;
/**
* Adds the `listener` function to the end of the listeners array for the
@@ -93,7 +98,10 @@ declare module "events" {
* @param eventName The name of the event.
* @param listener The callback function
*/
- on(eventName: string | symbol, listener: (...args: any[]) => void): this;
+ on<K extends keyof Events>(
+ eventName: K,
+ listener: (...args: Events[K]) => void,
+ ): this;
/**
* Adds a **one-time**`listener` function for the event named `eventName`. The
* next time `eventName` is triggered, this listener is removed and then invoked.
@@ -121,7 +129,10 @@ declare module "events" {
* @param eventName The name of the event.
* @param listener The callback function
*/
- once(eventName: string | symbol, listener: (this: this, ...args: any[]) => void): this;
+ once<K extends keyof Events>(
+ eventName: K,
+ listener: (...args: Events[K]) => void,
+ ): this;
/**
* Removes the specified `listener` from the listener array for the event named`eventName`.
*
@@ -200,14 +211,17 @@ declare module "events" {
*
* Returns a reference to the `EventEmitter`, so that calls can be chained.
*/
- removeListener(
- eventName: string | symbol,
- listener: (...args: any[]) => void,
+ removeListener<K extends keyof Events>(
+ eventName: K,
+ listener: (...args: Events[K]) => void,
): this;
/**
* Alias for `emitter.removeListener()`.
*/
- off(eventName: string | symbol, listener: (...args: any[]) => void): this;
+ off<K extends keyof Events>(
+ eventName: K,
+ listener: (...args: Events[K]) => void,
+ ): this;
/**
* Removes all listeners, or those of the specified `eventName`.
*
@@ -217,7 +231,7 @@ declare module "events" {
*
* Returns a reference to the `EventEmitter`, so that calls can be chained.
*/
- removeAllListeners(event?: string | symbol): this;
+ removeAllListeners(event?: keyof Events): this;
/**
* By default `EventEmitter`s will print a warning if more than `10` listeners are
* added for a particular event. This is a useful default that helps finding
@@ -243,7 +257,7 @@ declare module "events" {
* // Prints: [ [Function] ]
* ```
*/
- listeners(eventName: string | symbol): Function[];
+ listeners(eventName: keyof Events): Function[];
/**
* Returns a copy of the array of listeners for the event named `eventName`,
* including any wrappers (such as those created by `.once()`).
@@ -272,7 +286,7 @@ declare module "events" {
* emitter.emit('log');
* ```
*/
- rawListeners(eventName: string | symbol): Function[];
+ rawListeners(eventName: keyof Events): Function[];
/**
* Synchronously calls each of the listeners registered for the event named`eventName`, in the order they were registered, passing the supplied arguments
* to each.
@@ -312,12 +326,12 @@ declare module "events" {
* // event with parameters 1, 2, 3, 4, 5 in third listener
* ```
*/
- emit(eventName: string | symbol, ...args: any[]): boolean;
+ emit<K extends keyof Events>(eventName: K, ...args: Events[K]): boolean;
/**
* Returns the number of listeners listening to the event named `eventName`.
* @param eventName The name of the event being listened for
*/
- listenerCount(eventName: string | symbol): number;
+ listenerCount(eventName: keyof Events): number;
/**
* Adds the `listener` function to the _beginning_ of the listeners array for the
* event named `eventName`. No checks are made to see if the `listener` has
@@ -334,9 +348,9 @@ declare module "events" {
* @param eventName The name of the event.
* @param listener The callback function
*/
- prependListener(
- eventName: string | symbol,
- listener: (...args: any[]) => void,
+ prependListener<K extends keyof Events>(
+ eventName: K,
+ listener: (...args: Events[K]) => void,
): this;
/**
* Adds a **one-time**`listener` function for the event named `eventName` to the_beginning_ of the listeners array. The next time `eventName` is triggered, this
@@ -352,9 +366,9 @@ declare module "events" {
* @param eventName The name of the event.
* @param listener The callback function
*/
- prependOnceListener(
- eventName: string | symbol,
- listener: (...args: any[]) => void,
+ prependOnceListener<K extends keyof Events>(
+ eventName: K,
+ listener: (...args: Events[K]) => void,
): this;
/**
* Returns an array listing the events for which the emitter has registered