veryfront 0.1.228 → 0.1.229

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/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.228",
3
+ "version": "0.1.229",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
@@ -0,0 +1,41 @@
1
+ export interface HostedLifecycleTerminalState {
2
+ status: "completed" | "failed" | "cancelled";
3
+ metadata?: {
4
+ modelId?: string;
5
+ usage?: {
6
+ inputTokens?: number;
7
+ outputTokens?: number;
8
+ cachedInputTokens?: number;
9
+ };
10
+ };
11
+ terminalErrorCode?: string | null;
12
+ terminalErrorMessage?: string | null;
13
+ }
14
+ export interface HostedLifecycleExecution<TChunk> {
15
+ stream: AsyncIterable<TChunk>;
16
+ waitForFinish: () => Promise<void>;
17
+ }
18
+ export interface HostedLifecycleAdapter<TRun, TChunk> {
19
+ startRun: (input: {
20
+ abortSignal: AbortSignal;
21
+ }) => Promise<TRun> | TRun;
22
+ appendEvents?: (run: TRun, chunk: TChunk) => Promise<void> | void;
23
+ persistTranscriptChunk?: (run: TRun, chunk: TChunk) => Promise<void> | void;
24
+ persistTranscriptTerminalState?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
25
+ onTerminalState?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
26
+ finalizeRun?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
27
+ cancelRun?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
28
+ }
29
+ export interface HostedLifecycleRunnerOptions<TRun, TChunk> {
30
+ abortSignal: AbortSignal;
31
+ execution: HostedLifecycleExecution<TChunk>;
32
+ adapter: HostedLifecycleAdapter<TRun, TChunk>;
33
+ resolveTerminalState: () => Promise<HostedLifecycleTerminalState> | HostedLifecycleTerminalState;
34
+ resolveErrorTerminalState?: (error: unknown) => Promise<HostedLifecycleTerminalState> | HostedLifecycleTerminalState;
35
+ }
36
+ export interface HostedLifecycleRunResult<TRun> {
37
+ run: TRun;
38
+ terminalState: HostedLifecycleTerminalState;
39
+ }
40
+ export declare function runHostedLifecycle<TRun, TChunk>(options: HostedLifecycleRunnerOptions<TRun, TChunk>): Promise<HostedLifecycleRunResult<TRun>>;
41
+ //# sourceMappingURL=hosted-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/src/agent/hosted-lifecycle.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC7C,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE;YACN,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;SAC5B,CAAC;KACH,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,wBAAwB,CAAC,MAAM;IAC9C,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB,CAAC,IAAI,EAAE,MAAM;IAClD,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClE,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5E,8BAA8B,CAAC,EAAE,CAC/B,GAAG,EAAE,IAAI,EACT,aAAa,EAAE,4BAA4B,KACxC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,CAChB,GAAG,EAAE,IAAI,EACT,aAAa,EAAE,4BAA4B,KACxC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,4BAA4B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/F,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,4BAA4B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9F;AAED,MAAM,WAAW,4BAA4B,CAAC,IAAI,EAAE,MAAM;IACxD,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,EAAE,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,oBAAoB,EAAE,MAAM,OAAO,CAAC,4BAA4B,CAAC,GAAG,4BAA4B,CAAC;IACjG,yBAAyB,CAAC,EAAE,CAC1B,KAAK,EAAE,OAAO,KACX,OAAO,CAAC,4BAA4B,CAAC,GAAG,4BAA4B,CAAC;CAC3E;AAED,MAAM,WAAW,wBAAwB,CAAC,IAAI;IAC5C,GAAG,EAAE,IAAI,CAAC;IACV,aAAa,EAAE,4BAA4B,CAAC;CAC7C;AA4ED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EACnD,OAAO,EAAE,4BAA4B,CAAC,IAAI,EAAE,MAAM,CAAC,GAClD,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAgCzC"}
@@ -0,0 +1,77 @@
1
+ function getTerminalErrorMessage(error) {
2
+ return error instanceof Error ? error.message : String(error);
3
+ }
4
+ function defaultErrorTerminalState(abortSignal, error) {
5
+ if (abortSignal.aborted) {
6
+ return {
7
+ status: "cancelled",
8
+ terminalErrorCode: "ABORTED",
9
+ terminalErrorMessage: getTerminalErrorMessage(error),
10
+ };
11
+ }
12
+ return {
13
+ status: "failed",
14
+ terminalErrorCode: "STREAM_ERROR",
15
+ terminalErrorMessage: getTerminalErrorMessage(error),
16
+ };
17
+ }
18
+ async function captureHookError(callback) {
19
+ if (!callback) {
20
+ return null;
21
+ }
22
+ try {
23
+ await callback();
24
+ return null;
25
+ }
26
+ catch (error) {
27
+ return error;
28
+ }
29
+ }
30
+ async function runTerminalHooks(input) {
31
+ let firstHookError = null;
32
+ const persistError = await captureHookError(() => input.adapter.persistTranscriptTerminalState?.(input.run, input.terminalState));
33
+ if (persistError) {
34
+ firstHookError = persistError;
35
+ }
36
+ const terminalObserverError = await captureHookError(() => input.adapter.onTerminalState?.(input.run, input.terminalState));
37
+ if (!firstHookError && terminalObserverError) {
38
+ firstHookError = terminalObserverError;
39
+ }
40
+ const terminalControlError = await captureHookError(() => input.terminalState.status === "cancelled"
41
+ ? input.adapter.cancelRun?.(input.run, input.terminalState)
42
+ : input.adapter.finalizeRun?.(input.run, input.terminalState));
43
+ if (firstHookError) {
44
+ throw firstHookError;
45
+ }
46
+ if (terminalControlError) {
47
+ throw terminalControlError;
48
+ }
49
+ }
50
+ export async function runHostedLifecycle(options) {
51
+ const run = await options.adapter.startRun({ abortSignal: options.abortSignal });
52
+ try {
53
+ for await (const chunk of options.execution.stream) {
54
+ await options.adapter.appendEvents?.(run, chunk);
55
+ await options.adapter.persistTranscriptChunk?.(run, chunk);
56
+ }
57
+ await options.execution.waitForFinish();
58
+ }
59
+ catch (error) {
60
+ const terminalState = options.resolveErrorTerminalState
61
+ ? await options.resolveErrorTerminalState(error)
62
+ : defaultErrorTerminalState(options.abortSignal, error);
63
+ await runTerminalHooks({
64
+ run,
65
+ terminalState,
66
+ adapter: options.adapter,
67
+ }).catch(() => undefined);
68
+ throw error;
69
+ }
70
+ const terminalState = await options.resolveTerminalState();
71
+ await runTerminalHooks({
72
+ run,
73
+ terminalState,
74
+ adapter: options.adapter,
75
+ });
76
+ return { run, terminalState };
77
+ }
@@ -89,6 +89,7 @@ export { type AgUiRuntimeContextItem, AgUiRuntimeContextItemSchema, type AgUiRun
89
89
  export { normalizeAgUiRuntimeMessages } from "./ag-ui-runtime-support.js";
90
90
  export { type AgUiBrowserEncodedEvent, type AgUiBrowserEncoderState, type AgUiBrowserRunFinishedMetadata, type AgUiRuntimeStreamEvent, buildAgUiBrowserFinalizeResponse, createAgUiBrowserEncoderState, finalizeAgUiBrowserEvents, mapRuntimeStreamEventToAgUiBrowserEvents, } from "./ag-ui-browser-encoder.js";
91
91
  export { type AgUiBrowserResponseEncoder, type AgUiBrowserResponseExecution, type AgUiBrowserResponseRequestState, createAgUiBrowserResponseStream, type CreateAgUiBrowserResponseStreamInput, } from "./ag-ui-browser-response-stream.js";
92
+ export { type HostedLifecycleAdapter, type HostedLifecycleExecution, type HostedLifecycleRunnerOptions, type HostedLifecycleRunResult, type HostedLifecycleTerminalState, runHostedLifecycle, } from "./hosted-lifecycle.js";
92
93
  export { mergeToolCallInput, mergeToolInputDelta, parseDataStreamSseEvents, parseToolInputObject, streamDataStreamEvents, stripLeadingEmptyObjectPlaceholder, } from "./data-stream.js";
93
94
  export { expandAllowedRemoteToolNames, getProviderNativeToolNames, type ProviderNativeToolInventoryOptions, } from "./provider-native-tool-inventory.js";
94
95
  export { type AgUiDetachedStartAccepted, AgUiDetachedStartAcceptedSchema, type AgUiDetachedStartHandlerOptions, type AgUiDetachedStartRequest, AgUiDetachedStartRequestSchema, createAgUiDetachedStartHandler, executeAgUiDetachedStart, type ExecuteAgUiDetachedStartInput, } from "./ag-ui-detached-start.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/agent/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/agent/index.ts"],"names":[],"mappings":"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"}
