@tambo-ai/react 0.67.1 → 0.69.0

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 (424) hide show
  1. package/README.md +3 -5
  2. package/dist/context-helpers/context-helpers.test.js +16 -4
  3. package/dist/context-helpers/context-helpers.test.js.map +1 -1
  4. package/dist/context-helpers/current-interactables-context-helper.d.ts +2 -2
  5. package/dist/context-helpers/current-interactables-context-helper.d.ts.map +1 -1
  6. package/dist/context-helpers/current-interactables-context-helper.js +31 -12
  7. package/dist/context-helpers/current-interactables-context-helper.js.map +1 -1
  8. package/dist/context-helpers/registry.d.ts +2 -2
  9. package/dist/context-helpers/registry.d.ts.map +1 -1
  10. package/dist/context-helpers/registry.js.map +1 -1
  11. package/dist/context-helpers/types.d.ts +2 -2
  12. package/dist/context-helpers/types.d.ts.map +1 -1
  13. package/dist/context-helpers/types.js.map +1 -1
  14. package/dist/hoc/with-tambo-interactable.d.ts +50 -4
  15. package/dist/hoc/with-tambo-interactable.d.ts.map +1 -1
  16. package/dist/hoc/with-tambo-interactable.js +20 -5
  17. package/dist/hoc/with-tambo-interactable.js.map +1 -1
  18. package/dist/hooks/use-component-state.d.ts +3 -8
  19. package/dist/hooks/use-component-state.d.ts.map +1 -1
  20. package/dist/hooks/use-component-state.js +8 -0
  21. package/dist/hooks/use-component-state.js.map +1 -1
  22. package/dist/hooks/use-component-state.test.js +37 -0
  23. package/dist/hooks/use-component-state.test.js.map +1 -1
  24. package/dist/hooks/use-message-images.test.js +174 -37
  25. package/dist/hooks/use-message-images.test.js.map +1 -1
  26. package/dist/hooks/use-tambo-threads.js +1 -1
  27. package/dist/hooks/use-tambo-threads.js.map +1 -1
  28. package/dist/hooks/use-tambo-voice.d.ts +1 -1
  29. package/dist/hooks/use-tambo-voice.js +1 -1
  30. package/dist/hooks/use-tambo-voice.js.map +1 -1
  31. package/dist/hooks/use-tambo-voice.test.d.ts +2 -0
  32. package/dist/hooks/use-tambo-voice.test.d.ts.map +1 -0
  33. package/dist/hooks/use-tambo-voice.test.js +239 -0
  34. package/dist/hooks/use-tambo-voice.test.js.map +1 -0
  35. package/dist/index.d.ts +2 -2
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/mcp/elicitation.d.ts.map +1 -1
  39. package/dist/mcp/elicitation.js +12 -0
  40. package/dist/mcp/elicitation.js.map +1 -1
  41. package/dist/mcp/elicitation.test.js +8 -1
  42. package/dist/mcp/elicitation.test.js.map +1 -1
  43. package/dist/mcp/mcp-client.d.ts +6 -10
  44. package/dist/mcp/mcp-client.d.ts.map +1 -1
  45. package/dist/mcp/mcp-client.js.map +1 -1
  46. package/dist/mcp/mcp-constants.d.ts +19 -0
  47. package/dist/mcp/mcp-constants.d.ts.map +1 -0
  48. package/dist/mcp/mcp-constants.js +21 -0
  49. package/dist/mcp/mcp-constants.js.map +1 -0
  50. package/dist/mcp/mcp-hooks.d.ts +21 -40
  51. package/dist/mcp/mcp-hooks.d.ts.map +1 -1
  52. package/dist/mcp/mcp-hooks.js +130 -39
  53. package/dist/mcp/mcp-hooks.js.map +1 -1
  54. package/dist/mcp/mcp-hooks.test.js +431 -5
  55. package/dist/mcp/mcp-hooks.test.js.map +1 -1
  56. package/dist/mcp/tambo-mcp-provider.d.ts +7 -0
  57. package/dist/mcp/tambo-mcp-provider.d.ts.map +1 -1
  58. package/dist/mcp/tambo-mcp-provider.js +205 -155
  59. package/dist/mcp/tambo-mcp-provider.js.map +1 -1
  60. package/dist/mcp/tambo-mcp-provider.test.js +37 -0
  61. package/dist/mcp/tambo-mcp-provider.test.js.map +1 -1
  62. package/dist/model/component-metadata.d.ts +54 -21
  63. package/dist/model/component-metadata.d.ts.map +1 -1
  64. package/dist/model/component-metadata.js.map +1 -1
  65. package/dist/model/tambo-interactable.d.ts +13 -5
  66. package/dist/model/tambo-interactable.d.ts.map +1 -1
  67. package/dist/model/tambo-interactable.js.map +1 -1
  68. package/dist/providers/__tests__/thread-input-resource-resolution.test.d.ts +2 -0
  69. package/dist/providers/__tests__/thread-input-resource-resolution.test.d.ts.map +1 -0
  70. package/dist/providers/__tests__/thread-input-resource-resolution.test.js +592 -0
  71. package/dist/providers/__tests__/thread-input-resource-resolution.test.js.map +1 -0
  72. package/dist/providers/index.d.ts +1 -1
  73. package/dist/providers/index.d.ts.map +1 -1
  74. package/dist/providers/index.js.map +1 -1
  75. package/dist/providers/tambo-client-provider.d.ts +8 -0
  76. package/dist/providers/tambo-client-provider.d.ts.map +1 -1
  77. package/dist/providers/tambo-client-provider.js +10 -11
  78. package/dist/providers/tambo-client-provider.js.map +1 -1
  79. package/dist/providers/tambo-client-provider.test.d.ts +2 -0
  80. package/dist/providers/tambo-client-provider.test.d.ts.map +1 -0
  81. package/dist/providers/tambo-client-provider.test.js +208 -0
  82. package/dist/providers/tambo-client-provider.test.js.map +1 -0
  83. package/dist/providers/tambo-context-attachment-provider.d.ts +34 -92
  84. package/dist/providers/tambo-context-attachment-provider.d.ts.map +1 -1
  85. package/dist/providers/tambo-context-attachment-provider.js +62 -105
  86. package/dist/providers/tambo-context-attachment-provider.js.map +1 -1
  87. package/dist/providers/tambo-context-attachment-provider.test.js +229 -463
  88. package/dist/providers/tambo-context-attachment-provider.test.js.map +1 -1
  89. package/dist/providers/tambo-interactable-provider-partial-updates.test.js +22 -21
  90. package/dist/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
  91. package/dist/providers/tambo-interactable-provider.d.ts +5 -2
  92. package/dist/providers/tambo-interactable-provider.d.ts.map +1 -1
  93. package/dist/providers/tambo-interactable-provider.js +126 -17
  94. package/dist/providers/tambo-interactable-provider.js.map +1 -1
  95. package/dist/providers/tambo-interactable-provider.test.js +242 -0
  96. package/dist/providers/tambo-interactable-provider.test.js.map +1 -1
  97. package/dist/providers/tambo-interactables-additional-context.test.js +2 -5
  98. package/dist/providers/tambo-interactables-additional-context.test.js.map +1 -1
  99. package/dist/providers/tambo-provider.d.ts +2 -3
  100. package/dist/providers/tambo-provider.d.ts.map +1 -1
  101. package/dist/providers/tambo-provider.js +6 -5
  102. package/dist/providers/tambo-provider.js.map +1 -1
  103. package/dist/providers/tambo-registry-provider.test.js +16 -0
  104. package/dist/providers/tambo-registry-provider.test.js.map +1 -1
  105. package/dist/providers/tambo-registry-schema-compat.test.js +31 -0
  106. package/dist/providers/tambo-registry-schema-compat.test.js.map +1 -1
  107. package/dist/providers/tambo-thread-input-provider.d.ts +1 -1
  108. package/dist/providers/tambo-thread-input-provider.d.ts.map +1 -1
  109. package/dist/providers/tambo-thread-input-provider.js +26 -4
  110. package/dist/providers/tambo-thread-input-provider.js.map +1 -1
  111. package/dist/providers/tambo-thread-provider-initial-messages.test.js +84 -2
  112. package/dist/providers/tambo-thread-provider-initial-messages.test.js.map +1 -1
  113. package/dist/providers/tambo-thread-provider.d.ts.map +1 -1
  114. package/dist/providers/tambo-thread-provider.js +53 -42
  115. package/dist/providers/tambo-thread-provider.js.map +1 -1
  116. package/dist/providers/tambo-thread-provider.test.js +368 -262
  117. package/dist/providers/tambo-thread-provider.test.js.map +1 -1
  118. package/dist/schema/index.d.ts +1 -1
  119. package/dist/schema/index.d.ts.map +1 -1
  120. package/dist/schema/index.js +2 -1
  121. package/dist/schema/index.js.map +1 -1
  122. package/dist/schema/json-schema.d.ts +7 -0
  123. package/dist/schema/json-schema.d.ts.map +1 -1
  124. package/dist/schema/json-schema.js +40 -29
  125. package/dist/schema/json-schema.js.map +1 -1
  126. package/dist/schema/json-schema.test.d.ts +2 -0
  127. package/dist/schema/json-schema.test.d.ts.map +1 -0
  128. package/dist/schema/json-schema.test.js +204 -0
  129. package/dist/schema/json-schema.test.js.map +1 -0
  130. package/dist/schema/schema.test.js +237 -0
  131. package/dist/schema/schema.test.js.map +1 -1
  132. package/dist/schema/standard-schema.d.ts +1 -0
  133. package/dist/schema/standard-schema.d.ts.map +1 -1
  134. package/dist/schema/standard-schema.js +18 -13
  135. package/dist/schema/standard-schema.js.map +1 -1
  136. package/dist/schema/standard-schema.test.d.ts +2 -0
  137. package/dist/schema/standard-schema.test.d.ts.map +1 -0
  138. package/dist/schema/standard-schema.test.js +165 -0
  139. package/dist/schema/standard-schema.test.js.map +1 -0
  140. package/dist/schema/validate.test.js +149 -0
  141. package/dist/schema/validate.test.js.map +1 -1
  142. package/dist/schema/zod.d.ts +7 -4
  143. package/dist/schema/zod.d.ts.map +1 -1
  144. package/dist/schema/zod.js +65 -22
  145. package/dist/schema/zod.js.map +1 -1
  146. package/dist/schema/zod.test.js +112 -0
  147. package/dist/schema/zod.test.js.map +1 -1
  148. package/dist/setupTests.js +3 -0
  149. package/dist/setupTests.js.map +1 -1
  150. package/dist/testing/tools.d.ts +4 -1
  151. package/dist/testing/tools.d.ts.map +1 -1
  152. package/dist/testing/tools.js +6 -1
  153. package/dist/testing/tools.js.map +1 -1
  154. package/dist/util/generate-component.d.ts.map +1 -1
  155. package/dist/util/generate-component.js +18 -3
  156. package/dist/util/generate-component.js.map +1 -1
  157. package/dist/util/generate-component.test.d.ts +2 -0
  158. package/dist/util/generate-component.test.d.ts.map +1 -0
  159. package/dist/util/generate-component.test.js +340 -0
  160. package/dist/util/generate-component.test.js.map +1 -0
  161. package/dist/util/is-promise.d.ts +9 -0
  162. package/dist/util/is-promise.d.ts.map +1 -0
  163. package/dist/util/is-promise.js +20 -0
  164. package/dist/util/is-promise.js.map +1 -0
  165. package/dist/util/is-promise.test.d.ts +2 -0
  166. package/dist/util/is-promise.test.d.ts.map +1 -0
  167. package/dist/util/is-promise.test.js +48 -0
  168. package/dist/util/is-promise.test.js.map +1 -0
  169. package/dist/util/message-builder.d.ts +3 -1
  170. package/dist/util/message-builder.d.ts.map +1 -1
  171. package/dist/util/message-builder.js +20 -3
  172. package/dist/util/message-builder.js.map +1 -1
  173. package/dist/util/message-builder.test.js +269 -0
  174. package/dist/util/message-builder.test.js.map +1 -1
  175. package/dist/util/query-utils.test.d.ts +2 -0
  176. package/dist/util/query-utils.test.d.ts.map +1 -0
  177. package/dist/util/query-utils.test.js +382 -0
  178. package/dist/util/query-utils.test.js.map +1 -0
  179. package/dist/util/registry-validators.d.ts.map +1 -1
  180. package/dist/util/registry-validators.js +7 -0
  181. package/dist/util/registry-validators.js.map +1 -1
  182. package/dist/util/registry-validators.test.js +57 -0
  183. package/dist/util/registry-validators.test.js.map +1 -1
  184. package/dist/util/registry.d.ts.map +1 -1
  185. package/dist/util/registry.js +9 -0
  186. package/dist/util/registry.js.map +1 -1
  187. package/dist/util/registry.test.js +323 -1
  188. package/dist/util/registry.test.js.map +1 -1
  189. package/dist/util/resource-content-resolver.d.ts +20 -0
  190. package/dist/util/resource-content-resolver.d.ts.map +1 -0
  191. package/dist/util/resource-content-resolver.js +93 -0
  192. package/dist/util/resource-content-resolver.js.map +1 -0
  193. package/dist/util/resource-content-resolver.test.d.ts +2 -0
  194. package/dist/util/resource-content-resolver.test.d.ts.map +1 -0
  195. package/dist/util/resource-content-resolver.test.js +254 -0
  196. package/dist/util/resource-content-resolver.test.js.map +1 -0
  197. package/dist/util/resource-validators.test.d.ts +2 -0
  198. package/dist/util/resource-validators.test.d.ts.map +1 -0
  199. package/dist/util/resource-validators.test.js +90 -0
  200. package/dist/util/resource-validators.test.js.map +1 -0
  201. package/dist/util/tool-caller.d.ts +2 -2
  202. package/dist/util/tool-caller.d.ts.map +1 -1
  203. package/dist/util/tool-caller.js +8 -8
  204. package/dist/util/tool-caller.js.map +1 -1
  205. package/dist/util/validate-component-name.test.d.ts +2 -0
  206. package/dist/util/validate-component-name.test.d.ts.map +1 -0
  207. package/dist/util/validate-component-name.test.js +35 -0
  208. package/dist/util/validate-component-name.test.js.map +1 -0
  209. package/esm/context-helpers/context-helpers.test.js +16 -4
  210. package/esm/context-helpers/context-helpers.test.js.map +1 -1
  211. package/esm/context-helpers/current-interactables-context-helper.d.ts +2 -2
  212. package/esm/context-helpers/current-interactables-context-helper.d.ts.map +1 -1
  213. package/esm/context-helpers/current-interactables-context-helper.js +31 -12
  214. package/esm/context-helpers/current-interactables-context-helper.js.map +1 -1
  215. package/esm/context-helpers/registry.d.ts +2 -2
  216. package/esm/context-helpers/registry.d.ts.map +1 -1
  217. package/esm/context-helpers/registry.js.map +1 -1
  218. package/esm/context-helpers/types.d.ts +2 -2
  219. package/esm/context-helpers/types.d.ts.map +1 -1
  220. package/esm/context-helpers/types.js.map +1 -1
  221. package/esm/hoc/with-tambo-interactable.d.ts +50 -4
  222. package/esm/hoc/with-tambo-interactable.d.ts.map +1 -1
  223. package/esm/hoc/with-tambo-interactable.js +20 -5
  224. package/esm/hoc/with-tambo-interactable.js.map +1 -1
  225. package/esm/hooks/use-component-state.d.ts +3 -8
  226. package/esm/hooks/use-component-state.d.ts.map +1 -1
  227. package/esm/hooks/use-component-state.js +8 -0
  228. package/esm/hooks/use-component-state.js.map +1 -1
  229. package/esm/hooks/use-component-state.test.js +37 -0
  230. package/esm/hooks/use-component-state.test.js.map +1 -1
  231. package/esm/hooks/use-message-images.test.js +174 -37
  232. package/esm/hooks/use-message-images.test.js.map +1 -1
  233. package/esm/hooks/use-tambo-threads.js +1 -1
  234. package/esm/hooks/use-tambo-threads.js.map +1 -1
  235. package/esm/hooks/use-tambo-voice.d.ts +1 -1
  236. package/esm/hooks/use-tambo-voice.js +1 -1
  237. package/esm/hooks/use-tambo-voice.js.map +1 -1
  238. package/esm/hooks/use-tambo-voice.test.d.ts +2 -0
  239. package/esm/hooks/use-tambo-voice.test.d.ts.map +1 -0
  240. package/esm/hooks/use-tambo-voice.test.js +234 -0
  241. package/esm/hooks/use-tambo-voice.test.js.map +1 -0
  242. package/esm/index.d.ts +2 -2
  243. package/esm/index.d.ts.map +1 -1
  244. package/esm/index.js.map +1 -1
  245. package/esm/mcp/elicitation.d.ts.map +1 -1
  246. package/esm/mcp/elicitation.js +12 -0
  247. package/esm/mcp/elicitation.js.map +1 -1
  248. package/esm/mcp/elicitation.test.js +8 -1
  249. package/esm/mcp/elicitation.test.js.map +1 -1
  250. package/esm/mcp/mcp-client.d.ts +6 -10
  251. package/esm/mcp/mcp-client.d.ts.map +1 -1
  252. package/esm/mcp/mcp-client.js.map +1 -1
  253. package/esm/mcp/mcp-constants.d.ts +19 -0
  254. package/esm/mcp/mcp-constants.d.ts.map +1 -0
  255. package/esm/mcp/mcp-constants.js +18 -0
  256. package/esm/mcp/mcp-constants.js.map +1 -0
  257. package/esm/mcp/mcp-hooks.d.ts +21 -40
  258. package/esm/mcp/mcp-hooks.d.ts.map +1 -1
  259. package/esm/mcp/mcp-hooks.js +97 -40
  260. package/esm/mcp/mcp-hooks.js.map +1 -1
  261. package/esm/mcp/mcp-hooks.test.js +431 -5
  262. package/esm/mcp/mcp-hooks.test.js.map +1 -1
  263. package/esm/mcp/tambo-mcp-provider.d.ts +7 -0
  264. package/esm/mcp/tambo-mcp-provider.d.ts.map +1 -1
  265. package/esm/mcp/tambo-mcp-provider.js +204 -154
  266. package/esm/mcp/tambo-mcp-provider.js.map +1 -1
  267. package/esm/mcp/tambo-mcp-provider.test.js +37 -0
  268. package/esm/mcp/tambo-mcp-provider.test.js.map +1 -1
  269. package/esm/model/component-metadata.d.ts +54 -21
  270. package/esm/model/component-metadata.d.ts.map +1 -1
  271. package/esm/model/component-metadata.js.map +1 -1
  272. package/esm/model/tambo-interactable.d.ts +13 -5
  273. package/esm/model/tambo-interactable.d.ts.map +1 -1
  274. package/esm/model/tambo-interactable.js.map +1 -1
  275. package/esm/providers/__tests__/thread-input-resource-resolution.test.d.ts +2 -0
  276. package/esm/providers/__tests__/thread-input-resource-resolution.test.d.ts.map +1 -0
  277. package/esm/providers/__tests__/thread-input-resource-resolution.test.js +587 -0
  278. package/esm/providers/__tests__/thread-input-resource-resolution.test.js.map +1 -0
  279. package/esm/providers/index.d.ts +1 -1
  280. package/esm/providers/index.d.ts.map +1 -1
  281. package/esm/providers/index.js.map +1 -1
  282. package/esm/providers/tambo-client-provider.d.ts +8 -0
  283. package/esm/providers/tambo-client-provider.d.ts.map +1 -1
  284. package/esm/providers/tambo-client-provider.js +11 -12
  285. package/esm/providers/tambo-client-provider.js.map +1 -1
  286. package/esm/providers/tambo-client-provider.test.d.ts +2 -0
  287. package/esm/providers/tambo-client-provider.test.d.ts.map +1 -0
  288. package/esm/providers/tambo-client-provider.test.js +203 -0
  289. package/esm/providers/tambo-client-provider.test.js.map +1 -0
  290. package/esm/providers/tambo-context-attachment-provider.d.ts +34 -92
  291. package/esm/providers/tambo-context-attachment-provider.d.ts.map +1 -1
  292. package/esm/providers/tambo-context-attachment-provider.js +63 -106
  293. package/esm/providers/tambo-context-attachment-provider.js.map +1 -1
  294. package/esm/providers/tambo-context-attachment-provider.test.js +230 -464
  295. package/esm/providers/tambo-context-attachment-provider.test.js.map +1 -1
  296. package/esm/providers/tambo-interactable-provider-partial-updates.test.js +22 -21
  297. package/esm/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -1
  298. package/esm/providers/tambo-interactable-provider.d.ts +5 -2
  299. package/esm/providers/tambo-interactable-provider.d.ts.map +1 -1
  300. package/esm/providers/tambo-interactable-provider.js +126 -17
  301. package/esm/providers/tambo-interactable-provider.js.map +1 -1
  302. package/esm/providers/tambo-interactable-provider.test.js +242 -0
  303. package/esm/providers/tambo-interactable-provider.test.js.map +1 -1
  304. package/esm/providers/tambo-interactables-additional-context.test.js +2 -5
  305. package/esm/providers/tambo-interactables-additional-context.test.js.map +1 -1
  306. package/esm/providers/tambo-provider.d.ts +2 -3
  307. package/esm/providers/tambo-provider.d.ts.map +1 -1
  308. package/esm/providers/tambo-provider.js +6 -5
  309. package/esm/providers/tambo-provider.js.map +1 -1
  310. package/esm/providers/tambo-registry-provider.test.js +16 -0
  311. package/esm/providers/tambo-registry-provider.test.js.map +1 -1
  312. package/esm/providers/tambo-registry-schema-compat.test.js +31 -0
  313. package/esm/providers/tambo-registry-schema-compat.test.js.map +1 -1
  314. package/esm/providers/tambo-thread-input-provider.d.ts +1 -1
  315. package/esm/providers/tambo-thread-input-provider.d.ts.map +1 -1
  316. package/esm/providers/tambo-thread-input-provider.js +26 -4
  317. package/esm/providers/tambo-thread-input-provider.js.map +1 -1
  318. package/esm/providers/tambo-thread-provider-initial-messages.test.js +84 -2
  319. package/esm/providers/tambo-thread-provider-initial-messages.test.js.map +1 -1
  320. package/esm/providers/tambo-thread-provider.d.ts.map +1 -1
  321. package/esm/providers/tambo-thread-provider.js +53 -42
  322. package/esm/providers/tambo-thread-provider.js.map +1 -1
  323. package/esm/providers/tambo-thread-provider.test.js +368 -262
  324. package/esm/providers/tambo-thread-provider.test.js.map +1 -1
  325. package/esm/schema/index.d.ts +1 -1
  326. package/esm/schema/index.d.ts.map +1 -1
  327. package/esm/schema/index.js +1 -1
  328. package/esm/schema/index.js.map +1 -1
  329. package/esm/schema/json-schema.d.ts +7 -0
  330. package/esm/schema/json-schema.d.ts.map +1 -1
  331. package/esm/schema/json-schema.js +11 -1
  332. package/esm/schema/json-schema.js.map +1 -1
  333. package/esm/schema/json-schema.test.d.ts +2 -0
  334. package/esm/schema/json-schema.test.d.ts.map +1 -0
  335. package/esm/schema/json-schema.test.js +202 -0
  336. package/esm/schema/json-schema.test.js.map +1 -0
  337. package/esm/schema/schema.test.js +238 -1
  338. package/esm/schema/schema.test.js.map +1 -1
  339. package/esm/schema/standard-schema.d.ts +1 -0
  340. package/esm/schema/standard-schema.d.ts.map +1 -1
  341. package/esm/schema/standard-schema.js +18 -13
  342. package/esm/schema/standard-schema.js.map +1 -1
  343. package/esm/schema/standard-schema.test.d.ts +2 -0
  344. package/esm/schema/standard-schema.test.d.ts.map +1 -0
  345. package/esm/schema/standard-schema.test.js +130 -0
  346. package/esm/schema/standard-schema.test.js.map +1 -0
  347. package/esm/schema/validate.test.js +149 -0
  348. package/esm/schema/validate.test.js.map +1 -1
  349. package/esm/schema/zod.d.ts +7 -4
  350. package/esm/schema/zod.d.ts.map +1 -1
  351. package/esm/schema/zod.js +65 -22
  352. package/esm/schema/zod.js.map +1 -1
  353. package/esm/schema/zod.test.js +113 -1
  354. package/esm/schema/zod.test.js.map +1 -1
  355. package/esm/setupTests.js +3 -0
  356. package/esm/setupTests.js.map +1 -1
  357. package/esm/testing/tools.d.ts +4 -1
  358. package/esm/testing/tools.d.ts.map +1 -1
  359. package/esm/testing/tools.js +6 -1
  360. package/esm/testing/tools.js.map +1 -1
  361. package/esm/util/generate-component.d.ts.map +1 -1
  362. package/esm/util/generate-component.js +18 -3
  363. package/esm/util/generate-component.js.map +1 -1
  364. package/esm/util/generate-component.test.d.ts +2 -0
  365. package/esm/util/generate-component.test.d.ts.map +1 -0
  366. package/esm/util/generate-component.test.js +302 -0
  367. package/esm/util/generate-component.test.js.map +1 -0
  368. package/esm/util/is-promise.d.ts +9 -0
  369. package/esm/util/is-promise.d.ts.map +1 -0
  370. package/esm/util/is-promise.js +17 -0
  371. package/esm/util/is-promise.js.map +1 -0
  372. package/esm/util/is-promise.test.d.ts +2 -0
  373. package/esm/util/is-promise.test.d.ts.map +1 -0
  374. package/esm/util/is-promise.test.js +46 -0
  375. package/esm/util/is-promise.test.js.map +1 -0
  376. package/esm/util/message-builder.d.ts +3 -1
  377. package/esm/util/message-builder.d.ts.map +1 -1
  378. package/esm/util/message-builder.js +20 -3
  379. package/esm/util/message-builder.js.map +1 -1
  380. package/esm/util/message-builder.test.js +269 -0
  381. package/esm/util/message-builder.test.js.map +1 -1
  382. package/esm/util/query-utils.test.d.ts +2 -0
  383. package/esm/util/query-utils.test.d.ts.map +1 -0
  384. package/esm/util/query-utils.test.js +380 -0
  385. package/esm/util/query-utils.test.js.map +1 -0
  386. package/esm/util/registry-validators.d.ts.map +1 -1
  387. package/esm/util/registry-validators.js +7 -0
  388. package/esm/util/registry-validators.js.map +1 -1
  389. package/esm/util/registry-validators.test.js +57 -0
  390. package/esm/util/registry-validators.test.js.map +1 -1
  391. package/esm/util/registry.d.ts.map +1 -1
  392. package/esm/util/registry.js +9 -0
  393. package/esm/util/registry.js.map +1 -1
  394. package/esm/util/registry.test.js +324 -2
  395. package/esm/util/registry.test.js.map +1 -1
  396. package/esm/util/resource-content-resolver.d.ts +20 -0
  397. package/esm/util/resource-content-resolver.d.ts.map +1 -0
  398. package/esm/util/resource-content-resolver.js +89 -0
  399. package/esm/util/resource-content-resolver.js.map +1 -0
  400. package/esm/util/resource-content-resolver.test.d.ts +2 -0
  401. package/esm/util/resource-content-resolver.test.d.ts.map +1 -0
  402. package/esm/util/resource-content-resolver.test.js +252 -0
  403. package/esm/util/resource-content-resolver.test.js.map +1 -0
  404. package/esm/util/resource-validators.test.d.ts +2 -0
  405. package/esm/util/resource-validators.test.d.ts.map +1 -0
  406. package/esm/util/resource-validators.test.js +88 -0
  407. package/esm/util/resource-validators.test.js.map +1 -0
  408. package/esm/util/tool-caller.d.ts +2 -2
  409. package/esm/util/tool-caller.d.ts.map +1 -1
  410. package/esm/util/tool-caller.js +8 -8
  411. package/esm/util/tool-caller.js.map +1 -1
  412. package/esm/util/validate-component-name.test.d.ts +2 -0
  413. package/esm/util/validate-component-name.test.d.ts.map +1 -0
  414. package/esm/util/validate-component-name.test.js +33 -0
  415. package/esm/util/validate-component-name.test.js.map +1 -0
  416. package/package.json +15 -23
  417. package/dist/schema/alias.d.ts +0 -3
  418. package/dist/schema/alias.d.ts.map +0 -1
  419. package/dist/schema/alias.js +0 -6
  420. package/dist/schema/alias.js.map +0 -1
  421. package/esm/schema/alias.d.ts +0 -3
  422. package/esm/schema/alias.d.ts.map +0 -1
  423. package/esm/schema/alias.js +0 -13
  424. package/esm/schema/alias.js.map +0 -1
