ts-procedures 8.6.0 → 9.1.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 (630) hide show
  1. package/CHANGELOG.md +540 -0
  2. package/README.md +166 -101
  3. package/agent_config/claude-code/.claude-plugin/plugin.json +1 -1
  4. package/agent_config/claude-code/agents/ts-procedures-architect.md +11 -10
  5. package/agent_config/claude-code/skills/ts-procedures/SKILL.md +25 -12
  6. package/agent_config/claude-code/skills/ts-procedures/anti-patterns.md +10 -12
  7. package/agent_config/claude-code/skills/ts-procedures/api-reference.md +141 -45
  8. package/agent_config/claude-code/skills/ts-procedures/checklist.md +7 -6
  9. package/agent_config/claude-code/skills/ts-procedures/patterns.md +45 -6
  10. package/agent_config/claude-code/skills/ts-procedures/templates/client.md +1 -1
  11. package/agent_config/claude-code/skills/ts-procedures/templates/hono.md +1 -1
  12. package/agent_config/copilot/copilot-instructions.md +50 -33
  13. package/agent_config/cursor/cursorrules +50 -33
  14. package/build/adapters/astro/astro-context.js.map +1 -0
  15. package/build/adapters/astro/create-handler.js.map +1 -0
  16. package/build/adapters/astro/index.js.map +1 -0
  17. package/build/{implementations/http → adapters}/astro/index.test.js +1 -1
  18. package/build/adapters/astro/index.test.js.map +1 -0
  19. package/build/adapters/astro/rewrite-request.js.map +1 -0
  20. package/build/adapters/hono/envelope-parity.test.js +98 -0
  21. package/build/adapters/hono/envelope-parity.test.js.map +1 -0
  22. package/build/{implementations/http → adapters}/hono/handlers/http-stream.d.ts +1 -1
  23. package/build/adapters/hono/handlers/http-stream.js +55 -0
  24. package/build/adapters/hono/handlers/http-stream.js.map +1 -0
  25. package/build/{implementations/http → adapters}/hono/handlers/http-stream.test.js +1 -1
  26. package/build/adapters/hono/handlers/http-stream.test.js.map +1 -0
  27. package/build/{implementations/http → adapters}/hono/handlers/http.d.ts +1 -1
  28. package/build/adapters/hono/handlers/http.js +50 -0
  29. package/build/adapters/hono/handlers/http.js.map +1 -0
  30. package/build/{implementations/http → adapters}/hono/handlers/http.test.js +1 -1
  31. package/build/adapters/hono/handlers/http.test.js.map +1 -0
  32. package/build/{implementations/http → adapters}/hono/handlers/rpc.d.ts +2 -2
  33. package/build/adapters/hono/handlers/rpc.js +23 -0
  34. package/build/adapters/hono/handlers/rpc.js.map +1 -0
  35. package/build/{implementations/http → adapters}/hono/handlers/rpc.test.js +1 -1
  36. package/build/adapters/hono/handlers/rpc.test.js.map +1 -0
  37. package/build/adapters/hono/handlers/stream.d.ts +12 -0
  38. package/build/adapters/hono/handlers/stream.js +89 -0
  39. package/build/adapters/hono/handlers/stream.js.map +1 -0
  40. package/build/{implementations/http → adapters}/hono/handlers/stream.test.js +3 -2
  41. package/build/adapters/hono/handlers/stream.test.js.map +1 -0
  42. package/build/{implementations/http → adapters}/hono/index.d.ts +24 -12
  43. package/build/{implementations/http → adapters}/hono/index.js +19 -8
  44. package/build/adapters/hono/index.js.map +1 -0
  45. package/build/{implementations/http → adapters}/hono/index.test.js +2 -4
  46. package/build/adapters/hono/index.test.js.map +1 -0
  47. package/build/{implementations/http → adapters/hono}/on-request-error.test.js +2 -2
  48. package/build/adapters/hono/on-request-error.test.js.map +1 -0
  49. package/build/adapters/hono/request.d.ts +7 -0
  50. package/build/adapters/hono/request.js +22 -0
  51. package/build/adapters/hono/request.js.map +1 -0
  52. package/build/{implementations/http → adapters/hono}/route-errors.test.js +4 -4
  53. package/build/adapters/hono/route-errors.test.js.map +1 -0
  54. package/build/adapters/hono/types.d.ts +55 -0
  55. package/build/adapters/hono/types.js +19 -0
  56. package/build/adapters/hono/types.js.map +1 -0
  57. package/build/client/freeze.test.js +39 -0
  58. package/build/client/freeze.test.js.map +1 -0
  59. package/build/client/typed-error-dispatch.test.js +2 -2
  60. package/build/client/typed-error-dispatch.test.js.map +1 -1
  61. package/build/codegen/__fixtures__/make-envelope.d.ts +1 -1
  62. package/build/codegen/bin/cli.d.ts +5 -0
  63. package/build/codegen/bin/cli.js +139 -182
  64. package/build/codegen/bin/cli.js.map +1 -1
  65. package/build/codegen/bin/cli.test.js +12 -2
  66. package/build/codegen/bin/cli.test.js.map +1 -1
  67. package/build/codegen/bin/flag-specs.d.ts +9 -0
  68. package/build/codegen/bin/flag-specs.js +33 -31
  69. package/build/codegen/bin/flag-specs.js.map +1 -1
  70. package/build/codegen/bin/flag-specs.test.js +14 -1
  71. package/build/codegen/bin/flag-specs.test.js.map +1 -1
  72. package/build/codegen/collect-models.d.ts +1 -1
  73. package/build/codegen/emit/api-route.d.ts +8 -0
  74. package/build/codegen/emit/api-route.js +156 -0
  75. package/build/codegen/emit/api-route.js.map +1 -0
  76. package/build/codegen/emit/context.d.ts +30 -0
  77. package/build/codegen/emit/context.js +2 -0
  78. package/build/codegen/emit/context.js.map +1 -0
  79. package/build/codegen/emit/declarations.d.ts +24 -0
  80. package/build/codegen/emit/declarations.js +48 -0
  81. package/build/codegen/emit/declarations.js.map +1 -0
  82. package/build/codegen/emit/format-types.d.ts +61 -0
  83. package/build/codegen/emit/format-types.js +188 -0
  84. package/build/codegen/emit/format-types.js.map +1 -0
  85. package/build/codegen/emit/http-stream-route.d.ts +7 -0
  86. package/build/codegen/emit/http-stream-route.js +138 -0
  87. package/build/codegen/emit/http-stream-route.js.map +1 -0
  88. package/build/codegen/emit/route-shared.d.ts +37 -0
  89. package/build/codegen/emit/route-shared.js +88 -0
  90. package/build/codegen/emit/route-shared.js.map +1 -0
  91. package/build/codegen/emit/rpc-route.d.ts +7 -0
  92. package/build/codegen/emit/rpc-route.js +37 -0
  93. package/build/codegen/emit/rpc-route.js.map +1 -0
  94. package/build/codegen/emit/scope-file.d.ts +39 -0
  95. package/build/codegen/emit/scope-file.js +166 -0
  96. package/build/codegen/emit/scope-file.js.map +1 -0
  97. package/build/codegen/emit/stream-route.d.ts +7 -0
  98. package/build/codegen/emit/stream-route.js +62 -0
  99. package/build/codegen/emit/stream-route.js.map +1 -0
  100. package/build/codegen/emit-errors.d.ts +1 -1
  101. package/build/codegen/emit-errors.integration.test.js +1 -1
  102. package/build/codegen/emit-errors.integration.test.js.map +1 -1
  103. package/build/codegen/emit-scope.d.ts +13 -30
  104. package/build/codegen/emit-scope.js +15 -844
  105. package/build/codegen/emit-scope.js.map +1 -1
  106. package/build/codegen/emit-scope.test.js +67 -0
  107. package/build/codegen/emit-scope.test.js.map +1 -1
  108. package/build/codegen/goldens.test.js +69 -0
  109. package/build/codegen/goldens.test.js.map +1 -0
  110. package/build/codegen/group-routes.d.ts +1 -1
  111. package/build/codegen/pipeline.d.ts +1 -1
  112. package/build/codegen/resolve-envelope.d.ts +1 -1
  113. package/build/codegen/targets/_shared/error-schemas.d.ts +1 -1
  114. package/build/codegen/targets/_shared/route-slots.d.ts +1 -1
  115. package/build/codegen/targets/_shared/target-run.d.ts +1 -1
  116. package/build/codegen/targets/kotlin/emit-route-kotlin.d.ts +1 -1
  117. package/build/codegen/targets/swift/emit-route-swift.d.ts +1 -1
  118. package/build/core/create-http-stream.d.ts +50 -0
  119. package/build/core/create-http-stream.js +108 -0
  120. package/build/core/create-http-stream.js.map +1 -0
  121. package/build/{create-http-stream.test.js → core/create-http-stream.test.js} +1 -1
  122. package/build/core/create-http-stream.test.js.map +1 -0
  123. package/build/core/create-http.d.ts +51 -0
  124. package/build/core/create-http.js +65 -0
  125. package/build/core/create-http.js.map +1 -0
  126. package/build/{create-http.test.js → core/create-http.test.js} +27 -4
  127. package/build/core/create-http.test.js.map +1 -0
  128. package/build/core/create-stream.d.ts +26 -0
  129. package/build/core/create-stream.js +80 -0
  130. package/build/core/create-stream.js.map +1 -0
  131. package/build/{create-stream.test.js → core/create-stream.test.js} +23 -28
  132. package/build/core/create-stream.test.js.map +1 -0
  133. package/build/core/create.d.ts +22 -0
  134. package/build/core/create.js +71 -0
  135. package/build/core/create.js.map +1 -0
  136. package/build/{create.test.js → core/create.test.js} +25 -46
  137. package/build/core/create.test.js.map +1 -0
  138. package/build/core/definition-site.d.ts +24 -0
  139. package/build/{stack-utils.js → core/definition-site.js} +20 -20
  140. package/build/core/definition-site.js.map +1 -0
  141. package/build/{stack-utils.test.js → core/definition-site.test.js} +12 -3
  142. package/build/core/definition-site.test.js.map +1 -0
  143. package/build/{errors.d.ts → core/errors.d.ts} +19 -8
  144. package/build/{errors.js → core/errors.js} +21 -26
  145. package/build/core/errors.js.map +1 -0
  146. package/build/core/errors.test.js.map +1 -0
  147. package/build/core/factory-options.test.js +82 -0
  148. package/build/core/factory-options.test.js.map +1 -0
  149. package/build/core/http-route.d.ts +13 -0
  150. package/build/core/http-route.js +54 -0
  151. package/build/core/http-route.js.map +1 -0
  152. package/build/core/internal.d.ts +72 -0
  153. package/build/core/internal.js +128 -0
  154. package/build/core/internal.js.map +1 -0
  155. package/build/{migration.test.js → core/migration.test.js} +17 -1
  156. package/build/core/migration.test.js.map +1 -0
  157. package/build/core/procedures.d.ts +143 -0
  158. package/build/core/procedures.js +64 -0
  159. package/build/core/procedures.js.map +1 -0
  160. package/build/{index.test.js → core/procedures.test.js} +14 -11
  161. package/build/core/procedures.test.js.map +1 -0
  162. package/build/core/types.d.ts +183 -0
  163. package/build/{schema → core}/types.js.map +1 -1
  164. package/build/exports.d.ts +31 -11
  165. package/build/exports.js +23 -8
  166. package/build/exports.js.map +1 -1
  167. package/build/schema/adapter.d.ts +35 -0
  168. package/build/schema/adapter.js +13 -0
  169. package/build/schema/adapter.js.map +1 -0
  170. package/build/schema/adapter.test.js +53 -0
  171. package/build/schema/adapter.test.js.map +1 -0
  172. package/build/schema/compile.d.ts +37 -0
  173. package/build/schema/compile.js +38 -0
  174. package/build/schema/compile.js.map +1 -0
  175. package/build/schema/compile.test.js +78 -0
  176. package/build/schema/compile.test.js.map +1 -0
  177. package/build/schema/compute-schema.d.ts +47 -37
  178. package/build/schema/compute-schema.js +86 -29
  179. package/build/schema/compute-schema.js.map +1 -1
  180. package/build/schema/compute-schema.test.js +158 -40
  181. package/build/schema/compute-schema.test.js.map +1 -1
  182. package/build/schema/json-schema.d.ts +17 -0
  183. package/build/schema/json-schema.js +2 -0
  184. package/build/schema/json-schema.js.map +1 -0
  185. package/build/schema/typebox.d.ts +11 -0
  186. package/build/schema/typebox.js +24 -0
  187. package/build/schema/typebox.js.map +1 -0
  188. package/build/schema/typebox.test.js +34 -0
  189. package/build/schema/typebox.test.js.map +1 -0
  190. package/build/server/context.d.ts +8 -0
  191. package/build/server/context.js +7 -0
  192. package/build/server/context.js.map +1 -0
  193. package/build/server/context.test.js +16 -0
  194. package/build/server/context.test.js.map +1 -0
  195. package/build/{doc-envelope.d.ts → server/doc-envelope.d.ts} +1 -1
  196. package/build/server/doc-envelope.js.map +1 -0
  197. package/build/server/doc-envelope.test.d.ts +1 -0
  198. package/build/server/doc-envelope.test.js.map +1 -0
  199. package/build/{implementations/http → server}/doc-registry.d.ts +7 -2
  200. package/build/{implementations/http → server}/doc-registry.js +9 -5
  201. package/build/server/doc-registry.js.map +1 -0
  202. package/build/server/doc-registry.test.d.ts +1 -0
  203. package/build/{implementations/http → server}/doc-registry.test.js +27 -24
  204. package/build/server/doc-registry.test.js.map +1 -0
  205. package/build/server/docs/docs.test.d.ts +1 -0
  206. package/build/server/docs/docs.test.js +237 -0
  207. package/build/server/docs/docs.test.js.map +1 -0
  208. package/build/{implementations/http/hono → server}/docs/http-doc.d.ts +2 -2
  209. package/build/{implementations/http/hono → server}/docs/http-doc.js +1 -1
  210. package/build/server/docs/http-doc.js.map +1 -0
  211. package/build/{implementations/http/hono → server}/docs/http-stream-doc.d.ts +2 -2
  212. package/build/{implementations/http/hono → server}/docs/http-stream-doc.js +1 -1
  213. package/build/server/docs/http-stream-doc.js.map +1 -0
  214. package/build/{implementations/http/hono → server}/docs/rpc-doc.d.ts +2 -2
  215. package/build/{implementations/http/hono → server}/docs/rpc-doc.js +1 -1
  216. package/build/server/docs/rpc-doc.js.map +1 -0
  217. package/build/{implementations/http/hono → server}/docs/stream-doc.d.ts +2 -2
  218. package/build/{implementations/http/hono → server}/docs/stream-doc.js +1 -1
  219. package/build/server/docs/stream-doc.js.map +1 -0
  220. package/build/server/errors/dispatch.d.ts +96 -0
  221. package/build/{implementations/http/error-dispatch.js → server/errors/dispatch.js} +20 -10
  222. package/build/server/errors/dispatch.js.map +1 -0
  223. package/build/server/errors/dispatch.test.d.ts +1 -0
  224. package/build/server/errors/dispatch.test.js +418 -0
  225. package/build/server/errors/dispatch.test.js.map +1 -0
  226. package/build/{implementations/http/error-taxonomy.d.ts → server/errors/taxonomy.d.ts} +8 -17
  227. package/build/{implementations/http/error-taxonomy.js → server/errors/taxonomy.js} +6 -15
  228. package/build/server/errors/taxonomy.js.map +1 -0
  229. package/build/server/errors/taxonomy.test.d.ts +1 -0
  230. package/build/{implementations/http/error-taxonomy.test.js → server/errors/taxonomy.test.js} +45 -39
  231. package/build/server/errors/taxonomy.test.js.map +1 -0
  232. package/build/server/index.d.ts +29 -0
  233. package/build/server/index.js +27 -0
  234. package/build/server/index.js.map +1 -0
  235. package/build/server/no-framework-imports.test.d.ts +1 -0
  236. package/build/server/no-framework-imports.test.js +40 -0
  237. package/build/server/no-framework-imports.test.js.map +1 -0
  238. package/build/{implementations/http/hono/path.d.ts → server/paths.d.ts} +2 -3
  239. package/build/{implementations/http/hono/path.js → server/paths.js} +1 -1
  240. package/build/server/paths.js.map +1 -0
  241. package/build/server/paths.test.d.ts +1 -0
  242. package/build/server/paths.test.js +111 -0
  243. package/build/server/paths.test.js.map +1 -0
  244. package/build/server/request/params.d.ts +29 -0
  245. package/build/server/request/params.js +43 -0
  246. package/build/server/request/params.js.map +1 -0
  247. package/build/server/request/params.test.d.ts +1 -0
  248. package/build/server/request/params.test.js +91 -0
  249. package/build/server/request/params.test.js.map +1 -0
  250. package/build/server/request/query.d.ts +9 -0
  251. package/build/server/request/query.js +22 -0
  252. package/build/server/request/query.js.map +1 -0
  253. package/build/server/request/query.test.d.ts +1 -0
  254. package/build/server/request/query.test.js +60 -0
  255. package/build/server/request/query.test.js.map +1 -0
  256. package/build/server/sse.d.ts +70 -0
  257. package/build/server/sse.js +94 -0
  258. package/build/server/sse.js.map +1 -0
  259. package/build/server/sse.test.d.ts +1 -0
  260. package/build/server/sse.test.js +98 -0
  261. package/build/server/sse.test.js.map +1 -0
  262. package/build/{implementations → server}/types.d.ts +17 -15
  263. package/build/{implementations → server}/types.js.map +1 -1
  264. package/docs/astro-adapter.md +8 -9
  265. package/docs/client-and-codegen.md +10 -4
  266. package/docs/client-error-handling.md +5 -5
  267. package/docs/codegen-kotlin.md +2 -3
  268. package/docs/codegen-swift.md +1 -2
  269. package/docs/core.md +135 -54
  270. package/docs/http-integrations.md +58 -6
  271. package/docs/migration-v8-to-v9.md +200 -0
  272. package/docs/plans/2026-06-09-v9-rewrite.md +130 -0
  273. package/docs/specs/2026-06-09-v9-rewrite-design.md +221 -0
  274. package/docs/streaming.md +12 -0
  275. package/package.json +25 -48
  276. package/src/{implementations/http → adapters}/astro/index.test.ts +2 -2
  277. package/src/adapters/hono/__fixtures__/parity-envelope.json +389 -0
  278. package/src/adapters/hono/envelope-parity.test.ts +126 -0
  279. package/src/{implementations/http → adapters}/hono/handlers/http-stream.test.ts +1 -1
  280. package/src/adapters/hono/handlers/http-stream.ts +73 -0
  281. package/src/{implementations/http → adapters}/hono/handlers/http.test.ts +1 -1
  282. package/src/adapters/hono/handlers/http.ts +70 -0
  283. package/src/{implementations/http → adapters}/hono/handlers/rpc.test.ts +2 -2
  284. package/src/adapters/hono/handlers/rpc.ts +39 -0
  285. package/src/{implementations/http → adapters}/hono/handlers/stream.test.ts +4 -3
  286. package/src/{implementations/http → adapters}/hono/handlers/stream.ts +19 -92
  287. package/src/{implementations/http → adapters}/hono/index.test.ts +14 -16
  288. package/src/{implementations/http → adapters}/hono/index.ts +35 -30
  289. package/src/{implementations/http → adapters/hono}/on-request-error.test.ts +3 -3
  290. package/src/adapters/hono/request.ts +28 -0
  291. package/src/{implementations/http → adapters/hono}/route-errors.test.ts +5 -5
  292. package/src/{implementations/http → adapters}/hono/types.ts +43 -20
  293. package/src/client/freeze.test.ts +41 -0
  294. package/src/client/typed-error-dispatch.test.ts +3 -3
  295. package/src/codegen/__fixtures__/make-envelope.ts +1 -1
  296. package/src/codegen/__fixtures__/models-envelope.json +310 -0
  297. package/src/codegen/__goldens__/MANIFEST.json +85 -0
  298. package/src/codegen/__goldens__/kotlin-default--models/Billing.kt +112 -0
  299. package/src/codegen/__goldens__/kotlin-default--models/BillingReports.kt +26 -0
  300. package/src/codegen/__goldens__/kotlin-default--models/Orders.kt +88 -0
  301. package/src/codegen/__goldens__/kotlin-default--users/Users.kt +189 -0
  302. package/src/codegen/__goldens__/swift-default--models/Billing.swift +97 -0
  303. package/src/codegen/__goldens__/swift-default--models/BillingReports.swift +20 -0
  304. package/src/codegen/__goldens__/swift-default--models/Orders.swift +81 -0
  305. package/src/codegen/__goldens__/swift-default--users/Users.swift +204 -0
  306. package/src/codegen/__goldens__/ts-default--models/_client.ts +1319 -0
  307. package/src/codegen/__goldens__/ts-default--models/_errors.ts +90 -0
  308. package/src/codegen/__goldens__/ts-default--models/_models.ts +10 -0
  309. package/src/codegen/__goldens__/ts-default--models/_types.ts +502 -0
  310. package/src/codegen/__goldens__/ts-default--models/billing-reports.ts +29 -0
  311. package/src/codegen/__goldens__/ts-default--models/billing.ts +67 -0
  312. package/src/codegen/__goldens__/ts-default--models/index.ts +48 -0
  313. package/src/codegen/__goldens__/ts-default--models/orders.ts +80 -0
  314. package/src/codegen/__goldens__/ts-default--users/_client.ts +1319 -0
  315. package/src/codegen/__goldens__/ts-default--users/_errors.ts +90 -0
  316. package/src/codegen/__goldens__/ts-default--users/_types.ts +502 -0
  317. package/src/codegen/__goldens__/ts-default--users/index.ts +38 -0
  318. package/src/codegen/__goldens__/ts-default--users/users.ts +169 -0
  319. package/src/codegen/__goldens__/ts-external-runtime--models/_errors.ts +90 -0
  320. package/src/codegen/__goldens__/ts-external-runtime--models/_models.ts +10 -0
  321. package/src/codegen/__goldens__/ts-external-runtime--models/billing-reports.ts +29 -0
  322. package/src/codegen/__goldens__/ts-external-runtime--models/billing.ts +67 -0
  323. package/src/codegen/__goldens__/ts-external-runtime--models/index.ts +48 -0
  324. package/src/codegen/__goldens__/ts-external-runtime--models/orders.ts +80 -0
  325. package/src/codegen/__goldens__/ts-external-runtime--users/_errors.ts +90 -0
  326. package/src/codegen/__goldens__/ts-external-runtime--users/index.ts +38 -0
  327. package/src/codegen/__goldens__/ts-external-runtime--users/users.ts +169 -0
  328. package/src/codegen/__goldens__/ts-flat--models/_client.ts +1319 -0
  329. package/src/codegen/__goldens__/ts-flat--models/_errors.ts +87 -0
  330. package/src/codegen/__goldens__/ts-flat--models/_models.ts +10 -0
  331. package/src/codegen/__goldens__/ts-flat--models/_types.ts +502 -0
  332. package/src/codegen/__goldens__/ts-flat--models/billing-reports.ts +28 -0
  333. package/src/codegen/__goldens__/ts-flat--models/billing.ts +51 -0
  334. package/src/codegen/__goldens__/ts-flat--models/index.ts +42 -0
  335. package/src/codegen/__goldens__/ts-flat--models/orders.ts +73 -0
  336. package/src/codegen/__goldens__/ts-flat--users/_client.ts +1319 -0
  337. package/src/codegen/__goldens__/ts-flat--users/_errors.ts +87 -0
  338. package/src/codegen/__goldens__/ts-flat--users/_types.ts +502 -0
  339. package/src/codegen/__goldens__/ts-flat--users/index.ts +34 -0
  340. package/src/codegen/__goldens__/ts-flat--users/users.ts +126 -0
  341. package/src/codegen/__goldens__/ts-no-share-models--models/_client.ts +1319 -0
  342. package/src/codegen/__goldens__/ts-no-share-models--models/_errors.ts +90 -0
  343. package/src/codegen/__goldens__/ts-no-share-models--models/_types.ts +502 -0
  344. package/src/codegen/__goldens__/ts-no-share-models--models/billing-reports.ts +29 -0
  345. package/src/codegen/__goldens__/ts-no-share-models--models/billing.ts +111 -0
  346. package/src/codegen/__goldens__/ts-no-share-models--models/index.ts +48 -0
  347. package/src/codegen/__goldens__/ts-no-share-models--models/orders.ts +112 -0
  348. package/src/codegen/__goldens__/ts-no-share-models--users/_client.ts +1319 -0
  349. package/src/codegen/__goldens__/ts-no-share-models--users/_errors.ts +90 -0
  350. package/src/codegen/__goldens__/ts-no-share-models--users/_types.ts +502 -0
  351. package/src/codegen/__goldens__/ts-no-share-models--users/index.ts +38 -0
  352. package/src/codegen/__goldens__/ts-no-share-models--users/users.ts +169 -0
  353. package/src/codegen/__goldens__/ts-shared-models-module--models/_client.ts +1319 -0
  354. package/src/codegen/__goldens__/ts-shared-models-module--models/_errors.ts +90 -0
  355. package/src/codegen/__goldens__/ts-shared-models-module--models/_models.ts +7 -0
  356. package/src/codegen/__goldens__/ts-shared-models-module--models/_types.ts +502 -0
  357. package/src/codegen/__goldens__/ts-shared-models-module--models/billing-reports.ts +29 -0
  358. package/src/codegen/__goldens__/ts-shared-models-module--models/billing.ts +67 -0
  359. package/src/codegen/__goldens__/ts-shared-models-module--models/index.ts +48 -0
  360. package/src/codegen/__goldens__/ts-shared-models-module--models/orders.ts +80 -0
  361. package/src/codegen/bin/cli.test.ts +13 -2
  362. package/src/codegen/bin/cli.ts +181 -144
  363. package/src/codegen/bin/flag-specs.test.ts +16 -1
  364. package/src/codegen/bin/flag-specs.ts +43 -31
  365. package/src/codegen/bundle-size.test.ts +1 -1
  366. package/src/codegen/collect-models.ts +1 -1
  367. package/src/codegen/e2e.test.ts +1 -1
  368. package/src/codegen/emit/api-route.ts +184 -0
  369. package/src/codegen/emit/context.ts +32 -0
  370. package/src/codegen/emit/declarations.ts +49 -0
  371. package/src/codegen/emit/format-types.ts +232 -0
  372. package/src/codegen/emit/http-stream-route.ts +162 -0
  373. package/src/codegen/emit/route-shared.ts +104 -0
  374. package/src/codegen/emit/rpc-route.ts +49 -0
  375. package/src/codegen/emit/scope-file.ts +226 -0
  376. package/src/codegen/emit/stream-route.ts +81 -0
  377. package/src/codegen/emit-errors.integration.test.ts +2 -2
  378. package/src/codegen/emit-errors.test.ts +1 -1
  379. package/src/codegen/emit-errors.ts +1 -1
  380. package/src/codegen/emit-scope.test.ts +75 -2
  381. package/src/codegen/emit-scope.ts +15 -1048
  382. package/src/codegen/goldens.test.ts +89 -0
  383. package/src/codegen/group-routes.test.ts +1 -1
  384. package/src/codegen/group-routes.ts +1 -1
  385. package/src/codegen/pipeline.test.ts +1 -1
  386. package/src/codegen/pipeline.ts +1 -1
  387. package/src/codegen/resolve-envelope.test.ts +1 -1
  388. package/src/codegen/resolve-envelope.ts +1 -1
  389. package/src/codegen/targets/_shared/error-schemas.test.ts +1 -1
  390. package/src/codegen/targets/_shared/error-schemas.ts +1 -1
  391. package/src/codegen/targets/_shared/route-slots.test.ts +1 -1
  392. package/src/codegen/targets/_shared/route-slots.ts +1 -1
  393. package/src/codegen/targets/_shared/target-run.ts +1 -1
  394. package/src/codegen/targets/kotlin/emit-route-kotlin.test.ts +1 -1
  395. package/src/codegen/targets/kotlin/emit-route-kotlin.ts +1 -1
  396. package/src/codegen/targets/kotlin/emit-scope-kotlin.test.ts +1 -1
  397. package/src/codegen/targets/swift/access-level.test.ts +1 -1
  398. package/src/codegen/targets/swift/emit-route-swift.test.ts +1 -1
  399. package/src/codegen/targets/swift/emit-route-swift.ts +1 -1
  400. package/src/codegen/targets/swift/emit-scope-swift.test.ts +1 -1
  401. package/src/codegen/targets/ts/shared-models.test.ts +1 -1
  402. package/src/{create-http-stream.test.ts → core/create-http-stream.test.ts} +1 -1
  403. package/src/core/create-http-stream.ts +207 -0
  404. package/src/{create-http.test.ts → core/create-http.test.ts} +31 -4
  405. package/src/core/create-http.ts +126 -0
  406. package/src/{create-stream.test.ts → core/create-stream.test.ts} +28 -31
  407. package/src/core/create-stream.ts +142 -0
  408. package/src/{create.test.ts → core/create.test.ts} +25 -57
  409. package/src/core/create.ts +121 -0
  410. package/src/{stack-utils.test.ts → core/definition-site.test.ts} +14 -3
  411. package/src/{stack-utils.ts → core/definition-site.ts} +20 -23
  412. package/src/{errors.test.ts → core/errors.test.ts} +1 -1
  413. package/src/{errors.ts → core/errors.ts} +30 -28
  414. package/src/core/factory-options.test.ts +112 -0
  415. package/src/core/http-route.ts +73 -0
  416. package/src/core/internal.ts +203 -0
  417. package/src/{migration.test.ts → core/migration.test.ts} +23 -1
  418. package/src/{index.test.ts → core/procedures.test.ts} +13 -11
  419. package/src/core/procedures.ts +75 -0
  420. package/src/core/types.ts +196 -0
  421. package/src/exports.ts +60 -11
  422. package/src/schema/adapter.test.ts +58 -0
  423. package/src/schema/adapter.ts +45 -0
  424. package/src/schema/compile.test.ts +95 -0
  425. package/src/schema/compile.ts +64 -0
  426. package/src/schema/compute-schema.test.ts +222 -41
  427. package/src/schema/compute-schema.ts +145 -71
  428. package/src/schema/json-schema.ts +21 -0
  429. package/src/schema/typebox.test.ts +40 -0
  430. package/src/schema/typebox.ts +27 -0
  431. package/src/server/context.test.ts +22 -0
  432. package/src/server/context.ts +18 -0
  433. package/src/{doc-envelope.test.ts → server/doc-envelope.test.ts} +2 -2
  434. package/src/{doc-envelope.ts → server/doc-envelope.ts} +1 -1
  435. package/src/{implementations/http → server}/doc-registry.test.ts +32 -26
  436. package/src/{implementations/http → server}/doc-registry.ts +11 -7
  437. package/src/server/docs/docs.test.ts +287 -0
  438. package/src/{implementations/http/hono → server}/docs/http-doc.ts +3 -3
  439. package/src/{implementations/http/hono → server}/docs/http-stream-doc.ts +3 -3
  440. package/src/{implementations/http/hono → server}/docs/rpc-doc.ts +3 -3
  441. package/src/{implementations/http/hono → server}/docs/stream-doc.ts +3 -3
  442. package/src/server/errors/dispatch.test.ts +450 -0
  443. package/src/server/errors/dispatch.ts +189 -0
  444. package/src/{implementations/http/error-taxonomy.test.ts → server/errors/taxonomy.test.ts} +45 -39
  445. package/src/{implementations/http/error-taxonomy.ts → server/errors/taxonomy.ts} +8 -17
  446. package/src/server/index.ts +29 -0
  447. package/src/server/no-framework-imports.test.ts +43 -0
  448. package/src/server/paths.test.ts +141 -0
  449. package/src/{implementations/http/hono/path.ts → server/paths.ts} +2 -13
  450. package/src/server/request/params.test.ts +143 -0
  451. package/src/server/request/params.ts +68 -0
  452. package/src/server/request/query.test.ts +70 -0
  453. package/src/server/request/query.ts +24 -0
  454. package/src/server/sse.test.ts +113 -0
  455. package/src/server/sse.ts +117 -0
  456. package/src/{implementations → server}/types.ts +17 -16
  457. package/build/create-http-stream.d.ts +0 -58
  458. package/build/create-http-stream.js +0 -122
  459. package/build/create-http-stream.js.map +0 -1
  460. package/build/create-http-stream.test.js.map +0 -1
  461. package/build/create-http.d.ts +0 -49
  462. package/build/create-http.js +0 -108
  463. package/build/create-http.js.map +0 -1
  464. package/build/create-http.test.js.map +0 -1
  465. package/build/create-stream.d.ts +0 -35
  466. package/build/create-stream.js +0 -123
  467. package/build/create-stream.js.map +0 -1
  468. package/build/create-stream.test.js.map +0 -1
  469. package/build/create.d.ts +0 -28
  470. package/build/create.js +0 -82
  471. package/build/create.js.map +0 -1
  472. package/build/create.test.js.map +0 -1
  473. package/build/doc-envelope.js.map +0 -1
  474. package/build/doc-envelope.test.js.map +0 -1
  475. package/build/errors.js.map +0 -1
  476. package/build/errors.test.js.map +0 -1
  477. package/build/implementations/http/astro/astro-context.js.map +0 -1
  478. package/build/implementations/http/astro/create-handler.js.map +0 -1
  479. package/build/implementations/http/astro/index.js.map +0 -1
  480. package/build/implementations/http/astro/index.test.js.map +0 -1
  481. package/build/implementations/http/astro/rewrite-request.js.map +0 -1
  482. package/build/implementations/http/doc-registry.js.map +0 -1
  483. package/build/implementations/http/doc-registry.test.js.map +0 -1
  484. package/build/implementations/http/error-dispatch.d.ts +0 -76
  485. package/build/implementations/http/error-dispatch.js.map +0 -1
  486. package/build/implementations/http/error-dispatch.test.js +0 -254
  487. package/build/implementations/http/error-dispatch.test.js.map +0 -1
  488. package/build/implementations/http/error-taxonomy.js.map +0 -1
  489. package/build/implementations/http/error-taxonomy.test.js.map +0 -1
  490. package/build/implementations/http/hono/docs/http-doc.js.map +0 -1
  491. package/build/implementations/http/hono/docs/http-stream-doc.js.map +0 -1
  492. package/build/implementations/http/hono/docs/rpc-doc.js.map +0 -1
  493. package/build/implementations/http/hono/docs/stream-doc.js.map +0 -1
  494. package/build/implementations/http/hono/handlers/http-stream.js +0 -123
  495. package/build/implementations/http/hono/handlers/http-stream.js.map +0 -1
  496. package/build/implementations/http/hono/handlers/http-stream.test.js.map +0 -1
  497. package/build/implementations/http/hono/handlers/http.js +0 -110
  498. package/build/implementations/http/hono/handlers/http.js.map +0 -1
  499. package/build/implementations/http/hono/handlers/http.test.js.map +0 -1
  500. package/build/implementations/http/hono/handlers/rpc.js +0 -32
  501. package/build/implementations/http/hono/handlers/rpc.js.map +0 -1
  502. package/build/implementations/http/hono/handlers/rpc.test.js.map +0 -1
  503. package/build/implementations/http/hono/handlers/stream.d.ts +0 -23
  504. package/build/implementations/http/hono/handlers/stream.js +0 -147
  505. package/build/implementations/http/hono/handlers/stream.js.map +0 -1
  506. package/build/implementations/http/hono/handlers/stream.test.js.map +0 -1
  507. package/build/implementations/http/hono/index.js.map +0 -1
  508. package/build/implementations/http/hono/index.test.js.map +0 -1
  509. package/build/implementations/http/hono/path.js.map +0 -1
  510. package/build/implementations/http/hono/path.test.js +0 -83
  511. package/build/implementations/http/hono/path.test.js.map +0 -1
  512. package/build/implementations/http/hono/types.d.ts +0 -51
  513. package/build/implementations/http/hono/types.js.map +0 -1
  514. package/build/implementations/http/on-request-error.test.js.map +0 -1
  515. package/build/implementations/http/route-errors.test.js.map +0 -1
  516. package/build/index.d.ts +0 -175
  517. package/build/index.js +0 -47
  518. package/build/index.js.map +0 -1
  519. package/build/index.test.js.map +0 -1
  520. package/build/migration.test.js.map +0 -1
  521. package/build/schema/extract-json-schema.d.ts +0 -2
  522. package/build/schema/extract-json-schema.js +0 -12
  523. package/build/schema/extract-json-schema.js.map +0 -1
  524. package/build/schema/extract-json-schema.test.js +0 -23
  525. package/build/schema/extract-json-schema.test.js.map +0 -1
  526. package/build/schema/parser.d.ts +0 -36
  527. package/build/schema/parser.js +0 -210
  528. package/build/schema/parser.js.map +0 -1
  529. package/build/schema/parser.test.js +0 -120
  530. package/build/schema/parser.test.js.map +0 -1
  531. package/build/schema/resolve-schema-lib.d.ts +0 -12
  532. package/build/schema/resolve-schema-lib.js +0 -11
  533. package/build/schema/resolve-schema-lib.js.map +0 -1
  534. package/build/schema/resolve-schema-lib.test.js +0 -17
  535. package/build/schema/resolve-schema-lib.test.js.map +0 -1
  536. package/build/schema/types.d.ts +0 -8
  537. package/build/schema/types.js +0 -2
  538. package/build/stack-utils.d.ts +0 -25
  539. package/build/stack-utils.js.map +0 -1
  540. package/build/stack-utils.test.js.map +0 -1
  541. package/build/types.d.ts +0 -142
  542. package/build/types.js +0 -2
  543. package/build/types.js.map +0 -1
  544. package/docs/decisions/2026-06-02-monorepo-split-evaluation.md +0 -80
  545. package/docs/handoffs/2026-06-08-dx-round2-declines.md +0 -45
  546. package/docs/handoffs/ajsc-named-type-collision.md +0 -134
  547. package/docs/handoffs/ajsc-named-type-support.md +0 -181
  548. package/docs/handoffs/shared-models-auto-resolve-response.md +0 -181
  549. package/docs/npm-workspaces-migration-plan.md +0 -611
  550. package/docs/superpowers/plans/2026-04-24-doc-registry-simplification.md +0 -886
  551. package/docs/superpowers/plans/2026-04-24-kotlin-codegen-target.md +0 -1265
  552. package/docs/superpowers/plans/2026-04-25-ajsc-v7-kotlin-polish.md +0 -1993
  553. package/docs/superpowers/plans/2026-04-29-safe-result-api.md +0 -2293
  554. package/docs/superpowers/plans/2026-05-07-astro-adapter.md +0 -1391
  555. package/docs/superpowers/plans/2026-05-08-create-http.md +0 -3355
  556. package/docs/superpowers/plans/2026-05-08-hono-app-builder-convergence.md +0 -3365
  557. package/docs/superpowers/plans/2026-06-05-dx-feedback-round.md +0 -1292
  558. package/docs/superpowers/plans/2026-06-06-shared-models-convention-and-diagnostics.md +0 -659
  559. package/docs/superpowers/plans/2026-06-08-codegen-dx-surfacing.md +0 -428
  560. package/docs/superpowers/specs/2026-04-24-kotlin-swift-codegen-design.md +0 -401
  561. package/docs/superpowers/specs/2026-04-25-ajsc-v7-kotlin-polish-design.md +0 -314
  562. package/docs/superpowers/specs/2026-04-25-swift-codegen-design.md +0 -264
  563. package/docs/superpowers/specs/2026-04-29-safe-result-api-design.md +0 -324
  564. package/docs/superpowers/specs/2026-05-07-astro-adapter-design.md +0 -252
  565. package/docs/superpowers/specs/2026-05-08-create-http-design.md +0 -409
  566. package/docs/superpowers/specs/2026-05-08-hono-app-builder-convergence-design.md +0 -411
  567. package/docs/superpowers/specs/2026-06-05-dx-feedback-round-design.md +0 -285
  568. package/docs/superpowers/specs/2026-06-08-dx-feedback-round-2-design.md +0 -376
  569. package/src/create-http-stream.ts +0 -191
  570. package/src/create-http.ts +0 -210
  571. package/src/create-stream.ts +0 -228
  572. package/src/create.ts +0 -172
  573. package/src/implementations/http/README.md +0 -390
  574. package/src/implementations/http/error-dispatch.test.ts +0 -283
  575. package/src/implementations/http/error-dispatch.ts +0 -176
  576. package/src/implementations/http/hono/handlers/http-stream.ts +0 -152
  577. package/src/implementations/http/hono/handlers/http.ts +0 -145
  578. package/src/implementations/http/hono/handlers/rpc.ts +0 -54
  579. package/src/implementations/http/hono/path.test.ts +0 -96
  580. package/src/index.ts +0 -101
  581. package/src/schema/extract-json-schema.test.ts +0 -25
  582. package/src/schema/extract-json-schema.ts +0 -15
  583. package/src/schema/parser.test.ts +0 -182
  584. package/src/schema/parser.ts +0 -265
  585. package/src/schema/resolve-schema-lib.test.ts +0 -19
  586. package/src/schema/resolve-schema-lib.ts +0 -29
  587. package/src/schema/types.ts +0 -20
  588. package/src/types.ts +0 -133
  589. /package/build/{implementations/http → adapters}/astro/astro-context.d.ts +0 -0
  590. /package/build/{implementations/http → adapters}/astro/astro-context.js +0 -0
  591. /package/build/{implementations/http → adapters}/astro/create-handler.d.ts +0 -0
  592. /package/build/{implementations/http → adapters}/astro/create-handler.js +0 -0
  593. /package/build/{implementations/http → adapters}/astro/index.d.ts +0 -0
  594. /package/build/{implementations/http → adapters}/astro/index.js +0 -0
  595. /package/build/{implementations/http → adapters}/astro/index.test.d.ts +0 -0
  596. /package/build/{implementations/http → adapters}/astro/rewrite-request.d.ts +0 -0
  597. /package/build/{implementations/http → adapters}/astro/rewrite-request.js +0 -0
  598. /package/build/{create-http-stream.test.d.ts → adapters/hono/envelope-parity.test.d.ts} +0 -0
  599. /package/build/{implementations/http → adapters}/hono/handlers/http-stream.test.d.ts +0 -0
  600. /package/build/{implementations/http → adapters}/hono/handlers/http.test.d.ts +0 -0
  601. /package/build/{implementations/http → adapters}/hono/handlers/rpc.test.d.ts +0 -0
  602. /package/build/{implementations/http → adapters}/hono/handlers/stream.test.d.ts +0 -0
  603. /package/build/{implementations/http → adapters}/hono/index.test.d.ts +0 -0
  604. /package/build/{implementations/http → adapters/hono}/on-request-error.test.d.ts +0 -0
  605. /package/build/{implementations/http → adapters/hono}/route-errors.test.d.ts +0 -0
  606. /package/build/{create-http.test.d.ts → client/freeze.test.d.ts} +0 -0
  607. /package/build/{create-stream.test.d.ts → codegen/goldens.test.d.ts} +0 -0
  608. /package/build/{create.test.d.ts → core/create-http-stream.test.d.ts} +0 -0
  609. /package/build/{doc-envelope.test.d.ts → core/create-http.test.d.ts} +0 -0
  610. /package/build/{errors.test.d.ts → core/create-stream.test.d.ts} +0 -0
  611. /package/build/{implementations/http/doc-registry.test.d.ts → core/create.test.d.ts} +0 -0
  612. /package/build/{implementations/http/error-dispatch.test.d.ts → core/definition-site.test.d.ts} +0 -0
  613. /package/build/{implementations/http/error-taxonomy.test.d.ts → core/errors.test.d.ts} +0 -0
  614. /package/build/{errors.test.js → core/errors.test.js} +0 -0
  615. /package/build/{implementations/http/hono/path.test.d.ts → core/factory-options.test.d.ts} +0 -0
  616. /package/build/{migration.test.d.ts → core/migration.test.d.ts} +0 -0
  617. /package/build/{index.test.d.ts → core/procedures.test.d.ts} +0 -0
  618. /package/build/{implementations/http/hono → core}/types.js +0 -0
  619. /package/build/schema/{extract-json-schema.test.d.ts → adapter.test.d.ts} +0 -0
  620. /package/build/schema/{parser.test.d.ts → compile.test.d.ts} +0 -0
  621. /package/build/schema/{resolve-schema-lib.test.d.ts → typebox.test.d.ts} +0 -0
  622. /package/build/{stack-utils.test.d.ts → server/context.test.d.ts} +0 -0
  623. /package/build/{doc-envelope.js → server/doc-envelope.js} +0 -0
  624. /package/build/{doc-envelope.test.js → server/doc-envelope.test.js} +0 -0
  625. /package/build/{implementations → server}/types.js +0 -0
  626. /package/src/{implementations/http → adapters}/astro/README.md +0 -0
  627. /package/src/{implementations/http → adapters}/astro/astro-context.ts +0 -0
  628. /package/src/{implementations/http → adapters}/astro/create-handler.ts +0 -0
  629. /package/src/{implementations/http → adapters}/astro/index.ts +0 -0
  630. /package/src/{implementations/http → adapters}/astro/rewrite-request.ts +0 -0
