ts-procedures 8.6.0 → 9.0.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 (627) hide show
  1. package/README.md +166 -101
  2. package/agent_config/claude-code/.claude-plugin/plugin.json +1 -1
  3. package/agent_config/claude-code/agents/ts-procedures-architect.md +11 -10
  4. package/agent_config/claude-code/skills/ts-procedures/SKILL.md +25 -12
  5. package/agent_config/claude-code/skills/ts-procedures/anti-patterns.md +10 -12
  6. package/agent_config/claude-code/skills/ts-procedures/api-reference.md +141 -45
  7. package/agent_config/claude-code/skills/ts-procedures/checklist.md +7 -6
  8. package/agent_config/claude-code/skills/ts-procedures/patterns.md +45 -6
  9. package/agent_config/claude-code/skills/ts-procedures/templates/client.md +1 -1
  10. package/agent_config/claude-code/skills/ts-procedures/templates/hono.md +1 -1
  11. package/agent_config/copilot/copilot-instructions.md +50 -33
  12. package/agent_config/cursor/cursorrules +50 -33
  13. package/build/adapters/astro/astro-context.js.map +1 -0
  14. package/build/adapters/astro/create-handler.js.map +1 -0
  15. package/build/adapters/astro/index.js.map +1 -0
  16. package/build/{implementations/http → adapters}/astro/index.test.js +1 -1
  17. package/build/adapters/astro/index.test.js.map +1 -0
  18. package/build/adapters/astro/rewrite-request.js.map +1 -0
  19. package/build/adapters/hono/envelope-parity.test.js +98 -0
  20. package/build/adapters/hono/envelope-parity.test.js.map +1 -0
  21. package/build/{implementations/http → adapters}/hono/handlers/http-stream.d.ts +1 -1
  22. package/build/adapters/hono/handlers/http-stream.js +55 -0
  23. package/build/adapters/hono/handlers/http-stream.js.map +1 -0
  24. package/build/{implementations/http → adapters}/hono/handlers/http-stream.test.js +1 -1
  25. package/build/adapters/hono/handlers/http-stream.test.js.map +1 -0
  26. package/build/{implementations/http → adapters}/hono/handlers/http.d.ts +1 -1
  27. package/build/adapters/hono/handlers/http.js +50 -0
  28. package/build/adapters/hono/handlers/http.js.map +1 -0
  29. package/build/{implementations/http → adapters}/hono/handlers/http.test.js +1 -1
  30. package/build/adapters/hono/handlers/http.test.js.map +1 -0
  31. package/build/{implementations/http → adapters}/hono/handlers/rpc.d.ts +2 -2
  32. package/build/adapters/hono/handlers/rpc.js +23 -0
  33. package/build/adapters/hono/handlers/rpc.js.map +1 -0
  34. package/build/{implementations/http → adapters}/hono/handlers/rpc.test.js +1 -1
  35. package/build/adapters/hono/handlers/rpc.test.js.map +1 -0
  36. package/build/adapters/hono/handlers/stream.d.ts +12 -0
  37. package/build/adapters/hono/handlers/stream.js +89 -0
  38. package/build/adapters/hono/handlers/stream.js.map +1 -0
  39. package/build/{implementations/http → adapters}/hono/handlers/stream.test.js +3 -2
  40. package/build/adapters/hono/handlers/stream.test.js.map +1 -0
  41. package/build/{implementations/http → adapters}/hono/index.d.ts +24 -12
  42. package/build/{implementations/http → adapters}/hono/index.js +19 -8
  43. package/build/adapters/hono/index.js.map +1 -0
  44. package/build/{implementations/http → adapters}/hono/index.test.js +2 -4
  45. package/build/adapters/hono/index.test.js.map +1 -0
  46. package/build/{implementations/http → adapters/hono}/on-request-error.test.js +2 -2
  47. package/build/adapters/hono/on-request-error.test.js.map +1 -0
  48. package/build/adapters/hono/request.d.ts +7 -0
  49. package/build/adapters/hono/request.js +22 -0
  50. package/build/adapters/hono/request.js.map +1 -0
  51. package/build/{implementations/http → adapters/hono}/route-errors.test.js +4 -4
  52. package/build/adapters/hono/route-errors.test.js.map +1 -0
  53. package/build/adapters/hono/types.d.ts +55 -0
  54. package/build/adapters/hono/types.js +19 -0
  55. package/build/adapters/hono/types.js.map +1 -0
  56. package/build/client/freeze.test.js +39 -0
  57. package/build/client/freeze.test.js.map +1 -0
  58. package/build/client/typed-error-dispatch.test.js +2 -2
  59. package/build/client/typed-error-dispatch.test.js.map +1 -1
  60. package/build/codegen/__fixtures__/make-envelope.d.ts +1 -1
  61. package/build/codegen/bin/cli.d.ts +5 -0
  62. package/build/codegen/bin/cli.js +139 -182
  63. package/build/codegen/bin/cli.js.map +1 -1
  64. package/build/codegen/bin/cli.test.js +12 -2
  65. package/build/codegen/bin/cli.test.js.map +1 -1
  66. package/build/codegen/bin/flag-specs.d.ts +9 -0
  67. package/build/codegen/bin/flag-specs.js +33 -31
  68. package/build/codegen/bin/flag-specs.js.map +1 -1
  69. package/build/codegen/bin/flag-specs.test.js +14 -1
  70. package/build/codegen/bin/flag-specs.test.js.map +1 -1
  71. package/build/codegen/collect-models.d.ts +1 -1
  72. package/build/codegen/emit/api-route.d.ts +8 -0
  73. package/build/codegen/emit/api-route.js +156 -0
  74. package/build/codegen/emit/api-route.js.map +1 -0
  75. package/build/codegen/emit/context.d.ts +30 -0
  76. package/build/codegen/emit/context.js +2 -0
  77. package/build/codegen/emit/context.js.map +1 -0
  78. package/build/codegen/emit/declarations.d.ts +24 -0
  79. package/build/codegen/emit/declarations.js +48 -0
  80. package/build/codegen/emit/declarations.js.map +1 -0
  81. package/build/codegen/emit/format-types.d.ts +61 -0
  82. package/build/codegen/emit/format-types.js +188 -0
  83. package/build/codegen/emit/format-types.js.map +1 -0
  84. package/build/codegen/emit/http-stream-route.d.ts +7 -0
  85. package/build/codegen/emit/http-stream-route.js +138 -0
  86. package/build/codegen/emit/http-stream-route.js.map +1 -0
  87. package/build/codegen/emit/route-shared.d.ts +35 -0
  88. package/build/codegen/emit/route-shared.js +88 -0
  89. package/build/codegen/emit/route-shared.js.map +1 -0
  90. package/build/codegen/emit/rpc-route.d.ts +7 -0
  91. package/build/codegen/emit/rpc-route.js +37 -0
  92. package/build/codegen/emit/rpc-route.js.map +1 -0
  93. package/build/codegen/emit/scope-file.d.ts +39 -0
  94. package/build/codegen/emit/scope-file.js +166 -0
  95. package/build/codegen/emit/scope-file.js.map +1 -0
  96. package/build/codegen/emit/stream-route.d.ts +7 -0
  97. package/build/codegen/emit/stream-route.js +62 -0
  98. package/build/codegen/emit/stream-route.js.map +1 -0
  99. package/build/codegen/emit-errors.d.ts +1 -1
  100. package/build/codegen/emit-errors.integration.test.js +1 -1
  101. package/build/codegen/emit-errors.integration.test.js.map +1 -1
  102. package/build/codegen/emit-scope.d.ts +13 -30
  103. package/build/codegen/emit-scope.js +15 -844
  104. package/build/codegen/emit-scope.js.map +1 -1
  105. package/build/codegen/goldens.test.js +69 -0
  106. package/build/codegen/goldens.test.js.map +1 -0
  107. package/build/codegen/group-routes.d.ts +1 -1
  108. package/build/codegen/pipeline.d.ts +1 -1
  109. package/build/codegen/resolve-envelope.d.ts +1 -1
  110. package/build/codegen/targets/_shared/error-schemas.d.ts +1 -1
  111. package/build/codegen/targets/_shared/route-slots.d.ts +1 -1
  112. package/build/codegen/targets/_shared/target-run.d.ts +1 -1
  113. package/build/codegen/targets/kotlin/emit-route-kotlin.d.ts +1 -1
  114. package/build/codegen/targets/swift/emit-route-swift.d.ts +1 -1
  115. package/build/core/create-http-stream.d.ts +50 -0
  116. package/build/core/create-http-stream.js +108 -0
  117. package/build/core/create-http-stream.js.map +1 -0
  118. package/build/{create-http-stream.test.js → core/create-http-stream.test.js} +1 -1
  119. package/build/core/create-http-stream.test.js.map +1 -0
  120. package/build/core/create-http.d.ts +51 -0
  121. package/build/core/create-http.js +65 -0
  122. package/build/core/create-http.js.map +1 -0
  123. package/build/{create-http.test.js → core/create-http.test.js} +13 -4
  124. package/build/core/create-http.test.js.map +1 -0
  125. package/build/core/create-stream.d.ts +26 -0
  126. package/build/core/create-stream.js +80 -0
  127. package/build/core/create-stream.js.map +1 -0
  128. package/build/{create-stream.test.js → core/create-stream.test.js} +23 -28
  129. package/build/core/create-stream.test.js.map +1 -0
  130. package/build/core/create.d.ts +22 -0
  131. package/build/core/create.js +71 -0
  132. package/build/core/create.js.map +1 -0
  133. package/build/{create.test.js → core/create.test.js} +25 -46
  134. package/build/core/create.test.js.map +1 -0
  135. package/build/core/definition-site.d.ts +24 -0
  136. package/build/{stack-utils.js → core/definition-site.js} +20 -20
  137. package/build/core/definition-site.js.map +1 -0
  138. package/build/{stack-utils.test.js → core/definition-site.test.js} +12 -3
  139. package/build/core/definition-site.test.js.map +1 -0
  140. package/build/{errors.d.ts → core/errors.d.ts} +19 -8
  141. package/build/{errors.js → core/errors.js} +21 -26
  142. package/build/core/errors.js.map +1 -0
  143. package/build/core/errors.test.js.map +1 -0
  144. package/build/core/factory-options.test.js +82 -0
  145. package/build/core/factory-options.test.js.map +1 -0
  146. package/build/core/http-route.d.ts +13 -0
  147. package/build/core/http-route.js +54 -0
  148. package/build/core/http-route.js.map +1 -0
  149. package/build/core/internal.d.ts +72 -0
  150. package/build/core/internal.js +128 -0
  151. package/build/core/internal.js.map +1 -0
  152. package/build/{migration.test.js → core/migration.test.js} +17 -1
  153. package/build/core/migration.test.js.map +1 -0
  154. package/build/core/procedures.d.ts +143 -0
  155. package/build/core/procedures.js +64 -0
  156. package/build/core/procedures.js.map +1 -0
  157. package/build/{index.test.js → core/procedures.test.js} +14 -11
  158. package/build/core/procedures.test.js.map +1 -0
  159. package/build/core/types.d.ts +182 -0
  160. package/build/{schema → core}/types.js.map +1 -1
  161. package/build/exports.d.ts +31 -11
  162. package/build/exports.js +23 -8
  163. package/build/exports.js.map +1 -1
  164. package/build/schema/adapter.d.ts +35 -0
  165. package/build/schema/adapter.js +13 -0
  166. package/build/schema/adapter.js.map +1 -0
  167. package/build/schema/adapter.test.js +53 -0
  168. package/build/schema/adapter.test.js.map +1 -0
  169. package/build/schema/compile.d.ts +37 -0
  170. package/build/schema/compile.js +38 -0
  171. package/build/schema/compile.js.map +1 -0
  172. package/build/schema/compile.test.js +78 -0
  173. package/build/schema/compile.test.js.map +1 -0
  174. package/build/schema/compute-schema.d.ts +47 -37
  175. package/build/schema/compute-schema.js +86 -29
  176. package/build/schema/compute-schema.js.map +1 -1
  177. package/build/schema/compute-schema.test.js +158 -40
  178. package/build/schema/compute-schema.test.js.map +1 -1
  179. package/build/schema/json-schema.d.ts +17 -0
  180. package/build/schema/json-schema.js +2 -0
  181. package/build/schema/json-schema.js.map +1 -0
  182. package/build/schema/typebox.d.ts +11 -0
  183. package/build/schema/typebox.js +24 -0
  184. package/build/schema/typebox.js.map +1 -0
  185. package/build/schema/typebox.test.js +34 -0
  186. package/build/schema/typebox.test.js.map +1 -0
  187. package/build/server/context.d.ts +8 -0
  188. package/build/server/context.js +7 -0
  189. package/build/server/context.js.map +1 -0
  190. package/build/server/context.test.js +16 -0
  191. package/build/server/context.test.js.map +1 -0
  192. package/build/{doc-envelope.d.ts → server/doc-envelope.d.ts} +1 -1
  193. package/build/server/doc-envelope.js.map +1 -0
  194. package/build/server/doc-envelope.test.d.ts +1 -0
  195. package/build/server/doc-envelope.test.js.map +1 -0
  196. package/build/{implementations/http → server}/doc-registry.d.ts +7 -2
  197. package/build/{implementations/http → server}/doc-registry.js +9 -5
  198. package/build/server/doc-registry.js.map +1 -0
  199. package/build/server/doc-registry.test.d.ts +1 -0
  200. package/build/{implementations/http → server}/doc-registry.test.js +27 -24
  201. package/build/server/doc-registry.test.js.map +1 -0
  202. package/build/server/docs/docs.test.d.ts +1 -0
  203. package/build/server/docs/docs.test.js +237 -0
  204. package/build/server/docs/docs.test.js.map +1 -0
  205. package/build/{implementations/http/hono → server}/docs/http-doc.d.ts +2 -2
  206. package/build/{implementations/http/hono → server}/docs/http-doc.js +1 -1
  207. package/build/server/docs/http-doc.js.map +1 -0
  208. package/build/{implementations/http/hono → server}/docs/http-stream-doc.d.ts +2 -2
  209. package/build/{implementations/http/hono → server}/docs/http-stream-doc.js +1 -1
  210. package/build/server/docs/http-stream-doc.js.map +1 -0
  211. package/build/{implementations/http/hono → server}/docs/rpc-doc.d.ts +2 -2
  212. package/build/{implementations/http/hono → server}/docs/rpc-doc.js +1 -1
  213. package/build/server/docs/rpc-doc.js.map +1 -0
  214. package/build/{implementations/http/hono → server}/docs/stream-doc.d.ts +2 -2
  215. package/build/{implementations/http/hono → server}/docs/stream-doc.js +1 -1
  216. package/build/server/docs/stream-doc.js.map +1 -0
  217. package/build/server/errors/dispatch.d.ts +96 -0
  218. package/build/{implementations/http/error-dispatch.js → server/errors/dispatch.js} +20 -10
  219. package/build/server/errors/dispatch.js.map +1 -0
  220. package/build/server/errors/dispatch.test.d.ts +1 -0
  221. package/build/server/errors/dispatch.test.js +418 -0
  222. package/build/server/errors/dispatch.test.js.map +1 -0
  223. package/build/{implementations/http/error-taxonomy.d.ts → server/errors/taxonomy.d.ts} +8 -17
  224. package/build/{implementations/http/error-taxonomy.js → server/errors/taxonomy.js} +6 -15
  225. package/build/server/errors/taxonomy.js.map +1 -0
  226. package/build/server/errors/taxonomy.test.d.ts +1 -0
  227. package/build/{implementations/http/error-taxonomy.test.js → server/errors/taxonomy.test.js} +45 -39
  228. package/build/server/errors/taxonomy.test.js.map +1 -0
  229. package/build/server/index.d.ts +29 -0
  230. package/build/server/index.js +27 -0
  231. package/build/server/index.js.map +1 -0
  232. package/build/server/no-framework-imports.test.d.ts +1 -0
  233. package/build/server/no-framework-imports.test.js +40 -0
  234. package/build/server/no-framework-imports.test.js.map +1 -0
  235. package/build/{implementations/http/hono/path.d.ts → server/paths.d.ts} +2 -3
  236. package/build/{implementations/http/hono/path.js → server/paths.js} +1 -1
  237. package/build/server/paths.js.map +1 -0
  238. package/build/server/paths.test.d.ts +1 -0
  239. package/build/server/paths.test.js +111 -0
  240. package/build/server/paths.test.js.map +1 -0
  241. package/build/server/request/params.d.ts +29 -0
  242. package/build/server/request/params.js +43 -0
  243. package/build/server/request/params.js.map +1 -0
  244. package/build/server/request/params.test.d.ts +1 -0
  245. package/build/server/request/params.test.js +91 -0
  246. package/build/server/request/params.test.js.map +1 -0
  247. package/build/server/request/query.d.ts +9 -0
  248. package/build/server/request/query.js +22 -0
  249. package/build/server/request/query.js.map +1 -0
  250. package/build/server/request/query.test.d.ts +1 -0
  251. package/build/server/request/query.test.js +60 -0
  252. package/build/server/request/query.test.js.map +1 -0
  253. package/build/server/sse.d.ts +70 -0
  254. package/build/server/sse.js +94 -0
  255. package/build/server/sse.js.map +1 -0
  256. package/build/server/sse.test.d.ts +1 -0
  257. package/build/server/sse.test.js +98 -0
  258. package/build/server/sse.test.js.map +1 -0
  259. package/build/{implementations → server}/types.d.ts +17 -15
  260. package/build/{implementations → server}/types.js.map +1 -1
  261. package/docs/astro-adapter.md +8 -9
  262. package/docs/client-and-codegen.md +4 -4
  263. package/docs/client-error-handling.md +5 -5
  264. package/docs/codegen-kotlin.md +2 -3
  265. package/docs/codegen-swift.md +1 -2
  266. package/docs/core.md +135 -54
  267. package/docs/http-integrations.md +58 -6
  268. package/docs/migration-v8-to-v9.md +192 -0
  269. package/docs/plans/2026-06-09-v9-rewrite.md +130 -0
  270. package/docs/specs/2026-06-09-v9-rewrite-design.md +221 -0
  271. package/docs/streaming.md +12 -0
  272. package/package.json +23 -47
  273. package/src/{implementations/http → adapters}/astro/index.test.ts +2 -2
  274. package/src/adapters/hono/__fixtures__/parity-envelope.json +389 -0
  275. package/src/adapters/hono/envelope-parity.test.ts +126 -0
  276. package/src/{implementations/http → adapters}/hono/handlers/http-stream.test.ts +1 -1
  277. package/src/adapters/hono/handlers/http-stream.ts +73 -0
  278. package/src/{implementations/http → adapters}/hono/handlers/http.test.ts +1 -1
  279. package/src/adapters/hono/handlers/http.ts +70 -0
  280. package/src/{implementations/http → adapters}/hono/handlers/rpc.test.ts +2 -2
  281. package/src/adapters/hono/handlers/rpc.ts +39 -0
  282. package/src/{implementations/http → adapters}/hono/handlers/stream.test.ts +4 -3
  283. package/src/{implementations/http → adapters}/hono/handlers/stream.ts +19 -92
  284. package/src/{implementations/http → adapters}/hono/index.test.ts +14 -16
  285. package/src/{implementations/http → adapters}/hono/index.ts +35 -30
  286. package/src/{implementations/http → adapters/hono}/on-request-error.test.ts +3 -3
  287. package/src/adapters/hono/request.ts +28 -0
  288. package/src/{implementations/http → adapters/hono}/route-errors.test.ts +5 -5
  289. package/src/{implementations/http → adapters}/hono/types.ts +43 -20
  290. package/src/client/freeze.test.ts +41 -0
  291. package/src/client/typed-error-dispatch.test.ts +3 -3
  292. package/src/codegen/__fixtures__/make-envelope.ts +1 -1
  293. package/src/codegen/__fixtures__/models-envelope.json +310 -0
  294. package/src/codegen/__goldens__/MANIFEST.json +85 -0
  295. package/src/codegen/__goldens__/kotlin-default--models/Billing.kt +112 -0
  296. package/src/codegen/__goldens__/kotlin-default--models/BillingReports.kt +26 -0
  297. package/src/codegen/__goldens__/kotlin-default--models/Orders.kt +88 -0
  298. package/src/codegen/__goldens__/kotlin-default--users/Users.kt +189 -0
  299. package/src/codegen/__goldens__/swift-default--models/Billing.swift +97 -0
  300. package/src/codegen/__goldens__/swift-default--models/BillingReports.swift +20 -0
  301. package/src/codegen/__goldens__/swift-default--models/Orders.swift +81 -0
  302. package/src/codegen/__goldens__/swift-default--users/Users.swift +204 -0
  303. package/src/codegen/__goldens__/ts-default--models/_client.ts +1319 -0
  304. package/src/codegen/__goldens__/ts-default--models/_errors.ts +90 -0
  305. package/src/codegen/__goldens__/ts-default--models/_models.ts +10 -0
  306. package/src/codegen/__goldens__/ts-default--models/_types.ts +502 -0
  307. package/src/codegen/__goldens__/ts-default--models/billing-reports.ts +29 -0
  308. package/src/codegen/__goldens__/ts-default--models/billing.ts +67 -0
  309. package/src/codegen/__goldens__/ts-default--models/index.ts +48 -0
  310. package/src/codegen/__goldens__/ts-default--models/orders.ts +80 -0
  311. package/src/codegen/__goldens__/ts-default--users/_client.ts +1319 -0
  312. package/src/codegen/__goldens__/ts-default--users/_errors.ts +90 -0
  313. package/src/codegen/__goldens__/ts-default--users/_types.ts +502 -0
  314. package/src/codegen/__goldens__/ts-default--users/index.ts +38 -0
  315. package/src/codegen/__goldens__/ts-default--users/users.ts +169 -0
  316. package/src/codegen/__goldens__/ts-external-runtime--models/_errors.ts +90 -0
  317. package/src/codegen/__goldens__/ts-external-runtime--models/_models.ts +10 -0
  318. package/src/codegen/__goldens__/ts-external-runtime--models/billing-reports.ts +29 -0
  319. package/src/codegen/__goldens__/ts-external-runtime--models/billing.ts +67 -0
  320. package/src/codegen/__goldens__/ts-external-runtime--models/index.ts +48 -0
  321. package/src/codegen/__goldens__/ts-external-runtime--models/orders.ts +80 -0
  322. package/src/codegen/__goldens__/ts-external-runtime--users/_errors.ts +90 -0
  323. package/src/codegen/__goldens__/ts-external-runtime--users/index.ts +38 -0
  324. package/src/codegen/__goldens__/ts-external-runtime--users/users.ts +169 -0
  325. package/src/codegen/__goldens__/ts-flat--models/_client.ts +1319 -0
  326. package/src/codegen/__goldens__/ts-flat--models/_errors.ts +87 -0
  327. package/src/codegen/__goldens__/ts-flat--models/_models.ts +10 -0
  328. package/src/codegen/__goldens__/ts-flat--models/_types.ts +502 -0
  329. package/src/codegen/__goldens__/ts-flat--models/billing-reports.ts +28 -0
  330. package/src/codegen/__goldens__/ts-flat--models/billing.ts +51 -0
  331. package/src/codegen/__goldens__/ts-flat--models/index.ts +42 -0
  332. package/src/codegen/__goldens__/ts-flat--models/orders.ts +73 -0
  333. package/src/codegen/__goldens__/ts-flat--users/_client.ts +1319 -0
  334. package/src/codegen/__goldens__/ts-flat--users/_errors.ts +87 -0
  335. package/src/codegen/__goldens__/ts-flat--users/_types.ts +502 -0
  336. package/src/codegen/__goldens__/ts-flat--users/index.ts +34 -0
  337. package/src/codegen/__goldens__/ts-flat--users/users.ts +126 -0
  338. package/src/codegen/__goldens__/ts-no-share-models--models/_client.ts +1319 -0
  339. package/src/codegen/__goldens__/ts-no-share-models--models/_errors.ts +90 -0
  340. package/src/codegen/__goldens__/ts-no-share-models--models/_types.ts +502 -0
  341. package/src/codegen/__goldens__/ts-no-share-models--models/billing-reports.ts +29 -0
  342. package/src/codegen/__goldens__/ts-no-share-models--models/billing.ts +111 -0
  343. package/src/codegen/__goldens__/ts-no-share-models--models/index.ts +48 -0
  344. package/src/codegen/__goldens__/ts-no-share-models--models/orders.ts +112 -0
  345. package/src/codegen/__goldens__/ts-no-share-models--users/_client.ts +1319 -0
  346. package/src/codegen/__goldens__/ts-no-share-models--users/_errors.ts +90 -0
  347. package/src/codegen/__goldens__/ts-no-share-models--users/_types.ts +502 -0
  348. package/src/codegen/__goldens__/ts-no-share-models--users/index.ts +38 -0
  349. package/src/codegen/__goldens__/ts-no-share-models--users/users.ts +169 -0
  350. package/src/codegen/__goldens__/ts-shared-models-module--models/_client.ts +1319 -0
  351. package/src/codegen/__goldens__/ts-shared-models-module--models/_errors.ts +90 -0
  352. package/src/codegen/__goldens__/ts-shared-models-module--models/_models.ts +7 -0
  353. package/src/codegen/__goldens__/ts-shared-models-module--models/_types.ts +502 -0
  354. package/src/codegen/__goldens__/ts-shared-models-module--models/billing-reports.ts +29 -0
  355. package/src/codegen/__goldens__/ts-shared-models-module--models/billing.ts +67 -0
  356. package/src/codegen/__goldens__/ts-shared-models-module--models/index.ts +48 -0
  357. package/src/codegen/__goldens__/ts-shared-models-module--models/orders.ts +80 -0
  358. package/src/codegen/bin/cli.test.ts +13 -2
  359. package/src/codegen/bin/cli.ts +181 -144
  360. package/src/codegen/bin/flag-specs.test.ts +16 -1
  361. package/src/codegen/bin/flag-specs.ts +43 -31
  362. package/src/codegen/bundle-size.test.ts +1 -1
  363. package/src/codegen/collect-models.ts +1 -1
  364. package/src/codegen/e2e.test.ts +1 -1
  365. package/src/codegen/emit/api-route.ts +184 -0
  366. package/src/codegen/emit/context.ts +32 -0
  367. package/src/codegen/emit/declarations.ts +49 -0
  368. package/src/codegen/emit/format-types.ts +232 -0
  369. package/src/codegen/emit/http-stream-route.ts +162 -0
  370. package/src/codegen/emit/route-shared.ts +102 -0
  371. package/src/codegen/emit/rpc-route.ts +49 -0
  372. package/src/codegen/emit/scope-file.ts +226 -0
  373. package/src/codegen/emit/stream-route.ts +81 -0
  374. package/src/codegen/emit-errors.integration.test.ts +2 -2
  375. package/src/codegen/emit-errors.test.ts +1 -1
  376. package/src/codegen/emit-errors.ts +1 -1
  377. package/src/codegen/emit-scope.test.ts +2 -2
  378. package/src/codegen/emit-scope.ts +15 -1048
  379. package/src/codegen/goldens.test.ts +89 -0
  380. package/src/codegen/group-routes.test.ts +1 -1
  381. package/src/codegen/group-routes.ts +1 -1
  382. package/src/codegen/pipeline.test.ts +1 -1
  383. package/src/codegen/pipeline.ts +1 -1
  384. package/src/codegen/resolve-envelope.test.ts +1 -1
  385. package/src/codegen/resolve-envelope.ts +1 -1
  386. package/src/codegen/targets/_shared/error-schemas.test.ts +1 -1
  387. package/src/codegen/targets/_shared/error-schemas.ts +1 -1
  388. package/src/codegen/targets/_shared/route-slots.test.ts +1 -1
  389. package/src/codegen/targets/_shared/route-slots.ts +1 -1
  390. package/src/codegen/targets/_shared/target-run.ts +1 -1
  391. package/src/codegen/targets/kotlin/emit-route-kotlin.test.ts +1 -1
  392. package/src/codegen/targets/kotlin/emit-route-kotlin.ts +1 -1
  393. package/src/codegen/targets/kotlin/emit-scope-kotlin.test.ts +1 -1
  394. package/src/codegen/targets/swift/access-level.test.ts +1 -1
  395. package/src/codegen/targets/swift/emit-route-swift.test.ts +1 -1
  396. package/src/codegen/targets/swift/emit-route-swift.ts +1 -1
  397. package/src/codegen/targets/swift/emit-scope-swift.test.ts +1 -1
  398. package/src/codegen/targets/ts/shared-models.test.ts +1 -1
  399. package/src/{create-http-stream.test.ts → core/create-http-stream.test.ts} +1 -1
  400. package/src/core/create-http-stream.ts +207 -0
  401. package/src/{create-http.test.ts → core/create-http.test.ts} +15 -4
  402. package/src/core/create-http.ts +126 -0
  403. package/src/{create-stream.test.ts → core/create-stream.test.ts} +28 -31
  404. package/src/core/create-stream.ts +142 -0
  405. package/src/{create.test.ts → core/create.test.ts} +25 -57
  406. package/src/core/create.ts +121 -0
  407. package/src/{stack-utils.test.ts → core/definition-site.test.ts} +14 -3
  408. package/src/{stack-utils.ts → core/definition-site.ts} +20 -23
  409. package/src/{errors.test.ts → core/errors.test.ts} +1 -1
  410. package/src/{errors.ts → core/errors.ts} +30 -28
  411. package/src/core/factory-options.test.ts +112 -0
  412. package/src/core/http-route.ts +73 -0
  413. package/src/core/internal.ts +203 -0
  414. package/src/{migration.test.ts → core/migration.test.ts} +23 -1
  415. package/src/{index.test.ts → core/procedures.test.ts} +13 -11
  416. package/src/core/procedures.ts +75 -0
  417. package/src/core/types.ts +195 -0
  418. package/src/exports.ts +60 -11
  419. package/src/schema/adapter.test.ts +58 -0
  420. package/src/schema/adapter.ts +45 -0
  421. package/src/schema/compile.test.ts +95 -0
  422. package/src/schema/compile.ts +64 -0
  423. package/src/schema/compute-schema.test.ts +222 -41
  424. package/src/schema/compute-schema.ts +145 -71
  425. package/src/schema/json-schema.ts +21 -0
  426. package/src/schema/typebox.test.ts +40 -0
  427. package/src/schema/typebox.ts +27 -0
  428. package/src/server/context.test.ts +22 -0
  429. package/src/server/context.ts +18 -0
  430. package/src/{doc-envelope.test.ts → server/doc-envelope.test.ts} +2 -2
  431. package/src/{doc-envelope.ts → server/doc-envelope.ts} +1 -1
  432. package/src/{implementations/http → server}/doc-registry.test.ts +32 -26
  433. package/src/{implementations/http → server}/doc-registry.ts +11 -7
  434. package/src/server/docs/docs.test.ts +287 -0
  435. package/src/{implementations/http/hono → server}/docs/http-doc.ts +3 -3
  436. package/src/{implementations/http/hono → server}/docs/http-stream-doc.ts +3 -3
  437. package/src/{implementations/http/hono → server}/docs/rpc-doc.ts +3 -3
  438. package/src/{implementations/http/hono → server}/docs/stream-doc.ts +3 -3
  439. package/src/server/errors/dispatch.test.ts +450 -0
  440. package/src/server/errors/dispatch.ts +189 -0
  441. package/src/{implementations/http/error-taxonomy.test.ts → server/errors/taxonomy.test.ts} +45 -39
  442. package/src/{implementations/http/error-taxonomy.ts → server/errors/taxonomy.ts} +8 -17
  443. package/src/server/index.ts +29 -0
  444. package/src/server/no-framework-imports.test.ts +43 -0
  445. package/src/server/paths.test.ts +141 -0
  446. package/src/{implementations/http/hono/path.ts → server/paths.ts} +2 -13
  447. package/src/server/request/params.test.ts +143 -0
  448. package/src/server/request/params.ts +68 -0
  449. package/src/server/request/query.test.ts +70 -0
  450. package/src/server/request/query.ts +24 -0
  451. package/src/server/sse.test.ts +113 -0
  452. package/src/server/sse.ts +117 -0
  453. package/src/{implementations → server}/types.ts +17 -16
  454. package/build/create-http-stream.d.ts +0 -58
  455. package/build/create-http-stream.js +0 -122
  456. package/build/create-http-stream.js.map +0 -1
  457. package/build/create-http-stream.test.js.map +0 -1
  458. package/build/create-http.d.ts +0 -49
  459. package/build/create-http.js +0 -108
  460. package/build/create-http.js.map +0 -1
  461. package/build/create-http.test.js.map +0 -1
  462. package/build/create-stream.d.ts +0 -35
  463. package/build/create-stream.js +0 -123
  464. package/build/create-stream.js.map +0 -1
  465. package/build/create-stream.test.js.map +0 -1
  466. package/build/create.d.ts +0 -28
  467. package/build/create.js +0 -82
  468. package/build/create.js.map +0 -1
  469. package/build/create.test.js.map +0 -1
  470. package/build/doc-envelope.js.map +0 -1
  471. package/build/doc-envelope.test.js.map +0 -1
  472. package/build/errors.js.map +0 -1
  473. package/build/errors.test.js.map +0 -1
  474. package/build/implementations/http/astro/astro-context.js.map +0 -1
  475. package/build/implementations/http/astro/create-handler.js.map +0 -1
  476. package/build/implementations/http/astro/index.js.map +0 -1
  477. package/build/implementations/http/astro/index.test.js.map +0 -1
  478. package/build/implementations/http/astro/rewrite-request.js.map +0 -1
  479. package/build/implementations/http/doc-registry.js.map +0 -1
  480. package/build/implementations/http/doc-registry.test.js.map +0 -1
  481. package/build/implementations/http/error-dispatch.d.ts +0 -76
  482. package/build/implementations/http/error-dispatch.js.map +0 -1
  483. package/build/implementations/http/error-dispatch.test.js +0 -254
  484. package/build/implementations/http/error-dispatch.test.js.map +0 -1
  485. package/build/implementations/http/error-taxonomy.js.map +0 -1
  486. package/build/implementations/http/error-taxonomy.test.js.map +0 -1
  487. package/build/implementations/http/hono/docs/http-doc.js.map +0 -1
  488. package/build/implementations/http/hono/docs/http-stream-doc.js.map +0 -1
  489. package/build/implementations/http/hono/docs/rpc-doc.js.map +0 -1
  490. package/build/implementations/http/hono/docs/stream-doc.js.map +0 -1
  491. package/build/implementations/http/hono/handlers/http-stream.js +0 -123
  492. package/build/implementations/http/hono/handlers/http-stream.js.map +0 -1
  493. package/build/implementations/http/hono/handlers/http-stream.test.js.map +0 -1
  494. package/build/implementations/http/hono/handlers/http.js +0 -110
  495. package/build/implementations/http/hono/handlers/http.js.map +0 -1
  496. package/build/implementations/http/hono/handlers/http.test.js.map +0 -1
  497. package/build/implementations/http/hono/handlers/rpc.js +0 -32
  498. package/build/implementations/http/hono/handlers/rpc.js.map +0 -1
  499. package/build/implementations/http/hono/handlers/rpc.test.js.map +0 -1
  500. package/build/implementations/http/hono/handlers/stream.d.ts +0 -23
  501. package/build/implementations/http/hono/handlers/stream.js +0 -147
  502. package/build/implementations/http/hono/handlers/stream.js.map +0 -1
  503. package/build/implementations/http/hono/handlers/stream.test.js.map +0 -1
  504. package/build/implementations/http/hono/index.js.map +0 -1
  505. package/build/implementations/http/hono/index.test.js.map +0 -1
  506. package/build/implementations/http/hono/path.js.map +0 -1
  507. package/build/implementations/http/hono/path.test.js +0 -83
  508. package/build/implementations/http/hono/path.test.js.map +0 -1
  509. package/build/implementations/http/hono/types.d.ts +0 -51
  510. package/build/implementations/http/hono/types.js.map +0 -1
  511. package/build/implementations/http/on-request-error.test.js.map +0 -1
  512. package/build/implementations/http/route-errors.test.js.map +0 -1
  513. package/build/index.d.ts +0 -175
  514. package/build/index.js +0 -47
  515. package/build/index.js.map +0 -1
  516. package/build/index.test.js.map +0 -1
  517. package/build/migration.test.js.map +0 -1
  518. package/build/schema/extract-json-schema.d.ts +0 -2
  519. package/build/schema/extract-json-schema.js +0 -12
  520. package/build/schema/extract-json-schema.js.map +0 -1
  521. package/build/schema/extract-json-schema.test.js +0 -23
  522. package/build/schema/extract-json-schema.test.js.map +0 -1
  523. package/build/schema/parser.d.ts +0 -36
  524. package/build/schema/parser.js +0 -210
  525. package/build/schema/parser.js.map +0 -1
  526. package/build/schema/parser.test.js +0 -120
  527. package/build/schema/parser.test.js.map +0 -1
  528. package/build/schema/resolve-schema-lib.d.ts +0 -12
  529. package/build/schema/resolve-schema-lib.js +0 -11
  530. package/build/schema/resolve-schema-lib.js.map +0 -1
  531. package/build/schema/resolve-schema-lib.test.js +0 -17
  532. package/build/schema/resolve-schema-lib.test.js.map +0 -1
  533. package/build/schema/types.d.ts +0 -8
  534. package/build/schema/types.js +0 -2
  535. package/build/stack-utils.d.ts +0 -25
  536. package/build/stack-utils.js.map +0 -1
  537. package/build/stack-utils.test.js.map +0 -1
  538. package/build/types.d.ts +0 -142
  539. package/build/types.js +0 -2
  540. package/build/types.js.map +0 -1
  541. package/docs/decisions/2026-06-02-monorepo-split-evaluation.md +0 -80
  542. package/docs/handoffs/2026-06-08-dx-round2-declines.md +0 -45
  543. package/docs/handoffs/ajsc-named-type-collision.md +0 -134
  544. package/docs/handoffs/ajsc-named-type-support.md +0 -181
  545. package/docs/handoffs/shared-models-auto-resolve-response.md +0 -181
  546. package/docs/npm-workspaces-migration-plan.md +0 -611
  547. package/docs/superpowers/plans/2026-04-24-doc-registry-simplification.md +0 -886
  548. package/docs/superpowers/plans/2026-04-24-kotlin-codegen-target.md +0 -1265
  549. package/docs/superpowers/plans/2026-04-25-ajsc-v7-kotlin-polish.md +0 -1993
  550. package/docs/superpowers/plans/2026-04-29-safe-result-api.md +0 -2293
  551. package/docs/superpowers/plans/2026-05-07-astro-adapter.md +0 -1391
  552. package/docs/superpowers/plans/2026-05-08-create-http.md +0 -3355
  553. package/docs/superpowers/plans/2026-05-08-hono-app-builder-convergence.md +0 -3365
  554. package/docs/superpowers/plans/2026-06-05-dx-feedback-round.md +0 -1292
  555. package/docs/superpowers/plans/2026-06-06-shared-models-convention-and-diagnostics.md +0 -659
  556. package/docs/superpowers/plans/2026-06-08-codegen-dx-surfacing.md +0 -428
  557. package/docs/superpowers/specs/2026-04-24-kotlin-swift-codegen-design.md +0 -401
  558. package/docs/superpowers/specs/2026-04-25-ajsc-v7-kotlin-polish-design.md +0 -314
  559. package/docs/superpowers/specs/2026-04-25-swift-codegen-design.md +0 -264
  560. package/docs/superpowers/specs/2026-04-29-safe-result-api-design.md +0 -324
  561. package/docs/superpowers/specs/2026-05-07-astro-adapter-design.md +0 -252
  562. package/docs/superpowers/specs/2026-05-08-create-http-design.md +0 -409
  563. package/docs/superpowers/specs/2026-05-08-hono-app-builder-convergence-design.md +0 -411
  564. package/docs/superpowers/specs/2026-06-05-dx-feedback-round-design.md +0 -285
  565. package/docs/superpowers/specs/2026-06-08-dx-feedback-round-2-design.md +0 -376
  566. package/src/create-http-stream.ts +0 -191
  567. package/src/create-http.ts +0 -210
  568. package/src/create-stream.ts +0 -228
  569. package/src/create.ts +0 -172
  570. package/src/implementations/http/README.md +0 -390
  571. package/src/implementations/http/error-dispatch.test.ts +0 -283
  572. package/src/implementations/http/error-dispatch.ts +0 -176
  573. package/src/implementations/http/hono/handlers/http-stream.ts +0 -152
  574. package/src/implementations/http/hono/handlers/http.ts +0 -145
  575. package/src/implementations/http/hono/handlers/rpc.ts +0 -54
  576. package/src/implementations/http/hono/path.test.ts +0 -96
  577. package/src/index.ts +0 -101
  578. package/src/schema/extract-json-schema.test.ts +0 -25
  579. package/src/schema/extract-json-schema.ts +0 -15
  580. package/src/schema/parser.test.ts +0 -182
  581. package/src/schema/parser.ts +0 -265
  582. package/src/schema/resolve-schema-lib.test.ts +0 -19
  583. package/src/schema/resolve-schema-lib.ts +0 -29
  584. package/src/schema/types.ts +0 -20
  585. package/src/types.ts +0 -133
  586. /package/build/{implementations/http → adapters}/astro/astro-context.d.ts +0 -0
  587. /package/build/{implementations/http → adapters}/astro/astro-context.js +0 -0
  588. /package/build/{implementations/http → adapters}/astro/create-handler.d.ts +0 -0
  589. /package/build/{implementations/http → adapters}/astro/create-handler.js +0 -0
  590. /package/build/{implementations/http → adapters}/astro/index.d.ts +0 -0
  591. /package/build/{implementations/http → adapters}/astro/index.js +0 -0
  592. /package/build/{implementations/http → adapters}/astro/index.test.d.ts +0 -0
  593. /package/build/{implementations/http → adapters}/astro/rewrite-request.d.ts +0 -0
  594. /package/build/{implementations/http → adapters}/astro/rewrite-request.js +0 -0
  595. /package/build/{create-http-stream.test.d.ts → adapters/hono/envelope-parity.test.d.ts} +0 -0
  596. /package/build/{implementations/http → adapters}/hono/handlers/http-stream.test.d.ts +0 -0
  597. /package/build/{implementations/http → adapters}/hono/handlers/http.test.d.ts +0 -0
  598. /package/build/{implementations/http → adapters}/hono/handlers/rpc.test.d.ts +0 -0
  599. /package/build/{implementations/http → adapters}/hono/handlers/stream.test.d.ts +0 -0
  600. /package/build/{implementations/http → adapters}/hono/index.test.d.ts +0 -0
  601. /package/build/{implementations/http → adapters/hono}/on-request-error.test.d.ts +0 -0
  602. /package/build/{implementations/http → adapters/hono}/route-errors.test.d.ts +0 -0
  603. /package/build/{create-http.test.d.ts → client/freeze.test.d.ts} +0 -0
  604. /package/build/{create-stream.test.d.ts → codegen/goldens.test.d.ts} +0 -0
  605. /package/build/{create.test.d.ts → core/create-http-stream.test.d.ts} +0 -0
  606. /package/build/{doc-envelope.test.d.ts → core/create-http.test.d.ts} +0 -0
  607. /package/build/{errors.test.d.ts → core/create-stream.test.d.ts} +0 -0
  608. /package/build/{implementations/http/doc-registry.test.d.ts → core/create.test.d.ts} +0 -0
  609. /package/build/{implementations/http/error-dispatch.test.d.ts → core/definition-site.test.d.ts} +0 -0
  610. /package/build/{implementations/http/error-taxonomy.test.d.ts → core/errors.test.d.ts} +0 -0
  611. /package/build/{errors.test.js → core/errors.test.js} +0 -0
  612. /package/build/{implementations/http/hono/path.test.d.ts → core/factory-options.test.d.ts} +0 -0
  613. /package/build/{migration.test.d.ts → core/migration.test.d.ts} +0 -0
  614. /package/build/{index.test.d.ts → core/procedures.test.d.ts} +0 -0
  615. /package/build/{implementations/http/hono → core}/types.js +0 -0
  616. /package/build/schema/{extract-json-schema.test.d.ts → adapter.test.d.ts} +0 -0
  617. /package/build/schema/{parser.test.d.ts → compile.test.d.ts} +0 -0
  618. /package/build/schema/{resolve-schema-lib.test.d.ts → typebox.test.d.ts} +0 -0
  619. /package/build/{stack-utils.test.d.ts → server/context.test.d.ts} +0 -0
  620. /package/build/{doc-envelope.js → server/doc-envelope.js} +0 -0
  621. /package/build/{doc-envelope.test.js → server/doc-envelope.test.js} +0 -0
  622. /package/build/{implementations → server}/types.js +0 -0
  623. /package/src/{implementations/http → adapters}/astro/README.md +0 -0
  624. /package/src/{implementations/http → adapters}/astro/astro-context.ts +0 -0
  625. /package/src/{implementations/http → adapters}/astro/create-handler.ts +0 -0
  626. /package/src/{implementations/http → adapters}/astro/index.ts +0 -0
  627. /package/src/{implementations/http → adapters}/astro/rewrite-request.ts +0 -0
