@procedures/client 0.0.0-stage → 0.2.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 (777) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +832 -2
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/adapters/http/client/index.d.ts +11 -0
  6. package/dist/adapters/http/client/index.d.ts.map +1 -0
  7. package/dist/adapters/http/client/index.js +18 -0
  8. package/dist/adapters/http/client/index.js.map +1 -0
  9. package/dist/adapters/http/client/transport.d.ts +72 -0
  10. package/dist/adapters/http/client/transport.d.ts.map +1 -0
  11. package/dist/adapters/http/client/transport.js +282 -0
  12. package/dist/adapters/http/client/transport.js.map +1 -0
  13. package/dist/adapters/http/client/types.d.ts +27 -0
  14. package/dist/adapters/http/client/types.d.ts.map +1 -0
  15. package/dist/adapters/http/client/types.js +8 -0
  16. package/dist/adapters/http/client/types.js.map +1 -0
  17. package/dist/adapters/http/index.d.ts +7 -0
  18. package/dist/adapters/http/index.d.ts.map +1 -0
  19. package/dist/adapters/http/index.js +7 -0
  20. package/dist/adapters/http/index.js.map +1 -0
  21. package/dist/adapters/http/server/index.d.ts +9 -0
  22. package/dist/adapters/http/server/index.d.ts.map +1 -0
  23. package/dist/adapters/http/server/index.js +10 -0
  24. package/dist/adapters/http/server/index.js.map +1 -0
  25. package/dist/adapters/http/server/strategies.d.ts +39 -0
  26. package/dist/adapters/http/server/strategies.d.ts.map +1 -0
  27. package/dist/adapters/http/server/strategies.js +90 -0
  28. package/dist/adapters/http/server/strategies.js.map +1 -0
  29. package/dist/adapters/http/server/transport.d.ts +66 -0
  30. package/dist/adapters/http/server/transport.d.ts.map +1 -0
  31. package/dist/adapters/http/server/transport.js +562 -0
  32. package/dist/adapters/http/server/transport.js.map +1 -0
  33. package/dist/adapters/http/server/types.d.ts +71 -0
  34. package/dist/adapters/http/server/types.d.ts.map +1 -0
  35. package/dist/adapters/http/server/types.js +7 -0
  36. package/dist/adapters/http/server/types.js.map +1 -0
  37. package/dist/adapters/http/shared/constants.d.ts +95 -0
  38. package/dist/adapters/http/shared/constants.d.ts.map +1 -0
  39. package/dist/adapters/http/shared/constants.js +102 -0
  40. package/dist/adapters/http/shared/constants.js.map +1 -0
  41. package/dist/adapters/http/shared/errors.d.ts +78 -0
  42. package/dist/adapters/http/shared/errors.d.ts.map +1 -0
  43. package/dist/adapters/http/shared/errors.js +151 -0
  44. package/dist/adapters/http/shared/errors.js.map +1 -0
  45. package/dist/adapters/http/shared/headers.d.ts +122 -0
  46. package/dist/adapters/http/shared/headers.d.ts.map +1 -0
  47. package/dist/adapters/http/shared/headers.js +216 -0
  48. package/dist/adapters/http/shared/headers.js.map +1 -0
  49. package/dist/adapters/http/shared/index.d.ts +12 -0
  50. package/dist/adapters/http/shared/index.d.ts.map +1 -0
  51. package/dist/adapters/http/shared/index.js +17 -0
  52. package/dist/adapters/http/shared/index.js.map +1 -0
  53. package/dist/adapters/http/shared/status-codes.d.ts +92 -0
  54. package/dist/adapters/http/shared/status-codes.d.ts.map +1 -0
  55. package/dist/adapters/http/shared/status-codes.js +189 -0
  56. package/dist/adapters/http/shared/status-codes.js.map +1 -0
  57. package/dist/adapters/http/shared/strategies.d.ts +90 -0
  58. package/dist/adapters/http/shared/strategies.d.ts.map +1 -0
  59. package/dist/adapters/http/shared/strategies.js +180 -0
  60. package/dist/adapters/http/shared/strategies.js.map +1 -0
  61. package/dist/adapters/local/client/index.d.ts +8 -0
  62. package/dist/adapters/local/client/index.d.ts.map +1 -0
  63. package/dist/adapters/local/client/index.js +8 -0
  64. package/dist/adapters/local/client/index.js.map +1 -0
  65. package/dist/adapters/local/client/transport.d.ts +81 -0
  66. package/dist/adapters/local/client/transport.d.ts.map +1 -0
  67. package/dist/adapters/local/client/transport.js +172 -0
  68. package/dist/adapters/local/client/transport.js.map +1 -0
  69. package/dist/adapters/local/client/types.d.ts +39 -0
  70. package/dist/adapters/local/client/types.d.ts.map +1 -0
  71. package/dist/adapters/local/client/types.js +13 -0
  72. package/dist/adapters/local/client/types.js.map +1 -0
  73. package/dist/adapters/metadata.d.ts +10 -0
  74. package/dist/adapters/metadata.d.ts.map +1 -0
  75. package/dist/adapters/metadata.js +19 -0
  76. package/dist/adapters/metadata.js.map +1 -0
  77. package/dist/adapters/mock/client/builder.d.ts +35 -0
  78. package/dist/adapters/mock/client/builder.d.ts.map +1 -0
  79. package/dist/adapters/mock/client/builder.js +58 -0
  80. package/dist/adapters/mock/client/builder.js.map +1 -0
  81. package/dist/adapters/mock/client/index.d.ts +9 -0
  82. package/dist/adapters/mock/client/index.d.ts.map +1 -0
  83. package/dist/adapters/mock/client/index.js +10 -0
  84. package/dist/adapters/mock/client/index.js.map +1 -0
  85. package/dist/adapters/mock/client/transport.d.ts +149 -0
  86. package/dist/adapters/mock/client/transport.d.ts.map +1 -0
  87. package/dist/adapters/mock/client/transport.js +289 -0
  88. package/dist/adapters/mock/client/transport.js.map +1 -0
  89. package/dist/adapters/mock/client/types.d.ts +86 -0
  90. package/dist/adapters/mock/client/types.d.ts.map +1 -0
  91. package/dist/adapters/mock/client/types.js +7 -0
  92. package/dist/adapters/mock/client/types.js.map +1 -0
  93. package/dist/adapters/websocket/client/index.d.ts +9 -0
  94. package/dist/adapters/websocket/client/index.d.ts.map +1 -0
  95. package/dist/adapters/websocket/client/index.js +9 -0
  96. package/dist/adapters/websocket/client/index.js.map +1 -0
  97. package/dist/adapters/websocket/client/transport.d.ts +106 -0
  98. package/dist/adapters/websocket/client/transport.d.ts.map +1 -0
  99. package/dist/adapters/websocket/client/transport.js +647 -0
  100. package/dist/adapters/websocket/client/transport.js.map +1 -0
  101. package/dist/adapters/websocket/client/types.d.ts +192 -0
  102. package/dist/adapters/websocket/client/types.d.ts.map +1 -0
  103. package/dist/adapters/websocket/client/types.js +17 -0
  104. package/dist/adapters/websocket/client/types.js.map +1 -0
  105. package/dist/adapters/websocket/index.d.ts +8 -0
  106. package/dist/adapters/websocket/index.d.ts.map +1 -0
  107. package/dist/adapters/websocket/index.js +8 -0
  108. package/dist/adapters/websocket/index.js.map +1 -0
  109. package/dist/adapters/websocket/server/index.d.ts +8 -0
  110. package/dist/adapters/websocket/server/index.d.ts.map +1 -0
  111. package/dist/adapters/websocket/server/index.js +8 -0
  112. package/dist/adapters/websocket/server/index.js.map +1 -0
  113. package/dist/adapters/websocket/server/transport.d.ts +112 -0
  114. package/dist/adapters/websocket/server/transport.d.ts.map +1 -0
  115. package/dist/adapters/websocket/server/transport.js +619 -0
  116. package/dist/adapters/websocket/server/transport.js.map +1 -0
  117. package/dist/adapters/websocket/server/types.d.ts +140 -0
  118. package/dist/adapters/websocket/server/types.d.ts.map +1 -0
  119. package/dist/adapters/websocket/server/types.js +7 -0
  120. package/dist/adapters/websocket/server/types.js.map +1 -0
  121. package/dist/browser.d.ts +51 -0
  122. package/dist/browser.d.ts.map +1 -0
  123. package/dist/browser.js +89 -0
  124. package/dist/browser.js.map +1 -0
  125. package/dist/client/batch-executor.d.ts +160 -0
  126. package/dist/client/batch-executor.d.ts.map +1 -0
  127. package/dist/client/batch-executor.js +397 -0
  128. package/dist/client/batch-executor.js.map +1 -0
  129. package/dist/client/call-types.d.ts +271 -0
  130. package/dist/client/call-types.d.ts.map +1 -0
  131. package/dist/client/call-types.js +208 -0
  132. package/dist/client/call-types.js.map +1 -0
  133. package/dist/client/client.d.ts +525 -0
  134. package/dist/client/client.d.ts.map +1 -0
  135. package/dist/client/client.js +1011 -0
  136. package/dist/client/client.js.map +1 -0
  137. package/dist/client/consumption.d.ts +191 -0
  138. package/dist/client/consumption.d.ts.map +1 -0
  139. package/dist/client/consumption.js +98 -0
  140. package/dist/client/consumption.js.map +1 -0
  141. package/dist/client/context.d.ts +116 -0
  142. package/dist/client/context.d.ts.map +1 -0
  143. package/dist/client/context.js +111 -0
  144. package/dist/client/context.js.map +1 -0
  145. package/dist/client/errors/codes.d.ts +71 -0
  146. package/dist/client/errors/codes.d.ts.map +1 -0
  147. package/dist/client/errors/codes.js +81 -0
  148. package/dist/client/errors/codes.js.map +1 -0
  149. package/dist/client/errors/factory.d.ts +102 -0
  150. package/dist/client/errors/factory.d.ts.map +1 -0
  151. package/dist/client/errors/factory.js +210 -0
  152. package/dist/client/errors/factory.js.map +1 -0
  153. package/dist/client/errors/http-errors.d.ts +47 -0
  154. package/dist/client/errors/http-errors.d.ts.map +1 -0
  155. package/dist/client/errors/http-errors.js +548 -0
  156. package/dist/client/errors/http-errors.js.map +1 -0
  157. package/dist/client/errors/http-status.d.ts +73 -0
  158. package/dist/client/errors/http-status.d.ts.map +1 -0
  159. package/dist/client/errors/http-status.js +79 -0
  160. package/dist/client/errors/http-status.js.map +1 -0
  161. package/dist/client/errors/index.d.ts +36 -0
  162. package/dist/client/errors/index.d.ts.map +1 -0
  163. package/dist/client/errors/index.js +40 -0
  164. package/dist/client/errors/index.js.map +1 -0
  165. package/dist/client/errors/registry.d.ts +38 -0
  166. package/dist/client/errors/registry.d.ts.map +1 -0
  167. package/dist/client/errors/registry.js +535 -0
  168. package/dist/client/errors/registry.js.map +1 -0
  169. package/dist/client/errors/types.d.ts +112 -0
  170. package/dist/client/errors/types.d.ts.map +1 -0
  171. package/dist/client/errors/types.js +45 -0
  172. package/dist/client/errors/types.js.map +1 -0
  173. package/dist/client/index.d.ts +44 -0
  174. package/dist/client/index.d.ts.map +1 -0
  175. package/dist/client/index.js +36 -0
  176. package/dist/client/index.js.map +1 -0
  177. package/dist/client/middleware/auth.d.ts +90 -0
  178. package/dist/client/middleware/auth.d.ts.map +1 -0
  179. package/dist/client/middleware/auth.js +98 -0
  180. package/dist/client/middleware/auth.js.map +1 -0
  181. package/dist/client/middleware/batching.d.ts +102 -0
  182. package/dist/client/middleware/batching.d.ts.map +1 -0
  183. package/dist/client/middleware/batching.js +245 -0
  184. package/dist/client/middleware/batching.js.map +1 -0
  185. package/dist/client/middleware/cache.d.ts +124 -0
  186. package/dist/client/middleware/cache.d.ts.map +1 -0
  187. package/dist/client/middleware/cache.js +208 -0
  188. package/dist/client/middleware/cache.js.map +1 -0
  189. package/dist/client/middleware/circuit-breaker.d.ts +113 -0
  190. package/dist/client/middleware/circuit-breaker.d.ts.map +1 -0
  191. package/dist/client/middleware/circuit-breaker.js +236 -0
  192. package/dist/client/middleware/circuit-breaker.js.map +1 -0
  193. package/dist/client/middleware/contexts.d.ts +199 -0
  194. package/dist/client/middleware/contexts.d.ts.map +1 -0
  195. package/dist/client/middleware/contexts.js +74 -0
  196. package/dist/client/middleware/contexts.js.map +1 -0
  197. package/dist/client/middleware/items.d.ts +37 -0
  198. package/dist/client/middleware/items.d.ts.map +1 -0
  199. package/dist/client/middleware/items.js +100 -0
  200. package/dist/client/middleware/items.js.map +1 -0
  201. package/dist/client/middleware/lru.d.ts +32 -0
  202. package/dist/client/middleware/lru.d.ts.map +1 -0
  203. package/dist/client/middleware/lru.js +62 -0
  204. package/dist/client/middleware/lru.js.map +1 -0
  205. package/dist/client/middleware/pagination.d.ts +114 -0
  206. package/dist/client/middleware/pagination.d.ts.map +1 -0
  207. package/dist/client/middleware/pagination.js +148 -0
  208. package/dist/client/middleware/pagination.js.map +1 -0
  209. package/dist/client/middleware/rate-limit.d.ts +105 -0
  210. package/dist/client/middleware/rate-limit.d.ts.map +1 -0
  211. package/dist/client/middleware/rate-limit.js +222 -0
  212. package/dist/client/middleware/rate-limit.js.map +1 -0
  213. package/dist/client/middleware/retry.d.ts +100 -0
  214. package/dist/client/middleware/retry.d.ts.map +1 -0
  215. package/dist/client/middleware/retry.js +150 -0
  216. package/dist/client/middleware/retry.js.map +1 -0
  217. package/dist/client/middleware/timeout.d.ts +91 -0
  218. package/dist/client/middleware/timeout.d.ts.map +1 -0
  219. package/dist/client/middleware/timeout.js +253 -0
  220. package/dist/client/middleware/timeout.js.map +1 -0
  221. package/dist/client/middleware/tracing.d.ts +118 -0
  222. package/dist/client/middleware/tracing.d.ts.map +1 -0
  223. package/dist/client/middleware/tracing.js +152 -0
  224. package/dist/client/middleware/tracing.js.map +1 -0
  225. package/dist/client/route-resolver.d.ts +181 -0
  226. package/dist/client/route-resolver.d.ts.map +1 -0
  227. package/dist/client/route-resolver.js +300 -0
  228. package/dist/client/route-resolver.js.map +1 -0
  229. package/dist/client/typed-method.d.ts +29 -0
  230. package/dist/client/typed-method.d.ts.map +1 -0
  231. package/dist/client/typed-method.js +36 -0
  232. package/dist/client/typed-method.js.map +1 -0
  233. package/dist/client/typed.d.ts +102 -0
  234. package/dist/client/typed.d.ts.map +1 -0
  235. package/dist/client/typed.js +52 -0
  236. package/dist/client/typed.js.map +1 -0
  237. package/dist/client/types.d.ts +305 -0
  238. package/dist/client/types.d.ts.map +1 -0
  239. package/dist/client/types.js +26 -0
  240. package/dist/client/types.js.map +1 -0
  241. package/dist/client/validation/index.d.ts +34 -0
  242. package/dist/client/validation/index.d.ts.map +1 -0
  243. package/dist/client/validation/index.js +36 -0
  244. package/dist/client/validation/index.js.map +1 -0
  245. package/dist/client/validation/middleware.d.ts +82 -0
  246. package/dist/client/validation/middleware.d.ts.map +1 -0
  247. package/dist/client/validation/middleware.js +138 -0
  248. package/dist/client/validation/middleware.js.map +1 -0
  249. package/dist/client/validation/types.d.ts +118 -0
  250. package/dist/client/validation/types.d.ts.map +1 -0
  251. package/dist/client/validation/types.js +59 -0
  252. package/dist/client/validation/types.js.map +1 -0
  253. package/dist/collections/async/async-queue.d.ts +144 -0
  254. package/dist/collections/async/async-queue.d.ts.map +1 -0
  255. package/dist/collections/async/async-queue.js +347 -0
  256. package/dist/collections/async/async-queue.js.map +1 -0
  257. package/dist/collections/async/channels.d.ts +188 -0
  258. package/dist/collections/async/channels.d.ts.map +1 -0
  259. package/dist/collections/async/channels.js +312 -0
  260. package/dist/collections/async/channels.js.map +1 -0
  261. package/dist/collections/behaviors/bounded.d.ts +79 -0
  262. package/dist/collections/behaviors/bounded.d.ts.map +1 -0
  263. package/dist/collections/behaviors/bounded.js +384 -0
  264. package/dist/collections/behaviors/bounded.js.map +1 -0
  265. package/dist/collections/behaviors/evented.d.ts +154 -0
  266. package/dist/collections/behaviors/evented.d.ts.map +1 -0
  267. package/dist/collections/behaviors/evented.js +299 -0
  268. package/dist/collections/behaviors/evented.js.map +1 -0
  269. package/dist/collections/behaviors/lru.d.ts +84 -0
  270. package/dist/collections/behaviors/lru.d.ts.map +1 -0
  271. package/dist/collections/behaviors/lru.js +330 -0
  272. package/dist/collections/behaviors/lru.js.map +1 -0
  273. package/dist/collections/behaviors/readonly.d.ts +73 -0
  274. package/dist/collections/behaviors/readonly.d.ts.map +1 -0
  275. package/dist/collections/behaviors/readonly.js +158 -0
  276. package/dist/collections/behaviors/readonly.js.map +1 -0
  277. package/dist/collections/behaviors/safe.d.ts +163 -0
  278. package/dist/collections/behaviors/safe.d.ts.map +1 -0
  279. package/dist/collections/behaviors/safe.js +172 -0
  280. package/dist/collections/behaviors/safe.js.map +1 -0
  281. package/dist/collections/behaviors/synchronized.d.ts +88 -0
  282. package/dist/collections/behaviors/synchronized.d.ts.map +1 -0
  283. package/dist/collections/behaviors/synchronized.js +294 -0
  284. package/dist/collections/behaviors/synchronized.js.map +1 -0
  285. package/dist/collections/behaviors/ttl.d.ts +118 -0
  286. package/dist/collections/behaviors/ttl.d.ts.map +1 -0
  287. package/dist/collections/behaviors/ttl.js +338 -0
  288. package/dist/collections/behaviors/ttl.js.map +1 -0
  289. package/dist/collections/core/effects.d.ts +176 -0
  290. package/dist/collections/core/effects.d.ts.map +1 -0
  291. package/dist/collections/core/effects.js +180 -0
  292. package/dist/collections/core/effects.js.map +1 -0
  293. package/dist/collections/core/events.d.ts +192 -0
  294. package/dist/collections/core/events.d.ts.map +1 -0
  295. package/dist/collections/core/events.js +291 -0
  296. package/dist/collections/core/events.js.map +1 -0
  297. package/dist/collections/core/middleware.d.ts +231 -0
  298. package/dist/collections/core/middleware.d.ts.map +1 -0
  299. package/dist/collections/core/middleware.js +161 -0
  300. package/dist/collections/core/middleware.js.map +1 -0
  301. package/dist/collections/core/policies.d.ts +220 -0
  302. package/dist/collections/core/policies.d.ts.map +1 -0
  303. package/dist/collections/core/policies.js +48 -0
  304. package/dist/collections/core/policies.js.map +1 -0
  305. package/dist/collections/core/traits.d.ts +142 -0
  306. package/dist/collections/core/traits.d.ts.map +1 -0
  307. package/dist/collections/core/traits.js +8 -0
  308. package/dist/collections/core/traits.js.map +1 -0
  309. package/dist/collections/examples.d.ts +13 -0
  310. package/dist/collections/examples.d.ts.map +1 -0
  311. package/dist/collections/examples.js +302 -0
  312. package/dist/collections/examples.js.map +1 -0
  313. package/dist/collections/fx/collectors.d.ts +190 -0
  314. package/dist/collections/fx/collectors.d.ts.map +1 -0
  315. package/dist/collections/fx/collectors.js +369 -0
  316. package/dist/collections/fx/collectors.js.map +1 -0
  317. package/dist/collections/fx/iter.d.ts +166 -0
  318. package/dist/collections/fx/iter.d.ts.map +1 -0
  319. package/dist/collections/fx/iter.js +421 -0
  320. package/dist/collections/fx/iter.js.map +1 -0
  321. package/dist/collections/impl/array-deque.d.ts +107 -0
  322. package/dist/collections/impl/array-deque.d.ts.map +1 -0
  323. package/dist/collections/impl/array-deque.js +381 -0
  324. package/dist/collections/impl/array-deque.js.map +1 -0
  325. package/dist/collections/impl/array-list.d.ts +101 -0
  326. package/dist/collections/impl/array-list.d.ts.map +1 -0
  327. package/dist/collections/impl/array-list.js +387 -0
  328. package/dist/collections/impl/array-list.js.map +1 -0
  329. package/dist/collections/impl/hash-map.d.ts +141 -0
  330. package/dist/collections/impl/hash-map.d.ts.map +1 -0
  331. package/dist/collections/impl/hash-map.js +450 -0
  332. package/dist/collections/impl/hash-map.js.map +1 -0
  333. package/dist/collections/impl/hash-set.d.ts +125 -0
  334. package/dist/collections/impl/hash-set.d.ts.map +1 -0
  335. package/dist/collections/impl/hash-set.js +264 -0
  336. package/dist/collections/impl/hash-set.js.map +1 -0
  337. package/dist/collections/impl/linked-hash-map.d.ts +141 -0
  338. package/dist/collections/impl/linked-hash-map.d.ts.map +1 -0
  339. package/dist/collections/impl/linked-hash-map.js +472 -0
  340. package/dist/collections/impl/linked-hash-map.js.map +1 -0
  341. package/dist/collections/impl/linked-list.d.ts +109 -0
  342. package/dist/collections/impl/linked-list.d.ts.map +1 -0
  343. package/dist/collections/impl/linked-list.js +491 -0
  344. package/dist/collections/impl/linked-list.js.map +1 -0
  345. package/dist/collections/impl/priority-queue.d.ts +134 -0
  346. package/dist/collections/impl/priority-queue.d.ts.map +1 -0
  347. package/dist/collections/impl/priority-queue.js +336 -0
  348. package/dist/collections/impl/priority-queue.js.map +1 -0
  349. package/dist/collections/impl/tree-map.d.ts +146 -0
  350. package/dist/collections/impl/tree-map.d.ts.map +1 -0
  351. package/dist/collections/impl/tree-map.js +781 -0
  352. package/dist/collections/impl/tree-map.js.map +1 -0
  353. package/dist/collections/impl/tree-set.d.ts +112 -0
  354. package/dist/collections/impl/tree-set.d.ts.map +1 -0
  355. package/dist/collections/impl/tree-set.js +374 -0
  356. package/dist/collections/impl/tree-set.js.map +1 -0
  357. package/dist/collections/index.d.ts +105 -0
  358. package/dist/collections/index.d.ts.map +1 -0
  359. package/dist/collections/index.js +135 -0
  360. package/dist/collections/index.js.map +1 -0
  361. package/dist/collections/interfaces/collection.d.ts +119 -0
  362. package/dist/collections/interfaces/collection.d.ts.map +1 -0
  363. package/dist/collections/interfaces/collection.js +8 -0
  364. package/dist/collections/interfaces/collection.js.map +1 -0
  365. package/dist/collections/interfaces/list.d.ts +247 -0
  366. package/dist/collections/interfaces/list.d.ts.map +1 -0
  367. package/dist/collections/interfaces/list.js +8 -0
  368. package/dist/collections/interfaces/list.js.map +1 -0
  369. package/dist/collections/interfaces/map.d.ts +344 -0
  370. package/dist/collections/interfaces/map.d.ts.map +1 -0
  371. package/dist/collections/interfaces/map.js +8 -0
  372. package/dist/collections/interfaces/map.js.map +1 -0
  373. package/dist/collections/interfaces/queue.d.ts +304 -0
  374. package/dist/collections/interfaces/queue.d.ts.map +1 -0
  375. package/dist/collections/interfaces/queue.js +8 -0
  376. package/dist/collections/interfaces/queue.js.map +1 -0
  377. package/dist/collections/interfaces/set.d.ts +137 -0
  378. package/dist/collections/interfaces/set.d.ts.map +1 -0
  379. package/dist/collections/interfaces/set.js +8 -0
  380. package/dist/collections/interfaces/set.js.map +1 -0
  381. package/dist/collections/storage/api.d.ts +109 -0
  382. package/dist/collections/storage/api.d.ts.map +1 -0
  383. package/dist/collections/storage/api.js +182 -0
  384. package/dist/collections/storage/api.js.map +1 -0
  385. package/dist/collections/storage/hybrid.d.ts +164 -0
  386. package/dist/collections/storage/hybrid.d.ts.map +1 -0
  387. package/dist/collections/storage/hybrid.js +416 -0
  388. package/dist/collections/storage/hybrid.js.map +1 -0
  389. package/dist/collections/storage/index.d.ts +16 -0
  390. package/dist/collections/storage/index.d.ts.map +1 -0
  391. package/dist/collections/storage/index.js +13 -0
  392. package/dist/collections/storage/index.js.map +1 -0
  393. package/dist/collections/storage/interface.d.ts +141 -0
  394. package/dist/collections/storage/interface.d.ts.map +1 -0
  395. package/dist/collections/storage/interface.js +23 -0
  396. package/dist/collections/storage/interface.js.map +1 -0
  397. package/dist/collections/storage/memory.d.ts +68 -0
  398. package/dist/collections/storage/memory.d.ts.map +1 -0
  399. package/dist/collections/storage/memory.js +154 -0
  400. package/dist/collections/storage/memory.js.map +1 -0
  401. package/dist/collections/utils/defaults.d.ts +135 -0
  402. package/dist/collections/utils/defaults.d.ts.map +1 -0
  403. package/dist/collections/utils/defaults.js +322 -0
  404. package/dist/collections/utils/defaults.js.map +1 -0
  405. package/dist/collections/utils/factories.d.ts +144 -0
  406. package/dist/collections/utils/factories.d.ts.map +1 -0
  407. package/dist/collections/utils/factories.js +293 -0
  408. package/dist/collections/utils/factories.js.map +1 -0
  409. package/dist/collections/utils/helpers.d.ts +137 -0
  410. package/dist/collections/utils/helpers.d.ts.map +1 -0
  411. package/dist/collections/utils/helpers.js +221 -0
  412. package/dist/collections/utils/helpers.js.map +1 -0
  413. package/dist/collections.d.ts +12 -0
  414. package/dist/collections.d.ts.map +1 -0
  415. package/dist/collections.js +10 -0
  416. package/dist/collections.js.map +1 -0
  417. package/dist/components/define.d.ts +134 -0
  418. package/dist/components/define.d.ts.map +1 -0
  419. package/dist/components/define.js +486 -0
  420. package/dist/components/define.js.map +1 -0
  421. package/dist/components/index.d.ts +39 -0
  422. package/dist/components/index.d.ts.map +1 -0
  423. package/dist/components/index.js +38 -0
  424. package/dist/components/index.js.map +1 -0
  425. package/dist/components/types.d.ts +264 -0
  426. package/dist/components/types.d.ts.map +1 -0
  427. package/dist/components/types.js +46 -0
  428. package/dist/components/types.js.map +1 -0
  429. package/dist/events/bus.d.ts +193 -0
  430. package/dist/events/bus.d.ts.map +1 -0
  431. package/dist/events/bus.js +511 -0
  432. package/dist/events/bus.js.map +1 -0
  433. package/dist/events/index.d.ts +34 -0
  434. package/dist/events/index.d.ts.map +1 -0
  435. package/dist/events/index.js +36 -0
  436. package/dist/events/index.js.map +1 -0
  437. package/dist/events/types.d.ts +242 -0
  438. package/dist/events/types.d.ts.map +1 -0
  439. package/dist/events/types.js +8 -0
  440. package/dist/events/types.js.map +1 -0
  441. package/dist/index.d.ts +17 -0
  442. package/dist/index.d.ts.map +1 -0
  443. package/dist/index.js +17 -0
  444. package/dist/index.js.map +1 -0
  445. package/dist/middleware/compose.d.ts +88 -0
  446. package/dist/middleware/compose.d.ts.map +1 -0
  447. package/dist/middleware/compose.js +108 -0
  448. package/dist/middleware/compose.js.map +1 -0
  449. package/dist/middleware/index.d.ts +12 -0
  450. package/dist/middleware/index.d.ts.map +1 -0
  451. package/dist/middleware/index.js +11 -0
  452. package/dist/middleware/index.js.map +1 -0
  453. package/dist/middleware/types.d.ts +112 -0
  454. package/dist/middleware/types.d.ts.map +1 -0
  455. package/dist/middleware/types.js +14 -0
  456. package/dist/middleware/types.js.map +1 -0
  457. package/dist/procedures/capability.d.ts +111 -0
  458. package/dist/procedures/capability.d.ts.map +1 -0
  459. package/dist/procedures/capability.js +269 -0
  460. package/dist/procedures/capability.js.map +1 -0
  461. package/dist/procedures/cli/announce.d.ts +67 -0
  462. package/dist/procedures/cli/announce.d.ts.map +1 -0
  463. package/dist/procedures/cli/announce.js +392 -0
  464. package/dist/procedures/cli/announce.js.map +1 -0
  465. package/dist/procedures/cli/discover.d.ts +66 -0
  466. package/dist/procedures/cli/discover.d.ts.map +1 -0
  467. package/dist/procedures/cli/discover.js +310 -0
  468. package/dist/procedures/cli/discover.js.map +1 -0
  469. package/dist/procedures/cli/index.d.ts +13 -0
  470. package/dist/procedures/cli/index.d.ts.map +1 -0
  471. package/dist/procedures/cli/index.js +203 -0
  472. package/dist/procedures/cli/index.js.map +1 -0
  473. package/dist/procedures/cli/init.d.ts +17 -0
  474. package/dist/procedures/cli/init.d.ts.map +1 -0
  475. package/dist/procedures/cli/init.js +336 -0
  476. package/dist/procedures/cli/init.js.map +1 -0
  477. package/dist/procedures/collection/index.d.ts +10 -0
  478. package/dist/procedures/collection/index.d.ts.map +1 -0
  479. package/dist/procedures/collection/index.js +10 -0
  480. package/dist/procedures/collection/index.js.map +1 -0
  481. package/dist/procedures/collection/procedures.d.ts +21 -0
  482. package/dist/procedures/collection/procedures.d.ts.map +1 -0
  483. package/dist/procedures/collection/procedures.js +210 -0
  484. package/dist/procedures/collection/procedures.js.map +1 -0
  485. package/dist/procedures/collection/schemas.d.ts +131 -0
  486. package/dist/procedures/collection/schemas.d.ts.map +1 -0
  487. package/dist/procedures/collection/schemas.js +422 -0
  488. package/dist/procedures/collection/schemas.js.map +1 -0
  489. package/dist/procedures/collection/storage.d.ts +53 -0
  490. package/dist/procedures/collection/storage.d.ts.map +1 -0
  491. package/dist/procedures/collection/storage.js +2 -0
  492. package/dist/procedures/collection/storage.js.map +1 -0
  493. package/dist/procedures/core/array.d.ts +276 -0
  494. package/dist/procedures/core/array.d.ts.map +1 -0
  495. package/dist/procedures/core/array.js +639 -0
  496. package/dist/procedures/core/array.js.map +1 -0
  497. package/dist/procedures/core/comparison.d.ts +85 -0
  498. package/dist/procedures/core/comparison.d.ts.map +1 -0
  499. package/dist/procedures/core/comparison.js +158 -0
  500. package/dist/procedures/core/comparison.js.map +1 -0
  501. package/dist/procedures/core/index.d.ts +261 -0
  502. package/dist/procedures/core/index.d.ts.map +1 -0
  503. package/dist/procedures/core/index.js +588 -0
  504. package/dist/procedures/core/index.js.map +1 -0
  505. package/dist/procedures/core/logic.d.ts +144 -0
  506. package/dist/procedures/core/logic.d.ts.map +1 -0
  507. package/dist/procedures/core/logic.js +169 -0
  508. package/dist/procedures/core/logic.js.map +1 -0
  509. package/dist/procedures/core/math.d.ts +139 -0
  510. package/dist/procedures/core/math.d.ts.map +1 -0
  511. package/dist/procedures/core/math.js +275 -0
  512. package/dist/procedures/core/math.js.map +1 -0
  513. package/dist/procedures/core/meta.d.ts +111 -0
  514. package/dist/procedures/core/meta.d.ts.map +1 -0
  515. package/dist/procedures/core/meta.js +244 -0
  516. package/dist/procedures/core/meta.js.map +1 -0
  517. package/dist/procedures/core/object.d.ts +109 -0
  518. package/dist/procedures/core/object.d.ts.map +1 -0
  519. package/dist/procedures/core/object.js +272 -0
  520. package/dist/procedures/core/object.js.map +1 -0
  521. package/dist/procedures/core/operands.d.ts +51 -0
  522. package/dist/procedures/core/operands.d.ts.map +1 -0
  523. package/dist/procedures/core/operands.js +90 -0
  524. package/dist/procedures/core/operands.js.map +1 -0
  525. package/dist/procedures/core/outputs.d.ts +28 -0
  526. package/dist/procedures/core/outputs.d.ts.map +1 -0
  527. package/dist/procedures/core/outputs.js +42 -0
  528. package/dist/procedures/core/outputs.js.map +1 -0
  529. package/dist/procedures/core/results.d.ts +202 -0
  530. package/dist/procedures/core/results.d.ts.map +1 -0
  531. package/dist/procedures/core/results.js +106 -0
  532. package/dist/procedures/core/results.js.map +1 -0
  533. package/dist/procedures/core/schemas.d.ts +48 -0
  534. package/dist/procedures/core/schemas.d.ts.map +1 -0
  535. package/dist/procedures/core/schemas.js +102 -0
  536. package/dist/procedures/core/schemas.js.map +1 -0
  537. package/dist/procedures/core/string.d.ts +138 -0
  538. package/dist/procedures/core/string.d.ts.map +1 -0
  539. package/dist/procedures/core/string.js +270 -0
  540. package/dist/procedures/core/string.js.map +1 -0
  541. package/dist/procedures/core/type.d.ts +101 -0
  542. package/dist/procedures/core/type.d.ts.map +1 -0
  543. package/dist/procedures/core/type.js +210 -0
  544. package/dist/procedures/core/type.js.map +1 -0
  545. package/dist/procedures/define-procedure.d.ts +187 -0
  546. package/dist/procedures/define-procedure.d.ts.map +1 -0
  547. package/dist/procedures/define-procedure.js +357 -0
  548. package/dist/procedures/define-procedure.js.map +1 -0
  549. package/dist/procedures/define.d.ts +228 -0
  550. package/dist/procedures/define.d.ts.map +1 -0
  551. package/dist/procedures/define.js +300 -0
  552. package/dist/procedures/define.js.map +1 -0
  553. package/dist/procedures/discovery.d.ts +57 -0
  554. package/dist/procedures/discovery.d.ts.map +1 -0
  555. package/dist/procedures/discovery.js +68 -0
  556. package/dist/procedures/discovery.js.map +1 -0
  557. package/dist/procedures/effects.d.ts +15 -0
  558. package/dist/procedures/effects.d.ts.map +1 -0
  559. package/dist/procedures/effects.js +18 -0
  560. package/dist/procedures/effects.js.map +1 -0
  561. package/dist/procedures/index.d.ts +27 -0
  562. package/dist/procedures/index.d.ts.map +1 -0
  563. package/dist/procedures/index.js +54 -0
  564. package/dist/procedures/index.js.map +1 -0
  565. package/dist/procedures/interceptors.d.ts +82 -0
  566. package/dist/procedures/interceptors.d.ts.map +1 -0
  567. package/dist/procedures/interceptors.js +194 -0
  568. package/dist/procedures/interceptors.js.map +1 -0
  569. package/dist/procedures/invoke.d.ts +155 -0
  570. package/dist/procedures/invoke.d.ts.map +1 -0
  571. package/dist/procedures/invoke.js +343 -0
  572. package/dist/procedures/invoke.js.map +1 -0
  573. package/dist/procedures/module.d.ts +54 -0
  574. package/dist/procedures/module.d.ts.map +1 -0
  575. package/dist/procedures/module.js +103 -0
  576. package/dist/procedures/module.js.map +1 -0
  577. package/dist/procedures/policy.d.ts +70 -0
  578. package/dist/procedures/policy.d.ts.map +1 -0
  579. package/dist/procedures/policy.js +138 -0
  580. package/dist/procedures/policy.js.map +1 -0
  581. package/dist/procedures/ref.d.ts +606 -0
  582. package/dist/procedures/ref.d.ts.map +1 -0
  583. package/dist/procedures/ref.js +895 -0
  584. package/dist/procedures/ref.js.map +1 -0
  585. package/dist/procedures/registry.d.ts +208 -0
  586. package/dist/procedures/registry.d.ts.map +1 -0
  587. package/dist/procedures/registry.js +402 -0
  588. package/dist/procedures/registry.js.map +1 -0
  589. package/dist/procedures/schema.d.ts +126 -0
  590. package/dist/procedures/schema.d.ts.map +1 -0
  591. package/dist/procedures/schema.js +108 -0
  592. package/dist/procedures/schema.js.map +1 -0
  593. package/dist/procedures/storage/adapter.d.ts +148 -0
  594. package/dist/procedures/storage/adapter.d.ts.map +1 -0
  595. package/dist/procedures/storage/adapter.js +214 -0
  596. package/dist/procedures/storage/adapter.js.map +1 -0
  597. package/dist/procedures/storage/api.d.ts +125 -0
  598. package/dist/procedures/storage/api.d.ts.map +1 -0
  599. package/dist/procedures/storage/api.js +220 -0
  600. package/dist/procedures/storage/api.js.map +1 -0
  601. package/dist/procedures/storage/factory.d.ts +134 -0
  602. package/dist/procedures/storage/factory.d.ts.map +1 -0
  603. package/dist/procedures/storage/factory.js +166 -0
  604. package/dist/procedures/storage/factory.js.map +1 -0
  605. package/dist/procedures/storage/hybrid.d.ts +193 -0
  606. package/dist/procedures/storage/hybrid.d.ts.map +1 -0
  607. package/dist/procedures/storage/hybrid.js +519 -0
  608. package/dist/procedures/storage/hybrid.js.map +1 -0
  609. package/dist/procedures/storage/index.d.ts +17 -0
  610. package/dist/procedures/storage/index.d.ts.map +1 -0
  611. package/dist/procedures/storage/index.js +17 -0
  612. package/dist/procedures/storage/index.js.map +1 -0
  613. package/dist/procedures/storage/procedures.d.ts +39 -0
  614. package/dist/procedures/storage/procedures.d.ts.map +1 -0
  615. package/dist/procedures/storage/procedures.js +261 -0
  616. package/dist/procedures/storage/procedures.js.map +1 -0
  617. package/dist/procedures/storage/serialization.d.ts +123 -0
  618. package/dist/procedures/storage/serialization.d.ts.map +1 -0
  619. package/dist/procedures/storage/serialization.js +216 -0
  620. package/dist/procedures/storage/serialization.js.map +1 -0
  621. package/dist/procedures/storage/synced-registry.d.ts +246 -0
  622. package/dist/procedures/storage/synced-registry.d.ts.map +1 -0
  623. package/dist/procedures/storage/synced-registry.js +575 -0
  624. package/dist/procedures/storage/synced-registry.js.map +1 -0
  625. package/dist/procedures/storage/types.d.ts +130 -0
  626. package/dist/procedures/storage/types.d.ts.map +1 -0
  627. package/dist/procedures/storage/types.js +8 -0
  628. package/dist/procedures/storage/types.js.map +1 -0
  629. package/dist/procedures/types.d.ts +468 -0
  630. package/dist/procedures/types.d.ts.map +1 -0
  631. package/dist/procedures/types.js +23 -0
  632. package/dist/procedures/types.js.map +1 -0
  633. package/dist/register.d.ts +8 -0
  634. package/dist/register.d.ts.map +1 -0
  635. package/dist/register.js +9 -0
  636. package/dist/register.js.map +1 -0
  637. package/dist/server/browser-guard.d.ts +69 -0
  638. package/dist/server/browser-guard.d.ts.map +1 -0
  639. package/dist/server/browser-guard.js +103 -0
  640. package/dist/server/browser-guard.js.map +1 -0
  641. package/dist/server/host-policy.d.ts +81 -0
  642. package/dist/server/host-policy.d.ts.map +1 -0
  643. package/dist/server/host-policy.js +104 -0
  644. package/dist/server/host-policy.js.map +1 -0
  645. package/dist/server/index.d.ts +46 -0
  646. package/dist/server/index.d.ts.map +1 -0
  647. package/dist/server/index.js +42 -0
  648. package/dist/server/index.js.map +1 -0
  649. package/dist/server/method.d.ts +24 -0
  650. package/dist/server/method.d.ts.map +1 -0
  651. package/dist/server/method.js +29 -0
  652. package/dist/server/method.js.map +1 -0
  653. package/dist/server/procedure-server.d.ts +226 -0
  654. package/dist/server/procedure-server.d.ts.map +1 -0
  655. package/dist/server/procedure-server.js +348 -0
  656. package/dist/server/procedure-server.js.map +1 -0
  657. package/dist/server/server.d.ts +161 -0
  658. package/dist/server/server.d.ts.map +1 -0
  659. package/dist/server/server.js +279 -0
  660. package/dist/server/server.js.map +1 -0
  661. package/dist/server/types.d.ts +106 -0
  662. package/dist/server/types.d.ts.map +1 -0
  663. package/dist/server/types.js +29 -0
  664. package/dist/server/types.js.map +1 -0
  665. package/package.json +117 -3
  666. package/src/adapters/http/client/index.ts +51 -0
  667. package/src/adapters/http/client/transport.ts +338 -0
  668. package/src/adapters/http/client/types.ts +33 -0
  669. package/src/adapters/http/index.ts +7 -0
  670. package/src/adapters/http/server/index.ts +14 -0
  671. package/src/adapters/http/server/strategies.ts +105 -0
  672. package/src/adapters/http/server/transport.ts +623 -0
  673. package/src/adapters/http/server/types.ts +81 -0
  674. package/src/adapters/http/shared/constants.ts +108 -0
  675. package/src/adapters/http/shared/errors.ts +199 -0
  676. package/src/adapters/http/shared/headers.ts +291 -0
  677. package/src/adapters/http/shared/index.ts +21 -0
  678. package/src/adapters/http/shared/status-codes.ts +212 -0
  679. package/src/adapters/http/shared/strategies.ts +255 -0
  680. package/src/adapters/local/client/index.ts +11 -0
  681. package/src/adapters/local/client/transport.ts +188 -0
  682. package/src/adapters/local/client/types.ts +50 -0
  683. package/src/adapters/metadata.ts +17 -0
  684. package/src/adapters/mock/client/builder.ts +64 -0
  685. package/src/adapters/mock/client/index.ts +19 -0
  686. package/src/adapters/mock/client/transport.ts +352 -0
  687. package/src/adapters/mock/client/types.ts +99 -0
  688. package/src/adapters/websocket/client/index.ts +18 -0
  689. package/src/adapters/websocket/client/transport.ts +733 -0
  690. package/src/adapters/websocket/client/types.ts +235 -0
  691. package/src/adapters/websocket/index.ts +24 -0
  692. package/src/adapters/websocket/server/index.ts +18 -0
  693. package/src/adapters/websocket/server/transport.ts +705 -0
  694. package/src/adapters/websocket/server/types.ts +169 -0
  695. package/src/browser.ts +401 -0
  696. package/src/client/batch-executor.ts +514 -0
  697. package/src/client/call-types.ts +491 -0
  698. package/src/client/client.ts +1229 -0
  699. package/src/client/consumption.ts +288 -0
  700. package/src/client/context.ts +228 -0
  701. package/src/client/errors/README.md +279 -0
  702. package/src/client/errors/codes.ts +88 -0
  703. package/src/client/errors/factory.ts +263 -0
  704. package/src/client/errors/http-errors.ts +601 -0
  705. package/src/client/errors/http-status.ts +82 -0
  706. package/src/client/errors/index.ts +72 -0
  707. package/src/client/errors/registry.ts +595 -0
  708. package/src/client/errors/types.ts +139 -0
  709. package/src/client/index.ts +124 -0
  710. package/src/client/middleware/auth.ts +132 -0
  711. package/src/client/middleware/cache.ts +316 -0
  712. package/src/client/middleware/circuit-breaker.ts +339 -0
  713. package/src/client/middleware/contexts.ts +319 -0
  714. package/src/client/middleware/items.ts +114 -0
  715. package/src/client/middleware/lru.ts +66 -0
  716. package/src/client/middleware/pagination.ts +213 -0
  717. package/src/client/middleware/rate-limit.ts +315 -0
  718. package/src/client/middleware/retry.ts +236 -0
  719. package/src/client/middleware/timeout.ts +308 -0
  720. package/src/client/middleware/tracing.ts +191 -0
  721. package/src/client/route-resolver.ts +407 -0
  722. package/src/client/typed-method.ts +65 -0
  723. package/src/client/typed.ts +140 -0
  724. package/src/client/types.ts +372 -0
  725. package/src/client/validation/index.ts +56 -0
  726. package/src/client/validation/middleware.ts +254 -0
  727. package/src/client/validation/types.ts +162 -0
  728. package/src/events/bus.ts +594 -0
  729. package/src/events/index.ts +67 -0
  730. package/src/events/types.ts +263 -0
  731. package/src/index.ts +33 -0
  732. package/src/middleware/compose.ts +159 -0
  733. package/src/middleware/index.ts +28 -0
  734. package/src/middleware/types.ts +166 -0
  735. package/src/procedures/capability.ts +333 -0
  736. package/src/procedures/cli/announce.ts +470 -0
  737. package/src/procedures/cli/discover.ts +390 -0
  738. package/src/procedures/cli/index.ts +231 -0
  739. package/src/procedures/cli/init.ts +370 -0
  740. package/src/procedures/collection/index.ts +51 -0
  741. package/src/procedures/collection/procedures.ts +257 -0
  742. package/src/procedures/collection/schemas.ts +550 -0
  743. package/src/procedures/collection/storage.ts +53 -0
  744. package/src/procedures/core/array.ts +1026 -0
  745. package/src/procedures/core/comparison.ts +265 -0
  746. package/src/procedures/core/index.ts +898 -0
  747. package/src/procedures/core/logic.ts +225 -0
  748. package/src/procedures/core/math.ts +471 -0
  749. package/src/procedures/core/meta.ts +389 -0
  750. package/src/procedures/core/object.ts +429 -0
  751. package/src/procedures/core/operands.ts +119 -0
  752. package/src/procedures/core/outputs.ts +48 -0
  753. package/src/procedures/core/results.ts +296 -0
  754. package/src/procedures/core/schemas.ts +123 -0
  755. package/src/procedures/core/string.ts +460 -0
  756. package/src/procedures/core/type.ts +346 -0
  757. package/src/procedures/define-procedure.ts +532 -0
  758. package/src/procedures/define.ts +387 -0
  759. package/src/procedures/discovery.ts +76 -0
  760. package/src/procedures/effects.ts +24 -0
  761. package/src/procedures/index.ts +239 -0
  762. package/src/procedures/interceptors.ts +273 -0
  763. package/src/procedures/invoke.ts +506 -0
  764. package/src/procedures/module.ts +117 -0
  765. package/src/procedures/policy.ts +171 -0
  766. package/src/procedures/ref.ts +1305 -0
  767. package/src/procedures/registry.ts +473 -0
  768. package/src/procedures/schema.ts +225 -0
  769. package/src/procedures/types.ts +596 -0
  770. package/src/register.ts +10 -0
  771. package/src/server/browser-guard.ts +147 -0
  772. package/src/server/host-policy.ts +163 -0
  773. package/src/server/index.ts +70 -0
  774. package/src/server/method.ts +33 -0
  775. package/src/server/procedure-server.ts +459 -0
  776. package/src/server/server.ts +364 -0
  777. package/src/server/types.ts +147 -0
