ai 0.0.0-85f9a635-20240518005312 → 0.0.0-9477ebb9-20250403064906

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.
Files changed (70) hide show
  1. package/CHANGELOG.md +3521 -0
  2. package/README.md +112 -22
  3. package/dist/index.d.mts +3697 -1642
  4. package/dist/index.d.ts +3697 -1642
  5. package/dist/index.js +7201 -2942
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +7249 -2963
  8. package/dist/index.mjs.map +1 -1
  9. package/mcp-stdio/create-child-process.test.ts +92 -0
  10. package/mcp-stdio/create-child-process.ts +21 -0
  11. package/mcp-stdio/dist/index.d.mts +169 -0
  12. package/mcp-stdio/dist/index.d.ts +169 -0
  13. package/mcp-stdio/dist/index.js +352 -0
  14. package/mcp-stdio/dist/index.js.map +1 -0
  15. package/mcp-stdio/dist/index.mjs +337 -0
  16. package/mcp-stdio/dist/index.mjs.map +1 -0
  17. package/mcp-stdio/get-environment.ts +43 -0
  18. package/mcp-stdio/index.ts +4 -0
  19. package/mcp-stdio/mcp-stdio-transport.test.ts +262 -0
  20. package/mcp-stdio/mcp-stdio-transport.ts +157 -0
  21. package/package.json +46 -103
  22. package/react/dist/index.d.mts +10 -557
  23. package/react/dist/index.d.ts +10 -574
  24. package/react/dist/index.js +6 -1397
  25. package/react/dist/index.js.map +1 -1
  26. package/react/dist/index.mjs +10 -1384
  27. package/react/dist/index.mjs.map +1 -1
  28. package/rsc/dist/index.d.ts +432 -199
  29. package/rsc/dist/rsc-server.d.mts +431 -199
  30. package/rsc/dist/rsc-server.mjs +1599 -1357
  31. package/rsc/dist/rsc-server.mjs.map +1 -1
  32. package/rsc/dist/rsc-shared.d.mts +30 -23
  33. package/rsc/dist/rsc-shared.mjs +70 -108
  34. package/rsc/dist/rsc-shared.mjs.map +1 -1
  35. package/test/dist/index.d.mts +65 -0
  36. package/test/dist/index.d.ts +65 -0
  37. package/test/dist/index.js +121 -0
  38. package/test/dist/index.js.map +1 -0
  39. package/test/dist/index.mjs +94 -0
  40. package/test/dist/index.mjs.map +1 -0
  41. package/prompts/dist/index.d.mts +0 -324
  42. package/prompts/dist/index.d.ts +0 -324
  43. package/prompts/dist/index.js +0 -178
  44. package/prompts/dist/index.js.map +0 -1
  45. package/prompts/dist/index.mjs +0 -146
  46. package/prompts/dist/index.mjs.map +0 -1
  47. package/react/dist/index.server.d.mts +0 -17
  48. package/react/dist/index.server.d.ts +0 -17
  49. package/react/dist/index.server.js +0 -50
  50. package/react/dist/index.server.js.map +0 -1
  51. package/react/dist/index.server.mjs +0 -23
  52. package/react/dist/index.server.mjs.map +0 -1
  53. package/solid/dist/index.d.mts +0 -408
  54. package/solid/dist/index.d.ts +0 -408
  55. package/solid/dist/index.js +0 -1072
  56. package/solid/dist/index.js.map +0 -1
  57. package/solid/dist/index.mjs +0 -1044
  58. package/solid/dist/index.mjs.map +0 -1
  59. package/svelte/dist/index.d.mts +0 -484
  60. package/svelte/dist/index.d.ts +0 -484
  61. package/svelte/dist/index.js +0 -1778
  62. package/svelte/dist/index.js.map +0 -1
  63. package/svelte/dist/index.mjs +0 -1749
  64. package/svelte/dist/index.mjs.map +0 -1
  65. package/vue/dist/index.d.mts +0 -402
  66. package/vue/dist/index.d.ts +0 -402
  67. package/vue/dist/index.js +0 -1072
  68. package/vue/dist/index.js.map +0 -1
  69. package/vue/dist/index.mjs +0 -1034
  70. package/vue/dist/index.mjs.map +0 -1
@@ -1,32 +1,15 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
 
3
- type ServerWrappedAction<T = unknown> = (aiState: T, ...args: unknown[]) => Promise<[Promise<T>, unknown]>;
4
- type ServerWrappedActions<T = unknown> = Record<string, ServerWrappedAction<T>>;
5
- type InternalAIProviderProps<AIState = any, UIState = any> = {
6
- children: React.ReactNode;
7
- initialUIState: UIState;
8
- initialAIState: AIState;
9
- initialAIStatePatch: undefined | Promise<AIState>;
10
- wrappedActions: ServerWrappedActions<AIState>;
11
- wrappedSyncUIState?: ServerWrappedAction<AIState>;
12
- };
13
- type AIProviderProps<AIState = any, UIState = any, Actions = any> = {
14
- children: React.ReactNode;
15
- initialAIState?: AIState;
16
- initialUIState?: UIState;
17
- /** $ActionTypes is only added for type inference and is never used at runtime **/
18
- $ActionTypes?: Actions;
19
- };
20
- type AIProvider<AIState = any, UIState = any, Actions = any> = (props: AIProviderProps<AIState, UIState, Actions>) => Promise<React.ReactElement>;
21
- type InferAIState<T, Fallback> = T extends AIProvider<infer AIState, any, any> ? AIState : Fallback;
22
- type InferUIState<T, Fallback> = T extends AIProvider<any, infer UIState, any> ? UIState : Fallback;
23
- type InferActions<T, Fallback> = T extends AIProvider<any, any, infer Actions> ? Actions : Fallback;
24
- type ValueOrUpdater<T> = T | ((current: T) => T);
3
+ declare const __internal_curr: unique symbol;
4
+ declare const __internal_error: unique symbol;
25
5
  /**
26
6
  * StreamableValue is a value that can be streamed over the network via AI Actions.
27
7
  * To read the streamed values, use the `readStreamableValue` or `useStreamableValue` APIs.
28
8
  */
29
- type StreamableValue<T = any, E = any> = {};
9
+ type StreamableValue<T = any, E = any> = {
10
+ [__internal_curr]?: T;
11
+ [__internal_error]?: E;
12
+ };
30
13
 
31
14
  /**
32
15
  * `readStreamableValue` takes a streamable value created via the `createStreamableValue().value` API,
@@ -59,6 +42,7 @@ type StreamableValue<T = any, E = any> = {};
59
42
  * This logs out 1, 2, 3 on console.
60
43
  */
61
44
  declare function readStreamableValue<T = unknown>(streamableValue: StreamableValue<T>): AsyncIterable<T | undefined>;
45
+
62
46
  /**
63
47
  * `useStreamableValue` is a React hook that takes a streamable value created via the `createStreamableValue().value` API,
64
48
  * and returns the current value, error, and pending state.
@@ -78,6 +62,29 @@ declare function readStreamableValue<T = unknown>(streamableValue: StreamableVal
78
62
  */
79
63
  declare function useStreamableValue<T = unknown, Error = unknown>(streamableValue?: StreamableValue<T>): [data: T | undefined, error: Error | undefined, pending: boolean];
80
64
 
