From efcff70be8fe12ba7f9fe310a5e749101e8f8009 Mon Sep 17 00:00:00 2001 From: igor poughtach Date: Sat, 29 Apr 2023 01:21:28 +0300 Subject: [PATCH 1/2] fix types --- index.d.ts | 82 ++++++++++++++++++++++++------------------------------ 1 file changed, 36 insertions(+), 46 deletions(-) diff --git a/index.d.ts b/index.d.ts index f45235c..a58f981 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,34 +1,32 @@ -export type EventType = 'open' | 'message' | 'error' | 'close'; - -export interface BaseEvent { - type: string; -} - -export interface MessageEvent { - type: 'message'; - data: string | null; - lastEventId: string | null; - url: string; -} - -export interface OpenEvent { - type: 'open'; -} - -export interface CloseEvent { - type: 'close'; -} - -export interface TimeoutEvent { - type: 'timeout'; -} - -export interface ErrorEvent { - type: 'error'; - message: string; - xhrState: number; - xhrStatus: number; -} +export type Events = { + message: { + type: 'message'; + data: string | null; + lastEventId: string | null; + url: string; + }; + open: { + type: 'open'; + }; + close: { + type: 'close'; + }; + timeout: { + type: 'timeout'; + }; + error: { + type: 'error'; + message: string; + xhrState: number; + xhrStatus: number; + } | { + type: 'exception'; + message: string; + error: Error; + }; +} + +export type EventType = keyof Events; export interface CustomEvent { type: E; @@ -37,12 +35,6 @@ export interface CustomEvent { url: string; } -export interface ExceptionEvent { - type: 'exception'; - message: string; - error: Error; -} - export interface EventSourceOptions { method?: string; timeout?: number; @@ -53,20 +45,18 @@ export interface EventSourceOptions { timeoutBeforeConnection?: number; } -export type EventSourceEvent = MessageEvent | OpenEvent | CloseEvent | TimeoutEvent | ErrorEvent | ExceptionEvent; - -export type EventSourceListener = ( - event: CustomEvent | EventSourceEvent +export type EventSourceListener = ( + event: E extends EventType ? Events[E] : CustomEvent ) => void; -declare class EventSource { +declare class EventSource { constructor(url: URL | string, options?: EventSourceOptions); open(): void; close(): void; - addEventListener(type: E | EventType, listener: EventSourceListener): void; - removeEventListener(type: E | EventType, listener: EventSourceListener): void; - removeAllEventListeners(type?: E | EventType): void; - dispatch(type: E | EventType, data: E | EventSourceEvent): void; + addEventListener(type: T, listener: EventSourceListener): void; + removeEventListener(type: T, listener: EventSourceListener): void; + removeAllEventListeners(type?: T): void; + dispatch(type: T, data: T extends EventType ? Events[T] : CustomEvent): void; } export default EventSource; From 86f1e2b6440c0f67b8ca6b19e17f91572bf22d9d Mon Sep 17 00:00:00 2001 From: igor poughtach Date: Sat, 29 Apr 2023 16:12:29 +0300 Subject: [PATCH 2/2] fix Events type --- index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index a58f981..438f435 100644 --- a/index.d.ts +++ b/index.d.ts @@ -49,7 +49,7 @@ export type EventSourceListener = ( event: E extends EventType ? Events[E] : CustomEvent ) => void; -declare class EventSource { +declare class EventSource { constructor(url: URL | string, options?: EventSourceOptions); open(): void; close(): void;