@@ -5,40 +5,42 @@ You are assisting a developer using **ts-procedures**, a TypeScript RPC framewor
5
5
  ## Core Flow
6
6
 
7
7
  ```
8
- Procedures<TContext, TExtendedConfig>(builder?)
8
+ Procedures<TContext, TExtendedConfig>(options?)
9
9
 
10
- Create(name, config, handler) → Standard async procedure
11
- CreateStream(name, config, handler) → Streaming async generator
10
+ Create(name, config, handler) → Standard async procedure (kind: 'rpc')
11
+ CreateStream(name, config, handler) → Streaming async generator (kind: 'rpc-stream')
12
+ CreateHttp(name, config, handler) → REST-style HTTP route (kind: 'http')
13
+ CreateHttpStream(name, config, handler) → REST-style streaming route (kind: 'http-stream')
12
14
 
13
15
  Returns: { [name]: handler, procedure: handler, info: metadata }
14
16
  ```
15
17
 
18
+ Every registration and every creator's `info` carries the `kind` discriminant — branch on it (there is no `isStream` flag).
19
+
16
20
  ## Imports
17
21
 
18
22
  ```typescript
19
23
  // Core
20
24
  import { Procedures } from 'ts-procedures'
21
- import type { TLocalContext, TStreamContext, TProcedureRegistration, TStreamProcedureRegistration } from 'ts-procedures'
25
+ import type { Infer, SchemaAdapter, TLocalContext, TStreamContext, TProcedureRegistration, TStreamProcedureRegistration } from 'ts-procedures'
22
26
 
23
27
  // Errors
24
28
  import { ProcedureError, ProcedureValidationError, ProcedureYieldValidationError, ProcedureRegistrationError } from 'ts-procedures'
25
29
 
26
30
  // HTTP types
27
- import type { RPCConfig, RPCHttpRouteDoc, StreamHttpRouteDoc, StreamMode } from 'ts-procedures/http'
28
-
29
- // Hono RPC
30
- import { HonoAppBuilder } from 'ts-procedures/hono'
31
+ import type { RPCConfig, APIConfig, APIInput, RPCHttpRouteDoc, StreamHttpRouteDoc, StreamMode } from 'ts-procedures/http'
31
32
 
32
- // Hono Streaming
33
- import { HonoAppBuilder, sse } from 'ts-procedures/hono'
34
-
35
- // Hono API (REST-style)
36
- import { HonoAppBuilder } from 'ts-procedures/hono'
37
- import type { APIConfig, APIInput } from 'ts-procedures/hono'
33
+ // Hono (RPC, streaming, REST — one unified builder)
34
+ import { HonoAppBuilder, sse, defineErrorTaxonomy } from 'ts-procedures/hono'
38
35
 
39
36
  // Doc Registry — compose route docs from multiple builders
40
37
  import { DocRegistry } from 'ts-procedures/http-docs'
41
38
  import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
39
+
40
+ // Server toolkit — transport-agnostic building blocks for writing custom adapters (Fastify, Express, ...)
41
+ // Also re-exports DocRegistry, writeDocEnvelope, defineErrorTaxonomy, sse, and the doc builders
42
+ import { dispatchPreStreamError, dispatchMidStreamError, extractReqChannels, buildRpcRouteDoc, SseEventSequencer } from 'ts-procedures/server'
43
+ import type { RequestSource } from 'ts-procedures/server'
42
44
  ```
