assistant-stream 0.3.14 → 0.3.16
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/README.md +6 -4
- package/dist/core/AssistantStream.d.ts +50 -9
- package/dist/core/AssistantStream.d.ts.map +1 -1
- package/dist/core/AssistantStream.js +39 -15
- package/dist/core/AssistantStream.js.map +1 -1
- package/dist/core/AssistantStreamChunk.d.ts +84 -61
- package/dist/core/AssistantStreamChunk.d.ts.map +1 -1
- package/dist/core/AssistantStreamChunk.js +0 -2
- package/dist/core/accumulators/AssistantMessageStream.d.ts +15 -11
- package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -1
- package/dist/core/accumulators/AssistantMessageStream.js +52 -48
- package/dist/core/accumulators/AssistantMessageStream.js.map +1 -1
- package/dist/core/accumulators/TimingTracker.d.ts +15 -11
- package/dist/core/accumulators/TimingTracker.d.ts.map +1 -1
- package/dist/core/accumulators/TimingTracker.js +36 -43
- package/dist/core/accumulators/TimingTracker.js.map +1 -1
- package/dist/core/accumulators/assistant-message-accumulator.d.ts +21 -11
- package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -1
- package/dist/core/accumulators/assistant-message-accumulator.js +349 -390
- package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
- package/dist/core/converters/toGenericMessages.d.ts +49 -47
- package/dist/core/converters/toGenericMessages.d.ts.map +1 -1
- package/dist/core/converters/toGenericMessages.js +122 -136
- package/dist/core/converters/toGenericMessages.js.map +1 -1
- package/dist/core/modules/assistant-stream.d.ts +92 -28
- package/dist/core/modules/assistant-stream.d.ts.map +1 -1
- package/dist/core/modules/assistant-stream.js +177 -162
- package/dist/core/modules/assistant-stream.js.map +1 -1
- package/dist/core/modules/text.d.ts +11 -7
- package/dist/core/modules/text.d.ts.map +1 -1
- package/dist/core/modules/text.js +45 -45
- package/dist/core/modules/text.js.map +1 -1
- package/dist/core/modules/tool-call.d.ts +15 -11
- package/dist/core/modules/tool-call.d.ts.map +1 -1
- package/dist/core/modules/tool-call.js +81 -96
- package/dist/core/modules/tool-call.js.map +1 -1
- package/dist/core/object/ObjectStreamAccumulator.d.ts +13 -9
- package/dist/core/object/ObjectStreamAccumulator.d.ts.map +1 -1
- package/dist/core/object/ObjectStreamAccumulator.js +44 -52
- package/dist/core/object/ObjectStreamAccumulator.js.map +1 -1
- package/dist/core/object/ObjectStreamResponse.d.ts +12 -8
- package/dist/core/object/ObjectStreamResponse.d.ts.map +1 -1
- package/dist/core/object/ObjectStreamResponse.js +52 -71
- package/dist/core/object/ObjectStreamResponse.js.map +1 -1
- package/dist/core/object/createObjectStream.d.ts +14 -8
- package/dist/core/object/createObjectStream.d.ts.map +1 -1
- package/dist/core/object/createObjectStream.js +50 -47
- package/dist/core/object/createObjectStream.js.map +1 -1
- package/dist/core/object/types.d.ts +14 -11
- package/dist/core/object/types.d.ts.map +1 -1
- package/dist/core/object/types.js +0 -2
- package/dist/core/serialization/PlainText.d.ts +11 -7
- package/dist/core/serialization/PlainText.d.ts.map +1 -1
- package/dist/core/serialization/PlainText.js +40 -48
- package/dist/core/serialization/PlainText.js.map +1 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts +11 -7
- package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts.map +1 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.js +102 -117
- package/dist/core/serialization/assistant-transport/AssistantTransport.js.map +1 -1
- package/dist/core/serialization/data-stream/DataStream.d.ts +11 -7
- package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/DataStream.js +320 -371
- package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
- package/dist/core/serialization/data-stream/chunk-types.d.ts +101 -100
- package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/chunk-types.js +27 -23
- package/dist/core/serialization/data-stream/chunk-types.js.map +1 -1
- package/dist/core/serialization/data-stream/serialization.d.ts +9 -5
- package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/serialization.js +23 -24
- package/dist/core/serialization/data-stream/serialization.js.map +1 -1
- package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts +15 -12
- package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts.map +1 -1
- package/dist/core/serialization/ui-message-stream/UIMessageStream.js +205 -228
- package/dist/core/serialization/ui-message-stream/UIMessageStream.js.map +1 -1
- package/dist/core/serialization/ui-message-stream/chunk-types.d.ts +68 -65
- package/dist/core/serialization/ui-message-stream/chunk-types.d.ts.map +1 -1
- package/dist/core/serialization/ui-message-stream/chunk-types.js +0 -2
- package/dist/core/tool/ToolCallReader.d.ts +34 -30
- package/dist/core/tool/ToolCallReader.d.ts.map +1 -1
- package/dist/core/tool/ToolCallReader.js +264 -317
- package/dist/core/tool/ToolCallReader.js.map +1 -1
- package/dist/core/tool/ToolExecutionStream.d.ts +20 -17
- package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -1
- package/dist/core/tool/ToolExecutionStream.js +123 -146
- package/dist/core/tool/ToolExecutionStream.js.map +1 -1
- package/dist/core/tool/ToolResponse.d.ts +60 -19
- package/dist/core/tool/ToolResponse.d.ts.map +1 -1
- package/dist/core/tool/ToolResponse.js +51 -34
- package/dist/core/tool/ToolResponse.js.map +1 -1
- package/dist/core/tool/schema-utils.d.ts +19 -15
- package/dist/core/tool/schema-utils.d.ts.map +1 -1
- package/dist/core/tool/schema-utils.js +50 -84
- package/dist/core/tool/schema-utils.js.map +1 -1
- package/dist/core/tool/tool-types.d.ts +173 -92
- package/dist/core/tool/tool-types.d.ts.map +1 -1
- package/dist/core/tool/tool-types.js +0 -2
- package/dist/core/tool/toolResultStream.d.ts +24 -7
- package/dist/core/tool/toolResultStream.d.ts.map +1 -1
- package/dist/core/tool/toolResultStream.js +128 -145
- package/dist/core/tool/toolResultStream.js.map +1 -1
- package/dist/core/tool/type-path-utils.d.ts +8 -19
- package/dist/core/tool/type-path-utils.d.ts.map +1 -1
- package/dist/core/tool/type-path-utils.js +0 -2
- package/dist/core/utils/Counter.d.ts +6 -3
- package/dist/core/utils/Counter.d.ts.map +1 -1
- package/dist/core/utils/Counter.js +10 -6
- package/dist/core/utils/Counter.js.map +1 -1
- package/dist/core/utils/generateId.d.ts +4 -1
- package/dist/core/utils/generateId.d.ts.map +1 -1
- package/dist/core/utils/generateId.js +5 -1
- package/dist/core/utils/generateId.js.map +1 -1
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +15 -11
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/AssistantMetaTransformStream.js +38 -42
- package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -1
- package/dist/core/utils/stream/AssistantTransformStream.d.ts +11 -8
- package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/AssistantTransformStream.js +37 -35
- package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -1
- package/dist/core/utils/stream/LineDecoderStream.d.ts +6 -3
- package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -1
- package/dist/core/utils/stream/LineDecoderStream.js +23 -26
- package/dist/core/utils/stream/LineDecoderStream.js.map +1 -1
- package/dist/core/utils/stream/PipeableTransformStream.d.ts +5 -2
- package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/PipeableTransformStream.js +14 -10
- package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -1
- package/dist/core/utils/stream/SSE.d.ts +10 -6
- package/dist/core/utils/stream/SSE.d.ts.map +1 -1
- package/dist/core/utils/stream/SSE.js +79 -91
- package/dist/core/utils/stream/SSE.js.map +1 -1
- package/dist/core/utils/stream/UnderlyingReadable.d.ts +7 -4
- package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -1
- package/dist/core/utils/stream/UnderlyingReadable.js +0 -2
- package/dist/core/utils/stream/merge.d.ts +11 -7
- package/dist/core/utils/stream/merge.d.ts.map +1 -1
- package/dist/core/utils/stream/merge.js +68 -170
- package/dist/core/utils/stream/merge.js.map +1 -1
- package/dist/core/utils/stream/path-utils.d.ts +11 -7
- package/dist/core/utils/stream/path-utils.d.ts.map +1 -1
- package/dist/core/utils/stream/path-utils.js +46 -52
- package/dist/core/utils/stream/path-utils.js.map +1 -1
- package/dist/core/utils/types.d.ts +109 -113
- package/dist/core/utils/types.d.ts.map +1 -1
- package/dist/core/utils/types.js +0 -2
- package/dist/core/utils/withPromiseOrValue.d.ts +4 -1
- package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -1
- package/dist/core/utils/withPromiseOrValue.js +12 -15
- package/dist/core/utils/withPromiseOrValue.js.map +1 -1
- package/dist/index.d.ts +23 -24
- package/dist/index.js +16 -16
- package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts +141 -0
- package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts.map +1 -0
- package/dist/resumable/ResumableStreamContext.d.ts +28 -24
- package/dist/resumable/ResumableStreamContext.d.ts.map +1 -1
- package/dist/resumable/ResumableStreamContext.js +99 -114
- package/dist/resumable/ResumableStreamContext.js.map +1 -1
- package/dist/resumable/constants.d.ts +4 -1
- package/dist/resumable/constants.d.ts.map +1 -1
- package/dist/resumable/constants.js +5 -1
- package/dist/resumable/constants.js.map +1 -1
- package/dist/resumable/createResumableAssistantStreamResponse.d.ts +22 -21
- package/dist/resumable/createResumableAssistantStreamResponse.d.ts.map +1 -1
- package/dist/resumable/createResumableAssistantStreamResponse.js +25 -32
- package/dist/resumable/createResumableAssistantStreamResponse.js.map +1 -1
- package/dist/resumable/errors.d.ts +8 -5
- package/dist/resumable/errors.d.ts.map +1 -1
- package/dist/resumable/errors.js +14 -12
- package/dist/resumable/errors.js.map +1 -1
- package/dist/resumable/index.d.ts +7 -7
- package/dist/resumable/index.js +5 -5
- package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts +14 -10
- package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts.map +1 -1
- package/dist/resumable/stores/InMemoryResumableStreamStore.js +159 -193
- package/dist/resumable/stores/InMemoryResumableStreamStore.js.map +1 -1
- package/dist/resumable/stores/ioredis.d.ts +9 -5
- package/dist/resumable/stores/ioredis.d.ts.map +1 -1
- package/dist/resumable/stores/ioredis.js +70 -82
- package/dist/resumable/stores/ioredis.js.map +1 -1
- package/dist/resumable/stores/redis-impl.d.ts +51 -48
- package/dist/resumable/stores/redis-impl.d.ts.map +1 -1
- package/dist/resumable/stores/redis-impl.js +176 -176
- package/dist/resumable/stores/redis-impl.js.map +1 -1
- package/dist/resumable/stores/redis.d.ts +31 -28
- package/dist/resumable/stores/redis.d.ts.map +1 -1
- package/dist/resumable/stores/redis.js +87 -95
- package/dist/resumable/stores/redis.js.map +1 -1
- package/dist/resumable/types.d.ts +29 -26
- package/dist/resumable/types.d.ts.map +1 -1
- package/dist/resumable/types.js +0 -2
- package/dist/utils/AsyncIterableStream.d.ts +5 -2
- package/dist/utils/AsyncIterableStream.d.ts.map +1 -1
- package/dist/utils/AsyncIterableStream.js +17 -16
- package/dist/utils/AsyncIterableStream.js.map +1 -1
- package/dist/utils/json/fix-json.d.ts +4 -1
- package/dist/utils/json/fix-json.d.ts.map +1 -1
- package/dist/utils/json/fix-json.js +286 -380
- package/dist/utils/json/fix-json.js.map +1 -1
- package/dist/utils/json/is-json.d.ts +8 -4
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/is-json.js +13 -21
- package/dist/utils/json/is-json.js.map +1 -1
- package/dist/utils/json/json-value.d.ts +7 -4
- package/dist/utils/json/json-value.d.ts.map +1 -1
- package/dist/utils/json/json-value.js +0 -2
- package/dist/utils/json/parse-partial-json-object.d.ts +11 -8
- package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -1
- package/dist/utils/json/parse-partial-json-object.js +50 -62
- package/dist/utils/json/parse-partial-json-object.js.map +1 -1
- package/dist/utils/promiseWithResolvers.d.ts +7 -4
- package/dist/utils/promiseWithResolvers.d.ts.map +1 -1
- package/dist/utils/promiseWithResolvers.js +17 -10
- package/dist/utils/promiseWithResolvers.js.map +1 -1
- package/dist/utils.d.ts +6 -6
- package/dist/utils.js +5 -5
- package/package.json +5 -4
- package/src/core/AssistantStream.ts +37 -0
- package/src/core/AssistantStreamChunk.ts +30 -0
- package/src/core/modules/assistant-stream.ts +68 -0
- package/src/core/tool/ToolResponse.ts +45 -1
- package/src/core/tool/tool-types.ts +102 -2
- package/src/core/tool/toolResultStream.ts +15 -0
- package/dist/core/AssistantStreamChunk.js.map +0 -1
- package/dist/core/object/types.js.map +0 -1
- package/dist/core/serialization/ui-message-stream/chunk-types.js.map +0 -1
- package/dist/core/tool/tool-types.js.map +0 -1
- package/dist/core/tool/type-path-utils.js.map +0 -1
- package/dist/core/utils/stream/UnderlyingReadable.js.map +0 -1
- package/dist/core/utils/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/resumable/index.d.ts.map +0 -1
- package/dist/resumable/index.js.map +0 -1
- package/dist/resumable/types.js.map +0 -1
- package/dist/utils/json/json-value.js.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js.map +0 -1
|
@@ -1,43 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
}
|
|
1
|
+
//#region src/core/utils/stream/AssistantMetaTransformStream.ts
|
|
2
|
+
var AssistantMetaTransformStream = class extends TransformStream {
|
|
3
|
+
constructor() {
|
|
4
|
+
const parts = [];
|
|
5
|
+
super({ transform(chunk, controller) {
|
|
6
|
+
if (chunk.type === "part-start") {
|
|
7
|
+
if (chunk.path.length !== 0) {
|
|
8
|
+
controller.error(/* @__PURE__ */ new Error("Nested parts are not supported"));
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
parts.push(chunk.part);
|
|
12
|
+
controller.enqueue(chunk);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (chunk.type === "text-delta" || chunk.type === "result" || chunk.type === "part-finish" || chunk.type === "tool-call-args-text-finish") {
|
|
16
|
+
if (chunk.path.length !== 1) {
|
|
17
|
+
controller.error(/* @__PURE__ */ new Error(`${chunk.type} chunks must have a path of length 1`));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const idx = chunk.path[0];
|
|
21
|
+
if (idx < 0 || idx >= parts.length) {
|
|
22
|
+
controller.error(/* @__PURE__ */ new Error(`Invalid path index: ${idx}`));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const part = parts[idx];
|
|
26
|
+
controller.enqueue({
|
|
27
|
+
...chunk,
|
|
28
|
+
meta: part
|
|
29
|
+
});
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
controller.enqueue(chunk);
|
|
33
|
+
} });
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
//#endregion
|
|
37
|
+
export { AssistantMetaTransformStream };
|
|
38
|
+
|
|
43
39
|
//# sourceMappingURL=AssistantMetaTransformStream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantMetaTransformStream.js","
|
|
1
|
+
{"version":3,"file":"AssistantMetaTransformStream.js","names":[],"sources":["../../../../src/core/utils/stream/AssistantMetaTransformStream.ts"],"sourcesContent":["import type {\n AssistantStreamChunk,\n PartInit,\n} from \"../../AssistantStreamChunk\";\n\n/**\n * For chunk types that are associated with a part,\n * we require a non‑nullable meta field.\n */\nexport type AssistantMetaStreamChunk =\n | (AssistantStreamChunk & {\n type: \"text-delta\" | \"part-finish\";\n meta: PartInit;\n })\n | (AssistantStreamChunk & {\n type: \"result\" | \"tool-call-args-text-finish\";\n meta: PartInit & { type: \"tool-call\" };\n })\n | (AssistantStreamChunk & {\n type: Exclude<\n AssistantStreamChunk[\"type\"],\n \"text-delta\" | \"result\" | \"tool-call-args-text-finish\" | \"part-finish\"\n >;\n });\nexport class AssistantMetaTransformStream extends TransformStream<\n AssistantStreamChunk,\n AssistantMetaStreamChunk\n> {\n constructor() {\n // We use an array to record parts as they are introduced.\n const parts: PartInit[] = [];\n\n super({\n transform(chunk, controller) {\n // For chunks that introduce a new part.\n if (chunk.type === \"part-start\") {\n if (chunk.path.length !== 0) {\n controller.error(new Error(\"Nested parts are not supported\"));\n return;\n }\n parts.push(chunk.part);\n controller.enqueue(chunk);\n return;\n }\n\n // For chunks that expect an associated part.\n if (\n chunk.type === \"text-delta\" ||\n chunk.type === \"result\" ||\n chunk.type === \"part-finish\" ||\n chunk.type === \"tool-call-args-text-finish\"\n ) {\n if (chunk.path.length !== 1) {\n controller.error(\n new Error(`${chunk.type} chunks must have a path of length 1`),\n );\n return;\n }\n const idx = chunk.path[0]!;\n if (idx < 0 || idx >= parts.length) {\n controller.error(new Error(`Invalid path index: ${idx}`));\n return;\n }\n const part = parts[idx]!;\n\n controller.enqueue({\n ...chunk,\n meta: part as any, // TODO\n });\n return;\n }\n\n controller.enqueue(chunk);\n },\n });\n }\n}\n"],"mappings":";AAwBA,IAAa,+BAAb,cAAkD,gBAGhD;CACA,cAAc;EAEZ,MAAM,QAAoB,CAAC;EAE3B,MAAM,EACJ,UAAU,OAAO,YAAY;GAE3B,IAAI,MAAM,SAAS,cAAc;IAC/B,IAAI,MAAM,KAAK,WAAW,GAAG;KAC3B,WAAW,sBAAM,IAAI,MAAM,gCAAgC,CAAC;KAC5D;IACF;IACA,MAAM,KAAK,MAAM,IAAI;IACrB,WAAW,QAAQ,KAAK;IACxB;GACF;GAGA,IACE,MAAM,SAAS,gBACf,MAAM,SAAS,YACf,MAAM,SAAS,iBACf,MAAM,SAAS,8BACf;IACA,IAAI,MAAM,KAAK,WAAW,GAAG;KAC3B,WAAW,sBACT,IAAI,MAAM,GAAG,MAAM,KAAK,qCAAqC,CAC/D;KACA;IACF;IACA,MAAM,MAAM,MAAM,KAAK;IACvB,IAAI,MAAM,KAAK,OAAO,MAAM,QAAQ;KAClC,WAAW,sBAAM,IAAI,MAAM,uBAAuB,KAAK,CAAC;KACxD;IACF;IACA,MAAM,OAAO,MAAM;IAEnB,WAAW,QAAQ;KACjB,GAAG;KACH,MAAM;IACR,CAAC;IACD;GACF;GAEA,WAAW,QAAQ,KAAK;EAC1B,EACF,CAAC;CACH;AACF"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { AssistantStreamController } from "../../modules/assistant-stream.js";
|
|
2
|
+
import { AssistantStreamChunk } from "../../AssistantStreamChunk.js";
|
|
3
|
+
|
|
4
|
+
//#region src/core/utils/stream/AssistantTransformStream.d.ts
|
|
3
5
|
type AssistantTransformerFlushCallback = (controller: AssistantStreamController) => void | PromiseLike<void>;
|
|
4
6
|
type AssistantTransformerStartCallback = (controller: AssistantStreamController) => void | PromiseLike<void>;
|
|
5
7
|
type AssistantTransformerTransformCallback<I> = (chunk: I, controller: AssistantStreamController) => void | PromiseLike<void>;
|
|
6
8
|
type AssistantTransformer<I> = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
flush?: AssistantTransformerFlushCallback;
|
|
10
|
+
start?: AssistantTransformerStartCallback;
|
|
11
|
+
transform?: AssistantTransformerTransformCallback<I>;
|
|
10
12
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
declare class AssistantTransformStream<I> extends TransformStream<I, AssistantStreamChunk> {
|
|
14
|
+
constructor(transformer: AssistantTransformer<I>, writableStrategy?: QueuingStrategy<I>, readableStrategy?: QueuingStrategy<AssistantStreamChunk>);
|
|
13
15
|
}
|
|
14
|
-
|
|
16
|
+
//#endregion
|
|
17
|
+
export { AssistantTransformStream };
|
|
15
18
|
//# sourceMappingURL=AssistantTransformStream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantTransformStream.d.ts","
|
|
1
|
+
{"version":3,"file":"AssistantTransformStream.d.ts","names":[],"sources":["../../../../src/core/utils/stream/AssistantTransformStream.ts"],"mappings":";;;;KAMK,iCAAA,IACH,UAAA,EAAY,yBAAA,YACF,WAAW;AAAA,KAElB,iCAAA,IACH,UAAA,EAAY,yBAAA,YACF,WAAW;AAAA,KAElB,qCAAA,OACH,KAAA,EAAO,CAAA,EACP,UAAA,EAAY,yBAAA,YACF,WAAA;AAAA,KAEP,oBAAA;EACH,KAAA,GAAQ,iCAAA;EACR,KAAA,GAAQ,iCAAA;EACR,SAAA,GAAY,qCAAA,CAAsC,CAAA;AAAA;AAAA,cAGvC,wBAAA,YAAoC,eAAA,CAC/C,CAAA,EACA,oBAAA;cAGE,WAAA,EAAa,oBAAA,CAAqB,CAAA,GAClC,gBAAA,GAAmB,eAAA,CAAgB,CAAA,GACnC,gBAAA,GAAmB,eAAA,CAAgB,oBAAA;AAAA"}
|
|
@@ -1,36 +1,38 @@
|
|
|
1
|
-
import { createAssistantStreamController
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
1
|
+
import { createAssistantStreamController } from "../../modules/assistant-stream.js";
|
|
2
|
+
//#region src/core/utils/stream/AssistantTransformStream.ts
|
|
3
|
+
var AssistantTransformStream = class extends TransformStream {
|
|
4
|
+
constructor(transformer, writableStrategy, readableStrategy) {
|
|
5
|
+
const [stream, runController] = createAssistantStreamController();
|
|
6
|
+
let runPipeTask;
|
|
7
|
+
super({
|
|
8
|
+
start(controller) {
|
|
9
|
+
runPipeTask = stream.pipeTo(new WritableStream({
|
|
10
|
+
write(chunk) {
|
|
11
|
+
controller.enqueue(chunk);
|
|
12
|
+
},
|
|
13
|
+
abort(reason) {
|
|
14
|
+
controller.error(reason);
|
|
15
|
+
},
|
|
16
|
+
close() {
|
|
17
|
+
controller.terminate();
|
|
18
|
+
}
|
|
19
|
+
})).catch((error) => {
|
|
20
|
+
controller.error(error);
|
|
21
|
+
});
|
|
22
|
+
return transformer.start?.(runController);
|
|
23
|
+
},
|
|
24
|
+
transform(chunk) {
|
|
25
|
+
return transformer.transform?.(chunk, runController);
|
|
26
|
+
},
|
|
27
|
+
async flush() {
|
|
28
|
+
await transformer.flush?.(runController);
|
|
29
|
+
runController.close();
|
|
30
|
+
await runPipeTask;
|
|
31
|
+
}
|
|
32
|
+
}, writableStrategy, readableStrategy);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
//#endregion
|
|
36
|
+
export { AssistantTransformStream };
|
|
37
|
+
|
|
36
38
|
//# sourceMappingURL=AssistantTransformStream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantTransformStream.js","
|
|
1
|
+
{"version":3,"file":"AssistantTransformStream.js","names":[],"sources":["../../../../src/core/utils/stream/AssistantTransformStream.ts"],"sourcesContent":["import type { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport {\n type AssistantStreamController,\n createAssistantStreamController,\n} from \"../../modules/assistant-stream\";\n\ntype AssistantTransformerFlushCallback = (\n controller: AssistantStreamController,\n) => void | PromiseLike<void>;\n\ntype AssistantTransformerStartCallback = (\n controller: AssistantStreamController,\n) => void | PromiseLike<void>;\n\ntype AssistantTransformerTransformCallback<I> = (\n chunk: I,\n controller: AssistantStreamController,\n) => void | PromiseLike<void>;\n\ntype AssistantTransformer<I> = {\n flush?: AssistantTransformerFlushCallback;\n start?: AssistantTransformerStartCallback;\n transform?: AssistantTransformerTransformCallback<I>;\n};\n\nexport class AssistantTransformStream<I> extends TransformStream<\n I,\n AssistantStreamChunk\n> {\n constructor(\n transformer: AssistantTransformer<I>,\n writableStrategy?: QueuingStrategy<I>,\n readableStrategy?: QueuingStrategy<AssistantStreamChunk>,\n ) {\n const [stream, runController] = createAssistantStreamController();\n\n let runPipeTask: Promise<void>;\n super(\n {\n start(controller) {\n runPipeTask = stream\n .pipeTo(\n new WritableStream({\n write(chunk) {\n controller.enqueue(chunk);\n },\n abort(reason?: any) {\n controller.error(reason);\n },\n close() {\n controller.terminate();\n },\n }),\n )\n .catch((error) => {\n controller.error(error);\n });\n\n return transformer.start?.(runController);\n },\n transform(chunk) {\n return transformer.transform?.(chunk, runController);\n },\n async flush() {\n await transformer.flush?.(runController);\n runController.close();\n await runPipeTask;\n },\n },\n writableStrategy,\n readableStrategy,\n );\n }\n}\n"],"mappings":";;AAyBA,IAAa,2BAAb,cAAiD,gBAG/C;CACA,YACE,aACA,kBACA,kBACA;EACA,MAAM,CAAC,QAAQ,iBAAiB,gCAAgC;EAEhE,IAAI;EACJ,MACE;GACE,MAAM,YAAY;IAChB,cAAc,OACX,OACC,IAAI,eAAe;KACjB,MAAM,OAAO;MACX,WAAW,QAAQ,KAAK;KAC1B;KACA,MAAM,QAAc;MAClB,WAAW,MAAM,MAAM;KACzB;KACA,QAAQ;MACN,WAAW,UAAU;KACvB;IACF,CAAC,CACH,EACC,OAAO,UAAU;KAChB,WAAW,MAAM,KAAK;IACxB,CAAC;IAEH,OAAO,YAAY,QAAQ,aAAa;GAC1C;GACA,UAAU,OAAO;IACf,OAAO,YAAY,YAAY,OAAO,aAAa;GACrD;GACA,MAAM,QAAQ;IACZ,MAAM,YAAY,QAAQ,aAAa;IACvC,cAAc,MAAM;IACpB,MAAM;GACR;EACF,GACA,kBACA,gBACF;CACF;AACF"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
//#region src/core/utils/stream/LineDecoderStream.d.ts
|
|
2
|
+
declare class LineDecoderStream extends TransformStream<string, string> {
|
|
3
|
+
private buffer;
|
|
4
|
+
constructor();
|
|
4
5
|
}
|
|
6
|
+
//#endregion
|
|
7
|
+
export { LineDecoderStream };
|
|
5
8
|
//# sourceMappingURL=LineDecoderStream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineDecoderStream.d.ts","
|
|
1
|
+
{"version":3,"file":"LineDecoderStream.d.ts","names":[],"sources":["../../../../src/core/utils/stream/LineDecoderStream.ts"],"mappings":";cAAa,iBAAA,SAA0B,eAAe;EAAA,QAC5C,MAAA"}
|
|
@@ -1,27 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
//#region src/core/utils/stream/LineDecoderStream.ts
|
|
2
|
+
var LineDecoderStream = class extends TransformStream {
|
|
3
|
+
buffer = "";
|
|
4
|
+
constructor() {
|
|
5
|
+
super({
|
|
6
|
+
transform: (chunk, controller) => {
|
|
7
|
+
this.buffer += chunk;
|
|
8
|
+
const lines = this.buffer.split("\n");
|
|
9
|
+
for (let i = 0; i < lines.length - 1; i++) {
|
|
10
|
+
const line = lines[i];
|
|
11
|
+
controller.enqueue(line.endsWith("\r") ? line.slice(0, -1) : line);
|
|
12
|
+
}
|
|
13
|
+
this.buffer = lines[lines.length - 1] || "";
|
|
14
|
+
},
|
|
15
|
+
flush: () => {
|
|
16
|
+
if (this.buffer) throw new Error(`Stream ended with an incomplete line: "${this.buffer}"`);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
//#endregion
|
|
22
|
+
export { LineDecoderStream };
|
|
23
|
+
|
|
27
24
|
//# sourceMappingURL=LineDecoderStream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineDecoderStream.js","
|
|
1
|
+
{"version":3,"file":"LineDecoderStream.js","names":[],"sources":["../../../../src/core/utils/stream/LineDecoderStream.ts"],"sourcesContent":["export class LineDecoderStream extends TransformStream<string, string> {\n private buffer = \"\";\n\n constructor() {\n super({\n transform: (chunk, controller) => {\n this.buffer += chunk;\n const lines = this.buffer.split(\"\\n\");\n\n // Process all complete lines\n for (let i = 0; i < lines.length - 1; i++) {\n // Strip trailing \\r to handle \\r\\n (CRLF) line endings per the SSE spec.\n const line = lines[i]!;\n controller.enqueue(line.endsWith(\"\\r\") ? line.slice(0, -1) : line);\n }\n\n // Keep the last incomplete line in the buffer\n this.buffer = lines[lines.length - 1] || \"\";\n },\n flush: () => {\n // If there's content in the buffer when the stream ends, it means\n // the stream ended with an incomplete line (no trailing newline)\n if (this.buffer) {\n throw new Error(\n `Stream ended with an incomplete line: \"${this.buffer}\"`,\n );\n }\n },\n });\n }\n}\n"],"mappings":";AAAA,IAAa,oBAAb,cAAuC,gBAAgC;CACrE,SAAiB;CAEjB,cAAc;EACZ,MAAM;GACJ,YAAY,OAAO,eAAe;IAChC,KAAK,UAAU;IACf,MAAM,QAAQ,KAAK,OAAO,MAAM,IAAI;IAGpC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;KAEzC,MAAM,OAAO,MAAM;KACnB,WAAW,QAAQ,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI,IAAI;IACnE;IAGA,KAAK,SAAS,MAAM,MAAM,SAAS,MAAM;GAC3C;GACA,aAAa;IAGX,IAAI,KAAK,QACP,MAAM,IAAI,MACR,0CAA0C,KAAK,OAAO,EACxD;GAEJ;EACF,CAAC;CACH;AACF"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
//#region src/core/utils/stream/PipeableTransformStream.d.ts
|
|
2
|
+
declare class PipeableTransformStream<I, O> extends TransformStream<I, O> {
|
|
3
|
+
constructor(transform: (readable: ReadableStream<I>) => ReadableStream<O>);
|
|
3
4
|
}
|
|
5
|
+
//#endregion
|
|
6
|
+
export { PipeableTransformStream };
|
|
4
7
|
//# sourceMappingURL=PipeableTransformStream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipeableTransformStream.d.ts","
|
|
1
|
+
{"version":3,"file":"PipeableTransformStream.d.ts","names":[],"sources":["../../../../src/core/utils/stream/PipeableTransformStream.ts"],"mappings":";cAAa,uBAAA,eAAsC,eAAA,CAAgB,CAAA,EAAG,CAAA;cACxD,SAAA,GAAY,QAAA,EAAU,cAAA,CAAe,CAAA,MAAO,cAAA,CAAe,CAAA;AAAA"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
1
|
+
//#region src/core/utils/stream/PipeableTransformStream.ts
|
|
2
|
+
var PipeableTransformStream = class extends TransformStream {
|
|
3
|
+
constructor(transform) {
|
|
4
|
+
super();
|
|
5
|
+
const readable = transform(super.readable);
|
|
6
|
+
Object.defineProperty(this, "readable", {
|
|
7
|
+
value: readable,
|
|
8
|
+
writable: false
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { PipeableTransformStream };
|
|
14
|
+
|
|
11
15
|
//# sourceMappingURL=PipeableTransformStream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipeableTransformStream.js","
|
|
1
|
+
{"version":3,"file":"PipeableTransformStream.js","names":[],"sources":["../../../../src/core/utils/stream/PipeableTransformStream.ts"],"sourcesContent":["export class PipeableTransformStream<I, O> extends TransformStream<I, O> {\n constructor(transform: (readable: ReadableStream<I>) => ReadableStream<O>) {\n super();\n const readable = transform(super.readable as unknown as ReadableStream<I>);\n Object.defineProperty(this, \"readable\", {\n value: readable,\n writable: false,\n });\n }\n}\n"],"mappings":";AAAA,IAAa,0BAAb,cAAmD,gBAAsB;CACvE,YAAY,WAA+D;EACzE,MAAM;EACN,MAAM,WAAW,UAAU,MAAM,QAAwC;EACzE,OAAO,eAAe,MAAM,YAAY;GACtC,OAAO;GACP,UAAU;EACZ,CAAC;CACH;AACF"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { PipeableTransformStream } from "./PipeableTransformStream.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
|
|
3
|
+
//#region src/core/utils/stream/SSE.d.ts
|
|
4
|
+
declare class SSEEncoder<T> extends PipeableTransformStream<T, Uint8Array<ArrayBuffer>> {
|
|
5
|
+
static readonly headers: Headers;
|
|
6
|
+
headers: Headers;
|
|
7
|
+
constructor();
|
|
6
8
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
declare class SSEDecoder<T> extends PipeableTransformStream<Uint8Array<ArrayBuffer>, T> {
|
|
10
|
+
constructor();
|
|
9
11
|
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { SSEDecoder, SSEEncoder };
|
|
10
14
|
//# sourceMappingURL=SSE.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SSE.d.ts","
|
|
1
|
+
{"version":3,"file":"SSE.d.ts","names":[],"sources":["../../../../src/core/utils/stream/SSE.ts"],"mappings":";;;cAGa,UAAA,YAAsB,uBAAA,CACjC,CAAA,EACA,UAAA,CAAW,WAAA;EAAA,gBAEK,OAAA,EAAO,OAAA;EAMvB,OAAA,EAAO,OAAA;;;cAmFI,UAAA,YAAsB,uBAAA,CACjC,UAAA,CAAW,WAAA,GACX,CAAA"}
|
|
@@ -1,94 +1,82 @@
|
|
|
1
1
|
import { PipeableTransformStream } from "./PipeableTransformStream.js";
|
|
2
2
|
import { LineDecoderStream } from "./LineDecoderStream.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
transform(event, controller) {
|
|
83
|
-
switch (event.event) {
|
|
84
|
-
case "message":
|
|
85
|
-
controller.enqueue(JSON.parse(event.data));
|
|
86
|
-
break;
|
|
87
|
-
default:
|
|
88
|
-
throw new Error(`Unknown SSE event type: ${event.event}`);
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
})));
|
|
92
|
-
}
|
|
93
|
-
}
|
|
3
|
+
//#region src/core/utils/stream/SSE.ts
|
|
4
|
+
var SSEEncoder = class SSEEncoder extends PipeableTransformStream {
|
|
5
|
+
static headers = new Headers({
|
|
6
|
+
"Content-Type": "text/event-stream",
|
|
7
|
+
"Cache-Control": "no-cache",
|
|
8
|
+
Connection: "keep-alive"
|
|
9
|
+
});
|
|
10
|
+
headers = SSEEncoder.headers;
|
|
11
|
+
constructor() {
|
|
12
|
+
super((readable) => readable.pipeThrough(new TransformStream({ transform(chunk, controller) {
|
|
13
|
+
controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`);
|
|
14
|
+
} })).pipeThrough(new TextEncoderStream()));
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var SSEEventStream = class extends TransformStream {
|
|
18
|
+
constructor() {
|
|
19
|
+
let eventBuffer = {};
|
|
20
|
+
let dataLines = [];
|
|
21
|
+
super({
|
|
22
|
+
start() {
|
|
23
|
+
eventBuffer = {};
|
|
24
|
+
dataLines = [];
|
|
25
|
+
},
|
|
26
|
+
transform(line, controller) {
|
|
27
|
+
if (line.startsWith(":")) return;
|
|
28
|
+
if (line === "") {
|
|
29
|
+
if (dataLines.length > 0) controller.enqueue({
|
|
30
|
+
event: eventBuffer.event || "message",
|
|
31
|
+
data: dataLines.join("\n"),
|
|
32
|
+
id: eventBuffer.id,
|
|
33
|
+
retry: eventBuffer.retry
|
|
34
|
+
});
|
|
35
|
+
eventBuffer = {};
|
|
36
|
+
dataLines = [];
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const [field, ...rest] = line.split(":");
|
|
40
|
+
const value = rest.join(":").trimStart();
|
|
41
|
+
switch (field) {
|
|
42
|
+
case "event":
|
|
43
|
+
eventBuffer.event = value;
|
|
44
|
+
break;
|
|
45
|
+
case "data":
|
|
46
|
+
dataLines.push(value);
|
|
47
|
+
break;
|
|
48
|
+
case "id":
|
|
49
|
+
eventBuffer.id = value;
|
|
50
|
+
break;
|
|
51
|
+
case "retry":
|
|
52
|
+
eventBuffer.retry = Number(value);
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
flush(controller) {
|
|
57
|
+
if (dataLines.length > 0) controller.enqueue({
|
|
58
|
+
event: eventBuffer.event || "message",
|
|
59
|
+
data: dataLines.join("\n"),
|
|
60
|
+
id: eventBuffer.id,
|
|
61
|
+
retry: eventBuffer.retry
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
var SSEDecoder = class extends PipeableTransformStream {
|
|
68
|
+
constructor() {
|
|
69
|
+
super((readable) => readable.pipeThrough(new TextDecoderStream()).pipeThrough(new LineDecoderStream()).pipeThrough(new SSEEventStream()).pipeThrough(new TransformStream({ transform(event, controller) {
|
|
70
|
+
switch (event.event) {
|
|
71
|
+
case "message":
|
|
72
|
+
controller.enqueue(JSON.parse(event.data));
|
|
73
|
+
break;
|
|
74
|
+
default: throw new Error(`Unknown SSE event type: ${event.event}`);
|
|
75
|
+
}
|
|
76
|
+
} })));
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
//#endregion
|
|
80
|
+
export { SSEDecoder, SSEEncoder };
|
|
81
|
+
|
|
94
82
|
//# sourceMappingURL=SSE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SSE.js","
|
|
1
|
+
{"version":3,"file":"SSE.js","names":[],"sources":["../../../../src/core/utils/stream/SSE.ts"],"sourcesContent":["import { PipeableTransformStream } from \"./PipeableTransformStream\";\nimport { LineDecoderStream } from \"./LineDecoderStream\";\n\nexport class SSEEncoder<T> extends PipeableTransformStream<\n T,\n Uint8Array<ArrayBuffer>\n> {\n static readonly headers = new Headers({\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n });\n\n headers = SSEEncoder.headers;\n\n constructor() {\n super((readable) =>\n readable\n .pipeThrough(\n new TransformStream<T, string>({\n transform(chunk, controller) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`);\n },\n }),\n )\n .pipeThrough(new TextEncoderStream()),\n );\n }\n}\n\ntype SSEEvent = {\n event: string;\n data: string;\n id?: string | undefined;\n retry?: number | undefined;\n};\n\nclass SSEEventStream extends TransformStream<string, SSEEvent> {\n constructor() {\n let eventBuffer: Partial<SSEEvent> = {};\n let dataLines: string[] = [];\n\n super({\n start() {\n eventBuffer = {};\n dataLines = [];\n },\n transform(line, controller) {\n if (line.startsWith(\":\")) return; // Ignore comments\n\n if (line === \"\") {\n if (dataLines.length > 0) {\n controller.enqueue({\n event: eventBuffer.event || \"message\",\n data: dataLines.join(\"\\n\"),\n id: eventBuffer.id,\n retry: eventBuffer.retry,\n });\n }\n eventBuffer = {};\n dataLines = [];\n return;\n }\n\n const [field, ...rest] = line.split(\":\");\n const value = rest.join(\":\").trimStart();\n\n switch (field) {\n case \"event\":\n eventBuffer.event = value;\n break;\n case \"data\":\n dataLines.push(value);\n break;\n case \"id\":\n eventBuffer.id = value;\n break;\n case \"retry\":\n eventBuffer.retry = Number(value);\n break;\n }\n },\n flush(controller) {\n if (dataLines.length > 0) {\n controller.enqueue({\n event: eventBuffer.event || \"message\",\n data: dataLines.join(\"\\n\"),\n id: eventBuffer.id,\n retry: eventBuffer.retry,\n });\n }\n },\n });\n }\n}\n\nexport class SSEDecoder<T> extends PipeableTransformStream<\n Uint8Array<ArrayBuffer>,\n T\n> {\n constructor() {\n super((readable) =>\n readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LineDecoderStream())\n .pipeThrough(new SSEEventStream())\n .pipeThrough(\n new TransformStream<SSEEvent, T>({\n transform(event, controller) {\n switch (event.event) {\n case \"message\":\n controller.enqueue(JSON.parse(event.data));\n break;\n default:\n throw new Error(`Unknown SSE event type: ${event.event}`);\n }\n },\n }),\n ),\n );\n }\n}\n"],"mappings":";;;AAGA,IAAa,aAAb,MAAa,mBAAsB,wBAGjC;CACA,OAAgB,UAAU,IAAI,QAAQ;EACpC,gBAAgB;EAChB,iBAAiB;EACjB,YAAY;CACd,CAAC;CAED,UAAU,WAAW;CAErB,cAAc;EACZ,OAAO,aACL,SACG,YACC,IAAI,gBAA2B,EAC7B,UAAU,OAAO,YAAY;GAC3B,WAAW,QAAQ,SAAS,KAAK,UAAU,KAAK,EAAE,KAAK;EACzD,EACF,CAAC,CACH,EACC,YAAY,IAAI,kBAAkB,CAAC,CACxC;CACF;AACF;AASA,IAAM,iBAAN,cAA6B,gBAAkC;CAC7D,cAAc;EACZ,IAAI,cAAiC,CAAC;EACtC,IAAI,YAAsB,CAAC;EAE3B,MAAM;GACJ,QAAQ;IACN,cAAc,CAAC;IACf,YAAY,CAAC;GACf;GACA,UAAU,MAAM,YAAY;IAC1B,IAAI,KAAK,WAAW,GAAG,GAAG;IAE1B,IAAI,SAAS,IAAI;KACf,IAAI,UAAU,SAAS,GACrB,WAAW,QAAQ;MACjB,OAAO,YAAY,SAAS;MAC5B,MAAM,UAAU,KAAK,IAAI;MACzB,IAAI,YAAY;MAChB,OAAO,YAAY;KACrB,CAAC;KAEH,cAAc,CAAC;KACf,YAAY,CAAC;KACb;IACF;IAEA,MAAM,CAAC,OAAO,GAAG,QAAQ,KAAK,MAAM,GAAG;IACvC,MAAM,QAAQ,KAAK,KAAK,GAAG,EAAE,UAAU;IAEvC,QAAQ,OAAR;KACE,KAAK;MACH,YAAY,QAAQ;MACpB;KACF,KAAK;MACH,UAAU,KAAK,KAAK;MACpB;KACF,KAAK;MACH,YAAY,KAAK;MACjB;KACF,KAAK;MACH,YAAY,QAAQ,OAAO,KAAK;MAChC;IACJ;GACF;GACA,MAAM,YAAY;IAChB,IAAI,UAAU,SAAS,GACrB,WAAW,QAAQ;KACjB,OAAO,YAAY,SAAS;KAC5B,MAAM,UAAU,KAAK,IAAI;KACzB,IAAI,YAAY;KAChB,OAAO,YAAY;IACrB,CAAC;GAEL;EACF,CAAC;CACH;AACF;AAEA,IAAa,aAAb,cAAmC,wBAGjC;CACA,cAAc;EACZ,OAAO,aACL,SACG,YAAY,IAAI,kBAAkB,CAAC,EACnC,YAAY,IAAI,kBAAkB,CAAC,EACnC,YAAY,IAAI,eAAe,CAAC,EAChC,YACC,IAAI,gBAA6B,EAC/B,UAAU,OAAO,YAAY;GAC3B,QAAQ,MAAM,OAAd;IACE,KAAK;KACH,WAAW,QAAQ,KAAK,MAAM,MAAM,IAAI,CAAC;KACzC;IACF,SACE,MAAM,IAAI,MAAM,2BAA2B,MAAM,OAAO;GAC5D;EACF,EACF,CAAC,CACH,CACJ;CACF;AACF"}
|