@langchain/core 1.0.0-alpha.3 → 1.0.0-alpha.5

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 (570) hide show
  1. package/README.md +3 -19
  2. package/dist/agents.d.ts.map +1 -1
  3. package/dist/caches/base.cjs +2 -2
  4. package/dist/caches/base.cjs.map +1 -1
  5. package/dist/caches/base.d.ts.map +1 -1
  6. package/dist/callbacks/base.d.ts.map +1 -1
  7. package/dist/document_loaders/langsmith.cjs +1 -1
  8. package/dist/document_loaders/langsmith.cjs.map +1 -1
  9. package/dist/document_loaders/langsmith.js +1 -1
  10. package/dist/document_loaders/langsmith.js.map +1 -1
  11. package/dist/embeddings.cjs.map +1 -1
  12. package/dist/embeddings.d.cts +6 -6
  13. package/dist/embeddings.d.cts.map +1 -1
  14. package/dist/embeddings.d.ts +6 -6
  15. package/dist/embeddings.d.ts.map +1 -1
  16. package/dist/embeddings.js.map +1 -1
  17. package/dist/errors/index.cjs.map +1 -1
  18. package/dist/errors/index.js.map +1 -1
  19. package/dist/indexing/base.cjs +2 -2
  20. package/dist/indexing/base.cjs.map +1 -1
  21. package/dist/indexing/base.d.cts +0 -3
  22. package/dist/indexing/base.d.cts.map +1 -1
  23. package/dist/indexing/base.d.ts +0 -3
  24. package/dist/indexing/base.d.ts.map +1 -1
  25. package/dist/indexing/base.js +2 -2
  26. package/dist/indexing/base.js.map +1 -1
  27. package/dist/language_models/base.cjs +1 -1
  28. package/dist/language_models/base.cjs.map +1 -1
  29. package/dist/language_models/base.d.cts +3 -3
  30. package/dist/language_models/base.d.cts.map +1 -1
  31. package/dist/language_models/base.d.ts +3 -3
  32. package/dist/language_models/base.d.ts.map +1 -1
  33. package/dist/language_models/base.js +1 -1
  34. package/dist/language_models/base.js.map +1 -1
  35. package/dist/language_models/chat_models.cjs.map +1 -1
  36. package/dist/language_models/chat_models.d.ts.map +1 -1
  37. package/dist/language_models/chat_models.js.map +1 -1
  38. package/dist/language_models/llms.cjs.map +1 -1
  39. package/dist/language_models/llms.js.map +1 -1
  40. package/dist/load/import_map.cjs +0 -4
  41. package/dist/load/import_map.cjs.map +1 -1
  42. package/dist/load/import_map.js +2 -6
  43. package/dist/load/import_map.js.map +1 -1
  44. package/dist/load/index.cjs.map +1 -1
  45. package/dist/load/index.js.map +1 -1
  46. package/dist/load/serializable.cjs.map +1 -1
  47. package/dist/load/serializable.d.cts +1 -3
  48. package/dist/load/serializable.d.cts.map +1 -1
  49. package/dist/load/serializable.d.ts +1 -3
  50. package/dist/load/serializable.d.ts.map +1 -1
  51. package/dist/load/serializable.js.map +1 -1
  52. package/dist/messages/ai.cjs +17 -12
  53. package/dist/messages/ai.cjs.map +1 -1
  54. package/dist/messages/ai.js +17 -12
  55. package/dist/messages/ai.js.map +1 -1
  56. package/dist/messages/base.cjs +12 -5
  57. package/dist/messages/base.cjs.map +1 -1
  58. package/dist/messages/base.d.cts +1 -2
  59. package/dist/messages/base.d.cts.map +1 -1
  60. package/dist/messages/base.d.ts +1 -2
  61. package/dist/messages/base.d.ts.map +1 -1
  62. package/dist/messages/base.js +12 -5
  63. package/dist/messages/base.js.map +1 -1
  64. package/dist/messages/block_translators/utils.cjs +1 -1
  65. package/dist/messages/block_translators/utils.cjs.map +1 -1
  66. package/dist/messages/block_translators/utils.js +1 -1
  67. package/dist/messages/block_translators/utils.js.map +1 -1
  68. package/dist/messages/index.cjs +1 -1
  69. package/dist/messages/index.js +1 -1
  70. package/dist/messages/modifier.cjs +4 -1
  71. package/dist/messages/modifier.cjs.map +1 -1
  72. package/dist/messages/modifier.js +4 -1
  73. package/dist/messages/modifier.js.map +1 -1
  74. package/dist/messages/tool.cjs +7 -7
  75. package/dist/messages/tool.cjs.map +1 -1
  76. package/dist/messages/tool.js +7 -7
  77. package/dist/messages/tool.js.map +1 -1
  78. package/dist/messages/transformers.cjs +2 -2
  79. package/dist/messages/transformers.cjs.map +1 -1
  80. package/dist/messages/transformers.js +2 -2
  81. package/dist/messages/transformers.js.map +1 -1
  82. package/dist/messages/utils.cjs +5 -0
  83. package/dist/messages/utils.cjs.map +1 -1
  84. package/dist/messages/utils.js +5 -0
  85. package/dist/messages/utils.js.map +1 -1
  86. package/dist/output_parsers/list.cjs +1 -1
  87. package/dist/output_parsers/list.cjs.map +1 -1
  88. package/dist/output_parsers/list.js +1 -1
  89. package/dist/output_parsers/list.js.map +1 -1
  90. package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.cts +1 -1
  91. package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.ts +1 -1
  92. package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs +1 -1
  93. package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs.map +1 -1
  94. package/dist/output_parsers/openai_tools/json_output_tools_parsers.js +1 -1
  95. package/dist/output_parsers/openai_tools/json_output_tools_parsers.js.map +1 -1
  96. package/dist/output_parsers/structured.cjs +2 -1
  97. package/dist/output_parsers/structured.cjs.map +1 -1
  98. package/dist/output_parsers/structured.js +2 -1
  99. package/dist/output_parsers/structured.js.map +1 -1
  100. package/dist/prompts/chat.cjs +3 -1
  101. package/dist/prompts/chat.cjs.map +1 -1
  102. package/dist/prompts/chat.d.cts +4 -12
  103. package/dist/prompts/chat.d.cts.map +1 -1
  104. package/dist/prompts/chat.d.ts +4 -12
  105. package/dist/prompts/chat.d.ts.map +1 -1
  106. package/dist/prompts/chat.js +3 -1
  107. package/dist/prompts/chat.js.map +1 -1
  108. package/dist/prompts/image.cjs.map +1 -1
  109. package/dist/prompts/image.d.cts +0 -2
  110. package/dist/prompts/image.d.cts.map +1 -1
  111. package/dist/prompts/image.d.ts +0 -2
  112. package/dist/prompts/image.d.ts.map +1 -1
  113. package/dist/prompts/image.js.map +1 -1
  114. package/dist/prompts/pipeline.cjs.map +1 -1
  115. package/dist/prompts/pipeline.js.map +1 -1
  116. package/dist/prompts/prompt.cjs.map +1 -1
  117. package/dist/prompts/prompt.d.cts +4 -16
  118. package/dist/prompts/prompt.d.cts.map +1 -1
  119. package/dist/prompts/prompt.d.ts +4 -16
  120. package/dist/prompts/prompt.d.ts.map +1 -1
  121. package/dist/prompts/prompt.js.map +1 -1
  122. package/dist/prompts/structured.cjs.map +1 -1
  123. package/dist/prompts/structured.js.map +1 -1
  124. package/dist/prompts/template.cjs +4 -2
  125. package/dist/prompts/template.cjs.map +1 -1
  126. package/dist/prompts/template.js +4 -2
  127. package/dist/prompts/template.js.map +1 -1
  128. package/dist/runnables/base.cjs +6 -6
  129. package/dist/runnables/base.cjs.map +1 -1
  130. package/dist/runnables/base.d.cts +0 -3
  131. package/dist/runnables/base.d.cts.map +1 -1
  132. package/dist/runnables/base.d.ts +0 -3
  133. package/dist/runnables/base.d.ts.map +1 -1
  134. package/dist/runnables/base.js +6 -6
  135. package/dist/runnables/base.js.map +1 -1
  136. package/dist/runnables/branch.cjs +2 -2
  137. package/dist/runnables/branch.cjs.map +1 -1
  138. package/dist/runnables/branch.js +2 -2
  139. package/dist/runnables/branch.js.map +1 -1
  140. package/dist/runnables/config.cjs.map +1 -1
  141. package/dist/runnables/config.js.map +1 -1
  142. package/dist/runnables/graph.cjs +1 -1
  143. package/dist/runnables/graph.cjs.map +1 -1
  144. package/dist/runnables/graph.js +1 -1
  145. package/dist/runnables/graph.js.map +1 -1
  146. package/dist/runnables/graph_mermaid.cjs +26 -3
  147. package/dist/runnables/graph_mermaid.cjs.map +1 -1
  148. package/dist/runnables/graph_mermaid.js +26 -3
  149. package/dist/runnables/graph_mermaid.js.map +1 -1
  150. package/dist/runnables/remote.cjs.map +1 -1
  151. package/dist/runnables/remote.js.map +1 -1
  152. package/dist/runnables/types.d.cts +0 -1
  153. package/dist/runnables/types.d.cts.map +1 -1
  154. package/dist/runnables/types.d.ts +0 -1
  155. package/dist/runnables/types.d.ts.map +1 -1
  156. package/dist/singletons/async_local_storage/context.cjs.map +1 -1
  157. package/dist/singletons/async_local_storage/context.d.cts +0 -1
  158. package/dist/singletons/async_local_storage/context.d.cts.map +1 -1
  159. package/dist/singletons/async_local_storage/context.d.ts +0 -1
  160. package/dist/singletons/async_local_storage/context.d.ts.map +1 -1
  161. package/dist/singletons/async_local_storage/context.js.map +1 -1
  162. package/dist/singletons/callbacks.cjs.map +1 -1
  163. package/dist/singletons/callbacks.js.map +1 -1
  164. package/dist/tools/index.cjs.map +1 -1
  165. package/dist/tools/index.d.cts +2 -2
  166. package/dist/tools/index.d.cts.map +1 -1
  167. package/dist/tools/index.d.ts +2 -2
  168. package/dist/tools/index.d.ts.map +1 -1
  169. package/dist/tools/index.js.map +1 -1
  170. package/dist/tools/types.d.cts +5 -5
  171. package/dist/tools/types.d.cts.map +1 -1
  172. package/dist/tools/types.d.ts +5 -5
  173. package/dist/tools/types.d.ts.map +1 -1
  174. package/dist/tracers/base.cjs.map +1 -1
  175. package/dist/tracers/base.js.map +1 -1
  176. package/dist/tracers/console.cjs +1 -1
  177. package/dist/tracers/console.cjs.map +1 -1
  178. package/dist/tracers/console.js +1 -1
  179. package/dist/tracers/console.js.map +1 -1
  180. package/dist/tracers/event_stream.cjs +1 -1
  181. package/dist/tracers/event_stream.cjs.map +1 -1
  182. package/dist/tracers/event_stream.d.cts +0 -1
  183. package/dist/tracers/event_stream.d.cts.map +1 -1
  184. package/dist/tracers/event_stream.d.ts +0 -1
  185. package/dist/tracers/event_stream.d.ts.map +1 -1
  186. package/dist/tracers/event_stream.js +1 -1
  187. package/dist/tracers/event_stream.js.map +1 -1
  188. package/dist/tracers/log_stream.cjs.map +1 -1
  189. package/dist/tracers/log_stream.js.map +1 -1
  190. package/dist/tracers/tracer_langchain.cjs.map +1 -1
  191. package/dist/tracers/tracer_langchain.js.map +1 -1
  192. package/dist/utils/chunk_array.cjs.map +1 -1
  193. package/dist/utils/chunk_array.js.map +1 -1
  194. package/dist/utils/env.cjs +1 -1
  195. package/dist/utils/env.cjs.map +1 -1
  196. package/dist/utils/env.js +1 -1
  197. package/dist/utils/env.js.map +1 -1
  198. package/dist/utils/event_source_parse.cjs.map +1 -1
  199. package/dist/utils/event_source_parse.d.cts.map +1 -1
  200. package/dist/utils/event_source_parse.d.ts.map +1 -1
  201. package/dist/utils/event_source_parse.js.map +1 -1
  202. package/dist/utils/hash.cjs +3 -8
  203. package/dist/utils/hash.cjs.map +1 -1
  204. package/dist/utils/hash.d.cts +1 -2
  205. package/dist/utils/hash.d.cts.map +1 -1
  206. package/dist/utils/hash.d.ts +1 -2
  207. package/dist/utils/hash.d.ts.map +1 -1
  208. package/dist/utils/hash.js +2 -6
  209. package/dist/utils/hash.js.map +1 -1
  210. package/dist/utils/js-sha256/hash.cjs +0 -9
  211. package/dist/utils/js-sha256/hash.cjs.map +1 -1
  212. package/dist/utils/js-sha256/hash.js +1 -5
  213. package/dist/utils/js-sha256/hash.js.map +1 -1
  214. package/dist/utils/json.cjs +2 -2
  215. package/dist/utils/json.cjs.map +1 -1
  216. package/dist/utils/json.js +2 -2
  217. package/dist/utils/json.js.map +1 -1
  218. package/dist/utils/json_schema.cjs +3 -2
  219. package/dist/utils/json_schema.cjs.map +1 -1
  220. package/dist/utils/json_schema.d.cts +8 -4
  221. package/dist/utils/json_schema.d.cts.map +1 -1
  222. package/dist/utils/json_schema.d.ts +8 -4
  223. package/dist/utils/json_schema.d.ts.map +1 -1
  224. package/dist/utils/json_schema.js +2 -1
  225. package/dist/utils/json_schema.js.map +1 -1
  226. package/dist/utils/stream.cjs.map +1 -1
  227. package/dist/utils/stream.js.map +1 -1
  228. package/dist/utils/testing/chat_models.cjs +245 -0
  229. package/dist/utils/testing/chat_models.cjs.map +1 -0
  230. package/dist/utils/testing/chat_models.d.cts +134 -0
  231. package/dist/utils/testing/chat_models.d.cts.map +1 -0
  232. package/dist/utils/testing/chat_models.d.ts +134 -0
  233. package/dist/utils/testing/chat_models.d.ts.map +1 -0
  234. package/dist/utils/testing/chat_models.js +243 -0
  235. package/dist/utils/testing/chat_models.js.map +1 -0
  236. package/dist/utils/testing/embeddings.cjs +90 -0
  237. package/dist/utils/testing/embeddings.cjs.map +1 -0
  238. package/dist/utils/testing/embeddings.d.cts +58 -0
  239. package/dist/utils/testing/embeddings.d.cts.map +1 -0
  240. package/dist/utils/testing/embeddings.d.ts +58 -0
  241. package/dist/utils/testing/embeddings.d.ts.map +1 -0
  242. package/dist/utils/testing/embeddings.js +89 -0
  243. package/dist/utils/testing/embeddings.js.map +1 -0
  244. package/dist/utils/testing/index.cjs +42 -655
  245. package/dist/utils/testing/index.cjs.map +1 -1
  246. package/dist/utils/testing/index.d.cts +11 -384
  247. package/dist/utils/testing/index.d.ts +11 -384
  248. package/dist/utils/testing/index.js +10 -623
  249. package/dist/utils/testing/index.js.map +1 -1
  250. package/dist/utils/testing/llms.cjs +59 -0
  251. package/dist/utils/testing/llms.cjs.map +1 -0
  252. package/dist/utils/testing/llms.d.cts +31 -0
  253. package/dist/utils/testing/llms.d.cts.map +1 -0
  254. package/dist/utils/testing/llms.d.ts +31 -0
  255. package/dist/utils/testing/llms.d.ts.map +1 -0
  256. package/dist/utils/testing/llms.js +58 -0
  257. package/dist/utils/testing/llms.js.map +1 -0
  258. package/dist/utils/testing/message_history.cjs +67 -0
  259. package/dist/utils/testing/message_history.cjs.map +1 -0
  260. package/dist/utils/testing/message_history.d.cts +31 -0
  261. package/dist/utils/testing/message_history.d.cts.map +1 -0
  262. package/dist/utils/testing/message_history.d.ts +31 -0
  263. package/dist/utils/testing/message_history.d.ts.map +1 -0
  264. package/dist/utils/testing/message_history.js +65 -0
  265. package/dist/utils/testing/message_history.js.map +1 -0
  266. package/dist/utils/testing/output_parsers.cjs +20 -0
  267. package/dist/utils/testing/output_parsers.cjs.map +1 -0
  268. package/dist/utils/testing/output_parsers.d.cts +16 -0
  269. package/dist/utils/testing/output_parsers.d.cts.map +1 -0
  270. package/dist/utils/testing/output_parsers.d.ts +16 -0
  271. package/dist/utils/testing/output_parsers.d.ts.map +1 -0
  272. package/dist/utils/testing/output_parsers.js +20 -0
  273. package/dist/utils/testing/output_parsers.js.map +1 -0
  274. package/dist/utils/testing/retrievers.cjs +19 -0
  275. package/dist/utils/testing/retrievers.cjs.map +1 -0
  276. package/dist/utils/testing/retrievers.d.cts +17 -0
  277. package/dist/utils/testing/retrievers.d.cts.map +1 -0
  278. package/dist/utils/testing/retrievers.d.ts +17 -0
  279. package/dist/utils/testing/retrievers.d.ts.map +1 -0
  280. package/dist/utils/testing/retrievers.js +19 -0
  281. package/dist/utils/testing/retrievers.js.map +1 -0
  282. package/dist/utils/testing/runnables.cjs +19 -0
  283. package/dist/utils/testing/runnables.cjs.map +1 -0
  284. package/dist/utils/testing/runnables.d.cts +15 -0
  285. package/dist/utils/testing/runnables.d.cts.map +1 -0
  286. package/dist/utils/testing/runnables.d.ts +15 -0
  287. package/dist/utils/testing/runnables.d.ts.map +1 -0
  288. package/dist/utils/testing/runnables.js +19 -0
  289. package/dist/utils/testing/runnables.js.map +1 -0
  290. package/dist/utils/testing/tools.cjs +21 -0
  291. package/dist/utils/testing/tools.cjs.map +1 -0
  292. package/dist/utils/testing/tools.d.cts +21 -0
  293. package/dist/utils/testing/tools.d.cts.map +1 -0
  294. package/dist/utils/testing/tools.d.ts +21 -0
  295. package/dist/utils/testing/tools.d.ts.map +1 -0
  296. package/dist/utils/testing/tools.js +21 -0
  297. package/dist/utils/testing/tools.js.map +1 -0
  298. package/dist/utils/testing/tracers.cjs +25 -0
  299. package/dist/utils/testing/tracers.cjs.map +1 -0
  300. package/dist/utils/testing/tracers.d.cts +15 -0
  301. package/dist/utils/testing/tracers.d.cts.map +1 -0
  302. package/dist/utils/testing/tracers.d.ts +15 -0
  303. package/dist/utils/testing/tracers.d.ts.map +1 -0
  304. package/dist/utils/testing/tracers.js +25 -0
  305. package/dist/utils/testing/tracers.js.map +1 -0
  306. package/dist/utils/testing/vectorstores.cjs +129 -0
  307. package/dist/utils/testing/vectorstores.cjs.map +1 -0
  308. package/dist/utils/testing/vectorstores.d.cts +101 -0
  309. package/dist/utils/testing/vectorstores.d.cts.map +1 -0
  310. package/dist/utils/testing/vectorstores.d.ts +101 -0
  311. package/dist/utils/testing/vectorstores.d.ts.map +1 -0
  312. package/dist/utils/testing/vectorstores.js +129 -0
  313. package/dist/utils/testing/vectorstores.js.map +1 -0
  314. package/dist/utils/zod-to-json-schema/Options.cjs +40 -0
  315. package/dist/utils/zod-to-json-schema/Options.cjs.map +1 -0
  316. package/dist/utils/zod-to-json-schema/Options.js +37 -0
  317. package/dist/utils/zod-to-json-schema/Options.js.map +1 -0
  318. package/dist/utils/zod-to-json-schema/Refs.cjs +30 -0
  319. package/dist/utils/zod-to-json-schema/Refs.cjs.map +1 -0
  320. package/dist/utils/zod-to-json-schema/Refs.js +30 -0
  321. package/dist/utils/zod-to-json-schema/Refs.js.map +1 -0
  322. package/dist/utils/zod-to-json-schema/errorMessages.cjs +18 -0
  323. package/dist/utils/zod-to-json-schema/errorMessages.cjs.map +1 -0
  324. package/dist/utils/zod-to-json-schema/errorMessages.d.cts +11 -0
  325. package/dist/utils/zod-to-json-schema/errorMessages.d.cts.map +1 -0
  326. package/dist/utils/zod-to-json-schema/errorMessages.d.ts +11 -0
  327. package/dist/utils/zod-to-json-schema/errorMessages.d.ts.map +1 -0
  328. package/dist/utils/zod-to-json-schema/errorMessages.js +16 -0
  329. package/dist/utils/zod-to-json-schema/errorMessages.js.map +1 -0
  330. package/dist/utils/zod-to-json-schema/getRelativePath.cjs +11 -0
  331. package/dist/utils/zod-to-json-schema/getRelativePath.cjs.map +1 -0
  332. package/dist/utils/zod-to-json-schema/getRelativePath.js +10 -0
  333. package/dist/utils/zod-to-json-schema/getRelativePath.js.map +1 -0
  334. package/dist/utils/zod-to-json-schema/index.cjs +37 -0
  335. package/dist/utils/zod-to-json-schema/index.js +37 -0
  336. package/dist/utils/zod-to-json-schema/parseDef.cjs +57 -0
  337. package/dist/utils/zod-to-json-schema/parseDef.cjs.map +1 -0
  338. package/dist/utils/zod-to-json-schema/parseDef.js +57 -0
  339. package/dist/utils/zod-to-json-schema/parseDef.js.map +1 -0
  340. package/dist/utils/zod-to-json-schema/parseTypes.d.cts +38 -0
  341. package/dist/utils/zod-to-json-schema/parseTypes.d.cts.map +1 -0
  342. package/dist/utils/zod-to-json-schema/parseTypes.d.ts +38 -0
  343. package/dist/utils/zod-to-json-schema/parseTypes.d.ts.map +1 -0
  344. package/dist/utils/zod-to-json-schema/parsers/any.cjs +17 -0
  345. package/dist/utils/zod-to-json-schema/parsers/any.cjs.map +1 -0
  346. package/dist/utils/zod-to-json-schema/parsers/any.d.cts +7 -0
  347. package/dist/utils/zod-to-json-schema/parsers/any.d.cts.map +1 -0
  348. package/dist/utils/zod-to-json-schema/parsers/any.d.ts +7 -0
  349. package/dist/utils/zod-to-json-schema/parsers/any.d.ts.map +1 -0
  350. package/dist/utils/zod-to-json-schema/parsers/any.js +17 -0
  351. package/dist/utils/zod-to-json-schema/parsers/any.js.map +1 -0
  352. package/dist/utils/zod-to-json-schema/parsers/array.cjs +24 -0
  353. package/dist/utils/zod-to-json-schema/parsers/array.cjs.map +1 -0
  354. package/dist/utils/zod-to-json-schema/parsers/array.d.cts +14 -0
  355. package/dist/utils/zod-to-json-schema/parsers/array.d.cts.map +1 -0
  356. package/dist/utils/zod-to-json-schema/parsers/array.d.ts +15 -0
  357. package/dist/utils/zod-to-json-schema/parsers/array.d.ts.map +1 -0
  358. package/dist/utils/zod-to-json-schema/parsers/array.js +23 -0
  359. package/dist/utils/zod-to-json-schema/parsers/array.js.map +1 -0
  360. package/dist/utils/zod-to-json-schema/parsers/bigint.cjs +36 -0
  361. package/dist/utils/zod-to-json-schema/parsers/bigint.cjs.map +1 -0
  362. package/dist/utils/zod-to-json-schema/parsers/bigint.d.cts +16 -0
  363. package/dist/utils/zod-to-json-schema/parsers/bigint.d.cts.map +1 -0
  364. package/dist/utils/zod-to-json-schema/parsers/bigint.d.ts +17 -0
  365. package/dist/utils/zod-to-json-schema/parsers/bigint.d.ts.map +1 -0
  366. package/dist/utils/zod-to-json-schema/parsers/bigint.js +36 -0
  367. package/dist/utils/zod-to-json-schema/parsers/bigint.js.map +1 -0
  368. package/dist/utils/zod-to-json-schema/parsers/boolean.cjs +9 -0
  369. package/dist/utils/zod-to-json-schema/parsers/boolean.cjs.map +1 -0
  370. package/dist/utils/zod-to-json-schema/parsers/boolean.d.cts +7 -0
  371. package/dist/utils/zod-to-json-schema/parsers/boolean.d.cts.map +1 -0
  372. package/dist/utils/zod-to-json-schema/parsers/boolean.d.ts +7 -0
  373. package/dist/utils/zod-to-json-schema/parsers/boolean.d.ts.map +1 -0
  374. package/dist/utils/zod-to-json-schema/parsers/boolean.js +8 -0
  375. package/dist/utils/zod-to-json-schema/parsers/boolean.js.map +1 -0
  376. package/dist/utils/zod-to-json-schema/parsers/branded.cjs +10 -0
  377. package/dist/utils/zod-to-json-schema/parsers/branded.cjs.map +1 -0
  378. package/dist/utils/zod-to-json-schema/parsers/branded.js +10 -0
  379. package/dist/utils/zod-to-json-schema/parsers/branded.js.map +1 -0
  380. package/dist/utils/zod-to-json-schema/parsers/catch.cjs +10 -0
  381. package/dist/utils/zod-to-json-schema/parsers/catch.cjs.map +1 -0
  382. package/dist/utils/zod-to-json-schema/parsers/catch.js +10 -0
  383. package/dist/utils/zod-to-json-schema/parsers/catch.js.map +1 -0
  384. package/dist/utils/zod-to-json-schema/parsers/date.cjs +39 -0
  385. package/dist/utils/zod-to-json-schema/parsers/date.cjs.map +1 -0
  386. package/dist/utils/zod-to-json-schema/parsers/date.d.cts +17 -0
  387. package/dist/utils/zod-to-json-schema/parsers/date.d.cts.map +1 -0
  388. package/dist/utils/zod-to-json-schema/parsers/date.d.ts +17 -0
  389. package/dist/utils/zod-to-json-schema/parsers/date.d.ts.map +1 -0
  390. package/dist/utils/zod-to-json-schema/parsers/date.js +39 -0
  391. package/dist/utils/zod-to-json-schema/parsers/date.js.map +1 -0
  392. package/dist/utils/zod-to-json-schema/parsers/default.cjs +13 -0
  393. package/dist/utils/zod-to-json-schema/parsers/default.cjs.map +1 -0
  394. package/dist/utils/zod-to-json-schema/parsers/default.js +13 -0
  395. package/dist/utils/zod-to-json-schema/parsers/default.js.map +1 -0
  396. package/dist/utils/zod-to-json-schema/parsers/effects.cjs +11 -0
  397. package/dist/utils/zod-to-json-schema/parsers/effects.cjs.map +1 -0
  398. package/dist/utils/zod-to-json-schema/parsers/effects.js +11 -0
  399. package/dist/utils/zod-to-json-schema/parsers/effects.js.map +1 -0
  400. package/dist/utils/zod-to-json-schema/parsers/enum.cjs +12 -0
  401. package/dist/utils/zod-to-json-schema/parsers/enum.cjs.map +1 -0
  402. package/dist/utils/zod-to-json-schema/parsers/enum.d.cts +8 -0
  403. package/dist/utils/zod-to-json-schema/parsers/enum.d.cts.map +1 -0
  404. package/dist/utils/zod-to-json-schema/parsers/enum.d.ts +10 -0
  405. package/dist/utils/zod-to-json-schema/parsers/enum.d.ts.map +1 -0
  406. package/dist/utils/zod-to-json-schema/parsers/enum.js +11 -0
  407. package/dist/utils/zod-to-json-schema/parsers/enum.js.map +1 -0
  408. package/dist/utils/zod-to-json-schema/parsers/intersection.cjs +47 -0
  409. package/dist/utils/zod-to-json-schema/parsers/intersection.cjs.map +1 -0
  410. package/dist/utils/zod-to-json-schema/parsers/intersection.d.cts +10 -0
  411. package/dist/utils/zod-to-json-schema/parsers/intersection.d.cts.map +1 -0
  412. package/dist/utils/zod-to-json-schema/parsers/intersection.d.ts +11 -0
  413. package/dist/utils/zod-to-json-schema/parsers/intersection.d.ts.map +1 -0
  414. package/dist/utils/zod-to-json-schema/parsers/intersection.js +47 -0
  415. package/dist/utils/zod-to-json-schema/parsers/intersection.js.map +1 -0
  416. package/dist/utils/zod-to-json-schema/parsers/literal.cjs +18 -0
  417. package/dist/utils/zod-to-json-schema/parsers/literal.cjs.map +1 -0
  418. package/dist/utils/zod-to-json-schema/parsers/literal.d.cts +11 -0
  419. package/dist/utils/zod-to-json-schema/parsers/literal.d.cts.map +1 -0
  420. package/dist/utils/zod-to-json-schema/parsers/literal.d.ts +12 -0
  421. package/dist/utils/zod-to-json-schema/parsers/literal.d.ts.map +1 -0
  422. package/dist/utils/zod-to-json-schema/parsers/literal.js +17 -0
  423. package/dist/utils/zod-to-json-schema/parsers/literal.js.map +1 -0
  424. package/dist/utils/zod-to-json-schema/parsers/map.cjs +40 -0
  425. package/dist/utils/zod-to-json-schema/parsers/map.cjs.map +1 -0
  426. package/dist/utils/zod-to-json-schema/parsers/map.d.cts +17 -0
  427. package/dist/utils/zod-to-json-schema/parsers/map.d.cts.map +1 -0
  428. package/dist/utils/zod-to-json-schema/parsers/map.d.ts +17 -0
  429. package/dist/utils/zod-to-json-schema/parsers/map.d.ts.map +1 -0
  430. package/dist/utils/zod-to-json-schema/parsers/map.js +40 -0
  431. package/dist/utils/zod-to-json-schema/parsers/map.js.map +1 -0
  432. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.cjs +18 -0
  433. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.cjs.map +1 -0
  434. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.d.cts +8 -0
  435. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.d.cts.map +1 -0
  436. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.d.ts +10 -0
  437. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.d.ts.map +1 -0
  438. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.js +17 -0
  439. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.js.map +1 -0
  440. package/dist/utils/zod-to-json-schema/parsers/never.cjs +13 -0
  441. package/dist/utils/zod-to-json-schema/parsers/never.cjs.map +1 -0
  442. package/dist/utils/zod-to-json-schema/parsers/never.d.cts +9 -0
  443. package/dist/utils/zod-to-json-schema/parsers/never.d.cts.map +1 -0
  444. package/dist/utils/zod-to-json-schema/parsers/never.d.ts +9 -0
  445. package/dist/utils/zod-to-json-schema/parsers/never.d.ts.map +1 -0
  446. package/dist/utils/zod-to-json-schema/parsers/never.js +13 -0
  447. package/dist/utils/zod-to-json-schema/parsers/never.js.map +1 -0
  448. package/dist/utils/zod-to-json-schema/parsers/null.cjs +12 -0
  449. package/dist/utils/zod-to-json-schema/parsers/null.cjs.map +1 -0
  450. package/dist/utils/zod-to-json-schema/parsers/null.d.cts +7 -0
  451. package/dist/utils/zod-to-json-schema/parsers/null.d.cts.map +1 -0
  452. package/dist/utils/zod-to-json-schema/parsers/null.d.ts +7 -0
  453. package/dist/utils/zod-to-json-schema/parsers/null.d.ts.map +1 -0
  454. package/dist/utils/zod-to-json-schema/parsers/null.js +11 -0
  455. package/dist/utils/zod-to-json-schema/parsers/null.js.map +1 -0
  456. package/dist/utils/zod-to-json-schema/parsers/nullable.cjs +46 -0
  457. package/dist/utils/zod-to-json-schema/parsers/nullable.cjs.map +1 -0
  458. package/dist/utils/zod-to-json-schema/parsers/nullable.d.cts +12 -0
  459. package/dist/utils/zod-to-json-schema/parsers/nullable.d.cts.map +1 -0
  460. package/dist/utils/zod-to-json-schema/parsers/nullable.d.ts +13 -0
  461. package/dist/utils/zod-to-json-schema/parsers/nullable.d.ts.map +1 -0
  462. package/dist/utils/zod-to-json-schema/parsers/nullable.js +46 -0
  463. package/dist/utils/zod-to-json-schema/parsers/nullable.js.map +1 -0
  464. package/dist/utils/zod-to-json-schema/parsers/number.cjs +37 -0
  465. package/dist/utils/zod-to-json-schema/parsers/number.cjs.map +1 -0
  466. package/dist/utils/zod-to-json-schema/parsers/number.d.cts +15 -0
  467. package/dist/utils/zod-to-json-schema/parsers/number.d.cts.map +1 -0
  468. package/dist/utils/zod-to-json-schema/parsers/number.d.ts +16 -0
  469. package/dist/utils/zod-to-json-schema/parsers/number.d.ts.map +1 -0
  470. package/dist/utils/zod-to-json-schema/parsers/number.js +37 -0
  471. package/dist/utils/zod-to-json-schema/parsers/number.js.map +1 -0
  472. package/dist/utils/zod-to-json-schema/parsers/object.cjs +64 -0
  473. package/dist/utils/zod-to-json-schema/parsers/object.cjs.map +1 -0
  474. package/dist/utils/zod-to-json-schema/parsers/object.d.cts +12 -0
  475. package/dist/utils/zod-to-json-schema/parsers/object.d.cts.map +1 -0
  476. package/dist/utils/zod-to-json-schema/parsers/object.d.ts +13 -0
  477. package/dist/utils/zod-to-json-schema/parsers/object.d.ts.map +1 -0
  478. package/dist/utils/zod-to-json-schema/parsers/object.js +64 -0
  479. package/dist/utils/zod-to-json-schema/parsers/object.js.map +1 -0
  480. package/dist/utils/zod-to-json-schema/parsers/optional.cjs +20 -0
  481. package/dist/utils/zod-to-json-schema/parsers/optional.cjs.map +1 -0
  482. package/dist/utils/zod-to-json-schema/parsers/optional.js +20 -0
  483. package/dist/utils/zod-to-json-schema/parsers/optional.js.map +1 -0
  484. package/dist/utils/zod-to-json-schema/parsers/pipeline.cjs +28 -0
  485. package/dist/utils/zod-to-json-schema/parsers/pipeline.cjs.map +1 -0
  486. package/dist/utils/zod-to-json-schema/parsers/pipeline.js +28 -0
  487. package/dist/utils/zod-to-json-schema/parsers/pipeline.js.map +1 -0
  488. package/dist/utils/zod-to-json-schema/parsers/promise.cjs +10 -0
  489. package/dist/utils/zod-to-json-schema/parsers/promise.cjs.map +1 -0
  490. package/dist/utils/zod-to-json-schema/parsers/promise.js +10 -0
  491. package/dist/utils/zod-to-json-schema/parsers/promise.js.map +1 -0
  492. package/dist/utils/zod-to-json-schema/parsers/readonly.cjs +10 -0
  493. package/dist/utils/zod-to-json-schema/parsers/readonly.cjs.map +1 -0
  494. package/dist/utils/zod-to-json-schema/parsers/readonly.js +10 -0
  495. package/dist/utils/zod-to-json-schema/parsers/readonly.js.map +1 -0
  496. package/dist/utils/zod-to-json-schema/parsers/record.cjs +57 -0
  497. package/dist/utils/zod-to-json-schema/parsers/record.cjs.map +1 -0
  498. package/dist/utils/zod-to-json-schema/parsers/record.d.cts +14 -0
  499. package/dist/utils/zod-to-json-schema/parsers/record.d.cts.map +1 -0
  500. package/dist/utils/zod-to-json-schema/parsers/record.d.ts +15 -0
  501. package/dist/utils/zod-to-json-schema/parsers/record.d.ts.map +1 -0
  502. package/dist/utils/zod-to-json-schema/parsers/record.js +56 -0
  503. package/dist/utils/zod-to-json-schema/parsers/record.js.map +1 -0
  504. package/dist/utils/zod-to-json-schema/parsers/set.cjs +22 -0
  505. package/dist/utils/zod-to-json-schema/parsers/set.cjs.map +1 -0
  506. package/dist/utils/zod-to-json-schema/parsers/set.d.cts +15 -0
  507. package/dist/utils/zod-to-json-schema/parsers/set.d.cts.map +1 -0
  508. package/dist/utils/zod-to-json-schema/parsers/set.d.ts +16 -0
  509. package/dist/utils/zod-to-json-schema/parsers/set.d.ts.map +1 -0
  510. package/dist/utils/zod-to-json-schema/parsers/set.js +22 -0
  511. package/dist/utils/zod-to-json-schema/parsers/set.js.map +1 -0
  512. package/dist/utils/zod-to-json-schema/parsers/string.cjs +255 -0
  513. package/dist/utils/zod-to-json-schema/parsers/string.cjs.map +1 -0
  514. package/dist/utils/zod-to-json-schema/parsers/string.d.cts +28 -0
  515. package/dist/utils/zod-to-json-schema/parsers/string.d.cts.map +1 -0
  516. package/dist/utils/zod-to-json-schema/parsers/string.d.ts +29 -0
  517. package/dist/utils/zod-to-json-schema/parsers/string.d.ts.map +1 -0
  518. package/dist/utils/zod-to-json-schema/parsers/string.js +254 -0
  519. package/dist/utils/zod-to-json-schema/parsers/string.js.map +1 -0
  520. package/dist/utils/zod-to-json-schema/parsers/tuple.cjs +38 -0
  521. package/dist/utils/zod-to-json-schema/parsers/tuple.cjs.map +1 -0
  522. package/dist/utils/zod-to-json-schema/parsers/tuple.d.cts +15 -0
  523. package/dist/utils/zod-to-json-schema/parsers/tuple.d.cts.map +1 -0
  524. package/dist/utils/zod-to-json-schema/parsers/tuple.d.ts +16 -0
  525. package/dist/utils/zod-to-json-schema/parsers/tuple.d.ts.map +1 -0
  526. package/dist/utils/zod-to-json-schema/parsers/tuple.js +38 -0
  527. package/dist/utils/zod-to-json-schema/parsers/tuple.js.map +1 -0
  528. package/dist/utils/zod-to-json-schema/parsers/undefined.cjs +10 -0
  529. package/dist/utils/zod-to-json-schema/parsers/undefined.cjs.map +1 -0
  530. package/dist/utils/zod-to-json-schema/parsers/undefined.d.cts +9 -0
  531. package/dist/utils/zod-to-json-schema/parsers/undefined.d.cts.map +1 -0
  532. package/dist/utils/zod-to-json-schema/parsers/undefined.d.ts +9 -0
  533. package/dist/utils/zod-to-json-schema/parsers/undefined.d.ts.map +1 -0
  534. package/dist/utils/zod-to-json-schema/parsers/undefined.js +10 -0
  535. package/dist/utils/zod-to-json-schema/parsers/undefined.js.map +1 -0
  536. package/dist/utils/zod-to-json-schema/parsers/union.cjs +67 -0
  537. package/dist/utils/zod-to-json-schema/parsers/union.cjs.map +1 -0
  538. package/dist/utils/zod-to-json-schema/parsers/union.d.cts +24 -0
  539. package/dist/utils/zod-to-json-schema/parsers/union.d.cts.map +1 -0
  540. package/dist/utils/zod-to-json-schema/parsers/union.d.ts +25 -0
  541. package/dist/utils/zod-to-json-schema/parsers/union.d.ts.map +1 -0
  542. package/dist/utils/zod-to-json-schema/parsers/union.js +66 -0
  543. package/dist/utils/zod-to-json-schema/parsers/union.js.map +1 -0
  544. package/dist/utils/zod-to-json-schema/parsers/unknown.cjs +10 -0
  545. package/dist/utils/zod-to-json-schema/parsers/unknown.cjs.map +1 -0
  546. package/dist/utils/zod-to-json-schema/parsers/unknown.d.cts +7 -0
  547. package/dist/utils/zod-to-json-schema/parsers/unknown.d.cts.map +1 -0
  548. package/dist/utils/zod-to-json-schema/parsers/unknown.d.ts +7 -0
  549. package/dist/utils/zod-to-json-schema/parsers/unknown.d.ts.map +1 -0
  550. package/dist/utils/zod-to-json-schema/parsers/unknown.js +10 -0
  551. package/dist/utils/zod-to-json-schema/parsers/unknown.js.map +1 -0
  552. package/dist/utils/zod-to-json-schema/selectParser.cjs +81 -0
  553. package/dist/utils/zod-to-json-schema/selectParser.cjs.map +1 -0
  554. package/dist/utils/zod-to-json-schema/selectParser.js +80 -0
  555. package/dist/utils/zod-to-json-schema/selectParser.js.map +1 -0
  556. package/dist/utils/zod-to-json-schema/zodToJsonSchema.cjs +70 -0
  557. package/dist/utils/zod-to-json-schema/zodToJsonSchema.cjs.map +1 -0
  558. package/dist/utils/zod-to-json-schema/zodToJsonSchema.js +70 -0
  559. package/dist/utils/zod-to-json-schema/zodToJsonSchema.js.map +1 -0
  560. package/package.json +7 -36
  561. package/dist/utils/js-sha1/hash.cjs +0 -291
  562. package/dist/utils/js-sha1/hash.cjs.map +0 -1
  563. package/dist/utils/js-sha1/hash.d.cts +0 -9
  564. package/dist/utils/js-sha1/hash.d.cts.map +0 -1
  565. package/dist/utils/js-sha1/hash.d.ts +0 -9
  566. package/dist/utils/js-sha1/hash.d.ts.map +0 -1
  567. package/dist/utils/js-sha1/hash.js +0 -284
  568. package/dist/utils/js-sha1/hash.js.map +0 -1
  569. package/dist/utils/testing/index.d.cts.map +0 -1
  570. package/dist/utils/testing/index.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"json_schema.cjs","names":["schema: InteropZodType | JSONSchema","isZodSchemaV4","interopZodTransformInputSchema","isZodObjectV4","interopZodObjectStrict","isZodSchemaV3","schema: unknown"],"sources":["../../src/utils/json_schema.ts"],"sourcesContent":["import { toJSONSchema } from \"zod/v4/core\";\nimport {\n type JsonSchema7Type as JSONSchema,\n zodToJsonSchema,\n} from \"zod-to-json-schema\";\nimport { dereference, type Schema } from \"@cfworker/json-schema\";\nimport {\n isZodSchemaV3,\n isZodSchemaV4,\n InteropZodType,\n interopZodObjectStrict,\n isZodObjectV4,\n ZodObjectV4,\n interopZodTransformInputSchema,\n} from \"./types/zod.js\";\n\nexport { deepCompareStrict, Validator } from \"@cfworker/json-schema\";\n\n/**\n * Converts a Zod schema or JSON schema to a JSON schema.\n * @param schema - The schema to convert.\n * @returns The converted schema.\n */\nexport function toJsonSchema(schema: InteropZodType | JSONSchema): JSONSchema {\n if (isZodSchemaV4(schema)) {\n const inputSchema = interopZodTransformInputSchema(schema, true);\n if (isZodObjectV4(inputSchema)) {\n const strictSchema = interopZodObjectStrict(\n inputSchema,\n true\n ) as ZodObjectV4;\n return toJSONSchema(strictSchema);\n } else {\n return toJSONSchema(schema);\n }\n }\n if (isZodSchemaV3(schema)) {\n return zodToJsonSchema(schema);\n }\n return schema as JSONSchema;\n}\n\n/**\n * Validates if a JSON schema validates only strings. May return false negatives in some edge cases\n * (like recursive or unresolvable refs).\n *\n * @param schema - The schema to validate.\n * @returns `true` if the schema validates only strings, `false` otherwise.\n */\nexport function validatesOnlyStrings(schema: unknown): boolean {\n // Null, undefined, or empty schema\n if (\n !schema ||\n typeof schema !== \"object\" ||\n Object.keys(schema).length === 0 ||\n Array.isArray(schema)\n ) {\n return false; // Validates anything, not just strings\n }\n\n // Explicit type constraint\n if (\"type\" in schema) {\n if (typeof schema.type === \"string\") {\n return schema.type === \"string\";\n }\n\n if (Array.isArray(schema.type)) {\n // not sure why someone would do `\"type\": [\"string\"]` or especially `\"type\": [\"string\",\n // \"string\", \"string\", ...]` but we're not here to judge\n return schema.type.every((t) => t === \"string\");\n }\n return false; // Invalid or non-string type\n }\n\n // Enum with only string values\n if (\"enum\" in schema) {\n return (\n Array.isArray(schema.enum) &&\n schema.enum.length > 0 &&\n schema.enum.every((val) => typeof val === \"string\")\n );\n }\n\n // String constant\n if (\"const\" in schema) {\n return typeof schema.const === \"string\";\n }\n\n // Schema combinations\n if (\"allOf\" in schema && Array.isArray(schema.allOf)) {\n // If any subschema validates only strings, then the overall schema validates only strings\n return schema.allOf.some((subschema) => validatesOnlyStrings(subschema));\n }\n\n if (\n (\"anyOf\" in schema && Array.isArray(schema.anyOf)) ||\n (\"oneOf\" in schema && Array.isArray(schema.oneOf))\n ) {\n const subschemas = (\n \"anyOf\" in schema ? schema.anyOf : schema.oneOf\n ) as unknown[];\n\n // All subschemas must validate only strings\n return (\n subschemas.length > 0 &&\n subschemas.every((subschema) => validatesOnlyStrings(subschema))\n );\n }\n\n // We're not going to try on this one, it's too complex - we just assume if it has a \"not\" key and hasn't matched one of the above checks, it's not a string schema.\n if (\"not\" in schema) {\n return false; // The not case can validate non-strings\n }\n\n if (\"$ref\" in schema && typeof schema.$ref === \"string\") {\n const ref = schema.$ref as string;\n const resolved = dereference(schema as Schema);\n if (resolved[ref]) {\n return validatesOnlyStrings(resolved[ref]);\n }\n return false;\n }\n\n // ignore recursive refs and other cases where type is omitted for now\n // ignore other cases for now where type is omitted\n\n return false;\n}\n\n// Re-export of the types used throughout langchain for json schema serialization.\n// The plan is to eventually nix zod-to-json-schema altogether in place for\n// zod v4 / a more standardized way of serializing validated inputs, so its re-exported\n// here to remove the dependency on zod-to-json-schema in downstream packages until\n// a determination is made.\n\nexport {\n type JsonSchema7Type,\n type JsonSchema7Type as JSONSchema,\n type JsonSchema7ArrayType,\n type JsonSchema7ObjectType,\n type JsonSchema7StringType,\n type JsonSchema7NumberType,\n type JsonSchema7NullableType,\n} from \"zod-to-json-schema\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,aAAaA,QAAiD;AAC5E,KAAIC,0BAAc,OAAO,EAAE;EACzB,MAAM,cAAcC,2CAA+B,QAAQ,KAAK;AAChE,MAAIC,0BAAc,YAAY,EAAE;GAC9B,MAAM,eAAeC,mCACnB,aACA,KACD;AACD,wCAAoB,aAAa;EAClC,MACC,sCAAoB,OAAO;CAE9B;AACD,KAAIC,0BAAc,OAAO,CACvB,gDAAuB,OAAO;AAEhC,QAAO;AACR;;;;;;;;AASD,SAAgB,qBAAqBC,QAA0B;AAE7D,KACE,CAAC,UACD,OAAO,WAAW,YAClB,OAAO,KAAK,OAAO,CAAC,WAAW,KAC/B,MAAM,QAAQ,OAAO,CAErB,QAAO;AAIT,KAAI,UAAU,QAAQ;AACpB,MAAI,OAAO,OAAO,SAAS,SACzB,QAAO,OAAO,SAAS;AAGzB,MAAI,MAAM,QAAQ,OAAO,KAAK,CAG5B,QAAO,OAAO,KAAK,MAAM,CAAC,MAAM,MAAM,SAAS;AAEjD,SAAO;CACR;AAGD,KAAI,UAAU,OACZ,QACE,MAAM,QAAQ,OAAO,KAAK,IAC1B,OAAO,KAAK,SAAS,KACrB,OAAO,KAAK,MAAM,CAAC,QAAQ,OAAO,QAAQ,SAAS;AAKvD,KAAI,WAAW,OACb,QAAO,OAAO,OAAO,UAAU;AAIjC,KAAI,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,CAElD,QAAO,OAAO,MAAM,KAAK,CAAC,cAAc,qBAAqB,UAAU,CAAC;AAG1E,KACG,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,IAChD,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,EACjD;EACA,MAAM,aACJ,WAAW,SAAS,OAAO,QAAQ,OAAO;AAI5C,SACE,WAAW,SAAS,KACpB,WAAW,MAAM,CAAC,cAAc,qBAAqB,UAAU,CAAC;CAEnE;AAGD,KAAI,SAAS,OACX,QAAO;AAGT,KAAI,UAAU,UAAU,OAAO,OAAO,SAAS,UAAU;EACvD,MAAM,MAAM,OAAO;EACnB,MAAM,mDAAuB,OAAiB;AAC9C,MAAI,SAAS,KACX,QAAO,qBAAqB,SAAS,KAAK;AAE5C,SAAO;CACR;AAKD,QAAO;AACR"}