43
45
 
44
46
  ## Architecture Rules
@@ -51,7 +53,7 @@ import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
51
53
 
52
54
  4. **Stream handlers always have ctx.signal (guaranteed AbortSignal).** Standard handlers get it when HTTP implementations provide it. Check `signal.reason === 'stream-completed'` to distinguish normal completion from client disconnect.
53
55
 
54
- 5. **Use TypeBox for schemas** (`import { Type } from 'typebox'`). Plain JSON Schema objects are not recognized. AJV config: `allErrors: true`, `coerceTypes: true`, `removeAdditional: true`. The bundled TypeBox does **not** export `Type.Composite` — compose schemas with a flat property spread (`Type.Object({ ...Base.properties, name: Type.String() })`), which also keeps the generated JSON Schema a single `object` instead of an `allOf`.
56
+ 5. **Use TypeBox for schemas** (`import { Type } from 'typebox'`). Plain JSON Schema objects are not recognized. TypeBox is the built-in schema library; other libraries plug in via the `SchemaAdapter` interface (`Procedures({ schema: { adapters: [myAdapter] } })` — `{ name, detect, toJsonSchema }`). Custom adapters get runtime validation + docs only; compile-time `Infer<T>` inference is TypeBox-only. Default AJV config: `allErrors: true`, `coerceTypes: true`, `removeAdditional: true` — customize per factory via `Procedures({ validation: { ajv } })` (options merged over defaults, or a configured Ajv instance). The bundled TypeBox does **not** export `Type.Composite` — compose schemas with a flat property spread (`Type.Object({ ...Base.properties, name: Type.String() })`), which also keeps the generated JSON Schema a single `object` instead of an `allOf`.
55
57
 
