@lovrozagar/honey 0.7.2 → 1.0.0-rc.1

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 (1003) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -1969
  3. package/bin/honey.js +87 -27
  4. package/dist/adapters/bun/serve.d.ts +18 -0
  5. package/dist/adapters/bun/serve.js +89 -0
  6. package/dist/adapters/fetch-request.d.ts +20 -0
  7. package/dist/adapters/fetch-request.js +29 -0
  8. package/dist/adapters/node/headers.d.ts +27 -0
  9. package/dist/adapters/node/headers.js +86 -0
  10. package/dist/adapters/node/request.d.ts +16 -0
  11. package/dist/adapters/node/request.js +214 -0
  12. package/dist/adapters/node/response.d.ts +11 -0
  13. package/dist/adapters/node/response.js +126 -0
  14. package/dist/adapters/node/serve.d.ts +39 -0
  15. package/dist/adapters/node/serve.js +205 -0
  16. package/dist/adapters/node/url.d.ts +13 -0
  17. package/dist/adapters/node/url.js +87 -0
  18. package/dist/adapters/serve.d.ts +36 -0
  19. package/dist/adapters/serve.js +52 -0
  20. package/dist/build/artifacts.d.ts +34 -0
  21. package/dist/build/artifacts.js +123 -0
  22. package/dist/build/cli-args.d.ts +30 -0
  23. package/dist/build/cli-args.js +97 -0
  24. package/dist/build/cli.d.ts +11 -0
  25. package/dist/build/cli.js +150 -0
  26. package/dist/build/config.d.ts +102 -0
  27. package/dist/build/config.js +89 -0
  28. package/dist/build/generate.d.ts +19 -0
  29. package/dist/build/generate.js +80 -0
  30. package/dist/build/glob.d.ts +8 -0
  31. package/dist/build/glob.js +97 -0
  32. package/dist/build/index.d.ts +3 -58
  33. package/dist/build/index.js +3 -173
  34. package/dist/build/init.d.ts +3 -0
  35. package/dist/build/init.js +131 -0
  36. package/dist/build/loaders.d.ts +33 -0
  37. package/dist/build/loaders.js +105 -0
  38. package/dist/build/plugin.d.ts +52 -0
  39. package/dist/build/plugin.js +146 -0
  40. package/dist/build/source.d.ts +21 -0
  41. package/dist/build/source.js +100 -0
  42. package/dist/build/targets.d.ts +59 -0
  43. package/dist/build/targets.js +107 -0
  44. package/dist/context/context.d.ts +111 -0
  45. package/dist/context/context.js +213 -0
  46. package/dist/context/cookie-sign.d.ts +38 -0
  47. package/dist/context/cookie-sign.js +113 -0
  48. package/dist/context/cookie.d.ts +28 -0
  49. package/dist/context/cookie.js +142 -0
  50. package/dist/context/peer.d.ts +34 -0
  51. package/dist/context/peer.js +190 -0
  52. package/dist/errors/error.d.ts +60 -0
  53. package/dist/errors/error.js +84 -0
  54. package/dist/errors/errors.d.ts +45 -0
  55. package/dist/errors/errors.js +31 -0
  56. package/dist/errors/on-error.d.ts +10 -0
  57. package/dist/errors/on-error.js +204 -0
  58. package/dist/errors/problem-json.d.ts +14 -0
  59. package/dist/errors/problem-json.js +58 -0
  60. package/dist/errors/projector.d.ts +50 -0
  61. package/dist/errors/projector.js +107 -0
  62. package/dist/i18n/error-i18n.d.ts +26 -0
  63. package/dist/i18n/error-i18n.js +77 -0
  64. package/dist/i18n/i18n.d.ts +21 -0
  65. package/dist/i18n/i18n.js +40 -0
  66. package/dist/i18n/icu.d.ts +29 -0
  67. package/dist/i18n/icu.js +170 -0
  68. package/dist/i18n/index.d.ts +4 -0
  69. package/dist/i18n/index.js +3 -0
  70. package/dist/index.d.ts +30 -744
  71. package/dist/index.js +12 -2363
  72. package/dist/input/accepts.d.ts +5 -0
  73. package/dist/input/accepts.js +105 -0
  74. package/dist/input/binary.d.ts +20 -0
  75. package/dist/input/binary.js +40 -0
  76. package/dist/input/body-kind.d.ts +15 -0
  77. package/dist/input/body-kind.js +47 -0
  78. package/dist/input/body-limit.d.ts +21 -0
  79. package/dist/input/body-limit.js +99 -0
  80. package/dist/input/cookies.d.ts +7 -0
  81. package/dist/input/cookies.js +8 -0
  82. package/dist/input/form.d.ts +10 -0
  83. package/dist/input/form.js +24 -0
  84. package/dist/input/headers.d.ts +7 -0
  85. package/dist/input/headers.js +8 -0
  86. package/dist/input/input.d.ts +91 -0
  87. package/dist/input/input.js +88 -0
  88. package/dist/input/json.d.ts +10 -0
  89. package/dist/input/json.js +22 -0
  90. package/dist/input/params.d.ts +7 -0
  91. package/dist/input/params.js +8 -0
  92. package/dist/input/query.d.ts +10 -0
  93. package/dist/input/query.js +17 -0
  94. package/dist/mcp/mount.d.ts +116 -0
  95. package/dist/mcp/mount.js +45 -0
  96. package/dist/mcp/oauth.d.ts +14 -0
  97. package/dist/mcp/oauth.js +88 -0
  98. package/dist/mcp/uploads.d.ts +36 -0
  99. package/dist/mcp/uploads.js +171 -0
  100. package/dist/mcp/url-files.d.ts +32 -0
  101. package/dist/mcp/url-files.js +75 -0
  102. package/dist/meta/meta-spec-apply.d.ts +25 -0
  103. package/dist/meta/meta-spec-apply.js +83 -0
  104. package/dist/meta/meta-spec-merge.d.ts +103 -0
  105. package/dist/meta/meta-spec-merge.js +50 -0
  106. package/dist/meta/meta-spec-validate.d.ts +61 -0
  107. package/dist/meta/meta-spec-validate.js +166 -0
  108. package/dist/meta/meta-spec.d.ts +49 -0
  109. package/dist/meta/meta-spec.js +197 -0
  110. package/dist/middleware/compress.d.ts +15 -0
  111. package/dist/middleware/compress.js +93 -0
  112. package/dist/middleware/cors.d.ts +18 -0
  113. package/dist/middleware/cors.js +80 -0
  114. package/dist/middleware/csrf.d.ts +11 -0
  115. package/dist/middleware/csrf.js +65 -0
  116. package/dist/middleware/ip-restrict.d.ts +10 -0
  117. package/dist/middleware/ip-restrict.js +82 -0
  118. package/dist/middleware/middleware.d.ts +53 -0
  119. package/dist/middleware/middleware.js +112 -0
  120. package/dist/middleware/powered-by.d.ts +6 -0
  121. package/dist/middleware/powered-by.js +13 -0
  122. package/dist/middleware/rate-limit.d.ts +40 -0
  123. package/dist/middleware/rate-limit.js +90 -0
  124. package/dist/middleware/request-id.d.ts +25 -0
  125. package/dist/middleware/request-id.js +30 -0
  126. package/dist/middleware/secure-headers.d.ts +18 -0
  127. package/dist/middleware/secure-headers.js +36 -0
  128. package/dist/middleware/server-timing.d.ts +8 -0
  129. package/dist/middleware/server-timing.js +52 -0
  130. package/dist/middleware/timeout.d.ts +6 -0
  131. package/dist/middleware/timeout.js +29 -0
  132. package/dist/observability/curl-logger.d.ts +46 -0
  133. package/dist/observability/curl-logger.js +175 -0
  134. package/dist/observability/request-to-curl.d.ts +17 -0
  135. package/dist/observability/request-to-curl.js +47 -0
  136. package/dist/openapi/collect.d.ts +56 -18
  137. package/dist/openapi/collect.js +109 -23
  138. package/dist/openapi/components.d.ts +9 -0
  139. package/dist/openapi/components.js +90 -0
  140. package/dist/openapi/docs-page.d.ts +20 -18
  141. package/dist/openapi/docs-page.js +28 -46
  142. package/dist/openapi/document.d.ts +33 -26
  143. package/dist/openapi/document.js +21 -776
  144. package/dist/openapi/extract-schemas.d.ts +11 -0
  145. package/dist/openapi/extract-schemas.js +31 -0
  146. package/dist/openapi/generate.d.ts +47 -0
  147. package/dist/openapi/generate.js +180 -0
  148. package/dist/openapi/manifest.d.ts +41 -0
  149. package/dist/openapi/manifest.js +49 -0
  150. package/dist/openapi/output-keys.d.ts +6 -0
  151. package/dist/openapi/output-keys.js +24 -0
  152. package/dist/openapi/paths.d.ts +35 -0
  153. package/dist/openapi/paths.js +175 -0
  154. package/dist/openapi/register.d.ts +14 -3
  155. package/dist/openapi/register.js +13 -20
  156. package/dist/openapi/responses.d.ts +44 -0
  157. package/dist/openapi/responses.js +159 -0
  158. package/dist/openapi/scalar.d.ts +4 -14
  159. package/dist/openapi/scalar.js +5 -7
  160. package/dist/openapi/security.d.ts +4 -0
  161. package/dist/openapi/security.js +25 -0
  162. package/dist/openapi/serve.d.ts +25 -9
  163. package/dist/openapi/serve.js +108 -29
  164. package/dist/openapi/servers.d.ts +19 -0
  165. package/dist/openapi/servers.js +72 -0
  166. package/dist/openapi/swagger.d.ts +4 -14
  167. package/dist/openapi/swagger.js +5 -7
  168. package/dist/openapi/tags.d.ts +20 -0
  169. package/dist/openapi/tags.js +20 -0
  170. package/dist/openapi/webhooks.d.ts +19 -0
  171. package/dist/openapi/webhooks.js +70 -0
  172. package/dist/openapi/yaml.d.ts +8 -0
  173. package/dist/openapi/yaml.js +74 -0
  174. package/dist/proxy/headers.d.ts +30 -0
  175. package/dist/proxy/headers.js +86 -0
  176. package/dist/proxy/proxy.d.ts +39 -0
  177. package/dist/proxy/proxy.js +103 -0
  178. package/dist/proxy/upstream.d.ts +30 -0
  179. package/dist/proxy/upstream.js +116 -0
  180. package/dist/realtime/bus.d.ts +10 -13
  181. package/dist/realtime/bus.js +48 -93
  182. package/dist/realtime/invoke-user.d.ts +36 -0
  183. package/dist/realtime/invoke-user.js +103 -0
  184. package/dist/realtime/realtime.d.ts +7 -0
  185. package/dist/realtime/realtime.js +40 -0
  186. package/dist/realtime/route.d.ts +33 -27
  187. package/dist/realtime/route.js +27 -43
  188. package/dist/realtime/server.d.ts +24 -28
  189. package/dist/realtime/server.js +202 -225
  190. package/dist/response/binary.d.ts +18 -0
  191. package/dist/response/binary.js +10 -0
  192. package/dist/response/builder.d.ts +73 -0
  193. package/dist/response/builder.js +214 -0
  194. package/dist/response/cache-control.d.ts +30 -0
  195. package/dist/response/cache-control.js +74 -0
  196. package/dist/response/etag.d.ts +15 -0
  197. package/dist/response/etag.js +83 -0
  198. package/dist/response/media-type.d.ts +28 -0
  199. package/dist/response/media-type.js +97 -0
  200. package/dist/response/out-headers.d.ts +31 -0
  201. package/dist/response/out-headers.js +130 -0
  202. package/dist/response/pretty-json.d.ts +10 -0
  203. package/dist/response/pretty-json.js +44 -0
  204. package/dist/response/range.d.ts +19 -0
  205. package/dist/response/range.js +98 -0
  206. package/dist/response/response-headers.d.ts +11 -0
  207. package/dist/response/response-headers.js +21 -0
  208. package/dist/response/response.d.ts +69 -0
  209. package/dist/response/response.js +208 -0
  210. package/dist/response/sse.d.ts +41 -0
  211. package/dist/response/sse.js +73 -0
  212. package/dist/response/static.d.ts +20 -0
  213. package/dist/response/static.js +181 -0
  214. package/dist/response/status.d.ts +5 -0
  215. package/dist/response/status.js +68 -0
  216. package/dist/response/with-headers.d.ts +11 -0
  217. package/dist/response/with-headers.js +47 -0
  218. package/dist/routing/app-types.d.ts +181 -0
  219. package/dist/routing/app-types.js +1 -0
  220. package/dist/routing/app.d.ts +76 -0
  221. package/dist/routing/app.js +137 -0
  222. package/dist/routing/codegen-types.d.ts +17 -0
  223. package/dist/routing/codegen-types.js +1 -0
  224. package/dist/routing/delegate.d.ts +9 -0
  225. package/dist/routing/delegate.js +75 -0
  226. package/dist/routing/dispatch.d.ts +22 -0
  227. package/dist/routing/dispatch.js +255 -0
  228. package/dist/routing/finalize.d.ts +47 -0
  229. package/dist/routing/finalize.js +169 -0
  230. package/dist/routing/gateway-tree.d.ts +19 -0
  231. package/dist/routing/gateway-tree.js +74 -0
  232. package/dist/routing/invalidate-check.d.ts +58 -0
  233. package/dist/routing/invalidate-check.js +124 -0
  234. package/dist/routing/match.d.ts +22 -0
  235. package/dist/routing/match.js +108 -0
  236. package/dist/routing/middleware-chain.d.ts +16 -0
  237. package/dist/routing/middleware-chain.js +41 -0
  238. package/dist/routing/output-types.d.ts +91 -0
  239. package/dist/routing/output-types.js +1 -0
  240. package/dist/routing/pattern.d.ts +55 -0
  241. package/dist/routing/pattern.js +219 -0
  242. package/dist/routing/record.d.ts +18 -0
  243. package/dist/routing/record.js +4 -0
  244. package/dist/routing/register.d.ts +135 -0
  245. package/dist/routing/register.js +155 -0
  246. package/dist/routing/request-path.d.ts +30 -0
  247. package/dist/routing/request-path.js +173 -0
  248. package/dist/routing/route-builder.d.ts +160 -0
  249. package/dist/routing/route-builder.js +86 -0
  250. package/dist/routing/route-tree.d.ts +18 -0
  251. package/dist/routing/route-tree.js +91 -0
  252. package/dist/routing/settings-chain.d.ts +75 -0
  253. package/dist/routing/settings-chain.js +137 -0
  254. package/dist/routing/settings.d.ts +90 -0
  255. package/dist/routing/settings.js +44 -0
  256. package/dist/routing/tap.d.ts +31 -0
  257. package/dist/routing/tap.js +77 -0
  258. package/dist/routing/tree-merge.d.ts +7 -0
  259. package/dist/routing/tree-merge.js +77 -0
  260. package/dist/routing/tree.d.ts +85 -0
  261. package/dist/routing/tree.js +196 -0
  262. package/dist/routing/types.d.ts +20 -0
  263. package/dist/routing/types.js +1 -0
  264. package/dist/routing/ws-builder.d.ts +62 -0
  265. package/dist/routing/ws-builder.js +109 -0
  266. package/dist/runtime/detect-runtime.d.ts +16 -0
  267. package/dist/runtime/detect-runtime.js +11 -0
  268. package/dist/runtime/optional-peer.d.ts +10 -0
  269. package/dist/runtime/optional-peer.js +19 -0
  270. package/dist/schema/arktype.d.ts +7 -0
  271. package/dist/schema/arktype.js +13 -0
  272. package/dist/schema/canonicalize.d.ts +8 -0
  273. package/dist/schema/canonicalize.js +19 -0
  274. package/dist/schema/effect.d.ts +7 -0
  275. package/dist/schema/effect.js +4 -0
  276. package/dist/schema/naming.d.ts +31 -0
  277. package/dist/schema/naming.js +116 -0
  278. package/dist/schema/sanitize-spec.d.ts +15 -0
  279. package/dist/schema/sanitize-spec.js +43 -0
  280. package/dist/schema/slots.d.ts +15 -0
  281. package/dist/schema/slots.js +179 -0
  282. package/dist/schema/to-json-schema.d.ts +34 -0
  283. package/dist/schema/to-json-schema.js +94 -0
  284. package/dist/schema/valibot.d.ts +4 -0
  285. package/dist/schema/valibot.js +153 -0
  286. package/dist/schema/yup.d.ts +3 -0
  287. package/dist/schema/yup.js +57 -0
  288. package/dist/schema/zod.d.ts +6 -0
  289. package/dist/schema/zod.js +192 -0
  290. package/dist/security/crypto.d.ts +7 -0
  291. package/dist/security/crypto.js +30 -0
  292. package/dist/streaming/producer-stream.d.ts +45 -0
  293. package/dist/streaming/producer-stream.js +251 -0
  294. package/dist/telemetry/fields.d.ts +43 -0
  295. package/dist/telemetry/fields.js +64 -0
  296. package/dist/telemetry/log-format.d.ts +7 -0
  297. package/dist/telemetry/log-format.js +43 -0
  298. package/dist/telemetry/logger.d.ts +44 -0
  299. package/dist/telemetry/logger.js +122 -0
  300. package/dist/telemetry/otel-subpath.d.ts +7 -0
  301. package/dist/telemetry/otel-subpath.js +5 -0
  302. package/dist/telemetry/otel.d.ts +50 -57
  303. package/dist/telemetry/otel.js +54 -130
  304. package/dist/telemetry/request-log.d.ts +22 -0
  305. package/dist/telemetry/request-log.js +83 -0
  306. package/dist/telemetry/request-trace.d.ts +123 -0
  307. package/dist/telemetry/request-trace.js +199 -0
  308. package/dist/telemetry/span-lifecycle.d.ts +11 -0
  309. package/dist/telemetry/span-lifecycle.js +114 -0
  310. package/dist/telemetry/traceparent.d.ts +40 -0
  311. package/dist/telemetry/traceparent.js +73 -0
  312. package/dist/testing/testing.d.ts +42 -0
  313. package/dist/testing/testing.js +101 -0
  314. package/dist/validation/content-type.d.ts +21 -0
  315. package/dist/validation/content-type.js +42 -0
  316. package/dist/validation/standard-schema.d.ts +41 -0
  317. package/dist/validation/standard-schema.js +5 -0
  318. package/dist/validation/validate-input.d.ts +45 -0
  319. package/dist/validation/validate-input.js +174 -0
  320. package/dist/validation/validate-output.d.ts +34 -0
  321. package/dist/validation/validate-output.js +107 -0
  322. package/dist/ws/bun.d.ts +30 -25
  323. package/dist/ws/bun.js +42 -46
  324. package/dist/ws/cloudflare.d.ts +6 -75
  325. package/dist/ws/cloudflare.js +37 -104
  326. package/dist/ws/contract.d.ts +74 -0
  327. package/dist/ws/contract.js +83 -0
  328. package/dist/ws/node.d.ts +12 -21
  329. package/dist/ws/node.js +103 -151
  330. package/dist/ws/origin.d.ts +23 -0
  331. package/dist/ws/origin.js +48 -0
  332. package/dist/ws/route.d.ts +14 -0
  333. package/dist/ws/route.js +5 -0
  334. package/dist/ws/session.d.ts +15 -6
  335. package/dist/ws/session.js +22 -23
  336. package/dist/ws/shared.d.ts +23 -33
  337. package/dist/ws/shared.js +53 -39
  338. package/package.json +169 -251
  339. package/dist/accepts.d.ts +0 -12
  340. package/dist/accepts.d.ts.map +0 -1
  341. package/dist/accepts.js +0 -126
  342. package/dist/accepts.js.map +0 -1
  343. package/dist/body-kind.d.ts +0 -26
  344. package/dist/body-kind.d.ts.map +0 -1
  345. package/dist/body-kind.js +0 -70
  346. package/dist/body-kind.js.map +0 -1
  347. package/dist/body-limit.d.ts +0 -26
  348. package/dist/body-limit.d.ts.map +0 -1
  349. package/dist/body-limit.js +0 -126
  350. package/dist/body-limit.js.map +0 -1
  351. package/dist/build/index.d.ts.map +0 -1
  352. package/dist/build/index.js.map +0 -1
  353. package/dist/cli-args.d.ts +0 -33
  354. package/dist/cli-args.d.ts.map +0 -1
  355. package/dist/cli-args.js +0 -102
  356. package/dist/cli-args.js.map +0 -1
  357. package/dist/cli-go/auth.go +0 -26
  358. package/dist/cli-go/config.go +0 -192
  359. package/dist/cli-go/errors.go +0 -75
  360. package/dist/cli-go/multipart.go +0 -79
  361. package/dist/cli-go/output.go +0 -163
  362. package/dist/cli-go/root.go +0 -30
  363. package/dist/cli-go/stream.go +0 -88
  364. package/dist/cli-go/version.go +0 -5
  365. package/dist/cli.d.ts +0 -3
  366. package/dist/cli.d.ts.map +0 -1
  367. package/dist/cli.js +0 -209
  368. package/dist/cli.js.map +0 -1
  369. package/dist/client/defaults.d.ts +0 -12
  370. package/dist/client/defaults.d.ts.map +0 -1
  371. package/dist/client/defaults.js +0 -48
  372. package/dist/client/defaults.js.map +0 -1
  373. package/dist/client/error.d.ts +0 -49
  374. package/dist/client/error.d.ts.map +0 -1
  375. package/dist/client/error.js +0 -71
  376. package/dist/client/error.js.map +0 -1
  377. package/dist/client/http.d.ts +0 -155
  378. package/dist/client/http.d.ts.map +0 -1
  379. package/dist/client/http.js +0 -571
  380. package/dist/client/http.js.map +0 -1
  381. package/dist/client/index.d.ts +0 -23
  382. package/dist/client/index.d.ts.map +0 -1
  383. package/dist/client/index.js +0 -95
  384. package/dist/client/index.js.map +0 -1
  385. package/dist/client/path.d.ts +0 -26
  386. package/dist/client/path.d.ts.map +0 -1
  387. package/dist/client/path.js +0 -163
  388. package/dist/client/path.js.map +0 -1
  389. package/dist/client/redirect-policy.d.ts +0 -12
  390. package/dist/client/redirect-policy.d.ts.map +0 -1
  391. package/dist/client/redirect-policy.js +0 -20
  392. package/dist/client/redirect-policy.js.map +0 -1
  393. package/dist/client/sdk.d.ts +0 -70
  394. package/dist/client/sdk.d.ts.map +0 -1
  395. package/dist/client/sdk.js +0 -292
  396. package/dist/client/sdk.js.map +0 -1
  397. package/dist/client/sse.d.ts +0 -23
  398. package/dist/client/sse.d.ts.map +0 -1
  399. package/dist/client/sse.js +0 -129
  400. package/dist/client/sse.js.map +0 -1
  401. package/dist/client/types.d.ts +0 -124
  402. package/dist/client/types.d.ts.map +0 -1
  403. package/dist/client/types.js +0 -2
  404. package/dist/client/types.js.map +0 -1
  405. package/dist/client/ws.d.ts +0 -22
  406. package/dist/client/ws.d.ts.map +0 -1
  407. package/dist/client/ws.js +0 -112
  408. package/dist/client/ws.js.map +0 -1
  409. package/dist/client-go/errors.go +0 -236
  410. package/dist/client-go/export.go +0 -44
  411. package/dist/client-go/invalidation.go +0 -371
  412. package/dist/client-go/nullable.go +0 -62
  413. package/dist/client-go/realtime.go +0 -354
  414. package/dist/client-go/result.go +0 -20
  415. package/dist/client-go/runtime.go +0 -975
  416. package/dist/client-go/sse.go +0 -159
  417. package/dist/client-go/transport.go +0 -495
  418. package/dist/client-go/ws.go +0 -128
  419. package/dist/client-info.d.ts +0 -36
  420. package/dist/client-info.d.ts.map +0 -1
  421. package/dist/client-info.js +0 -53
  422. package/dist/client-info.js.map +0 -1
  423. package/dist/client-mcp/README.md +0 -10
  424. package/dist/client-mcp/server.ts +0 -221
  425. package/dist/client-mcp/types.ts +0 -19
  426. package/dist/client-python/_errors.py +0 -115
  427. package/dist/client-python/_invalidation.py +0 -494
  428. package/dist/client-python/_realtime.py +0 -179
  429. package/dist/client-python/_runtime.py +0 -860
  430. package/dist/client-python/_sse.py +0 -155
  431. package/dist/client-python/_transport.py +0 -366
  432. package/dist/client-python/_ws.py +0 -159
  433. package/dist/client-python/py.typed +0 -0
  434. package/dist/client-rust/errors.rs +0 -220
  435. package/dist/client-rust/invalidation.rs +0 -412
  436. package/dist/client-rust/invalidation_sync.rs +0 -93
  437. package/dist/client-rust/nullable.rs +0 -17
  438. package/dist/client-rust/realtime.rs +0 -702
  439. package/dist/client-rust/result.rs +0 -22
  440. package/dist/client-rust/runtime.rs +0 -980
  441. package/dist/client-rust/runtime_sync.rs +0 -484
  442. package/dist/client-rust/sse.rs +0 -188
  443. package/dist/client-rust/ws.rs +0 -167
  444. package/dist/codegen-go-cli.d.ts +0 -22
  445. package/dist/codegen-go-cli.d.ts.map +0 -1
  446. package/dist/codegen-go-cli.js +0 -964
  447. package/dist/codegen-go-cli.js.map +0 -1
  448. package/dist/codegen-go.d.ts +0 -41
  449. package/dist/codegen-go.d.ts.map +0 -1
  450. package/dist/codegen-go.js +0 -872
  451. package/dist/codegen-go.js.map +0 -1
  452. package/dist/codegen-hash.d.ts +0 -3
  453. package/dist/codegen-hash.d.ts.map +0 -1
  454. package/dist/codegen-hash.js +0 -9
  455. package/dist/codegen-hash.js.map +0 -1
  456. package/dist/codegen-ir.d.ts +0 -190
  457. package/dist/codegen-ir.d.ts.map +0 -1
  458. package/dist/codegen-ir.js +0 -661
  459. package/dist/codegen-ir.js.map +0 -1
  460. package/dist/codegen-lang.d.ts +0 -65
  461. package/dist/codegen-lang.d.ts.map +0 -1
  462. package/dist/codegen-lang.js +0 -526
  463. package/dist/codegen-lang.js.map +0 -1
  464. package/dist/codegen-load.d.ts +0 -31
  465. package/dist/codegen-load.d.ts.map +0 -1
  466. package/dist/codegen-load.js +0 -138
  467. package/dist/codegen-load.js.map +0 -1
  468. package/dist/codegen-loaders.d.ts +0 -12
  469. package/dist/codegen-loaders.d.ts.map +0 -1
  470. package/dist/codegen-loaders.js +0 -55
  471. package/dist/codegen-loaders.js.map +0 -1
  472. package/dist/codegen-mcp.d.ts +0 -13
  473. package/dist/codegen-mcp.d.ts.map +0 -1
  474. package/dist/codegen-mcp.js +0 -368
  475. package/dist/codegen-mcp.js.map +0 -1
  476. package/dist/codegen-python.d.ts +0 -33
  477. package/dist/codegen-python.d.ts.map +0 -1
  478. package/dist/codegen-python.js +0 -828
  479. package/dist/codegen-python.js.map +0 -1
  480. package/dist/codegen-route-tree-intern.d.ts +0 -40
  481. package/dist/codegen-route-tree-intern.d.ts.map +0 -1
  482. package/dist/codegen-route-tree-intern.js +0 -221
  483. package/dist/codegen-route-tree-intern.js.map +0 -1
  484. package/dist/codegen-rust.d.ts +0 -18
  485. package/dist/codegen-rust.d.ts.map +0 -1
  486. package/dist/codegen-rust.js +0 -1293
  487. package/dist/codegen-rust.js.map +0 -1
  488. package/dist/codegen-sanitize.d.ts +0 -3
  489. package/dist/codegen-sanitize.d.ts.map +0 -1
  490. package/dist/codegen-sanitize.js +0 -56
  491. package/dist/codegen-sanitize.js.map +0 -1
  492. package/dist/codegen-schema-naming.d.ts +0 -27
  493. package/dist/codegen-schema-naming.d.ts.map +0 -1
  494. package/dist/codegen-schema-naming.js +0 -150
  495. package/dist/codegen-schema-naming.js.map +0 -1
  496. package/dist/codegen-sdk-model.d.ts +0 -71
  497. package/dist/codegen-sdk-model.d.ts.map +0 -1
  498. package/dist/codegen-sdk-model.js +0 -179
  499. package/dist/codegen-sdk-model.js.map +0 -1
  500. package/dist/codegen.d.ts +0 -187
  501. package/dist/codegen.d.ts.map +0 -1
  502. package/dist/codegen.js +0 -4619
  503. package/dist/codegen.js.map +0 -1
  504. package/dist/context.d.ts +0 -86
  505. package/dist/context.d.ts.map +0 -1
  506. package/dist/context.js +0 -242
  507. package/dist/context.js.map +0 -1
  508. package/dist/cookie-sign.d.ts +0 -17
  509. package/dist/cookie-sign.d.ts.map +0 -1
  510. package/dist/cookie-sign.js +0 -104
  511. package/dist/cookie-sign.js.map +0 -1
  512. package/dist/cookie.d.ts +0 -24
  513. package/dist/cookie.d.ts.map +0 -1
  514. package/dist/cookie.js +0 -138
  515. package/dist/cookie.js.map +0 -1
  516. package/dist/cors.d.ts +0 -14
  517. package/dist/cors.d.ts.map +0 -1
  518. package/dist/cors.js +0 -87
  519. package/dist/cors.js.map +0 -1
  520. package/dist/crypto.d.ts +0 -7
  521. package/dist/crypto.d.ts.map +0 -1
  522. package/dist/crypto.js +0 -38
  523. package/dist/crypto.js.map +0 -1
  524. package/dist/csrf.d.ts +0 -28
  525. package/dist/csrf.d.ts.map +0 -1
  526. package/dist/csrf.js +0 -79
  527. package/dist/csrf.js.map +0 -1
  528. package/dist/curl-logger.d.ts +0 -44
  529. package/dist/curl-logger.d.ts.map +0 -1
  530. package/dist/curl-logger.js +0 -199
  531. package/dist/curl-logger.js.map +0 -1
  532. package/dist/detect-runtime.d.ts +0 -16
  533. package/dist/detect-runtime.d.ts.map +0 -1
  534. package/dist/detect-runtime.js +0 -13
  535. package/dist/detect-runtime.js.map +0 -1
  536. package/dist/dict.d.ts +0 -11
  537. package/dist/dict.d.ts.map +0 -1
  538. package/dist/dict.js +0 -13
  539. package/dist/dict.js.map +0 -1
  540. package/dist/error.d.ts +0 -21
  541. package/dist/error.d.ts.map +0 -1
  542. package/dist/error.js +0 -44
  543. package/dist/error.js.map +0 -1
  544. package/dist/errors.d.ts +0 -40
  545. package/dist/errors.d.ts.map +0 -1
  546. package/dist/errors.js +0 -39
  547. package/dist/errors.js.map +0 -1
  548. package/dist/etag.d.ts +0 -11
  549. package/dist/etag.d.ts.map +0 -1
  550. package/dist/etag.js +0 -82
  551. package/dist/etag.js.map +0 -1
  552. package/dist/feature-detect.d.ts +0 -25
  553. package/dist/feature-detect.d.ts.map +0 -1
  554. package/dist/feature-detect.js +0 -144
  555. package/dist/feature-detect.js.map +0 -1
  556. package/dist/feature-load.d.ts +0 -3
  557. package/dist/feature-load.d.ts.map +0 -1
  558. package/dist/feature-load.js +0 -36
  559. package/dist/feature-load.js.map +0 -1
  560. package/dist/feature-slots.d.ts +0 -44
  561. package/dist/feature-slots.d.ts.map +0 -1
  562. package/dist/feature-slots.js +0 -48
  563. package/dist/feature-slots.js.map +0 -1
  564. package/dist/fetch-request.d.ts +0 -10
  565. package/dist/fetch-request.d.ts.map +0 -1
  566. package/dist/fetch-request.js +0 -13
  567. package/dist/fetch-request.js.map +0 -1
  568. package/dist/gen-process.d.ts +0 -15
  569. package/dist/gen-process.d.ts.map +0 -1
  570. package/dist/gen-process.js +0 -43
  571. package/dist/gen-process.js.map +0 -1
  572. package/dist/gen-write.d.ts +0 -19
  573. package/dist/gen-write.d.ts.map +0 -1
  574. package/dist/gen-write.js +0 -120
  575. package/dist/gen-write.js.map +0 -1
  576. package/dist/glob.d.ts +0 -21
  577. package/dist/glob.d.ts.map +0 -1
  578. package/dist/glob.js +0 -115
  579. package/dist/glob.js.map +0 -1
  580. package/dist/go-type-emitter.d.ts +0 -47
  581. package/dist/go-type-emitter.d.ts.map +0 -1
  582. package/dist/go-type-emitter.js +0 -594
  583. package/dist/go-type-emitter.js.map +0 -1
  584. package/dist/honey-response.d.ts +0 -82
  585. package/dist/honey-response.d.ts.map +0 -1
  586. package/dist/honey-response.js +0 -338
  587. package/dist/honey-response.js.map +0 -1
  588. package/dist/i18n-slot.d.ts +0 -15
  589. package/dist/i18n-slot.d.ts.map +0 -1
  590. package/dist/i18n-slot.js +0 -14
  591. package/dist/i18n-slot.js.map +0 -1
  592. package/dist/i18n.d.ts +0 -29
  593. package/dist/i18n.d.ts.map +0 -1
  594. package/dist/i18n.js +0 -250
  595. package/dist/i18n.js.map +0 -1
  596. package/dist/index.d.ts.map +0 -1
  597. package/dist/index.js.map +0 -1
  598. package/dist/init.d.ts +0 -5
  599. package/dist/init.d.ts.map +0 -1
  600. package/dist/init.js +0 -140
  601. package/dist/init.js.map +0 -1
  602. package/dist/input.d.ts +0 -6
  603. package/dist/input.d.ts.map +0 -1
  604. package/dist/input.js +0 -4
  605. package/dist/input.js.map +0 -1
  606. package/dist/invalidate-check.d.ts +0 -61
  607. package/dist/invalidate-check.d.ts.map +0 -1
  608. package/dist/invalidate-check.js +0 -163
  609. package/dist/invalidate-check.js.map +0 -1
  610. package/dist/invoke-user.d.ts +0 -35
  611. package/dist/invoke-user.d.ts.map +0 -1
  612. package/dist/invoke-user.js +0 -73
  613. package/dist/invoke-user.js.map +0 -1
  614. package/dist/ip-restrict.d.ts +0 -24
  615. package/dist/ip-restrict.d.ts.map +0 -1
  616. package/dist/ip-restrict.js +0 -60
  617. package/dist/ip-restrict.js.map +0 -1
  618. package/dist/ip.d.ts +0 -39
  619. package/dist/ip.d.ts.map +0 -1
  620. package/dist/ip.js +0 -209
  621. package/dist/ip.js.map +0 -1
  622. package/dist/logger.d.ts +0 -45
  623. package/dist/logger.d.ts.map +0 -1
  624. package/dist/logger.js +0 -113
  625. package/dist/logger.js.map +0 -1
  626. package/dist/media-type.d.ts +0 -30
  627. package/dist/media-type.d.ts.map +0 -1
  628. package/dist/media-type.js +0 -97
  629. package/dist/media-type.js.map +0 -1
  630. package/dist/meta-spec-merge.d.ts +0 -32
  631. package/dist/meta-spec-merge.d.ts.map +0 -1
  632. package/dist/meta-spec-merge.js +0 -68
  633. package/dist/meta-spec-merge.js.map +0 -1
  634. package/dist/meta-spec.d.ts +0 -94
  635. package/dist/meta-spec.d.ts.map +0 -1
  636. package/dist/meta-spec.js +0 -535
  637. package/dist/meta-spec.js.map +0 -1
  638. package/dist/middleware.d.ts +0 -77
  639. package/dist/middleware.d.ts.map +0 -1
  640. package/dist/middleware.js +0 -253
  641. package/dist/middleware.js.map +0 -1
  642. package/dist/node-request.d.ts +0 -104
  643. package/dist/node-request.d.ts.map +0 -1
  644. package/dist/node-request.js +0 -407
  645. package/dist/node-request.js.map +0 -1
  646. package/dist/node.d.ts +0 -30
  647. package/dist/node.d.ts.map +0 -1
  648. package/dist/node.js +0 -396
  649. package/dist/node.js.map +0 -1
  650. package/dist/openapi/collect.d.ts.map +0 -1
  651. package/dist/openapi/collect.js.map +0 -1
  652. package/dist/openapi/docs-page.d.ts.map +0 -1
  653. package/dist/openapi/docs-page.js.map +0 -1
  654. package/dist/openapi/document.d.ts.map +0 -1
  655. package/dist/openapi/document.js.map +0 -1
  656. package/dist/openapi/json-schema-slot.d.ts +0 -12
  657. package/dist/openapi/json-schema-slot.d.ts.map +0 -1
  658. package/dist/openapi/json-schema-slot.js +0 -38
  659. package/dist/openapi/json-schema-slot.js.map +0 -1
  660. package/dist/openapi/register.d.ts.map +0 -1
  661. package/dist/openapi/register.js.map +0 -1
  662. package/dist/openapi/scalar.d.ts.map +0 -1
  663. package/dist/openapi/scalar.js.map +0 -1
  664. package/dist/openapi/serve.d.ts.map +0 -1
  665. package/dist/openapi/serve.js.map +0 -1
  666. package/dist/openapi/spec-factory.d.ts +0 -65
  667. package/dist/openapi/spec-factory.d.ts.map +0 -1
  668. package/dist/openapi/spec-factory.js +0 -52
  669. package/dist/openapi/spec-factory.js.map +0 -1
  670. package/dist/openapi/spec.d.ts +0 -29
  671. package/dist/openapi/spec.d.ts.map +0 -1
  672. package/dist/openapi/spec.js +0 -50
  673. package/dist/openapi/spec.js.map +0 -1
  674. package/dist/openapi/swagger.d.ts.map +0 -1
  675. package/dist/openapi/swagger.js.map +0 -1
  676. package/dist/pattern.d.ts +0 -71
  677. package/dist/pattern.d.ts.map +0 -1
  678. package/dist/pattern.js +0 -239
  679. package/dist/pattern.js.map +0 -1
  680. package/dist/peer.d.ts +0 -17
  681. package/dist/peer.d.ts.map +0 -1
  682. package/dist/peer.js +0 -50
  683. package/dist/peer.js.map +0 -1
  684. package/dist/plugin.d.ts +0 -228
  685. package/dist/plugin.d.ts.map +0 -1
  686. package/dist/plugin.js +0 -666
  687. package/dist/plugin.js.map +0 -1
  688. package/dist/powered-by.d.ts +0 -7
  689. package/dist/powered-by.d.ts.map +0 -1
  690. package/dist/powered-by.js +0 -11
  691. package/dist/powered-by.js.map +0 -1
  692. package/dist/pretty-json.d.ts +0 -10
  693. package/dist/pretty-json.d.ts.map +0 -1
  694. package/dist/pretty-json.js +0 -47
  695. package/dist/pretty-json.js.map +0 -1
  696. package/dist/producer-stream.d.ts +0 -47
  697. package/dist/producer-stream.d.ts.map +0 -1
  698. package/dist/producer-stream.js +0 -267
  699. package/dist/producer-stream.js.map +0 -1
  700. package/dist/proxy.d.ts +0 -90
  701. package/dist/proxy.d.ts.map +0 -1
  702. package/dist/proxy.js +0 -274
  703. package/dist/proxy.js.map +0 -1
  704. package/dist/python-type-emitter.d.ts +0 -24
  705. package/dist/python-type-emitter.d.ts.map +0 -1
  706. package/dist/python-type-emitter.js +0 -157
  707. package/dist/python-type-emitter.js.map +0 -1
  708. package/dist/realtime/bus.d.ts.map +0 -1
  709. package/dist/realtime/bus.js.map +0 -1
  710. package/dist/realtime/register.d.ts +0 -3
  711. package/dist/realtime/register.d.ts.map +0 -1
  712. package/dist/realtime/register.js +0 -10
  713. package/dist/realtime/register.js.map +0 -1
  714. package/dist/realtime/route.d.ts.map +0 -1
  715. package/dist/realtime/route.js.map +0 -1
  716. package/dist/realtime/server.d.ts.map +0 -1
  717. package/dist/realtime/server.js.map +0 -1
  718. package/dist/request-id.d.ts +0 -19
  719. package/dist/request-id.d.ts.map +0 -1
  720. package/dist/request-id.js +0 -16
  721. package/dist/request-id.js.map +0 -1
  722. package/dist/request-limits.d.ts +0 -3
  723. package/dist/request-limits.d.ts.map +0 -1
  724. package/dist/request-limits.js +0 -3
  725. package/dist/request-limits.js.map +0 -1
  726. package/dist/request-path.d.ts +0 -33
  727. package/dist/request-path.d.ts.map +0 -1
  728. package/dist/request-path.js +0 -178
  729. package/dist/request-path.js.map +0 -1
  730. package/dist/request-to-curl.d.ts +0 -15
  731. package/dist/request-to-curl.d.ts.map +0 -1
  732. package/dist/request-to-curl.js +0 -48
  733. package/dist/request-to-curl.js.map +0 -1
  734. package/dist/response.d.ts +0 -86
  735. package/dist/response.d.ts.map +0 -1
  736. package/dist/response.js +0 -313
  737. package/dist/response.js.map +0 -1
  738. package/dist/rust-type-emitter.d.ts +0 -44
  739. package/dist/rust-type-emitter.d.ts.map +0 -1
  740. package/dist/rust-type-emitter.js +0 -463
  741. package/dist/rust-type-emitter.js.map +0 -1
  742. package/dist/secure-headers.d.ts +0 -16
  743. package/dist/secure-headers.d.ts.map +0 -1
  744. package/dist/secure-headers.js +0 -53
  745. package/dist/secure-headers.js.map +0 -1
  746. package/dist/serve-register.d.ts +0 -6
  747. package/dist/serve-register.d.ts.map +0 -1
  748. package/dist/serve-register.js +0 -9
  749. package/dist/serve-register.js.map +0 -1
  750. package/dist/serve-slot.d.ts +0 -9
  751. package/dist/serve-slot.d.ts.map +0 -1
  752. package/dist/serve-slot.js +0 -52
  753. package/dist/serve-slot.js.map +0 -1
  754. package/dist/serve.d.ts +0 -38
  755. package/dist/serve.d.ts.map +0 -1
  756. package/dist/serve.js +0 -157
  757. package/dist/serve.js.map +0 -1
  758. package/dist/server-timing.d.ts +0 -9
  759. package/dist/server-timing.d.ts.map +0 -1
  760. package/dist/server-timing.js +0 -51
  761. package/dist/server-timing.js.map +0 -1
  762. package/dist/static.d.ts +0 -21
  763. package/dist/static.d.ts.map +0 -1
  764. package/dist/static.js +0 -102
  765. package/dist/static.js.map +0 -1
  766. package/dist/telemetry/otel.d.ts.map +0 -1
  767. package/dist/telemetry/otel.js.map +0 -1
  768. package/dist/testing.d.ts +0 -36
  769. package/dist/testing.d.ts.map +0 -1
  770. package/dist/testing.js +0 -124
  771. package/dist/testing.js.map +0 -1
  772. package/dist/timeout.d.ts +0 -13
  773. package/dist/timeout.d.ts.map +0 -1
  774. package/dist/timeout.js +0 -36
  775. package/dist/timeout.js.map +0 -1
  776. package/dist/tree.d.ts +0 -193
  777. package/dist/tree.d.ts.map +0 -1
  778. package/dist/tree.js +0 -437
  779. package/dist/tree.js.map +0 -1
  780. package/dist/trust.d.ts +0 -21
  781. package/dist/trust.d.ts.map +0 -1
  782. package/dist/trust.js +0 -100
  783. package/dist/trust.js.map +0 -1
  784. package/dist/ts-type-emitter.d.ts +0 -8
  785. package/dist/ts-type-emitter.d.ts.map +0 -1
  786. package/dist/ts-type-emitter.js +0 -150
  787. package/dist/ts-type-emitter.js.map +0 -1
  788. package/dist/type-emitter.d.ts +0 -36
  789. package/dist/type-emitter.d.ts.map +0 -1
  790. package/dist/type-emitter.js +0 -729
  791. package/dist/type-emitter.js.map +0 -1
  792. package/dist/type-extractor.d.ts +0 -43
  793. package/dist/type-extractor.d.ts.map +0 -1
  794. package/dist/type-extractor.js +0 -819
  795. package/dist/type-extractor.js.map +0 -1
  796. package/dist/types.d.ts +0 -467
  797. package/dist/types.d.ts.map +0 -1
  798. package/dist/types.js +0 -96
  799. package/dist/types.js.map +0 -1
  800. package/dist/validation.d.ts +0 -31
  801. package/dist/validation.d.ts.map +0 -1
  802. package/dist/validation.js +0 -335
  803. package/dist/validation.js.map +0 -1
  804. package/dist/with-headers.d.ts +0 -15
  805. package/dist/with-headers.d.ts.map +0 -1
  806. package/dist/with-headers.js +0 -45
  807. package/dist/with-headers.js.map +0 -1
  808. package/dist/ws/bun.d.ts.map +0 -1
  809. package/dist/ws/bun.js.map +0 -1
  810. package/dist/ws/cloudflare.d.ts.map +0 -1
  811. package/dist/ws/cloudflare.js.map +0 -1
  812. package/dist/ws/deno.d.ts +0 -13
  813. package/dist/ws/deno.d.ts.map +0 -1
  814. package/dist/ws/deno.js +0 -133
  815. package/dist/ws/deno.js.map +0 -1
  816. package/dist/ws/node.d.ts.map +0 -1
  817. package/dist/ws/node.js.map +0 -1
  818. package/dist/ws/session.d.ts.map +0 -1
  819. package/dist/ws/session.js.map +0 -1
  820. package/dist/ws/shared.d.ts.map +0 -1
  821. package/dist/ws/shared.js.map +0 -1
  822. package/dist/ws-origin.d.ts +0 -20
  823. package/dist/ws-origin.d.ts.map +0 -1
  824. package/dist/ws-origin.js +0 -41
  825. package/dist/ws-origin.js.map +0 -1
  826. package/dist/yaml.d.ts +0 -18
  827. package/dist/yaml.d.ts.map +0 -1
  828. package/dist/yaml.js +0 -101
  829. package/dist/yaml.js.map +0 -1
  830. package/docs/api-ref/go.md +0 -399
  831. package/docs/api-ref/python.md +0 -399
  832. package/docs/api-ref/rust.md +0 -399
  833. package/docs/api-ref/typescript.md +0 -399
  834. package/docs/invalidate-spec.md +0 -333
  835. package/docs/meta-spec.md +0 -555
  836. package/docs/packaging.md +0 -104
  837. package/docs/regression-matrix/README.md +0 -32
  838. package/docs/regression-matrix/review.md +0 -44
  839. package/docs/regression-matrix/ws1-3.md +0 -97
  840. package/docs/regression-matrix/ws4-8.md +0 -107
  841. package/docs/regression-matrix/ws9-12.md +0 -266
  842. package/docs/sdk.md +0 -798
  843. package/src/accepts.ts +0 -136
  844. package/src/body-kind.ts +0 -67
  845. package/src/body-limit.ts +0 -152
  846. package/src/build/index.ts +0 -217
  847. package/src/cli-args.ts +0 -123
  848. package/src/cli-go/auth.go +0 -26
  849. package/src/cli-go/config.go +0 -192
  850. package/src/cli-go/errors.go +0 -75
  851. package/src/cli-go/multipart.go +0 -79
  852. package/src/cli-go/output.go +0 -163
  853. package/src/cli-go/root.go +0 -30
  854. package/src/cli-go/stream.go +0 -88
  855. package/src/cli-go/version.go +0 -5
  856. package/src/cli.ts +0 -209
  857. package/src/client/defaults.ts +0 -47
  858. package/src/client/error.ts +0 -82
  859. package/src/client/http.ts +0 -737
  860. package/src/client/index.ts +0 -157
  861. package/src/client/path.ts +0 -169
  862. package/src/client/redirect-policy.ts +0 -19
  863. package/src/client/sdk.ts +0 -351
  864. package/src/client/sse.ts +0 -128
  865. package/src/client/types.ts +0 -206
  866. package/src/client/ws.ts +0 -149
  867. package/src/client-go/errors.go +0 -236
  868. package/src/client-go/export.go +0 -44
  869. package/src/client-go/invalidation.go +0 -371
  870. package/src/client-go/nullable.go +0 -62
  871. package/src/client-go/realtime.go +0 -354
  872. package/src/client-go/result.go +0 -20
  873. package/src/client-go/runtime.go +0 -975
  874. package/src/client-go/sse.go +0 -159
  875. package/src/client-go/transport.go +0 -495
  876. package/src/client-go/ws.go +0 -128
  877. package/src/client-info.ts +0 -79
  878. package/src/client-mcp/README.md +0 -10
  879. package/src/client-mcp/server.ts +0 -221
  880. package/src/client-mcp/types.ts +0 -19
  881. package/src/client-python/_errors.py +0 -115
  882. package/src/client-python/_invalidation.py +0 -494
  883. package/src/client-python/_realtime.py +0 -179
  884. package/src/client-python/_runtime.py +0 -860
  885. package/src/client-python/_sse.py +0 -155
  886. package/src/client-python/_transport.py +0 -366
  887. package/src/client-python/_ws.py +0 -159
  888. package/src/client-python/py.typed +0 -0
  889. package/src/client-rust/errors.rs +0 -220
  890. package/src/client-rust/invalidation.rs +0 -412
  891. package/src/client-rust/invalidation_sync.rs +0 -93
  892. package/src/client-rust/nullable.rs +0 -17
  893. package/src/client-rust/realtime.rs +0 -702
  894. package/src/client-rust/result.rs +0 -22
  895. package/src/client-rust/runtime.rs +0 -980
  896. package/src/client-rust/runtime_sync.rs +0 -484
  897. package/src/client-rust/sse.rs +0 -188
  898. package/src/client-rust/ws.rs +0 -167
  899. package/src/codegen-go-cli.ts +0 -1066
  900. package/src/codegen-go.ts +0 -970
  901. package/src/codegen-hash.ts +0 -8
  902. package/src/codegen-ir.ts +0 -812
  903. package/src/codegen-lang.ts +0 -517
  904. package/src/codegen-load.ts +0 -150
  905. package/src/codegen-loaders.ts +0 -50
  906. package/src/codegen-mcp.ts +0 -445
  907. package/src/codegen-python.ts +0 -916
  908. package/src/codegen-route-tree-intern.ts +0 -198
  909. package/src/codegen-rust.ts +0 -1402
  910. package/src/codegen-sanitize.ts +0 -57
  911. package/src/codegen-schema-naming.ts +0 -165
  912. package/src/codegen-sdk-model.ts +0 -228
  913. package/src/codegen.ts +0 -5089
  914. package/src/context.ts +0 -325
  915. package/src/cookie-sign.ts +0 -119
  916. package/src/cookie.ts +0 -143
  917. package/src/cors.ts +0 -95
  918. package/src/crypto.ts +0 -38
  919. package/src/csrf.ts +0 -86
  920. package/src/curl-logger.ts +0 -258
  921. package/src/detect-runtime.ts +0 -17
  922. package/src/dict.ts +0 -12
  923. package/src/error.ts +0 -55
  924. package/src/errors.ts +0 -85
  925. package/src/etag.ts +0 -97
  926. package/src/feature-detect.ts +0 -147
  927. package/src/feature-load.ts +0 -23
  928. package/src/feature-slots.ts +0 -70
  929. package/src/fetch-request.ts +0 -13
  930. package/src/gen-process.ts +0 -42
  931. package/src/gen-write.ts +0 -127
  932. package/src/glob.ts +0 -109
  933. package/src/go-type-emitter.ts +0 -660
  934. package/src/honey-response.ts +0 -379
  935. package/src/i18n-slot.ts +0 -30
  936. package/src/i18n.ts +0 -300
  937. package/src/index.ts +0 -3829
  938. package/src/init.ts +0 -161
  939. package/src/input.ts +0 -8
  940. package/src/invalidate-check.ts +0 -205
  941. package/src/invoke-user.ts +0 -95
  942. package/src/ip-restrict.ts +0 -79
  943. package/src/ip.ts +0 -194
  944. package/src/logger.ts +0 -178
  945. package/src/media-type.ts +0 -104
  946. package/src/meta-spec-merge.ts +0 -80
  947. package/src/meta-spec.ts +0 -718
  948. package/src/middleware.ts +0 -331
  949. package/src/node-request.ts +0 -431
  950. package/src/node.ts +0 -454
  951. package/src/openapi/collect.ts +0 -50
  952. package/src/openapi/docs-page.ts +0 -89
  953. package/src/openapi/document.ts +0 -893
  954. package/src/openapi/json-schema-slot.ts +0 -53
  955. package/src/openapi/register.ts +0 -23
  956. package/src/openapi/scalar.ts +0 -34
  957. package/src/openapi/serve.ts +0 -39
  958. package/src/openapi/spec-factory.ts +0 -100
  959. package/src/openapi/spec.ts +0 -74
  960. package/src/openapi/swagger.ts +0 -35
  961. package/src/pattern.ts +0 -245
  962. package/src/peer.ts +0 -53
  963. package/src/plugin.ts +0 -864
  964. package/src/powered-by.ts +0 -18
  965. package/src/pretty-json.ts +0 -56
  966. package/src/producer-stream.ts +0 -296
  967. package/src/proxy.ts +0 -370
  968. package/src/python-type-emitter.ts +0 -181
  969. package/src/realtime/bus.ts +0 -140
  970. package/src/realtime/register.ts +0 -13
  971. package/src/realtime/route.ts +0 -153
  972. package/src/realtime/server.ts +0 -298
  973. package/src/request-id.ts +0 -32
  974. package/src/request-limits.ts +0 -2
  975. package/src/request-path.ts +0 -165
  976. package/src/request-to-curl.ts +0 -52
  977. package/src/response.ts +0 -411
  978. package/src/rust-type-emitter.ts +0 -548
  979. package/src/secure-headers.ts +0 -74
  980. package/src/serve-register.ts +0 -12
  981. package/src/serve-slot.ts +0 -58
  982. package/src/serve.ts +0 -220
  983. package/src/server-timing.ts +0 -71
  984. package/src/static.ts +0 -112
  985. package/src/telemetry/otel.ts +0 -156
  986. package/src/testing.ts +0 -167
  987. package/src/timeout.ts +0 -45
  988. package/src/tree.ts +0 -554
  989. package/src/trust.ts +0 -117
  990. package/src/ts-type-emitter.ts +0 -168
  991. package/src/type-emitter.ts +0 -760
  992. package/src/type-extractor.ts +0 -855
  993. package/src/types.ts +0 -756
  994. package/src/validation.ts +0 -413
  995. package/src/with-headers.ts +0 -45
  996. package/src/ws/bun.ts +0 -120
  997. package/src/ws/cloudflare.ts +0 -192
  998. package/src/ws/deno.ts +0 -188
  999. package/src/ws/node.ts +0 -240
  1000. package/src/ws/session.ts +0 -73
  1001. package/src/ws/shared.ts +0 -140
  1002. package/src/ws-origin.ts +0 -53
  1003. package/src/yaml.ts +0 -103