@@ -0,0 +1,473 @@
1
+ /**
2
+ * Procedure Registry
3
+ *
4
+ * Central registry for procedure definitions.
5
+ * Supports auto-discovery via module self-registration pattern.
6
+ */
7
+
8
+ import type {
9
+ AnyProcedure,
10
+ ProcedurePath,
11
+ RegistryEventType,
12
+ RegistryListener,
13
+ ProcedureModule,
14
+ RegistrationOptions,
15
+ } from "./types.js";
16
+ import { pathToKey } from "./types.js";
17
+ import { validateCalls } from "./policy.js";
18
+
19
+ // =============================================================================
20
+ // Registry Errors
21
+ // =============================================================================
22
+
23
+ /**
24
+ * Error thrown when procedure registration fails.
25
+ */
26
+ export class RegistryError extends Error {
27
+ override readonly name = "RegistryError";
28
+ readonly path: ProcedurePath;
29
+
30
+ constructor(
31
+ message: string,
32
+ path: ProcedurePath,
33
+ cause?: Error
34
+ ) {
35
+ super(message, { cause });
36
+ this.path = path;
37
+
38
+ if (Error.captureStackTrace) {
39
+ Error.captureStackTrace(this, RegistryError);
40
+ }
41
+ }
42
+ }
43
+
44
+ // =============================================================================
45
+ // Path Segments
46
+ // =============================================================================
47
+
48
+ /** Segments that name properties of every object. A path must not use them. */
49
+ const RESERVED_SEGMENTS: ReadonlySet<string> = new Set(["__proto__", "constructor", "prototype"]);
50
+
51
+ /**
52
+ * This function checks a procedure path: at least one segment, each a non-empty string, and
53
+ * none of `__proto__`, `constructor` or `prototype`. A reserved segment reaches
54
+ * `Object.prototype` in a tree walk (deep dive CORE-6). A segment can contain a dot
55
+ * (`["fs", "read.json"]`), but the registry rejects two different paths with the same key.
56
+ *
57
+ * @throws RegistryError when the path is not valid
58
+ */
59
+ export function assertValidPath(path: ProcedurePath): void {
60
+ if (!Array.isArray(path) || path.length === 0) {
61
+ throw new RegistryError("A procedure path must have at least one segment", path ?? []);
62
+ }
63
+ for (const segment of path) {
64
+ if (typeof segment !== "string" || segment === "") {
65
+ throw new RegistryError(`A path segment must be a non-empty string: ${JSON.stringify(path)}`, path);
66
+ }
67
+ if (RESERVED_SEGMENTS.has(segment)) {
68
+ throw new RegistryError(`A path segment must not be ${JSON.stringify(segment)}: ${JSON.stringify(path)}`, path);
69
+ }
70
+ }
71
+ }
72
+
73
+ function samePath(a: ProcedurePath, b: ProcedurePath): boolean {
74
+ return a.length === b.length && a.every((segment, index) => segment === b[index]);
75
+ }
76
+
77
+ // =============================================================================
78
+ // Procedure Registry
79
+ // =============================================================================
80
+
81
+ /**
82
+ * Central registry for procedure definitions.
83
+ *
84
+ * Features:
85
+ * - Path-based procedure storage and lookup
86
+ * - Event emission for registration/unregistration
87
+ * - Module bulk registration with path prefixing
88
+ * - Tree traversal for namespace queries
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const registry = new ProcedureRegistry();
93
+ *
94
+ * // Register a procedure
95
+ * registry.register(getUserProcedure);
96
+ *
97
+ * // Lookup by path
98
+ * const proc = registry.get(['users', 'get']);
99
+ *
100
+ * // Listen for registrations
101
+ * registry.on('register', (proc) => console.log('Registered:', proc.path));
102
+ * ```
103
+ */
104
+ export class ProcedureRegistry {
105
+ /** Procedures stored by path key */
106
+ private readonly procedures = new Map<string, AnyProcedure>();
107
+
108
+ /** Event listeners */
109
+ private readonly listeners: RegistryListener[] = [];
110
+
111
+ /** Registered module names for debugging */
112
+ private readonly registeredModules = new Set<string>();
113
+
114
+ // ---------------------------------------------------------------------------
115
+ // Registration
116
+ // ---------------------------------------------------------------------------
117
+
118
+ /**
119
+ * Register a procedure.
120
+ *
121
+ * @param procedure - Procedure to register
122
+ * @param options - Registration options
123
+ * @throws RegistryError if path already exists and override is false
124
+ */
125
+ register(procedure: AnyProcedure, options?: RegistrationOptions): void {
126
+ const path = options?.pathPrefix
127
+ ? [...options.pathPrefix, ...procedure.path]
128
+ : procedure.path;
129
+
130
+ assertValidPath(path);
131
+ const key = pathToKey(path);
132
+ // A list of nested calls that cannot be checked is an error now, not at the first call
133
+ try {
134
+ validateCalls((procedure.metadata as { calls?: unknown } | undefined)?.calls, path);
135
+ } catch (error) {
136
+ throw new RegistryError((error as Error).message, path);
137
+ }
138
+
139
+ const replaced = this.procedures.get(key);
140
+ // The key joins the segments with dots: ["a.b", "c"] and ["a", "b.c"] have one key
141
+ if (replaced && !samePath(replaced.path, path)) {
142
+ throw new RegistryError(
143
+ `Procedure path ${JSON.stringify(path)} has the same key as ${JSON.stringify(replaced.path)}: ${key}`,
144
+ path
145
+ );
146
+ }
147
+ if (replaced && !options?.override) {
148
+ throw new RegistryError(
149
+ `Procedure already registered at path: ${key}`,
150
+ path
151
+ );
152
+ }
153
+
154
+ // Store with potentially prefixed path
155
+ const storedProcedure: AnyProcedure = {
156
+ ...procedure,
157
+ path,
158
+ };
159
+
160
+ this.procedures.set(key, storedProcedure);
161
+ // A listener that keeps state per path sees the old procedure go first
162
+ if (replaced) this.emit("unregister", replaced);
163
+ this.emit("register", storedProcedure);
164
+ }
165
+
166
+ /**
167
+ * Unregister a procedure by path.
168
+ *
169
+ * @param path - Procedure path to unregister
170
+ * @returns true if procedure was found and removed
171
+ */
172
+ unregister(path: ProcedurePath): boolean {
173
+ const key = pathToKey(path);
174
+ const procedure = this.procedures.get(key);
175
+
176
+ if (procedure) {
177
+ this.procedures.delete(key);
178
+ this.emit("unregister", procedure);
179
+ return true;
180
+ }
181
+
182
+ return false;
183
+ }
184
+
185
+ /**
186
+ * Register all procedures from a module.
187
+ *
188
+ * @param module - Module with procedures array
189
+ * @param options - Registration options
190
+ */
191
+ registerModule(module: ProcedureModule, options?: RegistrationOptions): void {
192
+ if (module.name) {
193
+ this.registeredModules.add(module.name);
194
+ }
195
+
196
+ for (const procedure of module.procedures) {
197
+ this.register(procedure, options);
198
+ }
199
+ }
200
+
201
+ /**
202
+ * Register multiple procedures.
203
+ *
204
+ * @param procedures - Array of procedures
205
+ * @param options - Registration options
206
+ */
207
+ registerAll(procedures: AnyProcedure[], options?: RegistrationOptions): void {
208
+ for (const procedure of procedures) {
209
+ this.register(procedure, options);
210
+ }
211
+ }
212
+
213
+ // ---------------------------------------------------------------------------
214
+ // Lookup
215
+ // ---------------------------------------------------------------------------
216
+
217
+ /**
218
+ * Get a procedure by path.
219
+ *
220
+ * @param path - Procedure path
221
+ * @returns Procedure or undefined if not found
222
+ */
223
+ get(path: ProcedurePath): AnyProcedure | undefined {
224
+ return this.procedures.get(pathToKey(path));
225
+ }
226
+
227
+ /**
228
+ * Check if a procedure exists at path.
229
+ *
230
+ * @param path - Procedure path
231
+ */
232
+ has(path: ProcedurePath): boolean {
233
+ return this.procedures.has(pathToKey(path));
234
+ }
235
+
236
+ /**
237
+ * Get all procedures under a namespace prefix.
238
+ *
239
+ * @param prefix - Path prefix to filter by
240
+ * @returns Array of procedures under the prefix
241
+ *
242
+ * @example
243
+ * ```typescript
244
+ * // Get all collection procedures
245
+ * const collectionProcs = registry.getByPrefix(['collections']);
246
+ * ```
247
+ */
248
+ getByPrefix(prefix: ProcedurePath): AnyProcedure[] {
249
+ const prefixKey = pathToKey(prefix);
250
+ const results: AnyProcedure[] = [];
251
+
252
+ for (const [key, procedure] of this.procedures) {
253
+ if (key === prefixKey || key.startsWith(prefixKey + ".")) {
254
+ results.push(procedure);
255
+ }
256
+ }
257
+
258
+ return results;
259
+ }
260
+
261
+ /**
262
+ * Get all registered procedures.
263
+ */
264
+ getAll(): AnyProcedure[] {
265
+ return Array.from(this.procedures.values());
266
+ }
267
+
268
+ /**
269
+ * Get count of registered procedures.
270
+ */
271
+ get size(): number {
272
+ return this.procedures.size;
273
+ }
274
+
275
+ /**
276
+ * Get all registered module names.
277
+ */
278
+ getModules(): string[] {
279
+ return Array.from(this.registeredModules);
280
+ }
281
+
282
+ // ---------------------------------------------------------------------------
283
+ // Tree Operations
284
+ // ---------------------------------------------------------------------------
285
+
286
+ /**
287
+ * Get the namespace tree structure.
288
+ * Useful for introspection and documentation generation.
289
+ *
290
+ * @returns Nested object representing the procedure tree
291
+ *
292
+ * @example
293
+ * ```typescript
294
+ * const tree = registry.getTree();
295
+ * // {
296
+ * // collections: {
297
+ * // users: { get: procedure, set: procedure },
298
+ * // orders: { list: procedure }
299
+ * // },
300
+ * // weather: { forecast: procedure }
301
+ * // }
302
+ * ```
303
+ */
304
+ getTree(): Record<string, unknown> {
305
+ // Null-prototype containers and own-property checks: a segment such as "toString" is a
306
+ // name, not a property of Object.prototype (deep dive CORE-6)
307
+ const tree: Record<string, unknown> = Object.create(null);
308
+
309
+ for (const procedure of this.procedures.values()) {
310
+ let current = tree;
311
+
312
+ for (let i = 0; i < procedure.path.length; i++) {
313
+ const segment = procedure.path[i]!;
314
+ const isLast = i === procedure.path.length - 1;
315
+
316
+ if (isLast) {
317
+ current[segment] = procedure;
318
+ } else {
319
+ if (!Object.hasOwn(current, segment)) {
320
+ current[segment] = Object.create(null);
321
+ }
322
+ current = current[segment] as Record<string, unknown>;
323
+ }
324
+ }
325
+ }
326
+
327
+ return tree;
328
+ }
329
+
330
+ /**
331
+ * Get all unique namespace prefixes at a given depth.
332
+ *
333
+ * @param depth - Depth to query (0 = root namespaces)
334
+ * @returns Array of unique segments at that depth
335
+ *
336
+ * @example
337
+ * ```typescript
338
+ * registry.getNamespacesAtDepth(0); // ['collections', 'weather', 'auth']
339
+ * registry.getNamespacesAtDepth(1); // ['users', 'orders', 'forecast', ...]
340
+ * ```
341
+ */
342
+ getNamespacesAtDepth(depth: number): string[] {
343
+ const namespaces = new Set<string>();
344
+
345
+ for (const procedure of this.procedures.values()) {
346
+ if (procedure.path.length > depth) {
347
+ namespaces.add(procedure.path[depth]!);
348
+ }
349
+ }
350
+
351
+ return Array.from(namespaces);
352
+ }
353
+
354
+ // ---------------------------------------------------------------------------
355
+ // Events
356
+ // ---------------------------------------------------------------------------
357
+
358
+ /**
359
+ * Add event listener for registry events.
360
+ *
361
+ * @param event - Event type
362
+ * @param listener - Callback function
363
+ */
364
+ on(event: RegistryEventType, listener: (procedure: AnyProcedure) => void): void {
365
+ this.listeners.push({ event, listener });
366
+ }
367
+
368
+ /**
369
+ * Remove event listener.
370
+ *
371
+ * @param event - Event type
372
+ * @param listener - Callback function to remove
373
+ */
374
+ off(event: RegistryEventType, listener: (procedure: AnyProcedure) => void): void {
375
+ const index = this.listeners.findIndex(
376
+ (l) => l.event === event && l.listener === listener
377
+ );
378
+ if (index !== -1) {
379
+ this.listeners.splice(index, 1);
380
+ }
381
+ }
382
+
383
+ /**
384
+ * Emit an event to all listeners.
385
+ */
386
+ private emit(event: RegistryEventType, procedure: AnyProcedure): void {
387
+ for (const { event: listenerEvent, listener } of this.listeners) {
388
+ if (listenerEvent === event) {
389
+ try {
390
+ listener(procedure);
391
+ } catch (error) {
392
+ console.error(`Registry listener error for ${event}:`, error);
393
+ }
394
+ }
395
+ }
396
+ }
397
+
398
+ // ---------------------------------------------------------------------------
399
+ // Utilities
400
+ // ---------------------------------------------------------------------------
401
+
402
+ /**
403
+ * Clear all registered procedures.
404
+ * Primarily useful for testing.
405
+ */
406
+ clear(): void {
407
+ const procedures = Array.from(this.procedures.values());
408
+
409
+ for (const procedure of procedures) {
410
+ this.procedures.delete(pathToKey(procedure.path));
411
+ this.emit("unregister", procedure);
412
+ }
413
+
414
+ this.registeredModules.clear();
415
+ }
416
+
417
+ /**
418
+ * Create a snapshot of current registrations.
419
+ * Useful for debugging and testing.
420
+ */
421
+ snapshot(): { paths: string[]; modules: string[] } {
422
+ return {
423
+ paths: Array.from(this.procedures.keys()),
424
+ modules: Array.from(this.registeredModules),
425
+ };
426
+ }
427
+ }
428
+
429
+ // =============================================================================
430
+ // Global Registry Singleton
431
+ // =============================================================================
432
+
433
+ /**
434
+ * Symbol key for storing registry on globalThis.
435
+ * This ensures there's only ONE registry across all module loads,
436
+ * regardless of ESM/CJS interop issues or multiple import paths.
437
+ */
438
+ const REGISTRY_KEY = Symbol.for("@procedures/client/PROCEDURE_REGISTRY");
439
+
440
+ /**
441
+ * Get or create the global registry singleton.
442
+ * Uses Symbol.for to ensure the same symbol is used across all contexts.
443
+ */
444
+ function getGlobalRegistry(): ProcedureRegistry {
445
+ const g = globalThis as Record<symbol, ProcedureRegistry | undefined>;
446
+ if (!g[REGISTRY_KEY]) {
447
+ g[REGISTRY_KEY] = new ProcedureRegistry();
448
+ }
449
+ return g[REGISTRY_KEY];
450
+ }
451
+
452
+ /**
453
+ * Global procedure registry singleton.
454
+ *
455
+ * Used for module self-registration pattern where modules
456
+ * register their procedures at import time.
457
+ *
458
+ * Note: Uses globalThis with a Symbol key to ensure there's truly
459
+ * only one registry across ESM/CJS boundaries and dynamic imports.
460
+ *
461
+ * @example
462
+ * ```typescript
463
+ * // In a module's register.ts (side-effect import)
464
+ * import { PROCEDURE_REGISTRY } from 'client/procedures';
465
+ * import { myProcedures } from './procedures';
466
+ *
467
+ * PROCEDURE_REGISTRY.registerAll(myProcedures);
468
+ *
469
+ * // Consumer just imports the side-effect
470
+ * import 'my-module/register';
471
+ * ```
472
+ */
473
+ export const PROCEDURE_REGISTRY: ProcedureRegistry = getGlobalRegistry();
@@ -0,0 +1,225 @@
1
+ /**
2
+ * The schemas of procedures: Standard Schema v1, validation and JSON Schema.
3
+ *
4
+ * A procedure's input and output schema is a Standard Schema (https://standardschema.dev):
5
+ * zod 4, valibot, arktype and other libraries give one. An older schema with only `parse` and
6
+ * `safeParse` (`ZodLike`) also works. Every part of the ecosystem validates and describes a
7
+ * schema through the two functions of this module:
8
+ *
9
+ * - `validateSchema()` validates a value (sync when the schema is sync, so a handler can start
10
+ * before the first `await`).
11
+ * - `jsonSchemaOf()` gives the JSON Schema of the input or the output, for the MCP tools, the
12
+ * help and the flags of `mark`, its manifest and the site's catalog.
13
+ *
14
+ * Before, each tool read the private fields of zod 3 (`_def`), the MCP server converted
15
+ * schemas with a zod 3 library, and most procedures had a schema that validated nothing.
16
+ */
17
+
18
+ import { toJSONSchema } from "zod";
19
+ import type { ZodLike } from "../client/validation/types.js";
20
+
21
+ // =============================================================================
22
+ // Standard Schema v1 (the interface of the specification, copied as it advises)
23
+ // =============================================================================
24
+
25
+ /** A schema of the Standard Schema specification, version 1. */
26
+ export interface StandardSchemaV1<Input = unknown, Output = Input> {
27
+ /** The properties of the specification. */
28
+ readonly "~standard": StandardSchemaV1.Props<Input, Output>;
29
+ }
30
+
31
+ // eslint-disable-next-line @typescript-eslint/no-namespace
32
+ export declare namespace StandardSchemaV1 {
33
+ /** The properties of a Standard Schema. */
34
+ export interface Props<Input = unknown, Output = Input> {
35
+ /** The version number of the specification. */
36
+ readonly version: 1;
37
+ /** The name of the library that made the schema. */
38
+ readonly vendor: string;
39
+ /** The function that validates a value. */
40
+ readonly validate: (value: unknown) => Result<Output> | Promise<Result<Output>>;
41
+ /** The input and output types of the schema (types only). */
42
+ readonly types?: Types<Input, Output> | undefined;
43
+ }
44
+
45
+ /** The result of a validation. */
46
+ export type Result<Output> = SuccessResult<Output> | FailureResult;
47
+
48
+ /** A valid value. */
49
+ export interface SuccessResult<Output> {
50
+ readonly value: Output;
51
+ readonly issues?: undefined;
52
+ }
53
+
54
+ /** An invalid value. */
55
+ export interface FailureResult {
56
+ readonly issues: ReadonlyArray<Issue>;
57
+ }
58
+
59
+ /** One problem of an invalid value. */
60
+ export interface Issue {
61
+ readonly message: string;
62
+ readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
63
+ }
64
+
65
+ /** A part of the path of an issue. */
66
+ export interface PathSegment {
67
+ readonly key: PropertyKey;
68
+ }
69
+
70
+ /** The input and output types of a schema. */
71
+ export interface Types<Input = unknown, Output = Input> {
72
+ readonly input: Input;
73
+ readonly output: Output;
74
+ }
75
+
76
+ /** The input type of a Standard Schema. */
77
+ export type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["input"];
78
+
79
+ /** The output type of a Standard Schema. */
80
+ export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["output"];
81
+ }
82
+
83
+ /**
84
+ * The JSON Schema converter of a schema (the "Standard JSON Schema" property that zod 4 gives in
85
+ * `~standard.jsonSchema`).
86
+ */
87
+ export interface StandardJSONSchemaConverter {
88
+ input(options: { target: JsonSchemaTarget }): Record<string, unknown>;
89
+ output(options: { target: JsonSchemaTarget }): Record<string, unknown>;
90
+ }
91
+
92
+ /** The JSON Schema dialects that a converter can give. */
93
+ export type JsonSchemaTarget = "draft-2020-12" | "draft-07" | "openapi-3.0";
94
+
95
+ // =============================================================================
96
+ // The schema of a procedure
97
+ // =============================================================================
98
+
99
+ /**
100
+ * The input or output schema of a procedure: a Standard Schema, or an older schema with
101
+ * `parse`/`safeParse` (`ZodLike`).
102
+ */
103
+ export type ProcedureSchema<T = unknown> = StandardSchemaV1<unknown, T> | ZodLike<T>;
104
+
105
+ /** The type that a schema gives. */
106
+ export type InferSchema<S> =
107
+ S extends StandardSchemaV1<unknown, infer T> ? T : S extends ZodLike<infer U> ? U : unknown;
108
+
109
+ /** True for a value that has the properties of a Standard Schema v1. */
110
+ export function isStandardSchema(value: unknown): value is StandardSchemaV1 {
111
+ if (value === null || (typeof value !== "object" && typeof value !== "function")) return false;
112
+ const props = (value as { "~standard"?: { version?: unknown; validate?: unknown } })["~standard"];
113
+ return !!props && props.version === 1 && typeof props.validate === "function";
114
+ }
115
+
116
+ // =============================================================================
117
+ // Validation
118
+ // =============================================================================
119
+
120
+ /** The result of `validateSchema()`. */
121
+ export type SchemaResult<T> =
122
+ | { readonly ok: true; readonly value: T }
123
+ | { readonly ok: false; readonly message: string; readonly issues: ReadonlyArray<StandardSchemaV1.Issue> };
124
+
125
+ /** The text of an issue path: `filter.status` or `items[2]`. */
126
+ function pathText(path: StandardSchemaV1.Issue["path"]): string {
127
+ let text = "";
128
+ for (const part of path ?? []) {
129
+ const key = typeof part === "object" && part !== null ? (part as StandardSchemaV1.PathSegment).key : part;
130
+ text += typeof key === "number" ? `[${key}]` : text === "" ? String(key) : `.${String(key)}`;
131
+ }
132
+ return text;
133
+ }
134
+
135
+ /** One line for each issue: `filter: Expected object, received string`. */
136
+ export function describeIssues(issues: ReadonlyArray<StandardSchemaV1.Issue>): string {
137
+ return issues.map((issue) => (issue.path?.length ? `${pathText(issue.path)}: ${issue.message}` : issue.message)).join("; ");
138
+ }
139
+
140
+ function fromStandard<T>(result: StandardSchemaV1.Result<T>): SchemaResult<T> {
141
+ if (result.issues) {
142
+ return { ok: false, message: describeIssues(result.issues) || "Validation failed", issues: result.issues };
143
+ }
144
+ return { ok: true, value: (result as StandardSchemaV1.SuccessResult<T>).value };
145
+ }
146
+
147
+ /**
148
+ * This function validates a value against a schema. It returns a result, not a Promise, when
149
+ * the schema validates synchronously, so a caller can start the handler before an `await`.
150
+ */
151
+ export function validateSchema<T>(schema: ProcedureSchema<T>, value: unknown): SchemaResult<T> | Promise<SchemaResult<T>> {
152
+ if (isStandardSchema(schema)) {
153
+ const result = (schema as StandardSchemaV1<unknown, T>)["~standard"].validate(value);
154
+ return result instanceof Promise ? result.then(fromStandard) : fromStandard(result);
155
+ }
156
+ const legacy = schema as ZodLike<T>;
157
+ const parsed = legacy.safeParse(value);
158
+ if (parsed.success) return { ok: true, value: parsed.data };
159
+ const error = parsed.error as { message?: string; issues?: StandardSchemaV1.Issue[]; errors?: StandardSchemaV1.Issue[] };
160
+ const issues = error.issues ?? error.errors ?? [{ message: error.message ?? "Validation failed" }];
161
+ return { ok: false, message: error.message ?? describeIssues(issues), issues };
162
+ }
163
+
164
+ /** This function validates a value and waits for an asynchronous schema. */
165
+ export async function validateSchemaAsync<T>(schema: ProcedureSchema<T>, value: unknown): Promise<SchemaResult<T>> {
166
+ return validateSchema(schema, value);
167
+ }
168
+
169
+ // =============================================================================
170
+ // JSON Schema
171
+ // =============================================================================
172
+
173
+ /** A JSON Schema object. */
174
+ export type JsonSchema = Record<string, unknown>;
175
+
176
+ /**
177
+ * A schema that describes itself: a pass-through schema can give a JSON Schema this way (for
178
+ * example `{}`, any value). A Standard Schema with a converter does not need it.
179
+ */
180
+ export interface JsonSchemaSource {
181
+ readonly "~jsonSchema"?: JsonSchema | undefined;
182
+ }
183
+
184
+ /**
185
+ * The JSON Schema of the input (`io: "input"`, the default) or the output of a schema, or
186
+ * `undefined` when the schema cannot describe itself (a custom schema with only `parse`).
187
+ *
188
+ * The default dialect is draft-07, which every MCP client reads. A zod type that JSON cannot
189
+ * show (a date, a transform) becomes `{}`, so a description never fails.
190
+ */
191
+ export function jsonSchemaOf(
192
+ schema: ProcedureSchema | undefined,
193
+ options: { io?: "input" | "output"; target?: JsonSchemaTarget } = {}
194
+ ): JsonSchema | undefined {
195
+ if (!schema) return undefined;
196
+ const io = options.io ?? "input";
197
+ const target = options.target ?? "draft-07";
198
+ const own = (schema as JsonSchemaSource)["~jsonSchema"];
199
+ if (own) return own;
200
+ // A zod 4 schema: z.toJSONSchema can replace the types that JSON cannot show
201
+ if ((schema as { _zod?: unknown })._zod !== undefined) {
202
+ try {
203
+ return withoutDialect(toJSONSchema(schema as never, { io, target, unrepresentable: "any" }) as JsonSchema);
204
+ } catch {
205
+ return undefined;
206
+ }
207
+ }
208
+ // Another library: its Standard JSON Schema converter
209
+ const converter = (schema as { "~standard"?: { jsonSchema?: StandardJSONSchemaConverter } })["~standard"]?.jsonSchema;
210
+ if (converter && typeof converter[io] === "function") {
211
+ try {
212
+ return withoutDialect(converter[io]({ target }));
213
+ } catch {
214
+ return undefined;
215
+ }
216
+ }
217
+ return undefined;
218
+ }
219
+
220
+ /** The `$schema` key names the dialect: a tool list and a manifest do not need it on each schema. */
221
+ function withoutDialect(schema: JsonSchema): JsonSchema {
222
+ if (!("$schema" in schema)) return schema;
223
+ const { $schema: _dialect, ...rest } = schema;
224
+ return rest;
225
+ }