56
58
  6. **One factory per access level.** Separate `Procedures()` factories for public, authenticated, admin contexts.
57
59
 
@@ -59,7 +61,9 @@ import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
59
61
 
60
62
  8. **getProcedures() for introspection.** Returns all registered procedures with metadata.
61
63
 
62
- 9. **`Procedures({ config: { noRuntimeValidation: true } })` skips per-call AJV validation** for every procedure on the factory (both `Create` and `CreateStream`, both `schema.params` and `schema.input`). Shape is `noRuntimeValidation?: true` only `true` is accepted. JSON Schema is still computed at registration time, so codegen and `info.schema` are unaffected; only the validator runs are bypassed. **Never enable this on a factory whose handlers are reachable from public/untrusted callers** — coerceTypes and removeAdditional also stop running. Reserve for trusted internal factories whose callers are already type-checked at build time. Independent of the per-call `ctx.isPrevalidated` escape hatch used by HTTP builders.
64
+ 9. **`Procedures({ validation: false })` skips per-call AJV validation** for every procedure on the factory (all four creators, both `schema.params` and `schema.req`). JSON Schema and validators are still computed at registration time (bad schemas still fail fast), so codegen and `info.schema` are unaffected; only the per-call validator runs are bypassed. **Never enable this on a factory whose handlers are reachable from public/untrusted callers** — coerceTypes and removeAdditional also stop running. Reserve for trusted internal factories whose callers are already type-checked at build time. Independent of the per-call `ctx.isPrevalidated` escape hatch used by HTTP builders.
65
+
66
+ 10. **`Procedures({ http: { pathPrefix, scope } })` sets factory-level defaults for `CreateHttp` / `CreateHttpStream`.** `pathPrefix` is prepended to every route's `path` at registration time — it becomes part of the route's identity (shows up in `config.path` and route docs), unlike the builder-level `pathPrefix`, which is a deployment mount point. `scope` is the default codegen scope for routes that don't set one; per-route values win.
63
67
 