@@ -323,6 +323,243 @@ describe("schema utilities", () => {
323
323
  expect(params.length).toBeGreaterThanOrEqual(1);
324
324
  expect(params[0].name).toBe("param1");
325
325
  });
326
+ it("handles toolSchema with JSON Schema directly", () => {
327
+ const tool = {
328
+ name: "test-tool",
329
+ description: "Test tool",
330
+ tool: jest.fn(),
331
+ toolSchema: {
332
+ type: "object",
333
+ properties: {
334
+ query: { type: "string", description: "Search query" },
335
+ },
336
+ required: ["query"],
337
+ },
338
+ };
339
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
340
+ // JSON Schema in toolSchema should return params wrapped
341
+ expect(params.length).toBeGreaterThanOrEqual(1);
342
+ });
343
+ });
344
+ describe("edge cases and error handling", () => {
345
+ it("returns empty params when inputSchema is unknown type", () => {
346
+ // Create a tool with an invalid inputSchema that isn't Standard Schema or JSON Schema
347
+ const tool = {
348
+ name: "test-tool",
349
+ description: "Test tool",
350
+ tool: jest.fn(),
351
+ inputSchema: "invalid-schema", // Not a valid schema
352
+ outputSchema: z4.void(),
353
+ };
354
+ const consoleSpy = jest.spyOn(console, "warn").mockImplementation();
355
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
356
+ consoleSpy.mockRestore();
357
+ expect(params).toEqual([]);
358
+ });
359
+ it("throws when toolSchema is undefined", () => {
360
+ // Create a tool with toolSchema that has undefined toolSchema
361
+ const tool = {
362
+ name: "test-tool",
363
+ description: "Test tool",
364
+ tool: jest.fn(),
365
+ toolSchema: undefined,
366
+ };
367
+ expect(() => (0, schema_1.getParametersFromToolSchema)(tool)).toThrow("Unable to determine parameters from zod function schema");
368
+ });
369
+ it("throws when toolSchema args are not recognized", () => {
370
+ // Create a tool with toolSchema that is not a function schema or JSON schema
371
+ // This causes getArgsFromToolSchema to attempt extraction but fail
372
+ const tool = {
373
+ name: "test-tool",
374
+ description: "Test tool",
375
+ tool: jest.fn(),
376
+ toolSchema: { notASchema: true },
377
+ };
378
+ // This throws because it's not a Zod function schema
379
+ expect(() => (0, schema_1.getParametersFromToolSchema)(tool)).toThrow("Unable to determine parameters from zod function schema");
380
+ });
381
+ });
382
+ describe("toolSchema with JSON Schema tuple", () => {
383
+ it("handles toolSchema with JSON Schema array/tuple directly", () => {
384
+ const tool = {
385
+ name: "test-tool",
386
+ description: "Test tool",
387
+ tool: jest.fn(),
388
+ // JSON Schema tuple format
389
+ toolSchema: {
390
+ type: "array",
391
+ items: [
392
+ { type: "string", description: "First param" },
393
+ { type: "number", description: "Second param" },
394
+ ],
395
+ },
396
+ };
397
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
398
+ // JSON Schema tuples should be extracted as positional params
399
+ expect(params).toHaveLength(2);
400
+ expect(params[0].name).toBe("param1");
401
+ expect(params[0].type).toBe("string");
402
+ expect(params[0].description).toBe("First param");
403
+ expect(params[1].name).toBe("param2");
404
+ expect(params[1].type).toBe("number");
405
+ });
406
+ it("handles toolSchema with JSON Schema prefixItems (2020-12 format)", () => {
407
+ const tool = {
408
+ name: "test-tool",
409
+ description: "Test tool",
410
+ tool: jest.fn(),
411
+ // JSON Schema 2020-12 tuple format
412
+ toolSchema: {
413
+ type: "array",
414
+ prefixItems: [
415
+ { type: "boolean", description: "Flag" },
416
+ { type: "string" },
417
+ ],
418
+ },
419
+ };
420
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
421
+ expect(params).toHaveLength(2);
422
+ expect(params[0].name).toBe("param1");
423
+ expect(params[0].type).toBe("boolean");
424
+ expect(params[0].description).toBe("Flag");
425
+ expect(params[1].name).toBe("param2");
426
+ expect(params[1].type).toBe("string");
427
+ });
428
+ it("handles toolSchema with non-tuple JSON Schema (fallback)", () => {
429
+ const tool = {
430
+ name: "test-tool",
431
+ description: "Test tool",
432
+ tool: jest.fn(),
433
+ // Non-tuple JSON Schema - should be wrapped as single param
434
+ toolSchema: {
435
+ type: "object",
436
+ properties: {
437
+ name: { type: "string" },
438
+ },
439
+ },
440
+ };
441
+ const params = (0, schema_1.getParametersFromToolSchema)(tool);
442
+ // Non-tuple schemas should be wrapped as a single param
443
+ expect(params).toHaveLength(1);
444
+ expect(params[0].name).toBe("param1");
445
+ expect(params[0].type).toBe("object");
446
+ });
447
+ });
448
+ });
449
+ describe("schemaToJsonSchema", () => {
450
+ it("returns JSON Schema as-is when already a JSON Schema", () => {
451
+ const jsonSchema = {
452
+ type: "object",
453
+ properties: {
454
+ name: { type: "string" },
455
+ },
456
+ };
457
+ const result = (0, schema_1.schemaToJsonSchema)(jsonSchema);
458
+ expect(result).toBe(jsonSchema); // Same reference
459
+ });
460
+ it("converts Zod 4 schema to JSON Schema", () => {
461
+ const zodSchema = z4.object({
462
+ name: z4.string(),
463
+ count: z4.number(),
464
+ });
465
+ const result = (0, schema_1.schemaToJsonSchema)(zodSchema);
466
+ expect(result).toEqual(expect.objectContaining({
467
+ type: "object",
468
+ properties: expect.objectContaining({
469
+ name: expect.objectContaining({ type: "string" }),
470
+ count: expect.objectContaining({ type: "number" }),
471
+ }),
472
+ }));
473
+ });
474
+ it("converts Zod 3 schema to JSON Schema", () => {
475
+ const zodSchema = z3.object({
476
+ title: z3.string(),
477
+ });
478
+ const result = (0, schema_1.schemaToJsonSchema)(zodSchema);
479
+ expect(result).toEqual(expect.objectContaining({
480
+ type: "object",
481
+ properties: expect.objectContaining({
482
+ title: expect.objectContaining({ type: "string" }),
483
+ }),
484
+ }));
485
+ });
486
+ });
487
+ describe("safeSchemaToJsonSchema", () => {
488
+ it("returns undefined for null schema", () => {
489
+ expect((0, schema_1.safeSchemaToJsonSchema)(null)).toBeUndefined();
490
+ });
491
+ it("returns undefined for undefined schema", () => {
492
+ expect((0, schema_1.safeSchemaToJsonSchema)(undefined)).toBeUndefined();
493
+ });
494
+ it("converts valid schema successfully", () => {
495
+ const zodSchema = z4.object({ name: z4.string() });
496
+ const result = (0, schema_1.safeSchemaToJsonSchema)(zodSchema);
497
+ expect(result).toEqual(expect.objectContaining({
498
+ type: "object",
499
+ properties: expect.objectContaining({
500
+ name: expect.objectContaining({ type: "string" }),
501
+ }),
502
+ }));
503
+ });
504
+ it("returns undefined and calls onError for invalid schema", () => {
505
+ // Create something that looks like a Standard Schema but will fail conversion
506
+ const brokenSchema = {
507
+ "~standard": {
508
+ version: 1,
509
+ vendor: "broken",
510
+ validate: () => ({ value: {} }),
511
+ },
512
+ };
513
+ const onError = jest.fn();
514
+ const consoleSpy = jest.spyOn(console, "error").mockImplementation();
515
+ const result = (0, schema_1.safeSchemaToJsonSchema)(brokenSchema, onError);
516
+ consoleSpy.mockRestore();
517
+ expect(result).toBeUndefined();
518
+ expect(onError).toHaveBeenCalled();
519
+ });
520
+ it("logs error to console when conversion fails", () => {
521
+ const brokenSchema = {
522
+ "~standard": {
523
+ version: 1,
524
+ vendor: "broken",
525
+ validate: () => ({ value: {} }),
526
+ },
527
+ };
528
+ const consoleSpy = jest.spyOn(console, "error").mockImplementation();
529
+ (0, schema_1.safeSchemaToJsonSchema)(brokenSchema);
530
+ expect(consoleSpy).toHaveBeenCalledWith("Error converting schema to JSON Schema:", expect.any(Error));
531
+ consoleSpy.mockRestore();
532
+ });
533
+ });
534
+ describe("hasInputSchema", () => {
535
+ it("returns true for tool with inputSchema", () => {
536
+ const tool = {
537
+ name: "test",
538
+ description: "test",
539
+ tool: jest.fn(),
540
+ inputSchema: z4.object({ a: z4.string() }),
541
+ outputSchema: z4.void(),
542
+ };
543
+ expect((0, schema_1.hasInputSchema)(tool)).toBe(true);
544
+ });
545
+ it("returns false for tool with toolSchema (deprecated)", () => {
546
+ const tool = {
547
+ name: "test",
548
+ description: "test",
549
+ tool: jest.fn(),
550
+ toolSchema: z3.function().args(z3.string()).returns(z3.void()),
551
+ };
552
+ expect((0, schema_1.hasInputSchema)(tool)).toBe(false);
553
+ });
554
+ it("returns false for tool with null inputSchema", () => {
555
+ const tool = {
556
+ name: "test",
557
+ description: "test",
558
+ tool: jest.fn(),
559
+ inputSchema: null,
560
+ outputSchema: z4.void(),
561
+ };
562
+ expect((0, schema_1.hasInputSchema)(tool)).toBe(false);
326
563
  });
327
564
  });
