diff --git a/test/eventsource/eventsource-request-status-error.js b/test/eventsource/eventsource-request-status-error.js index 0ea0d43304a..9e1aef25b5a 100644 --- a/test/eventsource/eventsource-request-status-error.js +++ b/test/eventsource/eventsource-request-status-error.js @@ -31,3 +31,19 @@ describe('EventSource - status error', () => { }) }) }) + +test('EventSource error handlers receive a plain Event', async (t) => { + const server = http.createServer((req, res) => res.writeHead(404).end()) + t.after(() => server.close()) + await once(server.listen(0, '127.0.0.1'), 'listening') + + const source = new EventSource(`http://127.0.0.1:${server.address().port}`) + t.after(() => source.close()) + let callbackEvent + source.onerror = (event) => { callbackEvent = event } + const [event] = await once(source, 'error') + + t.assert.strictEqual(event.constructor, Event) + t.assert.strictEqual(callbackEvent, event) + t.assert.strictEqual('message' in event, false) +}) diff --git a/test/types/event-source-d.ts b/test/types/event-source-d.ts index 8527fee7985..f02d5af6d58 100644 --- a/test/types/event-source-d.ts +++ b/test/types/event-source-d.ts @@ -1,5 +1,5 @@ import { URL } from 'node:url' -import { expectType, expectAssignable } from 'tsd' +import { expectType, expectAssignable, expectError } from 'tsd' import { Agent, EventSource, EventSourceInit, Dispatcher } from '../../' @@ -23,3 +23,13 @@ expectAssignable({ withCredentials: true }) expectAssignable({}) expectType(new Agent({ eventSource: { maxEventSize: 1024 } })) + +eventSource.onerror = (event) => { + expectType(event) + expectError(event.message) +} + +eventSource.addEventListener('error', (event) => { + expectType(event) + expectError(event.message) +}) diff --git a/types/eventsource.d.ts b/types/eventsource.d.ts index 081ca09aee9..155c5a77f88 100644 --- a/types/eventsource.d.ts +++ b/types/eventsource.d.ts @@ -1,4 +1,4 @@ -import { MessageEvent, ErrorEvent } from './websocket' +import { MessageEvent } from './websocket' import Dispatcher from './dispatcher' import { @@ -8,7 +8,7 @@ import { } from './patch' interface EventSourceEventMap { - error: ErrorEvent + error: Event message: MessageEvent open: Event } @@ -18,7 +18,7 @@ interface EventSource extends EventTarget { readonly CLOSED: 2 readonly CONNECTING: 0 readonly OPEN: 1 - onerror: ((this: EventSource, ev: ErrorEvent) => any) | null + onerror: ((this: EventSource, ev: Event) => any) | null onmessage: ((this: EventSource, ev: MessageEvent) => any) | null onopen: ((this: EventSource, ev: Event) => any) | null readonly readyState: 0 | 1 | 2