65
+ type ServerWrappedAction<T = unknown> = (aiState: T, ...args: unknown[]) => Promise<[Promise<T>, unknown]>;
66
+ type ServerWrappedActions<T = unknown> = Record<string, ServerWrappedAction<T>>;
67
+ type InternalAIProviderProps<AIState = any, UIState = any> = {
68
+ children: React.ReactNode;
69
+ initialUIState: UIState;
70
+ initialAIState: AIState;
71
+ initialAIStatePatch: undefined | Promise<AIState>;
72
+ wrappedActions: ServerWrappedActions<AIState>;
73
+ wrappedSyncUIState?: ServerWrappedAction<AIState>;
74
+ };
75
+ type AIProviderProps<AIState = any, UIState = any, Actions = any> = {
76
+ children: React.ReactNode;
77
+ initialAIState?: AIState;
78
+ initialUIState?: UIState;
79
+ /** $ActionTypes is only added for type inference and is never used at runtime **/
80
+ $ActionTypes?: Actions;
81
+ };
82
+ type AIProvider<AIState = any, UIState = any, Actions = any> = (props: AIProviderProps<AIState, UIState, Actions>) => Promise<React.ReactElement>;
83
+ type InferAIState<T, Fallback> = T extends AIProvider<infer AIState, any, any> ? AIState : Fallback;
84
+ type InferUIState<T, Fallback> = T extends AIProvider<any, infer UIState, any> ? UIState : Fallback;
85
+ type InferActions<T, Fallback> = T extends AIProvider<any, any, infer Actions> ? Actions : Fallback;
86
+ type ValueOrUpdater<T> = T | ((current: T) => T);
87
+
81
88
  declare function InternalAIProvider({ children, initialUIState, initialAIState, initialAIStatePatch, wrappedActions, wrappedSyncUIState, }: InternalAIProviderProps): react_jsx_runtime.JSX.Element;
82
89
  declare function useUIState<AI extends AIProvider = any>(): [InferUIState<AI, any>, (v: InferUIState<AI, any> | ((v_: InferUIState<AI, any>) => InferUIState<AI, any>)) => void];