328
565
  });
@@ -1 +1 @@
1
- {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../src/schema/schema.test.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JSONSchema7 } from \"json-schema\";\nimport * as z3 from \"zod/v3\";\nimport * as z4 from \"zod/v4\";\nimport { TamboTool } from \"../model/component-metadata\";\nimport { looksLikeJSONSchema } from \"./json-schema\";\nimport { getParametersFromToolSchema } from \"./schema\";\nimport { isStandardSchema } from \"./standard-schema\";\n\ndescribe(\"schema utilities\", () => {\n describe(\"looksLikeJSONSchema\", () => {\n it(\"returns true for a basic JSON Schema object\", () => {\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n age: { type: \"integer\" },\n },\n required: [\"name\"],\n };\n\n expect(looksLikeJSONSchema(jsonSchema)).toBe(true);\n });\n\n it(\"returns true for a union type JSON Schema\", () => {\n const jsonSchema: JSONSchema7 = {\n type: [\"string\", \"null\"],\n };\n\n expect(looksLikeJSONSchema(jsonSchema)).toBe(true);\n });\n\n it(\"returns false for Standard Schema validators\", () => {\n const zodSchema = z4.object({\n name: z4.string(),\n });\n\n expect(isStandardSchema(zodSchema)).toBe(true);\n expect(looksLikeJSONSchema(zodSchema)).toBe(false);\n });\n\n it(\"returns false for arbitrary objects that do not resemble JSON Schema\", () => {\n const notSchema = {\n type: \"foo\",\n other: \"bar\",\n };\n\n expect(looksLikeJSONSchema(notSchema)).toBe(false);\n });\n });\n\n describe(\"getParametersFromToolSchema\", () => {\n describe(\"inputSchema interface (object schemas)\", () => {\n it(\"extracts parameters from Zod 4 object schema properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n query: z4.string().describe(\"Search query\"),\n limit: z4.number().describe(\"Max results\"),\n enabled: z4.boolean().optional().describe(\"Whether enabled\"),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(3);\n\n const queryParam = params.find((p) => p.name === \"query\");\n expect(queryParam).toBeDefined();\n expect(queryParam?.type).toBe(\"string\");\n expect(queryParam?.description).toBe(\"Search query\");\n expect(queryParam?.isRequired).toBe(true);\n\n const limitParam = params.find((p) => p.name === \"limit\");\n expect(limitParam).toBeDefined();\n expect(limitParam?.type).toBe(\"number\");\n expect(limitParam?.description).toBe(\"Max results\");\n expect(limitParam?.isRequired).toBe(true);\n\n const enabledParam = params.find((p) => p.name === \"enabled\");\n expect(enabledParam).toBeDefined();\n expect(enabledParam?.type).toBe(\"boolean\");\n // Optional fields are not required\n expect(enabledParam?.isRequired).toBe(false);\n });\n\n it(\"extracts parameters from Zod 3 object schema properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z3.object({\n name: z3.string().describe(\"User name\"),\n age: z3.number().optional(),\n }),\n outputSchema: z3.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(2);\n\n const nameParam = params.find((p) => p.name === \"name\");\n expect(nameParam).toBeDefined();\n expect(nameParam?.type).toBe(\"string\");\n expect(nameParam?.isRequired).toBe(true);\n\n const ageParam = params.find((p) => p.name === \"age\");\n expect(ageParam).toBeDefined();\n expect(ageParam?.type).toBe(\"number\");\n expect(ageParam?.isRequired).toBe(false);\n });\n\n it(\"extracts parameters from JSON Schema object properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Item ID\" },\n count: { type: \"number\", description: \"Item count\" },\n active: { type: \"boolean\" },\n },\n required: [\"id\"],\n } as JSONSchema7,\n outputSchema: {},\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(3);\n\n const idParam = params.find((p) => p.name === \"id\");\n expect(idParam).toBeDefined();\n expect(idParam?.type).toBe(\"string\");\n expect(idParam?.description).toBe(\"Item ID\");\n expect(idParam?.isRequired).toBe(true);\n\n const countParam = params.find((p) => p.name === \"count\");\n expect(countParam).toBeDefined();\n expect(countParam?.type).toBe(\"number\");\n expect(countParam?.isRequired).toBe(false);\n\n const activeParam = params.find((p) => p.name === \"active\");\n expect(activeParam).toBeDefined();\n expect(activeParam?.type).toBe(\"boolean\");\n expect(activeParam?.isRequired).toBe(false);\n });\n\n it(\"handles empty object schema\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({}),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n expect(params).toHaveLength(0);\n });\n\n it(\"handles nested object schemas\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n user: z4\n .object({\n name: z4.string(),\n email: z4.string(),\n })\n .describe(\"User info\"),\n options: z4.object({\n notify: z4.boolean(),\n }),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(2);\n\n const userParam = params.find((p) => p.name === \"user\");\n expect(userParam).toBeDefined();\n expect(userParam?.type).toBe(\"object\");\n expect(userParam?.description).toBe(\"User info\");\n\n const optionsParam = params.find((p) => p.name === \"options\");\n expect(optionsParam).toBeDefined();\n expect(optionsParam?.type).toBe(\"object\");\n });\n\n it(\"handles array properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n tags: z4.array(z4.string()).describe(\"List of tags\"),\n items: z4.array(z4.object({ id: z4.number() })),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(2);\n\n const tagsParam = params.find((p) => p.name === \"tags\");\n expect(tagsParam).toBeDefined();\n expect(tagsParam?.type).toBe(\"array\");\n expect(tagsParam?.description).toBe(\"List of tags\");\n\n const itemsParam = params.find((p) => p.name === \"items\");\n expect(itemsParam).toBeDefined();\n expect(itemsParam?.type).toBe(\"array\");\n });\n });\n\n describe(\"realistic inputSchema scenarios\", () => {\n it(\"handles enum properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n status: z4.enum([\"pending\", \"active\", \"completed\"]),\n priority: z4\n .enum([\"low\", \"medium\", \"high\"])\n .describe(\"Task priority\"),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(2);\n\n const statusParam = params.find((p) => p.name === \"status\");\n expect(statusParam).toBeDefined();\n expect(statusParam?.type).toBe(\"string\");\n expect(statusParam?.isRequired).toBe(true);\n\n const priorityParam = params.find((p) => p.name === \"priority\");\n expect(priorityParam).toBeDefined();\n expect(priorityParam?.type).toBe(\"string\");\n expect(priorityParam?.description).toBe(\"Task priority\");\n });\n\n it(\"handles nullable properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n name: z4.string().nullable().describe(\"Optional name\"),\n count: z4.number().nullable(),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(2);\n\n const nameParam = params.find((p) => p.name === \"name\");\n expect(nameParam).toBeDefined();\n expect(nameParam?.description).toBe(\"Optional name\");\n // Nullable fields are still required (they must be provided, even if null)\n expect(nameParam?.isRequired).toBe(true);\n });\n\n it(\"handles deeply nested schemas and preserves full schema\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n config: z4.object({\n database: z4.object({\n host: z4.string(),\n port: z4.number().optional(),\n }),\n }),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(1);\n expect(params[0].name).toBe(\"config\");\n expect(params[0].type).toBe(\"object\");\n // The full nested schema should be preserved\n expect(params[0].schema).toHaveProperty(\"properties\");\n });\n\n it(\"handles mixed required and optional fields correctly\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n required1: z4.string(),\n optional1: z4.string().optional(),\n required2: z4.number(),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(3);\n\n const required1 = params.find((p) => p.name === \"required1\");\n const optional1 = params.find((p) => p.name === \"optional1\");\n const required2 = params.find((p) => p.name === \"required2\");\n\n expect(required1?.isRequired).toBe(true);\n expect(optional1?.isRequired).toBe(false);\n expect(required2?.isRequired).toBe(true);\n });\n });\n\n describe(\"deprecated toolSchema interface (tuple/positional args)\", () => {\n it(\"extracts positional parameters from Zod 3 function schema\", () => {\n const tool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n toolSchema: z3\n .function()\n .args(\n z3.string().describe(\"First arg\"),\n z3.number().describe(\"Second arg\"),\n )\n .returns(z3.void()),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n // toolSchema uses positional params (param1, param2, etc.)\n expect(params.length).toBeGreaterThanOrEqual(1);\n expect(params[0].name).toBe(\"param1\");\n });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../src/schema/schema.test.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JSONSchema7 } from \"json-schema\";\nimport * as z3 from \"zod/v3\";\nimport * as z4 from \"zod/v4\";\nimport {\n TamboTool,\n TamboToolWithToolSchema,\n} from \"../model/component-metadata\";\nimport { looksLikeJSONSchema } from \"./json-schema\";\nimport {\n getParametersFromToolSchema,\n hasInputSchema,\n safeSchemaToJsonSchema,\n schemaToJsonSchema,\n} from \"./schema\";\nimport { isStandardSchema } from \"./standard-schema\";\n\ndescribe(\"schema utilities\", () => {\n describe(\"looksLikeJSONSchema\", () => {\n it(\"returns true for a basic JSON Schema object\", () => {\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n age: { type: \"integer\" },\n },\n required: [\"name\"],\n };\n\n expect(looksLikeJSONSchema(jsonSchema)).toBe(true);\n });\n\n it(\"returns true for a union type JSON Schema\", () => {\n const jsonSchema: JSONSchema7 = {\n type: [\"string\", \"null\"],\n };\n\n expect(looksLikeJSONSchema(jsonSchema)).toBe(true);\n });\n\n it(\"returns false for Standard Schema validators\", () => {\n const zodSchema = z4.object({\n name: z4.string(),\n });\n\n expect(isStandardSchema(zodSchema)).toBe(true);\n expect(looksLikeJSONSchema(zodSchema)).toBe(false);\n });\n\n it(\"returns false for arbitrary objects that do not resemble JSON Schema\", () => {\n const notSchema = {\n type: \"foo\",\n other: \"bar\",\n };\n\n expect(looksLikeJSONSchema(notSchema)).toBe(false);\n });\n });\n\n describe(\"getParametersFromToolSchema\", () => {\n describe(\"inputSchema interface (object schemas)\", () => {\n it(\"extracts parameters from Zod 4 object schema properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n query: z4.string().describe(\"Search query\"),\n limit: z4.number().describe(\"Max results\"),\n enabled: z4.boolean().optional().describe(\"Whether enabled\"),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(3);\n\n const queryParam = params.find((p) => p.name === \"query\");\n expect(queryParam).toBeDefined();\n expect(queryParam?.type).toBe(\"string\");\n expect(queryParam?.description).toBe(\"Search query\");\n expect(queryParam?.isRequired).toBe(true);\n\n const limitParam = params.find((p) => p.name === \"limit\");\n expect(limitParam).toBeDefined();\n expect(limitParam?.type).toBe(\"number\");\n expect(limitParam?.description).toBe(\"Max results\");\n expect(limitParam?.isRequired).toBe(true);\n\n const enabledParam = params.find((p) => p.name === \"enabled\");\n expect(enabledParam).toBeDefined();\n expect(enabledParam?.type).toBe(\"boolean\");\n // Optional fields are not required\n expect(enabledParam?.isRequired).toBe(false);\n });\n\n it(\"extracts parameters from Zod 3 object schema properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z3.object({\n name: z3.string().describe(\"User name\"),\n age: z3.number().optional(),\n }),\n outputSchema: z3.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(2);\n\n const nameParam = params.find((p) => p.name === \"name\");\n expect(nameParam).toBeDefined();\n expect(nameParam?.type).toBe(\"string\");\n expect(nameParam?.isRequired).toBe(true);\n\n const ageParam = params.find((p) => p.name === \"age\");\n expect(ageParam).toBeDefined();\n expect(ageParam?.type).toBe(\"number\");\n expect(ageParam?.isRequired).toBe(false);\n });\n\n it(\"extracts parameters from JSON Schema object properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: {\n type: \"object\",\n properties: {\n id: { type: \"string\", description: \"Item ID\" },\n count: { type: \"number\", description: \"Item count\" },\n active: { type: \"boolean\" },\n },\n required: [\"id\"],\n } as JSONSchema7,\n outputSchema: {},\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(3);\n\n const idParam = params.find((p) => p.name === \"id\");\n expect(idParam).toBeDefined();\n expect(idParam?.type).toBe(\"string\");\n expect(idParam?.description).toBe(\"Item ID\");\n expect(idParam?.isRequired).toBe(true);\n\n const countParam = params.find((p) => p.name === \"count\");\n expect(countParam).toBeDefined();\n expect(countParam?.type).toBe(\"number\");\n expect(countParam?.isRequired).toBe(false);\n\n const activeParam = params.find((p) => p.name === \"active\");\n expect(activeParam).toBeDefined();\n expect(activeParam?.type).toBe(\"boolean\");\n expect(activeParam?.isRequired).toBe(false);\n });\n\n it(\"handles empty object schema\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({}),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n expect(params).toHaveLength(0);\n });\n\n it(\"handles nested object schemas\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n user: z4\n .object({\n name: z4.string(),\n email: z4.string(),\n })\n .describe(\"User info\"),\n options: z4.object({\n notify: z4.boolean(),\n }),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(2);\n\n const userParam = params.find((p) => p.name === \"user\");\n expect(userParam).toBeDefined();\n expect(userParam?.type).toBe(\"object\");\n expect(userParam?.description).toBe(\"User info\");\n\n const optionsParam = params.find((p) => p.name === \"options\");\n expect(optionsParam).toBeDefined();\n expect(optionsParam?.type).toBe(\"object\");\n });\n\n it(\"handles array properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n tags: z4.array(z4.string()).describe(\"List of tags\"),\n items: z4.array(z4.object({ id: z4.number() })),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(2);\n\n const tagsParam = params.find((p) => p.name === \"tags\");\n expect(tagsParam).toBeDefined();\n expect(tagsParam?.type).toBe(\"array\");\n expect(tagsParam?.description).toBe(\"List of tags\");\n\n const itemsParam = params.find((p) => p.name === \"items\");\n expect(itemsParam).toBeDefined();\n expect(itemsParam?.type).toBe(\"array\");\n });\n });\n\n describe(\"realistic inputSchema scenarios\", () => {\n it(\"handles enum properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n status: z4.enum([\"pending\", \"active\", \"completed\"]),\n priority: z4\n .enum([\"low\", \"medium\", \"high\"])\n .describe(\"Task priority\"),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(2);\n\n const statusParam = params.find((p) => p.name === \"status\");\n expect(statusParam).toBeDefined();\n expect(statusParam?.type).toBe(\"string\");\n expect(statusParam?.isRequired).toBe(true);\n\n const priorityParam = params.find((p) => p.name === \"priority\");\n expect(priorityParam).toBeDefined();\n expect(priorityParam?.type).toBe(\"string\");\n expect(priorityParam?.description).toBe(\"Task priority\");\n });\n\n it(\"handles nullable properties\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n name: z4.string().nullable().describe(\"Optional name\"),\n count: z4.number().nullable(),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(2);\n\n const nameParam = params.find((p) => p.name === \"name\");\n expect(nameParam).toBeDefined();\n expect(nameParam?.description).toBe(\"Optional name\");\n // Nullable fields are still required (they must be provided, even if null)\n expect(nameParam?.isRequired).toBe(true);\n });\n\n it(\"handles deeply nested schemas and preserves full schema\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n config: z4.object({\n database: z4.object({\n host: z4.string(),\n port: z4.number().optional(),\n }),\n }),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(1);\n expect(params[0].name).toBe(\"config\");\n expect(params[0].type).toBe(\"object\");\n // The full nested schema should be preserved\n expect(params[0].schema).toHaveProperty(\"properties\");\n });\n\n it(\"handles mixed required and optional fields correctly\", () => {\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: z4.object({\n required1: z4.string(),\n optional1: z4.string().optional(),\n required2: z4.number(),\n }),\n outputSchema: z4.void(),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(3);\n\n const required1 = params.find((p) => p.name === \"required1\");\n const optional1 = params.find((p) => p.name === \"optional1\");\n const required2 = params.find((p) => p.name === \"required2\");\n\n expect(required1?.isRequired).toBe(true);\n expect(optional1?.isRequired).toBe(false);\n expect(required2?.isRequired).toBe(true);\n });\n });\n\n describe(\"deprecated toolSchema interface (tuple/positional args)\", () => {\n it(\"extracts positional parameters from Zod 3 function schema\", () => {\n const tool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n toolSchema: z3\n .function()\n .args(\n z3.string().describe(\"First arg\"),\n z3.number().describe(\"Second arg\"),\n )\n .returns(z3.void()),\n };\n\n const params = getParametersFromToolSchema(tool);\n\n // toolSchema uses positional params (param1, param2, etc.)\n expect(params.length).toBeGreaterThanOrEqual(1);\n expect(params[0].name).toBe(\"param1\");\n });\n\n it(\"handles toolSchema with JSON Schema directly\", () => {\n const tool: TamboToolWithToolSchema = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n toolSchema: {\n type: \"object\",\n properties: {\n query: { type: \"string\", description: \"Search query\" },\n },\n required: [\"query\"],\n } as JSONSchema7,\n };\n\n const params = getParametersFromToolSchema(tool);\n\n // JSON Schema in toolSchema should return params wrapped\n expect(params.length).toBeGreaterThanOrEqual(1);\n });\n });\n\n describe(\"edge cases and error handling\", () => {\n it(\"returns empty params when inputSchema is unknown type\", () => {\n // Create a tool with an invalid inputSchema that isn't Standard Schema or JSON Schema\n const tool: TamboTool = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n inputSchema: \"invalid-schema\" as any, // Not a valid schema\n outputSchema: z4.void(),\n };\n\n const consoleSpy = jest.spyOn(console, \"warn\").mockImplementation();\n const params = getParametersFromToolSchema(tool);\n consoleSpy.mockRestore();\n\n expect(params).toEqual([]);\n });\n\n it(\"throws when toolSchema is undefined\", () => {\n // Create a tool with toolSchema that has undefined toolSchema\n const tool: TamboToolWithToolSchema = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n toolSchema: undefined as any,\n };\n\n expect(() => getParametersFromToolSchema(tool)).toThrow(\n \"Unable to determine parameters from zod function schema\",\n );\n });\n\n it(\"throws when toolSchema args are not recognized\", () => {\n // Create a tool with toolSchema that is not a function schema or JSON schema\n // This causes getArgsFromToolSchema to attempt extraction but fail\n const tool: TamboToolWithToolSchema = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n toolSchema: { notASchema: true } as any,\n };\n\n // This throws because it's not a Zod function schema\n expect(() => getParametersFromToolSchema(tool)).toThrow(\n \"Unable to determine parameters from zod function schema\",\n );\n });\n });\n\n describe(\"toolSchema with JSON Schema tuple\", () => {\n it(\"handles toolSchema with JSON Schema array/tuple directly\", () => {\n const tool: TamboToolWithToolSchema = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n // JSON Schema tuple format\n toolSchema: {\n type: \"array\",\n items: [\n { type: \"string\", description: \"First param\" },\n { type: \"number\", description: \"Second param\" },\n ],\n } as JSONSchema7,\n };\n\n const params = getParametersFromToolSchema(tool);\n\n // JSON Schema tuples should be extracted as positional params\n expect(params).toHaveLength(2);\n expect(params[0].name).toBe(\"param1\");\n expect(params[0].type).toBe(\"string\");\n expect(params[0].description).toBe(\"First param\");\n expect(params[1].name).toBe(\"param2\");\n expect(params[1].type).toBe(\"number\");\n });\n\n it(\"handles toolSchema with JSON Schema prefixItems (2020-12 format)\", () => {\n const tool: TamboToolWithToolSchema = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n // JSON Schema 2020-12 tuple format\n toolSchema: {\n type: \"array\",\n prefixItems: [\n { type: \"boolean\", description: \"Flag\" },\n { type: \"string\" },\n ],\n } as JSONSchema7,\n };\n\n const params = getParametersFromToolSchema(tool);\n\n expect(params).toHaveLength(2);\n expect(params[0].name).toBe(\"param1\");\n expect(params[0].type).toBe(\"boolean\");\n expect(params[0].description).toBe(\"Flag\");\n expect(params[1].name).toBe(\"param2\");\n expect(params[1].type).toBe(\"string\");\n });\n\n it(\"handles toolSchema with non-tuple JSON Schema (fallback)\", () => {\n const tool: TamboToolWithToolSchema = {\n name: \"test-tool\",\n description: \"Test tool\",\n tool: jest.fn(),\n // Non-tuple JSON Schema - should be wrapped as single param\n toolSchema: {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n },\n } as JSONSchema7,\n };\n\n const params = getParametersFromToolSchema(tool);\n\n // Non-tuple schemas should be wrapped as a single param\n expect(params).toHaveLength(1);\n expect(params[0].name).toBe(\"param1\");\n expect(params[0].type).toBe(\"object\");\n });\n });\n });\n\n describe(\"schemaToJsonSchema\", () => {\n it(\"returns JSON Schema as-is when already a JSON Schema\", () => {\n const jsonSchema: JSONSchema7 = {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n },\n };\n\n const result = schemaToJsonSchema(jsonSchema);\n expect(result).toBe(jsonSchema); // Same reference\n });\n\n it(\"converts Zod 4 schema to JSON Schema\", () => {\n const zodSchema = z4.object({\n name: z4.string(),\n count: z4.number(),\n });\n\n const result = schemaToJsonSchema(zodSchema);\n\n expect(result).toEqual(\n expect.objectContaining({\n type: \"object\",\n properties: expect.objectContaining({\n name: expect.objectContaining({ type: \"string\" }),\n count: expect.objectContaining({ type: \"number\" }),\n }),\n }),\n );\n });\n\n it(\"converts Zod 3 schema to JSON Schema\", () => {\n const zodSchema = z3.object({\n title: z3.string(),\n });\n\n const result = schemaToJsonSchema(zodSchema);\n\n expect(result).toEqual(\n expect.objectContaining({\n type: \"object\",\n properties: expect.objectContaining({\n title: expect.objectContaining({ type: \"string\" }),\n }),\n }),\n );\n });\n });\n\n describe(\"safeSchemaToJsonSchema\", () => {\n it(\"returns undefined for null schema\", () => {\n expect(safeSchemaToJsonSchema(null)).toBeUndefined();\n });\n\n it(\"returns undefined for undefined schema\", () => {\n expect(safeSchemaToJsonSchema(undefined)).toBeUndefined();\n });\n\n it(\"converts valid schema successfully\", () => {\n const zodSchema = z4.object({ name: z4.string() });\n const result = safeSchemaToJsonSchema(zodSchema);\n\n expect(result).toEqual(\n expect.objectContaining({\n type: \"object\",\n properties: expect.objectContaining({\n name: expect.objectContaining({ type: \"string\" }),\n }),\n }),\n );\n });\n\n it(\"returns undefined and calls onError for invalid schema\", () => {\n // Create something that looks like a Standard Schema but will fail conversion\n const brokenSchema = {\n \"~standard\": {\n version: 1,\n vendor: \"broken\",\n validate: () => ({ value: {} }),\n },\n };\n\n const onError = jest.fn();\n const consoleSpy = jest.spyOn(console, \"error\").mockImplementation();\n\n const result = safeSchemaToJsonSchema(brokenSchema as any, onError);\n\n consoleSpy.mockRestore();\n\n expect(result).toBeUndefined();\n expect(onError).toHaveBeenCalled();\n });\n\n it(\"logs error to console when conversion fails\", () => {\n const brokenSchema = {\n \"~standard\": {\n version: 1,\n vendor: \"broken\",\n validate: () => ({ value: {} }),\n },\n };\n\n const consoleSpy = jest.spyOn(console, \"error\").mockImplementation();\n\n safeSchemaToJsonSchema(brokenSchema as any);\n\n expect(consoleSpy).toHaveBeenCalledWith(\n \"Error converting schema to JSON Schema:\",\n expect.any(Error),\n );\n\n consoleSpy.mockRestore();\n });\n });\n\n describe(\"hasInputSchema\", () => {\n it(\"returns true for tool with inputSchema\", () => {\n const tool: TamboTool = {\n name: \"test\",\n description: \"test\",\n tool: jest.fn(),\n inputSchema: z4.object({ a: z4.string() }),\n outputSchema: z4.void(),\n };\n\n expect(hasInputSchema(tool)).toBe(true);\n });\n\n it(\"returns false for tool with toolSchema (deprecated)\", () => {\n const tool: TamboToolWithToolSchema = {\n name: \"test\",\n description: \"test\",\n tool: jest.fn(),\n toolSchema: z3.function().args(z3.string()).returns(z3.void()),\n };\n\n expect(hasInputSchema(tool)).toBe(false);\n });\n\n it(\"returns false for tool with null inputSchema\", () => {\n const tool = {\n name: \"test\",\n description: \"test\",\n tool: jest.fn(),\n inputSchema: null,\n outputSchema: z4.void(),\n };\n\n expect(hasInputSchema(tool as any)).toBe(false);\n });\n });\n});\n"]}
@@ -4,6 +4,7 @@ import { StandardSchemaV1 } from "@standard-schema/spec";
4
4
  *
