@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
@@ -1,20 +1,13 @@
1
- import { generateManifest, generateOpenApi } from "../codegen.js";
2
- import { toYaml } from "../yaml.js";
3
- import { scalar } from "./scalar.js";
4
- import { artifactResponse, toServedArtifact } from "./serve.js";
5
- import { swagger } from "./swagger.js";
6
- import { registerOpenApiRuntime } from "./spec-factory.js";
7
- export function enableOpenApi() {
8
- registerOpenApiRuntime({
9
- artifactResponse,
10
- docsUi: (kind, specUrl) => (kind === "swagger" ? swagger({ url: specUrl }) : scalar({ url: specUrl })),
11
- /* served artifacts follow the document's visibility policy and never fail on one schema */
12
- generateManifest: (app, options) => Promise.resolve(generateManifest(app, { visibility: "published", ...options })),
13
- generateOpenApi: (app, options) => generateOpenApi(app, { onSchemaError: "warn", ...options }),
14
- toServedArtifact,
15
- toYaml,
16
- });
17
- }
18
- enableOpenApi();
19
- export { spec } from "./spec.js";
20
- //# sourceMappingURL=register.js.map
1
+ /**
2
+ * `@lovrozagar/honey/openapi`: the app's OpenAPI 3.1 document and route manifest, generated or
3
+ * served, and the docs pages. A plain subpath: nothing registers itself, and an app that never
4
+ * imports it carries none of it.
5
+ */
6
+ export { SERVED } from "../routing/register.js";
7
+ export { generateOpenApi, } from "./generate.js";
8
+ export { generateManifest, } from "./manifest.js";
9
+ export { inlineJson } from "./docs-page.js";
10
+ export { scalar } from "./scalar.js";
11
+ export { serveManifest, serveOpenApi } from "./serve.js";
12
+ export { swagger } from "./swagger.js";
13
+ export { toYaml } from "./yaml.js";
@@ -0,0 +1,44 @@
1
+ import type { JsonSchema } from "../schema/to-json-schema.ts";
2
+ import type { ErrorFormat } from "../errors/problem-json.ts";
3
+ import type { OutputSchemas } from "../routing/output-types.ts";
4
+ import type { CollectedError } from "./collect.ts";
5
+ export type MediaObject = {
6
+ schema?: JsonSchema;
7
+ };
8
+ export type HeaderObject = {
9
+ description?: string;
10
+ required?: boolean;
11
+ schema: JsonSchema;
12
+ };
13
+ export type ResponseObject = {
14
+ content?: Record<string, MediaObject>;
15
+ description: string;
16
+ headers?: Record<string, HeaderObject>;
17
+ /** set on every response the route's declared errors produce, so a reader tells it from a declared output */
18
+ "x-honey-error"?: true;
19
+ };
20
+ /** One declared error key as an operation's `x-honey-errors` carries it: its status (null: none) and own schema. */
21
+ export type DeclaredError = {
22
+ schema?: JsonSchema;
23
+ status: number | null;
24
+ };
25
+ /** A schema converted for this operation: `hint` names a component it lifts. */
26
+ export type Convert = (schema: unknown, io: "input" | "output", hint: string) => JsonSchema;
27
+ /** The app's error settings, their schemas already converted. */
28
+ export type ErrorSettings = {
29
+ readonly customErrorSchema: JsonSchema | null;
30
+ readonly errorFormat: ErrorFormat;
31
+ readonly errorSchema: JsonSchema | null;
32
+ };
33
+ /** Every answer `output` declares, with its headers and redirects. */
34
+ export declare function successResponses(output: OutputSchemas | null, convert: Convert, hint: (code: number) => string): Record<string, ResponseObject>;
35
+ /** honey's envelope, as every standard error answers by default. */
36
+ export declare function defaultEnvelope(): JsonSchema;
37
+ /**
38
+ * Add the errors `errorMeta` names to `responses`, one response per status, each status left to an
39
+ * answer the route declares there itself. A key with no status is not documented as a response.
40
+ * Returns every declared key with its status and own schema: the operation's `x-honey-errors`.
41
+ */
42
+ export declare function addErrorResponses(responses: Record<string, ResponseObject>, errorMeta: Readonly<Record<string, CollectedError>>, settings: ErrorSettings, convert: (schema: unknown, hint: string) => JsonSchema): Record<string, DeclaredError>;
43
+ /** `responses` keyed in ascending status order: the same bytes however they were declared. */
44
+ export declare function ordered(responses: Record<string, ResponseObject>): Record<string, ResponseObject>;
@@ -0,0 +1,159 @@
1
+ /**
2
+ * An operation's responses: each declared answer by status and media type, its redirects and the
3
+ * headers each status declares, then the errors the route may answer in the app's error format.
4
+ * honey's envelope names a status's keys and status as enums; Problem Details (RFC 9457) names the
5
+ * keys' type URIs. A schema error documents its own body, under JSON, in either format.
6
+ */
7
+ import { compareCodeUnits } from "../schema/canonicalize.js";
8
+ import { statusKeyToCode } from "../response/status.js";
9
+ const NOT_MEDIA = ["headers", "redirect"];
10
+ const LOCATION = { description: "Redirect target URL", schema: { format: "uri", type: "string" } };
11
+ const STRING = { type: "string" };
12
+ const describe = (statusKey) => statusKey.replaceAll("_", " ");
13
+ /** The response at `code`, created with `description` when the route has none there yet. */
14
+ function at(out, code, description) {
15
+ const key = String(code);
16
+ out[key] ??= { description };
17
+ return out[key];
18
+ }
19
+ /** The header objects of an object schema: one per property, required when the schema says. */
20
+ function headersOf(schema) {
21
+ const properties = (schema.properties ?? {});
22
+ const required = (schema.required ?? []);
23
+ return Object.fromEntries(Object.entries(properties).map(([name, property]) => [
24
+ name,
25
+ { required: required.includes(name), schema: property },
26
+ ]));
27
+ }
28
+ /** Every answer `output` declares, with its headers and redirects. */
29
+ export function successResponses(output, convert, hint) {
30
+ const out = {};
31
+ if (output === null)
32
+ return out;
33
+ for (const [media, statuses] of Object.entries(output)) {
34
+ if (NOT_MEDIA.includes(media))
35
+ continue;
36
+ for (const [statusKey, schema] of Object.entries(statuses)) {
37
+ const code = statusKeyToCode[statusKey];
38
+ const response = at(out, code, describe(statusKey));
39
+ response.content ??= {};
40
+ response.content[media] = schema === true ? {} : { schema: convert(schema, "output", hint(code)) };
41
+ }
42
+ }
43
+ for (const statusKey of Object.keys(output.redirect ?? {})) {
44
+ at(out, statusKeyToCode[statusKey], describe(statusKey)).headers = { Location: LOCATION };
45
+ }
46
+ for (const [statusKey, schema] of Object.entries(output.headers ?? {})) {
47
+ const code = statusKeyToCode[statusKey];
48
+ const declared = headersOf(convert(schema, "output", `${hint(code)}Headers`));
49
+ const response = at(out, code, describe(statusKey));
50
+ /* a declared location says more than the default */
51
+ const kept = Object.hasOwn(declared, "location") ? {} : (response.headers ?? {});
52
+ response.headers = { ...kept, ...declared };
53
+ }
54
+ return out;
55
+ }
56
+ const FIELD_ERRORS = {
57
+ additionalProperties: {
58
+ items: {
59
+ properties: { error_key: STRING, message: STRING, path: STRING },
60
+ required: ["error_key", "message", "path"],
61
+ type: "object",
62
+ },
63
+ type: "array",
64
+ },
65
+ type: "object",
66
+ };
67
+ /** honey's envelope, as every standard error answers by default. */
68
+ export function defaultEnvelope() {
69
+ return {
70
+ properties: {
71
+ error_key: { ...STRING },
72
+ fields: structuredClone(FIELD_ERRORS),
73
+ message: { ...STRING },
74
+ status: { type: "integer" },
75
+ status_key: { ...STRING },
76
+ success: { const: false },
77
+ },
78
+ required: ["error_key", "fields", "message", "status", "status_key", "success"],
79
+ type: "object",
80
+ };
81
+ }
82
+ /** `schema` with `error_key` and `status` narrowed to `keys` and `code`, where it has them. */
83
+ function narrowed(schema, keys, code) {
84
+ const out = structuredClone(schema);
85
+ const properties = out.properties;
86
+ if (properties?.error_key !== undefined)
87
+ properties.error_key = { enum: [...keys], type: "string" };
88
+ if (properties?.status !== undefined)
89
+ properties.status = { enum: [code], type: "integer" };
90
+ return out;
91
+ }
92
+ /** A Problem Details document for standard errors `keys` at `code`. */
93
+ function problem(keys, code) {
94
+ return {
95
+ properties: {
96
+ detail: { ...STRING },
97
+ errors: structuredClone(FIELD_ERRORS),
98
+ instance: { ...STRING },
99
+ status: { enum: [code], type: "integer" },
100
+ title: { ...STRING },
101
+ type: { enum: keys.map((key) => `https://honey.dev/errors/${key}`), type: "string" },
102
+ },
103
+ required: ["detail", "status", "title", "type"],
104
+ type: "object",
105
+ };
106
+ }
107
+ const oneOrOneOf = (schemas) => schemas.length === 1 ? schemas[0] : { oneOf: [...schemas] };
108
+ /** Every declared error key, code-unit ordered: its status (null when it has none) and its own schema, converted once. */
109
+ function declaredErrors(errorMeta, convert) {
110
+ const declared = {};
111
+ for (const key of Object.keys(errorMeta).sort(compareCodeUnits)) {
112
+ const { schema, status } = errorMeta[key];
113
+ const entry = { status: status > 0 ? status : null };
114
+ /* a key with a schema always has a status: only an unknown key (no schema) has none */
115
+ if (schema !== null)
116
+ entry.schema = convert(schema, `Error${status}`);
117
+ declared[key] = entry;
118
+ }
119
+ return declared;
120
+ }
121
+ /**
122
+ * Add the errors `errorMeta` names to `responses`, one response per status, each status left to an
123
+ * answer the route declares there itself. A key with no status is not documented as a response.
124
+ * Returns every declared key with its status and own schema: the operation's `x-honey-errors`.
125
+ */
126
+ export function addErrorResponses(responses, errorMeta, settings, convert) {
127
+ const declared = declaredErrors(errorMeta, convert);
128
+ const byStatus = new Map();
129
+ for (const [key, { schema, status }] of Object.entries(declared)) {
130
+ if (status === null || Object.hasOwn(responses, String(status)))
131
+ continue;
132
+ const group = byStatus.get(status) ?? { custom: [], keys: [], standard: [] };
133
+ byStatus.set(status, group);
134
+ group.keys.push(key);
135
+ if (schema === undefined)
136
+ group.standard.push(key);
137
+ else
138
+ group.custom.push(settings.customErrorSchema === null ? schema : { allOf: [schema, settings.customErrorSchema] });
139
+ }
140
+ for (const [code, { custom, keys, standard }] of byStatus) {
141
+ const content = {};
142
+ if (settings.errorFormat === "problem+json") {
143
+ if (standard.length > 0)
144
+ content["application/problem+json"] = { schema: problem(standard, code) };
145
+ if (custom.length > 0)
146
+ content["application/json"] = { schema: oneOrOneOf(custom) };
147
+ }
148
+ else {
149
+ const envelope = standard.length > 0 ? [narrowed(settings.errorSchema ?? defaultEnvelope(), standard, code)] : [];
150
+ content["application/json"] = { schema: oneOrOneOf([...envelope, ...custom]) };
151
+ }
152
+ responses[String(code)] = { content, description: keys.join(", "), "x-honey-error": true };
153
+ }
154
+ return declared;
155
+ }
156
+ /** `responses` keyed in ascending status order: the same bytes however they were declared. */
157
+ export function ordered(responses) {
158
+ return Object.fromEntries(Object.entries(responses).sort(([a], [b]) => Number(a) - Number(b)));
159
+ }
@@ -1,14 +1,4 @@
1
- import type { TypedResponse } from "../response.ts";
2
- type ScalarOptions = {
3
- url: string;
4
- [key: string]: unknown;
5
- };
6
- export declare function scalar(options: ScalarOptions): (ctx: {
7
- res: {
8
- html(sk: "ok", body: string, opts?: {
9
- headers?: Record<string, string>;
10
- }): TypedResponse;
11
- };
12
- }) => TypedResponse;
13
- export {};
14
- //# sourceMappingURL=scalar.d.ts.map
1
+ /** `scalar(config)`: the Scalar API reference page for the document at `config.url`. */
2
+ import type { TypedResponse } from "../response/response.ts";
3
+ import { type DocsConfig, type DocsContext } from "./docs-page.ts";
4
+ export declare function scalar(config: DocsConfig): (ctx: DocsContext) => TypedResponse;
@@ -1,7 +1,6 @@
1
- import { docsPage, escapeAttribute, inlineJson, SCALAR } from "./docs-page.js";
2
- export function scalar(options) {
3
- const { url, ...rest } = options;
4
- const config = inlineJson({ url, ...rest });
1
+ import { docsPage, inlineJson, SCALAR } from "./docs-page.js";
2
+ export function scalar(config) {
3
+ const inline = inlineJson(config);
5
4
  return docsPage((nonce) => `<!DOCTYPE html>
6
5
  <html>
7
6
  <head>
@@ -12,10 +11,9 @@ export function scalar(options) {
12
11
  <body>
13
12
  <div id="app"></div>
14
13
  <script src="${SCALAR.js.url}" integrity="${SCALAR.js.integrity}" crossorigin="anonymous"></script>
15
- <script nonce="${escapeAttribute(nonce)}">
16
- Scalar.createApiReference(document.getElementById("app"), ${config})
14
+ <script nonce="${nonce}">
15
+ Scalar.createApiReference(document.getElementById("app"), ${inline})
17
16
  </script>
18
17
  </body>
19
18
  </html>`);
20
19
  }
21
- //# sourceMappingURL=scalar.js.map
@@ -0,0 +1,4 @@
1
+ import type { EmittedOperation } from "./paths.ts";
2
+ export type SecurityReport = (level: "error" | "warn", message: string) => void;
3
+ /** Report each scheme an operation names that `schemes` does not declare. */
4
+ export declare function checkSecurity(operations: readonly EmittedOperation[], schemes: Readonly<Record<string, unknown>> | undefined, report: SecurityReport): void;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The document's security: the schemes the caller declares, and the check that every scheme an
3
+ * operation's `security` names is among them. Naming an undeclared scheme is an error once schemes
4
+ * are declared; with none declared at all it is only said, since the document may be partial.
5
+ */
6
+ import { securitySchemeNames } from "../meta/meta-spec.js";
7
+ /** Report each scheme an operation names that `schemes` does not declare. */
8
+ export function checkSecurity(operations, schemes, report) {
9
+ const said = new Set();
10
+ for (const { method, operation, path } of operations) {
11
+ for (const name of securitySchemeNames(operation.security)) {
12
+ if (schemes !== undefined && Object.hasOwn(schemes, name))
13
+ continue;
14
+ const where = `${method.toUpperCase()} ${path}`;
15
+ if (schemes === undefined) {
16
+ if (said.has(name))
17
+ continue;
18
+ said.add(name);
19
+ report("warn", `security scheme "${name}" (first used by ${where}) is not declared — pass securitySchemes`);
20
+ }
21
+ else
22
+ report("error", `${where}: security names "${name}", which is not in securitySchemes`);
23
+ }
24
+ }
25
+ }
@@ -1,9 +1,25 @@
1
- import type { ServedArtifact } from "./spec-factory.ts";
2
- /** Serialize `value` once; the result is cached per route epoch by the caller. */
3
- export declare function toServedArtifact(body: string, contentType: string): Promise<ServedArtifact>;
4
- /**
5
- * The response for a served artifact. Clients revalidate (`no-cache`) rather than reuse a stale
6
- * document after a deploy; an unchanged document costs a 304.
7
- */
8
- export declare function artifactResponse(request: Request, artifact: ServedArtifact): Response;
9
- //# sourceMappingURL=serve.d.ts.map
1
+ import { type GenerateOpenApiOptions } from "./generate.ts";
2
+ import { type GenerateManifestOptions } from "./manifest.ts";
3
+ export type ServeOpenApiOptions = Omit<GenerateOpenApiOptions, "info" | "invalidate" | "onSchemaError"> & {
4
+ readonly description?: string;
5
+ /** a docs page for the document, at `docsPath` */
6
+ readonly docs?: "scalar" | "swagger";
7
+ /** `"/docs"` by default */
8
+ readonly docsPath?: string;
9
+ /** `false` mounts nothing */
10
+ readonly enabled?: boolean;
11
+ /** the stem the document is served at, `"/openapi"` by default: `.json`, `.yaml` and `.yml` follow */
12
+ readonly path?: string;
13
+ readonly title: string;
14
+ readonly version: string;
15
+ };
16
+ export type ServeManifestOptions = Omit<GenerateManifestOptions, "visibility"> & {
17
+ /** `false` mounts nothing */
18
+ readonly enabled?: boolean;
19
+ /** `"/manifest.json"` by default */
20
+ readonly path?: string;
21
+ };
22
+ /** Serve the app's OpenAPI document, and a docs page for it when asked, from `app`; returns `app`. */
23
+ export declare function serveOpenApi<A>(app: A, options: ServeOpenApiOptions): A;
24
+ /** Serve the app's published manifest from `app`; returns `app`. */
25
+ export declare function serveManifest<A>(app: A, options?: ServeManifestOptions): A;
@@ -1,36 +1,115 @@
1
1
  /**
2
- * Serving side of `app.openapi()` and `app.manifest()`: serialize a document once, tag it, and
3
- * answer conditional requests. Part of the lazily loaded OpenAPI feature, so none of this sits
4
- * in the core bundle.
2
+ * `serveOpenApi(app, options)` and `serveManifest(app, options?)`: an app serving its own document
3
+ * (JSON at `${path}.json`, the same document as YAML at `.yaml` and `.yml`, and a docs page when
4
+ * asked) and its published manifest. Each is a plain internal GET on the handle it is called on,
5
+ * so the handle's basePath and middleware apply, marked SERVED so it stays with this app. A call
6
+ * mounts all its routes or, when any path is taken, none. Each artifact is built once per route
7
+ * change, a failed build kept for its routes too, and answered with a strong ETag, `no-cache` and a
8
+ * 304 for a matching `If-None-Match`. A served document never runs the invalidate check and
9
+ * documents a schema it cannot convert unconstrained, with a warning.
5
10
  */
6
- import { ifNoneMatchHits } from "../etag.js";
7
- const encoder = new TextEncoder();
8
- /** Base64url of the first 16 bytes of SHA-256, quoted: a strong validator for the exact bytes. */
9
- async function entityTag(body) {
10
- const hash = new Uint8Array(await crypto.subtle.digest("SHA-256", encoder.encode(body))).subarray(0, 16);
11
- let binary = "";
12
- for (let i = 0; i < hash.length; i++)
13
- binary += String.fromCharCode(hash[i]);
14
- return `"${btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "")}"`;
11
+ import { ifNoneMatchHits } from "../response/etag.js";
12
+ import { isStaticPattern, joinPatterns, parsePattern } from "../routing/pattern.js";
13
+ import { assertRouteFree, GRAPH, SERVED, VIEW } from "../routing/register.js";
14
+ import { generateOpenApi } from "./generate.js";
15
+ import { generateManifest } from "./manifest.js";
16
+ import { scalar } from "./scalar.js";
17
+ import { swagger } from "./swagger.js";
18
+ import { toYaml } from "./yaml.js";
19
+ const JSON_TYPE = "application/json; charset=utf-8";
20
+ const YAML_TYPE = "application/yaml; charset=utf-8";
21
+ /** What `build` gives for the graph's routes as they are, built again only once they change; a throw is kept too. */
22
+ function perEpoch(g, build) {
23
+ let cached = null;
24
+ return () => {
25
+ if (cached === null || cached.epoch !== g.epoch) {
26
+ try {
27
+ cached = { epoch: g.epoch, failed: false, value: build() };
28
+ }
29
+ catch (error) {
30
+ /* kept for these routes and thrown on every read below: the boundary answers it */
31
+ cached = { epoch: g.epoch, failed: true, value: error };
32
+ }
33
+ }
34
+ if (cached.failed)
35
+ throw cached.value;
36
+ return cached.value;
37
+ };
15
38
  }
16
- /** Serialize `value` once; the result is cached per route epoch by the caller. */
17
- export async function toServedArtifact(body, contentType) {
18
- return { body, contentType, etag: await entityTag(body) };
39
+ /** `body` with its strong validator: base64url of the first 16 bytes of its SHA-256, quoted. */
40
+ async function artifact(body, contentType) {
41
+ const hash = new Uint8Array(await crypto.subtle.digest("SHA-256", new TextEncoder().encode(body)), 0, 16);
42
+ let binary = "";
43
+ for (const byte of hash)
44
+ binary += String.fromCharCode(byte);
45
+ const tag = btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
46
+ return { body, contentType, etag: `"${tag}"` };
19
47
  }
20
- /**
21
- * The response for a served artifact. Clients revalidate (`no-cache`) rather than reuse a stale
22
- * document after a deploy; an unchanged document costs a 304.
23
- */
24
- export function artifactResponse(request, artifact) {
25
- const headers = {
26
- "cache-control": "no-cache",
27
- "content-type": artifact.contentType,
28
- etag: artifact.etag,
29
- "x-content-type-options": "nosniff",
48
+ /** The answer for `served`: revalidated on every use (`no-cache`), an unchanged one a 304. */
49
+ function answering(served) {
50
+ return async (ctx) => {
51
+ const { body, contentType, etag } = await served();
52
+ const headers = {
53
+ "cache-control": "no-cache",
54
+ "content-type": contentType,
55
+ etag,
56
+ "x-content-type-options": "nosniff",
57
+ };
58
+ const hit = ifNoneMatchHits(ctx.req.headers.get("if-none-match"), etag);
59
+ return ctx.res.raw(hit ? new Response(null, { headers, status: 304 }) : new Response(body, { headers }));
30
60
  };
31
- if (ifNoneMatchHits(request.headers.get("if-none-match"), artifact.etag)) {
32
- return new Response(null, { headers, status: 304 });
61
+ }
62
+ /** `path` under the handle's basePath. */
63
+ const under = (app, path) => joinPatterns(app[VIEW].basePath, path);
64
+ /** Mount every route, or none: each path is checked fixed and free before any is registered. */
65
+ function mountAll(app, routes) {
66
+ const ids = new Set();
67
+ for (const [path] of routes) {
68
+ const segments = parsePattern(under(app, path));
69
+ if (!isStaticPattern(segments))
70
+ throw new Error(`cannot serve at ${path}: a served path is fixed, with no parameter`);
71
+ const id = assertRouteFree(app[GRAPH], "GET", segments);
72
+ if (ids.has(id))
73
+ throw new Error(`Duplicate route: ${id}`);
74
+ ids.add(id);
75
+ }
76
+ for (const [path, handler] of routes)
77
+ app
78
+ .get(path)
79
+ .meta({ internal: true, [SERVED]: true })
80
+ .handler(handler);
81
+ }
82
+ /** Serve the app's OpenAPI document, and a docs page for it when asked, from `app`; returns `app`. */
83
+ export function serveOpenApi(app, options) {
84
+ const { description, docs, docsPath = "/docs", enabled = true, path = "/openapi", title, version, ...rest } = options;
85
+ if (!enabled)
86
+ return app;
87
+ const handle = app;
88
+ const g = handle[GRAPH];
89
+ const info = description === undefined ? { title, version } : { description, title, version };
90
+ const document = perEpoch(g, () => generateOpenApi(handle, { ...rest, info, invalidate: "off", onSchemaError: "warn" }));
91
+ const json = perEpoch(g, () => artifact(JSON.stringify(document()), JSON_TYPE));
92
+ const yaml = perEpoch(g, () => artifact(toYaml(document()), YAML_TYPE));
93
+ const routes = [
94
+ [`${path}.json`, answering(json)],
95
+ [`${path}.yaml`, answering(yaml)],
96
+ [`${path}.yml`, answering(yaml)],
97
+ ];
98
+ if (docs !== undefined) {
99
+ /* the URL the browser sees: the prefix the app strips, then the path it routes */
100
+ const url = `${g.settings.stripPrefix ?? ""}${under(handle, `${path}.json`)}`;
101
+ routes.push([docsPath, (docs === "scalar" ? scalar : swagger)({ url })]);
33
102
  }
34
- return new Response(artifact.body, { headers });
103
+ mountAll(handle, routes);
104
+ return app;
105
+ }
106
+ /** Serve the app's published manifest from `app`; returns `app`. */
107
+ export function serveManifest(app, options = {}) {
108
+ const { enabled = true, path = "/manifest.json", ...rest } = options;
109
+ if (!enabled)
110
+ return app;
111
+ const handle = app;
112
+ const manifest = perEpoch(handle[GRAPH], () => artifact(JSON.stringify(generateManifest(handle, { ...rest, visibility: "published" })), JSON_TYPE));
113
+ mountAll(handle, [[path, answering(manifest)]]);
114
+ return app;
35
115
  }
36
- //# sourceMappingURL=serve.js.map
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The document's servers. With no list, the stripped prefix is the one server (a client sends it,
3
+ * the app strips it). A caller's list replaces that default, the prefix appended to each URL;
4
+ * basePath is in the paths already. A server that cannot be served is refused: each `{var}` is
5
+ * declared and each declared variable used, a default is in its enum, a name is a plain word, and
6
+ * no text holds a stray control character (a URL or description lands verbatim in docs pages and SDKs).
7
+ */
8
+ export type OpenApiServerVariable = {
9
+ readonly default: string;
10
+ readonly description?: string;
11
+ readonly enum?: readonly string[];
12
+ };
13
+ export type OpenApiServer = {
14
+ readonly description?: string;
15
+ readonly url: string;
16
+ readonly variables?: Readonly<Record<string, OpenApiServerVariable>>;
17
+ };
18
+ /** The servers the document lists, each refusal reported through `error`. */
19
+ export declare function serversOf(servers: readonly OpenApiServer[] | undefined, stripPrefix: string | null, error: (message: string) => void): OpenApiServer[];
@@ -0,0 +1,72 @@
1
+ /**
2
+ * The document's servers. With no list, the stripped prefix is the one server (a client sends it,
3
+ * the app strips it). A caller's list replaces that default, the prefix appended to each URL;
4
+ * basePath is in the paths already. A server that cannot be served is refused: each `{var}` is
5
+ * declared and each declared variable used, a default is in its enum, a name is a plain word, and
6
+ * no text holds a stray control character (a URL or description lands verbatim in docs pages and SDKs).
7
+ */
8
+ /* C0, DEL and C1 */
9
+ const CONTROL = /\p{Cc}/u;
10
+ /* a description is CommonMark: tabs and line breaks are its own */
11
+ const STRAY = /(?![\t\n\r])\p{Cc}/u;
12
+ const NAME = /^[A-Za-z0-9_]+$/;
13
+ const VARIABLE = /\{([^{}]*)\}/g;
14
+ /** `url` with `prefix` after it, one slash between them. */
15
+ const prefixed = (url, prefix) => (prefix === null ? url : `${url.replace(/\/+$/, "")}${prefix}`);
16
+ /** Each reason `variable` cannot be served. */
17
+ function variableErrors(name, variable) {
18
+ const errors = [];
19
+ if (!NAME.test(name))
20
+ errors.push("a name is letters, digits and _ only");
21
+ if (CONTROL.test(variable.default))
22
+ errors.push("its default holds a control character");
23
+ if (variable.description !== undefined && STRAY.test(variable.description))
24
+ errors.push("its description holds a control character");
25
+ const values = variable.enum;
26
+ if (values?.length === 0)
27
+ errors.push("an enum must list at least one value");
28
+ else if (values !== undefined && !values.includes(variable.default))
29
+ errors.push(`default "${variable.default}" is not in its enum`);
30
+ if (values?.some((value) => CONTROL.test(value)))
31
+ errors.push("its enum holds a control character");
32
+ return errors.map((reason) => `variable "${name}": ${reason}`);
33
+ }
34
+ /** Each reason `server` cannot be served. */
35
+ function serverErrors(server) {
36
+ const errors = [];
37
+ if (CONTROL.test(server.url))
38
+ errors.push("the URL holds a control character");
39
+ if (server.description !== undefined && STRAY.test(server.description))
40
+ errors.push("the description holds a control character");
41
+ if (/[{}]/.test(server.url.replaceAll(VARIABLE, "")))
42
+ errors.push("the URL has an unmatched brace");
43
+ const used = new Set([...server.url.matchAll(VARIABLE)].map((match) => match[1]));
44
+ const variables = server.variables ?? {};
45
+ for (const name of used) {
46
+ if (!Object.hasOwn(variables, name))
47
+ errors.push(`{${name}} is not declared in variables`);
48
+ }
49
+ for (const [name, variable] of Object.entries(variables)) {
50
+ if (!used.has(name))
51
+ errors.push(`variable "${name}" is declared but not used in the URL`);
52
+ errors.push(...variableErrors(name, variable));
53
+ }
54
+ return errors;
55
+ }
56
+ /** The servers the document lists, each refusal reported through `error`. */
57
+ export function serversOf(servers, stripPrefix, error) {
58
+ if (servers === undefined)
59
+ return stripPrefix === null ? [] : [{ url: stripPrefix }];
60
+ return servers.map((server, i) => {
61
+ for (const reason of serverErrors(server))
62
+ error(`server ${i + 1} (${JSON.stringify(server.url)}): ${reason}`);
63
+ const out = {
64
+ url: prefixed(server.url, stripPrefix),
65
+ };
66
+ if (server.description !== undefined)
67
+ out.description = server.description;
68
+ if (server.variables !== undefined)
69
+ out.variables = structuredClone(server.variables);
70
+ return out;
71
+ });
72
+ }
@@ -1,14 +1,4 @@
1
- import type { TypedResponse } from "../response.ts";
2
- type SwaggerOptions = {
3
- url: string;
4
- [key: string]: unknown;
5
- };
6
- export declare function swagger(options: SwaggerOptions): (ctx: {
7
- res: {
8
- html(sk: "ok", body: string, opts?: {
9
- headers?: Record<string, string>;
10
- }): TypedResponse;
11
- };
12
- }) => TypedResponse;
13
- export {};
14
- //# sourceMappingURL=swagger.d.ts.map
1
+ /** `swagger(config)`: the Swagger UI page for the document at `config.url`. */
2
+ import type { TypedResponse } from "../response/response.ts";
3
+ import { type DocsConfig, type DocsContext } from "./docs-page.ts";
4
+ export declare function swagger(config: DocsConfig): (ctx: DocsContext) => TypedResponse;
@@ -1,7 +1,6 @@
1
- import { docsPage, escapeAttribute, inlineJson, SWAGGER_UI } from "./docs-page.js";
2
- export function swagger(options) {
3
- const { url, ...rest } = options;
4
- const config = inlineJson({ dom_id: "#swagger-ui", url, ...rest });
1
+ import { docsPage, inlineJson, SWAGGER_UI } from "./docs-page.js";
2
+ export function swagger(config) {
3
+ const inline = inlineJson({ dom_id: "#swagger-ui", ...config });
5
4
  return docsPage((nonce) => `<!DOCTYPE html>
6
5
  <html>
7
6
  <head>
@@ -13,10 +12,9 @@ export function swagger(options) {
13
12
  <body>
14
13
  <div id="swagger-ui"></div>
15
14
  <script src="${SWAGGER_UI.js.url}" integrity="${SWAGGER_UI.js.integrity}" crossorigin="anonymous"></script>
16
- <script nonce="${escapeAttribute(nonce)}">
17
- SwaggerUIBundle(${config})
15
+ <script nonce="${nonce}">
16
+ SwaggerUIBundle(${inline})
18
17
  </script>
19
18
  </body>
20
19
  </html>`);
21
20
  }
22
- //# sourceMappingURL=swagger.js.map