htmx-router 2.2.5 → 2.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -51,6 +51,27 @@ export declare class EventSourceSet<JsxEnabled extends boolean = false> extends
51
51
  */
52
52
  closeAll(): number;
53
53
  }
54
+ export declare class EventSourceMap<T, JsxEnabled extends boolean = false> extends Map<EventSource<JsxEnabled>, T> {
55
+ private onAbort;
56
+ constructor();
57
+ set(stream: EventSource<JsxEnabled>, value: T): this;
58
+ delete(stream: EventSource<JsxEnabled>): boolean;
59
+ /**
60
+ * Send update to all EventSources, auto closing failed dispatches
61
+ * @returns number of successful sends
62
+ */
63
+ dispatch(type: string, data: string): number;
64
+ /**
65
+ * Cull all closed connections
66
+ * @returns number of connections closed
67
+ */
68
+ cull(): number;
69
+ /**
70
+ * Close all connections
71
+ * @returns number of connections closed
72
+ */
73
+ closeAll(): number;
74
+ }
54
75
  type SharedEventSourceCacheRule = {
55
76
  limit: number;
56
77
  ttl: number;
@@ -182,7 +182,7 @@ export class EventSourceSet extends Set {
182
182
  if (success)
183
183
  count++;
184
184
  }
185
- return count;
185
+ return count - this.size;
186
186
  }
187
187
  /**
188
188
  * Close all connections
@@ -196,6 +196,62 @@ export class EventSourceSet extends Set {
196
196
  return count;
197
197
  }
198
198
  }
199
+ export class EventSourceMap extends Map {
200
+ onAbort;
201
+ constructor() {
202
+ super();
203
+ this.onAbort = () => this.cull();
204
+ }
205
+ set(stream, value) {
206
+ stream._signal.addEventListener('abort', this.onAbort);
207
+ return super.set(stream, value);
208
+ }
209
+ delete(stream) {
210
+ stream._signal.removeEventListener('abort', this.onAbort);
211
+ return super.delete(stream);
212
+ }
213
+ /**
214
+ * Send update to all EventSources, auto closing failed dispatches
215
+ * @returns number of successful sends
216
+ */
217
+ dispatch(type, data) {
218
+ let count = 0;
219
+ for (const stream of this.keys()) {
220
+ if (stream.readyState !== EventSource.OPEN)
221
+ continue; // skip closed
222
+ const success = stream.dispatch(type, data);
223
+ if (success)
224
+ count++;
225
+ else
226
+ this.delete(stream);
227
+ }
228
+ return count;
229
+ }
230
+ /**
231
+ * Cull all closed connections
232
+ * @returns number of connections closed
233
+ */
234
+ cull() {
235
+ const count = this.size;
236
+ for (const stream of this.keys()) {
237
+ if (stream.readyState !== EventSource.CLOSED)
238
+ continue;
239
+ this.delete(stream);
240
+ }
241
+ return count - this.size;
242
+ }
243
+ /**
244
+ * Close all connections
245
+ * @returns number of connections closed
246
+ */
247
+ closeAll() {
248
+ const count = this.size;
249
+ for (const stream of this.keys())
250
+ stream.close();
251
+ this.clear();
252
+ return count;
253
+ }
254
+ }
199
255
  /**
200
256
  * DO NOT USE: Experimental
201
257
  * @deprecated
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "htmx-router",
3
- "version": "2.2.5",
3
+ "version": "2.2.6",
4
4
  "description": "A lightweight SSR framework with server+client islands",
5
5
  "keywords": [ "htmx", "router", "client islands", "ssr", "vite" ],
6
6
  "type": "module",