1
+ {"version":3,"file":"json_schema.cjs","names":["schema: InteropZodType | JSONSchema","isZodSchemaV4","interopZodTransformInputSchema","isZodObjectV4","interopZodObjectStrict","isZodSchemaV3","zodToJsonSchema","schema: unknown"],"sources":["../../src/utils/json_schema.ts"],"sourcesContent":["import { toJSONSchema } from \"zod/v4/core\";\nimport { dereference, type Schema } from \"@cfworker/json-schema\";\nimport {\n isZodSchemaV3,\n isZodSchemaV4,\n InteropZodType,\n interopZodObjectStrict,\n isZodObjectV4,\n ZodObjectV4,\n interopZodTransformInputSchema,\n} from \"./types/zod.js\";\nimport {\n type JsonSchema7Type as JSONSchema,\n zodToJsonSchema,\n} from \"./zod-to-json-schema/index.js\";\n\nexport { deepCompareStrict, Validator } from \"@cfworker/json-schema\";\n\n/**\n * Converts a Zod schema or JSON schema to a JSON schema.\n * @param schema - The schema to convert.\n * @returns The converted schema.\n */\nexport function toJsonSchema(schema: InteropZodType | JSONSchema): JSONSchema {\n if (isZodSchemaV4(schema)) {\n const inputSchema = interopZodTransformInputSchema(schema, true);\n if (isZodObjectV4(inputSchema)) {\n const strictSchema = interopZodObjectStrict(\n inputSchema,\n true\n ) as ZodObjectV4;\n return toJSONSchema(strictSchema);\n } else {\n return toJSONSchema(schema);\n }\n }\n if (isZodSchemaV3(schema)) {\n return zodToJsonSchema(schema);\n }\n return schema as JSONSchema;\n}\n\n/**\n * Validates if a JSON schema validates only strings. May return false negatives in some edge cases\n * (like recursive or unresolvable refs).\n *\n * @param schema - The schema to validate.\n * @returns `true` if the schema validates only strings, `false` otherwise.\n */\nexport function validatesOnlyStrings(schema: unknown): boolean {\n // Null, undefined, or empty schema\n if (\n !schema ||\n typeof schema !== \"object\" ||\n Object.keys(schema).length === 0 ||\n Array.isArray(schema)\n ) {\n return false; // Validates anything, not just strings\n }\n\n // Explicit type constraint\n if (\"type\" in schema) {\n if (typeof schema.type === \"string\") {\n return schema.type === \"string\";\n }\n\n if (Array.isArray(schema.type)) {\n // not sure why someone would do `\"type\": [\"string\"]` or especially `\"type\": [\"string\",\n // \"string\", \"string\", ...]` but we're not here to judge\n return schema.type.every((t) => t === \"string\");\n }\n return false; // Invalid or non-string type\n }\n\n // Enum with only string values\n if (\"enum\" in schema) {\n return (\n Array.isArray(schema.enum) &&\n schema.enum.length > 0 &&\n schema.enum.every((val) => typeof val === \"string\")\n );\n }\n\n // String constant\n if (\"const\" in schema) {\n return typeof schema.const === \"string\";\n }\n\n // Schema combinations\n if (\"allOf\" in schema && Array.isArray(schema.allOf)) {\n // If any subschema validates only strings, then the overall schema validates only strings\n return schema.allOf.some((subschema) => validatesOnlyStrings(subschema));\n }\n\n if (\n (\"anyOf\" in schema && Array.isArray(schema.anyOf)) ||\n (\"oneOf\" in schema && Array.isArray(schema.oneOf))\n ) {\n const subschemas = (\n \"anyOf\" in schema ? schema.anyOf : schema.oneOf\n ) as unknown[];\n\n // All subschemas must validate only strings\n return (\n subschemas.length > 0 &&\n subschemas.every((subschema) => validatesOnlyStrings(subschema))\n );\n }\n\n // We're not going to try on this one, it's too complex - we just assume if it has a \"not\" key and hasn't matched one of the above checks, it's not a string schema.\n if (\"not\" in schema) {\n return false; // The not case can validate non-strings\n }\n\n if (\"$ref\" in schema && typeof schema.$ref === \"string\") {\n const ref = schema.$ref as string;\n const resolved = dereference(schema as Schema);\n if (resolved[ref]) {\n return validatesOnlyStrings(resolved[ref]);\n }\n return false;\n }\n\n // ignore recursive refs and other cases where type is omitted for now\n // ignore other cases for now where type is omitted\n\n return false;\n}\n\n// Re-export of the types used throughout langchain for json schema serialization.\n// The plan is to eventually nix zod-to-json-schema altogether in place for\n// zod v4 / a more standardized way of serializing validated inputs, so its re-exported\n// here to remove the dependency on zod-to-json-schema in downstream packages until\n// a determination is made.\n\nexport {\n type JsonSchema7Type,\n type JsonSchema7Type as JSONSchema,\n type JsonSchema7ArrayType,\n type JsonSchema7ObjectType,\n type JsonSchema7StringType,\n type JsonSchema7NumberType,\n type JsonSchema7NullableType,\n} from \"./zod-to-json-schema/index.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,aAAaA,QAAiD;AAC5E,KAAIC,0BAAc,OAAO,EAAE;EACzB,MAAM,cAAcC,2CAA+B,QAAQ,KAAK;AAChE,MAAIC,0BAAc,YAAY,EAAE;GAC9B,MAAM,eAAeC,mCACnB,aACA,KACD;AACD,wCAAoB,aAAa;EAClC,MACC,sCAAoB,OAAO;CAE9B;AACD,KAAIC,0BAAc,OAAO,CACvB,QAAOC,wCAAgB,OAAO;AAEhC,QAAO;AACR;;;;;;;;AASD,SAAgB,qBAAqBC,QAA0B;AAE7D,KACE,CAAC,UACD,OAAO,WAAW,YAClB,OAAO,KAAK,OAAO,CAAC,WAAW,KAC/B,MAAM,QAAQ,OAAO,CAErB,QAAO;AAIT,KAAI,UAAU,QAAQ;AACpB,MAAI,OAAO,OAAO,SAAS,SACzB,QAAO,OAAO,SAAS;AAGzB,MAAI,MAAM,QAAQ,OAAO,KAAK,CAG5B,QAAO,OAAO,KAAK,MAAM,CAAC,MAAM,MAAM,SAAS;AAEjD,SAAO;CACR;AAGD,KAAI,UAAU,OACZ,QACE,MAAM,QAAQ,OAAO,KAAK,IAC1B,OAAO,KAAK,SAAS,KACrB,OAAO,KAAK,MAAM,CAAC,QAAQ,OAAO,QAAQ,SAAS;AAKvD,KAAI,WAAW,OACb,QAAO,OAAO,OAAO,UAAU;AAIjC,KAAI,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,CAElD,QAAO,OAAO,MAAM,KAAK,CAAC,cAAc,qBAAqB,UAAU,CAAC;AAG1E,KACG,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,IAChD,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,EACjD;EACA,MAAM,aACJ,WAAW,SAAS,OAAO,QAAQ,OAAO;AAI5C,SACE,WAAW,SAAS,KACpB,WAAW,MAAM,CAAC,cAAc,qBAAqB,UAAU,CAAC;CAEnE;AAGD,KAAI,SAAS,OACX,QAAO;AAGT,KAAI,UAAU,UAAU,OAAO,OAAO,SAAS,UAAU;EACvD,MAAM,MAAM,OAAO;EACnB,MAAM,mDAAuB,OAAiB;AAC9C,MAAI,SAAS,KACX,QAAO,qBAAqB,SAAS,KAAK;AAE5C,SAAO;CACR;AAKD,QAAO;AACR"}
@@ -1,15 +1,19 @@
1
1
  import { InteropZodType } from "./types/zod.cjs";
2
- import { JsonSchema7ArrayType, JsonSchema7NullableType, JsonSchema7NumberType, JsonSchema7ObjectType, JsonSchema7StringType, JsonSchema7Type, JsonSchema7Type as JSONSchema, JsonSchema7Type as JsonSchema7Type$1 } from "zod-to-json-schema";
2
+ import { JsonSchema7ArrayType } from "./zod-to-json-schema/parsers/array.cjs";
3
+ import { JsonSchema7NumberType } from "./zod-to-json-schema/parsers/number.cjs";
4
+ import { JsonSchema7StringType } from "./zod-to-json-schema/parsers/string.cjs";
5
+ import { JsonSchema7NullableType } from "./zod-to-json-schema/parsers/nullable.cjs";
6
+ import { JsonSchema7ObjectType } from "./zod-to-json-schema/parsers/object.cjs";
7
+ import { JsonSchema7Type } from "./zod-to-json-schema/parseTypes.cjs";
3
8
  import { Validator, deepCompareStrict } from "@cfworker/json-schema";
4
9
 
5
10
  //#region src/utils/json_schema.d.ts
6
-
7
11
  /**
8
12
  * Converts a Zod schema or JSON schema to a JSON schema.
9
13
  * @param schema - The schema to convert.
10
14
  * @returns The converted schema.
11
15
  */
12
- declare function toJsonSchema(schema: InteropZodType | JsonSchema7Type$1): JsonSchema7Type$1;
16
+ declare function toJsonSchema(schema: InteropZodType | JsonSchema7Type): JsonSchema7Type;
13
17
  /**
14
18
  * Validates if a JSON schema validates only strings. May return false negatives in some edge cases
15
19
  * (like recursive or unresolvable refs).
@@ -24,5 +28,5 @@ declare function validatesOnlyStrings(schema: unknown): boolean;
24
28
  // here to remove the dependency on zod-to-json-schema in downstream packages until
25
29
  // a determination is made.
26
30
  //#endregion
27
- export { type JSONSchema, type JsonSchema7ArrayType, type JsonSchema7NullableType, type JsonSchema7NumberType, type JsonSchema7ObjectType, type JsonSchema7StringType, type JsonSchema7Type, Validator, deepCompareStrict, toJsonSchema, validatesOnlyStrings };
31
+ export { type JsonSchema7Type as JSONSchema, type JsonSchema7ArrayType, type JsonSchema7NullableType, type JsonSchema7NumberType, type JsonSchema7ObjectType, type JsonSchema7StringType, type JsonSchema7Type, Validator, deepCompareStrict, toJsonSchema, validatesOnlyStrings };
28
32
  //# sourceMappingURL=json_schema.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json_schema.d.cts","names":["JsonSchema7Type","JSONSchema","InteropZodType","deepCompareStrict","Validator","toJsonSchema","validatesOnlyStrings","JsonSchema7ArrayType","JsonSchema7ObjectType","JsonSchema7StringType","JsonSchema7NumberType","JsonSchema7NullableType"],"sources":["../../src/utils/json_schema.d.ts"],"sourcesContent":["import { type JsonSchema7Type as JSONSchema } from \"zod-to-json-schema\";\nimport { InteropZodType } from \"./types/zod.js\";\nexport { deepCompareStrict, Validator } from \"@cfworker/json-schema\";\n/**\n * Converts a Zod schema or JSON schema to a JSON schema.\n * @param schema - The schema to convert.\n * @returns The converted schema.\n */\nexport declare function toJsonSchema(schema: InteropZodType | JSONSchema): JSONSchema;\n/**\n * Validates if a JSON schema validates only strings. May return false negatives in some edge cases\n * (like recursive or unresolvable refs).\n *\n * @param schema - The schema to validate.\n * @returns `true` if the schema validates only strings, `false` otherwise.\n */\nexport declare function validatesOnlyStrings(schema: unknown): boolean;\n// Re-export of the types used throughout langchain for json schema serialization.\n// The plan is to eventually nix zod-to-json-schema altogether in place for\n// zod v4 / a more standardized way of serializing validated inputs, so its re-exported\n// here to remove the dependency on zod-to-json-schema in downstream packages until\n// a determination is made.\nexport { type JsonSchema7Type, type JsonSchema7Type as JSONSchema, type JsonSchema7ArrayType, type JsonSchema7ObjectType, type JsonSchema7StringType, type JsonSchema7NumberType, type JsonSchema7NullableType, } from \"zod-to-json-schema\";\n"],"mappings":";;;;;;;;AAQA;;;AAA8DC,iBAAtCI,YAAAA,CAAsCJ,MAAAA,EAAjBC,cAAiBD,GAAAA,iBAAAA,CAAAA,EAAaA,iBAAbA;;AAAuB;AAQrF;;;;;iBAAwBK,oBAAAA"}
1
+ {"version":3,"file":"json_schema.d.cts","names":["InteropZodType","JsonSchema7Type","JSONSchema","deepCompareStrict","Validator","toJsonSchema","validatesOnlyStrings","JsonSchema7ArrayType","JsonSchema7ObjectType","JsonSchema7StringType","JsonSchema7NumberType","JsonSchema7NullableType"],"sources":["../../src/utils/json_schema.d.ts"],"sourcesContent":["import { InteropZodType } from \"./types/zod.js\";\nimport { type JsonSchema7Type as JSONSchema } from \"./zod-to-json-schema/index.js\";\nexport { deepCompareStrict, Validator } from \"@cfworker/json-schema\";\n/**\n * Converts a Zod schema or JSON schema to a JSON schema.\n * @param schema - The schema to convert.\n * @returns The converted schema.\n */\nexport declare function toJsonSchema(schema: InteropZodType | JSONSchema): JSONSchema;\n/**\n * Validates if a JSON schema validates only strings. May return false negatives in some edge cases\n * (like recursive or unresolvable refs).\n *\n * @param schema - The schema to validate.\n * @returns `true` if the schema validates only strings, `false` otherwise.\n */\nexport declare function validatesOnlyStrings(schema: unknown): boolean;\n// Re-export of the types used throughout langchain for json schema serialization.\n// The plan is to eventually nix zod-to-json-schema altogether in place for\n// zod v4 / a more standardized way of serializing validated inputs, so its re-exported\n// here to remove the dependency on zod-to-json-schema in downstream packages until\n// a determination is made.\nexport { type JsonSchema7Type, type JsonSchema7Type as JSONSchema, type JsonSchema7ArrayType, type JsonSchema7ObjectType, type JsonSchema7StringType, type JsonSchema7NumberType, type JsonSchema7NullableType, } from \"./zod-to-json-schema/index.js\";\n"],"mappings":";;;;;;;;;;;;;;;iBAQwBK,YAAAA,SAAqBL,iBAAiBE,kBAAaA;;AAA3E;;;;;AAAqF;AAQ7DI,iBAAAA,oBAAAA,CAAoB,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA"}
@@ -1,15 +1,19 @@
1
1
  import { InteropZodType } from "./types/zod.js";
2
- import { JsonSchema7ArrayType, JsonSchema7NullableType, JsonSchema7NumberType, JsonSchema7ObjectType, JsonSchema7StringType, JsonSchema7Type, JsonSchema7Type as JSONSchema, JsonSchema7Type as JsonSchema7Type$1 } from "zod-to-json-schema";
2
+ import { JsonSchema7ArrayType } from "./zod-to-json-schema/parsers/array.js";
3
+ import { JsonSchema7NumberType } from "./zod-to-json-schema/parsers/number.js";
4
+ import { JsonSchema7StringType } from "./zod-to-json-schema/parsers/string.js";
5
+ import { JsonSchema7NullableType } from "./zod-to-json-schema/parsers/nullable.js";
6
+ import { JsonSchema7ObjectType } from "./zod-to-json-schema/parsers/object.js";
7
+ import { JsonSchema7Type } from "./zod-to-json-schema/parseTypes.js";
3
8
  import { Validator, deepCompareStrict } from "@cfworker/json-schema";
4
9
 
5
10
  //#region src/utils/json_schema.d.ts
6
-
7
11
  /**
8
12
  * Converts a Zod schema or JSON schema to a JSON schema.
9
13
  * @param schema - The schema to convert.
10
14
  * @returns The converted schema.
11
15
  */
12
- declare function toJsonSchema(schema: InteropZodType | JsonSchema7Type$1): JsonSchema7Type$1;
16
+ declare function toJsonSchema(schema: InteropZodType | JsonSchema7Type): JsonSchema7Type;
13
17
  /**
14
18
  * Validates if a JSON schema validates only strings. May return false negatives in some edge cases
15
19
  * (like recursive or unresolvable refs).
@@ -24,5 +28,5 @@ declare function validatesOnlyStrings(schema: unknown): boolean;
24
28
  // here to remove the dependency on zod-to-json-schema in downstream packages until
25
29
  // a determination is made.
26
30
  //#endregion
27
- export { type JSONSchema, type JsonSchema7ArrayType, type JsonSchema7NullableType, type JsonSchema7NumberType, type JsonSchema7ObjectType, type JsonSchema7StringType, type JsonSchema7Type, Validator, deepCompareStrict, toJsonSchema, validatesOnlyStrings };
31
+ export { type JsonSchema7Type as JSONSchema, type JsonSchema7ArrayType, type JsonSchema7NullableType, type JsonSchema7NumberType, type JsonSchema7ObjectType, type JsonSchema7StringType, type JsonSchema7Type, Validator, deepCompareStrict, toJsonSchema, validatesOnlyStrings };
28
32
  //# sourceMappingURL=json_schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json_schema.d.ts","names":["JsonSchema7Type","JSONSchema","InteropZodType","deepCompareStrict","Validator","toJsonSchema","validatesOnlyStrings","JsonSchema7ArrayType","JsonSchema7ObjectType","JsonSchema7StringType","JsonSchema7NumberType","JsonSchema7NullableType"],"sources":["../../src/utils/json_schema.d.ts"],"sourcesContent":["import { type JsonSchema7Type as JSONSchema } from \"zod-to-json-schema\";\nimport { InteropZodType } from \"./types/zod.js\";\nexport { deepCompareStrict, Validator } from \"@cfworker/json-schema\";\n/**\n * Converts a Zod schema or JSON schema to a JSON schema.\n * @param schema - The schema to convert.\n * @returns The converted schema.\n */\nexport declare function toJsonSchema(schema: InteropZodType | JSONSchema): JSONSchema;\n/**\n * Validates if a JSON schema validates only strings. May return false negatives in some edge cases\n * (like recursive or unresolvable refs).\n *\n * @param schema - The schema to validate.\n * @returns `true` if the schema validates only strings, `false` otherwise.\n */\nexport declare function validatesOnlyStrings(schema: unknown): boolean;\n// Re-export of the types used throughout langchain for json schema serialization.\n// The plan is to eventually nix zod-to-json-schema altogether in place for\n// zod v4 / a more standardized way of serializing validated inputs, so its re-exported\n// here to remove the dependency on zod-to-json-schema in downstream packages until\n// a determination is made.\nexport { type JsonSchema7Type, type JsonSchema7Type as JSONSchema, type JsonSchema7ArrayType, type JsonSchema7ObjectType, type JsonSchema7StringType, type JsonSchema7NumberType, type JsonSchema7NullableType, } from \"zod-to-json-schema\";\n"],"mappings":";;;;;;;;AAQA;;;AAA8DC,iBAAtCI,YAAAA,CAAsCJ,MAAAA,EAAjBC,cAAiBD,GAAAA,iBAAAA,CAAAA,EAAaA,iBAAbA;;AAAuB;AAQrF;;;;;iBAAwBK,oBAAAA"}
1
+ {"version":3,"file":"json_schema.d.ts","names":["InteropZodType","JsonSchema7Type","JSONSchema","deepCompareStrict","Validator","toJsonSchema","validatesOnlyStrings","JsonSchema7ArrayType","JsonSchema7ObjectType","JsonSchema7StringType","JsonSchema7NumberType","JsonSchema7NullableType"],"sources":["../../src/utils/json_schema.d.ts"],"sourcesContent":["import { InteropZodType } from \"./types/zod.js\";\nimport { type JsonSchema7Type as JSONSchema } from \"./zod-to-json-schema/index.js\";\nexport { deepCompareStrict, Validator } from \"@cfworker/json-schema\";\n/**\n * Converts a Zod schema or JSON schema to a JSON schema.\n * @param schema - The schema to convert.\n * @returns The converted schema.\n */\nexport declare function toJsonSchema(schema: InteropZodType | JSONSchema): JSONSchema;\n/**\n * Validates if a JSON schema validates only strings. May return false negatives in some edge cases\n * (like recursive or unresolvable refs).\n *\n * @param schema - The schema to validate.\n * @returns `true` if the schema validates only strings, `false` otherwise.\n */\nexport declare function validatesOnlyStrings(schema: unknown): boolean;\n// Re-export of the types used throughout langchain for json schema serialization.\n// The plan is to eventually nix zod-to-json-schema altogether in place for\n// zod v4 / a more standardized way of serializing validated inputs, so its re-exported\n// here to remove the dependency on zod-to-json-schema in downstream packages until\n// a determination is made.\nexport { type JsonSchema7Type, type JsonSchema7Type as JSONSchema, type JsonSchema7ArrayType, type JsonSchema7ObjectType, type JsonSchema7StringType, type JsonSchema7NumberType, type JsonSchema7NullableType, } from \"./zod-to-json-schema/index.js\";\n"],"mappings":";;;;;;;;;;;;;;;iBAQwBK,YAAAA,SAAqBL,iBAAiBE,kBAAaA;;AAA3E;;;;;AAAqF;AAQ7DI,iBAAAA,oBAAAA,CAAoB,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA"}
@@ -1,7 +1,8 @@
1
1
  import { __export } from "../_virtual/rolldown_runtime.js";
2
2
  import { interopZodObjectStrict, interopZodTransformInputSchema, isZodObjectV4, isZodSchemaV3, isZodSchemaV4 } from "./types/zod.js";
3
+ import { zodToJsonSchema } from "./zod-to-json-schema/zodToJsonSchema.js";
4
+ import "./zod-to-json-schema/index.js";
3
5
  import { toJSONSchema } from "zod/v4/core";
4
- import { zodToJsonSchema } from "zod-to-json-schema";
5
6
  import { Validator, deepCompareStrict, dereference } from "@cfworker/json-schema";
6
7
 
7
8
  //#region src/utils/json_schema.ts
@@ -1 +1 @@
1
- {"version":3,"file":"json_schema.js","names":["schema: InteropZodType | JSONSchema","schema: unknown"],"sources":["../../src/utils/json_schema.ts"],"sourcesContent":["import { toJSONSchema } from \"zod/v4/core\";\nimport {\n type JsonSchema7Type as JSONSchema,\n zodToJsonSchema,\n} from \"zod-to-json-schema\";\nimport { dereference, type Schema } from \"@cfworker/json-schema\";\nimport {\n isZodSchemaV3,\n isZodSchemaV4,\n InteropZodType,\n interopZodObjectStrict,\n isZodObjectV4,\n ZodObjectV4,\n interopZodTransformInputSchema,\n} from \"./types/zod.js\";\n\nexport { deepCompareStrict, Validator } from \"@cfworker/json-schema\";\n\n/**\n * Converts a Zod schema or JSON schema to a JSON schema.\n * @param schema - The schema to convert.\n * @returns The converted schema.\n */\nexport function toJsonSchema(schema: InteropZodType | JSONSchema): JSONSchema {\n if (isZodSchemaV4(schema)) {\n const inputSchema = interopZodTransformInputSchema(schema, true);\n if (isZodObjectV4(inputSchema)) {\n const strictSchema = interopZodObjectStrict(\n inputSchema,\n true\n ) as ZodObjectV4;\n return toJSONSchema(strictSchema);\n } else {\n return toJSONSchema(schema);\n }\n }\n if (isZodSchemaV3(schema)) {\n return zodToJsonSchema(schema);\n }\n return schema as JSONSchema;\n}\n\n/**\n * Validates if a JSON schema validates only strings. May return false negatives in some edge cases\n * (like recursive or unresolvable refs).\n *\n * @param schema - The schema to validate.\n * @returns `true` if the schema validates only strings, `false` otherwise.\n */\nexport function validatesOnlyStrings(schema: unknown): boolean {\n // Null, undefined, or empty schema\n if (\n !schema ||\n typeof schema !== \"object\" ||\n Object.keys(schema).length === 0 ||\n Array.isArray(schema)\n ) {\n return false; // Validates anything, not just strings\n }\n\n // Explicit type constraint\n if (\"type\" in schema) {\n if (typeof schema.type === \"string\") {\n return schema.type === \"string\";\n }\n\n if (Array.isArray(schema.type)) {\n // not sure why someone would do `\"type\": [\"string\"]` or especially `\"type\": [\"string\",\n // \"string\", \"string\", ...]` but we're not here to judge\n return schema.type.every((t) => t === \"string\");\n }\n return false; // Invalid or non-string type\n }\n\n // Enum with only string values\n if (\"enum\" in schema) {\n return (\n Array.isArray(schema.enum) &&\n schema.enum.length > 0 &&\n schema.enum.every((val) => typeof val === \"string\")\n );\n }\n\n // String constant\n if (\"const\" in schema) {\n return typeof schema.const === \"string\";\n }\n\n // Schema combinations\n if (\"allOf\" in schema && Array.isArray(schema.allOf)) {\n // If any subschema validates only strings, then the overall schema validates only strings\n return schema.allOf.some((subschema) => validatesOnlyStrings(subschema));\n }\n\n if (\n (\"anyOf\" in schema && Array.isArray(schema.anyOf)) ||\n (\"oneOf\" in schema && Array.isArray(schema.oneOf))\n ) {\n const subschemas = (\n \"anyOf\" in schema ? schema.anyOf : schema.oneOf\n ) as unknown[];\n\n // All subschemas must validate only strings\n return (\n subschemas.length > 0 &&\n subschemas.every((subschema) => validatesOnlyStrings(subschema))\n );\n }\n\n // We're not going to try on this one, it's too complex - we just assume if it has a \"not\" key and hasn't matched one of the above checks, it's not a string schema.\n if (\"not\" in schema) {\n return false; // The not case can validate non-strings\n }\n\n if (\"$ref\" in schema && typeof schema.$ref === \"string\") {\n const ref = schema.$ref as string;\n const resolved = dereference(schema as Schema);\n if (resolved[ref]) {\n return validatesOnlyStrings(resolved[ref]);\n }\n return false;\n }\n\n // ignore recursive refs and other cases where type is omitted for now\n // ignore other cases for now where type is omitted\n\n return false;\n}\n\n// Re-export of the types used throughout langchain for json schema serialization.\n// The plan is to eventually nix zod-to-json-schema altogether in place for\n// zod v4 / a more standardized way of serializing validated inputs, so its re-exported\n// here to remove the dependency on zod-to-json-schema in downstream packages until\n// a determination is made.\n\nexport {\n type JsonSchema7Type,\n type JsonSchema7Type as JSONSchema,\n type JsonSchema7ArrayType,\n type JsonSchema7ObjectType,\n type JsonSchema7StringType,\n type JsonSchema7NumberType,\n type JsonSchema7NullableType,\n} from \"zod-to-json-schema\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,aAAaA,QAAiD;AAC5E,KAAI,cAAc,OAAO,EAAE;EACzB,MAAM,cAAc,+BAA+B,QAAQ,KAAK;AAChE,MAAI,cAAc,YAAY,EAAE;GAC9B,MAAM,eAAe,uBACnB,aACA,KACD;AACD,UAAO,aAAa,aAAa;EAClC,MACC,QAAO,aAAa,OAAO;CAE9B;AACD,KAAI,cAAc,OAAO,CACvB,QAAO,gBAAgB,OAAO;AAEhC,QAAO;AACR;;;;;;;;AASD,SAAgB,qBAAqBC,QAA0B;AAE7D,KACE,CAAC,UACD,OAAO,WAAW,YAClB,OAAO,KAAK,OAAO,CAAC,WAAW,KAC/B,MAAM,QAAQ,OAAO,CAErB,QAAO;AAIT,KAAI,UAAU,QAAQ;AACpB,MAAI,OAAO,OAAO,SAAS,SACzB,QAAO,OAAO,SAAS;AAGzB,MAAI,MAAM,QAAQ,OAAO,KAAK,CAG5B,QAAO,OAAO,KAAK,MAAM,CAAC,MAAM,MAAM,SAAS;AAEjD,SAAO;CACR;AAGD,KAAI,UAAU,OACZ,QACE,MAAM,QAAQ,OAAO,KAAK,IAC1B,OAAO,KAAK,SAAS,KACrB,OAAO,KAAK,MAAM,CAAC,QAAQ,OAAO,QAAQ,SAAS;AAKvD,KAAI,WAAW,OACb,QAAO,OAAO,OAAO,UAAU;AAIjC,KAAI,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,CAElD,QAAO,OAAO,MAAM,KAAK,CAAC,cAAc,qBAAqB,UAAU,CAAC;AAG1E,KACG,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,IAChD,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,EACjD;EACA,MAAM,aACJ,WAAW,SAAS,OAAO,QAAQ,OAAO;AAI5C,SACE,WAAW,SAAS,KACpB,WAAW,MAAM,CAAC,cAAc,qBAAqB,UAAU,CAAC;CAEnE;AAGD,KAAI,SAAS,OACX,QAAO;AAGT,KAAI,UAAU,UAAU,OAAO,OAAO,SAAS,UAAU;EACvD,MAAM,MAAM,OAAO;EACnB,MAAM,WAAW,YAAY,OAAiB;AAC9C,MAAI,SAAS,KACX,QAAO,qBAAqB,SAAS,KAAK;AAE5C,SAAO;CACR;AAKD,QAAO;AACR"}
1
+ {"version":3,"file":"json_schema.js","names":["schema: InteropZodType | JSONSchema","schema: unknown"],"sources":["../../src/utils/json_schema.ts"],"sourcesContent":["import { toJSONSchema } from \"zod/v4/core\";\nimport { dereference, type Schema } from \"@cfworker/json-schema\";\nimport {\n isZodSchemaV3,\n isZodSchemaV4,\n InteropZodType,\n interopZodObjectStrict,\n isZodObjectV4,\n ZodObjectV4,\n interopZodTransformInputSchema,\n} from \"./types/zod.js\";\nimport {\n type JsonSchema7Type as JSONSchema,\n zodToJsonSchema,\n} from \"./zod-to-json-schema/index.js\";\n\nexport { deepCompareStrict, Validator } from \"@cfworker/json-schema\";\n\n/**\n * Converts a Zod schema or JSON schema to a JSON schema.\n * @param schema - The schema to convert.\n * @returns The converted schema.\n */\nexport function toJsonSchema(schema: InteropZodType | JSONSchema): JSONSchema {\n if (isZodSchemaV4(schema)) {\n const inputSchema = interopZodTransformInputSchema(schema, true);\n if (isZodObjectV4(inputSchema)) {\n const strictSchema = interopZodObjectStrict(\n inputSchema,\n true\n ) as ZodObjectV4;\n return toJSONSchema(strictSchema);\n } else {\n return toJSONSchema(schema);\n }\n }\n if (isZodSchemaV3(schema)) {\n return zodToJsonSchema(schema);\n }\n return schema as JSONSchema;\n}\n\n/**\n * Validates if a JSON schema validates only strings. May return false negatives in some edge cases\n * (like recursive or unresolvable refs).\n *\n * @param schema - The schema to validate.\n * @returns `true` if the schema validates only strings, `false` otherwise.\n */\nexport function validatesOnlyStrings(schema: unknown): boolean {\n // Null, undefined, or empty schema\n if (\n !schema ||\n typeof schema !== \"object\" ||\n Object.keys(schema).length === 0 ||\n Array.isArray(schema)\n ) {\n return false; // Validates anything, not just strings\n }\n\n // Explicit type constraint\n if (\"type\" in schema) {\n if (typeof schema.type === \"string\") {\n return schema.type === \"string\";\n }\n\n if (Array.isArray(schema.type)) {\n // not sure why someone would do `\"type\": [\"string\"]` or especially `\"type\": [\"string\",\n // \"string\", \"string\", ...]` but we're not here to judge\n return schema.type.every((t) => t === \"string\");\n }\n return false; // Invalid or non-string type\n }\n\n // Enum with only string values\n if (\"enum\" in schema) {\n return (\n Array.isArray(schema.enum) &&\n schema.enum.length > 0 &&\n schema.enum.every((val) => typeof val === \"string\")\n );\n }\n\n // String constant\n if (\"const\" in schema) {\n return typeof schema.const === \"string\";\n }\n\n // Schema combinations\n if (\"allOf\" in schema && Array.isArray(schema.allOf)) {\n // If any subschema validates only strings, then the overall schema validates only strings\n return schema.allOf.some((subschema) => validatesOnlyStrings(subschema));\n }\n\n if (\n (\"anyOf\" in schema && Array.isArray(schema.anyOf)) ||\n (\"oneOf\" in schema && Array.isArray(schema.oneOf))\n ) {\n const subschemas = (\n \"anyOf\" in schema ? schema.anyOf : schema.oneOf\n ) as unknown[];\n\n // All subschemas must validate only strings\n return (\n subschemas.length > 0 &&\n subschemas.every((subschema) => validatesOnlyStrings(subschema))\n );\n }\n\n // We're not going to try on this one, it's too complex - we just assume if it has a \"not\" key and hasn't matched one of the above checks, it's not a string schema.\n if (\"not\" in schema) {\n return false; // The not case can validate non-strings\n }\n\n if (\"$ref\" in schema && typeof schema.$ref === \"string\") {\n const ref = schema.$ref as string;\n const resolved = dereference(schema as Schema);\n if (resolved[ref]) {\n return validatesOnlyStrings(resolved[ref]);\n }\n return false;\n }\n\n // ignore recursive refs and other cases where type is omitted for now\n // ignore other cases for now where type is omitted\n\n return false;\n}\n\n// Re-export of the types used throughout langchain for json schema serialization.\n// The plan is to eventually nix zod-to-json-schema altogether in place for\n// zod v4 / a more standardized way of serializing validated inputs, so its re-exported\n// here to remove the dependency on zod-to-json-schema in downstream packages until\n// a determination is made.\n\nexport {\n type JsonSchema7Type,\n type JsonSchema7Type as JSONSchema,\n type JsonSchema7ArrayType,\n type JsonSchema7ObjectType,\n type JsonSchema7StringType,\n type JsonSchema7NumberType,\n type JsonSchema7NullableType,\n} from \"./zod-to-json-schema/index.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,aAAaA,QAAiD;AAC5E,KAAI,cAAc,OAAO,EAAE;EACzB,MAAM,cAAc,+BAA+B,QAAQ,KAAK;AAChE,MAAI,cAAc,YAAY,EAAE;GAC9B,MAAM,eAAe,uBACnB,aACA,KACD;AACD,UAAO,aAAa,aAAa;EAClC,MACC,QAAO,aAAa,OAAO;CAE9B;AACD,KAAI,cAAc,OAAO,CACvB,QAAO,gBAAgB,OAAO;AAEhC,QAAO;AACR;;;;;;;;AASD,SAAgB,qBAAqBC,QAA0B;AAE7D,KACE,CAAC,UACD,OAAO,WAAW,YAClB,OAAO,KAAK,OAAO,CAAC,WAAW,KAC/B,MAAM,QAAQ,OAAO,CAErB,QAAO;AAIT,KAAI,UAAU,QAAQ;AACpB,MAAI,OAAO,OAAO,SAAS,SACzB,QAAO,OAAO,SAAS;AAGzB,MAAI,MAAM,QAAQ,OAAO,KAAK,CAG5B,QAAO,OAAO,KAAK,MAAM,CAAC,MAAM,MAAM,SAAS;AAEjD,SAAO;CACR;AAGD,KAAI,UAAU,OACZ,QACE,MAAM,QAAQ,OAAO,KAAK,IAC1B,OAAO,KAAK,SAAS,KACrB,OAAO,KAAK,MAAM,CAAC,QAAQ,OAAO,QAAQ,SAAS;AAKvD,KAAI,WAAW,OACb,QAAO,OAAO,OAAO,UAAU;AAIjC,KAAI,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,CAElD,QAAO,OAAO,MAAM,KAAK,CAAC,cAAc,qBAAqB,UAAU,CAAC;AAG1E,KACG,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,IAChD,WAAW,UAAU,MAAM,QAAQ,OAAO,MAAM,EACjD;EACA,MAAM,aACJ,WAAW,SAAS,OAAO,QAAQ,OAAO;AAI5C,SACE,WAAW,SAAS,KACpB,WAAW,MAAM,CAAC,cAAc,qBAAqB,UAAU,CAAC;CAEnE;AAGD,KAAI,SAAS,OACX,QAAO;AAGT,KAAI,UAAU,UAAU,OAAO,OAAO,SAAS,UAAU;EACvD,MAAM,MAAM,OAAO;EACnB,MAAM,WAAW,YAAY,OAAiB;AAC9C,MAAI,SAAS,KACX,QAAO,qBAAqB,SAAS,KAAK;AAE5C,SAAO;CACR;AAKD,QAAO;AACR"}
@@ -1 +1 @@
1
- {"version":3,"file":"stream.cjs","names":["e: any","stream: ReadableStream<T>","generator: AsyncGenerator<T>","iter: AsyncGenerator<T>","buffer","first: T","second: T","params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }","AsyncLocalStorageProviderSingleton","pickRunnableConfigKeys","raceWithSignal","value?: TReturn | PromiseLike<TReturn>","e: Error","to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>","generator: AsyncGenerator<T, TReturn, TNext>","startSetup: () => Promise<S>","signal: AbortSignal | undefined"],"sources":["../../src/utils/stream.ts"],"sourcesContent":["import { pickRunnableConfigKeys } from \"../runnables/config.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport type { IterableReadableStreamInterface } from \"../types/_internal.js\";\nimport { raceWithSignal } from \"./signal.js\";\n\n// Re-exported for backwards compatibility\n// Do NOT import this type from this file inside the project. Instead, always import from `types/_internal.js`\n// when using internally\nexport type { IterableReadableStreamInterface };\n\n/*\n * Support async iterator syntax for ReadableStreams in all environments.\n * Source: https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport class IterableReadableStream<T>\n extends ReadableStream<T>\n implements IterableReadableStreamInterface<T>\n{\n public reader: ReadableStreamDefaultReader<T>;\n\n ensureReader() {\n if (!this.reader) {\n this.reader = this.getReader();\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n this.ensureReader();\n try {\n const result = await this.reader.read();\n if (result.done) {\n this.reader.releaseLock(); // release lock when stream becomes closed\n return {\n done: true,\n value: undefined,\n };\n } else {\n return {\n done: false,\n value: result.value,\n };\n }\n } catch (e) {\n this.reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n }\n\n async return(): Promise<IteratorResult<T>> {\n this.ensureReader();\n // If wrapped in a Node stream, cancel is already called.\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n return { done: true, value: undefined };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async throw(e: any): Promise<IteratorResult<T>> {\n this.ensureReader();\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n throw e;\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n\n static fromReadableStream<T>(stream: ReadableStream<T>) {\n // From https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams#reading_the_stream\n const reader = stream.getReader();\n return new IterableReadableStream<T>({\n start(controller) {\n return pump();\n function pump(): Promise<T | undefined> {\n return reader.read().then(({ done, value }) => {\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n return;\n }\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n return pump();\n });\n }\n },\n cancel() {\n reader.releaseLock();\n },\n });\n }\n\n static fromAsyncGenerator<T>(generator: AsyncGenerator<T>) {\n return new IterableReadableStream<T>({\n async pull(controller) {\n const { value, done } = await generator.next();\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n }\n // Fix: `else if (value)` will hang the streaming when nullish value (e.g. empty string) is pulled\n controller.enqueue(value);\n },\n async cancel(reason) {\n await generator.return(reason);\n },\n });\n }\n}\n\nexport function atee<T>(\n iter: AsyncGenerator<T>,\n length = 2\n): AsyncGenerator<T>[] {\n const buffers = Array.from(\n { length },\n () => [] as Array<IteratorResult<T> | IteratorReturnResult<T>>\n );\n return buffers.map(async function* makeIter(buffer) {\n while (true) {\n if (buffer.length === 0) {\n const result = await iter.next();\n for (const buffer of buffers) {\n buffer.push(result);\n }\n } else if (buffer[0].done) {\n return;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n yield buffer.shift()!.value;\n }\n }\n });\n}\n\nexport function concat<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Array<any> | string | number | Record<string, any> | any\n>(first: T, second: T): T {\n if (Array.isArray(first) && Array.isArray(second)) {\n return first.concat(second) as T;\n } else if (typeof first === \"string\" && typeof second === \"string\") {\n return (first + second) as T;\n } else if (typeof first === \"number\" && typeof second === \"number\") {\n return (first + second) as T;\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n \"concat\" in (first as any) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (first as any).concat === \"function\"\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (first as any).concat(second) as T;\n } else if (typeof first === \"object\" && typeof second === \"object\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const chunk = { ...first } as Record<string, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (const [key, value] of Object.entries(second as Record<string, any>)) {\n if (key in chunk && !Array.isArray(chunk[key])) {\n chunk[key] = concat(chunk[key], value);\n } else {\n chunk[key] = value;\n }\n }\n return chunk as T;\n } else {\n throw new Error(`Cannot concat ${typeof first} and ${typeof second}`);\n }\n}\n\nexport class AsyncGeneratorWithSetup<\n S = unknown,\n T = unknown,\n TReturn = unknown,\n TNext = unknown\n> implements AsyncGenerator<T, TReturn, TNext>\n{\n private generator: AsyncGenerator<T>;\n\n public setup: Promise<S>;\n\n public config?: unknown;\n\n public signal?: AbortSignal;\n\n private firstResult: Promise<IteratorResult<T>>;\n\n private firstResultUsed = false;\n\n constructor(params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }) {\n this.generator = params.generator;\n this.config = params.config;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.signal = params.signal ?? (this.config as any)?.signal;\n // setup is a promise that resolves only after the first iterator value\n // is available. this is useful when setup of several piped generators\n // needs to happen in logical order, ie. in the order in which input to\n // to each generator is available.\n this.setup = new Promise((resolve, reject) => {\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n params.config as Record<string, unknown> | undefined\n ),\n async () => {\n this.firstResult = params.generator.next();\n if (params.startSetup) {\n this.firstResult.then(params.startSetup).then(resolve, reject);\n } else {\n this.firstResult.then((_result) => resolve(undefined as S), reject);\n }\n },\n true\n );\n });\n }\n\n async next(...args: [] | [TNext]): Promise<IteratorResult<T>> {\n this.signal?.throwIfAborted();\n\n if (!this.firstResultUsed) {\n this.firstResultUsed = true;\n return this.firstResult;\n }\n\n return AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n this.config as Record<string, unknown> | undefined\n ),\n this.signal\n ? async () => {\n return raceWithSignal(this.generator.next(...args), this.signal);\n }\n : async () => {\n return this.generator.next(...args);\n },\n true\n );\n }\n\n async return(\n value?: TReturn | PromiseLike<TReturn>\n ): Promise<IteratorResult<T>> {\n return this.generator.return(value);\n }\n\n async throw(e: Error): Promise<IteratorResult<T>> {\n return this.generator.throw(e);\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n}\n\nexport async function pipeGeneratorWithSetup<\n S,\n A extends unknown[],\n T,\n TReturn,\n TNext,\n U,\n UReturn,\n UNext\n>(\n to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>,\n generator: AsyncGenerator<T, TReturn, TNext>,\n startSetup: () => Promise<S>,\n signal: AbortSignal | undefined,\n ...args: A\n) {\n const gen = new AsyncGeneratorWithSetup({\n generator,\n startSetup,\n signal,\n });\n const setup = await gen.setup;\n return { output: to(gen, setup, ...args), setup };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"stream.cjs","names":["e: any","stream: ReadableStream<T>","generator: AsyncGenerator<T>","iter: AsyncGenerator<T>","buffer","first: T","second: T","params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }","AsyncLocalStorageProviderSingleton","pickRunnableConfigKeys","raceWithSignal","value?: TReturn | PromiseLike<TReturn>","e: Error","to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>","generator: AsyncGenerator<T, TReturn, TNext>","startSetup: () => Promise<S>","signal: AbortSignal | undefined"],"sources":["../../src/utils/stream.ts"],"sourcesContent":["import { pickRunnableConfigKeys } from \"../runnables/config.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport type { IterableReadableStreamInterface } from \"../types/_internal.js\";\nimport { raceWithSignal } from \"./signal.js\";\n\n// Re-exported for backwards compatibility\n// Do NOT import this type from this file inside the project. Instead, always import from `types/_internal.js`\n// when using internally\nexport type { IterableReadableStreamInterface };\n\n/*\n * Support async iterator syntax for ReadableStreams in all environments.\n * Source: https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport class IterableReadableStream<T>\n extends ReadableStream<T>\n implements IterableReadableStreamInterface<T>\n{\n public reader: ReadableStreamDefaultReader<T>;\n\n ensureReader() {\n if (!this.reader) {\n this.reader = this.getReader();\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n this.ensureReader();\n try {\n const result = await this.reader.read();\n if (result.done) {\n this.reader.releaseLock(); // release lock when stream becomes closed\n return {\n done: true,\n value: undefined,\n };\n } else {\n return {\n done: false,\n value: result.value,\n };\n }\n } catch (e) {\n this.reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n }\n\n async return(): Promise<IteratorResult<T>> {\n this.ensureReader();\n // If wrapped in a Node stream, cancel is already called.\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n return { done: true, value: undefined };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async throw(e: any): Promise<IteratorResult<T>> {\n this.ensureReader();\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n throw e;\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n\n static fromReadableStream<T>(stream: ReadableStream<T>) {\n // From https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams#reading_the_stream\n const reader = stream.getReader();\n return new IterableReadableStream<T>({\n start(controller) {\n return pump();\n function pump(): Promise<T | undefined> {\n return reader.read().then(({ done, value }) => {\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n return;\n }\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n return pump();\n });\n }\n },\n cancel() {\n reader.releaseLock();\n },\n });\n }\n\n static fromAsyncGenerator<T>(generator: AsyncGenerator<T>) {\n return new IterableReadableStream<T>({\n async pull(controller) {\n const { value, done } = await generator.next();\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n }\n // Fix: `else if (value)` will hang the streaming when nullish value (e.g. empty string) is pulled\n controller.enqueue(value);\n },\n async cancel(reason) {\n await generator.return(reason);\n },\n });\n }\n}\n\nexport function atee<T>(\n iter: AsyncGenerator<T>,\n length = 2\n): AsyncGenerator<T>[] {\n const buffers = Array.from(\n { length },\n () => [] as Array<IteratorResult<T> | IteratorReturnResult<T>>\n );\n return buffers.map(async function* makeIter(buffer) {\n while (true) {\n if (buffer.length === 0) {\n const result = await iter.next();\n for (const buffer of buffers) {\n buffer.push(result);\n }\n } else if (buffer[0].done) {\n return;\n } else {\n yield buffer.shift()!.value;\n }\n }\n });\n}\n\nexport function concat<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Array<any> | string | number | Record<string, any> | any\n>(first: T, second: T): T {\n if (Array.isArray(first) && Array.isArray(second)) {\n return first.concat(second) as T;\n } else if (typeof first === \"string\" && typeof second === \"string\") {\n return (first + second) as T;\n } else if (typeof first === \"number\" && typeof second === \"number\") {\n return (first + second) as T;\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n \"concat\" in (first as any) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (first as any).concat === \"function\"\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (first as any).concat(second) as T;\n } else if (typeof first === \"object\" && typeof second === \"object\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const chunk = { ...first } as Record<string, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (const [key, value] of Object.entries(second as Record<string, any>)) {\n if (key in chunk && !Array.isArray(chunk[key])) {\n chunk[key] = concat(chunk[key], value);\n } else {\n chunk[key] = value;\n }\n }\n return chunk as T;\n } else {\n throw new Error(`Cannot concat ${typeof first} and ${typeof second}`);\n }\n}\n\nexport class AsyncGeneratorWithSetup<\n S = unknown,\n T = unknown,\n TReturn = unknown,\n TNext = unknown\n> implements AsyncGenerator<T, TReturn, TNext>\n{\n private generator: AsyncGenerator<T>;\n\n public setup: Promise<S>;\n\n public config?: unknown;\n\n public signal?: AbortSignal;\n\n private firstResult: Promise<IteratorResult<T>>;\n\n private firstResultUsed = false;\n\n constructor(params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }) {\n this.generator = params.generator;\n this.config = params.config;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.signal = params.signal ?? (this.config as any)?.signal;\n // setup is a promise that resolves only after the first iterator value\n // is available. this is useful when setup of several piped generators\n // needs to happen in logical order, ie. in the order in which input to\n // to each generator is available.\n this.setup = new Promise((resolve, reject) => {\n // eslint-disable-next-line no-void\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n params.config as Record<string, unknown> | undefined\n ),\n async () => {\n this.firstResult = params.generator.next();\n if (params.startSetup) {\n this.firstResult.then(params.startSetup).then(resolve, reject);\n } else {\n this.firstResult.then((_result) => resolve(undefined as S), reject);\n }\n },\n true\n );\n });\n }\n\n async next(...args: [] | [TNext]): Promise<IteratorResult<T>> {\n this.signal?.throwIfAborted();\n\n if (!this.firstResultUsed) {\n this.firstResultUsed = true;\n return this.firstResult;\n }\n\n return AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n this.config as Record<string, unknown> | undefined\n ),\n this.signal\n ? async () => {\n return raceWithSignal(this.generator.next(...args), this.signal);\n }\n : async () => {\n return this.generator.next(...args);\n },\n true\n );\n }\n\n async return(\n value?: TReturn | PromiseLike<TReturn>\n ): Promise<IteratorResult<T>> {\n return this.generator.return(value);\n }\n\n async throw(e: Error): Promise<IteratorResult<T>> {\n return this.generator.throw(e);\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n}\n\nexport async function pipeGeneratorWithSetup<\n S,\n A extends unknown[],\n T,\n TReturn,\n TNext,\n U,\n UReturn,\n UNext\n>(\n to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>,\n generator: AsyncGenerator<T, TReturn, TNext>,\n startSetup: () => Promise<S>,\n signal: AbortSignal | undefined,\n ...args: A\n) {\n const gen = new AsyncGeneratorWithSetup({\n generator,\n startSetup,\n signal,\n });\n const setup = await gen.setup;\n return { output: to(gen, setup, ...args), setup };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","names":["e: any","stream: ReadableStream<T>","generator: AsyncGenerator<T>","iter: AsyncGenerator<T>","buffer","first: T","second: T","params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }","value?: TReturn | PromiseLike<TReturn>","e: Error","to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>","generator: AsyncGenerator<T, TReturn, TNext>","startSetup: () => Promise<S>","signal: AbortSignal | undefined"],"sources":["../../src/utils/stream.ts"],"sourcesContent":["import { pickRunnableConfigKeys } from \"../runnables/config.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport type { IterableReadableStreamInterface } from \"../types/_internal.js\";\nimport { raceWithSignal } from \"./signal.js\";\n\n// Re-exported for backwards compatibility\n// Do NOT import this type from this file inside the project. Instead, always import from `types/_internal.js`\n// when using internally\nexport type { IterableReadableStreamInterface };\n\n/*\n * Support async iterator syntax for ReadableStreams in all environments.\n * Source: https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport class IterableReadableStream<T>\n extends ReadableStream<T>\n implements IterableReadableStreamInterface<T>\n{\n public reader: ReadableStreamDefaultReader<T>;\n\n ensureReader() {\n if (!this.reader) {\n this.reader = this.getReader();\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n this.ensureReader();\n try {\n const result = await this.reader.read();\n if (result.done) {\n this.reader.releaseLock(); // release lock when stream becomes closed\n return {\n done: true,\n value: undefined,\n };\n } else {\n return {\n done: false,\n value: result.value,\n };\n }\n } catch (e) {\n this.reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n }\n\n async return(): Promise<IteratorResult<T>> {\n this.ensureReader();\n // If wrapped in a Node stream, cancel is already called.\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n return { done: true, value: undefined };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async throw(e: any): Promise<IteratorResult<T>> {\n this.ensureReader();\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n throw e;\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n\n static fromReadableStream<T>(stream: ReadableStream<T>) {\n // From https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams#reading_the_stream\n const reader = stream.getReader();\n return new IterableReadableStream<T>({\n start(controller) {\n return pump();\n function pump(): Promise<T | undefined> {\n return reader.read().then(({ done, value }) => {\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n return;\n }\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n return pump();\n });\n }\n },\n cancel() {\n reader.releaseLock();\n },\n });\n }\n\n static fromAsyncGenerator<T>(generator: AsyncGenerator<T>) {\n return new IterableReadableStream<T>({\n async pull(controller) {\n const { value, done } = await generator.next();\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n }\n // Fix: `else if (value)` will hang the streaming when nullish value (e.g. empty string) is pulled\n controller.enqueue(value);\n },\n async cancel(reason) {\n await generator.return(reason);\n },\n });\n }\n}\n\nexport function atee<T>(\n iter: AsyncGenerator<T>,\n length = 2\n): AsyncGenerator<T>[] {\n const buffers = Array.from(\n { length },\n () => [] as Array<IteratorResult<T> | IteratorReturnResult<T>>\n );\n return buffers.map(async function* makeIter(buffer) {\n while (true) {\n if (buffer.length === 0) {\n const result = await iter.next();\n for (const buffer of buffers) {\n buffer.push(result);\n }\n } else if (buffer[0].done) {\n return;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n yield buffer.shift()!.value;\n }\n }\n });\n}\n\nexport function concat<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Array<any> | string | number | Record<string, any> | any\n>(first: T, second: T): T {\n if (Array.isArray(first) && Array.isArray(second)) {\n return first.concat(second) as T;\n } else if (typeof first === \"string\" && typeof second === \"string\") {\n return (first + second) as T;\n } else if (typeof first === \"number\" && typeof second === \"number\") {\n return (first + second) as T;\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n \"concat\" in (first as any) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (first as any).concat === \"function\"\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (first as any).concat(second) as T;\n } else if (typeof first === \"object\" && typeof second === \"object\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const chunk = { ...first } as Record<string, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (const [key, value] of Object.entries(second as Record<string, any>)) {\n if (key in chunk && !Array.isArray(chunk[key])) {\n chunk[key] = concat(chunk[key], value);\n } else {\n chunk[key] = value;\n }\n }\n return chunk as T;\n } else {\n throw new Error(`Cannot concat ${typeof first} and ${typeof second}`);\n }\n}\n\nexport class AsyncGeneratorWithSetup<\n S = unknown,\n T = unknown,\n TReturn = unknown,\n TNext = unknown\n> implements AsyncGenerator<T, TReturn, TNext>\n{\n private generator: AsyncGenerator<T>;\n\n public setup: Promise<S>;\n\n public config?: unknown;\n\n public signal?: AbortSignal;\n\n private firstResult: Promise<IteratorResult<T>>;\n\n private firstResultUsed = false;\n\n constructor(params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }) {\n this.generator = params.generator;\n this.config = params.config;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.signal = params.signal ?? (this.config as any)?.signal;\n // setup is a promise that resolves only after the first iterator value\n // is available. this is useful when setup of several piped generators\n // needs to happen in logical order, ie. in the order in which input to\n // to each generator is available.\n this.setup = new Promise((resolve, reject) => {\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n params.config as Record<string, unknown> | undefined\n ),\n async () => {\n this.firstResult = params.generator.next();\n if (params.startSetup) {\n this.firstResult.then(params.startSetup).then(resolve, reject);\n } else {\n this.firstResult.then((_result) => resolve(undefined as S), reject);\n }\n },\n true\n );\n });\n }\n\n async next(...args: [] | [TNext]): Promise<IteratorResult<T>> {\n this.signal?.throwIfAborted();\n\n if (!this.firstResultUsed) {\n this.firstResultUsed = true;\n return this.firstResult;\n }\n\n return AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n this.config as Record<string, unknown> | undefined\n ),\n this.signal\n ? async () => {\n return raceWithSignal(this.generator.next(...args), this.signal);\n }\n : async () => {\n return this.generator.next(...args);\n },\n true\n );\n }\n\n async return(\n value?: TReturn | PromiseLike<TReturn>\n ): Promise<IteratorResult<T>> {\n return this.generator.return(value);\n }\n\n async throw(e: Error): Promise<IteratorResult<T>> {\n return this.generator.throw(e);\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n}\n\nexport async function pipeGeneratorWithSetup<\n S,\n A extends unknown[],\n T,\n TReturn,\n TNext,\n U,\n UReturn,\n UNext\n>(\n to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>,\n generator: AsyncGenerator<T, TReturn, TNext>,\n startSetup: () => Promise<S>,\n signal: AbortSignal | undefined,\n ...args: A\n) {\n const gen = new AsyncGeneratorWithSetup({\n generator,\n startSetup,\n signal,\n });\n const setup = await gen.setup;\n return { output: to(gen, setup, ...args), setup };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"stream.js","names":["e: any","stream: ReadableStream<T>","generator: AsyncGenerator<T>","iter: AsyncGenerator<T>","buffer","first: T","second: T","params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }","value?: TReturn | PromiseLike<TReturn>","e: Error","to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>","generator: AsyncGenerator<T, TReturn, TNext>","startSetup: () => Promise<S>","signal: AbortSignal | undefined"],"sources":["../../src/utils/stream.ts"],"sourcesContent":["import { pickRunnableConfigKeys } from \"../runnables/config.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport type { IterableReadableStreamInterface } from \"../types/_internal.js\";\nimport { raceWithSignal } from \"./signal.js\";\n\n// Re-exported for backwards compatibility\n// Do NOT import this type from this file inside the project. Instead, always import from `types/_internal.js`\n// when using internally\nexport type { IterableReadableStreamInterface };\n\n/*\n * Support async iterator syntax for ReadableStreams in all environments.\n * Source: https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport class IterableReadableStream<T>\n extends ReadableStream<T>\n implements IterableReadableStreamInterface<T>\n{\n public reader: ReadableStreamDefaultReader<T>;\n\n ensureReader() {\n if (!this.reader) {\n this.reader = this.getReader();\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n this.ensureReader();\n try {\n const result = await this.reader.read();\n if (result.done) {\n this.reader.releaseLock(); // release lock when stream becomes closed\n return {\n done: true,\n value: undefined,\n };\n } else {\n return {\n done: false,\n value: result.value,\n };\n }\n } catch (e) {\n this.reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n }\n\n async return(): Promise<IteratorResult<T>> {\n this.ensureReader();\n // If wrapped in a Node stream, cancel is already called.\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n return { done: true, value: undefined };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async throw(e: any): Promise<IteratorResult<T>> {\n this.ensureReader();\n if (this.locked) {\n const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n this.reader.releaseLock(); // release lock first\n await cancelPromise; // now await it\n }\n throw e;\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n\n static fromReadableStream<T>(stream: ReadableStream<T>) {\n // From https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams#reading_the_stream\n const reader = stream.getReader();\n return new IterableReadableStream<T>({\n start(controller) {\n return pump();\n function pump(): Promise<T | undefined> {\n return reader.read().then(({ done, value }) => {\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n return;\n }\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n return pump();\n });\n }\n },\n cancel() {\n reader.releaseLock();\n },\n });\n }\n\n static fromAsyncGenerator<T>(generator: AsyncGenerator<T>) {\n return new IterableReadableStream<T>({\n async pull(controller) {\n const { value, done } = await generator.next();\n // When no more data needs to be consumed, close the stream\n if (done) {\n controller.close();\n }\n // Fix: `else if (value)` will hang the streaming when nullish value (e.g. empty string) is pulled\n controller.enqueue(value);\n },\n async cancel(reason) {\n await generator.return(reason);\n },\n });\n }\n}\n\nexport function atee<T>(\n iter: AsyncGenerator<T>,\n length = 2\n): AsyncGenerator<T>[] {\n const buffers = Array.from(\n { length },\n () => [] as Array<IteratorResult<T> | IteratorReturnResult<T>>\n );\n return buffers.map(async function* makeIter(buffer) {\n while (true) {\n if (buffer.length === 0) {\n const result = await iter.next();\n for (const buffer of buffers) {\n buffer.push(result);\n }\n } else if (buffer[0].done) {\n return;\n } else {\n yield buffer.shift()!.value;\n }\n }\n });\n}\n\nexport function concat<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Array<any> | string | number | Record<string, any> | any\n>(first: T, second: T): T {\n if (Array.isArray(first) && Array.isArray(second)) {\n return first.concat(second) as T;\n } else if (typeof first === \"string\" && typeof second === \"string\") {\n return (first + second) as T;\n } else if (typeof first === \"number\" && typeof second === \"number\") {\n return (first + second) as T;\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n \"concat\" in (first as any) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (first as any).concat === \"function\"\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (first as any).concat(second) as T;\n } else if (typeof first === \"object\" && typeof second === \"object\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const chunk = { ...first } as Record<string, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (const [key, value] of Object.entries(second as Record<string, any>)) {\n if (key in chunk && !Array.isArray(chunk[key])) {\n chunk[key] = concat(chunk[key], value);\n } else {\n chunk[key] = value;\n }\n }\n return chunk as T;\n } else {\n throw new Error(`Cannot concat ${typeof first} and ${typeof second}`);\n }\n}\n\nexport class AsyncGeneratorWithSetup<\n S = unknown,\n T = unknown,\n TReturn = unknown,\n TNext = unknown\n> implements AsyncGenerator<T, TReturn, TNext>\n{\n private generator: AsyncGenerator<T>;\n\n public setup: Promise<S>;\n\n public config?: unknown;\n\n public signal?: AbortSignal;\n\n private firstResult: Promise<IteratorResult<T>>;\n\n private firstResultUsed = false;\n\n constructor(params: {\n generator: AsyncGenerator<T>;\n startSetup?: () => Promise<S>;\n config?: unknown;\n signal?: AbortSignal;\n }) {\n this.generator = params.generator;\n this.config = params.config;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.signal = params.signal ?? (this.config as any)?.signal;\n // setup is a promise that resolves only after the first iterator value\n // is available. this is useful when setup of several piped generators\n // needs to happen in logical order, ie. in the order in which input to\n // to each generator is available.\n this.setup = new Promise((resolve, reject) => {\n // eslint-disable-next-line no-void\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n params.config as Record<string, unknown> | undefined\n ),\n async () => {\n this.firstResult = params.generator.next();\n if (params.startSetup) {\n this.firstResult.then(params.startSetup).then(resolve, reject);\n } else {\n this.firstResult.then((_result) => resolve(undefined as S), reject);\n }\n },\n true\n );\n });\n }\n\n async next(...args: [] | [TNext]): Promise<IteratorResult<T>> {\n this.signal?.throwIfAborted();\n\n if (!this.firstResultUsed) {\n this.firstResultUsed = true;\n return this.firstResult;\n }\n\n return AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(\n this.config as Record<string, unknown> | undefined\n ),\n this.signal\n ? async () => {\n return raceWithSignal(this.generator.next(...args), this.signal);\n }\n : async () => {\n return this.generator.next(...args);\n },\n true\n );\n }\n\n async return(\n value?: TReturn | PromiseLike<TReturn>\n ): Promise<IteratorResult<T>> {\n return this.generator.return(value);\n }\n\n async throw(e: Error): Promise<IteratorResult<T>> {\n return this.generator.throw(e);\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Not present in Node 18 types, required in latest Node 22\n async [Symbol.asyncDispose]() {\n await this.return();\n }\n}\n\nexport async function pipeGeneratorWithSetup<\n S,\n A extends unknown[],\n T,\n TReturn,\n TNext,\n U,\n UReturn,\n UNext\n>(\n to: (\n g: AsyncGenerator<T, TReturn, TNext>,\n s: S,\n ...args: A\n ) => AsyncGenerator<U, UReturn, UNext>,\n generator: AsyncGenerator<T, TReturn, TNext>,\n startSetup: () => Promise<S>,\n signal: AbortSignal | undefined,\n ...args: A\n) {\n const gen = new AsyncGeneratorWithSetup({\n generator,\n startSetup,\n signal,\n });\n const setup = await gen.setup;\n return { output: to(gen, setup, ...args), setup };\n}\n"],"mappings":"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"}
@@ -0,0 +1,245 @@
1
+ const require_ai = require('../../messages/ai.cjs');
2
+ const require_outputs = require('../../outputs.cjs');
3
+ const require_utils_json_schema = require('../json_schema.cjs');
4
+ const require_base = require('../../runnables/base.cjs');
5
+ require('../../messages/index.cjs');
6
+ const require_language_models_chat_models = require('../../language_models/chat_models.cjs');
7
+
8
+ //#region src/utils/testing/chat_models.ts
9
+ var FakeChatModel = class extends require_language_models_chat_models.BaseChatModel {
10
+ _combineLLMOutput() {
11
+ return [];
12
+ }
13
+ _llmType() {
14
+ return "fake";
15
+ }
16
+ async _generate(messages, options, runManager) {
17
+ if (options?.stop?.length) return { generations: [{
18
+ message: new require_ai.AIMessage(options.stop[0]),
19
+ text: options.stop[0]
20
+ }] };
21
+ const text = messages.map((m) => {
22
+ if (typeof m.content === "string") return m.content;
23
+ return JSON.stringify(m.content, null, 2);
24
+ }).join("\n");
25
+ await runManager?.handleLLMNewToken(text);
26
+ return {
27
+ generations: [{
28
+ message: new require_ai.AIMessage(text),
29
+ text
30
+ }],
31
+ llmOutput: {}
32
+ };
33
+ }
34
+ };
35
+ var FakeStreamingChatModel = class FakeStreamingChatModel extends require_language_models_chat_models.BaseChatModel {
36
+ sleep = 50;
37
+ responses = [];
38
+ chunks = [];
39
+ toolStyle = "openai";
40
+ thrownErrorString;
41
+ tools = [];
42
+ constructor({ sleep = 50, responses = [], chunks = [], toolStyle = "openai", thrownErrorString,...rest }) {
43
+ super(rest);
44
+ this.sleep = sleep;
45
+ this.responses = responses;
46
+ this.chunks = chunks;
47
+ this.toolStyle = toolStyle;
48
+ this.thrownErrorString = thrownErrorString;
49
+ }
50
+ _llmType() {
51
+ return "fake";
52
+ }
53
+ bindTools(tools) {
54
+ const merged = [...this.tools, ...tools];
55
+ const toolDicts = merged.map((t) => {
56
+ switch (this.toolStyle) {
57
+ case "openai": return {
58
+ type: "function",
59
+ function: {
60
+ name: t.name,
61
+ description: t.description,
62
+ parameters: require_utils_json_schema.toJsonSchema(t.schema)
63
+ }
64
+ };
65
+ case "anthropic": return {
66
+ name: t.name,
67
+ description: t.description,
68
+ input_schema: require_utils_json_schema.toJsonSchema(t.schema)
69
+ };
70
+ case "bedrock": return { toolSpec: {
71
+ name: t.name,
72
+ description: t.description,
73
+ inputSchema: require_utils_json_schema.toJsonSchema(t.schema)
74
+ } };
75
+ case "google": return {
76
+ name: t.name,
77
+ description: t.description,
78
+ parameters: require_utils_json_schema.toJsonSchema(t.schema)
79
+ };
80
+ default: throw new Error(`Unsupported tool style: ${this.toolStyle}`);
81
+ }
82
+ });
83
+ const wrapped = this.toolStyle === "google" ? [{ functionDeclarations: toolDicts }] : toolDicts;
84
+ const next = new FakeStreamingChatModel({
85
+ sleep: this.sleep,
86
+ responses: this.responses,
87
+ chunks: this.chunks,
88
+ toolStyle: this.toolStyle,
89
+ thrownErrorString: this.thrownErrorString
90
+ });
91
+ next.tools = merged;
92
+ return next.withConfig({ tools: wrapped });
93
+ }
94
+ async _generate(messages, _options, _runManager) {
95
+ if (this.thrownErrorString) throw new Error(this.thrownErrorString);
96
+ const content = this.responses?.[0]?.content ?? messages[0].content ?? "";
97
+ const generation = { generations: [{
98
+ text: "",
99
+ message: new require_ai.AIMessage({
100
+ content,
101
+ tool_calls: this.chunks?.[0]?.tool_calls
102
+ })
103
+ }] };
104
+ return generation;
105
+ }
106
+ async *_streamResponseChunks(_messages, _options, runManager) {
107
+ if (this.thrownErrorString) throw new Error(this.thrownErrorString);
108
+ if (this.chunks?.length) {
109
+ for (const msgChunk of this.chunks) {
110
+ const cg = new require_outputs.ChatGenerationChunk({
111
+ message: new require_ai.AIMessageChunk({
112
+ content: msgChunk.content,
113
+ tool_calls: msgChunk.tool_calls,
114
+ additional_kwargs: msgChunk.additional_kwargs ?? {}
115
+ }),
116
+ text: msgChunk.content?.toString() ?? ""
117
+ });
118
+ yield cg;
119
+ await runManager?.handleLLMNewToken(msgChunk.content, void 0, void 0, void 0, void 0, { chunk: cg });
120
+ }
121
+ return;
122
+ }
123
+ const fallback = this.responses?.[0] ?? new require_ai.AIMessage(typeof _messages[0].content === "string" ? _messages[0].content : "");
124
+ const text = typeof fallback.content === "string" ? fallback.content : "";
125
+ for (const ch of text) {
126
+ await new Promise((r) => setTimeout(r, this.sleep));
127
+ const cg = new require_outputs.ChatGenerationChunk({
128
+ message: new require_ai.AIMessageChunk({ content: ch }),
129
+ text: ch
130
+ });
131
+ yield cg;
132
+ await runManager?.handleLLMNewToken(ch, void 0, void 0, void 0, void 0, { chunk: cg });
133
+ }
134
+ }
135
+ };
136
+ /**
137
+ * A fake Chat Model that returns a predefined list of responses. It can be used
138
+ * for testing purposes.
139
+ * @example
140
+ * ```typescript
141
+ * const chat = new FakeListChatModel({
142
+ * responses: ["I'll callback later.", "You 'console' them!"]
143
+ * });
144
+ *
145
+ * const firstMessage = new HumanMessage("You want to hear a JavaScript joke?");
146
+ * const secondMessage = new HumanMessage("How do you cheer up a JavaScript developer?");
147
+ *
148
+ * // Call the chat model with a message and log the response
149
+ * const firstResponse = await chat.call([firstMessage]);
150
+ * console.log({ firstResponse });
151
+ *
152
+ * const secondResponse = await chat.call([secondMessage]);
153
+ * console.log({ secondResponse });
154
+ * ```
155
+ */
156
+ var FakeListChatModel = class extends require_language_models_chat_models.BaseChatModel {
157
+ static lc_name() {
158
+ return "FakeListChatModel";
159
+ }
160
+ lc_serializable = true;
161
+ responses;
162
+ i = 0;
163
+ sleep;
164
+ emitCustomEvent = false;
165
+ constructor(params) {
166
+ super(params);
167
+ const { responses, sleep, emitCustomEvent } = params;
168
+ this.responses = responses;
169
+ this.sleep = sleep;
170
+ this.emitCustomEvent = emitCustomEvent ?? this.emitCustomEvent;
171
+ }
172
+ _combineLLMOutput() {
173
+ return [];
174
+ }
175
+ _llmType() {
176
+ return "fake-list";
177
+ }
178
+ async _generate(_messages, options, runManager) {
179
+ await this._sleepIfRequested();
180
+ if (options?.thrownErrorString) throw new Error(options.thrownErrorString);
181
+ if (this.emitCustomEvent) await runManager?.handleCustomEvent("some_test_event", { someval: true });
182
+ if (options?.stop?.length) return { generations: [this._formatGeneration(options.stop[0])] };
183
+ else {
184
+ const response = this._currentResponse();
185
+ this._incrementResponse();
186
+ return {
187
+ generations: [this._formatGeneration(response)],
188
+ llmOutput: {}
189
+ };
190
+ }
191
+ }
192
+ _formatGeneration(text) {
193
+ return {
194
+ message: new require_ai.AIMessage(text),
195
+ text
196
+ };
197
+ }
198
+ async *_streamResponseChunks(_messages, options, runManager) {
199
+ const response = this._currentResponse();
200
+ this._incrementResponse();
201
+ if (this.emitCustomEvent) await runManager?.handleCustomEvent("some_test_event", { someval: true });
202
+ for await (const text of response) {
203
+ await this._sleepIfRequested();
204
+ if (options?.thrownErrorString) throw new Error(options.thrownErrorString);
205
+ const chunk = this._createResponseChunk(text);
206
+ yield chunk;
207
+ runManager?.handleLLMNewToken(text);
208
+ }
209
+ }
210
+ async _sleepIfRequested() {
211
+ if (this.sleep !== void 0) await this._sleep();
212
+ }
213
+ async _sleep() {
214
+ return new Promise((resolve) => {
215
+ setTimeout(() => resolve(), this.sleep);
216
+ });
217
+ }
218
+ _createResponseChunk(text) {
219
+ return new require_outputs.ChatGenerationChunk({
220
+ message: new require_ai.AIMessageChunk({ content: text }),
221
+ text
222
+ });
223
+ }
224
+ _currentResponse() {
225
+ return this.responses[this.i];
226
+ }
227
+ _incrementResponse() {
228
+ if (this.i < this.responses.length - 1) this.i += 1;
229
+ else this.i = 0;
230
+ }
231
+ withStructuredOutput(_params, _config) {
232
+ return require_base.RunnableLambda.from(async (input) => {
233
+ const message = await this.invoke(input);
234
+ if (message.tool_calls?.[0]?.args) return message.tool_calls[0].args;
235
+ if (typeof message.content === "string") return JSON.parse(message.content);
236
+ throw new Error("No structured output found");
237
+ });
238
+ }
239
+ };
240
+
241
+ //#endregion
242
+ exports.FakeChatModel = FakeChatModel;
243
+ exports.FakeListChatModel = FakeListChatModel;
244
+ exports.FakeStreamingChatModel = FakeStreamingChatModel;
245
+ //# sourceMappingURL=chat_models.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat_models.cjs","names":["BaseChatModel","messages: BaseMessage[]","options?: this[\"ParsedCallOptions\"]","runManager?: CallbackManagerForLLMRun","AIMessage","tools: (StructuredTool | ToolSpec)[]","toJsonSchema","_options: this[\"ParsedCallOptions\"]","_runManager?: CallbackManagerForLLMRun","generation: ChatResult","_messages: BaseMessage[]","ChatGenerationChunk","AIMessageChunk","params: FakeChatInput","text: string","options: this[\"ParsedCallOptions\"]","_params:\n | StructuredOutputMethodParams<RunOutput, boolean>\n | InteropZodType<RunOutput>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>","_config?: StructuredOutputMethodOptions<boolean>","RunnableLambda"],"sources":["../../../src/utils/testing/chat_models.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"../../callbacks/manager.js\";\nimport {\n BaseChatModel,\n BaseChatModelCallOptions,\n BaseChatModelParams,\n} from \"../../language_models/chat_models.js\";\nimport { BaseLLMParams } from \"../../language_models/llms.js\";\nimport {\n BaseMessage,\n AIMessage,\n AIMessageChunk,\n} from \"../../messages/index.js\";\nimport { type ChatResult, ChatGenerationChunk } from \"../../outputs.js\";\nimport { Runnable, RunnableLambda } from \"../../runnables/base.js\";\nimport { StructuredTool } from \"../../tools/index.js\";\nimport {\n StructuredOutputMethodParams,\n BaseLanguageModelInput,\n StructuredOutputMethodOptions,\n} from \"../../language_models/base.js\";\n\nimport { toJsonSchema } from \"../json_schema.js\";\nimport { InteropZodType } from \"../types/zod.js\";\n\n/** Minimal shape actually needed by `bindTools` */\nexport interface ToolSpec {\n name: string;\n description?: string;\n schema: InteropZodType | Record<string, unknown>; // Either a Zod schema *or* a plain JSON-Schema object\n}\n\n/**\n * Interface specific to the Fake Streaming Chat model.\n */\nexport interface FakeStreamingChatModelCallOptions\n extends BaseChatModelCallOptions {}\n/**\n * Interface for the Constructor-field specific to the Fake Streaming Chat model (all optional because we fill in defaults).\n */\nexport interface FakeStreamingChatModelFields extends BaseChatModelParams {\n /** Milliseconds to pause between fallback char-by-char chunks */\n sleep?: number;\n\n /** Full AI messages to fall back to when no `chunks` supplied */\n responses?: BaseMessage[];\n\n /** Exact chunks to emit (can include tool-call deltas) */\n chunks?: AIMessageChunk[];\n\n /** How tool specs are formatted in `bindTools` */\n toolStyle?: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\";\n\n /** Throw this error instead of streaming (useful in tests) */\n thrownErrorString?: string;\n}\n\nexport class FakeChatModel extends BaseChatModel {\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake\";\n }\n\n async _generate(\n messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (options?.stop?.length) {\n return {\n generations: [\n {\n message: new AIMessage(options.stop[0]),\n text: options.stop[0],\n },\n ],\n };\n }\n const text = messages\n .map((m) => {\n if (typeof m.content === \"string\") {\n return m.content;\n }\n return JSON.stringify(m.content, null, 2);\n })\n .join(\"\\n\");\n await runManager?.handleLLMNewToken(text);\n return {\n generations: [\n {\n message: new AIMessage(text),\n text,\n },\n ],\n llmOutput: {},\n };\n }\n}\n\nexport class FakeStreamingChatModel extends BaseChatModel<FakeStreamingChatModelCallOptions> {\n sleep = 50;\n\n responses: BaseMessage[] = [];\n\n chunks: AIMessageChunk[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n thrownErrorString?: string;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n constructor({\n sleep = 50,\n responses = [],\n chunks = [],\n toolStyle = \"openai\",\n thrownErrorString,\n ...rest\n }: FakeStreamingChatModelFields & BaseLLMParams) {\n super(rest);\n this.sleep = sleep;\n this.responses = responses;\n this.chunks = chunks;\n this.toolStyle = toolStyle;\n this.thrownErrorString = thrownErrorString;\n }\n\n _llmType() {\n return \"fake\";\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n /* creating a *new* instance – mirrors LangChain .bind semantics for type-safety and avoiding noise */\n const next = new FakeStreamingChatModel({\n sleep: this.sleep,\n responses: this.responses,\n chunks: this.chunks,\n toolStyle: this.toolStyle,\n thrownErrorString: this.thrownErrorString,\n });\n next.tools = merged;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n async _generate(\n messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n\n const content = this.responses?.[0]?.content ?? messages[0].content ?? \"\";\n\n const generation: ChatResult = {\n generations: [\n {\n text: \"\",\n message: new AIMessage({\n content,\n tool_calls: this.chunks?.[0]?.tool_calls,\n }),\n },\n ],\n };\n\n return generation;\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n if (this.chunks?.length) {\n for (const msgChunk of this.chunks) {\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: msgChunk.content,\n tool_calls: msgChunk.tool_calls,\n additional_kwargs: msgChunk.additional_kwargs ?? {},\n }),\n text: msgChunk.content?.toString() ?? \"\",\n });\n\n yield cg;\n await runManager?.handleLLMNewToken(\n msgChunk.content as string,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n return;\n }\n\n const fallback =\n this.responses?.[0] ??\n new AIMessage(\n typeof _messages[0].content === \"string\" ? _messages[0].content : \"\"\n );\n const text = typeof fallback.content === \"string\" ? fallback.content : \"\";\n\n for (const ch of text) {\n await new Promise((r) => setTimeout(r, this.sleep));\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({ content: ch }),\n text: ch,\n });\n yield cg;\n await runManager?.handleLLMNewToken(\n ch,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n }\n}\n\n/**\n * Interface for the input parameters specific to the Fake List Chat model.\n */\nexport interface FakeChatInput extends BaseChatModelParams {\n /** Responses to return */\n responses: string[];\n\n /** Time to sleep in milliseconds between responses */\n sleep?: number;\n\n emitCustomEvent?: boolean;\n}\n\nexport interface FakeListChatModelCallOptions extends BaseChatModelCallOptions {\n thrownErrorString?: string;\n}\n\n/**\n * A fake Chat Model that returns a predefined list of responses. It can be used\n * for testing purposes.\n * @example\n * ```typescript\n * const chat = new FakeListChatModel({\n * responses: [\"I'll callback later.\", \"You 'console' them!\"]\n * });\n *\n * const firstMessage = new HumanMessage(\"You want to hear a JavaScript joke?\");\n * const secondMessage = new HumanMessage(\"How do you cheer up a JavaScript developer?\");\n *\n * // Call the chat model with a message and log the response\n * const firstResponse = await chat.call([firstMessage]);\n * console.log({ firstResponse });\n *\n * const secondResponse = await chat.call([secondMessage]);\n * console.log({ secondResponse });\n * ```\n */\nexport class FakeListChatModel extends BaseChatModel<FakeListChatModelCallOptions> {\n static lc_name() {\n return \"FakeListChatModel\";\n }\n\n lc_serializable = true;\n\n responses: string[];\n\n i = 0;\n\n sleep?: number;\n\n emitCustomEvent = false;\n\n constructor(params: FakeChatInput) {\n super(params);\n const { responses, sleep, emitCustomEvent } = params;\n this.responses = responses;\n this.sleep = sleep;\n this.emitCustomEvent = emitCustomEvent ?? this.emitCustomEvent;\n }\n\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake-list\";\n }\n\n async _generate(\n _messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n if (options?.stop?.length) {\n return {\n generations: [this._formatGeneration(options.stop[0])],\n };\n } else {\n const response = this._currentResponse();\n this._incrementResponse();\n\n return {\n generations: [this._formatGeneration(response)],\n llmOutput: {},\n };\n }\n }\n\n _formatGeneration(text: string) {\n return {\n message: new AIMessage(text),\n text,\n };\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const response = this._currentResponse();\n this._incrementResponse();\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n for await (const text of response) {\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n const chunk = this._createResponseChunk(text);\n yield chunk;\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(text);\n }\n }\n\n async _sleepIfRequested() {\n if (this.sleep !== undefined) {\n await this._sleep();\n }\n }\n\n async _sleep() {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), this.sleep);\n });\n }\n\n _createResponseChunk(text: string): ChatGenerationChunk {\n return new ChatGenerationChunk({\n message: new AIMessageChunk({ content: text }),\n text,\n });\n }\n\n _currentResponse() {\n return this.responses[this.i];\n }\n\n _incrementResponse() {\n if (this.i < this.responses.length - 1) {\n this.i += 1;\n } else {\n this.i = 0;\n }\n }\n\n withStructuredOutput<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, false>\n | InteropZodType<RunOutput>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, true>\n | InteropZodType<RunOutput>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, boolean>\n | InteropZodType<RunOutput>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n _config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n { raw: BaseMessage; parsed: RunOutput }\n > {\n return RunnableLambda.from(async (input) => {\n const message = await this.invoke(input);\n if (message.tool_calls?.[0]?.args) {\n return message.tool_calls[0].args as RunOutput;\n }\n if (typeof message.content === \"string\") {\n return JSON.parse(message.content);\n }\n throw new Error(\"No structured output found\");\n }) as Runnable;\n }\n}\n"],"mappings":";;;;;;;;AAwDA,IAAa,gBAAb,cAAmCA,kDAAc;CAC/C,oBAAoB;AAClB,SAAO,CAAE;CACV;CAED,WAAmB;AACjB,SAAO;CACR;CAED,MAAM,UACJC,UACAC,SACAC,YACqB;AACrB,MAAI,SAAS,MAAM,OACjB,QAAO,EACL,aAAa,CACX;GACE,SAAS,IAAIC,qBAAU,QAAQ,KAAK;GACpC,MAAM,QAAQ,KAAK;EACpB,CACF,EACF;EAEH,MAAM,OAAO,SACV,IAAI,CAAC,MAAM;AACV,OAAI,OAAO,EAAE,YAAY,SACvB,QAAO,EAAE;AAEX,UAAO,KAAK,UAAU,EAAE,SAAS,MAAM,EAAE;EAC1C,EAAC,CACD,KAAK,KAAK;EACb,MAAM,YAAY,kBAAkB,KAAK;AACzC,SAAO;GACL,aAAa,CACX;IACE,SAAS,IAAIA,qBAAU;IACvB;GACD,CACF;GACD,WAAW,CAAE;EACd;CACF;AACF;AAED,IAAa,yBAAb,MAAa,+BAA+BJ,kDAAiD;CAC3F,QAAQ;CAER,YAA2B,CAAE;CAE7B,SAA2B,CAAE;CAE7B,YAA2D;CAE3D;CAEA,AAAQ,QAAuC,CAAE;CAEjD,YAAY,EACV,QAAQ,IACR,YAAY,CAAE,GACd,SAAS,CAAE,GACX,YAAY,UACZ,kBACA,GAAG,MAC0C,EAAE;EAC/C,MAAM,KAAK;EACX,KAAK,QAAQ;EACb,KAAK,YAAY;EACjB,KAAK,SAAS;EACd,KAAK,YAAY;EACjB,KAAK,oBAAoB;CAC1B;CAED,WAAW;AACT,SAAO;CACR;CAED,UAAUK,OAAsC;EAC9C,MAAM,SAAS,CAAC,GAAG,KAAK,OAAO,GAAG,KAAM;EAExC,MAAM,YAAY,OAAO,IAAI,CAAC,MAAM;AAClC,WAAQ,KAAK,WAAb;IACE,KAAK,SACH,QAAO;KACL,MAAM;KACN,UAAU;MACR,MAAM,EAAE;MACR,aAAa,EAAE;MACf,YAAYC,uCAAa,EAAE,OAAO;KACnC;IACF;IACH,KAAK,YACH,QAAO;KACL,MAAM,EAAE;KACR,aAAa,EAAE;KACf,cAAcA,uCAAa,EAAE,OAAO;IACrC;IACH,KAAK,UACH,QAAO,EACL,UAAU;KACR,MAAM,EAAE;KACR,aAAa,EAAE;KACf,aAAaA,uCAAa,EAAE,OAAO;IACpC,EACF;IACH,KAAK,SACH,QAAO;KACL,MAAM,EAAE;KACR,aAAa,EAAE;KACf,YAAYA,uCAAa,EAAE,OAAO;IACnC;IACH,QACE,OAAM,IAAI,MAAM,CAAC,wBAAwB,EAAE,KAAK,WAAW;GAC9D;EACF,EAAC;EAEF,MAAM,UACJ,KAAK,cAAc,WACf,CAAC,EAAE,sBAAsB,UAAW,CAAC,IACrC;EAGN,MAAM,OAAO,IAAI,uBAAuB;GACtC,OAAO,KAAK;GACZ,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,WAAW,KAAK;GAChB,mBAAmB,KAAK;EACzB;EACD,KAAK,QAAQ;AAEb,SAAO,KAAK,WAAW,EAAE,OAAO,QAAS,EAA6B;CACvE;CAED,MAAM,UACJL,UACAM,UACAC,aACqB;AACrB,MAAI,KAAK,kBACP,OAAM,IAAI,MAAM,KAAK;EAGvB,MAAM,UAAU,KAAK,YAAY,IAAI,WAAW,SAAS,GAAG,WAAW;EAEvE,MAAMC,aAAyB,EAC7B,aAAa,CACX;GACE,MAAM;GACN,SAAS,IAAIL,qBAAU;IACrB;IACA,YAAY,KAAK,SAAS,IAAI;GAC/B;EACF,CACF,EACF;AAED,SAAO;CACR;CAED,OAAO,sBACLM,WACAH,UACAJ,YACqC;AACrC,MAAI,KAAK,kBACP,OAAM,IAAI,MAAM,KAAK;AAEvB,MAAI,KAAK,QAAQ,QAAQ;AACvB,QAAK,MAAM,YAAY,KAAK,QAAQ;IAClC,MAAM,KAAK,IAAIQ,oCAAoB;KACjC,SAAS,IAAIC,0BAAe;MAC1B,SAAS,SAAS;MAClB,YAAY,SAAS;MACrB,mBAAmB,SAAS,qBAAqB,CAAE;KACpD;KACD,MAAM,SAAS,SAAS,UAAU,IAAI;IACvC;IAED,MAAM;IACN,MAAM,YAAY,kBAChB,SAAS,SACT,QACA,QACA,QACA,QACA,EAAE,OAAO,GAAI,EACd;GACF;AACD;EACD;EAED,MAAM,WACJ,KAAK,YAAY,MACjB,IAAIR,qBACF,OAAO,UAAU,GAAG,YAAY,WAAW,UAAU,GAAG,UAAU;EAEtE,MAAM,OAAO,OAAO,SAAS,YAAY,WAAW,SAAS,UAAU;AAEvE,OAAK,MAAM,MAAM,MAAM;GACrB,MAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,KAAK,MAAM;GAClD,MAAM,KAAK,IAAIO,oCAAoB;IACjC,SAAS,IAAIC,0BAAe,EAAE,SAAS,GAAI;IAC3C,MAAM;GACP;GACD,MAAM;GACN,MAAM,YAAY,kBAChB,IACA,QACA,QACA,QACA,QACA,EAAE,OAAO,GAAI,EACd;EACF;CACF;AACF;;;;;;;;;;;;;;;;;;;;;AAuCD,IAAa,oBAAb,cAAuCZ,kDAA4C;CACjF,OAAO,UAAU;AACf,SAAO;CACR;CAED,kBAAkB;CAElB;CAEA,IAAI;CAEJ;CAEA,kBAAkB;CAElB,YAAYa,QAAuB;EACjC,MAAM,OAAO;EACb,MAAM,EAAE,WAAW,OAAO,iBAAiB,GAAG;EAC9C,KAAK,YAAY;EACjB,KAAK,QAAQ;EACb,KAAK,kBAAkB,mBAAmB,KAAK;CAChD;CAED,oBAAoB;AAClB,SAAO,CAAE;CACV;CAED,WAAmB;AACjB,SAAO;CACR;CAED,MAAM,UACJH,WACAR,SACAC,YACqB;EACrB,MAAM,KAAK,mBAAmB;AAC9B,MAAI,SAAS,kBACX,OAAM,IAAI,MAAM,QAAQ;AAE1B,MAAI,KAAK,iBACP,MAAM,YAAY,kBAAkB,mBAAmB,EACrD,SAAS,KACV,EAAC;AAGJ,MAAI,SAAS,MAAM,OACjB,QAAO,EACL,aAAa,CAAC,KAAK,kBAAkB,QAAQ,KAAK,GAAG,AAAC,EACvD;OACI;GACL,MAAM,WAAW,KAAK,kBAAkB;GACxC,KAAK,oBAAoB;AAEzB,UAAO;IACL,aAAa,CAAC,KAAK,kBAAkB,SAAS,AAAC;IAC/C,WAAW,CAAE;GACd;EACF;CACF;CAED,kBAAkBW,MAAc;AAC9B,SAAO;GACL,SAAS,IAAIV,qBAAU;GACvB;EACD;CACF;CAED,OAAO,sBACLM,WACAK,SACAZ,YACqC;EACrC,MAAM,WAAW,KAAK,kBAAkB;EACxC,KAAK,oBAAoB;AACzB,MAAI,KAAK,iBACP,MAAM,YAAY,kBAAkB,mBAAmB,EACrD,SAAS,KACV,EAAC;AAGJ,aAAW,MAAM,QAAQ,UAAU;GACjC,MAAM,KAAK,mBAAmB;AAC9B,OAAI,SAAS,kBACX,OAAM,IAAI,MAAM,QAAQ;GAE1B,MAAM,QAAQ,KAAK,qBAAqB,KAAK;GAC7C,MAAM;GAED,YAAY,kBAAkB,KAAK;EACzC;CACF;CAED,MAAM,oBAAoB;AACxB,MAAI,KAAK,UAAU,QACjB,MAAM,KAAK,QAAQ;CAEtB;CAED,MAAM,SAAS;AACb,SAAO,IAAI,QAAc,CAAC,YAAY;GACpC,WAAW,MAAM,SAAS,EAAE,KAAK,MAAM;EACxC;CACF;CAED,qBAAqBW,MAAmC;AACtD,SAAO,IAAIH,oCAAoB;GAC7B,SAAS,IAAIC,0BAAe,EAAE,SAAS,KAAM;GAC7C;EACD;CACF;CAED,mBAAmB;AACjB,SAAO,KAAK,UAAU,KAAK;CAC5B;CAED,qBAAqB;AACnB,MAAI,KAAK,IAAI,KAAK,UAAU,SAAS,GACnC,KAAK,KAAK;OAEV,KAAK,IAAI;CAEZ;CA0BD,qBAIEI,SAKAC,SAMI;AACJ,SAAOC,4BAAe,KAAK,OAAO,UAAU;GAC1C,MAAM,UAAU,MAAM,KAAK,OAAO,MAAM;AACxC,OAAI,QAAQ,aAAa,IAAI,KAC3B,QAAO,QAAQ,WAAW,GAAG;AAE/B,OAAI,OAAO,QAAQ,YAAY,SAC7B,QAAO,KAAK,MAAM,QAAQ,QAAQ;AAEpC,SAAM,IAAI,MAAM;EACjB,EAAC;CACH;AACF"}