@@ -1,11 +1,31 @@
1
- export * from './index.js';
2
- export * from './errors.js';
3
- export * from './stack-utils.js';
4
- export * from './schema/extract-json-schema.js';
5
- export * from './schema/parser.js';
6
- export * from './schema/resolve-schema-lib.js';
7
- export * from './schema/types.js';
8
- export type { HttpReturn } from './create-http.js';
9
- export type { TCreateHttpConfig } from './types.js';
10
- export { writeDocEnvelope, type DocEnvelopeSource } from './doc-envelope.js';
11
- export type { DocEnvelope } from './implementations/types.js';
1
+ /**
2
+ * ts-procedures — root entry point.
3
+ *
4
+ * Subpath exports:
5
+ * - `ts-procedures/hono` — HonoAppBuilder server adapter
6
+ * - `ts-procedures/astro` — Astro catch-all adapter (delegates to Hono apps)
7
+ * - `ts-procedures/server` — transport-agnostic server layer (build your own adapter)
8
+ * - `ts-procedures/http` HTTP doc/config types (types only)
9
+ * - `ts-procedures/http-docs` DocRegistry (multi-app envelope aggregation)
10
+ * - `ts-procedures/http-errors` error taxonomy helpers
11
+ * - `ts-procedures/client` runtime client for generated code
12
+ * - `ts-procedures/codegen` — client code generation (also: npx ts-procedures-codegen)
13
+ */
14
+ export { Procedures } from './core/procedures.js';
15
+ export type { ProceduresOptions, ProcedureKind, AnyProcedureRegistration, TProcedureRegistration, TStreamProcedureRegistration, THttpProcedureRegistration, THttpStreamProcedureRegistration, TCreateHttpConfig, TLocalContext, TStreamContext, TNoContextProvided, HttpMethod, } from './core/types.js';
16
+ export type { HttpReturn } from './core/create-http.js';
17
+ export { ProcedureError, ProcedureValidationError, ProcedureRegistrationError, ProcedureYieldValidationError, } from './core/errors.js';
18
+ export type { ProcedureErrorKind } from './core/errors.js';
19
+ export { captureDefinitionInfo, formatDefinitionInfo } from './core/definition-site.js';
20
+ export type { DefinitionInfo, DefinitionLocation } from './core/definition-site.js';
21
+ export type { SchemaAdapter } from './schema/adapter.js';
22
+ export { extractJsonSchema } from './schema/adapter.js';
23
+ export { typeboxAdapter, isTypeboxSchema } from './schema/typebox.js';
24
+ export { computeSchema } from './schema/compute-schema.js';
25
+ export type { ComputedSchema } from './schema/compute-schema.js';
26
+ export { createValidatorCompiler, DEFAULT_AJV_OPTIONS } from './schema/compile.js';
27
+ export type { Validate, ValidatorCompiler, ValidationOptions, TSchemaValidationError, } from './schema/compile.js';
28
+ export type { Infer, TSchemaLib, TJSONSchema, Prettify } from './schema/json-schema.js';
29
+ export { writeDocEnvelope } from './server/doc-envelope.js';
30
+ export type { DocEnvelopeSource } from './server/doc-envelope.js';
31
+ export type { DocEnvelope } from './server/types.js';
package/build/exports.js CHANGED
@@ -1,9 +1,24 @@
1
- export * from './index.js';
2
- export * from './errors.js';
3
- export * from './stack-utils.js';
4
- export * from './schema/extract-json-schema.js';
5
- export * from './schema/parser.js';
6
- export * from './schema/resolve-schema-lib.js';
7
- export * from './schema/types.js';
8
- export { writeDocEnvelope } from './doc-envelope.js';
1
+ /**
2
+ * ts-procedures — root entry point.
3
+ *
4
+ * Subpath exports:
5
+ * - `ts-procedures/hono` — HonoAppBuilder server adapter
6
+ * - `ts-procedures/astro` — Astro catch-all adapter (delegates to Hono apps)
7
+ * - `ts-procedures/server` — transport-agnostic server layer (build your own adapter)
8
+ * - `ts-procedures/http` HTTP doc/config types (types only)
9
+ * - `ts-procedures/http-docs` — DocRegistry (multi-app envelope aggregation)
10
+ * - `ts-procedures/http-errors` — error taxonomy helpers
11
+ * - `ts-procedures/client` — runtime client for generated code
12
+ * - `ts-procedures/codegen` — client code generation (also: npx ts-procedures-codegen)
13
+ */
14
+ // Core — the Procedures factory and everything handlers touch
15
+ export { Procedures } from './core/procedures.js';
16
+ export { ProcedureError, ProcedureValidationError, ProcedureRegistrationError, ProcedureYieldValidationError, } from './core/errors.js';
17
+ export { captureDefinitionInfo, formatDefinitionInfo } from './core/definition-site.js';
18
+ export { extractJsonSchema } from './schema/adapter.js';
19
+ export { typeboxAdapter, isTypeboxSchema } from './schema/typebox.js';
20
+ export { computeSchema } from './schema/compute-schema.js';
21
+ export { createValidatorCompiler, DEFAULT_AJV_OPTIONS } from './schema/compile.js';
22
+ // Doc envelope — offline codegen input
23
+ export { writeDocEnvelope } from './server/doc-envelope.js';
9
24
  //# sourceMappingURL=exports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oBAAoB,CAAA;AAClC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,mBAAmB,CAAA;AAGjC,OAAO,EAAE,gBAAgB,EAA0B,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,8DAA8D;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAgBjD,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAKvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AASlF,uCAAuC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,35 @@