64
68
  ## Procedure Pattern
65
69
 
@@ -138,15 +142,17 @@ StreamRPC.CreateStream('Feed', {
138
142
  }
139
143
  })
140
144
 
141
- const app = new HonoAppBuilder({ defaultStreamMode: 'sse' })
145
+ const app = new HonoAppBuilder({ stream: { defaultStreamMode: 'sse' } })
142
146
  .register(StreamRPC, (c) => ({ userId: c.req.header('x-user-id') }))
143
147
  .build()
144
148
  // GET|POST /events/feed/1
145
149
  ```
146
150
 
147
- ## Hono API Pattern (REST-style) v8 `CreateHttp`
151
+ SSE wire behavior is identical for `rpc-stream` and `http-stream` routes (one shared `SseEventSequencer`): `sse(data, { event, id, retry })` metadata is honored on yields and error events of both kinds, and a `null` yield serializes as empty SSE data on both.
152
+
153
+ ## Hono API Pattern (REST-style) — `CreateHttp`
148
154
 
149
- In v8, HTTP routes use `CreateHttp` (not `Create + APIConfig`). `schema.input` is renamed `schema.req`. The factory needs no `APIConfig` type parameter.
155
+ HTTP routes use `CreateHttp` (not `Create + APIConfig`). Request channels live under `schema.req` (`pathParams`, `query`, `body`, `headers`); response docs under `schema.res`. The factory needs no `APIConfig` type parameter.
150
156
 
151
157
  ```typescript
152
158
  import { HonoAppBuilder } from 'ts-procedures/hono'
@@ -174,13 +180,16 @@ const app = new HonoAppBuilder({ pathPrefix: '/api' })
174
180
  // GET /api/users/:id → 200, POST /api/users → 201