@@ -88,6 +88,7 @@ export { AgUiRuntimeContextItemSchema, AgUiRuntimeInjectedToolSchema, AgUiRuntim
88
88
  export { normalizeAgUiRuntimeMessages } from "./ag-ui-runtime-support.js";
89
89
  export { buildAgUiBrowserFinalizeResponse, createAgUiBrowserEncoderState, finalizeAgUiBrowserEvents, mapRuntimeStreamEventToAgUiBrowserEvents, } from "./ag-ui-browser-encoder.js";
90
90
  export { createAgUiBrowserResponseStream, } from "./ag-ui-browser-response-stream.js";
91
+ export { runHostedLifecycle, } from "./hosted-lifecycle.js";
91
92
  export { mergeToolCallInput, mergeToolInputDelta, parseDataStreamSseEvents, parseToolInputObject, streamDataStreamEvents, stripLeadingEmptyObjectPlaceholder, } from "./data-stream.js";
92
93
  export { expandAllowedRemoteToolNames, getProviderNativeToolNames, } from "./provider-native-tool-inventory.js";
93
94
  export { AgUiDetachedStartAcceptedSchema, AgUiDetachedStartRequestSchema, createAgUiDetachedStartHandler, executeAgUiDetachedStart, } from "./ag-ui-detached-start.js";
@@ -1 +1 @@
1
- {"version":3,"file":"sse-utils.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/sse-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;;GAGG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,+BAA+B,EAC3C,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAEN;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,+BAA+B,GAAG,IAAI,CAUhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
1
+ {"version":3,"file":"sse-utils.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/sse-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;;GAGG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,+BAA+B,EAC3C,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAUN;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,+BAA+B,GAAG,IAAI,CAUhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
@@ -14,7 +14,15 @@ function isClosedStreamControllerError(error) {
14
14
  * Formats event as: data: {json}\n\n
15
15
  */
16
16
  export function sendSSE(controller, encoder, event) {
17
- controller.enqueue(encoder.encode(`data: ${JSON.stringify(event)}\n\n`));
17
+ try {
18
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify(event)}\n\n`));
19
+ }
20
+ catch (error) {
21
+ if (isClosedStreamControllerError(error)) {
22
+ return;
23
+ }
24
+ throw error;
25
+ }
18
26
  }
19
27
  export function closeSSEStream(controller) {
20
28
  try {
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.228";
1
+ export declare const VERSION = "0.1.229";
2
2
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.228";
3
+ export const VERSION = "0.1.229";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.228",
3
+ "version": "0.1.229",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
package/src/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.228",
3
+ "version": "0.1.229",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
@@ -0,0 +1,159 @@
1
+ export interface HostedLifecycleTerminalState {
2
+ status: "completed" | "failed" | "cancelled";
3
+ metadata?: {
4
+ modelId?: string;
5
+ usage?: {
6
+ inputTokens?: number;
7
+ outputTokens?: number;
8
+ cachedInputTokens?: number;
9
+ };
10
+ };
11
+ terminalErrorCode?: string | null;
12
+ terminalErrorMessage?: string | null;
13
+ }
14
+
15
+ export interface HostedLifecycleExecution<TChunk> {
16
+ stream: AsyncIterable<TChunk>;
17
+ waitForFinish: () => Promise<void>;
18
+ }
19
+
20
+ export interface HostedLifecycleAdapter<TRun, TChunk> {
21
+ startRun: (input: { abortSignal: AbortSignal }) => Promise<TRun> | TRun;
22
+ appendEvents?: (run: TRun, chunk: TChunk) => Promise<void> | void;
23
+ persistTranscriptChunk?: (run: TRun, chunk: TChunk) => Promise<void> | void;
24
+ persistTranscriptTerminalState?: (
25
+ run: TRun,
26
+ terminalState: HostedLifecycleTerminalState,
27
+ ) => Promise<void> | void;
28
+ onTerminalState?: (
29
+ run: TRun,
30
+ terminalState: HostedLifecycleTerminalState,
31
+ ) => Promise<void> | void;
32
+ finalizeRun?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
33
+ cancelRun?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
34
+ }
35
+
36
+ export interface HostedLifecycleRunnerOptions<TRun, TChunk> {
37
+ abortSignal: AbortSignal;
38
+ execution: HostedLifecycleExecution<TChunk>;
39
+ adapter: HostedLifecycleAdapter<TRun, TChunk>;
40
+ resolveTerminalState: () => Promise<HostedLifecycleTerminalState> | HostedLifecycleTerminalState;
41
+ resolveErrorTerminalState?: (
42
+ error: unknown,
43
+ ) => Promise<HostedLifecycleTerminalState> | HostedLifecycleTerminalState;
44
+ }
45
+
46
+ export interface HostedLifecycleRunResult<TRun> {
47
+ run: TRun;
48
+ terminalState: HostedLifecycleTerminalState;
49
+ }
50
+
51
+ function getTerminalErrorMessage(error: unknown): string {
52
+ return error instanceof Error ? error.message : String(error);
53
+ }
54
+
55
+ function defaultErrorTerminalState(
56
+ abortSignal: AbortSignal,
57
+ error: unknown,
58
+ ): HostedLifecycleTerminalState {
59
+ if (abortSignal.aborted) {
60
+ return {
61
+ status: "cancelled",
62
+ terminalErrorCode: "ABORTED",
63
+ terminalErrorMessage: getTerminalErrorMessage(error),
64
+ };
65
+ }
66
+
67
+ return {
68
+ status: "failed",
69
+ terminalErrorCode: "STREAM_ERROR",
70
+ terminalErrorMessage: getTerminalErrorMessage(error),
71
+ };
72
+ }
73
+
74
+ async function captureHookError(
75
+ callback: (() => Promise<void> | void) | undefined,
76
+ ): Promise<unknown | null> {
77
+ if (!callback) {
78
+ return null;
79
+ }
80
+
81
+ try {
82
+ await callback();
83
+ return null;
84
+ } catch (error) {
85
+ return error;
86
+ }
87
+ }
88
+
89
+ async function runTerminalHooks<TRun, TChunk>(input: {
90
+ run: TRun;
91
+ terminalState: HostedLifecycleTerminalState;
92
+ adapter: HostedLifecycleAdapter<TRun, TChunk>;
93
+ }): Promise<void> {
94
+ let firstHookError: unknown | null = null;
95
+
96
+ const persistError = await captureHookError(() =>
97
+ input.adapter.persistTranscriptTerminalState?.(input.run, input.terminalState)
98
+ );
99
+ if (persistError) {
100
+ firstHookError = persistError;
101
+ }
102
+
103
+ const terminalObserverError = await captureHookError(() =>
104
+ input.adapter.onTerminalState?.(input.run, input.terminalState)
105
+ );
106
+ if (!firstHookError && terminalObserverError) {
107
+ firstHookError = terminalObserverError;
108
+ }
109
+
110
+ const terminalControlError = await captureHookError(() =>
111
+ input.terminalState.status === "cancelled"
112
+ ? input.adapter.cancelRun?.(input.run, input.terminalState)
113
+ : input.adapter.finalizeRun?.(input.run, input.terminalState)
114
+ );
115
+
116
+ if (firstHookError) {
117
+ throw firstHookError;
118
+ }
119
+
120
+ if (terminalControlError) {
121
+ throw terminalControlError;
122
+ }
123
+ }
124
+
125
+ export async function runHostedLifecycle<TRun, TChunk>(
126
+ options: HostedLifecycleRunnerOptions<TRun, TChunk>,
127
+ ): Promise<HostedLifecycleRunResult<TRun>> {
128
+ const run = await options.adapter.startRun({ abortSignal: options.abortSignal });
129
+
130
+ try {
131
+ for await (const chunk of options.execution.stream) {
132
+ await options.adapter.appendEvents?.(run, chunk);
133
+ await options.adapter.persistTranscriptChunk?.(run, chunk);
134
+ }
135
+
136
+ await options.execution.waitForFinish();
137
+ } catch (error) {
138
+ const terminalState = options.resolveErrorTerminalState
139
+ ? await options.resolveErrorTerminalState(error)
140
+ : defaultErrorTerminalState(options.abortSignal, error);
141
+
142
+ await runTerminalHooks({
143
+ run,
144
+ terminalState,
145
+ adapter: options.adapter,
146
+ }).catch(() => undefined);
147
+
148
+ throw error;
149
+ }
150
+
151
+ const terminalState = await options.resolveTerminalState();
152
+ await runTerminalHooks({
153
+ run,
154
+ terminalState,
155
+ adapter: options.adapter,
156
+ });
157
+
158
+ return { run, terminalState };
159
+ }
@@ -180,6 +180,14 @@ export {
180
180
  createAgUiBrowserResponseStream,
181
181
  type CreateAgUiBrowserResponseStreamInput,
182
182
  } from "./ag-ui-browser-response-stream.js";
183
+ export {
184
+ type HostedLifecycleAdapter,
185
+ type HostedLifecycleExecution,
186
+ type HostedLifecycleRunnerOptions,
187
+ type HostedLifecycleRunResult,
188
+ type HostedLifecycleTerminalState,
189
+ runHostedLifecycle,
190
+ } from "./hosted-lifecycle.js";
183
191
  export {
184
192
  mergeToolCallInput,
185
193
  mergeToolInputDelta,
@@ -20,7 +20,15 @@ export function sendSSE(
20
20
  encoder: TextEncoder,
21
21
  event: Record<string, unknown>,
22
22
  ): void {
23
- controller.enqueue(encoder.encode(`data: ${JSON.stringify(event)}\n\n`));
23
+ try {
24
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify(event)}\n\n`));
25
+ } catch (error) {
26
+ if (isClosedStreamControllerError(error)) {
27
+ return;
28
+ }
29
+
30
+ throw error;
31
+ }
24
32
  }
25
33
 
26
34
  export function closeSSEStream(controller: ReadableStreamDefaultController): void {
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.228";
3
+ export const VERSION = "0.1.229";