diff options
author | 2023-03-21 09:02:28 +0530 | |
---|---|---|
committer | 2023-03-20 20:32:28 -0700 | |
commit | 02e5c5f795fedb63e88454fef9d632a3cad5901e (patch) | |
tree | cfbc76f944924d8401513be7f68cf50e06fb9722 | |
parent | 2503b3409eb4725e791819dd509473bcf759fc86 (diff) | |
download | bun-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.ts | 56 |
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 |