ai.matey.react.stream 0.2.0 → 0.2.1
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/CHANGELOG.md +17 -0
- package/dist/cjs/stream-context.js +8 -4
- package/dist/cjs/stream-context.js.map +1 -1
- package/dist/cjs/stream-text.js +2 -1
- package/dist/cjs/stream-text.js.map +1 -1
- package/dist/cjs/stream-utils.js +136 -27
- package/dist/cjs/stream-utils.js.map +1 -1
- package/dist/esm/stream-context.js +8 -4
- package/dist/esm/stream-context.js.map +1 -1
- package/dist/esm/stream-text.js +2 -1
- package/dist/esm/stream-text.js.map +1 -1
- package/dist/esm/stream-utils.js +136 -27
- package/dist/esm/stream-utils.js.map +1 -1
- package/dist/types/stream-context.d.ts.map +1 -1
- package/dist/types/stream-text.d.ts.map +1 -1
- package/dist/types/stream-utils.d.ts +117 -21
- package/dist/types/stream-utils.d.ts.map +1 -1
- package/package.json +4 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# ai.matey.react.stream
|
|
2
|
+
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- f227db2: Lint hardening: previously-unlinted packages (cli, react-\*) now pass the strict ESLint config;
|
|
8
|
+
fixed floating/misused promises in React hooks and CLI, case-block declarations, and unused
|
|
9
|
+
variables. require-await and no-redundant-type-constituents re-enabled repo-wide.
|
|
10
|
+
- Updated dependencies [dae4d01]
|
|
11
|
+
- Updated dependencies [e7df1d0]
|
|
12
|
+
- Updated dependencies [f227db2]
|
|
13
|
+
- Updated dependencies [2912b7d]
|
|
14
|
+
- Updated dependencies [78731bb]
|
|
15
|
+
- Updated dependencies [b7e2312]
|
|
16
|
+
- ai.matey.types@0.3.0
|
|
17
|
+
- ai.matey.react.core@0.2.1
|
|
@@ -93,8 +93,9 @@ function StreamProvider({ children, maxStreams = 100 }) {
|
|
|
93
93
|
const updateStream = (0, react_1.useCallback)((id, text) => {
|
|
94
94
|
setStreams((prev) => {
|
|
95
95
|
const state = prev.get(id);
|
|
96
|
-
if (!state)
|
|
96
|
+
if (!state) {
|
|
97
97
|
return prev;
|
|
98
|
+
}
|
|
98
99
|
const newMap = new Map(prev);
|
|
99
100
|
newMap.set(id, { ...state, text });
|
|
100
101
|
return newMap;
|
|
@@ -106,8 +107,9 @@ function StreamProvider({ children, maxStreams = 100 }) {
|
|
|
106
107
|
const appendToStream = (0, react_1.useCallback)((id, chunk) => {
|
|
107
108
|
setStreams((prev) => {
|
|
108
109
|
const state = prev.get(id);
|
|
109
|
-
if (!state)
|
|
110
|
+
if (!state) {
|
|
110
111
|
return prev;
|
|
112
|
+
}
|
|
111
113
|
const newMap = new Map(prev);
|
|
112
114
|
newMap.set(id, { ...state, text: state.text + chunk });
|
|
113
115
|
return newMap;
|
|
@@ -119,8 +121,9 @@ function StreamProvider({ children, maxStreams = 100 }) {
|
|
|
119
121
|
const completeStream = (0, react_1.useCallback)((id) => {
|
|
120
122
|
setStreams((prev) => {
|
|
121
123
|
const state = prev.get(id);
|
|
122
|
-
if (!state)
|
|
124
|
+
if (!state) {
|
|
123
125
|
return prev;
|
|
126
|
+
}
|
|
124
127
|
const newMap = new Map(prev);
|
|
125
128
|
newMap.set(id, { ...state, isStreaming: false });
|
|
126
129
|
return newMap;
|
|
@@ -132,8 +135,9 @@ function StreamProvider({ children, maxStreams = 100 }) {
|
|
|
132
135
|
const setStreamError = (0, react_1.useCallback)((id, error) => {
|
|
133
136
|
setStreams((prev) => {
|
|
134
137
|
const state = prev.get(id);
|
|
135
|
-
if (!state)
|
|
138
|
+
if (!state) {
|
|
136
139
|
return prev;
|
|
140
|
+
}
|
|
137
141
|
const newMap = new Map(prev);
|
|
138
142
|
newMap.set(id, { ...state, isStreaming: false, error });
|
|
139
143
|
return newMap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-context.js","sourceRoot":"","sources":["../../src/stream-context.tsx"],"names":[],"mappings":";;AAmGA,
|
|
1
|
+
{"version":3,"file":"stream-context.js","sourceRoot":"","sources":["../../src/stream-context.tsx"],"names":[],"mappings":"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"}
|
package/dist/cjs/stream-text.js
CHANGED
|
@@ -78,8 +78,9 @@ function TypeWriter({ text, speed = 30, delay = 0, onComplete, className, showCu
|
|
|
78
78
|
(0, react_1.useEffect)(() => {
|
|
79
79
|
setDisplayedText('');
|
|
80
80
|
setIsTyping(false);
|
|
81
|
-
if (!text)
|
|
81
|
+
if (!text) {
|
|
82
82
|
return;
|
|
83
|
+
}
|
|
83
84
|
// Start delay
|
|
84
85
|
const delayTimeout = setTimeout(() => {
|
|
85
86
|
setIsTyping(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-text.js","sourceRoot":"","sources":["../../src/stream-text.tsx"],"names":[],"mappings":";;AAkDA,gCA+CC;AA0CD,
|
|
1
|
+
{"version":3,"file":"stream-text.js","sourceRoot":"","sources":["../../src/stream-text.tsx"],"names":[],"mappings":"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"}
|
package/dist/cjs/stream-utils.js
CHANGED
|
@@ -14,11 +14,28 @@ exports.mergeStreams = mergeStreams;
|
|
|
14
14
|
exports.fromAsyncIterable = fromAsyncIterable;
|
|
15
15
|
exports.toAsyncIterable = toAsyncIterable;
|
|
16
16
|
/**
|
|
17
|
-
* Create a controlled text stream from a fetch response.
|
|
17
|
+
* Create a controlled text stream from a fetch response with streaming body.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* This function reads a streaming response body chunk by chunk, decodes the
|
|
20
|
+
* bytes as UTF-8 text, and provides callbacks for processing each chunk as it
|
|
21
|
+
* arrives. It accumulates the full text and returns it when the stream completes.
|
|
22
|
+
* Supports abort signals for cancellation and error handling.
|
|
23
|
+
*
|
|
24
|
+
* @param response - Fetch Response object with a streaming body
|
|
25
|
+
* @param options - Configuration including chunk/complete/error callbacks and abort signal
|
|
26
|
+
* @returns Promise resolving to the complete accumulated text
|
|
27
|
+
* @throws {Error} If response body is null or if stream reading fails
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const response = await fetch('/api/stream');
|
|
32
|
+
* const fullText = await createTextStream(response, {
|
|
33
|
+
* onChunk: (chunk) => console.log('Received:', chunk),
|
|
34
|
+
* onComplete: (text) => console.log('Done:', text),
|
|
35
|
+
* onError: (err) => console.error('Error:', err),
|
|
36
|
+
* signal: abortController.signal
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
22
39
|
*/
|
|
23
40
|
async function createTextStream(response, options = {}) {
|
|
24
41
|
const { onChunk, onComplete, onError, signal } = options;
|
|
@@ -31,7 +48,7 @@ async function createTextStream(response, options = {}) {
|
|
|
31
48
|
let fullText = '';
|
|
32
49
|
while (true) {
|
|
33
50
|
if (signal?.aborted) {
|
|
34
|
-
reader.cancel();
|
|
51
|
+
void reader.cancel();
|
|
35
52
|
break;
|
|
36
53
|
}
|
|
37
54
|
const { done, value } = await reader.read();
|
|
@@ -52,11 +69,30 @@ async function createTextStream(response, options = {}) {
|
|
|
52
69
|
}
|
|
53
70
|
}
|
|
54
71
|
/**
|
|
55
|
-
* Parse Server-Sent Events (SSE) stream.
|
|
72
|
+
* Parse Server-Sent Events (SSE) stream from a fetch response.
|
|
73
|
+
*
|
|
74
|
+
* This async generator reads a streaming response body conforming to the
|
|
75
|
+
* Server-Sent Events specification and yields parsed event objects. It handles
|
|
76
|
+
* SSE event delimiters (double newlines), parses event fields (event, data, id,
|
|
77
|
+
* retry), and buffers incomplete events. Supports cancellation via abort signal.
|
|
78
|
+
*
|
|
79
|
+
* @param response - Fetch Response object with SSE formatted body
|
|
80
|
+
* @param options - Configuration including optional abort signal
|
|
81
|
+
* @yields Parsed SSE events with event type, data, id, and retry fields
|
|
82
|
+
* @throws {Error} If response body is null
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const response = await fetch('/api/chat');
|
|
87
|
+
* const abortController = new AbortController();
|
|
56
88
|
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
89
|
+
* for await (const event of parseSSEStream(response, {
|
|
90
|
+
* signal: abortController.signal
|
|
91
|
+
* })) {
|
|
92
|
+
* console.log('Event:', event.event, 'Data:', event.data);
|
|
93
|
+
* if (event.data === '[DONE]') break;
|
|
94
|
+
* }
|
|
95
|
+
* ```
|
|
60
96
|
*/
|
|
61
97
|
async function* parseSSEStream(response, options = {}) {
|
|
62
98
|
const { signal } = options;
|
|
@@ -69,7 +105,7 @@ async function* parseSSEStream(response, options = {}) {
|
|
|
69
105
|
try {
|
|
70
106
|
while (true) {
|
|
71
107
|
if (signal?.aborted) {
|
|
72
|
-
reader.cancel();
|
|
108
|
+
void reader.cancel();
|
|
73
109
|
break;
|
|
74
110
|
}
|
|
75
111
|
const { done, value } = await reader.read();
|
|
@@ -100,7 +136,20 @@ async function* parseSSEStream(response, options = {}) {
|
|
|
100
136
|
}
|
|
101
137
|
}
|
|
102
138
|
/**
|
|
103
|
-
* Parse a single
|
|
139
|
+
* Parse a single Server-Sent Event from text.
|
|
140
|
+
*
|
|
141
|
+
* This internal function parses the text of a single SSE event, extracting
|
|
142
|
+
* the event type, data (supporting multi-line data), id, and retry fields
|
|
143
|
+
* according to the SSE specification. Returns null if no data is present.
|
|
144
|
+
*
|
|
145
|
+
* @param text - Raw SSE event text
|
|
146
|
+
* @returns Parsed SSE event object or null if invalid
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* const event = parseSSEEvent('event: message\ndata: hello\nid: 123\n');
|
|
151
|
+
* // Returns: { event: 'message', data: 'hello', id: '123' }
|
|
152
|
+
* ```
|
|
104
153
|
*/
|
|
105
154
|
function parseSSEEvent(text) {
|
|
106
155
|
const lines = text.split('\n');
|
|
@@ -130,11 +179,25 @@ function parseSSEEvent(text) {
|
|
|
130
179
|
return event;
|
|
131
180
|
}
|
|
132
181
|
/**
|
|
133
|
-
* Transform a ReadableStream
|
|
182
|
+
* Transform a ReadableStream by applying a function to each chunk.
|
|
183
|
+
*
|
|
184
|
+
* This utility creates a new ReadableStream that applies a transformation
|
|
185
|
+
* function to each chunk from the source stream. The transform function can
|
|
186
|
+
* be synchronous or asynchronous, allowing for complex processing pipelines.
|
|
187
|
+
* Useful for modifying stream data types or content on-the-fly.
|
|
134
188
|
*
|
|
135
|
-
* @param stream - Source
|
|
136
|
-
* @param transform -
|
|
137
|
-
* @returns
|
|
189
|
+
* @param stream - Source ReadableStream to transform
|
|
190
|
+
* @param transform - Function to apply to each chunk (sync or async)
|
|
191
|
+
* @returns New ReadableStream emitting transformed chunks
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* const textStream = fetchStream(); // ReadableStream<Uint8Array>
|
|
196
|
+
* const uppercaseStream = transformStream(textStream, (chunk) => {
|
|
197
|
+
* const text = new TextDecoder().decode(chunk);
|
|
198
|
+
* return new TextEncoder().encode(text.toUpperCase());
|
|
199
|
+
* });
|
|
200
|
+
* ```
|
|
138
201
|
*/
|
|
139
202
|
function transformStream(stream, transform) {
|
|
140
203
|
const reader = stream.getReader();
|
|
@@ -149,15 +212,31 @@ function transformStream(stream, transform) {
|
|
|
149
212
|
controller.enqueue(transformed);
|
|
150
213
|
},
|
|
151
214
|
cancel() {
|
|
152
|
-
reader.cancel();
|
|
215
|
+
void reader.cancel();
|
|
153
216
|
},
|
|
154
217
|
});
|
|
155
218
|
}
|
|
156
219
|
/**
|
|
157
|
-
* Merge multiple
|
|
220
|
+
* Merge multiple ReadableStreams into a single stream.
|
|
221
|
+
*
|
|
222
|
+
* This utility combines multiple source streams into one output stream,
|
|
223
|
+
* reading from all sources concurrently and emitting chunks as they arrive
|
|
224
|
+
* from any source. The merged stream closes when all source streams complete.
|
|
225
|
+
* Useful for combining multiple AI model responses or parallel data sources.
|
|
226
|
+
*
|
|
227
|
+
* @param streams - Variable number of ReadableStreams to merge
|
|
228
|
+
* @returns Single ReadableStream emitting chunks from all sources
|
|
158
229
|
*
|
|
159
|
-
* @
|
|
160
|
-
*
|
|
230
|
+
* @example
|
|
231
|
+
* ```typescript
|
|
232
|
+
* const stream1 = fetch('/api/model1').then(r => r.body!);
|
|
233
|
+
* const stream2 = fetch('/api/model2').then(r => r.body!);
|
|
234
|
+
* const combined = mergeStreams(stream1, stream2);
|
|
235
|
+
*
|
|
236
|
+
* for await (const chunk of toAsyncIterable(combined)) {
|
|
237
|
+
* console.log('Chunk from either stream:', chunk);
|
|
238
|
+
* }
|
|
239
|
+
* ```
|
|
161
240
|
*/
|
|
162
241
|
function mergeStreams(...streams) {
|
|
163
242
|
const readers = streams.map((s) => s.getReader());
|
|
@@ -186,15 +265,32 @@ function mergeStreams(...streams) {
|
|
|
186
265
|
}
|
|
187
266
|
},
|
|
188
267
|
cancel() {
|
|
189
|
-
readers.forEach((reader) => reader.cancel());
|
|
268
|
+
readers.forEach((reader) => void reader.cancel());
|
|
190
269
|
},
|
|
191
270
|
});
|
|
192
271
|
}
|
|
193
272
|
/**
|
|
194
|
-
* Create a
|
|
273
|
+
* Create a ReadableStream from an async iterable source.
|
|
274
|
+
*
|
|
275
|
+
* This utility converts any async iterable (like async generators) into a
|
|
276
|
+
* ReadableStream, making it compatible with browser streaming APIs and
|
|
277
|
+
* React streaming hooks. Useful for bridging between Node.js-style async
|
|
278
|
+
* iterators and Web Streams API.
|
|
195
279
|
*
|
|
196
|
-
* @param iterable -
|
|
197
|
-
* @returns ReadableStream
|
|
280
|
+
* @param iterable - Any async iterable source (async generator, etc.)
|
|
281
|
+
* @returns ReadableStream emitting values from the iterable
|
|
282
|
+
*
|
|
283
|
+
* @example
|
|
284
|
+
* ```typescript
|
|
285
|
+
* async function* generateData() {
|
|
286
|
+
* yield 'chunk 1';
|
|
287
|
+
* yield 'chunk 2';
|
|
288
|
+
* yield 'chunk 3';
|
|
289
|
+
* }
|
|
290
|
+
*
|
|
291
|
+
* const stream = fromAsyncIterable(generateData());
|
|
292
|
+
* const response = new Response(stream);
|
|
293
|
+
* ```
|
|
198
294
|
*/
|
|
199
295
|
function fromAsyncIterable(iterable) {
|
|
200
296
|
const iterator = iterable[Symbol.asyncIterator]();
|
|
@@ -208,15 +304,28 @@ function fromAsyncIterable(iterable) {
|
|
|
208
304
|
controller.enqueue(value);
|
|
209
305
|
},
|
|
210
306
|
cancel() {
|
|
211
|
-
iterator.return?.();
|
|
307
|
+
void iterator.return?.();
|
|
212
308
|
},
|
|
213
309
|
});
|
|
214
310
|
}
|
|
215
311
|
/**
|
|
216
|
-
* Convert a ReadableStream to an async iterable.
|
|
312
|
+
* Convert a ReadableStream to an async iterable for use in for-await loops.
|
|
313
|
+
*
|
|
314
|
+
* This async generator wraps a ReadableStream and yields each chunk,
|
|
315
|
+
* allowing you to consume Web Streams using async iteration syntax.
|
|
316
|
+
* Properly handles reader lifecycle and ensures the lock is released.
|
|
317
|
+
* Useful for consuming fetch responses in a more ergonomic way.
|
|
318
|
+
*
|
|
319
|
+
* @param stream - ReadableStream to convert
|
|
320
|
+
* @yields Each chunk from the stream
|
|
217
321
|
*
|
|
218
|
-
* @
|
|
219
|
-
*
|
|
322
|
+
* @example
|
|
323
|
+
* ```typescript
|
|
324
|
+
* const response = await fetch('/api/stream');
|
|
325
|
+
* for await (const chunk of toAsyncIterable(response.body!)) {
|
|
326
|
+
* console.log('Received chunk:', chunk);
|
|
327
|
+
* }
|
|
328
|
+
* ```
|
|
220
329
|
*/
|
|
221
330
|
async function* toAsyncIterable(stream) {
|
|
222
331
|
const reader = stream.getReader();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../src/stream-utils.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../src/stream-utils.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAwCH,4CAuCC;AA4BD,wCAmDC;AAiFD,0CAsBC;AAwBD,oCAiCC;AAyBD,8CAkBC;AAqBD,0CAkBC;AAhYD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACI,KAAK,UAAU,gBAAgB,CACpC,QAAkB,EAClB,UAAmC,EAAE;IAErC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEzD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM;YACR,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAE5C,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM;YACR,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,QAAQ,IAAI,KAAK,CAAC;YAClB,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QAED,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACI,KAAK,SAAS,CAAC,CAAC,cAAc,CACnC,QAAkB,EAClB,UAAoC,EAAE;IAEtC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM;YACR,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAE5C,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM;YACR,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAElD,iDAAiD;YACjD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE5B,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;gBACvC,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAgBD;;;;;;;;;;;;;;;GAeG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAa,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACrC,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,eAAe,CAC7B,MAAyB,EACzB,SAAuC;IAEvC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAElC,OAAO,IAAI,cAAc,CAAI;QAC3B,KAAK,CAAC,IAAI,CAAC,UAAU;YACnB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAE5C,IAAI,IAAI,EAAE,CAAC;gBACT,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;YAC3C,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;QACD,MAAM;YACJ,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,YAAY,CAAI,GAAG,OAA4B;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAClD,IAAI,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAEnC,OAAO,IAAI,cAAc,CAAI;QAC3B,KAAK,CAAC,IAAI,CAAC,UAAU;YACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBAClC,IAAI,CAAC;oBACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC5C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBAChC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC,CAAC,CACH,CAAC;YAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChB,aAAa,EAAE,CAAC;gBAClB,CAAC;qBAAM,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBACtC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;gBACxB,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QACD,MAAM;YACJ,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAgB,iBAAiB,CAAI,QAA0B;IAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;IAElD,OAAO,IAAI,cAAc,CAAI;QAC3B,KAAK,CAAC,IAAI,CAAC,UAAU;YACnB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAE9C,IAAI,IAAI,EAAE,CAAC;gBACT,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM;YACJ,KAAK,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACI,KAAK,SAAS,CAAC,CAAC,eAAe,CACpC,MAAyB;IAEzB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAElC,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAE5C,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM;YACR,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -88,8 +88,9 @@ export function StreamProvider({ children, maxStreams = 100 }) {
|
|
|
88
88
|
const updateStream = useCallback((id, text) => {
|
|
89
89
|
setStreams((prev) => {
|
|
90
90
|
const state = prev.get(id);
|
|
91
|
-
if (!state)
|
|
91
|
+
if (!state) {
|
|
92
92
|
return prev;
|
|
93
|
+
}
|
|
93
94
|
const newMap = new Map(prev);
|
|
94
95
|
newMap.set(id, { ...state, text });
|
|
95
96
|
return newMap;
|
|
@@ -101,8 +102,9 @@ export function StreamProvider({ children, maxStreams = 100 }) {
|
|
|
101
102
|
const appendToStream = useCallback((id, chunk) => {
|
|
102
103
|
setStreams((prev) => {
|
|
103
104
|
const state = prev.get(id);
|
|
104
|
-
if (!state)
|
|
105
|
+
if (!state) {
|
|
105
106
|
return prev;
|
|
107
|
+
}
|
|
106
108
|
const newMap = new Map(prev);
|
|
107
109
|
newMap.set(id, { ...state, text: state.text + chunk });
|
|
108
110
|
return newMap;
|
|
@@ -114,8 +116,9 @@ export function StreamProvider({ children, maxStreams = 100 }) {
|
|
|
114
116
|
const completeStream = useCallback((id) => {
|
|
115
117
|
setStreams((prev) => {
|
|
116
118
|
const state = prev.get(id);
|
|
117
|
-
if (!state)
|
|
119
|
+
if (!state) {
|
|
118
120
|
return prev;
|
|
121
|
+
}
|
|
119
122
|
const newMap = new Map(prev);
|
|
120
123
|
newMap.set(id, { ...state, isStreaming: false });
|
|
121
124
|
return newMap;
|
|
@@ -127,8 +130,9 @@ export function StreamProvider({ children, maxStreams = 100 }) {
|
|
|
127
130
|
const setStreamError = useCallback((id, error) => {
|
|
128
131
|
setStreams((prev) => {
|
|
129
132
|
const state = prev.get(id);
|
|
130
|
-
if (!state)
|
|
133
|
+
if (!state) {
|
|
131
134
|
return prev;
|
|
135
|
+
}
|
|
132
136
|
const newMap = new Map(prev);
|
|
133
137
|
newMap.set(id, { ...state, isStreaming: false, error });
|
|
134
138
|
return newMap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-context.js","sourceRoot":"","sources":["../../src/stream-context.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAC;AA0CjG;;GAEG;AACH,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAYrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,cAAc,CAAC,EAAE,QAAQ,EAAE,UAAU,GAAG,GAAG,EAAuB;IAChF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAA2B,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,MAAM,CAA2B,OAAO,CAAC,CAAC;IAE7D,mBAAmB;IACnB,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B;;OAEG;IACH,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,EAAU,EAA2B,EAAE;QACpE,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP;;OAEG;IACH,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,EAAU,EAAE,QAAkC,EAAE,EAAE;QACjD,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE;YAClB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAE7B,4BAA4B;YAC5B,IAAI,MAAM,CAAC,IAAI,IAAI,UAAU,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjD,iCAAiC;gBACjC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;oBACvC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;wBACvB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;wBACxB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;gBACb,EAAE;gBACF,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,SAAS;gBAChB,QAAQ;aACT,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAC;IAEF;;OAEG;IACH,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,IAAY,EAAE,EAAE;QAC5D,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"stream-context.js","sourceRoot":"","sources":["../../src/stream-context.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/stream-text.js
CHANGED
|
@@ -74,8 +74,9 @@ export function TypeWriter({ text, speed = 30, delay = 0, onComplete, className,
|
|
|
74
74
|
useEffect(() => {
|
|
75
75
|
setDisplayedText('');
|
|
76
76
|
setIsTyping(false);
|
|
77
|
-
if (!text)
|
|
77
|
+
if (!text) {
|
|
78
78
|
return;
|
|
79
|
+
}
|
|
79
80
|
// Start delay
|
|
80
81
|
const delayTimeout = setTimeout(() => {
|
|
81
82
|
setIsTyping(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-text.js","sourceRoot":"","sources":["../../src/stream-text.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AAwBrE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,WAAW,GAAG,KAAK,EACnB,UAAU,GAAG,IAAI,EACjB,MAAM,GAAG,GAAG,EACZ,mBAAmB,GAAG,GAAG,EACzB,SAAS,EACT,UAAU,EACV,QAAQ,GACQ;IAChB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEzD,+BAA+B;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEvB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAExB,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAEnD,sBAAsB;IACtB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAEvB,OAAO,CACL,gBAAM,SAAS,EAAE,SAAS,aACvB,WAAW,EACX,WAAW,IAAI,UAAU,IAAI,aAAa,IAAI,CAC7C,eAAM,SAAS,EAAC,kBAAkB,iBAAa,MAAM,YAClD,MAAM,GACF,CACR,EACA,QAAQ,IACJ,CACR,CAAC;AACJ,CAAC;AAsBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,GAAG,EAAE,EACV,KAAK,GAAG,CAAC,EACT,UAAU,EACV,SAAS,EACT,UAAU,GAAG,IAAI,EACjB,MAAM,GAAG,GAAG,GACI;IAChB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrB,WAAW,CAAC,KAAK,CAAC,CAAC;QAEnB,IAAI,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"stream-text.js","sourceRoot":"","sources":["../../src/stream-text.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/stream-utils.js
CHANGED
|
@@ -6,11 +6,28 @@
|
|
|
6
6
|
* @module
|
|
7
7
|
*/
|
|
8
8
|
/**
|
|
9
|
-
* Create a controlled text stream from a fetch response.
|
|
9
|
+
* Create a controlled text stream from a fetch response with streaming body.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* This function reads a streaming response body chunk by chunk, decodes the
|
|
12
|
+
* bytes as UTF-8 text, and provides callbacks for processing each chunk as it
|
|
13
|
+
* arrives. It accumulates the full text and returns it when the stream completes.
|
|
14
|
+
* Supports abort signals for cancellation and error handling.
|
|
15
|
+
*
|
|
16
|
+
* @param response - Fetch Response object with a streaming body
|
|
17
|
+
* @param options - Configuration including chunk/complete/error callbacks and abort signal
|
|
18
|
+
* @returns Promise resolving to the complete accumulated text
|
|
19
|
+
* @throws {Error} If response body is null or if stream reading fails
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const response = await fetch('/api/stream');
|
|
24
|
+
* const fullText = await createTextStream(response, {
|
|
25
|
+
* onChunk: (chunk) => console.log('Received:', chunk),
|
|
26
|
+
* onComplete: (text) => console.log('Done:', text),
|
|
27
|
+
* onError: (err) => console.error('Error:', err),
|
|
28
|
+
* signal: abortController.signal
|
|
29
|
+
* });
|
|
30
|
+
* ```
|
|
14
31
|
*/
|
|
15
32
|
export async function createTextStream(response, options = {}) {
|
|
16
33
|
const { onChunk, onComplete, onError, signal } = options;
|
|
@@ -23,7 +40,7 @@ export async function createTextStream(response, options = {}) {
|
|
|
23
40
|
let fullText = '';
|
|
24
41
|
while (true) {
|
|
25
42
|
if (signal?.aborted) {
|
|
26
|
-
reader.cancel();
|
|
43
|
+
void reader.cancel();
|
|
27
44
|
break;
|
|
28
45
|
}
|
|
29
46
|
const { done, value } = await reader.read();
|
|
@@ -44,11 +61,30 @@ export async function createTextStream(response, options = {}) {
|
|
|
44
61
|
}
|
|
45
62
|
}
|
|
46
63
|
/**
|
|
47
|
-
* Parse Server-Sent Events (SSE) stream.
|
|
64
|
+
* Parse Server-Sent Events (SSE) stream from a fetch response.
|
|
65
|
+
*
|
|
66
|
+
* This async generator reads a streaming response body conforming to the
|
|
67
|
+
* Server-Sent Events specification and yields parsed event objects. It handles
|
|
68
|
+
* SSE event delimiters (double newlines), parses event fields (event, data, id,
|
|
69
|
+
* retry), and buffers incomplete events. Supports cancellation via abort signal.
|
|
70
|
+
*
|
|
71
|
+
* @param response - Fetch Response object with SSE formatted body
|
|
72
|
+
* @param options - Configuration including optional abort signal
|
|
73
|
+
* @yields Parsed SSE events with event type, data, id, and retry fields
|
|
74
|
+
* @throws {Error} If response body is null
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const response = await fetch('/api/chat');
|
|
79
|
+
* const abortController = new AbortController();
|
|
48
80
|
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
81
|
+
* for await (const event of parseSSEStream(response, {
|
|
82
|
+
* signal: abortController.signal
|
|
83
|
+
* })) {
|
|
84
|
+
* console.log('Event:', event.event, 'Data:', event.data);
|
|
85
|
+
* if (event.data === '[DONE]') break;
|
|
86
|
+
* }
|
|
87
|
+
* ```
|
|
52
88
|
*/
|
|
53
89
|
export async function* parseSSEStream(response, options = {}) {
|
|
54
90
|
const { signal } = options;
|
|
@@ -61,7 +97,7 @@ export async function* parseSSEStream(response, options = {}) {
|
|
|
61
97
|
try {
|
|
62
98
|
while (true) {
|
|
63
99
|
if (signal?.aborted) {
|
|
64
|
-
reader.cancel();
|
|
100
|
+
void reader.cancel();
|
|
65
101
|
break;
|
|
66
102
|
}
|
|
67
103
|
const { done, value } = await reader.read();
|
|
@@ -92,7 +128,20 @@ export async function* parseSSEStream(response, options = {}) {
|
|
|
92
128
|
}
|
|
93
129
|
}
|
|
94
130
|
/**
|
|
95
|
-
* Parse a single
|
|
131
|
+
* Parse a single Server-Sent Event from text.
|
|
132
|
+
*
|
|
133
|
+
* This internal function parses the text of a single SSE event, extracting
|
|
134
|
+
* the event type, data (supporting multi-line data), id, and retry fields
|
|
135
|
+
* according to the SSE specification. Returns null if no data is present.
|
|
136
|
+
*
|
|
137
|
+
* @param text - Raw SSE event text
|
|
138
|
+
* @returns Parsed SSE event object or null if invalid
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```typescript
|
|
142
|
+
* const event = parseSSEEvent('event: message\ndata: hello\nid: 123\n');
|
|
143
|
+
* // Returns: { event: 'message', data: 'hello', id: '123' }
|
|
144
|
+
* ```
|
|
96
145
|
*/
|
|
97
146
|
function parseSSEEvent(text) {
|
|
98
147
|
const lines = text.split('\n');
|
|
@@ -122,11 +171,25 @@ function parseSSEEvent(text) {
|
|
|
122
171
|
return event;
|
|
123
172
|
}
|
|
124
173
|
/**
|
|
125
|
-
* Transform a ReadableStream
|
|
174
|
+
* Transform a ReadableStream by applying a function to each chunk.
|
|
175
|
+
*
|
|
176
|
+
* This utility creates a new ReadableStream that applies a transformation
|
|
177
|
+
* function to each chunk from the source stream. The transform function can
|
|
178
|
+
* be synchronous or asynchronous, allowing for complex processing pipelines.
|
|
179
|
+
* Useful for modifying stream data types or content on-the-fly.
|
|
126
180
|
*
|
|
127
|
-
* @param stream - Source
|
|
128
|
-
* @param transform -
|
|
129
|
-
* @returns
|
|
181
|
+
* @param stream - Source ReadableStream to transform
|
|
182
|
+
* @param transform - Function to apply to each chunk (sync or async)
|
|
183
|
+
* @returns New ReadableStream emitting transformed chunks
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```typescript
|
|
187
|
+
* const textStream = fetchStream(); // ReadableStream<Uint8Array>
|
|
188
|
+
* const uppercaseStream = transformStream(textStream, (chunk) => {
|
|
189
|
+
* const text = new TextDecoder().decode(chunk);
|
|
190
|
+
* return new TextEncoder().encode(text.toUpperCase());
|
|
191
|
+
* });
|
|
192
|
+
* ```
|
|
130
193
|
*/
|
|
131
194
|
export function transformStream(stream, transform) {
|
|
132
195
|
const reader = stream.getReader();
|
|
@@ -141,15 +204,31 @@ export function transformStream(stream, transform) {
|
|
|
141
204
|
controller.enqueue(transformed);
|
|
142
205
|
},
|
|
143
206
|
cancel() {
|
|
144
|
-
reader.cancel();
|
|
207
|
+
void reader.cancel();
|
|
145
208
|
},
|
|
146
209
|
});
|
|
147
210
|
}
|
|
148
211
|
/**
|
|
149
|
-
* Merge multiple
|
|
212
|
+
* Merge multiple ReadableStreams into a single stream.
|
|
213
|
+
*
|
|
214
|
+
* This utility combines multiple source streams into one output stream,
|
|
215
|
+
* reading from all sources concurrently and emitting chunks as they arrive
|
|
216
|
+
* from any source. The merged stream closes when all source streams complete.
|
|
217
|
+
* Useful for combining multiple AI model responses or parallel data sources.
|
|
218
|
+
*
|
|
219
|
+
* @param streams - Variable number of ReadableStreams to merge
|
|
220
|
+
* @returns Single ReadableStream emitting chunks from all sources
|
|
150
221
|
*
|
|
151
|
-
* @
|
|
152
|
-
*
|
|
222
|
+
* @example
|
|
223
|
+
* ```typescript
|
|
224
|
+
* const stream1 = fetch('/api/model1').then(r => r.body!);
|
|
225
|
+
* const stream2 = fetch('/api/model2').then(r => r.body!);
|
|
226
|
+
* const combined = mergeStreams(stream1, stream2);
|
|
227
|
+
*
|
|
228
|
+
* for await (const chunk of toAsyncIterable(combined)) {
|
|
229
|
+
* console.log('Chunk from either stream:', chunk);
|
|
230
|
+
* }
|
|
231
|
+
* ```
|
|
153
232
|
*/
|
|
154
233
|
export function mergeStreams(...streams) {
|
|
155
234
|
const readers = streams.map((s) => s.getReader());
|
|
@@ -178,15 +257,32 @@ export function mergeStreams(...streams) {
|
|
|
178
257
|
}
|
|
179
258
|
},
|
|
180
259
|
cancel() {
|
|
181
|
-
readers.forEach((reader) => reader.cancel());
|
|
260
|
+
readers.forEach((reader) => void reader.cancel());
|
|
182
261
|
},
|
|
183
262
|
});
|
|
184
263
|
}
|
|
185
264
|
/**
|
|
186
|
-
* Create a
|
|
265
|
+
* Create a ReadableStream from an async iterable source.
|
|
266
|
+
*
|
|
267
|
+
* This utility converts any async iterable (like async generators) into a
|
|
268
|
+
* ReadableStream, making it compatible with browser streaming APIs and
|
|
269
|
+
* React streaming hooks. Useful for bridging between Node.js-style async
|
|
270
|
+
* iterators and Web Streams API.
|
|
187
271
|
*
|
|
188
|
-
* @param iterable -
|
|
189
|
-
* @returns ReadableStream
|
|
272
|
+
* @param iterable - Any async iterable source (async generator, etc.)
|
|
273
|
+
* @returns ReadableStream emitting values from the iterable
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```typescript
|
|
277
|
+
* async function* generateData() {
|
|
278
|
+
* yield 'chunk 1';
|
|
279
|
+
* yield 'chunk 2';
|
|
280
|
+
* yield 'chunk 3';
|
|
281
|
+
* }
|
|
282
|
+
*
|
|
283
|
+
* const stream = fromAsyncIterable(generateData());
|
|
284
|
+
* const response = new Response(stream);
|
|
285
|
+
* ```
|
|
190
286
|
*/
|
|
191
287
|
export function fromAsyncIterable(iterable) {
|
|
192
288
|
const iterator = iterable[Symbol.asyncIterator]();
|
|
@@ -200,15 +296,28 @@ export function fromAsyncIterable(iterable) {
|
|
|
200
296
|
controller.enqueue(value);
|
|
201
297
|
},
|
|
202
298
|
cancel() {
|
|
203
|
-
iterator.return?.();
|
|
299
|
+
void iterator.return?.();
|
|
204
300
|
},
|
|
205
301
|
});
|
|
206
302
|
}
|
|
207
303
|
/**
|
|
208
|
-
* Convert a ReadableStream to an async iterable.
|
|
304
|
+
* Convert a ReadableStream to an async iterable for use in for-await loops.
|
|
305
|
+
*
|
|
306
|
+
* This async generator wraps a ReadableStream and yields each chunk,
|
|
307
|
+
* allowing you to consume Web Streams using async iteration syntax.
|
|
308
|
+
* Properly handles reader lifecycle and ensures the lock is released.
|
|
309
|
+
* Useful for consuming fetch responses in a more ergonomic way.
|
|
310
|
+
*
|
|
311
|
+
* @param stream - ReadableStream to convert
|
|
312
|
+
* @yields Each chunk from the stream
|
|
209
313
|
*
|
|
210
|
-
* @
|
|
211
|
-
*
|
|
314
|
+
* @example
|
|
315
|
+
* ```typescript
|
|
316
|
+
* const response = await fetch('/api/stream');
|
|
317
|
+
* for await (const chunk of toAsyncIterable(response.body!)) {
|
|
318
|
+
* console.log('Received chunk:', chunk);
|
|
319
|
+
* }
|
|
320
|
+
* ```
|
|
212
321
|
*/
|
|
213
322
|
export async function* toAsyncIterable(stream) {
|
|
214
323
|
const reader = stream.getReader();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../src/stream-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH
|
|
1
|
+
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../src/stream-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-context.d.ts","sourceRoot":"","sources":["../../src/stream-context.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA4D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjG;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB;IACnB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC,4BAA4B;IAC5B,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;IACnD,yBAAyB;IACzB,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACtE,yBAAyB;IACzB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,4BAA4B;IAC5B,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,wBAAwB;IACxB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,uBAAuB;IACvB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACnD,sBAAsB;IACtB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,wBAAwB;IACxB,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAOD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,yBAAyB;IACzB,QAAQ,EAAE,SAAS,CAAC;IACpB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,UAAgB,EAAE,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"stream-context.d.ts","sourceRoot":"","sources":["../../src/stream-context.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA4D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjG;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB;IACnB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC,4BAA4B;IAC5B,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;IACnD,yBAAyB;IACzB,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACtE,yBAAyB;IACzB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,4BAA4B;IAC5B,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,wBAAwB;IACxB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,uBAAuB;IACvB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACnD,sBAAsB;IACtB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,wBAAwB;IACxB,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAOD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,yBAAyB;IACzB,QAAQ,EAAE,SAAS,CAAC;IACpB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,UAAgB,EAAE,EAAE,mBAAmB,2CA8IjF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,CAQrD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAGlE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-text.d.ts","sourceRoot":"","sources":["../../src/stream-text.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IACzC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,WAAmB,EACnB,UAAiB,EACjB,MAAY,EACZ,mBAAyB,EACzB,SAAS,EACT,UAAU,EACV,QAAQ,GACT,EAAE,eAAe,2CAsCjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAU,EACV,KAAS,EACT,UAAU,EACV,SAAS,EACT,UAAiB,EACjB,MAAY,GACb,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"stream-text.d.ts","sourceRoot":"","sources":["../../src/stream-text.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IACzC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,WAAmB,EACnB,UAAiB,EACjB,MAAY,EACZ,mBAAyB,EACzB,SAAS,EACT,UAAU,EACV,QAAQ,GACT,EAAE,eAAe,2CAsCjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAU,EACV,KAAS,EACT,UAAU,EACV,SAAS,EACT,UAAiB,EACjB,MAAY,GACb,EAAE,eAAe,2CA2CjB"}
|
|
@@ -19,19 +19,55 @@ export interface CreateTextStreamOptions {
|
|
|
19
19
|
signal?: AbortSignal;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* Create a controlled text stream from a fetch response.
|
|
22
|
+
* Create a controlled text stream from a fetch response with streaming body.
|
|
23
23
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
24
|
+
* This function reads a streaming response body chunk by chunk, decodes the
|
|
25
|
+
* bytes as UTF-8 text, and provides callbacks for processing each chunk as it
|
|
26
|
+
* arrives. It accumulates the full text and returns it when the stream completes.
|
|
27
|
+
* Supports abort signals for cancellation and error handling.
|
|
28
|
+
*
|
|
29
|
+
* @param response - Fetch Response object with a streaming body
|
|
30
|
+
* @param options - Configuration including chunk/complete/error callbacks and abort signal
|
|
31
|
+
* @returns Promise resolving to the complete accumulated text
|
|
32
|
+
* @throws {Error} If response body is null or if stream reading fails
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const response = await fetch('/api/stream');
|
|
37
|
+
* const fullText = await createTextStream(response, {
|
|
38
|
+
* onChunk: (chunk) => console.log('Received:', chunk),
|
|
39
|
+
* onComplete: (text) => console.log('Done:', text),
|
|
40
|
+
* onError: (err) => console.error('Error:', err),
|
|
41
|
+
* signal: abortController.signal
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
27
44
|
*/
|
|
28
45
|
export declare function createTextStream(response: Response, options?: CreateTextStreamOptions): Promise<string>;
|
|
29
46
|
/**
|
|
30
|
-
* Parse Server-Sent Events (SSE) stream.
|
|
47
|
+
* Parse Server-Sent Events (SSE) stream from a fetch response.
|
|
48
|
+
*
|
|
49
|
+
* This async generator reads a streaming response body conforming to the
|
|
50
|
+
* Server-Sent Events specification and yields parsed event objects. It handles
|
|
51
|
+
* SSE event delimiters (double newlines), parses event fields (event, data, id,
|
|
52
|
+
* retry), and buffers incomplete events. Supports cancellation via abort signal.
|
|
53
|
+
*
|
|
54
|
+
* @param response - Fetch Response object with SSE formatted body
|
|
55
|
+
* @param options - Configuration including optional abort signal
|
|
56
|
+
* @yields Parsed SSE events with event type, data, id, and retry fields
|
|
57
|
+
* @throws {Error} If response body is null
|
|
31
58
|
*
|
|
32
|
-
* @
|
|
33
|
-
*
|
|
34
|
-
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const response = await fetch('/api/chat');
|
|
62
|
+
* const abortController = new AbortController();
|
|
63
|
+
*
|
|
64
|
+
* for await (const event of parseSSEStream(response, {
|
|
65
|
+
* signal: abortController.signal
|
|
66
|
+
* })) {
|
|
67
|
+
* console.log('Event:', event.event, 'Data:', event.data);
|
|
68
|
+
* if (event.data === '[DONE]') break;
|
|
69
|
+
* }
|
|
70
|
+
* ```
|
|
35
71
|
*/
|
|
36
72
|
export declare function parseSSEStream(response: Response, options?: {
|
|
37
73
|
signal?: AbortSignal;
|
|
@@ -50,32 +86,92 @@ export interface SSEEvent {
|
|
|
50
86
|
retry?: number;
|
|
51
87
|
}
|
|
52
88
|
/**
|
|
53
|
-
* Transform a ReadableStream
|
|
89
|
+
* Transform a ReadableStream by applying a function to each chunk.
|
|
90
|
+
*
|
|
91
|
+
* This utility creates a new ReadableStream that applies a transformation
|
|
92
|
+
* function to each chunk from the source stream. The transform function can
|
|
93
|
+
* be synchronous or asynchronous, allowing for complex processing pipelines.
|
|
94
|
+
* Useful for modifying stream data types or content on-the-fly.
|
|
54
95
|
*
|
|
55
|
-
* @param stream - Source
|
|
56
|
-
* @param transform -
|
|
57
|
-
* @returns
|
|
96
|
+
* @param stream - Source ReadableStream to transform
|
|
97
|
+
* @param transform - Function to apply to each chunk (sync or async)
|
|
98
|
+
* @returns New ReadableStream emitting transformed chunks
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```typescript
|
|
102
|
+
* const textStream = fetchStream(); // ReadableStream<Uint8Array>
|
|
103
|
+
* const uppercaseStream = transformStream(textStream, (chunk) => {
|
|
104
|
+
* const text = new TextDecoder().decode(chunk);
|
|
105
|
+
* return new TextEncoder().encode(text.toUpperCase());
|
|
106
|
+
* });
|
|
107
|
+
* ```
|
|
58
108
|
*/
|
|
59
109
|
export declare function transformStream<T, U>(stream: ReadableStream<T>, transform: (chunk: T) => U | Promise<U>): ReadableStream<U>;
|
|
60
110
|
/**
|
|
61
|
-
* Merge multiple
|
|
111
|
+
* Merge multiple ReadableStreams into a single stream.
|
|
112
|
+
*
|
|
113
|
+
* This utility combines multiple source streams into one output stream,
|
|
114
|
+
* reading from all sources concurrently and emitting chunks as they arrive
|
|
115
|
+
* from any source. The merged stream closes when all source streams complete.
|
|
116
|
+
* Useful for combining multiple AI model responses or parallel data sources.
|
|
62
117
|
*
|
|
63
|
-
* @param streams -
|
|
64
|
-
* @returns
|
|
118
|
+
* @param streams - Variable number of ReadableStreams to merge
|
|
119
|
+
* @returns Single ReadableStream emitting chunks from all sources
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* const stream1 = fetch('/api/model1').then(r => r.body!);
|
|
124
|
+
* const stream2 = fetch('/api/model2').then(r => r.body!);
|
|
125
|
+
* const combined = mergeStreams(stream1, stream2);
|
|
126
|
+
*
|
|
127
|
+
* for await (const chunk of toAsyncIterable(combined)) {
|
|
128
|
+
* console.log('Chunk from either stream:', chunk);
|
|
129
|
+
* }
|
|
130
|
+
* ```
|
|
65
131
|
*/
|
|
66
132
|
export declare function mergeStreams<T>(...streams: ReadableStream<T>[]): ReadableStream<T>;
|
|
67
133
|
/**
|
|
68
|
-
* Create a
|
|
134
|
+
* Create a ReadableStream from an async iterable source.
|
|
135
|
+
*
|
|
136
|
+
* This utility converts any async iterable (like async generators) into a
|
|
137
|
+
* ReadableStream, making it compatible with browser streaming APIs and
|
|
138
|
+
* React streaming hooks. Useful for bridging between Node.js-style async
|
|
139
|
+
* iterators and Web Streams API.
|
|
140
|
+
*
|
|
141
|
+
* @param iterable - Any async iterable source (async generator, etc.)
|
|
142
|
+
* @returns ReadableStream emitting values from the iterable
|
|
69
143
|
*
|
|
70
|
-
* @
|
|
71
|
-
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```typescript
|
|
146
|
+
* async function* generateData() {
|
|
147
|
+
* yield 'chunk 1';
|
|
148
|
+
* yield 'chunk 2';
|
|
149
|
+
* yield 'chunk 3';
|
|
150
|
+
* }
|
|
151
|
+
*
|
|
152
|
+
* const stream = fromAsyncIterable(generateData());
|
|
153
|
+
* const response = new Response(stream);
|
|
154
|
+
* ```
|
|
72
155
|
*/
|
|
73
156
|
export declare function fromAsyncIterable<T>(iterable: AsyncIterable<T>): ReadableStream<T>;
|
|
74
157
|
/**
|
|
75
|
-
* Convert a ReadableStream to an async iterable.
|
|
158
|
+
* Convert a ReadableStream to an async iterable for use in for-await loops.
|
|
159
|
+
*
|
|
160
|
+
* This async generator wraps a ReadableStream and yields each chunk,
|
|
161
|
+
* allowing you to consume Web Streams using async iteration syntax.
|
|
162
|
+
* Properly handles reader lifecycle and ensures the lock is released.
|
|
163
|
+
* Useful for consuming fetch responses in a more ergonomic way.
|
|
164
|
+
*
|
|
165
|
+
* @param stream - ReadableStream to convert
|
|
166
|
+
* @yields Each chunk from the stream
|
|
76
167
|
*
|
|
77
|
-
* @
|
|
78
|
-
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* const response = await fetch('/api/stream');
|
|
171
|
+
* for await (const chunk of toAsyncIterable(response.body!)) {
|
|
172
|
+
* console.log('Received chunk:', chunk);
|
|
173
|
+
* }
|
|
174
|
+
* ```
|
|
79
175
|
*/
|
|
80
176
|
export declare function toAsyncIterable<T>(stream: ReadableStream<T>): AsyncGenerator<T, void, unknown>;
|
|
81
177
|
//# sourceMappingURL=stream-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-utils.d.ts","sourceRoot":"","sources":["../../src/stream-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,4BAA4B;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,mCAAmC;IACnC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,sBAAsB;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,mBAAmB;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED
|
|
1
|
+
{"version":3,"file":"stream-utils.d.ts","sourceRoot":"","sources":["../../src/stream-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,4BAA4B;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,mCAAmC;IACnC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,sBAAsB;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,mBAAmB;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,MAAM,CAAC,CAoCjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAuB,cAAc,CACnC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACrC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAgDzC;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8CD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAClC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACtC,cAAc,CAAC,CAAC,CAAC,CAmBnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAiClF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAkBlF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAuB,eAAe,CAAC,CAAC,EACtC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAgBlC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai.matey.react.stream",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "React streaming utilities for AI Matey - StreamProvider, StreamContext",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -31,7 +31,9 @@
|
|
|
31
31
|
"build:types": "tsc -p tsconfig.types.json",
|
|
32
32
|
"clean": "rm -rf dist",
|
|
33
33
|
"typecheck": "tsc --noEmit",
|
|
34
|
-
"test": "vitest run"
|
|
34
|
+
"test": "vitest run",
|
|
35
|
+
"lint": "eslint src --ext .ts,.tsx",
|
|
36
|
+
"lint:fix": "eslint src --ext .ts,.tsx --fix"
|
|
35
37
|
},
|
|
36
38
|
"dependencies": {
|
|
37
39
|
"ai.matey.types": "*",
|