@nexusts/sse 0.7.2 → 0.7.4
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.
- package/dist/index.js +1 -1
- package/dist/index.js.map +4 -4
- package/dist/sse-stream.d.ts +2 -2
- package/dist/types.d.ts +1 -1
- package/package.json +11 -6
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/types.ts", "../src/sse-stream.ts", "../src/sse.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * `nexusjs/sse` — Server-Sent Events.\n *\n * @Get('/events')\n * events() {\n * return sse((stream) => {\n * const id = setInterval(() => {\n * stream.send({ event: 'tick', data: Date.now() });\n * }, 1000);\n * stream.onClose(() => clearInterval(id));\n * });\n * }\n *\n * // Or with reconnection support:\n * @Get('/events')\n * events(@LastEventId() lastId: string | null) {\n * return sse(async (stream) => {\n * // Replay events with id > lastId (if you have them).\n * // Then continue with the live stream.\n * });\n * }\n *\n * Features:\n * - Type-safe event payloads\n * - Auto-cleanup on client disconnect\n * - Last-Event-ID support for reconnection\n * - JSON helpers (auto-stringify objects)\n * - `retry:` hint to control client reconnect timing\n */\n\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"@nexusts/core\";\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\n/**\n * A single SSE event. The shape mirrors the wire format:\n *\n * - `id` — event id (used for `Last-Event-ID` reconnection)\n * - `event` — event name (client subscribes via EventSource.addEventListener)\n * - `data` — payload (string, object, or number)\n * - `retry` — reconnect delay in ms (sent as `retry: <ms>`)\n *\n * `data` accepts anything JSON-serializable. Objects are auto-stringified\n * via `JSON.stringify`. Strings are sent verbatim (one `data:` line per\n * newline).\n */\nexport interface SseEvent<T = unknown> {\n\tid?: string | number;\n\tevent?: string;\n\tdata: T;\n\t/** Reconnect delay (ms) hint. */\n\tretry?: number;\n}\n\n/**\n * Per-stream controller. Returned to the `sse()` callback.\n *\n * const stream = new SseStream(api);\n * stream.send({ data: 'hello' }); // data-only event\n * stream.send({ event: 'tick', data: { x: 1 } });\n * stream.close();\n */\nexport interface SseStreamController {\n\t/** Push an event. Safe to call after `close()` (no-op). */\n\tsend<T = unknown>(event: SseEvent<T> | string): void;\n\t/** Close the stream. Idempotent. Awaits pending writes. */\n\tclose(): void | Promise<void>;\n\t/** True after `close()` has been called. */\n\tget closed(): boolean;\n\t/** Register a callback to run on client disconnect (or `close()`). */\n\tonClose(cb: () => void): void;\n\t/** Sleep for `ms` milliseconds (preserves the connection). */\n\tsleep(ms: number): Promise<
|
|
6
|
-
"/**\n * `SseStream` — per-stream controller exposed to the `sse()` callback.\n *\n * The class wraps Hono's `SSEStreamingApi` so user code never sees\n * the Hono-specific shape. It owns:\n *\n * - A `closed` flag (idempotent `close()`)\n * - A list of `onClose` callbacks fired on disconnect OR close\n * - JSON auto-serialization for object payloads\n *\n * Instances are created by `sse()` and passed to the user callback.\n * They should not be constructed directly.\n */\nimport type { SseEvent, SseStreamController } from \"./types.js\";\n\n/** Minimal subset of Hono's `SSEStreamingApi` we depend on. */\ninterface HonoSSEApi {\n\twriteSSE(message: { id?: string; event?: string; data: string; retry?: number }): Promise<void>;\n\tsleep(ms: number): Promise<
|
|
5
|
+
"/**\n * `nexusjs/sse` — Server-Sent Events.\n *\n * @Get('/events')\n * events() {\n * return sse((stream) => {\n * const id = setInterval(() => {\n * stream.send({ event: 'tick', data: Date.now() });\n * }, 1000);\n * stream.onClose(() => clearInterval(id));\n * });\n * }\n *\n * // Or with reconnection support:\n * @Get('/events')\n * events(@LastEventId() lastId: string | null) {\n * return sse(async (stream) => {\n * // Replay events with id > lastId (if you have them).\n * // Then continue with the live stream.\n * });\n * }\n *\n * Features:\n * - Type-safe event payloads\n * - Auto-cleanup on client disconnect\n * - Last-Event-ID support for reconnection\n * - JSON helpers (auto-stringify objects)\n * - `retry:` hint to control client reconnect timing\n */\n\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"@nexusts/core\";\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\n/**\n * A single SSE event. The shape mirrors the wire format:\n *\n * - `id` — event id (used for `Last-Event-ID` reconnection)\n * - `event` — event name (client subscribes via EventSource.addEventListener)\n * - `data` — payload (string, object, or number)\n * - `retry` — reconnect delay in ms (sent as `retry: <ms>`)\n *\n * `data` accepts anything JSON-serializable. Objects are auto-stringified\n * via `JSON.stringify`. Strings are sent verbatim (one `data:` line per\n * newline).\n */\nexport interface SseEvent<T = unknown> {\n\tid?: string | number;\n\tevent?: string;\n\tdata: T;\n\t/** Reconnect delay (ms) hint. */\n\tretry?: number;\n}\n\n/**\n * Per-stream controller. Returned to the `sse()` callback.\n *\n * const stream = new SseStream(api);\n * stream.send({ data: 'hello' }); // data-only event\n * stream.send({ event: 'tick', data: { x: 1 } });\n * stream.close();\n */\nexport interface SseStreamController {\n\t/** Push an event. Safe to call after `close()` (no-op). */\n\tsend<T = unknown>(event: SseEvent<T> | string): void;\n\t/** Close the stream. Idempotent. Awaits pending writes. */\n\tclose(): void | Promise<void>;\n\t/** True after `close()` has been called. */\n\tget closed(): boolean;\n\t/** Register a callback to run on client disconnect (or `close()`). */\n\tonClose(cb: () => void): void;\n\t/** Sleep for `ms` milliseconds (preserves the connection). */\n\tsleep(ms: number): Promise<unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Decorator\n// ---------------------------------------------------------------------------\n\n/** Marks a controller method as an SSE endpoint. OpenAPI hint. */\nexport function SseEventMeta(options: { name?: string; description?: string } = {}): MethodDecorator {\n\treturn (target: object, propertyKey: string | symbol) => {\n\t\tReflect.defineMetadata(\n\t\t\t\"nexus:sse:event\",\n\t\t\toptions,\n\t\t\ttarget.constructor,\n\t\t\tpropertyKey,\n\t\t);\n\t};\n}\n\n/**\n * `@LastEventId()` — inject the `Last-Event-ID` header from the\n * client's reconnect attempt. `null` if the header is missing.\n */\nexport function LastEventId(): ParameterDecorator {\n\treturn (target: object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n\t\tconst t = propertyKey === undefined ? (target as Function) : (target.constructor as Function);\n\t\tconst existing: number[] =\n\t\t\tReflect.getMetadata(\"nexus:sse:lastEventId\", t, propertyKey as string | symbol) ?? [];\n\t\texisting.push(parameterIndex);\n\t\tReflect.defineMetadata(\"nexus:sse:lastEventId\", existing, t, propertyKey as string | symbol);\n\t};\n}\n\nexport const SSE_META = \"nexus:sse:event\";\nexport const SSE_LAST_EVENT_ID_META = \"nexus:sse:lastEventId\";\nexport { METADATA_KEY };\n",
|
|
6
|
+
"/**\n * `SseStream` — per-stream controller exposed to the `sse()` callback.\n *\n * The class wraps Hono's `SSEStreamingApi` so user code never sees\n * the Hono-specific shape. It owns:\n *\n * - A `closed` flag (idempotent `close()`)\n * - A list of `onClose` callbacks fired on disconnect OR close\n * - JSON auto-serialization for object payloads\n *\n * Instances are created by `sse()` and passed to the user callback.\n * They should not be constructed directly.\n */\nimport type { SseEvent, SseStreamController } from \"./types.js\";\n\n/** Minimal subset of Hono's `SSEStreamingApi` we depend on. */\ninterface HonoSSEApi {\n\twriteSSE(message: { id?: string; event?: string; data: string; retry?: number }): Promise<void>;\n\tsleep(ms: number): Promise<unknown>;\n\tonAbort(callback: () => void): void;\n\tclose(): Promise<void>;\n\tabort(): void;\n}\n\nexport class SseStream implements SseStreamController {\n\t#api: HonoSSEApi;\n\t#closed = false;\n\t#onClose: Array<() => void> = [];\n\t#pendingWrites: Set<Promise<void>> = new Set();\n\n\tconstructor(api: HonoSSEApi) {\n\t\tthis.#api = api;\n\t\t// When the client disconnects, Hono calls onAbort.\n\t\t// Run our user-facing cleanup chain.\n\t\tthis.#api.onAbort(() => this.#fireClose());\n\t}\n\n\tget closed(): boolean {\n\t\treturn this.#closed;\n\t}\n\n\t/** Push an event. No-op after `close()`. */\n\tsend<T = unknown>(event: SseEvent<T> | string): void {\n\t\tif (this.#closed) return;\n\t\tconst e: SseEvent<unknown> = typeof event === \"string\" ? { data: event } : event;\n\t\tconst dataStr =\n\t\t\ttypeof e.data === \"string\" ? e.data : JSON.stringify(e.data);\n\t\tconst promise = this.#api\n\t\t\t.writeSSE({\n\t\t\t\tid: e.id !== undefined ? String(e.id) : undefined,\n\t\t\t\tevent: e.event,\n\t\t\t\tdata: dataStr,\n\t\t\t\tretry: e.retry,\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t/* swallow — abort happened mid-write */\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.#pendingWrites.delete(promise);\n\t\t\t});\n\t\tthis.#pendingWrites.add(promise);\n\t}\n\n\t/** Close the stream. Idempotent. Waits for pending writes. */\n\tasync close(): Promise<void> {\n\t\tif (this.#closed) return;\n\t\tthis.#closed = true;\n\t\t// Wait for all pending writes to flush.\n\t\tif (this.#pendingWrites.size > 0) {\n\t\t\tawait Promise.allSettled([...this.#pendingWrites]);\n\t\t}\n\t\tawait this.#api.close();\n\t\tthis.#fireClose();\n\t}\n\n\t/** Register a cleanup callback. */\n\tonClose(cb: () => void): void {\n\t\tif (this.#closed) {\n\t\t\ttry {\n\t\t\t\tcb();\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis.#onClose.push(cb);\n\t}\n\n\t/** Sleep for `ms` (preserves the open connection). */\n\tsleep(ms: number): Promise<unknown> {\n\t\treturn this.#api.sleep(ms);\n\t}\n\n\t#fireClose(): void {\n\t\tif (!this.#closed) {\n\t\t\tthis.#closed = true;\n\t\t}\n\t\tconst cbs = this.#onClose;\n\t\tthis.#onClose = [];\n\t\tfor (const cb of cbs) {\n\t\t\ttry {\n\t\t\t\tcb();\n\t\t\t} catch {\n\t\t\t\t/* swallow — we are tearing down */\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Internal escape hatch. Do not use from user code. */\n\t_internal(): HonoSSEApi {\n\t\treturn this.#api;\n\t}\n\n\t/** Internal: indicate that the underlying API was aborted by Hono. */\n\t_internalAbort(): void {\n\t\tthis.#api.abort();\n\t\tthis.#fireClose();\n\t}\n}\n",
|
|
7
7
|
"/**\n * `sse()` — wrap a stream-producing callback in a Hono `streamSSE()`\n * call. Returns a `Response` with `text/event-stream` content type.\n *\n * import { sse } from 'nexusjs/sse';\n *\n * @Get('/events')\n * events(@Req() c: any) {\n * return sse(c, (stream) => {\n * const t = setInterval(() => {\n * stream.send({ event: 'tick', data: Date.now() });\n * }, 1000);\n * stream.onClose(() => clearInterval(t));\n * });\n * }\n *\n * The callback may be sync or async. When the client disconnects,\n * `onClose` callbacks fire and the Hono streaming context closes.\n *\n * Implementation: we use Hono's `streamSSE()` helper. The returned\n * `Response` is wired into the framework's existing response\n * pipeline — the framework just passes it through to the client.\n */\nimport { SseStream } from \"./sse-stream.js\";\nimport type { SseStreamController } from \"./types.js\";\n\n/**\n * The `sse()` helper.\n *\n * @param c Hono context. Pass via `@Req()` in a controller.\n * @param handler Callback that pushes events onto the stream.\n * @returns A `Response` with `text/event-stream` content type.\n */\nexport function sse(\n\tc: any,\n\thandler: (stream: SseStreamController) => void | Promise<void>,\n): Response {\n\t// Lazy import keeps the top-level `nexusjs/sse` module from\n\t// hard-depending on `hono/streaming` (Hono is already a peer).\n\tconst mod = require(\"hono/streaming\") as typeof import(\"hono/streaming\");\n\tconst response = mod.streamSSE(c, async (api) => {\n\t\tconst stream = new SseStream(api);\n\t\ttry {\n\t\t\tawait handler(stream);\n\t\t} finally {\n\t\t\tawait stream.close();\n\t\t}\n\t});\n\treturn response as unknown as Response;\n}\n\n/**\n * `sseJson()` — convenience alias for `sse()`. Object payloads are\n * auto-JSON-stringified in either form.\n */\nexport const sseJson = sse;\n\n/**\n * Extract the `Last-Event-ID` header from a Hono context. Returns\n * `null` if the header is missing.\n */\nexport function getLastEventId(c: { req: { header(name: string): string | undefined } }): string | null {\n\tconst v = c.req.header(\"Last-Event-ID\");\n\treturn v ?? null;\n}\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": ";;;;AA8BA;AACA;AAoDO,SAAS,YAAY,CAAC,UAAmD,CAAC,GAAoB;AAAA,EACpG,OAAO,CAAC,QAAgB,gBAAiC;AAAA,IACxD,QAAQ,eACP,mBACA,SACA,OAAO,aACP,WACD;AAAA;AAAA;AAQK,SAAS,WAAW,GAAuB;AAAA,EACjD,OAAO,CAAC,QAAgB,aAA0C,mBAA2B;AAAA,IAC5F,MAAM,IAAI,gBAAgB,YAAa,SAAuB,OAAO;AAAA,IACrE,MAAM,WACL,QAAQ,YAAY,yBAAyB,GAAG,WAA8B,KAAK,CAAC;AAAA,IACrF,SAAS,KAAK,cAAc;AAAA,IAC5B,QAAQ,eAAe,yBAAyB,UAAU,GAAG,WAA8B;AAAA;AAAA;AAItF,IAAM,WAAW;AACjB,IAAM,yBAAyB;;ACrF/B,MAAM,UAAyC;AAAA,EACrD;AAAA,EACA,UAAU;AAAA,EACV,WAA8B,CAAC;AAAA,EAC/B,iBAAqC,IAAI;AAAA,EAEzC,WAAW,CAAC,KAAiB;AAAA,IAC5B,KAAK,OAAO;AAAA,IAGZ,KAAK,KAAK,QAAQ,MAAM,KAAK,WAAW,CAAC;AAAA;AAAA,MAGtC,MAAM,GAAY;AAAA,IACrB,OAAO,KAAK;AAAA;AAAA,EAIb,IAAiB,CAAC,OAAmC;AAAA,IACpD,IAAI,KAAK;AAAA,MAAS;AAAA,IAClB,MAAM,IAAuB,OAAO,UAAU,WAAW,EAAE,MAAM,MAAM,IAAI;AAAA,IAC3E,MAAM,UACL,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO,KAAK,UAAU,EAAE,IAAI;AAAA,IAC5D,MAAM,UAAU,KAAK,KACnB,SAAS;AAAA,MACT,IAAI,EAAE,OAAO,YAAY,OAAO,EAAE,EAAE,IAAI;AAAA,MACxC,OAAO,EAAE;AAAA,MACT,MAAM;AAAA,MACN,OAAO,EAAE;AAAA,IACV,CAAC,EACA,MAAM,MAAM,EAEZ,EACA,QAAQ,MAAM;AAAA,MACd,KAAK,eAAe,OAAO,OAAO;AAAA,KAClC;AAAA,IACF,KAAK,eAAe,IAAI,OAAO;AAAA;AAAA,OAI1B,MAAK,GAAkB;AAAA,IAC5B,IAAI,KAAK;AAAA,MAAS;AAAA,IAClB,KAAK,UAAU;AAAA,IAEf,IAAI,KAAK,eAAe,OAAO,GAAG;AAAA,MACjC,MAAM,QAAQ,WAAW,CAAC,GAAG,KAAK,cAAc,CAAC;AAAA,IAClD;AAAA,IACA,MAAM,KAAK,KAAK,MAAM;AAAA,IACtB,KAAK,WAAW;AAAA;AAAA,EAIjB,OAAO,CAAC,IAAsB;AAAA,IAC7B,IAAI,KAAK,SAAS;AAAA,MACjB,IAAI;AAAA,QACH,GAAG;AAAA,QACF,MAAM;AAAA,MAGR;AAAA,IACD;AAAA,IACA,KAAK,SAAS,KAAK,EAAE;AAAA;AAAA,EAItB,KAAK,CAAC,
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "E4DB702DF4E0B00B64756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/dist/sse-stream.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ interface HonoSSEApi {
|
|
|
20
20
|
data: string;
|
|
21
21
|
retry?: number;
|
|
22
22
|
}): Promise<void>;
|
|
23
|
-
sleep(ms: number): Promise<
|
|
23
|
+
sleep(ms: number): Promise<unknown>;
|
|
24
24
|
onAbort(callback: () => void): void;
|
|
25
25
|
close(): Promise<void>;
|
|
26
26
|
abort(): void;
|
|
@@ -36,7 +36,7 @@ export declare class SseStream implements SseStreamController {
|
|
|
36
36
|
/** Register a cleanup callback. */
|
|
37
37
|
onClose(cb: () => void): void;
|
|
38
38
|
/** Sleep for `ms` (preserves the open connection). */
|
|
39
|
-
sleep(ms: number): Promise<
|
|
39
|
+
sleep(ms: number): Promise<unknown>;
|
|
40
40
|
/** Internal escape hatch. Do not use from user code. */
|
|
41
41
|
_internal(): HonoSSEApi;
|
|
42
42
|
/** Internal: indicate that the underlying API was aborted by Hono. */
|
package/dist/types.d.ts
CHANGED
|
@@ -66,7 +66,7 @@ export interface SseStreamController {
|
|
|
66
66
|
/** Register a callback to run on client disconnect (or `close()`). */
|
|
67
67
|
onClose(cb: () => void): void;
|
|
68
68
|
/** Sleep for `ms` milliseconds (preserves the connection). */
|
|
69
|
-
sleep(ms: number): Promise<
|
|
69
|
+
sleep(ms: number): Promise<unknown>;
|
|
70
70
|
}
|
|
71
71
|
/** Marks a controller method as an SSE endpoint. OpenAPI hint. */
|
|
72
72
|
export declare function SseEventMeta(options?: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nexusts/sse",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.4",
|
|
4
4
|
"description": "Server-Sent Events streaming",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -12,15 +12,20 @@
|
|
|
12
12
|
"import": "./dist/index.js"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
|
-
"files": [
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md"
|
|
18
|
+
],
|
|
16
19
|
"scripts": {
|
|
17
20
|
"build": "bun run ../../build.ts"
|
|
18
21
|
},
|
|
19
|
-
"keywords": [
|
|
22
|
+
"keywords": [
|
|
23
|
+
"nexusts",
|
|
24
|
+
"framework",
|
|
25
|
+
"bun"
|
|
26
|
+
],
|
|
20
27
|
"license": "MIT",
|
|
21
|
-
|
|
22
|
-
|
|
23
28
|
"dependencies": {
|
|
24
|
-
"@nexusts/core": "
|
|
29
|
+
"@nexusts/core": "^0.7.4"
|
|
25
30
|
}
|
|
26
31
|
}
|