UNPKG

use-next-sse

Version:

A lightweight Server-Sent Events (SSE) library for Next.js, enabling real-time, unidirectional data streaming from server to client

55 lines (54 loc) 1.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sseManager = void 0; class SSEManager { constructor() { this.connections = new Map(); } getConnection(url, init) { let connection = this.connections.get(url); if (!connection) { const source = new EventSource(url, init); connection = { source, refCount: 0, listeners: new Map() }; this.connections.set(url, connection); } connection.refCount++; return connection.source; } releaseConnection(url) { const connection = this.connections.get(url); if (connection) { connection.refCount--; if (connection.refCount === 0) { connection.source.close(); this.connections.delete(url); } } } addEventListener(url, eventName, listener) { const connection = this.connections.get(url); if (connection) { if (!connection.listeners.has(eventName)) { connection.listeners.set(eventName, new Set()); connection.source.addEventListener(eventName, (event) => { const listeners = connection.listeners.get(eventName); listeners === null || listeners === void 0 ? void 0 : listeners.forEach((listener) => listener(event)); }); } connection.listeners.get(eventName).add(listener); } } removeEventListener(url, eventName, listener) { const connection = this.connections.get(url); if (connection) { const listeners = connection.listeners.get(eventName); if (listeners) { listeners.delete(listener); if (listeners.size === 0) { connection.listeners.delete(eventName); } } } } } exports.sseManager = new SSEManager();