@lovrozagar/honey 0.7.3 → 1.0.0-rc.3

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 (1005) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +930 -1664
  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 -746
  71. package/dist/index.js +12 -2364
  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 -780
  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 +175 -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/meta-types.d.ts +34 -0
  237. package/dist/routing/meta-types.js +5 -0
  238. package/dist/routing/middleware-chain.d.ts +16 -0
  239. package/dist/routing/middleware-chain.js +41 -0
  240. package/dist/routing/output-types.d.ts +91 -0
  241. package/dist/routing/output-types.js +1 -0
  242. package/dist/routing/pattern.d.ts +55 -0
  243. package/dist/routing/pattern.js +219 -0
  244. package/dist/routing/record.d.ts +18 -0
  245. package/dist/routing/record.js +4 -0
  246. package/dist/routing/register.d.ts +135 -0
  247. package/dist/routing/register.js +155 -0
  248. package/dist/routing/request-path.d.ts +30 -0
  249. package/dist/routing/request-path.js +173 -0
  250. package/dist/routing/route-builder.d.ts +160 -0
  251. package/dist/routing/route-builder.js +86 -0
  252. package/dist/routing/route-tree.d.ts +18 -0
  253. package/dist/routing/route-tree.js +91 -0
  254. package/dist/routing/settings-chain.d.ts +75 -0
  255. package/dist/routing/settings-chain.js +137 -0
  256. package/dist/routing/settings.d.ts +90 -0
  257. package/dist/routing/settings.js +44 -0
  258. package/dist/routing/tap.d.ts +31 -0
  259. package/dist/routing/tap.js +77 -0
  260. package/dist/routing/tree-merge.d.ts +7 -0
  261. package/dist/routing/tree-merge.js +77 -0
  262. package/dist/routing/tree.d.ts +85 -0
  263. package/dist/routing/tree.js +196 -0
  264. package/dist/routing/types.d.ts +20 -0
  265. package/dist/routing/types.js +1 -0
  266. package/dist/routing/ws-builder.d.ts +62 -0
  267. package/dist/routing/ws-builder.js +109 -0
  268. package/dist/runtime/detect-runtime.d.ts +16 -0
  269. package/dist/runtime/detect-runtime.js +11 -0
  270. package/dist/runtime/optional-peer.d.ts +10 -0
  271. package/dist/runtime/optional-peer.js +19 -0
  272. package/dist/schema/arktype.d.ts +7 -0
  273. package/dist/schema/arktype.js +13 -0
  274. package/dist/schema/canonicalize.d.ts +8 -0
  275. package/dist/schema/canonicalize.js +19 -0
  276. package/dist/schema/effect.d.ts +7 -0
  277. package/dist/schema/effect.js +4 -0
  278. package/dist/schema/naming.d.ts +31 -0
  279. package/dist/schema/naming.js +116 -0
  280. package/dist/schema/sanitize-spec.d.ts +15 -0
  281. package/dist/schema/sanitize-spec.js +43 -0
  282. package/dist/schema/slots.d.ts +15 -0
  283. package/dist/schema/slots.js +179 -0
  284. package/dist/schema/to-json-schema.d.ts +34 -0
  285. package/dist/schema/to-json-schema.js +94 -0
  286. package/dist/schema/valibot.d.ts +4 -0
  287. package/dist/schema/valibot.js +153 -0
  288. package/dist/schema/yup.d.ts +3 -0
  289. package/dist/schema/yup.js +57 -0
  290. package/dist/schema/zod.d.ts +6 -0
  291. package/dist/schema/zod.js +192 -0
  292. package/dist/security/crypto.d.ts +7 -0
  293. package/dist/security/crypto.js +30 -0
  294. package/dist/streaming/producer-stream.d.ts +45 -0
  295. package/dist/streaming/producer-stream.js +251 -0
  296. package/dist/telemetry/fields.d.ts +43 -0
  297. package/dist/telemetry/fields.js +64 -0
  298. package/dist/telemetry/log-format.d.ts +7 -0
  299. package/dist/telemetry/log-format.js +43 -0
  300. package/dist/telemetry/logger.d.ts +44 -0
  301. package/dist/telemetry/logger.js +136 -0
  302. package/dist/telemetry/otel-subpath.d.ts +7 -0
  303. package/dist/telemetry/otel-subpath.js +5 -0
  304. package/dist/telemetry/otel.d.ts +50 -57
  305. package/dist/telemetry/otel.js +54 -130
  306. package/dist/telemetry/request-log.d.ts +22 -0
  307. package/dist/telemetry/request-log.js +83 -0
  308. package/dist/telemetry/request-trace.d.ts +123 -0
  309. package/dist/telemetry/request-trace.js +199 -0
  310. package/dist/telemetry/span-lifecycle.d.ts +11 -0
  311. package/dist/telemetry/span-lifecycle.js +114 -0
  312. package/dist/telemetry/traceparent.d.ts +40 -0
  313. package/dist/telemetry/traceparent.js +73 -0
  314. package/dist/testing/testing.d.ts +42 -0
  315. package/dist/testing/testing.js +101 -0
  316. package/dist/validation/content-type.d.ts +21 -0
  317. package/dist/validation/content-type.js +42 -0
  318. package/dist/validation/standard-schema.d.ts +41 -0
  319. package/dist/validation/standard-schema.js +5 -0
  320. package/dist/validation/validate-input.d.ts +45 -0
  321. package/dist/validation/validate-input.js +174 -0
  322. package/dist/validation/validate-output.d.ts +34 -0
  323. package/dist/validation/validate-output.js +107 -0
  324. package/dist/ws/bun.d.ts +30 -25
  325. package/dist/ws/bun.js +42 -46
  326. package/dist/ws/cloudflare.d.ts +6 -75
  327. package/dist/ws/cloudflare.js +37 -104
  328. package/dist/ws/contract.d.ts +74 -0
  329. package/dist/ws/contract.js +83 -0
  330. package/dist/ws/node.d.ts +12 -21
  331. package/dist/ws/node.js +103 -151
  332. package/dist/ws/origin.d.ts +23 -0
  333. package/dist/ws/origin.js +48 -0
  334. package/dist/ws/route.d.ts +14 -0
  335. package/dist/ws/route.js +5 -0
  336. package/dist/ws/session.d.ts +15 -6
  337. package/dist/ws/session.js +22 -23
  338. package/dist/ws/shared.d.ts +23 -33
  339. package/dist/ws/shared.js +53 -39
  340. package/package.json +169 -251
  341. package/dist/accepts.d.ts +0 -12
  342. package/dist/accepts.d.ts.map +0 -1
  343. package/dist/accepts.js +0 -126
  344. package/dist/accepts.js.map +0 -1
  345. package/dist/body-kind.d.ts +0 -26
  346. package/dist/body-kind.d.ts.map +0 -1
  347. package/dist/body-kind.js +0 -70
  348. package/dist/body-kind.js.map +0 -1
  349. package/dist/body-limit.d.ts +0 -26
  350. package/dist/body-limit.d.ts.map +0 -1
  351. package/dist/body-limit.js +0 -126
  352. package/dist/body-limit.js.map +0 -1
  353. package/dist/build/index.d.ts.map +0 -1
  354. package/dist/build/index.js.map +0 -1
  355. package/dist/cli-args.d.ts +0 -33
  356. package/dist/cli-args.d.ts.map +0 -1
  357. package/dist/cli-args.js +0 -102
  358. package/dist/cli-args.js.map +0 -1
  359. package/dist/cli-go/auth.go +0 -26
  360. package/dist/cli-go/config.go +0 -192
  361. package/dist/cli-go/errors.go +0 -75
  362. package/dist/cli-go/multipart.go +0 -79
  363. package/dist/cli-go/output.go +0 -163
  364. package/dist/cli-go/root.go +0 -30
  365. package/dist/cli-go/stream.go +0 -88
  366. package/dist/cli-go/version.go +0 -5
  367. package/dist/cli.d.ts +0 -3
  368. package/dist/cli.d.ts.map +0 -1
  369. package/dist/cli.js +0 -209
  370. package/dist/cli.js.map +0 -1
  371. package/dist/client/defaults.d.ts +0 -12
  372. package/dist/client/defaults.d.ts.map +0 -1
  373. package/dist/client/defaults.js +0 -48
  374. package/dist/client/defaults.js.map +0 -1
  375. package/dist/client/error.d.ts +0 -49
  376. package/dist/client/error.d.ts.map +0 -1
  377. package/dist/client/error.js +0 -71
  378. package/dist/client/error.js.map +0 -1
  379. package/dist/client/http.d.ts +0 -155
  380. package/dist/client/http.d.ts.map +0 -1
  381. package/dist/client/http.js +0 -571
  382. package/dist/client/http.js.map +0 -1
  383. package/dist/client/index.d.ts +0 -23
  384. package/dist/client/index.d.ts.map +0 -1
  385. package/dist/client/index.js +0 -95
  386. package/dist/client/index.js.map +0 -1
  387. package/dist/client/path.d.ts +0 -26
  388. package/dist/client/path.d.ts.map +0 -1
  389. package/dist/client/path.js +0 -163
  390. package/dist/client/path.js.map +0 -1
  391. package/dist/client/redirect-policy.d.ts +0 -12
  392. package/dist/client/redirect-policy.d.ts.map +0 -1
  393. package/dist/client/redirect-policy.js +0 -20
  394. package/dist/client/redirect-policy.js.map +0 -1
  395. package/dist/client/sdk.d.ts +0 -70
  396. package/dist/client/sdk.d.ts.map +0 -1
  397. package/dist/client/sdk.js +0 -292
  398. package/dist/client/sdk.js.map +0 -1
  399. package/dist/client/sse.d.ts +0 -23
  400. package/dist/client/sse.d.ts.map +0 -1
  401. package/dist/client/sse.js +0 -129
  402. package/dist/client/sse.js.map +0 -1
  403. package/dist/client/types.d.ts +0 -124
  404. package/dist/client/types.d.ts.map +0 -1
  405. package/dist/client/types.js +0 -2
  406. package/dist/client/types.js.map +0 -1
  407. package/dist/client/ws.d.ts +0 -22
  408. package/dist/client/ws.d.ts.map +0 -1
  409. package/dist/client/ws.js +0 -112
  410. package/dist/client/ws.js.map +0 -1
  411. package/dist/client-go/errors.go +0 -236
  412. package/dist/client-go/export.go +0 -44
  413. package/dist/client-go/invalidation.go +0 -371
  414. package/dist/client-go/nullable.go +0 -62
  415. package/dist/client-go/realtime.go +0 -354
  416. package/dist/client-go/result.go +0 -20
  417. package/dist/client-go/runtime.go +0 -975
  418. package/dist/client-go/sse.go +0 -159
  419. package/dist/client-go/transport.go +0 -495
  420. package/dist/client-go/ws.go +0 -128
  421. package/dist/client-info.d.ts +0 -36
  422. package/dist/client-info.d.ts.map +0 -1
  423. package/dist/client-info.js +0 -53
  424. package/dist/client-info.js.map +0 -1
  425. package/dist/client-mcp/README.md +0 -10
  426. package/dist/client-mcp/server.ts +0 -221
  427. package/dist/client-mcp/types.ts +0 -19
  428. package/dist/client-python/_errors.py +0 -115
  429. package/dist/client-python/_invalidation.py +0 -494
  430. package/dist/client-python/_realtime.py +0 -179
  431. package/dist/client-python/_runtime.py +0 -860
  432. package/dist/client-python/_sse.py +0 -155
  433. package/dist/client-python/_transport.py +0 -366
  434. package/dist/client-python/_ws.py +0 -159
  435. package/dist/client-python/py.typed +0 -0
  436. package/dist/client-rust/errors.rs +0 -220
  437. package/dist/client-rust/invalidation.rs +0 -412
  438. package/dist/client-rust/invalidation_sync.rs +0 -93
  439. package/dist/client-rust/nullable.rs +0 -17
  440. package/dist/client-rust/realtime.rs +0 -702
  441. package/dist/client-rust/result.rs +0 -22
  442. package/dist/client-rust/runtime.rs +0 -980
  443. package/dist/client-rust/runtime_sync.rs +0 -484
  444. package/dist/client-rust/sse.rs +0 -188
  445. package/dist/client-rust/ws.rs +0 -167
  446. package/dist/codegen-go-cli.d.ts +0 -22
  447. package/dist/codegen-go-cli.d.ts.map +0 -1
  448. package/dist/codegen-go-cli.js +0 -964
  449. package/dist/codegen-go-cli.js.map +0 -1
  450. package/dist/codegen-go.d.ts +0 -41
  451. package/dist/codegen-go.d.ts.map +0 -1
  452. package/dist/codegen-go.js +0 -872
  453. package/dist/codegen-go.js.map +0 -1
  454. package/dist/codegen-hash.d.ts +0 -3
  455. package/dist/codegen-hash.d.ts.map +0 -1
  456. package/dist/codegen-hash.js +0 -9
  457. package/dist/codegen-hash.js.map +0 -1
  458. package/dist/codegen-ir.d.ts +0 -190
  459. package/dist/codegen-ir.d.ts.map +0 -1
  460. package/dist/codegen-ir.js +0 -661
  461. package/dist/codegen-ir.js.map +0 -1
  462. package/dist/codegen-lang.d.ts +0 -65
  463. package/dist/codegen-lang.d.ts.map +0 -1
  464. package/dist/codegen-lang.js +0 -526
  465. package/dist/codegen-lang.js.map +0 -1
  466. package/dist/codegen-load.d.ts +0 -31
  467. package/dist/codegen-load.d.ts.map +0 -1
  468. package/dist/codegen-load.js +0 -138
  469. package/dist/codegen-load.js.map +0 -1
  470. package/dist/codegen-loaders.d.ts +0 -12
  471. package/dist/codegen-loaders.d.ts.map +0 -1
  472. package/dist/codegen-loaders.js +0 -55
  473. package/dist/codegen-loaders.js.map +0 -1
  474. package/dist/codegen-mcp.d.ts +0 -13
  475. package/dist/codegen-mcp.d.ts.map +0 -1
  476. package/dist/codegen-mcp.js +0 -368
  477. package/dist/codegen-mcp.js.map +0 -1
  478. package/dist/codegen-python.d.ts +0 -33
  479. package/dist/codegen-python.d.ts.map +0 -1
  480. package/dist/codegen-python.js +0 -828
  481. package/dist/codegen-python.js.map +0 -1
  482. package/dist/codegen-route-tree-intern.d.ts +0 -40
  483. package/dist/codegen-route-tree-intern.d.ts.map +0 -1
  484. package/dist/codegen-route-tree-intern.js +0 -221
  485. package/dist/codegen-route-tree-intern.js.map +0 -1
  486. package/dist/codegen-rust.d.ts +0 -18
  487. package/dist/codegen-rust.d.ts.map +0 -1
  488. package/dist/codegen-rust.js +0 -1293
  489. package/dist/codegen-rust.js.map +0 -1
  490. package/dist/codegen-sanitize.d.ts +0 -3
  491. package/dist/codegen-sanitize.d.ts.map +0 -1
  492. package/dist/codegen-sanitize.js +0 -56
  493. package/dist/codegen-sanitize.js.map +0 -1
  494. package/dist/codegen-schema-naming.d.ts +0 -27
  495. package/dist/codegen-schema-naming.d.ts.map +0 -1
  496. package/dist/codegen-schema-naming.js +0 -150
  497. package/dist/codegen-schema-naming.js.map +0 -1
  498. package/dist/codegen-sdk-model.d.ts +0 -71
  499. package/dist/codegen-sdk-model.d.ts.map +0 -1
  500. package/dist/codegen-sdk-model.js +0 -179
  501. package/dist/codegen-sdk-model.js.map +0 -1
  502. package/dist/codegen.d.ts +0 -187
  503. package/dist/codegen.d.ts.map +0 -1
  504. package/dist/codegen.js +0 -4619
  505. package/dist/codegen.js.map +0 -1
  506. package/dist/context.d.ts +0 -86
  507. package/dist/context.d.ts.map +0 -1
  508. package/dist/context.js +0 -242
  509. package/dist/context.js.map +0 -1
  510. package/dist/cookie-sign.d.ts +0 -17
  511. package/dist/cookie-sign.d.ts.map +0 -1
  512. package/dist/cookie-sign.js +0 -104
  513. package/dist/cookie-sign.js.map +0 -1
  514. package/dist/cookie.d.ts +0 -24
  515. package/dist/cookie.d.ts.map +0 -1
  516. package/dist/cookie.js +0 -138
  517. package/dist/cookie.js.map +0 -1
  518. package/dist/cors.d.ts +0 -14
  519. package/dist/cors.d.ts.map +0 -1
  520. package/dist/cors.js +0 -87
  521. package/dist/cors.js.map +0 -1
  522. package/dist/crypto.d.ts +0 -7
  523. package/dist/crypto.d.ts.map +0 -1
  524. package/dist/crypto.js +0 -38
  525. package/dist/crypto.js.map +0 -1
  526. package/dist/csrf.d.ts +0 -28
  527. package/dist/csrf.d.ts.map +0 -1
  528. package/dist/csrf.js +0 -79
  529. package/dist/csrf.js.map +0 -1
  530. package/dist/curl-logger.d.ts +0 -44
  531. package/dist/curl-logger.d.ts.map +0 -1
  532. package/dist/curl-logger.js +0 -199
  533. package/dist/curl-logger.js.map +0 -1
  534. package/dist/detect-runtime.d.ts +0 -16
  535. package/dist/detect-runtime.d.ts.map +0 -1
  536. package/dist/detect-runtime.js +0 -13
  537. package/dist/detect-runtime.js.map +0 -1
  538. package/dist/dict.d.ts +0 -11
  539. package/dist/dict.d.ts.map +0 -1
  540. package/dist/dict.js +0 -13
  541. package/dist/dict.js.map +0 -1
  542. package/dist/error.d.ts +0 -21
  543. package/dist/error.d.ts.map +0 -1
  544. package/dist/error.js +0 -44
  545. package/dist/error.js.map +0 -1
  546. package/dist/errors.d.ts +0 -40
  547. package/dist/errors.d.ts.map +0 -1
  548. package/dist/errors.js +0 -39
  549. package/dist/errors.js.map +0 -1
  550. package/dist/etag.d.ts +0 -11
  551. package/dist/etag.d.ts.map +0 -1
  552. package/dist/etag.js +0 -82
  553. package/dist/etag.js.map +0 -1
  554. package/dist/feature-detect.d.ts +0 -25
  555. package/dist/feature-detect.d.ts.map +0 -1
  556. package/dist/feature-detect.js +0 -144
  557. package/dist/feature-detect.js.map +0 -1
  558. package/dist/feature-load.d.ts +0 -3
  559. package/dist/feature-load.d.ts.map +0 -1
  560. package/dist/feature-load.js +0 -36
  561. package/dist/feature-load.js.map +0 -1
  562. package/dist/feature-slots.d.ts +0 -44
  563. package/dist/feature-slots.d.ts.map +0 -1
  564. package/dist/feature-slots.js +0 -48
  565. package/dist/feature-slots.js.map +0 -1
  566. package/dist/fetch-request.d.ts +0 -10
  567. package/dist/fetch-request.d.ts.map +0 -1
  568. package/dist/fetch-request.js +0 -13
  569. package/dist/fetch-request.js.map +0 -1
  570. package/dist/gen-process.d.ts +0 -15
  571. package/dist/gen-process.d.ts.map +0 -1
  572. package/dist/gen-process.js +0 -43
  573. package/dist/gen-process.js.map +0 -1
  574. package/dist/gen-write.d.ts +0 -19
  575. package/dist/gen-write.d.ts.map +0 -1
  576. package/dist/gen-write.js +0 -120
  577. package/dist/gen-write.js.map +0 -1
  578. package/dist/glob.d.ts +0 -21
  579. package/dist/glob.d.ts.map +0 -1
  580. package/dist/glob.js +0 -115
  581. package/dist/glob.js.map +0 -1
  582. package/dist/go-type-emitter.d.ts +0 -47
  583. package/dist/go-type-emitter.d.ts.map +0 -1
  584. package/dist/go-type-emitter.js +0 -594
  585. package/dist/go-type-emitter.js.map +0 -1
  586. package/dist/honey-response.d.ts +0 -82
  587. package/dist/honey-response.d.ts.map +0 -1
  588. package/dist/honey-response.js +0 -338
  589. package/dist/honey-response.js.map +0 -1
  590. package/dist/i18n-slot.d.ts +0 -15
  591. package/dist/i18n-slot.d.ts.map +0 -1
  592. package/dist/i18n-slot.js +0 -14
  593. package/dist/i18n-slot.js.map +0 -1
  594. package/dist/i18n.d.ts +0 -29
  595. package/dist/i18n.d.ts.map +0 -1
  596. package/dist/i18n.js +0 -250
  597. package/dist/i18n.js.map +0 -1
  598. package/dist/index.d.ts.map +0 -1
  599. package/dist/index.js.map +0 -1
  600. package/dist/init.d.ts +0 -5
  601. package/dist/init.d.ts.map +0 -1
  602. package/dist/init.js +0 -140
  603. package/dist/init.js.map +0 -1
  604. package/dist/input.d.ts +0 -6
  605. package/dist/input.d.ts.map +0 -1
  606. package/dist/input.js +0 -4
  607. package/dist/input.js.map +0 -1
  608. package/dist/invalidate-check.d.ts +0 -61
  609. package/dist/invalidate-check.d.ts.map +0 -1
  610. package/dist/invalidate-check.js +0 -163
  611. package/dist/invalidate-check.js.map +0 -1
  612. package/dist/invoke-user.d.ts +0 -35
  613. package/dist/invoke-user.d.ts.map +0 -1
  614. package/dist/invoke-user.js +0 -73
  615. package/dist/invoke-user.js.map +0 -1
  616. package/dist/ip-restrict.d.ts +0 -24
  617. package/dist/ip-restrict.d.ts.map +0 -1
  618. package/dist/ip-restrict.js +0 -60
  619. package/dist/ip-restrict.js.map +0 -1
  620. package/dist/ip.d.ts +0 -39
  621. package/dist/ip.d.ts.map +0 -1
  622. package/dist/ip.js +0 -209
  623. package/dist/ip.js.map +0 -1
  624. package/dist/logger.d.ts +0 -45
  625. package/dist/logger.d.ts.map +0 -1
  626. package/dist/logger.js +0 -113
  627. package/dist/logger.js.map +0 -1
  628. package/dist/media-type.d.ts +0 -30
  629. package/dist/media-type.d.ts.map +0 -1
  630. package/dist/media-type.js +0 -97
  631. package/dist/media-type.js.map +0 -1
  632. package/dist/meta-spec-merge.d.ts +0 -32
  633. package/dist/meta-spec-merge.d.ts.map +0 -1
  634. package/dist/meta-spec-merge.js +0 -68
  635. package/dist/meta-spec-merge.js.map +0 -1
  636. package/dist/meta-spec.d.ts +0 -94
  637. package/dist/meta-spec.d.ts.map +0 -1
  638. package/dist/meta-spec.js +0 -535
  639. package/dist/meta-spec.js.map +0 -1
  640. package/dist/middleware.d.ts +0 -77
  641. package/dist/middleware.d.ts.map +0 -1
  642. package/dist/middleware.js +0 -253
  643. package/dist/middleware.js.map +0 -1
  644. package/dist/node-request.d.ts +0 -104
  645. package/dist/node-request.d.ts.map +0 -1
  646. package/dist/node-request.js +0 -407
  647. package/dist/node-request.js.map +0 -1
  648. package/dist/node.d.ts +0 -30
  649. package/dist/node.d.ts.map +0 -1
  650. package/dist/node.js +0 -396
  651. package/dist/node.js.map +0 -1
  652. package/dist/openapi/collect.d.ts.map +0 -1
  653. package/dist/openapi/collect.js.map +0 -1
  654. package/dist/openapi/docs-page.d.ts.map +0 -1
  655. package/dist/openapi/docs-page.js.map +0 -1
  656. package/dist/openapi/document.d.ts.map +0 -1
  657. package/dist/openapi/document.js.map +0 -1
  658. package/dist/openapi/json-schema-slot.d.ts +0 -12
  659. package/dist/openapi/json-schema-slot.d.ts.map +0 -1
  660. package/dist/openapi/json-schema-slot.js +0 -38
  661. package/dist/openapi/json-schema-slot.js.map +0 -1
  662. package/dist/openapi/register.d.ts.map +0 -1
  663. package/dist/openapi/register.js.map +0 -1
  664. package/dist/openapi/scalar.d.ts.map +0 -1
  665. package/dist/openapi/scalar.js.map +0 -1
  666. package/dist/openapi/serve.d.ts.map +0 -1
  667. package/dist/openapi/serve.js.map +0 -1
  668. package/dist/openapi/spec-factory.d.ts +0 -65
  669. package/dist/openapi/spec-factory.d.ts.map +0 -1
  670. package/dist/openapi/spec-factory.js +0 -52
  671. package/dist/openapi/spec-factory.js.map +0 -1
  672. package/dist/openapi/spec.d.ts +0 -29
  673. package/dist/openapi/spec.d.ts.map +0 -1
  674. package/dist/openapi/spec.js +0 -50
  675. package/dist/openapi/spec.js.map +0 -1
  676. package/dist/openapi/swagger.d.ts.map +0 -1
  677. package/dist/openapi/swagger.js.map +0 -1
  678. package/dist/pattern.d.ts +0 -71
  679. package/dist/pattern.d.ts.map +0 -1
  680. package/dist/pattern.js +0 -239
  681. package/dist/pattern.js.map +0 -1
  682. package/dist/peer.d.ts +0 -17
  683. package/dist/peer.d.ts.map +0 -1
  684. package/dist/peer.js +0 -50
  685. package/dist/peer.js.map +0 -1
  686. package/dist/plugin.d.ts +0 -228
  687. package/dist/plugin.d.ts.map +0 -1
  688. package/dist/plugin.js +0 -666
  689. package/dist/plugin.js.map +0 -1
  690. package/dist/powered-by.d.ts +0 -7
  691. package/dist/powered-by.d.ts.map +0 -1
  692. package/dist/powered-by.js +0 -11
  693. package/dist/powered-by.js.map +0 -1
  694. package/dist/pretty-json.d.ts +0 -10
  695. package/dist/pretty-json.d.ts.map +0 -1
  696. package/dist/pretty-json.js +0 -47
  697. package/dist/pretty-json.js.map +0 -1
  698. package/dist/producer-stream.d.ts +0 -47
  699. package/dist/producer-stream.d.ts.map +0 -1
  700. package/dist/producer-stream.js +0 -267
  701. package/dist/producer-stream.js.map +0 -1
  702. package/dist/proxy.d.ts +0 -90
  703. package/dist/proxy.d.ts.map +0 -1
  704. package/dist/proxy.js +0 -274
  705. package/dist/proxy.js.map +0 -1
  706. package/dist/python-type-emitter.d.ts +0 -24
  707. package/dist/python-type-emitter.d.ts.map +0 -1
  708. package/dist/python-type-emitter.js +0 -157
  709. package/dist/python-type-emitter.js.map +0 -1
  710. package/dist/realtime/bus.d.ts.map +0 -1
  711. package/dist/realtime/bus.js.map +0 -1
  712. package/dist/realtime/register.d.ts +0 -3
  713. package/dist/realtime/register.d.ts.map +0 -1
  714. package/dist/realtime/register.js +0 -10
  715. package/dist/realtime/register.js.map +0 -1
  716. package/dist/realtime/route.d.ts.map +0 -1
  717. package/dist/realtime/route.js.map +0 -1
  718. package/dist/realtime/server.d.ts.map +0 -1
  719. package/dist/realtime/server.js.map +0 -1
  720. package/dist/request-id.d.ts +0 -19
  721. package/dist/request-id.d.ts.map +0 -1
  722. package/dist/request-id.js +0 -16
  723. package/dist/request-id.js.map +0 -1
  724. package/dist/request-limits.d.ts +0 -3
  725. package/dist/request-limits.d.ts.map +0 -1
  726. package/dist/request-limits.js +0 -3
  727. package/dist/request-limits.js.map +0 -1
  728. package/dist/request-path.d.ts +0 -33
  729. package/dist/request-path.d.ts.map +0 -1
  730. package/dist/request-path.js +0 -178
  731. package/dist/request-path.js.map +0 -1
  732. package/dist/request-to-curl.d.ts +0 -15
  733. package/dist/request-to-curl.d.ts.map +0 -1
  734. package/dist/request-to-curl.js +0 -48
  735. package/dist/request-to-curl.js.map +0 -1
  736. package/dist/response.d.ts +0 -86
  737. package/dist/response.d.ts.map +0 -1
  738. package/dist/response.js +0 -313
  739. package/dist/response.js.map +0 -1
  740. package/dist/rust-type-emitter.d.ts +0 -44
  741. package/dist/rust-type-emitter.d.ts.map +0 -1
  742. package/dist/rust-type-emitter.js +0 -463
  743. package/dist/rust-type-emitter.js.map +0 -1
  744. package/dist/secure-headers.d.ts +0 -16
  745. package/dist/secure-headers.d.ts.map +0 -1
  746. package/dist/secure-headers.js +0 -53
  747. package/dist/secure-headers.js.map +0 -1
  748. package/dist/serve-register.d.ts +0 -6
  749. package/dist/serve-register.d.ts.map +0 -1
  750. package/dist/serve-register.js +0 -9
  751. package/dist/serve-register.js.map +0 -1
  752. package/dist/serve-slot.d.ts +0 -9
  753. package/dist/serve-slot.d.ts.map +0 -1
  754. package/dist/serve-slot.js +0 -52
  755. package/dist/serve-slot.js.map +0 -1
  756. package/dist/serve.d.ts +0 -38
  757. package/dist/serve.d.ts.map +0 -1
  758. package/dist/serve.js +0 -157
  759. package/dist/serve.js.map +0 -1
  760. package/dist/server-timing.d.ts +0 -9
  761. package/dist/server-timing.d.ts.map +0 -1
  762. package/dist/server-timing.js +0 -51
  763. package/dist/server-timing.js.map +0 -1
  764. package/dist/static.d.ts +0 -21
  765. package/dist/static.d.ts.map +0 -1
  766. package/dist/static.js +0 -102
  767. package/dist/static.js.map +0 -1
  768. package/dist/telemetry/otel.d.ts.map +0 -1
  769. package/dist/telemetry/otel.js.map +0 -1
  770. package/dist/testing.d.ts +0 -36
  771. package/dist/testing.d.ts.map +0 -1
  772. package/dist/testing.js +0 -124
  773. package/dist/testing.js.map +0 -1
  774. package/dist/timeout.d.ts +0 -13
  775. package/dist/timeout.d.ts.map +0 -1
  776. package/dist/timeout.js +0 -36
  777. package/dist/timeout.js.map +0 -1
  778. package/dist/tree.d.ts +0 -197
  779. package/dist/tree.d.ts.map +0 -1
  780. package/dist/tree.js +0 -437
  781. package/dist/tree.js.map +0 -1
  782. package/dist/trust.d.ts +0 -21
  783. package/dist/trust.d.ts.map +0 -1
  784. package/dist/trust.js +0 -100
  785. package/dist/trust.js.map +0 -1
  786. package/dist/ts-type-emitter.d.ts +0 -8
  787. package/dist/ts-type-emitter.d.ts.map +0 -1
  788. package/dist/ts-type-emitter.js +0 -150
  789. package/dist/ts-type-emitter.js.map +0 -1
  790. package/dist/type-emitter.d.ts +0 -36
  791. package/dist/type-emitter.d.ts.map +0 -1
  792. package/dist/type-emitter.js +0 -729
  793. package/dist/type-emitter.js.map +0 -1
  794. package/dist/type-extractor.d.ts +0 -43
  795. package/dist/type-extractor.d.ts.map +0 -1
  796. package/dist/type-extractor.js +0 -819
  797. package/dist/type-extractor.js.map +0 -1
  798. package/dist/types.d.ts +0 -467
  799. package/dist/types.d.ts.map +0 -1
  800. package/dist/types.js +0 -96
  801. package/dist/types.js.map +0 -1
  802. package/dist/validation.d.ts +0 -31
  803. package/dist/validation.d.ts.map +0 -1
  804. package/dist/validation.js +0 -335
  805. package/dist/validation.js.map +0 -1
  806. package/dist/with-headers.d.ts +0 -15
  807. package/dist/with-headers.d.ts.map +0 -1
  808. package/dist/with-headers.js +0 -45
  809. package/dist/with-headers.js.map +0 -1
  810. package/dist/ws/bun.d.ts.map +0 -1
  811. package/dist/ws/bun.js.map +0 -1
  812. package/dist/ws/cloudflare.d.ts.map +0 -1
  813. package/dist/ws/cloudflare.js.map +0 -1
  814. package/dist/ws/deno.d.ts +0 -13
  815. package/dist/ws/deno.d.ts.map +0 -1
  816. package/dist/ws/deno.js +0 -133
  817. package/dist/ws/deno.js.map +0 -1
  818. package/dist/ws/node.d.ts.map +0 -1
  819. package/dist/ws/node.js.map +0 -1
  820. package/dist/ws/session.d.ts.map +0 -1
  821. package/dist/ws/session.js.map +0 -1
  822. package/dist/ws/shared.d.ts.map +0 -1
  823. package/dist/ws/shared.js.map +0 -1
  824. package/dist/ws-origin.d.ts +0 -20
  825. package/dist/ws-origin.d.ts.map +0 -1
  826. package/dist/ws-origin.js +0 -41
  827. package/dist/ws-origin.js.map +0 -1
  828. package/dist/yaml.d.ts +0 -18
  829. package/dist/yaml.d.ts.map +0 -1
  830. package/dist/yaml.js +0 -101
  831. package/dist/yaml.js.map +0 -1
  832. package/docs/api-ref/go.md +0 -399
  833. package/docs/api-ref/python.md +0 -399
  834. package/docs/api-ref/rust.md +0 -399
  835. package/docs/api-ref/typescript.md +0 -399
  836. package/docs/invalidate-spec.md +0 -333
  837. package/docs/meta-spec.md +0 -555
  838. package/docs/packaging.md +0 -104
  839. package/docs/regression-matrix/README.md +0 -32
  840. package/docs/regression-matrix/review.md +0 -44
  841. package/docs/regression-matrix/ws1-3.md +0 -97
  842. package/docs/regression-matrix/ws4-8.md +0 -107
  843. package/docs/regression-matrix/ws9-12.md +0 -266
  844. package/docs/sdk.md +0 -798
  845. package/src/accepts.ts +0 -136
  846. package/src/body-kind.ts +0 -67
  847. package/src/body-limit.ts +0 -152
  848. package/src/build/index.ts +0 -217
  849. package/src/cli-args.ts +0 -123
  850. package/src/cli-go/auth.go +0 -26
  851. package/src/cli-go/config.go +0 -192
  852. package/src/cli-go/errors.go +0 -75
  853. package/src/cli-go/multipart.go +0 -79
  854. package/src/cli-go/output.go +0 -163
  855. package/src/cli-go/root.go +0 -30
  856. package/src/cli-go/stream.go +0 -88
  857. package/src/cli-go/version.go +0 -5
  858. package/src/cli.ts +0 -209
  859. package/src/client/defaults.ts +0 -47
  860. package/src/client/error.ts +0 -82
  861. package/src/client/http.ts +0 -737
  862. package/src/client/index.ts +0 -157
  863. package/src/client/path.ts +0 -169
  864. package/src/client/redirect-policy.ts +0 -19
  865. package/src/client/sdk.ts +0 -351
  866. package/src/client/sse.ts +0 -128
  867. package/src/client/types.ts +0 -206
  868. package/src/client/ws.ts +0 -149
  869. package/src/client-go/errors.go +0 -236
  870. package/src/client-go/export.go +0 -44
  871. package/src/client-go/invalidation.go +0 -371
  872. package/src/client-go/nullable.go +0 -62
  873. package/src/client-go/realtime.go +0 -354
  874. package/src/client-go/result.go +0 -20
  875. package/src/client-go/runtime.go +0 -975
  876. package/src/client-go/sse.go +0 -159
  877. package/src/client-go/transport.go +0 -495
  878. package/src/client-go/ws.go +0 -128
  879. package/src/client-info.ts +0 -79
  880. package/src/client-mcp/README.md +0 -10
  881. package/src/client-mcp/server.ts +0 -221
  882. package/src/client-mcp/types.ts +0 -19
  883. package/src/client-python/_errors.py +0 -115
  884. package/src/client-python/_invalidation.py +0 -494
  885. package/src/client-python/_realtime.py +0 -179
  886. package/src/client-python/_runtime.py +0 -860
  887. package/src/client-python/_sse.py +0 -155
  888. package/src/client-python/_transport.py +0 -366
  889. package/src/client-python/_ws.py +0 -159
  890. package/src/client-python/py.typed +0 -0
  891. package/src/client-rust/errors.rs +0 -220
  892. package/src/client-rust/invalidation.rs +0 -412
  893. package/src/client-rust/invalidation_sync.rs +0 -93
  894. package/src/client-rust/nullable.rs +0 -17
  895. package/src/client-rust/realtime.rs +0 -702
  896. package/src/client-rust/result.rs +0 -22
  897. package/src/client-rust/runtime.rs +0 -980
  898. package/src/client-rust/runtime_sync.rs +0 -484
  899. package/src/client-rust/sse.rs +0 -188
  900. package/src/client-rust/ws.rs +0 -167
  901. package/src/codegen-go-cli.ts +0 -1066
  902. package/src/codegen-go.ts +0 -970
  903. package/src/codegen-hash.ts +0 -8
  904. package/src/codegen-ir.ts +0 -812
  905. package/src/codegen-lang.ts +0 -517
  906. package/src/codegen-load.ts +0 -150
  907. package/src/codegen-loaders.ts +0 -50
  908. package/src/codegen-mcp.ts +0 -445
  909. package/src/codegen-python.ts +0 -916
  910. package/src/codegen-route-tree-intern.ts +0 -198
  911. package/src/codegen-rust.ts +0 -1402
  912. package/src/codegen-sanitize.ts +0 -57
  913. package/src/codegen-schema-naming.ts +0 -165
  914. package/src/codegen-sdk-model.ts +0 -228
  915. package/src/codegen.ts +0 -5089
  916. package/src/context.ts +0 -325
  917. package/src/cookie-sign.ts +0 -119
  918. package/src/cookie.ts +0 -143
  919. package/src/cors.ts +0 -95
  920. package/src/crypto.ts +0 -38
  921. package/src/csrf.ts +0 -86
  922. package/src/curl-logger.ts +0 -258
  923. package/src/detect-runtime.ts +0 -17
  924. package/src/dict.ts +0 -12
  925. package/src/error.ts +0 -55
  926. package/src/errors.ts +0 -85
  927. package/src/etag.ts +0 -97
  928. package/src/feature-detect.ts +0 -147
  929. package/src/feature-load.ts +0 -23
  930. package/src/feature-slots.ts +0 -70
  931. package/src/fetch-request.ts +0 -13
  932. package/src/gen-process.ts +0 -42
  933. package/src/gen-write.ts +0 -127
  934. package/src/glob.ts +0 -109
  935. package/src/go-type-emitter.ts +0 -660
  936. package/src/honey-response.ts +0 -379
  937. package/src/i18n-slot.ts +0 -30
  938. package/src/i18n.ts +0 -300
  939. package/src/index.ts +0 -3829
  940. package/src/init.ts +0 -161
  941. package/src/input.ts +0 -8
  942. package/src/invalidate-check.ts +0 -205
  943. package/src/invoke-user.ts +0 -95
  944. package/src/ip-restrict.ts +0 -79
  945. package/src/ip.ts +0 -194
  946. package/src/logger.ts +0 -178
  947. package/src/media-type.ts +0 -104
  948. package/src/meta-spec-merge.ts +0 -80
  949. package/src/meta-spec.ts +0 -718
  950. package/src/middleware.ts +0 -331
  951. package/src/node-request.ts +0 -431
  952. package/src/node.ts +0 -454
  953. package/src/openapi/collect.ts +0 -50
  954. package/src/openapi/docs-page.ts +0 -89
  955. package/src/openapi/document.ts +0 -902
  956. package/src/openapi/json-schema-slot.ts +0 -53
  957. package/src/openapi/register.ts +0 -23
  958. package/src/openapi/scalar.ts +0 -34
  959. package/src/openapi/serve.ts +0 -39
  960. package/src/openapi/spec-factory.ts +0 -100
  961. package/src/openapi/spec.ts +0 -74
  962. package/src/openapi/swagger.ts +0 -35
  963. package/src/pattern.ts +0 -245
  964. package/src/peer.ts +0 -53
  965. package/src/plugin.ts +0 -864
  966. package/src/powered-by.ts +0 -18
  967. package/src/pretty-json.ts +0 -56
  968. package/src/producer-stream.ts +0 -296
  969. package/src/proxy.ts +0 -370
  970. package/src/python-type-emitter.ts +0 -181
  971. package/src/realtime/bus.ts +0 -140
  972. package/src/realtime/register.ts +0 -13
  973. package/src/realtime/route.ts +0 -153
  974. package/src/realtime/server.ts +0 -298
  975. package/src/request-id.ts +0 -32
  976. package/src/request-limits.ts +0 -2
  977. package/src/request-path.ts +0 -165
  978. package/src/request-to-curl.ts +0 -52
  979. package/src/response.ts +0 -411
  980. package/src/rust-type-emitter.ts +0 -548
  981. package/src/secure-headers.ts +0 -74
  982. package/src/serve-register.ts +0 -12
  983. package/src/serve-slot.ts +0 -58
  984. package/src/serve.ts +0 -220
  985. package/src/server-timing.ts +0 -71
  986. package/src/static.ts +0 -112
  987. package/src/telemetry/otel.ts +0 -156
  988. package/src/testing.ts +0 -167
  989. package/src/timeout.ts +0 -45
  990. package/src/tree.ts +0 -558
  991. package/src/trust.ts +0 -117
  992. package/src/ts-type-emitter.ts +0 -168
  993. package/src/type-emitter.ts +0 -760
  994. package/src/type-extractor.ts +0 -855
  995. package/src/types.ts +0 -756
  996. package/src/validation.ts +0 -413
  997. package/src/with-headers.ts +0 -45
  998. package/src/ws/bun.ts +0 -120
  999. package/src/ws/cloudflare.ts +0 -192
  1000. package/src/ws/deno.ts +0 -188
  1001. package/src/ws/node.ts +0 -240
  1002. package/src/ws/session.ts +0 -73
  1003. package/src/ws/shared.ts +0 -140
  1004. package/src/ws-origin.ts +0 -53
  1005. 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.