83
90
  declare function useAIState<AI extends AIProvider = any>(): [
@@ -1,106 +1,92 @@
1
1
  "use client";
2
2
 
3
- // rsc/shared-client/streamable.tsx
4
- import { startTransition, useLayoutEffect, useState } from "react";
5
-
6
- // rsc/constants.ts
3
+ // rsc/streamable-value/streamable-value.ts
7
4
  var STREAMABLE_VALUE_TYPE = Symbol.for("ui.streamable.value");
8
- var DEV_DEFAULT_STREAMABLE_WARNING_TIME = 15 * 1e3;
9
5
 
10
- // rsc/shared-client/streamable.tsx
11
- function hasReadableValueSignature(value) {
12
- return !!(value && typeof value === "object" && "type" in value && value.type === STREAMABLE_VALUE_TYPE);
13
- }
14
- function assertStreamableValue(value) {
15
- if (!hasReadableValueSignature(value)) {
16
- throw new Error(
17
- "Invalid value: this hook only accepts values created via `createStreamableValue`."
18
- );
19
- }
20
- }
6
+ // rsc/streamable-value/is-streamable-value.ts
21
7
  function isStreamableValue(value) {
22
- const hasSignature = hasReadableValueSignature(value);
23
- if (!hasSignature && typeof value !== "undefined") {
8
+ return value != null && typeof value === "object" && "type" in value && value.type === STREAMABLE_VALUE_TYPE;
9
+ }
10
+
11
+ // rsc/streamable-value/read-streamable-value.tsx
12
+ function readStreamableValue(streamableValue) {
13
+ if (!isStreamableValue(streamableValue)) {
24
14
  throw new Error(
25
15
  "Invalid value: this hook only accepts values created via `createStreamableValue`."
26
16
  );
27
17
  }
28
- return hasSignature;
29
- }
30
- function readStreamableValue(streamableValue) {
31
- assertStreamableValue(streamableValue);
32
18
  return {
33
19
  [Symbol.asyncIterator]() {
34
20
  let row = streamableValue;
35
- let curr = row.curr;
36
- let done = false;
37
- let initial = true;
21
+ let value = row.curr;
22
+ let isDone = false;
23
+ let isFirstIteration = true;
38
24
  return {
39
25
  async next() {
40
- if (done)
41
- return { value: curr, done: true };
26
+ if (isDone)
27
+ return { value, done: true };
42
28
  row = await row;
43
- if (typeof row.error !== "undefined") {
29
+ if (row.error !== void 0) {
44
30
  throw row.error;
45
31
  }
46
32
  if ("curr" in row || row.diff) {
47
33
  if (row.diff) {
48
- switch (row.diff[0]) {
49
- case 0:
50
- if (typeof curr !== "string") {
51
- throw new Error(
52
- "Invalid patch: can only append to string types. This is a bug in the AI SDK."
53
- );
54
- } else {
55
- curr = curr + row.diff[1];
56
- }
57
- break;
34
+ if (row.diff[0] === 0) {
35
+ if (typeof value !== "string") {
36
+ throw new Error(
37
+ "Invalid patch: can only append to string types. This is a bug in the AI SDK."
38
+ );
39
+ }
40
+ value = value + row.diff[1];
58
41
  }
59
42
  } else {
60
- curr = row.curr;
43
+ value = row.curr;
61
44
  }
62
45
  if (!row.next) {
63
- done = true;
64
- return {
65
- value: curr,
66
- done: false
67
- };
46
+ isDone = true;
47
+ return { value, done: false };
68
48
  }
69
49
  }
70
- if (!row.next) {
71
- return {
72
- value: curr,
73
- done: true
74
- };
50
+ if (row.next === void 0) {
51
+ return { value, done: true };
75
52
  }
76
53
  row = row.next;
77
- if (initial) {
78
- initial = false;
79
- if (typeof curr === "undefined") {
54
+ if (isFirstIteration) {
55
+ isFirstIteration = false;
56
+ if (value === void 0) {
80
57
  return this.next();
81
58
  }
82
59
  }
83
- return {
84
- value: curr,
85
- done: false
86
- };
60
+ return { value, done: false };
87
61
  }
88
62
  };
89
63
  }
90
64
  };
91
65
  }
66
+
67
+ // rsc/streamable-value/use-streamable-value.tsx
68
+ import { startTransition, useLayoutEffect, useState } from "react";
69
+ function checkStreamableValue(value) {
70
+ const hasSignature = isStreamableValue(value);
71
+ if (!hasSignature && value !== void 0) {
72
+ throw new Error(
73
+ "Invalid value: this hook only accepts values created via `createStreamableValue`."
74
+ );
75
+ }
76
+ return hasSignature;
77
+ }
92
78
  function useStreamableValue(streamableValue) {
93
79
  const [curr, setCurr] = useState(
94
- isStreamableValue(streamableValue) ? streamableValue.curr : void 0
80
+ checkStreamableValue(streamableValue) ? streamableValue.curr : void 0
95
81
  );
96
82
  const [error, setError] = useState(
97
- isStreamableValue(streamableValue) ? streamableValue.error : void 0
83
+ checkStreamableValue(streamableValue) ? streamableValue.error : void 0
98
84
  );
99
85
  const [pending, setPending] = useState(
100
- isStreamableValue(streamableValue) ? !!streamableValue.next : false
86
+ checkStreamableValue(streamableValue) ? !!streamableValue.next : false
101
87
  );
102
88
  useLayoutEffect(() => {
103
- if (!isStreamableValue(streamableValue))
89
+ if (!checkStreamableValue(streamableValue))
104
90
  return;
105
91
  let cancelled = false;
106
92
  const iterator = readStreamableValue(streamableValue);
@@ -148,40 +134,18 @@ function useStreamableValue(streamableValue) {
148
134
  }
149
135
 
150
136
  // rsc/shared-client/context.tsx
151
- import * as React2 from "react";
137
+ import * as React from "react";
152
138
  import * as jsondiffpatch from "jsondiffpatch";
153
139
 
154
- // rsc/utils.tsx
155
- import { Suspense } from "react";
156
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
157
- var R = [
158
- async ({
159
- c,
160
- // current
161
- n
162
- // next
163
- }) => {
164
- const chunk = await n;
165
- if (chunk.done) {
166
- return chunk.value;
167
- }
168
- if (chunk.append) {
169
- return /* @__PURE__ */ jsxs(Fragment, { children: [
170
- c,
171
- /* @__PURE__ */ jsx(Suspense, { fallback: chunk.value, children: /* @__PURE__ */ jsx(R, { c: chunk.value, n: chunk.next }) })
172
- ] });
173
- }
174
- return /* @__PURE__ */ jsx(Suspense, { fallback: chunk.value, children: /* @__PURE__ */ jsx(R, { c: chunk.value, n: chunk.next }) });
175
- }
176
- ][0];
177
- var isFunction = (x) => typeof x === "function";
140
+ // util/is-function.ts
141
+ var isFunction = (value) => typeof value === "function";
178
142
 
179
143
  // rsc/shared-client/context.tsx
180
- import { jsx as jsx2 } from "react/jsx-runtime";
181
- var InternalUIStateProvider = React2.createContext(null);
182
- var InternalAIStateProvider = React2.createContext(void 0);
183
- var InternalActionProvider = React2.createContext(null);
184
- var InternalSyncUIStateProvider = React2.createContext(null);
144
+ import { jsx } from "react/jsx-runtime";
145
+ var InternalUIStateProvider = React.createContext(null);
146
+ var InternalAIStateProvider = React.createContext(void 0);
147
+ var InternalActionProvider = React.createContext(null);
148
+ var InternalSyncUIStateProvider = React.createContext(null);
185
149
  function InternalAIProvider({
186
150
  children,
187
151
  initialUIState,
@@ -190,13 +154,13 @@ function InternalAIProvider({
190
154
  wrappedActions,
191
155
  wrappedSyncUIState
192
156
  }) {
193
- if (!("use" in React2)) {
157
+ if (!("use" in React)) {
194
158
  throw new Error("Unsupported React version.");
195
159
  }
196
- const uiState = React2.useState(initialUIState);
160
+ const uiState = React.useState(initialUIState);
197
161
  const setUIState = uiState[1];
198
- const resolvedInitialAIStatePatch = initialAIStatePatch ? React2.use(initialAIStatePatch) : void 0;
199
- initialAIState = React2.useMemo(() => {
162
+ const resolvedInitialAIStatePatch = initialAIStatePatch ? React.use(initialAIStatePatch) : void 0;
163
+ initialAIState = React.useMemo(() => {
200
164
  if (resolvedInitialAIStatePatch) {
201
165
  return jsondiffpatch.patch(
202
166
  jsondiffpatch.clone(initialAIState),
@@ -205,13 +169,13 @@ function InternalAIProvider({
205
169
  }
206
170
  return initialAIState;
207
171
  }, [initialAIState, resolvedInitialAIStatePatch]);
208
- const aiState = React2.useState(initialAIState);
172
+ const aiState = React.useState(initialAIState);
209
173
  const setAIState = aiState[1];
210
- const aiStateRef = React2.useRef(aiState[0]);
211
- React2.useEffect(() => {
174
+ const aiStateRef = React.useRef(aiState[0]);
175
+ React.useEffect(() => {
212
176
  aiStateRef.current = aiState[0];
213
177
  }, [aiState[0]]);
214
- const clientWrappedActions = React2.useMemo(
178
+ const clientWrappedActions = React.useMemo(
215
179
  () => Object.fromEntries(
216
180
  Object.entries(wrappedActions).map(([key, action]) => [
217
181
  key,
@@ -238,16 +202,14 @@ function InternalAIProvider({
238
202
  ),
239
203
  [wrappedActions]
240
204
  );
241
- const clientWrappedSyncUIStateAction = React2.useMemo(() => {
205
+ const clientWrappedSyncUIStateAction = React.useMemo(() => {
242
206
  if (!wrappedSyncUIState) {
243
207
  return () => {
244
208
  };
245
209
  }
246
210
  return async () => {
247
211
  const aiStateSnapshot = aiStateRef.current;
248
- const [aiStateDelta, uiState2] = await wrappedSyncUIState(
249
- aiStateSnapshot
250
- );
212
+ const [aiStateDelta, uiState2] = await wrappedSyncUIState(aiStateSnapshot);
251
213
  if (uiState2 !== void 0) {
252
214
  setUIState(uiState2);
253
215
  }
@@ -261,7 +223,7 @@ function InternalAIProvider({
261
223
  }
262
224
  };
263
225
  }, [wrappedSyncUIState]);
264
- return /* @__PURE__ */ jsx2(InternalAIStateProvider.Provider, { value: aiState, children: /* @__PURE__ */ jsx2(InternalUIStateProvider.Provider, { value: uiState, children: /* @__PURE__ */ jsx2(InternalActionProvider.Provider, { value: clientWrappedActions, children: /* @__PURE__ */ jsx2(
226
+ return /* @__PURE__ */ jsx(InternalAIStateProvider.Provider, { value: aiState, children: /* @__PURE__ */ jsx(InternalUIStateProvider.Provider, { value: uiState, children: /* @__PURE__ */ jsx(InternalActionProvider.Provider, { value: clientWrappedActions, children: /* @__PURE__ */ jsx(
265
227
  InternalSyncUIStateProvider.Provider,
266
228
  {
267
229
  value: clientWrappedSyncUIStateAction,
@@ -270,7 +232,7 @@ function InternalAIProvider({
270
232
  ) }) }) });
271
233
  }
272
234
  function useUIState() {
273
- const state = React2.useContext(InternalUIStateProvider);
235
+ const state = React.useContext(InternalUIStateProvider);
274
236
  if (state === null) {
275
237
  throw new Error("`useUIState` must be used inside an <AI> provider.");
276
238
  }
@@ -285,7 +247,7 @@ function useUIState() {
285
247
  return state;
286
248
  }
287
249
  function useAIState(...args) {
288
- const state = React2.useContext(InternalAIStateProvider);
250
+ const state = React.useContext(InternalAIStateProvider);
289
251
  if (state === null) {
290
252
  throw new Error("`useAIState` must be used inside an <AI> provider.");
291
253
  }
@@ -303,7 +265,7 @@ function useAIState(...args) {
303
265
  );
304
266
  }
305
267
  const key = args[0];
306
- const setter = React2.useCallback(
268
+ const setter = React.useCallback(
307
269
  typeof key === "undefined" ? state[1] : (newState) => {
308
270
  if (isFunction(newState)) {
309
271
  return state[1]((s) => {
@@ -322,11 +284,11 @@ function useAIState(...args) {
322
284
  }
323
285
  }
324
286
  function useActions() {
325
- const actions = React2.useContext(InternalActionProvider);
287
+ const actions = React.useContext(InternalActionProvider);
326
288
  return actions;
327
289
  }
328
290
  function useSyncUIState() {
329
- const syncUIState = React2.useContext(
291
+ const syncUIState = React.useContext(
330
292
  InternalSyncUIStateProvider
331
293
  );
332
294
  if (syncUIState === null) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../shared-client/streamable.tsx","../constants.ts","../shared-client/context.tsx","../utils.tsx"],"sourcesContent":["import { startTransition, useLayoutEffect, useState } from 'react';\nimport { STREAMABLE_VALUE_TYPE } from '../constants';\nimport type { StreamableValue } from '../types';\n\nfunction hasReadableValueSignature(value: unknown): value is StreamableValue {\n return !!(\n value &&\n typeof value === 'object' &&\n 'type' in value &&\n value.type === STREAMABLE_VALUE_TYPE\n );\n}\n\nfunction assertStreamableValue(\n value: unknown,\n): asserts value is StreamableValue {\n if (!hasReadableValueSignature(value)) {\n throw new Error(\n 'Invalid value: this hook only accepts values created via `createStreamableValue`.',\n );\n }\n}\n\nfunction isStreamableValue(value: unknown): value is StreamableValue {\n const hasSignature = hasReadableValueSignature(value);\n\n if (!hasSignature && typeof value !== 'undefined') {\n throw new Error(\n 'Invalid value: this hook only accepts values created via `createStreamableValue`.',\n );\n }\n\n return hasSignature;\n}\n\n/**\n * `readStreamableValue` takes a streamable value created via the `createStreamableValue().value` API,\n * and returns an async iterator.\n *\n * ```js\n * // Inside your AI action:\n *\n * async function action() {\n * 'use server'\n * const streamable = createStreamableValue();\n *\n * streamable.update(1);\n * streamable.update(2);\n * streamable.done(3);\n * // ...\n * return streamable.value;\n * }\n * ```\n *\n * And to read the value:\n *\n * ```js\n * const streamableValue = await action()\n * for await (const v of readStreamableValue(streamableValue)) {\n * console.log(v)\n * }\n * ```\n *\n * This logs out 1, 2, 3 on console.\n */\nexport function readStreamableValue<T = unknown>(\n streamableValue: StreamableValue<T>,\n): AsyncIterable<T | undefined> {\n assertStreamableValue(streamableValue);\n\n return {\n [Symbol.asyncIterator]() {\n let row: StreamableValue<T> | Promise<StreamableValue<T>> =\n streamableValue;\n let curr = row.curr;\n let done = false;\n let initial = true;\n\n return {\n async next() {\n if (done) return { value: curr, done: true };\n\n row = await row;\n\n if (typeof row.error !== 'undefined') {\n throw row.error;\n }\n if ('curr' in row || row.diff) {\n if (row.diff) {\n switch (row.diff[0]) {\n case 0:\n if (typeof curr !== 'string') {\n throw new Error(\n 'Invalid patch: can only append to string types. This is a bug in the AI SDK.',\n );\n } else {\n (curr as string) = curr + row.diff[1];\n }\n break;\n }\n } else {\n curr = row.curr;\n }\n\n // The last emitted { done: true } won't be used as the value\n // by the for await...of syntax.\n if (!row.next) {\n done = true;\n return {\n value: curr,\n done: false,\n };\n }\n }\n\n if (!row.next) {\n return {\n value: curr,\n done: true,\n };\n }\n\n row = row.next;\n if (initial) {\n initial = false;\n if (typeof curr === 'undefined') {\n // This is the initial chunk and there isn't an initial value yet.\n // Let's skip this one.\n return this.next();\n }\n }\n\n return {\n value: curr,\n done: false,\n };\n },\n };\n },\n };\n}\n\n/**\n * `useStreamableValue` is a React hook that takes a streamable value created via the `createStreamableValue().value` API,\n * and returns the current value, error, and pending state.\n *\n * This is useful for consuming streamable values received from a component's props. For example:\n *\n * ```js\n * function MyComponent({ streamableValue }) {\n * const [data, error, pending] = useStreamableValue(streamableValue);\n *\n * if (pending) return <div>Loading...</div>;\n * if (error) return <div>Error: {error.message}</div>;\n *\n * return <div>Data: {data}</div>;\n * }\n * ```\n */\nexport function useStreamableValue<T = unknown, Error = unknown>(\n streamableValue?: StreamableValue<T>,\n): [data: T | undefined, error: Error | undefined, pending: boolean] {\n const [curr, setCurr] = useState<T | undefined>(\n isStreamableValue(streamableValue) ? streamableValue.curr : undefined,\n );\n const [error, setError] = useState<Error | undefined>(\n isStreamableValue(streamableValue) ? streamableValue.error : undefined,\n );\n const [pending, setPending] = useState<boolean>(\n isStreamableValue(streamableValue) ? !!streamableValue.next : false,\n );\n\n useLayoutEffect(() => {\n if (!isStreamableValue(streamableValue)) return;\n\n let cancelled = false;\n\n const iterator = readStreamableValue(streamableValue);\n if (streamableValue.next) {\n startTransition(() => {\n if (cancelled) return;\n setPending(true);\n });\n }\n\n (async () => {\n try {\n for await (const value of iterator) {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setCurr(value);\n });\n }\n } catch (e) {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setError(e as Error);\n });\n } finally {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setPending(false);\n });\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [streamableValue]);\n\n return [curr, error, pending];\n}\n","export const STREAMABLE_VALUE_TYPE = Symbol.for('ui.streamable.value');\nexport const DEV_DEFAULT_STREAMABLE_WARNING_TIME = 15 * 1000;\n","/* eslint-disable react-hooks/exhaustive-deps */\n'use client';\n\nimport * as React from 'react';\n\nimport * as jsondiffpatch from 'jsondiffpatch';\nimport type {\n InternalAIProviderProps,\n AIProvider,\n InferAIState,\n ValueOrUpdater,\n InferActions,\n InferUIState,\n} from '../types';\nimport { isFunction } from '../utils';\n\nconst InternalUIStateProvider = React.createContext<null | any>(null);\nconst InternalAIStateProvider = React.createContext<undefined | any>(undefined);\nconst InternalActionProvider = React.createContext<null | any>(null);\nconst InternalSyncUIStateProvider = React.createContext<null | any>(null);\n\nexport function InternalAIProvider({\n children,\n initialUIState,\n initialAIState,\n initialAIStatePatch,\n wrappedActions,\n wrappedSyncUIState,\n}: InternalAIProviderProps) {\n if (!('use' in React)) {\n throw new Error('Unsupported React version.');\n }\n\n const uiState = React.useState(initialUIState);\n const setUIState = uiState[1];\n\n const resolvedInitialAIStatePatch = initialAIStatePatch\n ? (React as any).use(initialAIStatePatch)\n : undefined;\n initialAIState = React.useMemo(() => {\n if (resolvedInitialAIStatePatch) {\n return jsondiffpatch.patch(\n jsondiffpatch.clone(initialAIState),\n resolvedInitialAIStatePatch,\n );\n }\n return initialAIState;\n }, [initialAIState, resolvedInitialAIStatePatch]);\n\n const aiState = React.useState(initialAIState);\n const setAIState = aiState[1];\n const aiStateRef = React.useRef(aiState[0]);\n\n React.useEffect(() => {\n aiStateRef.current = aiState[0];\n }, [aiState[0]]);\n\n const clientWrappedActions = React.useMemo(\n () =>\n Object.fromEntries(\n Object.entries(wrappedActions).map(([key, action]) => [\n key,\n async (...args: any) => {\n const aiStateSnapshot = aiStateRef.current;\n const [aiStateDelta, result] = await action(\n aiStateSnapshot,\n ...args,\n );\n (async () => {\n const delta = await aiStateDelta;\n if (delta !== undefined) {\n aiState[1](\n jsondiffpatch.patch(\n jsondiffpatch.clone(aiStateSnapshot),\n delta,\n ),\n );\n }\n })();\n return result;\n },\n ]),\n ),\n [wrappedActions],\n );\n\n const clientWrappedSyncUIStateAction = React.useMemo(() => {\n if (!wrappedSyncUIState) {\n return () => {};\n }\n\n return async () => {\n const aiStateSnapshot = aiStateRef.current;\n const [aiStateDelta, uiState] = await wrappedSyncUIState!(\n aiStateSnapshot,\n );\n\n if (uiState !== undefined) {\n setUIState(uiState);\n }\n\n const delta = await aiStateDelta;\n if (delta !== undefined) {\n const patchedAiState = jsondiffpatch.patch(\n jsondiffpatch.clone(aiStateSnapshot),\n delta,\n );\n setAIState(patchedAiState);\n }\n };\n }, [wrappedSyncUIState]);\n\n return (\n <InternalAIStateProvider.Provider value={aiState}>\n <InternalUIStateProvider.Provider value={uiState}>\n <InternalActionProvider.Provider value={clientWrappedActions}>\n <InternalSyncUIStateProvider.Provider\n value={clientWrappedSyncUIStateAction}\n >\n {children}\n </InternalSyncUIStateProvider.Provider>\n </InternalActionProvider.Provider>\n </InternalUIStateProvider.Provider>\n </InternalAIStateProvider.Provider>\n );\n}\n\nexport function useUIState<AI extends AIProvider = any>() {\n type T = InferUIState<AI, any>;\n\n const state = React.useContext<\n [T, (v: T | ((v_: T) => T)) => void] | null | undefined\n >(InternalUIStateProvider);\n if (state === null) {\n throw new Error('`useUIState` must be used inside an <AI> provider.');\n }\n if (!Array.isArray(state)) {\n throw new Error('Invalid state');\n }\n if (state[0] === undefined) {\n throw new Error(\n '`initialUIState` must be provided to `createAI` or `<AI>`',\n );\n }\n return state;\n}\n\n// TODO: How do we avoid causing a re-render when the AI state changes but you\n// are only listening to a specific key? We need useSES perhaps?\nfunction useAIState<AI extends AIProvider = any>(): [\n InferAIState<AI, any>,\n (newState: ValueOrUpdater<InferAIState<AI, any>>) => void,\n];\nfunction useAIState<AI extends AIProvider = any>(\n key: keyof InferAIState<AI, any>,\n): [\n InferAIState<AI, any>[typeof key],\n (newState: ValueOrUpdater<InferAIState<AI, any>[typeof key]>) => void,\n];\nfunction useAIState<AI extends AIProvider = any>(\n ...args: [] | [keyof InferAIState<AI, any>]\n) {\n type T = InferAIState<AI, any>;\n\n const state = React.useContext<\n [T, (newState: ValueOrUpdater<T>) => void] | null | undefined\n >(InternalAIStateProvider);\n if (state === null) {\n throw new Error('`useAIState` must be used inside an <AI> provider.');\n }\n if (!Array.isArray(state)) {\n throw new Error('Invalid state');\n }\n if (state[0] === undefined) {\n throw new Error(\n '`initialAIState` must be provided to `createAI` or `<AI>`',\n );\n }\n if (args.length >= 1 && typeof state[0] !== 'object') {\n throw new Error(\n 'When using `useAIState` with a key, the AI state must be an object.',\n );\n }\n\n const key = args[0];\n const setter = React.useCallback(\n typeof key === 'undefined'\n ? state[1]\n : (newState: ValueOrUpdater<T>) => {\n if (isFunction(newState)) {\n return state[1](s => {\n return { ...s, [key]: newState(s[key]) };\n });\n } else {\n return state[1]({ ...state[0], [key]: newState });\n }\n },\n [key],\n );\n\n if (args.length === 0) {\n return state;\n } else {\n return [state[0][args[0]], setter];\n }\n}\n\nexport function useActions<AI extends AIProvider = any>() {\n type T = InferActions<AI, any>;\n\n const actions = React.useContext<T>(InternalActionProvider);\n return actions;\n}\n\nexport function useSyncUIState() {\n const syncUIState = React.useContext<() => Promise<void>>(\n InternalSyncUIStateProvider,\n );\n\n if (syncUIState === null) {\n throw new Error('`useSyncUIState` must be used inside an <AI> provider.');\n }\n\n return syncUIState;\n}\n\nexport { useAIState };\n","import React, { Suspense } from 'react';\n\nexport function createResolvablePromise<T = any>() {\n let resolve: (value: T) => void, reject: (error: unknown) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return {\n promise,\n resolve: resolve!,\n reject: reject!,\n };\n}\n\n// Use the name `R` for `Row` as it will be shorter in the RSC payload.\nconst R = [\n (async ({\n c, // current\n n, // next\n }: {\n c: React.ReactNode;\n n: Promise<any>;\n }) => {\n const chunk = await n;\n if (chunk.done) {\n return chunk.value;\n }\n\n if (chunk.append) {\n return (\n <>\n {c}\n <Suspense fallback={chunk.value}>\n <R c={chunk.value} n={chunk.next} />\n </Suspense>\n </>\n );\n }\n\n return (\n <Suspense fallback={chunk.value}>\n <R c={chunk.value} n={chunk.next} />\n </Suspense>\n );\n }) as unknown as React.FC<{\n c: React.ReactNode;\n n: Promise<any>;\n }>,\n][0];\n\nexport function createSuspensedChunk(initialValue: React.ReactNode) {\n const { promise, resolve, reject } = createResolvablePromise();\n\n return {\n row: (\n <Suspense fallback={initialValue}>\n <R c={initialValue} n={promise} />\n </Suspense>\n ),\n resolve,\n reject,\n };\n}\n\nexport const isFunction = (x: unknown): x is Function =>\n typeof x === 'function';\n\nexport const consumeStream = async (stream: ReadableStream) => {\n const reader = stream.getReader();\n while (true) {\n const { done } = await reader.read();\n if (done) break;\n }\n};\n"],"mappings":"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","names":["React","jsx","React","uiState"]}
1
+ {"version":3,"sources":["../streamable-value/streamable-value.ts","../streamable-value/is-streamable-value.ts","../streamable-value/read-streamable-value.tsx","../streamable-value/use-streamable-value.tsx","../shared-client/context.tsx","../../util/is-function.ts"],"sourcesContent":["export const STREAMABLE_VALUE_TYPE = Symbol.for('ui.streamable.value');\n\nexport type StreamablePatch = undefined | [0, string]; // Append string.\n\ndeclare const __internal_curr: unique symbol;\ndeclare const __internal_error: unique symbol;\n\n/**\n * StreamableValue is a value that can be streamed over the network via AI Actions.\n * To read the streamed values, use the `readStreamableValue` or `useStreamableValue` APIs.\n */\nexport type StreamableValue<T = any, E = any> = {\n /**\n * @internal Use `readStreamableValue` to read the values.\n */\n type?: typeof STREAMABLE_VALUE_TYPE;\n /**\n * @internal Use `readStreamableValue` to read the values.\n */\n curr?: T;\n /**\n * @internal Use `readStreamableValue` to read the values.\n */\n error?: E;\n /**\n * @internal Use `readStreamableValue` to read the values.\n */\n diff?: StreamablePatch;\n /**\n * @internal Use `readStreamableValue` to read the values.\n */\n next?: Promise<StreamableValue<T, E>>;\n\n // branded types to maintain type signature after internal properties are stripped.\n [__internal_curr]?: T;\n [__internal_error]?: E;\n};\n","import { STREAMABLE_VALUE_TYPE, StreamableValue } from './streamable-value';\n\nexport function isStreamableValue(value: unknown): value is StreamableValue {\n return (\n value != null &&\n typeof value === 'object' &&\n 'type' in value &&\n value.type === STREAMABLE_VALUE_TYPE\n );\n}\n","import { isStreamableValue } from './is-streamable-value';\nimport { StreamableValue } from './streamable-value';\n\n/**\n * `readStreamableValue` takes a streamable value created via the `createStreamableValue().value` API,\n * and returns an async iterator.\n *\n * ```js\n * // Inside your AI action:\n *\n * async function action() {\n * 'use server'\n * const streamable = createStreamableValue();\n *\n * streamable.update(1);\n * streamable.update(2);\n * streamable.done(3);\n * // ...\n * return streamable.value;\n * }\n * ```\n *\n * And to read the value:\n *\n * ```js\n * const streamableValue = await action()\n * for await (const v of readStreamableValue(streamableValue)) {\n * console.log(v)\n * }\n * ```\n *\n * This logs out 1, 2, 3 on console.\n */\nexport function readStreamableValue<T = unknown>(\n streamableValue: StreamableValue<T>,\n): AsyncIterable<T | undefined> {\n if (!isStreamableValue(streamableValue)) {\n throw new Error(\n 'Invalid value: this hook only accepts values created via `createStreamableValue`.',\n );\n }\n\n return {\n [Symbol.asyncIterator]() {\n let row: StreamableValue<T> | Promise<StreamableValue<T>> =\n streamableValue;\n let value = row.curr; // the current value\n let isDone = false;\n let isFirstIteration = true;\n\n return {\n async next() {\n // the iteration is done already, return the last value:\n if (isDone) return { value, done: true };\n\n // resolve the promise at the beginning of each iteration:\n row = await row;\n\n // throw error if any:\n if (row.error !== undefined) {\n throw row.error;\n }\n\n // if there is a value or a patch, use it:\n if ('curr' in row || row.diff) {\n if (row.diff) {\n // streamable patch (text only):\n if (row.diff[0] === 0) {\n if (typeof value !== 'string') {\n throw new Error(\n 'Invalid patch: can only append to string types. This is a bug in the AI SDK.',\n );\n }\n\n // casting required to remove T & string limitation\n (value as string) = value + row.diff[1];\n }\n } else {\n // replace the value (full new value)\n value = row.curr;\n }\n\n // The last emitted { done: true } won't be used as the value\n // by the for await...of syntax.\n if (!row.next) {\n isDone = true;\n return { value, done: false };\n }\n }\n\n // there are no further rows to iterate over:\n if (row.next === undefined) {\n return { value, done: true };\n }\n\n row = row.next;\n\n if (isFirstIteration) {\n isFirstIteration = false; // TODO should this be set for every return?\n\n if (value === undefined) {\n // This is the initial chunk and there isn't an initial value yet.\n // Let's skip this one.\n return this.next();\n }\n }\n\n return { value, done: false };\n },\n };\n },\n };\n}\n","import { startTransition, useLayoutEffect, useState } from 'react';\nimport { readStreamableValue } from './read-streamable-value';\nimport { StreamableValue } from './streamable-value';\nimport { isStreamableValue } from './is-streamable-value';\n\nfunction checkStreamableValue(value: unknown): value is StreamableValue {\n const hasSignature = isStreamableValue(value);\n\n if (!hasSignature && value !== undefined) {\n throw new Error(\n 'Invalid value: this hook only accepts values created via `createStreamableValue`.',\n );\n }\n\n return hasSignature;\n}\n\n/**\n * `useStreamableValue` is a React hook that takes a streamable value created via the `createStreamableValue().value` API,\n * and returns the current value, error, and pending state.\n *\n * This is useful for consuming streamable values received from a component's props. For example:\n *\n * ```js\n * function MyComponent({ streamableValue }) {\n * const [data, error, pending] = useStreamableValue(streamableValue);\n *\n * if (pending) return <div>Loading...</div>;\n * if (error) return <div>Error: {error.message}</div>;\n *\n * return <div>Data: {data}</div>;\n * }\n * ```\n */\nexport function useStreamableValue<T = unknown, Error = unknown>(\n streamableValue?: StreamableValue<T>,\n): [data: T | undefined, error: Error | undefined, pending: boolean] {\n const [curr, setCurr] = useState<T | undefined>(\n checkStreamableValue(streamableValue) ? streamableValue.curr : undefined,\n );\n const [error, setError] = useState<Error | undefined>(\n checkStreamableValue(streamableValue) ? streamableValue.error : undefined,\n );\n const [pending, setPending] = useState<boolean>(\n checkStreamableValue(streamableValue) ? !!streamableValue.next : false,\n );\n\n useLayoutEffect(() => {\n if (!checkStreamableValue(streamableValue)) return;\n\n let cancelled = false;\n\n const iterator = readStreamableValue(streamableValue);\n if (streamableValue.next) {\n startTransition(() => {\n if (cancelled) return;\n setPending(true);\n });\n }\n\n (async () => {\n try {\n for await (const value of iterator) {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setCurr(value);\n });\n }\n } catch (e) {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setError(e as Error);\n });\n } finally {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setPending(false);\n });\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [streamableValue]);\n\n return [curr, error, pending];\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n'use client';\n\nimport * as React from 'react';\n\nimport * as jsondiffpatch from 'jsondiffpatch';\nimport { isFunction } from '../../util/is-function';\nimport type {\n AIProvider,\n InferActions,\n InferAIState,\n InferUIState,\n InternalAIProviderProps,\n ValueOrUpdater,\n} from '../types';\n\nconst InternalUIStateProvider = React.createContext<null | any>(null);\nconst InternalAIStateProvider = React.createContext<undefined | any>(undefined);\nconst InternalActionProvider = React.createContext<null | any>(null);\nconst InternalSyncUIStateProvider = React.createContext<null | any>(null);\n\nexport function InternalAIProvider({\n children,\n initialUIState,\n initialAIState,\n initialAIStatePatch,\n wrappedActions,\n wrappedSyncUIState,\n}: InternalAIProviderProps) {\n if (!('use' in React)) {\n throw new Error('Unsupported React version.');\n }\n\n const uiState = React.useState(initialUIState);\n const setUIState = uiState[1];\n\n const resolvedInitialAIStatePatch = initialAIStatePatch\n ? (React as any).use(initialAIStatePatch)\n : undefined;\n initialAIState = React.useMemo(() => {\n if (resolvedInitialAIStatePatch) {\n return jsondiffpatch.patch(\n jsondiffpatch.clone(initialAIState),\n resolvedInitialAIStatePatch,\n );\n }\n return initialAIState;\n }, [initialAIState, resolvedInitialAIStatePatch]);\n\n const aiState = React.useState(initialAIState);\n const setAIState = aiState[1];\n const aiStateRef = React.useRef(aiState[0]);\n\n React.useEffect(() => {\n aiStateRef.current = aiState[0];\n }, [aiState[0]]);\n\n const clientWrappedActions = React.useMemo(\n () =>\n Object.fromEntries(\n Object.entries(wrappedActions).map(([key, action]) => [\n key,\n async (...args: any) => {\n const aiStateSnapshot = aiStateRef.current;\n const [aiStateDelta, result] = await action(\n aiStateSnapshot,\n ...args,\n );\n (async () => {\n const delta = await aiStateDelta;\n if (delta !== undefined) {\n aiState[1](\n jsondiffpatch.patch(\n jsondiffpatch.clone(aiStateSnapshot),\n delta,\n ),\n );\n }\n })();\n return result;\n },\n ]),\n ),\n [wrappedActions],\n );\n\n const clientWrappedSyncUIStateAction = React.useMemo(() => {\n if (!wrappedSyncUIState) {\n return () => {};\n }\n\n return async () => {\n const aiStateSnapshot = aiStateRef.current;\n const [aiStateDelta, uiState] =\n await wrappedSyncUIState!(aiStateSnapshot);\n\n if (uiState !== undefined) {\n setUIState(uiState);\n }\n\n const delta = await aiStateDelta;\n if (delta !== undefined) {\n const patchedAiState = jsondiffpatch.patch(\n jsondiffpatch.clone(aiStateSnapshot),\n delta,\n );\n setAIState(patchedAiState);\n }\n };\n }, [wrappedSyncUIState]);\n\n return (\n <InternalAIStateProvider.Provider value={aiState}>\n <InternalUIStateProvider.Provider value={uiState}>\n <InternalActionProvider.Provider value={clientWrappedActions}>\n <InternalSyncUIStateProvider.Provider\n value={clientWrappedSyncUIStateAction}\n >\n {children}\n </InternalSyncUIStateProvider.Provider>\n </InternalActionProvider.Provider>\n </InternalUIStateProvider.Provider>\n </InternalAIStateProvider.Provider>\n );\n}\n\nexport function useUIState<AI extends AIProvider = any>() {\n type T = InferUIState<AI, any>;\n\n const state = React.useContext<\n [T, (v: T | ((v_: T) => T)) => void] | null | undefined\n >(InternalUIStateProvider);\n if (state === null) {\n throw new Error('`useUIState` must be used inside an <AI> provider.');\n }\n if (!Array.isArray(state)) {\n throw new Error('Invalid state');\n }\n if (state[0] === undefined) {\n throw new Error(\n '`initialUIState` must be provided to `createAI` or `<AI>`',\n );\n }\n return state;\n}\n\n// TODO: How do we avoid causing a re-render when the AI state changes but you\n// are only listening to a specific key? We need useSES perhaps?\nfunction useAIState<AI extends AIProvider = any>(): [\n InferAIState<AI, any>,\n (newState: ValueOrUpdater<InferAIState<AI, any>>) => void,\n];\nfunction useAIState<AI extends AIProvider = any>(\n key: keyof InferAIState<AI, any>,\n): [\n InferAIState<AI, any>[typeof key],\n (newState: ValueOrUpdater<InferAIState<AI, any>[typeof key]>) => void,\n];\nfunction useAIState<AI extends AIProvider = any>(\n ...args: [] | [keyof InferAIState<AI, any>]\n) {\n type T = InferAIState<AI, any>;\n\n const state = React.useContext<\n [T, (newState: ValueOrUpdater<T>) => void] | null | undefined\n >(InternalAIStateProvider);\n if (state === null) {\n throw new Error('`useAIState` must be used inside an <AI> provider.');\n }\n if (!Array.isArray(state)) {\n throw new Error('Invalid state');\n }\n if (state[0] === undefined) {\n throw new Error(\n '`initialAIState` must be provided to `createAI` or `<AI>`',\n );\n }\n if (args.length >= 1 && typeof state[0] !== 'object') {\n throw new Error(\n 'When using `useAIState` with a key, the AI state must be an object.',\n );\n }\n\n const key = args[0];\n const setter = React.useCallback(\n typeof key === 'undefined'\n ? state[1]\n : (newState: ValueOrUpdater<T>) => {\n if (isFunction(newState)) {\n return state[1](s => {\n return { ...s, [key]: newState(s[key]) };\n });\n } else {\n return state[1]({ ...state[0], [key]: newState });\n }\n },\n [key],\n );\n\n if (args.length === 0) {\n return state;\n } else {\n return [state[0][args[0]], setter];\n }\n}\n\nexport function useActions<AI extends AIProvider = any>() {\n type T = InferActions<AI, any>;\n\n const actions = React.useContext<T>(InternalActionProvider);\n return actions;\n}\n\nexport function useSyncUIState() {\n const syncUIState = React.useContext<() => Promise<void>>(\n InternalSyncUIStateProvider,\n );\n\n if (syncUIState === null) {\n throw new Error('`useSyncUIState` must be used inside an <AI> provider.');\n }\n\n return syncUIState;\n}\n\nexport { useAIState };\n","/**\n * Checks if the given value is a function.\n *\n * @param {unknown} value - The value to check.\n * @returns {boolean} True if the value is a function, false otherwise.\n */\nexport const isFunction = (value: unknown): value is Function =>\n typeof value === 'function';\n"],"mappings":"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","names":["uiState"]}
@@ -0,0 +1,65 @@
1
+ export { convertArrayToReadableStream, mockId } from '@ai-sdk/provider-utils/test';
2
+ import { EmbeddingModelV1, LanguageModelV1 } from '@ai-sdk/provider';
3
+
4
+ declare class MockEmbeddingModelV1<VALUE> implements EmbeddingModelV1<VALUE> {
5
+ readonly specificationVersion = "v1";
6
+ readonly provider: EmbeddingModelV1<VALUE>['provider'];
7
+ readonly modelId: EmbeddingModelV1<VALUE>['modelId'];
8
+ readonly maxEmbeddingsPerCall: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'];
9
+ readonly supportsParallelCalls: EmbeddingModelV1<VALUE>['supportsParallelCalls'];
10
+ doEmbed: EmbeddingModelV1<VALUE>['doEmbed'];
11
+ constructor({ provider, modelId, maxEmbeddingsPerCall, supportsParallelCalls, doEmbed, }?: {
12
+ provider?: EmbeddingModelV1<VALUE>['provider'];
13
+ modelId?: EmbeddingModelV1<VALUE>['modelId'];
14
+ maxEmbeddingsPerCall?: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'] | null;
15
+ supportsParallelCalls?: EmbeddingModelV1<VALUE>['supportsParallelCalls'];
16
+ doEmbed?: EmbeddingModelV1<VALUE>['doEmbed'];
17
+ });
18
+ }
19
+
20
+ declare class MockLanguageModelV1 implements LanguageModelV1 {
21
+ readonly specificationVersion = "v1";
22
+ readonly provider: LanguageModelV1['provider'];
23
+ readonly modelId: LanguageModelV1['modelId'];
24
+ supportsUrl: LanguageModelV1['supportsUrl'];
25
+ doGenerate: LanguageModelV1['doGenerate'];
26
+ doStream: LanguageModelV1['doStream'];
27
+ readonly defaultObjectGenerationMode: LanguageModelV1['defaultObjectGenerationMode'];
28
+ readonly supportsStructuredOutputs: LanguageModelV1['supportsStructuredOutputs'];
29
+ constructor({ provider, modelId, supportsUrl, doGenerate, doStream, defaultObjectGenerationMode, supportsStructuredOutputs, }?: {
30
+ provider?: LanguageModelV1['provider'];
31
+ modelId?: LanguageModelV1['modelId'];
32
+ supportsUrl?: LanguageModelV1['supportsUrl'];
33
+ doGenerate?: LanguageModelV1['doGenerate'];
34
+ doStream?: LanguageModelV1['doStream'];
35
+ defaultObjectGenerationMode?: LanguageModelV1['defaultObjectGenerationMode'];
36
+ supportsStructuredOutputs?: LanguageModelV1['supportsStructuredOutputs'];
37
+ });
38
+ }
39
+
40
+ declare function mockValues<T>(...values: T[]): () => T;
41
+
42
+ /**
43
+ * Creates a ReadableStream that emits the provided values with an optional delay between each value.
44
+ *
45
+ * @param options - The configuration options
46
+ * @param options.chunks - Array of values to be emitted by the stream
47
+ * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0). Can be set to `null` to skip the initial delay. The difference between `initialDelayInMs: null` and `initialDelayInMs: 0` is that `initialDelayInMs: null` will emit the values without any delay, while `initialDelayInMs: 0` will emit the values with a delay of 0 milliseconds.
48
+ * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0). Can be set to `null` to skip the delay. The difference between `chunkDelayInMs: null` and `chunkDelayInMs: 0` is that `chunkDelayInMs: null` will emit the values without any delay, while `chunkDelayInMs: 0` will emit the values with a delay of 0 milliseconds.
49
+ * @returns A ReadableStream that emits the provided values
50
+ */
51
+ declare function simulateReadableStream$1<T>({ chunks, initialDelayInMs, chunkDelayInMs, _internal, }: {
52
+ chunks: T[];
53
+ initialDelayInMs?: number | null;
54
+ chunkDelayInMs?: number | null;
55
+ _internal?: {
56
+ delay?: (ms: number | null) => Promise<void>;
57
+ };
58
+ }): ReadableStream<T>;
59
+
60
+ /**
61
+ * @deprecated Use `simulateReadableStream` from `ai` instead.
62
+ */
63
+ declare const simulateReadableStream: typeof simulateReadableStream$1;
64
+
65
+ export { MockEmbeddingModelV1, MockLanguageModelV1, mockValues, simulateReadableStream };
@@ -0,0 +1,65 @@
1
+ export { convertArrayToReadableStream, mockId } from '@ai-sdk/provider-utils/test';
2
+ import { EmbeddingModelV1, LanguageModelV1 } from '@ai-sdk/provider';
3
+
4
+ declare class MockEmbeddingModelV1<VALUE> implements EmbeddingModelV1<VALUE> {
5
+ readonly specificationVersion = "v1";
6
+ readonly provider: EmbeddingModelV1<VALUE>['provider'];
7
+ readonly modelId: EmbeddingModelV1<VALUE>['modelId'];
8
+ readonly maxEmbeddingsPerCall: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'];
9
+ readonly supportsParallelCalls: EmbeddingModelV1<VALUE>['supportsParallelCalls'];
10
+ doEmbed: EmbeddingModelV1<VALUE>['doEmbed'];
11
+ constructor({ provider, modelId, maxEmbeddingsPerCall, supportsParallelCalls, doEmbed, }?: {
12
+ provider?: EmbeddingModelV1<VALUE>['provider'];
13
+ modelId?: EmbeddingModelV1<VALUE>['modelId'];
14
+ maxEmbeddingsPerCall?: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'] | null;
15
+ supportsParallelCalls?: EmbeddingModelV1<VALUE>['supportsParallelCalls'];
16
+ doEmbed?: EmbeddingModelV1<VALUE>['doEmbed'];
17
+ });
18
+ }
19
+
20
+ declare class MockLanguageModelV1 implements LanguageModelV1 {
21
+ readonly specificationVersion = "v1";
22
+ readonly provider: LanguageModelV1['provider'];
23
+ readonly modelId: LanguageModelV1['modelId'];
24
+ supportsUrl: LanguageModelV1['supportsUrl'];
25
+ doGenerate: LanguageModelV1['doGenerate'];
26
+ doStream: LanguageModelV1['doStream'];
27
+ readonly defaultObjectGenerationMode: LanguageModelV1['defaultObjectGenerationMode'];
28
+ readonly supportsStructuredOutputs: LanguageModelV1['supportsStructuredOutputs'];
29
+ constructor({ provider, modelId, supportsUrl, doGenerate, doStream, defaultObjectGenerationMode, supportsStructuredOutputs, }?: {
30
+ provider?: LanguageModelV1['provider'];
31
+ modelId?: LanguageModelV1['modelId'];
32
+ supportsUrl?: LanguageModelV1['supportsUrl'];
33
+ doGenerate?: LanguageModelV1['doGenerate'];
34
+ doStream?: LanguageModelV1['doStream'];
35
+ defaultObjectGenerationMode?: LanguageModelV1['defaultObjectGenerationMode'];
36
+ supportsStructuredOutputs?: LanguageModelV1['supportsStructuredOutputs'];
37
+ });
38
+ }
39
+
40
+ declare function mockValues<T>(...values: T[]): () => T;
41
+
42
+ /**
43
+ * Creates a ReadableStream that emits the provided values with an optional delay between each value.
44
+ *
45
+ * @param options - The configuration options
46
+ * @param options.chunks - Array of values to be emitted by the stream
47
+ * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0). Can be set to `null` to skip the initial delay. The difference between `initialDelayInMs: null` and `initialDelayInMs: 0` is that `initialDelayInMs: null` will emit the values without any delay, while `initialDelayInMs: 0` will emit the values with a delay of 0 milliseconds.
48
+ * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0). Can be set to `null` to skip the delay. The difference between `chunkDelayInMs: null` and `chunkDelayInMs: 0` is that `chunkDelayInMs: null` will emit the values without any delay, while `chunkDelayInMs: 0` will emit the values with a delay of 0 milliseconds.
49
+ * @returns A ReadableStream that emits the provided values
50
+ */
51
+ declare function simulateReadableStream$1<T>({ chunks, initialDelayInMs, chunkDelayInMs, _internal, }: {
52
+ chunks: T[];
53
+ initialDelayInMs?: number | null;
54
+ chunkDelayInMs?: number | null;
55
+ _internal?: {
56
+ delay?: (ms: number | null) => Promise<void>;
57
+ };
58
+ }): ReadableStream<T>;
59
+
60
+ /**
61
+ * @deprecated Use `simulateReadableStream` from `ai` instead.
62
+ */
63
+ declare const simulateReadableStream: typeof simulateReadableStream$1;
64
+
65
+ export { MockEmbeddingModelV1, MockLanguageModelV1, mockValues, simulateReadableStream };