5
5
  * Standard Schema compliant validators have a `~standard` property containing
6
6
  * metadata about the schema including version, vendor, and validate function.
7
+ * Uses duck typing to avoid cross-version Zod compatibility issues.
7
8
  * @param obj - The object to check
8
9
  * @returns True if the object implements StandardSchemaV1
9
10
  * @example
@@ -1 +1 @@
1
- {"version":3,"file":"standard-schema.d.ts","sourceRoot":"","sources":["../../src/schema/standard-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAgBzD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,gBAAgB,CAEtE"}
1
+ {"version":3,"file":"standard-schema.d.ts","sourceRoot":"","sources":["../../src/schema/standard-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,gBAAgB,CAuBtE"}
@@ -1,23 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isStandardSchema = isStandardSchema;
4
- const alias_1 = require("./alias");
5
- const standardSchemaProps = alias_1.z.object({
6
- version: alias_1.z.literal(1),
7
- vendor: alias_1.z.string(),
8
- validate: alias_1.z.function({
9
- input: [alias_1.z.unknown()],
10
- output: alias_1.z.union([alias_1.z.unknown(), alias_1.z.promise(alias_1.z.unknown())]),
11
- }),
12
- });
13
- const standardSchemaObject = alias_1.z.object({
14
- "~standard": standardSchemaProps,
15
- });
16
4
  /**
17
5
  * Type guard to check if an object implements the Standard Schema interface.
18
6
  *
19
7
  * Standard Schema compliant validators have a `~standard` property containing
20
8
  * metadata about the schema including version, vendor, and validate function.
9
+ * Uses duck typing to avoid cross-version Zod compatibility issues.
21
10
  * @param obj - The object to check
22
11
  * @returns True if the object implements StandardSchemaV1
23
12
  * @example
@@ -32,6 +21,22 @@ const standardSchemaObject = alias_1.z.object({
32
21
  * ```
33
22
  */
34
23
  function isStandardSchema(obj) {
35
- return standardSchemaObject.safeParse(obj).success;
24
+ if (typeof obj !== "object" || obj === null) {
25
+ return false;
26
+ }
27
+ if (!("~standard" in obj)) {
28
+ return false;
29
+ }
30
+ const standard = obj["~standard"];
31
+ if (typeof standard !== "object" || standard === null) {
32
+ return false;
33
+ }
34
+ // Check required Standard Schema v1 properties
35
+ return ("version" in standard &&
36
+ standard.version === 1 &&
37
+ "vendor" in standard &&
38
+ typeof standard.vendor === "string" &&
39
+ "validate" in standard &&
40
+ typeof standard.validate === "function");
36
41
  }
37
42
  //# sourceMappingURL=standard-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standard-schema.js","sourceRoot":"","sources":["../../src/schema/standard-schema.ts"],"names":[],"mappings":";;AAkCA,4CAEC;AAnCD,mCAA4B;AAE5B,MAAM,mBAAmB,GAAG,SAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,SAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,SAAC,CAAC,MAAM,EAAE;IAClB,QAAQ,EAAE,SAAC,CAAC,QAAQ,CAAC;QACnB,KAAK,EAAE,CAAC,SAAC,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,EAAE,SAAC,CAAC,KAAK,CAAC,CAAC,SAAC,CAAC,OAAO,EAAE,EAAE,SAAC,CAAC,OAAO,CAAC,SAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;KACvD,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,SAAC,CAAC,MAAM,CAAC;IACpC,WAAW,EAAE,mBAAmB;CACjC,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,gBAAgB,CAAC,GAAY;IAC3C,OAAO,oBAAoB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AACrD,CAAC","sourcesContent":["import { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { z } from \"./alias\";\n\nconst standardSchemaProps = z.object({\n version: z.literal(1),\n vendor: z.string(),\n validate: z.function({\n input: [z.unknown()],\n output: z.union([z.unknown(), z.promise(z.unknown())]),\n }),\n});\n\nconst standardSchemaObject = z.object({\n \"~standard\": standardSchemaProps,\n});\n\n/**\n * Type guard to check if an object implements the Standard Schema interface.\n *\n * Standard Schema compliant validators have a `~standard` property containing\n * metadata about the schema including version, vendor, and validate function.\n * @param obj - The object to check\n * @returns True if the object implements StandardSchemaV1\n * @example\n * ```typescript\n * import { z } from \"zod/v4\";\n *\n * const zodSchema = z.object({ name: z.string() });\n * isStandardSchema(zodSchema); // true\n *\n * const jsonSchema = { type: \"object\", properties: { name: { type: \"string\" } } };\n * isStandardSchema(jsonSchema); // false\n * ```\n */\nexport function isStandardSchema(obj: unknown): obj is StandardSchemaV1 {\n return standardSchemaObject.safeParse(obj).success;\n}\n"]}
1
+ {"version":3,"file":"standard-schema.js","sourceRoot":"","sources":["../../src/schema/standard-schema.ts"],"names":[],"mappings":";;AAqBA,4CAuBC;AA1CD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,gBAAgB,CAAC,GAAY;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IAClC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+CAA+C;IAC/C,OAAO,CACL,SAAS,IAAI,QAAQ;QACrB,QAAQ,CAAC,OAAO,KAAK,CAAC;QACtB,QAAQ,IAAI,QAAQ;QACpB,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ;QACnC,UAAU,IAAI,QAAQ;QACtB,OAAO,QAAQ,CAAC,QAAQ,KAAK,UAAU,CACxC,CAAC;AACJ,CAAC","sourcesContent":["import { StandardSchemaV1 } from \"@standard-schema/spec\";\n\n/**\n * Type guard to check if an object implements the Standard Schema interface.\n *\n * Standard Schema compliant validators have a `~standard` property containing\n * metadata about the schema including version, vendor, and validate function.\n * Uses duck typing to avoid cross-version Zod compatibility issues.\n * @param obj - The object to check\n * @returns True if the object implements StandardSchemaV1\n * @example\n * ```typescript\n * import { z } from \"zod/v4\";\n *\n * const zodSchema = z.object({ name: z.string() });\n * isStandardSchema(zodSchema); // true\n *\n * const jsonSchema = { type: \"object\", properties: { name: { type: \"string\" } } };\n * isStandardSchema(jsonSchema); // false\n * ```\n */\nexport function isStandardSchema(obj: unknown): obj is StandardSchemaV1 {\n if (typeof obj !== \"object\" || obj === null) {\n return false;\n }\n\n if (!(\"~standard\" in obj)) {\n return false;\n }\n\n const standard = obj[\"~standard\"];\n if (typeof standard !== \"object\" || standard === null) {\n return false;\n }\n\n // Check required Standard Schema v1 properties\n return (\n \"version\" in standard &&\n standard.version === 1 &&\n \"vendor\" in standard &&\n typeof standard.vendor === \"string\" &&\n \"validate\" in standard &&\n typeof standard.validate === \"function\"\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=standard-schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-schema.test.d.ts","sourceRoot":"","sources":["../../src/schema/standard-schema.test.ts"],"names":[],"mappings":""}