From cdd2fcb59ef3a0e0d2df69f5a39197a78bf68031 Mon Sep 17 00:00:00 2001 From: Darius Date: Thu, 5 Feb 2026 04:31:54 +0100 Subject: [PATCH] set => map --- dist/sse.d.ts | 5 +++-- dist/sse.d.ts.map | 2 +- dist/sse.js | 15 ++++++--------- src/sse.ts | 26 ++++++++++++-------------- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/dist/sse.d.ts b/dist/sse.d.ts index 70d79e4..c69f4de 100644 --- a/dist/sse.d.ts +++ b/dist/sse.d.ts @@ -1,5 +1,6 @@ +import { UUID } from "crypto"; export type SseClient = { - id: number; + id: UUID; send: (data: SseEvent) => void; }; export type SseEvent = { @@ -10,7 +11,7 @@ export type SseEvent = { export declare class SseService { private clients; addClient(client: SseClient): void; - removeClient(clientId: number): void; + removeClient(clientId: string): void; notifyClients(event: SseEvent): void; getClientCount(): number; } diff --git a/dist/sse.d.ts.map b/dist/sse.d.ts.map index 2d4ad2b..b2c66e0 100644 --- a/dist/sse.d.ts.map +++ b/dist/sse.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC/B,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAA;AAED,qBAAa,UAAU;IACtB,OAAO,CAAC,OAAO,CAAwB;IAEvC,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAOlC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUpC,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAMpC,cAAc,IAAI,MAAM;CAGxB"} \ No newline at end of file +{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,MAAM,MAAM,SAAS,GAAG;IACvB,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC/B,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAA;AAED,qBAAa,UAAU;IACtB,OAAO,CAAC,OAAO,CAAqC;IAEpD,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAOlC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOpC,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAMpC,cAAc,IAAI,MAAM;CAGxB"} \ No newline at end of file diff --git a/dist/sse.js b/dist/sse.js index 31f7268..2cffd06 100644 --- a/dist/sse.js +++ b/dist/sse.js @@ -1,21 +1,18 @@ import { logInfo } from "./logger.js"; export class SseService { - clients = new Set(); + clients = new Map(); addClient(client) { - this.clients.add(client); + this.clients.set(client.id, client); logInfo(`SSE client connected: ${client.id}. Total clients: ${this.clients.size}`); } removeClient(clientId) { - const client = [...this.clients].find((c) => c.id === clientId); - if (client) { - this.clients.delete(client); - logInfo(`SSE client disconnected: ${clientId}. Total clients: ${this.clients.size}`); - } + this.clients.delete(clientId); + logInfo(`SSE client disconnected: ${clientId}. Total clients: ${this.clients.size}`); } notifyClients(event) { - this.clients.forEach((client) => { + for (const client of this.clients.values()) { client.send(event); - }); + } } getClientCount() { return this.clients.size; diff --git a/src/sse.ts b/src/sse.ts index ab8fc15..c0bd92f 100644 --- a/src/sse.ts +++ b/src/sse.ts @@ -1,7 +1,8 @@ +import { UUID } from "crypto"; import { logInfo } from "./logger.js"; export type SseClient = { - id: number; + id: UUID; send: (data: SseEvent) => void; } @@ -12,29 +13,26 @@ export type SseEvent = { } export class SseService { - private clients = new Set(); + private clients: Map = new Map(); addClient(client: SseClient): void { - this.clients.add(client); + this.clients.set(client.id, client); logInfo( `SSE client connected: ${client.id}. Total clients: ${this.clients.size}`, ); } - removeClient(clientId: number): void { - const client = [...this.clients].find((c) => c.id === clientId); - if (client) { - this.clients.delete(client); - logInfo( - `SSE client disconnected: ${clientId}. Total clients: ${this.clients.size}`, - ); - } + removeClient(clientId: string): void { + this.clients.delete(clientId); + logInfo( + `SSE client disconnected: ${clientId}. Total clients: ${this.clients.size}`, + ); } notifyClients(event: SseEvent): void { - this.clients.forEach((client) => { - client.send(event); - }); + for (const client of this.clients.values()) { + client.send(event); + } } getClientCount(): number {