package/docs/meta-spec.md DELETED
@@ -1,555 +0,0 @@
1
- # `.metaSpec()` — declarative control over what reaches the OpenAPI document
2
-
3
- Status: implemented in `@lovrozagar/honey` (tree of record: `packages/core`).
4
-
5
- ## 1. The problem
6
-
7
- Before this feature, `generateOpenApi` mapped route meta onto the operation object with a
8
- hardcoded allowlist of eight fields:
9
-
10
- <!-- snippet:skip -->
11
-
12
- ```ts
13
- summary, description, tags, deprecated, operationId, security, invalidate → x-invalidate, mcp → x-mcp
14
- ```
15
-
16
- Everything else on `.meta()` was **silently discarded**. That has three consequences:
17
-
18
- 1. **Facts the framework already knows never leave the process.** An app that classifies every
19
- route by rate-limit category, permission set, or tenancy carries those facts on route meta and
20
- the document never sees them. Downstream consumers (SDK codegen, gateways, contract testers such
21
- as [`oat`](https://github.com/lovrozagar/oat)) then re-derive them by heuristic, or don't run the
22
- check at all.
23
- 2. **Hiding is accidental, not deliberate.** Fields that _must not_ be published — a captcha
24
- provider, a test-bypass surface, internal worker routing — were protected only because the
25
- allowlist happened not to know about them. Nothing recorded the intent.
26
- 3. **Rot is silent.** Adding a field to the app's meta type produced no signal anywhere. The
27
- default outcome of growth was "dropped".
28
-
29
- `.metaSpec()` replaces the allowlist with a **declarative, total, per-document policy**.
30
-
31
- ## 2. Public API
32
-
33
- ```ts
34
- honey<Env>()
35
- .meta<HoneyMeta<AppRouteMeta>>()
36
- .metaSpec({
37
- strict: "error",
38
-
39
- meta: {
40
- permissions: "x-permissions",
41
- rateLimit: { key: "x-rate-limit", map: (v) => ({ category: v, rps: RPS[v] }) },
42
- summary: { key: "summary" },
43
- worker: false,
44
- captcha: false,
45
- },
46
-
47
- schema: {
48
- entity: {
49
- from: ["output"],
50
- search: "deep",
51
- expand: (e) => ({
52
- "x-entity": e.table,
53
- "x-generated": e.generated,
54
- "x-immutable": e.immutable,
55
- "x-soft-delete": e.softDelete ? { field: e.softDelete } : undefined,
56
- }),
57
- },
58
- },
59
-
60
- profiles: {
61
- // default-deny: a tag added tomorrow is absent here until someone opts it in
62
- public: { include: ["x-entity", "x-query"] },
63
- },
64
- })
65
- ```
66
-
67
- honey does not own the shape of `e` above. The descriptor is a contract between whatever stamps the
68
- schema (an ORM, a DTO layer) and the app's policy block; honey only carries it. Agree those field
69
- names once, on the publisher's side, before either end writes code against them.
70
-
71
- ### 2.1 Entry forms
72
-
73
- A policy entry describes one **source key** (a meta key, or a key read off a schema) and what it
74
- contributes to the operation object.
75
-
76
- | Form | Meaning |
77
- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
78
- | `false` | **Hidden.** Never emitted, in any profile. Explicit and greppable. |
79
- | `"x-foo"` / `"summary"` | **Verbatim.** The source value is written to that operation key unchanged. |
80
- | `{ key, map?, schema?, on?, profiles? }` | **Single target.** `map` transforms the value; returning `undefined` omits it for that route. |
81
- | `{ expand, schema?, on?, profiles? }` | **Fan-out.** Returns a record of operation keys → values; `undefined` values and an `undefined` return omit. |
82
-
83
- Common options:
84
-
85
- - `on?: "http" | "ws" | "both"` — which operation kinds the entry applies to. Default `"both"`.
86
- - `profiles?: readonly string[]` — restrict the entry to named documents. Default: every profile.
87
- - `schema?: StandardSchemaLike` — validates the produced value (see §6).
88
-
89
- `map` / `expand` receive `(value, ctx)` where `ctx` is `{ method, path, meta, profile, source }`.
90
-
91
- ### 2.2 Target keys
92
-
93
- An entry may target:
94
-
95
- - any **extension** key matching `x-*`, or
96
- - one of the **standard operation fields** honey allows a policy to set:
97
- `summary`, `description`, `tags`, `deprecated`, `operationId`, `security`, `externalDocs`,
98
- `servers`.
99
-
100
- `responses`, `parameters`, `requestBody` and `callbacks` are **reserved** — they are derived from
101
- schemas and error keys, and a policy that wrote them would produce a document that contradicts the
102
- route. Targeting them is a build error. Any other non-`x-` key is a build error too (it would be
103
- dropped by spec-conformant readers, which is the failure mode this feature exists to remove).
104
-
105
- ### 2.3 Schema-derived facts
106
-
107
- The `schema` section is keyed by **the entry's own name**. `read` says which schema-metadata key it
108
- reads, defaulting to that name. Sources:
109
-
110
- ```
111
- "output" | "input.json" | "input.search" | "input.form" | "input.headers" | "input.cookies"
112
- ```
113
-
114
- `from` defaults to all of them, in that order; the first source that carries the key wins.
115
- `"output"` reads the JSON output schema of the lowest declared 2xx status.
116
-
117
- `search` decides how deeply to look:
118
-
119
- | `search` | Behavior |
120
- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
121
- | `"root"` (default) | the schema root, seeing through one level of `items` so a bare `array<Entity>` list output still finds the descriptor stamped on the item |
122
- | `"deep"` | walks `properties`, `items` and composition members breadth-first (max depth 6) and takes the **shallowest** match — for envelope shapes like `{ articles: [Article], count, hasMore, nextCursor }` |
123
-
124
- A deep search that finds two _different_ values at the same depth is a build error
125
- (`AMBIGUOUS_SCHEMA_KEY`), not a guess. The same descriptor reached by several paths is fine.
126
-
127
- Reading is vendor-neutral: honey converts the schema to JSON Schema (it already does, for the
128
- request/response bodies) and reads app keys off the **root** of that JSON Schema. For Zod that is
129
- exactly what `.meta({ … })` produces, so an ORM that stamps a descriptor onto the schema it already
130
- uses to parse the request gets the extension for free — and the tag cannot drift from runtime
131
- behavior, because both read the same object.
132
-
133
- One schema key routinely fans out to several extensions, which is why `expand` exists.
134
-
135
- #### One reserved key carrying a union
136
-
137
- A publisher with more than one kind of fact does not want more than one collision surface, so the
138
- mature shape is a single reserved key holding a discriminated union with a version field —
139
- [comb](https://github.com/lovrozagar/comb) stamps `x-comb` with `{ v, kind: "entity" | "query", … }`.
140
- The two members arrive on _different schemas of the same operation_: the entity descriptor on the
141
- response, the query descriptor on the search input.
142
-
143
- `read` plus `match` expresses that. Several entries read one key and are told apart by the union's
144
- discriminant:
145
-
146
- <!-- snippet:skip -->
147
-
148
- ```ts
149
- schema: {
150
- entityFacts: {
151
- read: "x-comb",
152
- match: { kind: "entity" },
153
- version: { max: 1 },
154
- from: ["output"],
155
- search: "deep",
156
- expand: (e) => ({
157
- "x-entity": e.name,
158
- "x-identity": e.identity,
159
- "x-soft-delete": e.softDelete ?? undefined,
160
- "x-tenant-column": e.tenantColumn ?? undefined,
161
- }),
162
- },
163
- queryFacts: {
164
- read: "x-comb",
165
- match: { kind: "query" },
166
- version: { max: 1 },
167
- from: ["input.search"],
168
- expand: (q) => ({
169
- "x-query": { filter: q.filterable, sort: q.sortable, maxLimit: q.maxLimit },
170
- "x-searchable": q.searchable ?? undefined,
171
- }),
172
- },
173
- }
174
- ```
175
-
176
- Resolution rules:
177
-
178
- - Sources are walked in `from` order. A descriptor that fails `match` **does not end the walk** —
179
- an entity entry must be free to step past the query descriptor when both entries search every
180
- source.
181
- - If no source yields a match but a descriptor _was_ found under `read`, that is a build error
182
- (`DESCRIPTOR_MISMATCH`). A stamped fact nobody claimed is a misconfigured policy, not an absent
183
- fact, and silently emitting nothing is how the gaps this feature exists to close came about.
184
- - `version` is checked **before** `match`, because a newer contract may have redefined the
185
- discriminant itself. A descriptor newer than `max`, or carrying no integer version when a guard
186
- is declared, fails the build (`UNSUPPORTED_VERSION`) rather than emitting a partly-understood tag.
187
-
188
- honey does not own the version number — it is the publisher's contract, and `max` is the app's
189
- statement of which contract its `expand` was written against. Bumping the publisher then becomes a
190
- build failure with a name, instead of tags that quietly change shape.
191
-
192
- The alternatives were an array of entries under one key, and per-source matches that each run
193
- `expand`. The array makes the policy value irregular (`entry | entry[]`) and leaves the two
194
- contributions unnamed, which costs diagnostics — `schema."x-comb"[0]` reads worse than
195
- `schema."entityFacts"`. Per-source matching would force one `expand` to handle every member of the
196
- union and to de-duplicate its own target keys, moving work into app code that the policy layer
197
- already does. Naming entries keeps one entry to one contribution, which is what the rest of the
198
- design assumes.
199
-
200
- > **Deliberate limit.** Deriving operation metadata from _schemas and table definitions_ is safe:
201
- > they are a separate, hand-reviewed layer, and a handler can still fail to honor them — which is
202
- > precisely the finding a contract tester should report. Deriving it from _observed handler
203
- > behavior_ is not safe: it makes the document a mirror of the implementation and the tester
204
- > self-confirming. honey has no record-from-runtime mode, and if one is ever added its output must
205
- > land in a committed, reviewable artifact rather than being regenerated at test time.
206
-
207
- ### 2.4 Profiles (multi-document)
208
-
209
- <!-- snippet:skip -->
210
-
211
- ```ts
212
- profiles: {
213
- public: { include: ["x-entity", "x-query"] }, // default-deny — preferred
214
- partner: { include: ["x-entity", "x-query", "x-cost"] },
215
- staging: { exclude: ["x-rate-limit"] }, // denylist — internal documents only
216
- }
217
- ```
218
-
219
- - Profile filters operate on **emitted keys**, not source keys.
220
- - `include` is an allowlist of `x-*` keys (standard fields are always kept unless excluded);
221
- `exclude` is a denylist; with both, `include` applies first. Both also filter `meta.extensions`,
222
- so the escape hatch cannot route around a profile.
223
- - The implicit profile `"default"` filters nothing.
224
-
225
- **Use `include` for a public document.** `exclude` is a denylist: a tag introduced next month is
226
- published unless someone remembers to add it, and the failure mode is a leak. `include` is
227
- default-deny, which is the posture a security boundary wants — the same posture `false` already
228
- takes on individual keys. Reach for `exclude` only when the document is internal and the list of
229
- things to withhold is genuinely shorter than the list to publish.
230
-
231
- - A document selects a profile:
232
-
233
- <!-- snippet:skip -->
234
-
235
- ```ts
236
- codegen: {
237
- openApi: [
238
- { path: "src/_gen/openapi.internal.json", title: "…", version: "1.0.0" },
239
- { path: "src/_gen/openapi.public.json", title: "…", version: "1.0.0", profile: "public" },
240
- ],
241
- }
242
- ```
243
-
244
- `generateOpenApi(app, { …, profile: "public" })` is the programmatic form.
245
-
246
- **Why document-level filtering rather than per-entry visibility as the primary model:** the
247
- question a reviewer asks is "what is in the public document?" — that must be answerable by reading
248
- one block, not by grepping forty entries for a visibility flag. Per-entry `profiles` remains
249
- available for the inverse case ("this entry exists only for the internal document"), and `false`
250
- covers "never, anywhere".
251
-
252
- ### 2.5 Escape hatch
253
-
254
- `OpenApiMeta` now carries:
255
-
256
- <!-- snippet:skip -->
257
-
258
- ```ts
259
- extensions?: Record<`x-${string}`, unknown>
260
- ```
261
-
262
- emitted verbatim, at the highest precedence, and still subject to profile filtering. Runtime
263
- enforces the same contract the type states: only `x-*` keys are accepted, and anything else is an
264
- `UNKNOWN_FIELD` build error. Because passthrough outranks every policy entry and is untyped inside
265
- a `.meta()` call, letting it reach a standard field would let a stray key silently replace a
266
- route's own `summary`. It exists so a
267
- consumer that gains a tag before honey's policy is updated is not blocked. It is deliberately
268
- secondary: raw passthrough spreads stringly-typed keys across call sites, has no public/private
269
- separation, and fails on nothing.
270
-
271
- ## 2.6 Middleware-contributed meta
272
-
273
- A fact enforced by middleware should not be retyped on every route it protects. Middleware can
274
- contribute meta to every route that mounts it:
275
-
276
- <!-- snippet:skip -->
277
-
278
- ```ts
279
- export const shard = createMiddleware(fn, { meta: { tenant: "project_id" } })
280
- // or: defineMiddleware({ fn, errors: […], meta: { tenant: "project_id" } })
281
-
282
- app.use(shard) // every route on the chain
283
- app.use("/orgs", shard) // every route under a prefix
284
- app.get("/x").use(shard).handler(…) // one route
285
- ```
286
-
287
- One line, every route the middleware covers, and the tag cannot disagree with the code that
288
- enforces it — a hand-written `tenant` on 104 routes can, and a wrong one is worse than a missing
289
- one, because it makes a consumer confident about the wrong parameter.
290
-
291
- Rules:
292
-
293
- - **Explicit always wins.** Chain `.meta()` and route `.meta()` both outrank a contributed value.
294
- Among middleware, the one that runs later wins: chain, then scoped, then route level.
295
- - **Contributed meta is real meta.** It lands in the route's `mt`, so it appears on `ctx.meta`, in
296
- the manifest, and — critically — it is subject to the policy. A middleware cannot smuggle an
297
- untagged fact into the document: with `strict: "error"`, contributing `sla` with no policy entry
298
- fails the build exactly as writing it on a route would.
299
- - **A scoped middleware registered after its routes still reaches them.** Meta is resolved from
300
- the chain each route runs when the app finalizes, so registration order does not matter, and a
301
- route mounted with `.route(sub)` gets the meta of the chain it is mounted on. A tag missing where
302
- enforcement happens is the failure direction that matters.
303
- - **`internal` may not be contributed.** It controls whether a route appears in generated artifacts
304
- at all; a middleware that removed 104 routes from the document would be invisible in both the
305
- route and the middleware. `createMiddleware` throws.
306
-
307
- ### Why it is resolved at finalize, not per request
308
-
309
- Contributed meta is collected once, when the app finalizes (first request, `toRouteTree()` or
310
- codegen), from the same resolved chain the route runs — so the request path, `ctx.meta`, the
311
- manifest and the document cannot disagree, with or without a loaded route tree. A lazily-derived
312
- value per request would make the served meta depend on timing. The generated `routes.gen.ts` carries
313
- the meta of the generating build; change what a middleware contributes, then regenerate.
314
-
315
- ### Two things to put in a release note
316
-
317
- - **Adding a middleware can break a build.** Contributed meta is subject to totality, so mounting a
318
- middleware that contributes `tenant` fails the build of any app whose policy has no `tenant`
319
- entry — an app that never touched its own meta type. That is the correct trade (explicit beats
320
- silent) but it is a surprising blast radius for what looks like a local change.
321
- - The tap interaction below.
322
-
323
- ### One runtime interaction to know about
324
-
325
- Meta-driven taps fire for every registered tap key found on a route's meta. A middleware
326
- contributing `tenant` will therefore start firing an `app.tap("tenant", …)` handler on every route
327
- it covers. That is coherent — "run this for every tenant-scoped route" is what meta-driven taps are
328
- for — but it is a behavior change triggered from a distance, so it is worth grepping for tap keys
329
- that collide with meta keys a middleware contributes.
330
-
331
- ## 2.7 `undefined` omits, `null` is emitted
332
-
333
- `map` returning `undefined`, an `undefined` value inside an `expand` record, and a source key absent
334
- from meta all mean **omit**. `null` is a value and is **emitted verbatim**.
335
-
336
- The difference is load-bearing whenever a publisher stamps facts it cannot always know. A schema
337
- stamped with `searchable: null` or `tenantColumn: null` means _"I don't know"_, but passing that
338
- straight through publishes `"x-searchable": null`, which a consumer reads as _"nothing is
339
- searchable"_ — a confident wrong answer, worse than silence. Normalize in the policy:
340
-
341
- <!-- snippet:skip -->
342
-
343
- ```ts
344
- expand: (e) => ({
345
- "x-entity": e.table,
346
- "x-searchable": e.searchable ?? undefined, // unknown → key absent
347
- "x-tenant": e.tenantColumn ? { column: e.tenantColumn } : undefined,
348
- })
349
- ```
350
-
351
- honey does not collapse `null` to omitted for you, because "explicitly nothing" is a legitimate
352
- statement that some consumers want (`"x-soft-delete": null` = _this entity definitively has no soft
353
- delete_, as distinct from _unknown_). The framework carries what the policy produces; deciding which
354
- of the two you mean is the policy's job.
355
-
356
- This composes with precedence rather than fighting it. A publisher that stamps nothing for a fact
357
- only the routing layer knows leaves the key absent at rank 1; a route-meta or middleware-contributed
358
- value at rank 2 fills it wherever it exists, and where it does not, the key is simply missing —
359
- which is the honest answer.
360
-
361
- ## 3. Precedence and merge rules
362
-
363
- Contributions are collected per operation and resolved by **rank**, highest wins:
364
-
365
- | Rank | Source |
366
- | ---- | ------------------------------------------------------------------------------ |
367
- | 3 | `meta.extensions` passthrough |
368
- | 2 | route meta entries — `spec.meta` **and** the built-in default policy, one tier |
369
- | 1 | schema-derived entries (`spec.schema`) |
370
-
371
- Rules, stated once:
372
-
373
- 1. **Route meta beats schema-derived.** The built-in mappings are route meta too, so a route's
374
- `summary` is never overwritten by a schema-derived entry. An app entry for a built-in key
375
- replaces that built-in outright (same source key, so no clash).
376
- 2. **Chain meta vs route meta is unchanged**: `.meta()` on a chain is merged into each route's meta
377
- at registration; route meta wins. The policy layer sees the already-merged object.
378
- 3. **Two entries of the same rank writing the same operation key is a build error**
379
- (`DUPLICATE_TARGET`). Within-rank shadowing is always a mistake, never a feature.
380
- 4. **Key order in the emitted document is the order of first contribution**: built-ins, then app
381
- meta, then schema-derived, then `extensions`. Precedence is resolved independently of write
382
- order, so a higher-ranked contribution overwrites a value in place and never reorders the JSON.
383
- 5. **Aliasing a standard field from a second meta key requires hiding the built-in.**
384
- `blurb: { key: "summary" }` alongside the built-in `summary` entry is a `DUPLICATE_TARGET` error;
385
- write `summary: false` to say which one owns the field.
386
- 6. `undefined` from `map`, an `undefined` value inside an `expand` record, and a source key absent
387
- from meta all mean _omit_, silently. This is the sanctioned way to write a conditional entry.
388
-
389
- ## 4. Totality
390
-
391
- **A key of the app's meta type with no policy entry is an error, not a silent drop.** This single
392
- rule is what stops the rot: adding a field to the meta type forces an emit-or-hide decision.
393
-
394
- Enforced at two levels:
395
-
396
- - **Type level.** The `meta` section is a mapped type over the app's meta type with `-?`, minus the
397
- built-in `DefaultMeta` keys (which ship with default entries and may be _optionally_ overridden).
398
- Omitting an app key is a TypeScript error at the `.metaSpec()` call site.
399
- - **Codegen level.** Any key observed on a route's meta with no entry is reported per `strict`.
400
- This catches JavaScript consumers, dynamically-assigned meta, and meta from mounted sub-apps whose
401
- types were erased.
402
-
403
- `strict` values: `"error"` (default when a `metaSpec` is declared), `"warn"`, `"off"`.
404
-
405
- **Known limit:** a _misspelled_ policy key is not rejected at the call site. `.metaSpec()` takes a
406
- generic `TSpec extends HoneyMetaSpec<TMeta>` — required to keep `Honey` from becoming invariant in
407
- `TMeta`, which would break assignability across the whole builder — and TypeScript does not
408
- excess-property-check a literal inferred as a generic. The typo is still caught, from the other
409
- side: the real key it was meant to name now has no entry, so `MISSING_ENTRY` fires for it. The
410
- misspelled entry itself is inert.
411
-
412
- Apps that never call `.metaSpec()` run with `strict: "off"` and the built-in policy only — see §7.
413
-
414
- ## 5. Error taxonomy
415
-
416
- All diagnostics are collected across the whole document and thrown as one aggregated
417
- `Error` (first 20 listed, with a count), because failing on the first of 250 operations makes
418
- migration miserable.
419
-
420
- | Code | Level | When | Why this level |
421
- | ----------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
422
- | `MISSING_ENTRY` | error (`strict:"error"`) / warn / silent | a meta key on some route has no policy entry | the rot-stopper; downgradable during migration |
423
- | `RESERVED_FIELD` | error | entry targets `responses` / `parameters` / `requestBody` / `callbacks` | would contradict schema-derived content |
424
- | `UNKNOWN_FIELD` | error | entry targets a non-`x-`, non-allowlisted field | silently ignored by readers |
425
- | `DUPLICATE_TARGET` | error | two same-rank entries write one key | ambiguous, order-dependent output |
426
- | `INVALID_VALUE` | error | entry `schema` rejects the produced value | a malformed tag is indistinguishable from a missing one downstream |
427
- | `ASYNC_VALIDATION` | error | entry `schema` validates asynchronously | codegen value resolution is synchronous |
428
- | `MAP_THREW` | error | `map` / `expand` threw | policy bugs must not produce a half-populated document |
429
- | `UNKNOWN_PROFILE` | error | a document requests a profile that is not declared | almost always a typo that would silently emit everything |
430
- | `AMBIGUOUS_SCHEMA_KEY` | error | a `search: "deep"` entry matched two different values at one depth | guessing which entity a route serves is how a tester gets told the wrong thing |
431
- | `DESCRIPTOR_MISMATCH` | error | a descriptor was found under `read` but satisfied no entry's `match` | a stamped fact nobody claimed is a misconfigured policy, not an absent fact |
432
- | `UNSUPPORTED_VERSION` | error | a descriptor is newer than the entry's `version.max`, or carries no integer version | a partly-understood tag is worse than none — the consumer cannot tell it is partial |
433
- | `SUBAPP_ENTRY_CONFLICT` | warn | a mounted sub-app's policy entry disagrees with this app's | silently dropping the sub's entry is how two documents drift without anyone noticing |
434
- | omitted value | silent | `map` returned `undefined`, or the meta key is absent | the sanctioned conditional |
435
-
436
- Every message carries `method`, `path`, source key and target key.
437
-
438
- ## 6. Validating what is emitted
439
-
440
- <!-- snippet:skip -->
441
-
442
- ```ts
443
- rateLimit: {
444
- key: "x-rate-limit",
445
- map: (v) => ({ category: v, rps: RPS[v] }),
446
- schema: z.object({ category: z.string(), rps: z.number().int().positive() }),
447
- }
448
- ```
449
-
450
- The schema validates the **produced** value (for `expand`, the produced record). It runs at codegen
451
- time only, synchronously, through Standard Schema — so any of honey's supported validators works.
452
- A failure is a build error, not a warning: shipping a tag that a consumer silently ignores is
453
- worse than not shipping it, because it looks like coverage.
454
-
455
- ## 7. Default policy and the compatibility argument
456
-
457
- When an app declares no `metaSpec`, codegen runs the **built-in policy**, which is the previous
458
- eight mappings, unchanged, with the same truthiness gates and the same emit order:
459
-
460
- | Meta key | Target | Gate | HTTP | WS |
461
- | ------------- | ---------------------------- | ---------------- | ---- | --- |
462
- | `summary` | `summary` | truthy | ✓ | ✓ |
463
- | `description` | `description` | truthy | ✓ | ✓ |
464
- | `tags` | `tags` (string → `[string]`) | truthy | ✓ | ✓ |
465
- | `deprecated` | `deprecated` | truthy | ✓ | — |
466
- | `operationId` | `operationId` | truthy | ✓ | ✓ |
467
- | `security` | `security` (normalized) | truthy | ✓ | — |
468
- | `invalidate` | `x-invalidate` | array, non-empty | ✓ | — |
469
- | `mcp` | `x-mcp` | `=== true` | ✓ | — |
470
- | `internal` | _route left out_ | `=== true` | — | — |
471
- | `extensions` | verbatim passthrough | — | ✓ | ✓ |
472
-
473
- A route with `internal: true` is left out of the served and generated OpenAPI document and the
474
- served `/manifest.json`; it still serves requests and still appears in `types.gen.d.ts`, so
475
- services can type against it. `security` must be a scheme name, a list of names, a list of name
476
- groups, or standard requirement objects — anything else fails generation instead of documenting the
477
- route as public — and every scheme it names must be in `securitySchemes`. `invalidate` selectors
478
- must name a registered route (`"GET /users/:id"`); a selector that names nothing fails generation
479
- unless the document is generated with `invalidate: "off"`.
480
-
481
- The WS column reproduces the previous WS mapping exactly (it was a strict subset). App entries
482
- default to `on: "both"`; the asymmetry is preserved only for the built-ins.
483
-
484
- Because the built-ins are compiled first and written first, and because precedence is resolved
485
- independently of write order, **a no-policy app produces a byte-identical document**. There is a
486
- test that asserts exactly this against the pre-change generator output.
487
-
488
- ## 8. Migration path (≈250 operations, 9-field meta type)
489
-
490
- Mechanical, and reversible at every step.
491
-
492
- 1. **Add `.metaSpec({ strict: "warn", meta: {} })`.** Generate. Every dropped key is now listed,
493
- once, with the routes that carry it. Nothing about the document changed.
494
- 2. **Triage the list into three buckets**: emit verbatim, emit transformed, hide. Write the entries.
495
- `false` for anything internal — `worker`, `captcha`, `proxyTimeout` — so the intent is recorded
496
- rather than implied.
497
- 3. **Add the public profile** with `exclude` for the tags that must not be published, and add the
498
- second `codegen.openApi` entry. Diff the two documents; the diff _is_ the review.
499
- 4. **Flip `strict` to `"error"`.** The mapped type now also fails the typecheck if a tenth meta
500
- field appears without a decision.
501
- 5. **Move ORM-derived facts to the `schema` section** last, once the meta-driven tags are stable.
502
- This is the step that removes per-route annotation: the descriptor the ORM already stamps on the
503
- schema fans out to `x-entity` / `x-generated` / `x-immutable` / `x-soft-delete` with no route
504
- edits at all.
505
-
506
- Steps 1–2 are per-meta-key (nine edits). Step 5 is per-entity, not per-route.
507
-
508
- ## 9. Trade-offs rejected
509
-
510
- - **Flat spec object (`.metaSpec({ permissions: "x-permissions" })`) as the only form.** Reads well
511
- until profiles, schema sources and `strict` need a home, and then every one of them collides with
512
- a possible meta key name. Sections cost one nesting level and buy an unambiguous namespace.
513
- - **Per-entry visibility (`visible: ["internal"]`) as the primary profile model.** Rejected as the
514
- primary: it distributes the answer to "what does the public document contain" across the whole
515
- policy. Kept as a secondary `profiles` option on entries.
516
- - **Post-hoc stripping only** (the existing `sanitize.stripXExtensions`). It works, but it is a
517
- denylist applied after the fact: a tag added later is published by default, and the failure mode
518
- is a leak. Kept for spec-level surgery; not the mechanism for public/private separation.
519
- - **A honey-side vocabulary of blessed tags** (`x-entity`, `x-tenant`, …). Rejected outright:
520
- binding a framework to one consumer's tag set is how vendor lock-in starts. honey controls
521
- _emission_; the vocabulary is the app's.
522
- - **Deriving policy from a config file rather than the app builder.** The policy must be typed
523
- against the app's meta type, which only exists in the app's own module graph.
524
- - **Runtime enforcement.** Everything here is codegen-time. `.metaSpec()` stores one object on the
525
- route graph and is never consulted on a request.
526
-
527
- ## 10. Composition
528
-
529
- `.metaSpec()` is app-global: one policy object on the route graph. Mounting a sub-app merges that
530
- object into the parent. Each app's _own_ document still uses only that app's policy — the merge
531
- writes the parent, never the sub — so a worker that hides a field keeps hiding it in the document
532
- it generates itself, regardless of what it is later mounted into.
533
-
534
- In the **aggregate** document the parent wins on conflict, with one exception. A sub-app entry of
535
- `false` hides the key in the aggregate too. Hiding is a safety claim: a worker that declares a
536
- field unpublishable must not have the gateway publish it. Wrongly hidden is a visible gap; wrongly
537
- published is a leak.
538
-
539
- Every other disagreement — two different target keys, two different `map` functions, two different
540
- schema or profile entries — keeps the parent's entry and reports `SUBAPP_ENTRY_CONFLICT` at
541
- codegen. The sub-app's own document is unaffected. Identical entries (the common case: five
542
- workers and a gateway importing one policy from a shared package) are not a conflict.
543
-
544
- There is no per-mount override and no way for a worker to _widen_ a gateway entry. If that is the
545
- shape you want, generate the worker's document from the worker, not from the gateway.
546
-
547
- ## 11. Open questions
548
-
549
- - **Profile inheritance.** Profiles are flat. If real apps grow four or five documents, `extends`
550
- will be wanted.
551
- - **Fan-out from a schema key into `parameters`.** `x-query` describes sortable/filterable columns
552
- and duplicates information that could, in principle, be emitted as real query parameters. Both are
553
- useful to different consumers; honey emits the extension and leaves parameters to the schema.
554
- - **Component-level policy.** Nothing yet maps schema meta onto `components.schemas` entries, only
555
- onto operations.
package/docs/packaging.md DELETED
@@ -1,104 +0,0 @@
1
- # Packaging — why honey ships source, declarations and JavaScript
2
-
3
- ## The problem
4
-
5
- honey shipped raw TypeScript: `"files": ["docs", "src"]`, and every `exports` subpath pointed at
6
- `./src/*.ts`. That is pleasant for us and hostile to a consumer, because **a package that ships
7
- `.ts` inherits the consumer's compiler flags**. There is no per-directory suppression for `.ts`
8
- under `node_modules`, and `skipLibCheck` does not help — it covers `.d.ts` only.
9
-
10
- Measured against the real published tarball, from a fixture with every plausible strictness flag on:
11
-
12
- ```
13
- 522 diagnostics originate inside @lovrozagar/honey
14
-
15
- 358 TS4111 Property 'x' comes from an index signature, must be accessed with ['x']
16
- 81 TS5097 An import path can only end with '.ts' when allowImportingTsExtensions is enabled
17
- 27 TS18048 'x' is possibly 'undefined'
18
- 22 TS2379 argument not assignable under exactOptionalPropertyTypes
19
- …
20
- ```
21
-
22
- A downstream app reported 482 under its own flag set. Same wall, different height.
23
-
24
- ## Why "just fix the source" was not enough
25
-
26
- The obvious answer is to make our source satisfy those flags — `@lovrozagar/comb` ships raw `src`
27
- and produces zero errors in the same app, so it is demonstrably possible. Two things ruled it out:
28
-
29
- 1. **TS5097 is not a style problem.** 81 of the diagnostics say the consumer must enable
30
- `allowImportingTsExtensions`, which in turn requires `noEmit` or `emitDeclarationOnly` — we would
31
- be dictating a consumer's build configuration. No amount of tidying our own source removes that;
32
- it is inherent to importing `.ts` paths with extensions.
33
- 2. **The flag set is unbounded.** Fixing 522 errors buys immunity to _today's_ flags. Tomorrow a
34
- consumer enables something that does not exist yet, and we are back here. `skipLibCheck` over
35
- `.d.ts` is a real, permanent boundary; matching an open set of lint flags is a treadmill.
36
-
37
- ## What we do instead
38
-
39
- Ship source, declarations _and_ compiled JavaScript, and split the conditions:
40
-
41
- ```json
42
- "exports": {
43
- ".": {
44
- "honey-source": "./src/index.ts",
45
- "types": "./dist/index.d.ts",
46
- "bun": "./src/index.ts",
47
- "default": "./dist/index.js"
48
- }
49
- }
50
- ```
51
-
52
- - **TypeScript** resolves `types` → generated `.d.ts`, which `skipLibCheck` covers. The consumer
53
- never type-checks our source, so our lint posture is ours alone.
54
- - **Node, Deno, Workers bundlers and Vite** resolve `default` → `./dist/*.js`. Node refuses to strip
55
- types from `.ts` files under `node_modules` (`ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING`), so
56
- a package whose runtime entry is `.ts` cannot be imported on plain Node at all — not the core
57
- entry, not the Vite plugin, not the CLI. Shipping only source made the package Bun-only in
58
- practice while the README promised Node.
59
- - **Bun** resolves `bun` → `./src/*.ts`. It runs TypeScript natively, and the `honey` bin
60
- (`bin/honey.js`) does the same split: Bun runs `src/cli.ts`, every other runtime `dist/cli.js`. In a
61
- repository checkout (marked by `tsconfig.json`, which is not published) Node also runs the source,
62
- through jiti, so `honey generate` never runs a stale `dist/`.
63
- - **`honey-source`** is this repository's own condition. Every tool here resolves it first —
64
- `customConditions` in the tsconfigs, `resolve.conditions` in the vitest configs,
65
- `--conditions=honey-source` for Node and Deno, `WRANGLER_BUILD_CONDITIONS` for wrangler — so
66
- development and tests always run the source and never a stale `dist/`. A consumer never sets it.
67
- - **`declarationMap` and `sourceMap` are emitted and `src` still ships**, so go-to-definition and
68
- stack traces land in real source.
69
-
70
- `bun run build` (`scripts/build.ts`) compiles `src` with `tsconfig.build.json` and copies the
71
- non-TypeScript assets codegen reads at run time (the Go, Python and Rust SDK runtimes, the Go CLI
72
- and MCP templates). `prepack` runs it; npm runs `prepack` for both `npm pack` and `npm publish`, so
73
- a tarball cannot ship with a stale or missing `dist`. The build tier (`bun run test:build`) also
74
- builds first, because its bundles resolve honey the way a consumer's do.
75
-
76
- ## The trade-off, stated
77
-
78
- We pay: a build step, the compiled output and declarations in the tarball, and one more artifact that
79
- must stay in sync (it is generated, so it does — but it is a step that can be forgotten, which is why
80
- it hangs off `prepack` rather than a human).
81
-
82
- We keep: source shipping for Bun and for debugging.
83
-
84
- We buy: consumers are decoupled from our compiler flags, and the package runs on every runtime the
85
- README names.
86
-
87
- **This generalizes.** Any package of ours that ships source has the same exposure. The rule: ship
88
- compiled JavaScript for the runtime condition, declarations for the `types` condition, source for
89
- Bun and debugging, and gate it with a packaging test that runs on plain Node.
90
-
91
- ## The regression test
92
-
93
- `bun run test:packaging` (`e2e/run-strict-consumer.ts`) packs the tarball exactly as npm would,
94
- installs it into a throwaway consumer, type-checks against `e2e/strict-consumer/` — a fixture with
95
- `strict`, `exactOptionalPropertyTypes`, `noPropertyAccessFromIndexSignature`,
96
- `noUncheckedIndexedAccess`, `verbatimModuleSyntax` and friends — and fails on any diagnostic whose
97
- path is inside the package.
98
-
99
- It then runs the installed package: on Bun, and on plain Node — the core entry, `honey generate`
100
- against a Vite config, and `vite build` with `honey()` and `createBuildPlugin`, whose output must
101
- serve `/health`. No tsx, no type stripping.
102
-
103
- It runs as its own CI job, on Node 22 and the current Node. Every other tier runs honey from source,
104
- so this is the only place the consumer's view is visible at all.