Buckets:
| // src/helper/streaming/sse.ts | |
| import { HtmlEscapedCallbackPhase, resolveCallback } from "../../utils/html.js"; | |
| import { StreamingApi } from "../../utils/stream.js"; | |
| import { isOldBunVersion } from "./utils.js"; | |
| var SSEStreamingApi = class extends StreamingApi { | |
| constructor(writable, readable) { | |
| super(writable, readable); | |
| } | |
| async writeSSE(message) { | |
| const data = await resolveCallback(message.data, HtmlEscapedCallbackPhase.Stringify, false, {}); | |
| const dataLines = data.split(/\r\n|\r|\n/).map((line) => { | |
| return `data: ${line}`; | |
| }).join("\n"); | |
| const sseData = [ | |
| message.event && `event: ${message.event}`, | |
| dataLines, | |
| message.id && `id: ${message.id}`, | |
| message.retry && `retry: ${message.retry}` | |
| ].filter(Boolean).join("\n") + "\n\n"; | |
| await this.write(sseData); | |
| } | |
| }; | |
| var run = async (stream, cb, onError) => { | |
| try { | |
| await cb(stream); | |
| } catch (e) { | |
| if (e instanceof Error && onError) { | |
| await onError(e, stream); | |
| await stream.writeSSE({ | |
| event: "error", | |
| data: e.message | |
| }); | |
| } else { | |
| console.error(e); | |
| } | |
| } finally { | |
| stream.close(); | |
| } | |
| }; | |
| var contextStash = /* @__PURE__ */ new WeakMap(); | |
| var streamSSE = (c, cb, onError) => { | |
| const { readable, writable } = new TransformStream(); | |
| const stream = new SSEStreamingApi(writable, readable); | |
| if (isOldBunVersion()) { | |
| c.req.raw.signal.addEventListener("abort", () => { | |
| if (!stream.closed) { | |
| stream.abort(); | |
| } | |
| }); | |
| } | |
| contextStash.set(stream.responseReadable, c); | |
| c.header("Transfer-Encoding", "chunked"); | |
| c.header("Content-Type", "text/event-stream"); | |
| c.header("Cache-Control", "no-cache"); | |
| c.header("Connection", "keep-alive"); | |
| run(stream, cb, onError); | |
| return c.newResponse(stream.responseReadable); | |
| }; | |
| export { | |
| SSEStreamingApi, | |
| streamSSE | |
| }; | |
Xet Storage Details
- Size:
- 1.87 kB
- Xet hash:
- 6456e3fd1dc30fd4cfefc63e917e3593ca07854d0d877430b1758c63d8c72db5
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.