175
181
  ```
176
182
 
177
- **v7 v8 migration:**
183
+ Streaming HTTP routes use `CreateHttpStream` with `schema.yield` (and optional `schema.res.headers`) — both schemas flow into route docs and generated client types.
178
184
 
179
- 1. `Procedures<Ctx, APIConfig>()` → `Procedures<Ctx>()`
180
- 2. `.Create(` → `.CreateHttp(` for HTTP routes
181
- 3. `schema.input` → `schema.req` (same channels: `pathParams`, `query`, `body`, `headers`)
182
- 4. Move response type to `schema.res.body` (optional)
183
- 5. Re-run `npx ts-procedures-codegen`
185
+ **v8 v9 migration:**
186
+
187
+ 1. `Procedures({ config: { noRuntimeValidation: true } })` → `Procedures({ validation: false })`
188
+ 2. Suretype schemas TypeBox (or a custom `SchemaAdapter`); `isSuretypeSchema` removed
189
+ 3. `registration.isStream` → branch on the `kind` discriminant (`'rpc' | 'rpc-stream' | 'http' | 'http-stream'`)
190
+ 4. Duplicate-name registration now throws `ProcedureRegistrationError` instead of a bare `Error` (same message)
191
+ 5. `schemaParser` removed — use `computeSchema(name, schema, { adapters, compile })`; `extractJsonSchema(schema, adapters)` takes the adapter list explicitly
192
+ 6. Codegen CLI/options/output unchanged — regenerated clients are byte-identical to v8.6.0
184
193
 
185
194
  ## Astro adapter
186
195
 
@@ -195,6 +204,8 @@ Catch-all endpoint pattern. Build Hono apps once with `HonoAppBuilder`, mount vi
195
204
  | `ProcedureYieldValidationError` | Yield validation failure (validateYields: true) | N/A (mid-stream) |
196
205
  | `ProcedureRegistrationError` | Invalid schema or duplicate name at registration | N/A (startup) |
197
206
 
207
+ Every framework error instance carries a `kind` field (`'procedure' | 'validation' | 'yield-validation' | 'registration'`) as an alternative to `instanceof`.
208
+
198
209
  ### Error Taxonomy (required for custom errors)
199
210
 
200
211
  `defineErrorTaxonomy` maps error classes to HTTP responses declaratively. Works with `HonoAppBuilder` for `rpc`, `http`, and pre-stream paths (`rpc-stream` / `http-stream`).
@@ -235,6 +246,8 @@ new HonoAppBuilder({
235
246
 
236
247
  Handlers throw the error classes directly — the builder auto-serializes. `onError` is the first-class imperative peer when you want to handle errors in one callback instead (both modes coexist). In v6 `HonoAppBuilder.onPreStreamError` was renamed to `onError`. Cross-cutting `onRequestError` observer fires for every caught error.
237
248
 
249
+ Custom (non-Hono) adapters consume the same taxonomy via `ts-procedures/server`'s `dispatchPreStreamError` / `dispatchMidStreamError`, which return plain data (`{ type: 'body', statusCode, body } | { type: 'response', response }` / `{ data, sseEvent?, runOnCatch? }`) — your adapter translates that into its framework's response.
250
+
238
251
  ### Per-route errors (typed)
239
252
 
240
253
  Declare a route's errors via the `errors` field on the `CreateHttp` config. For compile-time typo protection, attach a `satisfies` clause to the array — do NOT pass an explicit generic. `CreateHttp` is generic over `<TName, TReq, TRes, TErrorKey>`, so a single type argument binds `TName` and breaks `schema.req` / `schema.res` inference:
@@ -298,14 +311,18 @@ onRequestStart → factoryContext() → validation → onStreamStart → handler
298
311
  ## Decision Framework
299
312
 
300
313
  **Which procedure type?**
301
- - Single response → `Create`
302
- - Multiple values over time → `CreateStream`
314
+ - Single response (RPC) → `Create`
315
+ - Multiple values over time (RPC) → `CreateStream`
316
+ - REST-style route (`path` + `method`) → `CreateHttp`
317
+ - REST-style streaming route → `CreateHttpStream`
303
318
 
304
319
  **Which schema library?**
305
- - **TypeBox** (`import { Type } from 'typebox'`)
320
+ - **TypeBox** (`import { Type } from 'typebox'`) — built in, with `Infer<T>` type inference
321
+ - Other libraries → implement `SchemaAdapter` and pass `Procedures({ schema: { adapters: [...] } })` (runtime validation + docs only)
306
322
 
307
323
  **Which HTTP implementation?**
308
324
  - Hono (RPC, streams, REST, REST streams) → `HonoAppBuilder`
325
+ - Other frameworks (Fastify, Express, ...) → write a thin adapter on `ts-procedures/server` (doc builders, taxonomy dispatch returning data, `extractReqChannels`/`RequestSource`, `SseEventSequencer`); use the Hono adapter as the blueprint
309
326
 
310
327
  **Stream mode?**
311
328
  - Browser EventSource → `'sse'` (default)
@@ -318,14 +335,14 @@ onRequestStart → factoryContext() → validation → onStreamStart → handler
318
335
  3. **Never put validation logic in handler** — use `schema.params`
319
336
  4. **Never ignore ctx.signal** — pass to all async calls
320
337
  5. **Never skip signal.aborted check in stream loops** — causes resource leaks
321
- 6. **Never register Create procedures with HonoAppBuilder** they're silently ignored
322
- 7. **Never use plain JSON Schema objects** — use TypeBox builders
338
+ 6. **Never branch on `isStream`** removed in v9; use the `kind` discriminant (on registrations and every creator's `info`)
339
+ 7. **Never use plain JSON Schema objects** — use TypeBox builders (or register a `SchemaAdapter` for another library)
323
340
  8. **Never swallow errors without re-throwing** — hides failures
324
341
  9. **Never assume extra params fields survive** — `removeAdditional: true` strips them
325
342
  10. **Never manually parse types AJV coerces** — `coerceTypes: true` handles it
326
- 11. **Never define both schema.params and schema.input** mutually exclusive, throws ProcedureRegistrationError
343
+ 11. **Never put `schema.req` on `Create`/`CreateStream` or `schema.params` on `CreateHttp`/`CreateHttpStream`** — RPC creators take `schema.params`; HTTP creators take `schema.req` channels
327
344
  12. **Never catch raw DOMException/TypeError from generated callables** — catch `ClientTimeoutError`, `ClientAbortError`, `ClientNetworkError` instead; or use `.safe()` for Result-based narrowing
328
- 13. **Never use `Create` for HTTP routes (v8+)** — use `CreateHttp` (unary) or `CreateHttpStream` (streaming); `schema.input` `schema.req`; `Procedures<Ctx, APIConfig>()` → `Procedures<Ctx>()`
345
+ 13. **Never use `Create` for HTTP routes (v8+)** — use `CreateHttp` (unary) or `CreateHttpStream` (streaming); request channels go under `schema.req`; `Procedures<Ctx, APIConfig>()` → `Procedures<Ctx>()`
329
346
 
330
347
  ## Testing
331
348
 
@@ -449,7 +466,7 @@ interface ProcedureCallOptions extends ProcedureCallDefaults, ClientHooks {}
449
466
  ```
450
467
 
451
468
  - Defaults are set via `config.defaults`; per-call options are passed as the 2nd argument to any generated callable.
452
- - Header precedence (low → high): adapter config < `defaults.headers` < per-call `headers` < route-declared `schema.input.headers` < `onBeforeRequest` mutations.
469
+ - Header precedence (low → high): adapter config < `defaults.headers` < per-call `headers` < route-declared `schema.req.headers` < `onBeforeRequest` mutations.
453
470
 
454
471
  ### Typed RequestMeta (Declaration Merging)
455
472
 
@@ -5,40 +5,42 @@ You are assisting a developer using **ts-procedures**, a TypeScript RPC framewor
5
5
  ## Core Flow
6
6
 
7
7
  ```
8
- Procedures<TContext, TExtendedConfig>(builder?)
8
+ Procedures<TContext, TExtendedConfig>(options?)
9
9
 
10
- Create(name, config, handler) → Standard async procedure
11
- CreateStream(name, config, handler) → Streaming async generator
10
+ Create(name, config, handler) → Standard async procedure (kind: 'rpc')
11
+ CreateStream(name, config, handler) → Streaming async generator (kind: 'rpc-stream')
12
+ CreateHttp(name, config, handler) → REST-style HTTP route (kind: 'http')
13
+ CreateHttpStream(name, config, handler) → REST-style streaming route (kind: 'http-stream')
12
14
 
13
15
  Returns: { [name]: handler, procedure: handler, info: metadata }
14
16
  ```
15
17
 
18
+ Every registration and every creator's `info` carries the `kind` discriminant — branch on it (there is no `isStream` flag).
19
+
16
20
  ## Imports
17
21
 
18
22
  ```typescript
19
23
  // Core
20
24
  import { Procedures } from 'ts-procedures'
21
- import type { TLocalContext, TStreamContext, TProcedureRegistration, TStreamProcedureRegistration } from 'ts-procedures'
25
+ import type { Infer, SchemaAdapter, TLocalContext, TStreamContext, TProcedureRegistration, TStreamProcedureRegistration } from 'ts-procedures'
22
26
 
23
27
  // Errors
24
28
  import { ProcedureError, ProcedureValidationError, ProcedureYieldValidationError, ProcedureRegistrationError } from 'ts-procedures'
25
29
 
26
30
  // HTTP types
27
- import type { RPCConfig, RPCHttpRouteDoc, StreamHttpRouteDoc, StreamMode } from 'ts-procedures/http'
28
-
29
- // Hono RPC
30
- import { HonoAppBuilder } from 'ts-procedures/hono'
31
+ import type { RPCConfig, APIConfig, APIInput, RPCHttpRouteDoc, StreamHttpRouteDoc, StreamMode } from 'ts-procedures/http'
31
32
 
32
- // Hono Streaming
33
- import { HonoAppBuilder, sse } from 'ts-procedures/hono'
34
-
35
- // Hono API (REST-style)
36
- import { HonoAppBuilder } from 'ts-procedures/hono'
37
- import type { APIConfig, APIInput } from 'ts-procedures/hono'
33
+ // Hono (RPC, streaming, REST — one unified builder)
34
+ import { HonoAppBuilder, sse, defineErrorTaxonomy } from 'ts-procedures/hono'
38
35
 
39
36
  // Doc Registry — compose route docs from multiple builders
40
37
  import { DocRegistry } from 'ts-procedures/http-docs'
41
38
  import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
39
+
40
+ // Server toolkit — transport-agnostic building blocks for writing custom adapters (Fastify, Express, ...)
41
+ // Also re-exports DocRegistry, writeDocEnvelope, defineErrorTaxonomy, sse, and the doc builders
42
+ import { dispatchPreStreamError, dispatchMidStreamError, extractReqChannels, buildRpcRouteDoc, SseEventSequencer } from 'ts-procedures/server'
43
+ import type { RequestSource } from 'ts-procedures/server'
42
44
  ```
43
45
 
44
46
  ## Architecture Rules
@@ -51,7 +53,7 @@ import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
51
53
 
52
54
  4. **Stream handlers always have ctx.signal (guaranteed AbortSignal).** Standard handlers get it when HTTP implementations provide it. Check `signal.reason === 'stream-completed'` to distinguish normal completion from client disconnect.
53
55
 
54
- 5. **Use TypeBox for schemas** (`import { Type } from 'typebox'`). Plain JSON Schema objects are not recognized. AJV config: `allErrors: true`, `coerceTypes: true`, `removeAdditional: true`. The bundled TypeBox does **not** export `Type.Composite` — compose schemas with a flat property spread (`Type.Object({ ...Base.properties, name: Type.String() })`), which also keeps the generated JSON Schema a single `object` instead of an `allOf`.
56
+ 5. **Use TypeBox for schemas** (`import { Type } from 'typebox'`). Plain JSON Schema objects are not recognized. TypeBox is the built-in schema library; other libraries plug in via the `SchemaAdapter` interface (`Procedures({ schema: { adapters: [myAdapter] } })` — `{ name, detect, toJsonSchema }`). Custom adapters get runtime validation + docs only; compile-time `Infer<T>` inference is TypeBox-only. Default AJV config: `allErrors: true`, `coerceTypes: true`, `removeAdditional: true` — customize per factory via `Procedures({ validation: { ajv } })` (options merged over defaults, or a configured Ajv instance). The bundled TypeBox does **not** export `Type.Composite` — compose schemas with a flat property spread (`Type.Object({ ...Base.properties, name: Type.String() })`), which also keeps the generated JSON Schema a single `object` instead of an `allOf`.
55
57
 
56
58
  6. **One factory per access level.** Separate `Procedures()` factories for public, authenticated, admin contexts.
57
59
 
@@ -59,7 +61,9 @@ import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
59
61
 
60
62
  8. **getProcedures() for introspection.** Returns all registered procedures with metadata.
61
63
 
62
- 9. **`Procedures({ config: { noRuntimeValidation: true } })` skips per-call AJV validation** for every procedure on the factory (both `Create` and `CreateStream`, both `schema.params` and `schema.input`). Shape is `noRuntimeValidation?: true` only `true` is accepted. JSON Schema is still computed at registration time, so codegen and `info.schema` are unaffected; only the validator runs are bypassed. **Never enable this on a factory whose handlers are reachable from public/untrusted callers** — coerceTypes and removeAdditional also stop running. Reserve for trusted internal factories whose callers are already type-checked at build time. Independent of the per-call `ctx.isPrevalidated` escape hatch used by HTTP builders.
64
+ 9. **`Procedures({ validation: false })` skips per-call AJV validation** for every procedure on the factory (all four creators, both `schema.params` and `schema.req`). JSON Schema and validators are still computed at registration time (bad schemas still fail fast), so codegen and `info.schema` are unaffected; only the per-call validator runs are bypassed. **Never enable this on a factory whose handlers are reachable from public/untrusted callers** — coerceTypes and removeAdditional also stop running. Reserve for trusted internal factories whose callers are already type-checked at build time. Independent of the per-call `ctx.isPrevalidated` escape hatch used by HTTP builders.
65
+
66
+ 10. **`Procedures({ http: { pathPrefix, scope } })` sets factory-level defaults for `CreateHttp` / `CreateHttpStream`.** `pathPrefix` is prepended to every route's `path` at registration time — it becomes part of the route's identity (shows up in `config.path` and route docs), unlike the builder-level `pathPrefix`, which is a deployment mount point. `scope` is the default codegen scope for routes that don't set one; per-route values win.
63
67
 
64
68
  ## Procedure Pattern
65
69
 
@@ -138,15 +142,17 @@ StreamRPC.CreateStream('Feed', {
138
142
  }
139
143
  })
140
144
 
141
- const app = new HonoAppBuilder({ defaultStreamMode: 'sse' })
145
+ const app = new HonoAppBuilder({ stream: { defaultStreamMode: 'sse' } })
142
146
  .register(StreamRPC, (c) => ({ userId: c.req.header('x-user-id') }))
143
147
  .build()
144
148
  // GET|POST /events/feed/1
145
149
  ```
146
150
 
147
- ## Hono API Pattern (REST-style) v8 `CreateHttp`
151
+ SSE wire behavior is identical for `rpc-stream` and `http-stream` routes (one shared `SseEventSequencer`): `sse(data, { event, id, retry })` metadata is honored on yields and error events of both kinds, and a `null` yield serializes as empty SSE data on both.
152
+
153
+ ## Hono API Pattern (REST-style) — `CreateHttp`
148
154
 
149
- In v8, HTTP routes use `CreateHttp` (not `Create + APIConfig`). `schema.input` is renamed `schema.req`. The factory needs no `APIConfig` type parameter.
155
+ HTTP routes use `CreateHttp` (not `Create + APIConfig`). Request channels live under `schema.req` (`pathParams`, `query`, `body`, `headers`); response docs under `schema.res`. The factory needs no `APIConfig` type parameter.
150
156
 
151
157
  ```typescript
152
158
  import { HonoAppBuilder } from 'ts-procedures/hono'
@@ -174,13 +180,16 @@ const app = new HonoAppBuilder({ pathPrefix: '/api' })
174
180
  // GET /api/users/:id → 200, POST /api/users → 201
175
181
  ```
176
182
 
177
- **v7 v8 migration:**
183
+ Streaming HTTP routes use `CreateHttpStream` with `schema.yield` (and optional `schema.res.headers`) — both schemas flow into route docs and generated client types.
178
184
 
179
- 1. `Procedures<Ctx, APIConfig>()` → `Procedures<Ctx>()`
180
- 2. `.Create(` → `.CreateHttp(` for HTTP routes
181
- 3. `schema.input` → `schema.req` (same channels: `pathParams`, `query`, `body`, `headers`)
182
- 4. Move response type to `schema.res.body` (optional)
183
- 5. Re-run `npx ts-procedures-codegen`
185
+ **v8 v9 migration:**
186
+
187
+ 1. `Procedures({ config: { noRuntimeValidation: true } })` → `Procedures({ validation: false })`
188
+ 2. Suretype schemas TypeBox (or a custom `SchemaAdapter`); `isSuretypeSchema` removed
189
+ 3. `registration.isStream` → branch on the `kind` discriminant (`'rpc' | 'rpc-stream' | 'http' | 'http-stream'`)
190
+ 4. Duplicate-name registration now throws `ProcedureRegistrationError` instead of a bare `Error` (same message)
191
+ 5. `schemaParser` removed — use `computeSchema(name, schema, { adapters, compile })`; `extractJsonSchema(schema, adapters)` takes the adapter list explicitly
192
+ 6. Codegen CLI/options/output unchanged — regenerated clients are byte-identical to v8.6.0
184
193
 
185
194
  ## Astro adapter
186
195
 
@@ -195,6 +204,8 @@ Catch-all endpoint pattern. Build Hono apps once with `HonoAppBuilder`, mount vi
195
204
  | `ProcedureYieldValidationError` | Yield validation failure (validateYields: true) | N/A (mid-stream) |
196
205
  | `ProcedureRegistrationError` | Invalid schema or duplicate name at registration | N/A (startup) |
197
206
 
207
+ Every framework error instance carries a `kind` field (`'procedure' | 'validation' | 'yield-validation' | 'registration'`) as an alternative to `instanceof`.
208
+
198
209
  ### Error Taxonomy (required for custom errors)
199
210
 
200
211
  `defineErrorTaxonomy` maps error classes to HTTP responses declaratively. Works with `HonoAppBuilder` for `rpc`, `http`, and pre-stream paths (`rpc-stream` / `http-stream`).
@@ -235,6 +246,8 @@ new HonoAppBuilder({
235
246
 
236
247
  Handlers throw the error classes directly — the builder auto-serializes. `onError` is the first-class imperative peer when you want to handle errors in one callback instead (both modes coexist). In v6 `HonoAppBuilder.onPreStreamError` was renamed to `onError`. Cross-cutting `onRequestError` observer fires for every caught error.
237
248
 
249
+ Custom (non-Hono) adapters consume the same taxonomy via `ts-procedures/server`'s `dispatchPreStreamError` / `dispatchMidStreamError`, which return plain data (`{ type: 'body', statusCode, body } | { type: 'response', response }` / `{ data, sseEvent?, runOnCatch? }`) — your adapter translates that into its framework's response.
250
+
238
251
  ### Per-route errors (typed)
239
252
 
240
253
  Declare a route's errors via the `errors` field on the `CreateHttp` config. For compile-time typo protection, attach a `satisfies` clause to the array — do NOT pass an explicit generic. `CreateHttp` is generic over `<TName, TReq, TRes, TErrorKey>`, so a single type argument binds `TName` and breaks `schema.req` / `schema.res` inference:
@@ -298,14 +311,18 @@ onRequestStart → factoryContext() → validation → onStreamStart → handler
298
311
  ## Decision Framework
299
312
 
300
313
  **Which procedure type?**
301
- - Single response → `Create`
302
- - Multiple values over time → `CreateStream`
314
+ - Single response (RPC) → `Create`
315
+ - Multiple values over time (RPC) → `CreateStream`
316
+ - REST-style route (`path` + `method`) → `CreateHttp`
317
+ - REST-style streaming route → `CreateHttpStream`
303
318
 
304
319
  **Which schema library?**
305
- - **TypeBox** (`import { Type } from 'typebox'`)
320
+ - **TypeBox** (`import { Type } from 'typebox'`) — built in, with `Infer<T>` type inference
321
+ - Other libraries → implement `SchemaAdapter` and pass `Procedures({ schema: { adapters: [...] } })` (runtime validation + docs only)
306
322
 
307
323
  **Which HTTP implementation?**
308
324
  - Hono (RPC, streams, REST, REST streams) → `HonoAppBuilder`
325
+ - Other frameworks (Fastify, Express, ...) → write a thin adapter on `ts-procedures/server` (doc builders, taxonomy dispatch returning data, `extractReqChannels`/`RequestSource`, `SseEventSequencer`); use the Hono adapter as the blueprint
309
326
 
310
327
  **Stream mode?**
311
328
  - Browser EventSource → `'sse'` (default)
@@ -318,14 +335,14 @@ onRequestStart → factoryContext() → validation → onStreamStart → handler
318
335
  3. **Never put validation logic in handler** — use `schema.params`
319
336
  4. **Never ignore ctx.signal** — pass to all async calls
320
337
  5. **Never skip signal.aborted check in stream loops** — causes resource leaks
321
- 6. **Never register Create procedures with HonoAppBuilder** they're silently ignored
322
- 7. **Never use plain JSON Schema objects** — use TypeBox builders
338
+ 6. **Never branch on `isStream`** removed in v9; use the `kind` discriminant (on registrations and every creator's `info`)
339
+ 7. **Never use plain JSON Schema objects** — use TypeBox builders (or register a `SchemaAdapter` for another library)
323
340
  8. **Never swallow errors without re-throwing** — hides failures
324
341
  9. **Never assume extra params fields survive** — `removeAdditional: true` strips them
325
342
  10. **Never manually parse types AJV coerces** — `coerceTypes: true` handles it
326
- 11. **Never define both schema.params and schema.input** mutually exclusive, throws ProcedureRegistrationError
343
+ 11. **Never put `schema.req` on `Create`/`CreateStream` or `schema.params` on `CreateHttp`/`CreateHttpStream`** — RPC creators take `schema.params`; HTTP creators take `schema.req` channels
327
344
  12. **Never catch raw DOMException/TypeError from generated callables** — catch `ClientTimeoutError`, `ClientAbortError`, `ClientNetworkError` instead; or use `.safe()` for Result-based narrowing
328
- 13. **Never use `Create` for HTTP routes (v8+)** — use `CreateHttp` (unary) or `CreateHttpStream` (streaming); `schema.input` `schema.req`; `Procedures<Ctx, APIConfig>()` → `Procedures<Ctx>()`
345
+ 13. **Never use `Create` for HTTP routes (v8+)** — use `CreateHttp` (unary) or `CreateHttpStream` (streaming); request channels go under `schema.req`; `Procedures<Ctx, APIConfig>()` → `Procedures<Ctx>()`
329
346
 
330
347
  ## Testing
331
348
 
@@ -449,7 +466,7 @@ interface ProcedureCallOptions extends ProcedureCallDefaults, ClientHooks {}
449
466
  ```
450
467
 
451
468
  - Defaults are set via `config.defaults`; per-call options are passed as the 2nd argument to any generated callable.
452
- - Header precedence (low → high): adapter config < `defaults.headers` < per-call `headers` < route-declared `schema.input.headers` < `onBeforeRequest` mutations.
469
+ - Header precedence (low → high): adapter config < `defaults.headers` < per-call `headers` < route-declared `schema.req.headers` < `onBeforeRequest` mutations.
453
470
 
454
471
  ### Typed RequestMeta (Declaration Merging)
455
472
 
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astro-context.js","sourceRoot":"","sources":["../../../src/adapters/astro/astro-context.ts"],"names":[],"mappings":"AAGA,MAAM,eAAe,GAAG,IAAI,OAAO,EAAuB,CAAA;AAE1D;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB,EAAE,UAAsB;IACtE,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,CAAc;IAC5C,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,6DAA6D;YAC3D,qFAAqF,CACxF,CAAA;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-handler.js","sourceRoot":"","sources":["../../../src/adapters/astro/create-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AA2BlD,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAU,CAAA;AAE1F,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAErE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IACnF,CAAC;IAED,MAAM,GAAG,GAAa,KAAK,EAAE,UAAU,EAAE,EAAE;QACzC,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QACpE,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC5C,CAAC;QACD,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QAEtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YACtC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO,GAAG,CAAA;QACpC,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAC5C,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAmB,CAAA;IACzC,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAA;IACxB,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/astro/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,mEAAmE;AACnE,mDAAmD;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA"}
@@ -4,7 +4,7 @@ import { Type } from 'typebox';
4
4
  import { stripPrefix } from './rewrite-request.js';
5
5
  import { setAstroContext, getAstroContext } from './astro-context.js';
6
6
  import { createAstroHandler } from './create-handler.js';
7
- import { Procedures } from '../../../index.js';
7
+ import { Procedures } from '../../core/procedures.js';
8
8
  import { HonoAppBuilder } from '../hono/index.js';
9
9
  // Minimal stand-in for Astro's APIContext for unit tests.
10
10
  function fakeApiContext(overrides = {}) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/adapters/astro/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewrite-request.js","sourceRoot":"","sources":["../../../src/adapters/astro/rewrite-request.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,MAA0B;IACtE,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,CAAA;IACxC,MAAM,UAAU,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IACvD,IAAI,UAAU,KAAK,GAAG;QAAE,OAAO,OAAO,CAAA;IAEtC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAA;IAErD,2EAA2E;IAC3E,yEAAyE;IACzE,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAChD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IAE3D,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAClD,GAAG,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;IAEvC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AAClC,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { dirname, resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { Type } from 'typebox';
6
+ import { Procedures } from '../../core/procedures.js';
7
+ import { HonoAppBuilder, defineErrorTaxonomy } from './index.js';
8
+ /**
9
+ * THE envelope contract test: the v9 builder must emit a DocEnvelope
10
+ * deep-equal to what v8.6.0 emitted for the same procedure set. The fixture
11
+ * was captured from the v8 build by `tools/capture-parity-envelope.mjs` —
12
+ * the procedure set below is that script's twin and MUST stay in sync with it.
13
+ *
14
+ * The envelope is codegen's input; if this test fails, generated client output
15
+ * WILL drift.
16
+ *
17
+ * ONE documented deviation from the raw v8 capture: v8's CreateHttpStream
18
+ * dropped the `yield` schema (and `res.headers`) from http-stream route docs —
19
+ * the registration stored `yieldType` while the doc builder read `yield`. v9
20
+ * fixes that, so the fixture's TailUser route was patched to include the
21
+ * `yield` schema the builder now (correctly) emits. Everything else is the
22
+ * untouched v8 capture.
23
+ */
24
+ class TeapotError extends Error {
25
+ }
26
+ describe('DocEnvelope parity with v8.6.0', () => {
27
+ it('emits a deep-equal envelope for the reference procedure set', async () => {
28
+ const factory = Procedures();
29
+ const { Create, CreateStream, CreateHttp, CreateHttpStream } = factory;
30
+ Create('GetUser', {
31
+ scope: 'users',
32
+ version: 1,
33
+ errors: ['Teapot'],
34
+ description: 'Fetch one user',
35
+ schema: {
36
+ params: Type.Object({ id: Type.String() }),
37
+ returnType: Type.Object({ id: Type.String(), name: Type.String() }),
38
+ },
39
+ }, async (_ctx, params) => ({ id: params.id, name: 'x' }));
40
+ CreateStream('WatchUser', {
41
+ scope: ['users', 'live'],
42
+ version: 2,
43
+ schema: {
44
+ params: Type.Object({ id: Type.String() }),
45
+ yieldType: Type.Object({ at: Type.Number() }),
46
+ returnType: Type.Object({ total: Type.Number() }),
47
+ },
48
+ }, async function* () {
49
+ yield { at: 1 };
50
+ return { total: 1 };
51
+ });
52
+ CreateHttp('UpdateUser', {
53
+ path: '/users/:id',
54
+ method: 'put',
55
+ successStatus: 200,
56
+ scope: 'users',
57
+ errors: ['Teapot'],
58
+ schema: {
59
+ req: {
60
+ pathParams: Type.Object({ id: Type.String() }),
61
+ query: Type.Object({ dryRun: Type.Optional(Type.Boolean()) }),
62
+ body: Type.Object({ name: Type.String() }),
63
+ },
64
+ res: {
65
+ body: Type.Object({ id: Type.String(), name: Type.String() }),
66
+ headers: Type.Object({ 'x-rev': Type.String() }),
67
+ },
68
+ },
69
+ }, async (_ctx, req) => ({
70
+ body: { id: req.pathParams.id, name: req.body.name },
71
+ headers: { 'x-rev': '1' },
72
+ }));
73
+ CreateHttpStream('TailUser', {
74
+ path: '/users/:id/tail',
75
+ method: 'get',
76
+ scope: 'users',
77
+ schema: {
78
+ req: { pathParams: Type.Object({ id: Type.String() }) },
79
+ yield: Type.Object({ line: Type.String() }),
80
+ returnType: Type.Object({ lines: Type.Number() }),
81
+ },
82
+ }, async function* () {
83
+ yield { line: 'a' };
84
+ return { lines: 1 };
85
+ });
86
+ const taxonomy = defineErrorTaxonomy({
87
+ Teapot: { class: TeapotError, statusCode: 418, description: 'Short and stout.' },
88
+ });
89
+ const builder = new HonoAppBuilder({ pathPrefix: '/api', errors: taxonomy });
90
+ builder.register(factory, {});
91
+ builder.build();
92
+ const fixturePath = resolve(dirname(fileURLToPath(import.meta.url)), '__fixtures__/parity-envelope.json');
93
+ const expected = JSON.parse(await readFile(fixturePath, 'utf-8'));
94
+ const actual = JSON.parse(JSON.stringify(builder.toDocEnvelope()));
95
+ expect(actual).toEqual(expected);
96
+ });
97
+ });
98
+ //# sourceMappingURL=envelope-parity.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope-parity.test.js","sourceRoot":"","sources":["../../../src/adapters/hono/envelope-parity.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Hono } from 'hono';
2
- import type { THttpStreamProcedureRegistration } from '../../../../types.js';
2
+ import type { THttpStreamProcedureRegistration } from '../../../core/types.js';
3
3
  import type { DocAccumulator, HonoAppBuilderConfig, HonoFactoryItem } from '../types.js';
4
4
  export declare function installHttpStreamRoute(params: {
5
5
  app: Hono;
@@ -0,0 +1,55 @@
1
+ import { streamSSE } from 'hono/streaming';
2
+ import { dispatchMidStreamError, dispatchPreStreamError } from '../../../server/errors/dispatch.js';
3
+ import { buildHttpStreamRouteDoc } from '../../../server/docs/http-stream-doc.js';
4
+ import { resolveFactoryContext } from '../../../server/context.js';
5
+ import { extractReqChannels } from '../../../server/request/params.js';
6
+ import { parseQueryNative } from '../../../server/request/query.js';
7
+ import { SseEventSequencer } from '../../../server/sse.js';
8
+ import { honoRequestSource, respondToDispatch } from '../request.js';
9
+ import { midStreamErrorConfig, preStreamErrorConfig } from '../types.js';
10
+ export function installHttpStreamRoute(params) {
11
+ const { app, procedure, factoryItem, cfg, docs } = params;
12
+ const queryParser = cfg.api?.queryParser ?? parseQueryNative;
13
+ const route = buildHttpStreamRouteDoc(procedure, cfg.pathPrefix, factoryItem.extendProcedureDoc);
14
+ docs.push(route);
15
+ const reqSchema = procedure.config.schema?.req;
16
+ app.on(procedure.config.method.toUpperCase(), route.fullPath, async (c) => {
17
+ try {
18
+ const context = await resolveFactoryContext(factoryItem.factoryContext, c);
19
+ const reqParams = reqSchema
20
+ ? await extractReqChannels(honoRequestSource(c), procedure.config.method, reqSchema, queryParser)
21
+ : undefined;
22
+ const { stream: gen, initialHeaders } = await procedure.handler({ ...context, signal: c.req.raw.signal }, reqParams);
23
+ if (initialHeaders) {
24
+ for (const [k, v] of Object.entries(initialHeaders))
25
+ c.header(k, v);
26
+ }
27
+ cfg.stream?.onStreamStart?.(procedure, c, 'sse');
28
+ return streamSSE(c, async (stream) => {
29
+ const events = new SseEventSequencer((e) => stream.writeSSE(e), procedure.name);
30
+ try {
31
+ await events.pump(gen);
32
+ }
33
+ catch (error) {
34
+ const dispatched = await dispatchMidStreamError({
35
+ err: error,
36
+ procedure,
37
+ raw: c,
38
+ cfg: midStreamErrorConfig(cfg),
39
+ });
40
+ await events.writeError(dispatched);
41
+ if (dispatched.runOnCatch)
42
+ await dispatched.runOnCatch();
43
+ }
44
+ finally {
45
+ cfg.stream?.onStreamEnd?.(procedure, c, 'sse');
46
+ cfg.onRequestEnd?.(c);
47
+ }
48
+ });
49
+ }
50
+ catch (error) {
51
+ return respondToDispatch(c, await dispatchPreStreamError({ err: error, procedure, raw: c, cfg: preStreamErrorConfig(cfg) }));
52
+ }
53
+ });
54
+ }
55
+ //# sourceMappingURL=http-stream.js.map