Files
dockhand-upstream/src/lib/server/event-collector.ts
T
2026-03-02 07:59:58 +01:00

27 lines
1.0 KiB
TypeScript

/**
* Container Event Emitter
*
* Shared EventEmitter for broadcasting container events to SSE clients.
* Events are emitted by the collection worker when processing Docker events.
*
* IMPORTANT: Uses globalThis to ensure a single instance across all module imports.
* In Vite dev mode and SvelteKit production builds, server modules can be loaded
* multiple times (HMR, chunking), creating separate EventEmitter instances.
* Using globalThis guarantees emitters and listeners share the same object.
*/
import { EventEmitter } from 'node:events';
const GLOBAL_KEY = '__dockhand_container_event_emitter__';
// Ensure single instance via globalThis
if (!(globalThis as any)[GLOBAL_KEY]) {
const emitter = new EventEmitter();
// Allow up to 100 concurrent SSE listeners (default is 10)
// This prevents MaxListenersExceededWarning with many dashboard clients
emitter.setMaxListeners(100);
(globalThis as any)[GLOBAL_KEY] = emitter;
}
export const containerEventEmitter: EventEmitter = (globalThis as any)[GLOBAL_KEY];