1
+ import type { TJSONSchema } from './json-schema.js';
2
+ /**
3
+ * Bridges a schema library to the framework.
4
+ *
5
+ * The framework only ever needs one thing from a schema object: its JSON
6
+ * Schema. Everything downstream (AJV validation, route docs, codegen) works on
7
+ * JSON Schema. Implement this interface to plug in any schema library:
8
+ *
9
+ * ```ts
10
+ * const zodAdapter: SchemaAdapter = {
11
+ * name: 'zod',
12
+ * detect: (s) => s instanceof z.ZodType,
13
+ * toJsonSchema: (s) => z.toJSONSchema(s as z.ZodType),
14
+ * }
15
+ * const { Create } = Procedures({ schema: { adapters: [zodAdapter] } })
16
+ * ```
17
+ *
18
+ * Note: compile-time type inference (`Infer<T>`) is only built in for TypeBox;
19
+ * custom adapters get runtime validation and docs, with params inferred as
20
+ * `unknown` unless you annotate handler types yourself.
21
+ */
22
+ export interface SchemaAdapter {
23
+ /** Short identifier used in registration error messages. */
24
+ name: string;
25
+ /** Whether this adapter recognizes the given schema object. */
26
+ detect(schema: unknown): boolean;
27
+ /** Converts a recognized schema object to JSON Schema. */
28
+ toJsonSchema(schema: unknown): TJSONSchema;
29
+ }
30
+ /**
31
+ * Runs the adapter chain against a schema value. Returns the JSON Schema from
32
+ * the first adapter whose `detect` matches, or `undefined` when no adapter
33
+ * recognizes the value (the caller reports the registration error).
34
+ */
35
+ export declare function extractJsonSchema(schema: unknown, adapters: readonly SchemaAdapter[]): TJSONSchema | undefined;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Runs the adapter chain against a schema value. Returns the JSON Schema from
3
+ * the first adapter whose `detect` matches, or `undefined` when no adapter
4
+ * recognizes the value (the caller reports the registration error).
5
+ */
6
+ export function extractJsonSchema(schema, adapters) {
7
+ for (const adapter of adapters) {
8
+ if (adapter.detect(schema))
9
+ return adapter.toJsonSchema(schema);
10
+ }
11
+ return undefined;
12
+ }
13
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/schema/adapter.ts"],"names":[],"mappings":"AA+BA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAe,EACf,QAAkC;IAElC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import { Type } from 'typebox';
3
+ import { extractJsonSchema } from './adapter.js';
4
+ import { typeboxAdapter } from './typebox.js';
5
+ describe('extractJsonSchema()', () => {
6
+ const typebox = Type.Object({ name: Type.String() });
7
+ test('it extracts TypeBox json-schema', () => {
8
+ expect(extractJsonSchema(typebox, [typeboxAdapter])).toMatchObject({
9
+ type: 'object',
10
+ properties: { name: { type: 'string' } },
11
+ required: ['name'],
12
+ });
13
+ });
14
+ test('it returns undefined when no adapter recognizes the value', () => {
15
+ expect(extractJsonSchema({ type: 'object' }, [typeboxAdapter])).toBeUndefined();
16
+ expect(extractJsonSchema('string value', [typeboxAdapter])).toBeUndefined();
17
+ expect(extractJsonSchema(null, [typeboxAdapter])).toBeUndefined();
18
+ expect(extractJsonSchema(undefined, [typeboxAdapter])).toBeUndefined();
19
+ });
20
+ test('it returns undefined when the adapter list is empty', () => {
21
+ expect(extractJsonSchema(typebox, [])).toBeUndefined();
22
+ });
23
+ test('it runs the adapter chain in order — first match wins', () => {
24
+ const everything = {
25
+ name: 'everything',
26
+ detect: () => true,
27
+ toJsonSchema: () => ({ type: 'string' }),
28
+ };
29
+ // typeboxAdapter first: TypeBox schema goes through identity conversion
30
+ expect(extractJsonSchema(typebox, [typeboxAdapter, everything])).toBe(typebox);
31
+ // everything first: it claims the value before typeboxAdapter sees it
32
+ expect(extractJsonSchema(typebox, [everything, typeboxAdapter])).toEqual({ type: 'string' });
33
+ });
34
+ test('it supports custom adapters for non-TypeBox schema objects', () => {
35
+ class FakeZodType {
36
+ jsonSchema;
37
+ constructor(jsonSchema) {
38
+ this.jsonSchema = jsonSchema;
39
+ }
40
+ }
41
+ const fakeZodAdapter = {
42
+ name: 'fake-zod',
43
+ detect: (s) => s instanceof FakeZodType,
44
+ toJsonSchema: (s) => s.jsonSchema,
45
+ };
46
+ const schema = new FakeZodType({ type: 'object', properties: { id: { type: 'number' } } });
47
+ expect(extractJsonSchema(schema, [typeboxAdapter, fakeZodAdapter])).toEqual({
48
+ type: 'object',
49
+ properties: { id: { type: 'number' } },
50
+ });
51
+ });
52
+ });
53
+ //# sourceMappingURL=adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.test.js","sourceRoot":"","sources":["../../src/schema/adapter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import * as AJV from 'ajv';
2
+ import type { TJSONSchema } from './json-schema.js';
3
+ export type TSchemaValidationError = AJV.ErrorObject;
4
+ /**
5
+ * A compiled validator. Returns `{}` on success, `{ errors }` on failure —
6
+ * the same shape AJV-based validators have carried since v1, and the shape
7
+ * every registration's `config.validation.*` function exposes.
8
+ */
9
+ export type Validate = (value?: any) => {
10
+ errors?: TSchemaValidationError[];
11
+ };
12
+ /** Compiles a JSON Schema into a {@link Validate} function. */
13
+ export type ValidatorCompiler = (jsonSchema: TJSONSchema) => Validate;
14
+ /**
15
+ * `Procedures({ validation })` shape:
16
+ * - omitted — validate with the default AJV configuration
17
+ * - `false` — skip per-call validation entirely (schemas/validators are still
18
+ * computed at registration time so bad schemas fail fast)
19
+ * - `{ ajv }` — custom AJV options merged over the defaults, or a fully
20
+ * configured `Ajv` instance to use as-is
21
+ */
22
+ export type ValidationOptions = false | {
23
+ ajv?: AJV.Ajv | AJV.Options;
24
+ };
25
+ /**
26
+ * Default AJV configuration — unchanged from every prior major version:
27
+ * report all errors, coerce primitive types, strip unknown properties.
28
+ */
29
+ export declare const DEFAULT_AJV_OPTIONS: AJV.Options;
30
+ /**
31
+ * Creates a {@link ValidatorCompiler} backed by AJV. Each `Procedures()`
32
+ * factory owns one compiler, so AJV configuration is per-factory instead of
33
+ * a module-level singleton.
34
+ */
35
+ export declare function createValidatorCompiler(options?: {
36
+ ajv?: AJV.Ajv | AJV.Options;
37
+ }): ValidatorCompiler;
@@ -0,0 +1,38 @@
1
+ import { default as addFormats } from 'ajv-formats';
2
+ import * as AJV from 'ajv';
3
+ /**
4
+ * Default AJV configuration — unchanged from every prior major version:
5
+ * report all errors, coerce primitive types, strip unknown properties.
6
+ */
7
+ export const DEFAULT_AJV_OPTIONS = {
8
+ allErrors: true,
9
+ coerceTypes: true,
10
+ removeAdditional: true,
11
+ };
12
+ function isAjvInstance(value) {
13
+ return typeof value?.compile === 'function';
14
+ }
15
+ /**
16
+ * Creates a {@link ValidatorCompiler} backed by AJV. Each `Procedures()`
17
+ * factory owns one compiler, so AJV configuration is per-factory instead of
18
+ * a module-level singleton.
19
+ */
20
+ export function createValidatorCompiler(options) {
21
+ const ajv = isAjvInstance(options?.ajv)
22
+ ? options.ajv
23
+ : // eslint-disable-next-line @typescript-eslint/ban-ts-comment
24
+ // @ts-expect-error ajv-formats' types lag behind ajv's
25
+ addFormats(new AJV.Ajv({ ...DEFAULT_AJV_OPTIONS, ...options?.ajv }));
26
+ return function compile(jsonSchema) {
27
+ const validator = ajv.compile(jsonSchema);
28
+ return (value) => {
29
+ const valid = validator(value);
30
+ if (!valid) {
31
+ const errors = validator.errors;
32
+ return { errors: errors?.length ? [...errors] : undefined };
33
+ }
34
+ return {};
35
+ };
36
+ };
37
+ }
38
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/schema/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAyB1B;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAgB;IAC9C,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,IAAI;CACvB,CAAA;AAED,SAAS,aAAa,CAAC,KAAwC;IAC7D,OAAO,OAAQ,KAA2C,EAAE,OAAO,KAAK,UAAU,CAAA;AACpF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAyC;IAC/E,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC;QACrC,CAAC,CAAC,OAAO,CAAC,GAAG;QACb,CAAC,CAAC,6DAA6D;YAC7D,uDAAuD;YACtD,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,mBAAmB,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,CAAC,CAAa,CAAA;IAErF,OAAO,SAAS,OAAO,CAAC,UAAuB;QAC7C,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACzC,OAAO,CAAC,KAAW,EAAE,EAAE;YACrB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAA;gBAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;YAC7D,CAAC;YACD,OAAO,EAAE,CAAA;QACX,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import { Type } from 'typebox';
3
+ import * as AJV from 'ajv';
4
+ import { createValidatorCompiler, DEFAULT_AJV_OPTIONS } from './compile.js';
5
+ describe('createValidatorCompiler', () => {
6
+ describe('default configuration', () => {
7
+ const compile = createValidatorCompiler();
8
+ test('validator returns {} on success', () => {
9
+ const validate = compile(Type.Object({ name: Type.String(), age: Type.Number() }));
10
+ const result = validate({ name: 'John', age: 30 });
11
+ expect(result).toEqual({});
12
+ expect(result.errors).toBeUndefined();
13
+ });
14
+ test('validator returns { errors } on failure', () => {
15
+ const validate = compile(Type.Object({ name: Type.String() }));
16
+ const result = validate({});
17
+ expect(result.errors).toBeDefined();
18
+ expect(result.errors?.[0]?.message).toMatch(/must have required property 'name'/);
19
+ });
20
+ test('allErrors: reports every failure, not just the first', () => {
21
+ const validate = compile(Type.Object({ name: Type.String(), age: Type.Number() }));
22
+ const result = validate({ name: { nested: '' }, age: 'not-a-number' });
23
+ expect(result.errors?.length).toEqual(2);
24
+ });
25
+ test('coerceTypes: coerces primitive types in place', () => {
26
+ const validate = compile(Type.Object({ age: Type.Number() }));
27
+ const value = { age: '30' };
28
+ expect(validate(value).errors).toBeUndefined();
29
+ expect(value.age).toBe(30);
30
+ });
31
+ test('removeAdditional: strips unknown properties in place', () => {
32
+ const validate = compile(Type.Object({ name: Type.String() }, { additionalProperties: false }));
33
+ const value = { name: 'John', extra: 'gone' };
34
+ expect(validate(value).errors).toBeUndefined();
35
+ expect(value).toEqual({ name: 'John' });
36
+ });
37
+ test('ajv-formats is wired in (format keywords validate)', () => {
38
+ const validate = compile(Type.Object({ email: Type.String({ format: 'email' }) }));
39
+ expect(validate({ email: 'john@example.com' }).errors).toBeUndefined();
40
+ expect(validate({ email: 'not-an-email' }).errors).toBeDefined();
41
+ });
42
+ test('compile throws on an invalid JSON schema', () => {
43
+ expect(() => compile({ type: 'invalid-schema-type' })).toThrow();
44
+ });
45
+ test('DEFAULT_AJV_OPTIONS matches the documented v8 behavior', () => {
46
+ expect(DEFAULT_AJV_OPTIONS).toEqual({
47
+ allErrors: true,
48
+ coerceTypes: true,
49
+ removeAdditional: true,
50
+ });
51
+ });
52
+ });
53
+ describe('custom AJV options merge over the defaults', () => {
54
+ test('coerceTypes: false disables coercion while keeping other defaults', () => {
55
+ const compile = createValidatorCompiler({ ajv: { coerceTypes: false } });
56
+ const validate = compile(Type.Object({ age: Type.Number(), name: Type.String() }));
57
+ // No coercion: a string is no longer accepted for a number
58
+ expect(validate({ age: '30', name: 'John' }).errors).toBeDefined();
59
+ expect(validate({ age: 30, name: 'John' }).errors).toBeUndefined();
60
+ // allErrors default still applies (both bad fields reported)
61
+ expect(validate({ age: 'x', name: 42 }).errors?.length).toEqual(2);
62
+ });
63
+ });
64
+ describe('preconfigured Ajv instance', () => {
65
+ test('uses the instance as-is (no default options applied)', () => {
66
+ const ajv = new AJV.Ajv(); // no coerceTypes, no allErrors, no formats
67
+ const compile = createValidatorCompiler({ ajv });
68
+ const validate = compile(Type.Object({ age: Type.Number(), name: Type.String() }));
69
+ // No coercion from the default config
70
+ expect(validate({ age: '30', name: 'John' }).errors).toBeDefined();
71
+ // No allErrors: only the first failure is reported
72
+ expect(validate({ age: 'x', name: 42 }).errors?.length).toEqual(1);
73
+ // Valid input still passes
74
+ expect(validate({ age: 30, name: 'John' }).errors).toBeUndefined();
75
+ });
76
+ });
77
+ });
78
+ //# sourceMappingURL=compile.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.test.js","sourceRoot":"","sources":["../../src/schema/compile.test.ts"],"names":[],"mappings":"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"}
@@ -1,43 +1,53 @@
1
- import type { TSchemaValidationError } from './parser.js';
2
- import type { TJSONSchema } from './types.js';
3
- import type { DefinitionInfo } from '../stack-utils.js';
4
- /**
5
- * This function is used to compute the JSON schema and validation functions
6
- * for a given schema.
7
- *
8
- * @param name The name of the procedure
9
- * @param schema Procedure schema
10
- * @param definitionInfo Optional definition info for error reporting
11
- */
12
- export declare function computeSchema<TParamsSchemaType, TReturnTypeSchemaType, TYieldTypeSchemaType = unknown>(name: string, schema?: {
13
- params?: TParamsSchemaType;
14
- returnType?: TReturnTypeSchemaType;
15
- yieldType?: TYieldTypeSchemaType;
1
+ import type { DefinitionInfo } from '../core/definition-site.js';
2
+ import type { SchemaAdapter } from './adapter.js';
3
+ import type { TJSONSchema } from './json-schema.js';
4
+ import type { TSchemaValidationError, Validate, ValidatorCompiler } from './compile.js';
5
+ export type ComputedJsonSchema = {
6
+ params?: TJSONSchema;
7
+ returnType?: TJSONSchema;
8
+ yieldType?: TJSONSchema;
9
+ req?: Record<string, TJSONSchema>;
10
+ res?: {
11
+ body?: TJSONSchema;
12
+ headers?: TJSONSchema;
13
+ };
14
+ };
15
+ export type ComputedValidations = {
16
+ params?: Validate;
17
+ yield?: Validate;
18
+ req?: Record<string, Validate>;
19
+ };
20
+ export type ComputedSchema = {
21
+ jsonSchema: ComputedJsonSchema;
22
+ validations: ComputedValidations;
23
+ };
24
+ export type ComputeSchemaInput = {
25
+ params?: unknown;
26
+ returnType?: unknown;
27
+ yieldType?: unknown;
16
28
  req?: Record<string, unknown>;
17
29
  res?: {
18
30
  body?: unknown;
19
31
  headers?: unknown;
20
32
  };
21
- }, definitionInfo?: DefinitionInfo): {
22
- jsonSchema: {
23
- params?: TJSONSchema;
24
- returnType?: TJSONSchema;
25
- yieldType?: TJSONSchema;
26
- req?: Record<string, TJSONSchema>;
27
- res?: {
28
- body?: TJSONSchema;
29
- headers?: TJSONSchema;
30
- };
31
- };
32
- validations: {
33
- params?: (params?: any) => {
34
- errors?: TSchemaValidationError[];
35
- };
36
- yield?: (value?: any) => {
37
- errors?: TSchemaValidationError[];
38
- };
39
- req?: Record<string, (value?: any) => {
40
- errors?: TSchemaValidationError[];
41
- }>;
42
- };
43
33
  };
34
+ /**
35
+ * Computes JSON Schema and validators for a procedure's schema config.
36
+ *
37
+ * Channels:
38
+ * - `params` (RPC input) — validated
39
+ * - `yieldType` (stream output) — validated only when `validateYields: true`
40
+ * - `returnType` — documentation/codegen only, never validated
41
+ * - `req.{pathParams,query,body,headers}` (HTTP input) — each independently validated
42
+ * - `res.{body,headers}` (HTTP output) — documentation/codegen only
43
+ *
44
+ * Guards:
45
+ * - `schema.params` and `schema.req` are mutually exclusive (RPC vs HTTP)
46
+ * - `schema.input` (removed in v8) gets a migration error
47
+ */
48
+ export declare function computeSchema(name: string, schema: ComputeSchemaInput | undefined, options: {
49
+ adapters: readonly SchemaAdapter[];
50
+ compile: ValidatorCompiler;
51
+ definitionInfo?: DefinitionInfo;
52
+ }): ComputedSchema;
53
+ export type { TSchemaValidationError };
@@ -1,16 +1,52 @@
1
- import { schemaParser } from './parser.js';
2
- import { ProcedureRegistrationError } from '../errors.js';
1
+ import { ProcedureRegistrationError } from '../core/errors.js';
2
+ import { extractJsonSchema } from './adapter.js';
3
+ function fail(ctx, channel, detail) {
4
+ throw new ProcedureRegistrationError(ctx.name, `Error parsing schema for ${ctx.name} - ${channel}: ${detail}`, ctx.definitionInfo);
5
+ }
6
+ /**
7
+ * Extracts JSON Schema for one channel via the adapter chain. Throws a
8
+ * `ProcedureRegistrationError` naming the channel when no adapter recognizes
9
+ * the value or the adapter itself throws.
10
+ */
11
+ function extractChannel(ctx, channel, raw) {
12
+ let extracted;
13
+ try {
14
+ extracted = extractJsonSchema(raw, ctx.adapters);
15
+ }
16
+ catch (e) {
17
+ fail(ctx, channel, `Error extracting json schema ${channel} - ${e.message}`);
18
+ }
19
+ if (!extracted) {
20
+ const known = ctx.adapters.map((a) => a.name).join(', ');
21
+ fail(ctx, channel, `Error extracting json schema ${channel} - it might be empty or not recognized by any schema adapter (registered: ${known})`);
22
+ }
23
+ return extracted;
24
+ }
25
+ /** Extracts and compiles one validated channel. */
26
+ function compileChannel(ctx, channel, raw) {
27
+ const jsonSchema = extractChannel(ctx, channel, raw);
28
+ try {
29
+ return { jsonSchema, validate: ctx.compile(jsonSchema) };
30
+ }
31
+ catch (e) {
32
+ fail(ctx, channel, `Error compiling ${channel} for validator - ${e.message}`);
33
+ }
34
+ }
3
35
  /**
4
- * This function is used to compute the JSON schema and validation functions
5
- * for a given schema.
36
+ * Computes JSON Schema and validators for a procedure's schema config.
6
37
  *
7
- * @param name The name of the procedure
8
- * @param schema Procedure schema
9
- * @param definitionInfo Optional definition info for error reporting
38
+ * Channels:
39
+ * - `params` (RPC input) — validated
40
+ * - `yieldType` (stream output) validated only when `validateYields: true`
41
+ * - `returnType` — documentation/codegen only, never validated
42
+ * - `req.{pathParams,query,body,headers}` (HTTP input) — each independently validated
43
+ * - `res.{body,headers}` (HTTP output) — documentation/codegen only
44
+ *
45
+ * Guards:
46
+ * - `schema.params` and `schema.req` are mutually exclusive (RPC vs HTTP)
47
+ * - `schema.input` (removed in v8) gets a migration error
10
48
  */
11
- export function computeSchema(name, schema,
12
- // Used for error stack trace details
13
- definitionInfo) {
49
+ export function computeSchema(name, schema, options) {
14
50
  const jsonSchema = {
15
51
  params: undefined,
16
52
  returnType: undefined,
@@ -19,28 +55,49 @@ definitionInfo) {
19
55
  res: undefined,
20
56
  };
21
57
  const validations = {};
58
+ if (!schema)
59
+ return { jsonSchema, validations };
60
+ const ctx = { name, ...options };
22
61
  // Migration guard: schema.input was removed in v8
23
- if (schema && 'input' in schema && schema.input !== undefined) {
24
- throw new ProcedureRegistrationError(name, `schema.input was removed in v8. Use CreateHttp / CreateHttpStream for per-channel HTTP validation. Procedure: "${name}".`, definitionInfo);
62
+ if ('input' in schema && schema.input !== undefined) {
63
+ throw new ProcedureRegistrationError(name, `schema.input was removed in v8. Use CreateHttp / CreateHttpStream for per-channel HTTP validation. Procedure: "${name}".`, options.definitionInfo);
25
64
  }
26
65
  // Mutual exclusivity: params and req cannot both be defined
27
- if (schema?.params && schema?.req) {
28
- throw new ProcedureRegistrationError(name, `schema.params and schema.req are mutually exclusive for procedure "${name}". Use schema.params for RPC procedures or schema.req for HTTP procedures.`, definitionInfo);
29
- }
30
- if (schema) {
31
- const { jsonSchema: { params, returnType, yieldType, req, res }, validation, } = schemaParser(schema, (errors) => {
32
- throw new ProcedureRegistrationError(name, `Error parsing schema for ${name} - ${Object.entries(errors)
33
- .map(([key, error]) => `${key}: ${error}`)
34
- .join(', ')}`, definitionInfo);
35
- });
36
- jsonSchema.params = params;
37
- jsonSchema.returnType = returnType;
38
- jsonSchema.yieldType = yieldType;
39
- jsonSchema.req = req;
40
- jsonSchema.res = res;
41
- validations.params = validation.params;
42
- validations.yield = validation.yield;
43
- validations.req = validation.req;
66
+ if (schema.params && schema.req) {
67
+ throw new ProcedureRegistrationError(name, `schema.params and schema.req are mutually exclusive for procedure "${name}". Use schema.params for RPC procedures or schema.req for HTTP procedures.`, options.definitionInfo);
68
+ }
69
+ if (schema.params) {
70
+ const { jsonSchema: extracted, validate } = compileChannel(ctx, 'schema.params', schema.params);
71
+ jsonSchema.params = extracted;
72
+ validations.params = validate;
73
+ }
74
+ if (schema.returnType) {
75
+ jsonSchema.returnType = extractChannel(ctx, 'schema.returnType', schema.returnType);
76
+ }
77
+ if (schema.yieldType) {
78
+ const { jsonSchema: extracted, validate } = compileChannel(ctx, 'schema.yieldType', schema.yieldType);
79
+ jsonSchema.yieldType = extracted;
80
+ validations.yield = validate;
81
+ }
82
+ if (schema.req) {
83
+ jsonSchema.req = {};
84
+ validations.req = {};
85
+ for (const [channelName, channelSchema] of Object.entries(schema.req)) {
86
+ if (!channelSchema)
87
+ continue;
88
+ const { jsonSchema: extracted, validate } = compileChannel(ctx, `schema.req.${channelName}`, channelSchema);
89
+ jsonSchema.req[channelName] = extracted;
90
+ validations.req[channelName] = validate;
91
+ }
92
+ }
93
+ if (schema.res) {
94
+ jsonSchema.res = {};
95
+ if (schema.res.body) {
96
+ jsonSchema.res.body = extractChannel(ctx, 'schema.res.body', schema.res.body);
97
+ }
98
+ if (schema.res.headers) {
99
+ jsonSchema.res.headers = extractChannel(ctx, 'schema.res.headers', schema.res.headers);
100
+ }
44
101
  }
45
102
  return { jsonSchema, validations };
46
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compute-schema.js","sourceRoot":"","sources":["../../src/schema/compute-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAIzD;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,MAMC;AACD,qCAAqC;AACrC,cAA+B;IAe/B,MAAM,UAAU,GAMZ;QACF,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,SAAS;QACpB,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,SAAS;KACf,CAAA;IAED,MAAM,WAAW,GAIb,EAAE,CAAA;IAEN,kDAAkD;IAClD,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAK,MAAc,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACvE,MAAM,IAAI,0BAA0B,CAClC,IAAI,EACJ,kHAAkH,IAAI,IAAI,EAC1H,cAAc,CACf,CAAA;IACH,CAAC;IAED,4DAA4D;IAC5D,IAAI,MAAM,EAAE,MAAM,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC;QAClC,MAAM,IAAI,0BAA0B,CAClC,IAAI,EACJ,sEAAsE,IAAI,4EAA4E,EACtJ,cAAc,CACf,CAAA;IACH,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,EACJ,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,EACvD,UAAU,GACX,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAClC,MAAM,IAAI,0BAA0B,CAClC,IAAI,EACJ,4BAA4B,IAAI,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;iBACzD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC;iBACzC,IAAI,CAAC,IAAI,CAAC,EAAE,EACf,cAAc,CACf,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,UAAU,CAAC,MAAM,GAAG,MAAM,CAAA;QAC1B,UAAU,CAAC,UAAU,GAAG,UAAU,CAAA;QAClC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAA;QAChC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAA;QACpB,UAAU,CAAC,GAAG,GAAG,GAAG,CAAA;QACpB,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QACtC,WAAW,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;QACpC,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAA;IAClC,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAA;AACpC,CAAC"}
1
+ {"version":3,"file":"compute-schema.js","sourceRoot":"","sources":["../../src/schema/compute-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAuChD,SAAS,IAAI,CAAC,GAAmB,EAAE,OAAe,EAAE,MAAc;IAChE,MAAM,IAAI,0BAA0B,CAClC,GAAG,CAAC,IAAI,EACR,4BAA4B,GAAG,CAAC,IAAI,MAAM,OAAO,KAAK,MAAM,EAAE,EAC9D,GAAG,CAAC,cAAc,CACnB,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,GAAmB,EAAE,OAAe,EAAE,GAAY;IACxE,IAAI,SAAkC,CAAA;IACtC,IAAI,CAAC;QACH,SAAS,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IAClD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,gCAAgC,OAAO,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAC9E,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxD,IAAI,CACF,GAAG,EACH,OAAO,EACP,gCAAgC,OAAO,6EAA6E,KAAK,GAAG,CAC7H,CAAA;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,mDAAmD;AACnD,SAAS,cAAc,CAAC,GAAmB,EAAE,OAAe,EAAE,GAAY;IACxE,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;IACpD,IAAI,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAA;IAC1D,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,mBAAmB,OAAO,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/E,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,MAAsC,EACtC,OAIC;IAED,MAAM,UAAU,GAAuB;QACrC,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,SAAS;QACpB,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,SAAS;KACf,CAAA;IACD,MAAM,WAAW,GAAwB,EAAE,CAAA;IAE3C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAA;IAE/C,MAAM,GAAG,GAAmB,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAA;IAEhD,kDAAkD;IAClD,IAAI,OAAO,IAAI,MAAM,IAAK,MAA8B,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7E,MAAM,IAAI,0BAA0B,CAClC,IAAI,EACJ,kHAAkH,IAAI,IAAI,EAC1H,OAAO,CAAC,cAAc,CACvB,CAAA;IACH,CAAC;IAED,4DAA4D;IAC5D,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,IAAI,0BAA0B,CAClC,IAAI,EACJ,sEAAsE,IAAI,4EAA4E,EACtJ,OAAO,CAAC,cAAc,CACvB,CAAA;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QAC/F,UAAU,CAAC,MAAM,GAAG,SAAS,CAAA;QAC7B,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAA;IAC/B,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,UAAU,CAAC,UAAU,GAAG,cAAc,CAAC,GAAG,EAAE,mBAAmB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IACrF,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;QACrG,UAAU,CAAC,SAAS,GAAG,SAAS,CAAA;QAChC,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAA;IAC9B,CAAC;IAED,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,UAAU,CAAC,GAAG,GAAG,EAAE,CAAA;QACnB,WAAW,CAAC,GAAG,GAAG,EAAE,CAAA;QACpB,KAAK,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,aAAa;gBAAE,SAAQ;YAC5B,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,cAAc,WAAW,EAAE,EAAE,aAAa,CAAC,CAAA;YAC3G,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;YACvC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAA;QACzC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,UAAU,CAAC,GAAG,GAAG,EAAE,CAAA;QACnB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC/E,CAAC;QACD,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACvB,UAAU,CAAC,GAAG,CAAC,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,oBAAoB,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACxF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAA;AACpC,CAAC"}