@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,1066 +0,0 @@
1
- /* Go CLI emitter — generates a complete cobra-based Go CLI module from an OpenAPI 3.1 spec.
2
- *
3
- * - Input is the SDK request model (codegen-sdk-model.ts), shared with the Go SDK emitter.
4
- * - Static runtime files (config.go, auth.go, output.go, errors.go, stream.go, multipart.go,
5
- * version.go, root.go) are read from ./cli-go/ and copied verbatim under "internal/cli/".
6
- * - Per-resource cobra command files are emitted as cmd/<resource>.go.
7
- * - URLs, query encoding, SSE parsing and status errors go through the SDK's exported
8
- * Honey* helpers, so the CLI sends exactly what the SDK sends.
9
- *
10
- * Two SDK wiring modes:
11
- * - sdkModulePath set → go.mod emits `require` + `replace`; no internal/sdk/ files.
12
- * - sdkModulePath omitted → client-go/* + generated types.go + client.go embedded under
13
- * internal/sdk/; emitted imports use "<modulePath>/internal/sdk".
14
- */
15
-
16
- import { readFileSync } from "node:fs"
17
- import { fileURLToPath } from "node:url"
18
- import type { OpenApiSpecInput } from "./codegen.ts"
19
- import { serviceMapOf } from "./codegen.ts"
20
- import { GO_KEYWORDS, GO_PREDECLARED, NameScope, cmpCodeUnit, goExported, goLocal, goString } from "./codegen-lang.ts"
21
- import type { IRInfo, IRParam, IRSchema } from "./codegen-ir.ts"
22
- import { buildSdkModel } from "./codegen-sdk-model.ts"
23
- import type { SdkModel, SdkOp } from "./codegen-sdk-model.ts"
24
- import { generateGoSDK } from "./codegen-go.ts"
25
-
26
- const DEFAULT_MODULE_PATH = "example.com/cli"
27
-
28
- function resolveModulePath(options: GoCLIOptions): string {
29
- return options.modulePath ?? DEFAULT_MODULE_PATH
30
- }
31
-
32
- /* ── types ── */
33
-
34
- export type GoCLIOptions = {
35
- binaryName: string
36
- modulePath?: string
37
- sdkModulePath?: string
38
- envPrefix?: string
39
- configName?: string
40
- defaultBaseURL?: string
41
- description?: string
42
- }
43
-
44
- export type GeneratedGoCLI = {
45
- files: Record<string, string>
46
- serviceMap: Record<string, Record<string, unknown>>
47
- skippedOperations: string[]
48
- }
49
-
50
- type FlagKind = "string" | "int" | "float" | "bool" | "strings"
51
-
52
- type Flag = {
53
- /** Wire name of the param / property. */
54
- name: string
55
- flagName: string
56
- varName: string
57
- kind: FlagKind
58
- required: boolean
59
- enumValues: string[]
60
- defaultValue: unknown
61
- where: "path" | "query" | "header" | "body" | "file"
62
- }
63
-
64
- type BodyShape =
65
- | { kind: "none" }
66
- | { kind: "json-flat"; scalars: Flag[]; required: boolean; dataVar: string }
67
- | { kind: "json-complex"; required: boolean; dataVar: string }
68
- | { kind: "form"; scalars: Flag[]; required: boolean }
69
- | { kind: "multipart"; scalars: Flag[]; files: Flag[] }
70
- | { kind: "raw"; contentType: string; required: boolean; dataVar: string }
71
-
72
- type CommandInfo = {
73
- op: SdkOp
74
- cmdVarName: string
75
- cmdUse: string
76
- pathFlags: Flag[]
77
- queryFlags: Flag[]
78
- headerFlags: Flag[]
79
- body: BodyShape
80
- lastEventIdVar?: string
81
- }
82
-
83
- type ResourceGroup = {
84
- resource: string
85
- cmdUse: string
86
- /** prefix for per-command var names */
87
- cmdVarBase: string
88
- /** the resource's own cobra.Command var */
89
- groupVar: string
90
- fileName: string
91
- commands: CommandInfo[]
92
- }
93
-
94
- /* ── case transforms ── */
95
-
96
- /** Converts camelCase / snake_case / acronyms to kebab-case (e.g. "APIKey" → "api-key"). */
97
- export function toKebab(s: string): string {
98
- if (!s) return s
99
- return s
100
- .replace(/([A-Z]+)([A-Z][a-z])/g, "$1-$2")
101
- .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
102
- .replace(/[^A-Za-z0-9]+/g, "-")
103
- .replace(/^-+|-+$/g, "")
104
- .toLowerCase()
105
- }
106
-
107
- export function toFlagName(paramName: string): string {
108
- return toKebab(paramName) || "value"
109
- }
110
-
111
- /** Upper snake case for env var: toSnakeUpper("project-id") → "PROJECT_ID". */
112
- function toSnakeUpper(s: string): string {
113
- return toKebab(s).toUpperCase().replace(/-/g, "_")
114
- }
115
-
116
- export function envVarFromFlag(flagName: string, envPrefix: string): string {
117
- return `${envPrefix}_${toSnakeUpper(flagName)}`
118
- }
119
-
120
- /* ── runtime template loader ── */
121
-
122
- let runtimeCache: Map<string, string> | null = null
123
-
124
- /** Reads static .go runtime files from ./cli-go/ and caches them. */
125
- export function loadGoCliRuntimeTemplates(): Map<string, string> {
126
- if (runtimeCache) return runtimeCache
127
- const names = ["config.go", "auth.go", "output.go", "errors.go", "stream.go", "multipart.go", "version.go", "root.go"]
128
- const cache = new Map<string, string>()
129
- for (const name of names) {
130
- const filePath = fileURLToPath(new URL(`./cli-go/${name}`, import.meta.url))
131
- let content: string
132
- try {
133
- content = readFileSync(filePath, "utf8")
134
- } catch {
135
- throw new Error(`loadGoCliRuntimeTemplates: missing file ${filePath}`)
136
- }
137
- cache.set(name, content)
138
- }
139
- runtimeCache = cache
140
- return cache
141
- }
142
-
143
- /* ── naming ── */
144
-
145
- /** Persistent flags on the root command, plus cobra's own. A command flag must not shadow them. */
146
- const GLOBAL_FLAGS = ["api-key", "base-url", "output", "verbose", "config", "timeout", "help", "version"]
147
-
148
- /** Identifiers every cmd/*.go file shares: imports and the package-level names root.go declares. */
149
- const CMD_PACKAGE_NAMES = [
150
- ...GO_KEYWORDS,
151
- ...GO_PREDECLARED,
152
- "rootCmd",
153
- "Execute",
154
- "configFromCtx",
155
- "configKey",
156
- "runtimeConfig",
157
- "EnvPrefix",
158
- "ConfigName",
159
- "DefaultBaseURL",
160
- "AuthHeaderName",
161
- "AuthHeaderPrefix",
162
- "newHTTPClient",
163
- "doJSON",
164
- "init",
165
- ]
166
-
167
- /** File stems Go treats specially, or that the generator writes itself. */
168
- const GOOS_GOARCH =
169
- /_(aix|android|darwin|dragonfly|freebsd|hurd|illumos|ios|js|linux|nacl|netbsd|openbsd|plan9|solaris|wasip1|windows|zos|386|amd64|arm|arm64|loong64|mips|mipsle|mips64|mips64le|ppc64|ppc64le|riscv64|s390x|wasm|test)$/
170
-
171
- function resourceFileName(resource: string, taken: NameScope): string {
172
- let stem = resource.replace(/[^A-Za-z0-9_-]/g, "_").replace(/^[-_.]+/, "")
173
- if (stem === "" || /^(root|main|doc)$/i.test(stem) || GOOS_GOARCH.test(stem.toLowerCase())) stem = `res_${stem}`
174
- return `${taken.claim(stem)}.go`
175
- }
176
-
177
- function flagKind(schema: IRSchema, resolve: (s: IRSchema) => IRSchema): FlagKind {
178
- let s = resolve(schema)
179
- if (s.kind === "nullable") s = resolve(s.inner)
180
- if (s.kind === "array") {
181
- return "strings"
182
- }
183
- if (s.kind === "scalar") {
184
- if (s.type === "integer") return "int"
185
- if (s.type === "number") return "float"
186
- if (s.type === "boolean") return "bool"
187
- }
188
- if (s.kind === "const" && typeof s.value === "boolean") return "bool"
189
- return "string"
190
- }
191
-
192
- function enumOf(schema: IRSchema, resolve: (s: IRSchema) => IRSchema): string[] {
193
- let s = resolve(schema)
194
- if (s.kind === "nullable") s = resolve(s.inner)
195
- if (s.kind === "scalar" && s.enum) return s.enum.map(String)
196
- return []
197
- }
198
-
199
- function isScalarSchema(schema: IRSchema, resolve: (s: IRSchema) => IRSchema): boolean {
200
- let s = resolve(schema)
201
- if (s.kind === "nullable") s = resolve(s.inner)
202
- return s.kind === "scalar" || s.kind === "const"
203
- }
204
-
205
- /** Go literal for a flag default, or the zero value. */
206
- function flagDefault(f: Flag): string {
207
- const d = f.defaultValue
208
- switch (f.kind) {
209
- case "int":
210
- return typeof d === "number" && Number.isInteger(d) ? String(d) : "0"
211
- case "float":
212
- return typeof d === "number" && Number.isFinite(d) ? String(d) : "0"
213
- case "bool":
214
- return d === true ? "true" : "false"
215
- case "strings":
216
- return Array.isArray(d) ? `[]string{${d.map((x) => goString(String(x))).join(", ")}}` : "nil"
217
- default:
218
- return typeof d === "string" ? goString(d) : `""`
219
- }
220
- }
221
-
222
- /* ── command collection ── */
223
-
224
- function collectCLIMethods(model: SdkModel, pkg: NameScope): { groups: Map<string, ResourceGroup>; skipped: string[] } {
225
- const groups = new Map<string, ResourceGroup>()
226
- const skipped: string[] = []
227
- const seenCmdPaths = new Map<string, string>()
228
- const fileNames = new NameScope(["root", "main"], (n) => n.toLowerCase())
229
- const { resolve } = model
230
-
231
- for (const op of model.ops) {
232
- if (op.stream === "ws" || op.stream === "realtime") {
233
- skipped.push(op.id)
234
- continue
235
- }
236
-
237
- const segments = op.segments
238
- const resource = segments[0] ?? op.id
239
- /* Top-level ops (single segment) become `<resource> call` — cobra rejects leading dashes. */
240
- const actionSegments = segments.length === 1 ? ["call"] : segments.slice(1).map((seg) => toKebab(seg))
241
- const cmdUse = actionSegments.join("-")
242
-
243
- /* collision check: (resource, cmdUse) must be unique */
244
- const key = `${resource}|${cmdUse}`
245
- const prior = seenCmdPaths.get(key)
246
- if (prior !== undefined) {
247
- throw new Error(
248
- `go-cli codegen: command path collision for ${resource} ${cmdUse} — operations: ${prior}, ${op.id}`,
249
- )
250
- }
251
- seenCmdPaths.set(key, op.id)
252
-
253
- let group = groups.get(resource)
254
- if (!group) {
255
- const cmdVarBase = goLocal(resource)
256
- group = {
257
- cmdUse: toKebab(resource) || "resource",
258
- cmdVarBase,
259
- groupVar: pkg.claim(`${cmdVarBase}Cmd`),
260
- commands: [],
261
- fileName: resourceFileName(resource, fileNames),
262
- resource,
263
- }
264
- groups.set(resource, group)
265
- }
266
-
267
- const cmdVarName = pkg.claim(`${group.cmdVarBase}${goExported(cmdUse)}Cmd`)
268
- const flagScope = new NameScope(GLOBAL_FLAGS)
269
- const varFor = (flag: string) => pkg.claim(`${cmdVarName}${goExported(flag)}Var`)
270
- const claimFlag = (name: string, prefix: string): string => {
271
- const base = toFlagName(name)
272
- return flagScope.has(base) ? flagScope.claim(`${prefix}-${base}`) : flagScope.claim(base)
273
- }
274
- const mkFlag = (p: IRParam, where: Flag["where"], prefix: string): Flag => {
275
- const flagName = claimFlag(p.name, prefix)
276
- return {
277
- defaultValue: where === "query" || where === "header" ? p.default : undefined,
278
- enumValues: enumOf(p.schema, resolve),
279
- flagName,
280
- kind: flagKind(p.schema, resolve),
281
- name: p.name,
282
- required: where === "path" || p.required === true,
283
- varName: varFor(flagName),
284
- where,
285
- }
286
- }
287
-
288
- /* path flags claim first: a path param keeps its plain flag name */
289
- const pathFlags = op.pathParams.map((p) => ({ ...mkFlag(p, "path", "path"), kind: "string" as const }))
290
- const queryFlags: Flag[] = []
291
- let lastEventIdVar: string | undefined
292
- for (const q of op.query) {
293
- if (op.stream === "sse" && /^last[-_]?event[-_]?id$/i.test(q.name)) continue
294
- queryFlags.push(mkFlag(q, "query", "query"))
295
- }
296
- const headerFlags = op.headers.map((h) => mkFlag(h, "header", "header"))
297
- if (op.stream === "sse") {
298
- const flagName = flagScope.claim("last-event-id")
299
- lastEventIdVar = varFor(flagName)
300
- }
301
-
302
- let body: BodyShape = { kind: "none" }
303
- const b = op.body
304
- if (b) {
305
- const scalarFlags = (schema: IRSchema): Flag[] | null => {
306
- const s = resolve(schema)
307
- if (s.kind !== "object") return null
308
- const out: Flag[] = []
309
- for (const f of s.fields) {
310
- if (!isScalarSchema(f.schema, resolve)) return null
311
- out.push(mkFlag({ name: f.name, required: false, schema: f.schema }, "body", "body"))
312
- }
313
- return out
314
- }
315
- if (b.kind === "json") {
316
- const dataFlag = flagScope.claim("data")
317
- const dataVar = varFor(dataFlag)
318
- const scalars = scalarFlags(b.schema)
319
- body = scalars
320
- ? { dataVar, kind: "json-flat", required: b.required, scalars }
321
- : { dataVar, kind: "json-complex", required: b.required }
322
- } else if (b.kind === "form") {
323
- body = { kind: "form", required: b.required, scalars: scalarFlags(b.schema) ?? [] }
324
- } else if (b.kind === "multipart") {
325
- const scalars: Flag[] = []
326
- const files: Flag[] = []
327
- const fileParts = b.parts.filter((p) => p.type === "file")
328
- for (const part of b.parts) {
329
- if (part.type === "file") {
330
- const flagName = fileParts.length === 1 ? flagScope.claim("file") : claimFlag(part.name, "file")
331
- files.push({
332
- defaultValue: undefined,
333
- enumValues: [],
334
- flagName,
335
- kind: "string",
336
- name: part.name,
337
- required: fileParts.length === 1 && b.required,
338
- varName: varFor(flagName),
339
- where: "file",
340
- })
341
- } else if (part.schema && isScalarSchema(part.schema, resolve)) {
342
- scalars.push(mkFlag({ name: part.name, required: false, schema: part.schema }, "body", "body"))
343
- }
344
- }
345
- body = { files, kind: "multipart", scalars }
346
- } else {
347
- const dataFlag = flagScope.claim("data")
348
- body = { contentType: b.contentType, dataVar: varFor(dataFlag), kind: "raw", required: b.required }
349
- }
350
- }
351
-
352
- group.commands.push({ body, cmdUse, cmdVarName, headerFlags, lastEventIdVar, op, pathFlags, queryFlags })
353
- }
354
-
355
- return { groups, skipped }
356
- }
357
-
358
- /* ── emit: cmd/root.go ── */
359
-
360
- function emitRootFile(
361
- groups: ResourceGroup[],
362
- options: GoCLIOptions,
363
- auth: { headerName: string; prefix: string },
364
- ): string {
365
- const envPrefix = options.envPrefix ?? toSnakeUpper(options.binaryName)
366
- const configName = options.configName ?? options.binaryName
367
- const defaultBase = options.defaultBaseURL ?? ""
368
-
369
- const l: string[] = []
370
- l.push(`// Code generated by honey. DO NOT EDIT.`)
371
- l.push(`package cmd`)
372
- l.push(``)
373
- l.push(`import (`)
374
- l.push(`\t"context"`)
375
- l.push(`\t"fmt"`)
376
- l.push(`\t"net/http"`)
377
- l.push(`\t"time"`)
378
- l.push(``)
379
- l.push(`\t"github.com/spf13/cobra"`)
380
- l.push(``)
381
- l.push(`\tcli ${goString(cliImportPath(options))}`)
382
- l.push(`)`)
383
- l.push(``)
384
- l.push(`// EnvPrefix is the prefix used for all <PREFIX>_<FLAG> environment variables.`)
385
- l.push(`const EnvPrefix = ${goString(envPrefix)}`)
386
- l.push(``)
387
- l.push(`// ConfigName is the directory name under $XDG_CONFIG_HOME / ~/.config for the config file.`)
388
- l.push(`const ConfigName = ${goString(configName)}`)
389
- l.push(``)
390
- l.push(`// DefaultBaseURL is used when neither --base-url, env var, nor the config file provide one.`)
391
- l.push(`const DefaultBaseURL = ${goString(defaultBase)}`)
392
- l.push(``)
393
- l.push(`// AuthHeaderName and AuthHeaderPrefix come from the API's security scheme.`)
394
- l.push(`const AuthHeaderName = ${goString(auth.headerName)}`)
395
- l.push(``)
396
- l.push(`const AuthHeaderPrefix = ${goString(auth.prefix)}`)
397
- l.push(``)
398
- l.push(`type configKey struct{}`)
399
- l.push(``)
400
- l.push(`// runtimeConfig is the resolved CLI config stashed on the cobra context.`)
401
- l.push(`type runtimeConfig struct {`)
402
- l.push(`\tCfg cli.Config`)
403
- l.push(`}`)
404
- l.push(``)
405
- l.push(`// started is set once flags, args and required flags are valid; any error`)
406
- l.push(`// before that is a usage error (exit 4), whatever cobra calls it.`)
407
- l.push(`var started bool`)
408
- l.push(``)
409
- l.push(`// rootCmd is the top-level cobra command for the CLI.`)
410
- l.push(`var rootCmd = &cobra.Command{`)
411
- l.push(`\tUse: ${goString(options.binaryName)},`)
412
- l.push(`\tShort: ${goString(options.description ?? `${options.binaryName} CLI`)},`)
413
- l.push(`\tVersion: cli.Version,`)
414
- l.push(`\tSilenceUsage: true,`)
415
- l.push(`\tSilenceErrors: true,`)
416
- l.push(`\tPersistentPreRunE: func(cmd *cobra.Command, args []string) error {`)
417
- l.push(`\t\t/* cobra checks required flags only after this hook, so a missing one would`)
418
- l.push(`\t\t surface as a generic error (exit 3): check them here, as usage errors */`)
419
- l.push(`\t\tif err := cmd.ValidateRequiredFlags(); err != nil {`)
420
- l.push(`\t\t\treturn cli.Usage(err)`)
421
- l.push(`\t\t}`)
422
- l.push(`\t\tif err := cmd.ValidateFlagGroups(); err != nil {`)
423
- l.push(`\t\t\treturn cli.Usage(err)`)
424
- l.push(`\t\t}`)
425
- l.push(`\t\tstarted = true`)
426
- l.push(`\t\tcfg, err := cli.LoadConfig(cmd.Flags(), EnvPrefix, ConfigName)`)
427
- l.push(`\t\tif err != nil {`)
428
- l.push(`\t\t\treturn err`)
429
- l.push(`\t\t}`)
430
- l.push(`\t\tif cfg.BaseURL == "" {`)
431
- l.push(`\t\t\tcfg.BaseURL = DefaultBaseURL`)
432
- l.push(`\t\t}`)
433
- l.push(`\t\tif _, err := time.ParseDuration(cfg.Timeout); err != nil {`)
434
- l.push(`\t\t\treturn cli.Usage(err)`)
435
- l.push(`\t\t}`)
436
- l.push(`\t\tctx := context.WithValue(cmd.Context(), configKey{}, runtimeConfig{Cfg: cfg})`)
437
- l.push(`\t\tcmd.SetContext(ctx)`)
438
- l.push(`\t\treturn nil`)
439
- l.push(`\t},`)
440
- l.push(`}`)
441
- l.push(``)
442
- l.push(`// Execute runs the root command.`)
443
- l.push(`func Execute() error {`)
444
- l.push(`\terr := rootCmd.Execute()`)
445
- l.push(`\tif err != nil && !started {`)
446
- l.push(`\t\treturn cli.Usage(err)`)
447
- l.push(`\t}`)
448
- l.push(`\treturn err`)
449
- l.push(`}`)
450
- l.push(``)
451
- l.push(`// groupRun shows a bare group's help and rejects an unknown subcommand as a`)
452
- l.push(`// usage error (cobra would print help and exit 0).`)
453
- l.push(`func groupRun(cmd *cobra.Command, args []string) error {`)
454
- l.push(`\tif len(args) > 0 {`)
455
- l.push(`\t\treturn cli.Usage(fmt.Errorf("unknown command %q for %q", args[0], cmd.CommandPath()))`)
456
- l.push(`\t}`)
457
- l.push(`\treturn cmd.Help()`)
458
- l.push(`}`)
459
- l.push(``)
460
- l.push(`func configFromCtx(ctx context.Context) cli.Config {`)
461
- l.push(`\tif v, ok := ctx.Value(configKey{}).(runtimeConfig); ok {`)
462
- l.push(`\t\treturn v.Cfg`)
463
- l.push(`\t}`)
464
- l.push(`\treturn cli.Config{}`)
465
- l.push(`}`)
466
- l.push(``)
467
- l.push(`// newHTTPClient returns a client without an overall timeout: regular calls`)
468
- l.push(`// bound themselves with --timeout, streams and uploads do not.`)
469
- l.push(`func newHTTPClient() *http.Client {`)
470
- l.push(`\treturn &http.Client{`)
471
- l.push(`\t\tCheckRedirect: func(req *http.Request, via []*http.Request) error {`)
472
- l.push(`\t\t\t/* never forward the API key to another host */`)
473
- l.push(`\t\t\tif len(via) >= 10 || req.URL.Host != via[0].URL.Host || req.URL.Scheme != via[0].URL.Scheme {`)
474
- l.push(`\t\t\t\treturn http.ErrUseLastResponse`)
475
- l.push(`\t\t\t}`)
476
- l.push(`\t\t\treturn nil`)
477
- l.push(`\t\t},`)
478
- l.push(`\t}`)
479
- l.push(`}`)
480
- l.push(``)
481
- l.push(`func init() {`)
482
- l.push(
483
- `\trootCmd.PersistentFlags().String("api-key", "", "API key (overrides env + config file; visible to other local users in the process list, prefer the env var)")`,
484
- )
485
- l.push(`\trootCmd.PersistentFlags().String("base-url", "", "Override API base URL")`)
486
- l.push(`\trootCmd.PersistentFlags().String("output", "json", "Output mode: json|ndjson|yaml|table")`)
487
- l.push(`\trootCmd.PersistentFlags().Bool("verbose", false, "Print request metadata to stderr")`)
488
- l.push(`\trootCmd.PersistentFlags().String("config", "", "Path to config file")`)
489
- l.push(
490
- `\trootCmd.PersistentFlags().String("timeout", "30s", "Request timeout (Go duration); streams are not bounded")`,
491
- )
492
- l.push(`\trootCmd.SetFlagErrorFunc(func(cmd *cobra.Command, err error) error {`)
493
- l.push(`\t\treturn cli.Usage(err)`)
494
- l.push(`\t})`)
495
- for (const g of groups) l.push(`\trootCmd.AddCommand(${g.groupVar})`)
496
- l.push(`}`)
497
- l.push(``)
498
- return l.join("\n")
499
- }
500
-
501
- function cliImportPath(options: GoCLIOptions): string {
502
- return `${resolveModulePath(options)}/internal/cli`
503
- }
504
-
505
- function sdkImportPath(options: GoCLIOptions): string {
506
- if (options.sdkModulePath) return options.sdkModulePath
507
- return `${resolveModulePath(options)}/internal/sdk`
508
- }
509
-
510
- /* ── emit: cmd/<resource>.go ── */
511
-
512
- function emitResourceFile(group: ResourceGroup, options: GoCLIOptions): string {
513
- const body: string[] = []
514
-
515
- const resShort = group.commands[0]?.op.summary || `${group.cmdUse} commands`
516
- body.push(`var ${group.groupVar} = &cobra.Command{`)
517
- body.push(`\tUse: ${goString(group.cmdUse)},`)
518
- body.push(`\tShort: ${goString(firstLine(resShort))},`)
519
- body.push(`\tArgs: cobra.ArbitraryArgs,`)
520
- body.push(`\tRunE: groupRun,`)
521
- body.push(`}`)
522
- body.push(``)
523
-
524
- for (const cmd of group.commands) emitCommand(body, cmd)
525
-
526
- /* init() wires subcommands + registers their flags */
527
- body.push(`func init() {`)
528
- for (const cmd of group.commands) body.push(`\t${group.groupVar}.AddCommand(${cmd.cmdVarName})`)
529
- for (const cmd of group.commands) emitFlagRegistrations(body, cmd)
530
- body.push(`}`)
531
- body.push(``)
532
-
533
- const src = body.join("\n")
534
- const imports: string[] = []
535
- const uses = (re: RegExp) => re.test(src)
536
- if (uses(/\bcontext\./)) imports.push("context")
537
- if (uses(/\bbytes\./)) imports.push("bytes")
538
- if (uses(/\bjson\./)) imports.push("encoding/json")
539
- if (uses(/\berrors\./)) imports.push("errors")
540
- if (uses(/\bfmt\./)) imports.push("fmt")
541
- if (uses(/\bio\./)) imports.push("io")
542
- if (uses(/\bhttp\./)) imports.push("net/http")
543
- if (uses(/\burl\./)) imports.push("net/url")
544
- if (uses(/\bos\./)) imports.push("os")
545
- if (uses(/\bslices\./)) imports.push("slices")
546
- if (uses(/\bstrconv\./)) imports.push("strconv")
547
- if (uses(/\bstrings\./)) imports.push("strings")
548
- if (uses(/\btime\./)) imports.push("time")
549
-
550
- const l: string[] = []
551
- l.push(`// Code generated by honey. DO NOT EDIT.`)
552
- l.push(`package cmd`)
553
- l.push(``)
554
- l.push(`import (`)
555
- for (const p of imports.sort(cmpCodeUnit)) l.push(`\t"${p}"`)
556
- l.push(``)
557
- l.push(`\t"github.com/spf13/cobra"`)
558
- l.push(``)
559
- l.push(`\tcli ${goString(cliImportPath(options))}`)
560
- if (uses(/\bsdk\./)) l.push(`\tsdk ${goString(sdkImportPath(options))}`)
561
- l.push(`)`)
562
- l.push(``)
563
- l.push(src)
564
- return l.join("\n")
565
- }
566
-
567
- function firstLine(s: string): string {
568
- return s.split(/\r\n|\r|\n/)[0] ?? ""
569
- }
570
-
571
- function allFlags(cmd: CommandInfo): Flag[] {
572
- const out = [...cmd.pathFlags, ...cmd.queryFlags, ...cmd.headerFlags]
573
- if (cmd.body.kind === "json-flat" || cmd.body.kind === "form") out.push(...cmd.body.scalars)
574
- if (cmd.body.kind === "multipart") out.push(...cmd.body.scalars, ...cmd.body.files)
575
- return out
576
- }
577
-
578
- function goVarType(kind: FlagKind): string {
579
- switch (kind) {
580
- case "int":
581
- return "int64"
582
- case "float":
583
- return "float64"
584
- case "bool":
585
- return "bool"
586
- case "strings":
587
- return "[]string"
588
- default:
589
- return "string"
590
- }
591
- }
592
-
593
- /** Emits var declarations for every flag-backing Go variable + the cobra.Command literal. */
594
- function emitCommand(l: string[], cmd: CommandInfo): void {
595
- for (const f of allFlags(cmd)) l.push(`var ${f.varName} ${goVarType(f.kind)}`)
596
- if (cmd.body.kind === "json-flat" || cmd.body.kind === "json-complex" || cmd.body.kind === "raw") {
597
- l.push(`var ${cmd.body.dataVar} string`)
598
- }
599
- if (cmd.lastEventIdVar) l.push(`var ${cmd.lastEventIdVar} string`)
600
- l.push(``)
601
-
602
- const shortDesc = firstLine(cmd.op.summary) || cmd.cmdUse
603
- l.push(`var ${cmd.cmdVarName} = &cobra.Command{`)
604
- l.push(`\tUse: ${goString(cmd.cmdUse)},`)
605
- l.push(`\tShort: ${goString(shortDesc)},`)
606
- if (cmd.op.description) l.push(`\tLong: ${goString(cmd.op.description)},`)
607
-
608
- const preRunELines = emitPreRunE(cmd)
609
- if (preRunELines.length > 0) {
610
- l.push(`\tPreRunE: func(cmd *cobra.Command, args []string) error {`)
611
- for (const line of preRunELines) l.push(`\t\t${line}`)
612
- l.push(`\t\treturn nil`)
613
- l.push(`\t},`)
614
- }
615
-
616
- l.push(`\tRunE: func(cmd *cobra.Command, args []string) error {`)
617
- emitRunE(l, cmd)
618
- l.push(`\t},`)
619
- l.push(`}`)
620
- l.push(``)
621
- }
622
-
623
- function emitFlagRegistrations(l: string[], cmd: CommandInfo): void {
624
- const c = cmd.cmdVarName
625
- for (const f of allFlags(cmd)) {
626
- let help: string
627
- switch (f.where) {
628
- case "path":
629
- help = `Path parameter ${f.name}`
630
- break
631
- case "query":
632
- help = `Query param ${f.name}`
633
- break
634
- case "header":
635
- help = `Header ${f.name}`
636
- break
637
- case "file":
638
- help = `Path to the ${f.name} file to upload`
639
- break
640
- default:
641
- help = `Body field ${f.name}`
642
- }
643
- if (f.enumValues.length > 0) help += ` (one of: ${f.enumValues.join(", ")})`
644
- const h = goString(help)
645
- const n = goString(f.flagName)
646
- const def = flagDefault(f)
647
- switch (f.kind) {
648
- case "int":
649
- l.push(`\t${c}.Flags().Int64Var(&${f.varName}, ${n}, ${def}, ${h})`)
650
- break
651
- case "float":
652
- l.push(`\t${c}.Flags().Float64Var(&${f.varName}, ${n}, ${def}, ${h})`)
653
- break
654
- case "bool":
655
- l.push(`\t${c}.Flags().BoolVar(&${f.varName}, ${n}, ${def}, ${h})`)
656
- break
657
- case "strings":
658
- l.push(`\t${c}.Flags().StringSliceVar(&${f.varName}, ${n}, ${def}, ${h})`)
659
- break
660
- default:
661
- l.push(`\t${c}.Flags().StringVar(&${f.varName}, ${n}, ${def}, ${h})`)
662
- }
663
- if (f.required) l.push(`\t${c}.MarkFlagRequired(${n})`)
664
- }
665
- if (cmd.body.kind === "json-flat" || cmd.body.kind === "json-complex" || cmd.body.kind === "raw") {
666
- l.push(`\t${c}.Flags().StringVar(&${cmd.body.dataVar}, "data", "", "Request body: literal, @file, or - for stdin")`)
667
- }
668
- if (cmd.lastEventIdVar) {
669
- l.push(`\t${c}.Flags().StringVar(&${cmd.lastEventIdVar}, "last-event-id", "", "SSE Last-Event-ID resume token")`)
670
- }
671
- }
672
-
673
- function emitPreRunE(cmd: CommandInfo): string[] {
674
- const lines: string[] = []
675
- if (
676
- (cmd.body.kind === "json-flat" || cmd.body.kind === "json-complex" || cmd.body.kind === "raw") &&
677
- cmd.body.required
678
- ) {
679
- const anyFlag =
680
- cmd.body.kind === "json-flat" && cmd.body.scalars.length > 0
681
- ? cmd.body.scalars.map((s) => `cmd.Flags().Changed(${goString(s.flagName)})`).join(" || ")
682
- : "false"
683
- lines.push(`if ${cmd.body.dataVar} == "" && !(${anyFlag}) {`)
684
- lines.push(`\treturn cli.Usage(errors.New("body required: pass --data or per-field flags"))`)
685
- lines.push(`}`)
686
- }
687
- for (const f of allFlags(cmd)) {
688
- if (f.enumValues.length === 0 || f.kind !== "string") continue
689
- const values = f.enumValues.map(goString).join(", ")
690
- const msg = goString(`--${f.flagName} must be one of: ${f.enumValues.join(", ")}`)
691
- lines.push(
692
- `if cmd.Flags().Changed(${goString(f.flagName)}) && !slices.Contains([]string{${values}}, ${f.varName}) {`,
693
- )
694
- lines.push(`\treturn cli.Usage(errors.New(${msg}))`)
695
- lines.push(`}`)
696
- }
697
- return lines
698
- }
699
-
700
- /** Go expression rendering a flag variable as a wire string. */
701
- function scalarString(f: Flag, expr = f.varName): string {
702
- switch (f.kind) {
703
- case "int":
704
- return `strconv.FormatInt(${expr}, 10)`
705
- case "float":
706
- return `strconv.FormatFloat(${expr}, 'g', -1, 64)`
707
- case "bool":
708
- return `strconv.FormatBool(${expr})`
709
- default:
710
- return expr
711
- }
712
- }
713
-
714
- function emitRunE(l: string[], cmd: CommandInfo): void {
715
- const ind = "\t\t"
716
- const { op } = cmd
717
- l.push(`${ind}ctx := cmd.Context()`)
718
- l.push(`${ind}cfg := configFromCtx(ctx)`)
719
- l.push(`${ind}apiKey, err := cli.ResolveAPIKey(cfg)`)
720
- l.push(`${ind}if err != nil {`)
721
- l.push(`${ind}\treturn err`)
722
- l.push(`${ind}}`)
723
- l.push(`${ind}if cfg.BaseURL == "" {`)
724
- l.push(`${ind}\treturn cli.Usage(errors.New("base URL required: set --base-url, env, or config"))`)
725
- l.push(`${ind}}`)
726
-
727
- /* path */
728
- if (cmd.pathFlags.length > 0) {
729
- const params = cmd.pathFlags.map((f) => `${goString(f.name)}: ${f.varName}`).join(", ")
730
- l.push(`${ind}path, err := sdk.HoneyExpandPath(${goString(op.path)}, map[string]string{${params}})`)
731
- l.push(`${ind}if err != nil {`)
732
- l.push(`${ind}\treturn cli.Usage(err)`)
733
- l.push(`${ind}}`)
734
- } else {
735
- l.push(`${ind}path := ${goString(op.path)}`)
736
- }
737
-
738
- /* query: a required flag is always sent, an optional one only when set */
739
- l.push(`${ind}var query [][2]string`)
740
- for (const f of cmd.queryFlags) {
741
- const guard = f.required ? "" : `if cmd.Flags().Changed(${goString(f.flagName)}) `
742
- if (f.kind === "strings") {
743
- l.push(`${ind}${guard}{`)
744
- l.push(`${ind}\tfor _, v := range ${f.varName} {`)
745
- l.push(`${ind}\t\tquery = append(query, [2]string{${goString(f.name)}, v})`)
746
- l.push(`${ind}\t}`)
747
- l.push(`${ind}}`)
748
- } else {
749
- l.push(`${ind}${guard}{`)
750
- l.push(`${ind}\tquery = append(query, [2]string{${goString(f.name)}, ${scalarString(f)}})`)
751
- l.push(`${ind}}`)
752
- }
753
- }
754
- l.push(`${ind}reqURL, err := sdk.HoneyBuildURL(cfg.BaseURL, path, query)`)
755
- l.push(`${ind}if err != nil {`)
756
- l.push(`${ind}\treturn cli.Usage(err)`)
757
- l.push(`${ind}}`)
758
-
759
- /* body */
760
- let bodyExpr = "nil"
761
- let contentTypeExpr = ""
762
- const b = cmd.body
763
- if (b.kind === "json-flat") {
764
- l.push(`${ind}merged := map[string]any{}`)
765
- l.push(`${ind}if ${b.dataVar} != "" {`)
766
- l.push(`${ind}\tdataBytes, derr := cli.ReadDataFlag(${b.dataVar})`)
767
- l.push(`${ind}\tif derr != nil {`)
768
- l.push(`${ind}\t\treturn cli.Usage(derr)`)
769
- l.push(`${ind}\t}`)
770
- l.push(`${ind}\tif len(dataBytes) > 0 {`)
771
- l.push(`${ind}\t\tif jerr := json.Unmarshal(dataBytes, &merged); jerr != nil {`)
772
- l.push(`${ind}\t\t\treturn cli.Usage(fmt.Errorf("parse --data: %w", jerr))`)
773
- l.push(`${ind}\t\t}`)
774
- l.push(`${ind}\t}`)
775
- l.push(`${ind}}`)
776
- for (const s of b.scalars) {
777
- l.push(`${ind}if cmd.Flags().Changed(${goString(s.flagName)}) {`)
778
- l.push(`${ind}\tmerged[${goString(s.name)}] = ${s.varName}`)
779
- l.push(`${ind}}`)
780
- }
781
- l.push(`${ind}bodyBytes, err := json.Marshal(merged)`)
782
- l.push(`${ind}if err != nil {`)
783
- l.push(`${ind}\treturn err`)
784
- l.push(`${ind}}`)
785
- bodyExpr = "bytes.NewReader(bodyBytes)"
786
- contentTypeExpr = goString(op.body?.contentType ?? "application/json")
787
- } else if (b.kind === "json-complex" || b.kind === "raw") {
788
- l.push(`${ind}bodyBytes, err := cli.ReadDataFlag(${b.dataVar})`)
789
- l.push(`${ind}if err != nil {`)
790
- l.push(`${ind}\treturn cli.Usage(err)`)
791
- l.push(`${ind}}`)
792
- bodyExpr = "bytes.NewReader(bodyBytes)"
793
- contentTypeExpr = goString(op.body?.contentType ?? "application/json")
794
- } else if (b.kind === "form") {
795
- l.push(`${ind}form := url.Values{}`)
796
- for (const s of b.scalars) {
797
- l.push(`${ind}if cmd.Flags().Changed(${goString(s.flagName)}) {`)
798
- l.push(`${ind}\tform.Set(${goString(s.name)}, ${scalarString(s)})`)
799
- l.push(`${ind}}`)
800
- }
801
- bodyExpr = "strings.NewReader(form.Encode())"
802
- contentTypeExpr = `"application/x-www-form-urlencoded"`
803
- } else if (b.kind === "multipart") {
804
- l.push(`${ind}fields := map[string]string{}`)
805
- for (const s of b.scalars) {
806
- l.push(`${ind}if cmd.Flags().Changed(${goString(s.flagName)}) {`)
807
- l.push(`${ind}\tfields[${goString(s.name)}] = ${scalarString(s)}`)
808
- l.push(`${ind}}`)
809
- }
810
- l.push(`${ind}files := map[string]string{}`)
811
- for (const f of b.files) {
812
- l.push(`${ind}if ${f.varName} != "" {`)
813
- l.push(`${ind}\tfiles[${goString(f.name)}] = ${f.varName}`)
814
- l.push(`${ind}}`)
815
- }
816
- l.push(`${ind}mpReader, mpCT, err := cli.BuildMultipart(fields, files)`)
817
- l.push(`${ind}if err != nil {`)
818
- l.push(`${ind}\treturn err`)
819
- l.push(`${ind}}`)
820
- bodyExpr = "mpReader"
821
- contentTypeExpr = "mpCT"
822
- }
823
-
824
- /* regular calls get --timeout; streams and uploads only stop on ^C */
825
- const bounded = op.stream === null && b.kind !== "multipart"
826
- if (bounded) {
827
- l.push(`${ind}timeout, err := time.ParseDuration(cfg.Timeout)`)
828
- l.push(`${ind}if err != nil {`)
829
- l.push(`${ind}\treturn cli.Usage(err)`)
830
- l.push(`${ind}}`)
831
- l.push(`${ind}ctx, cancel := context.WithTimeout(ctx, timeout)`)
832
- l.push(`${ind}defer cancel()`)
833
- }
834
-
835
- l.push(`${ind}req, err := http.NewRequestWithContext(ctx, ${goString(op.method)}, reqURL, ${bodyExpr})`)
836
- l.push(`${ind}if err != nil {`)
837
- l.push(`${ind}\treturn err`)
838
- l.push(`${ind}}`)
839
- if (contentTypeExpr) l.push(`${ind}req.Header.Set("Content-Type", ${contentTypeExpr})`)
840
- for (const f of cmd.headerFlags) {
841
- const guard = f.required ? "" : `if cmd.Flags().Changed(${goString(f.flagName)}) `
842
- const value = f.kind === "strings" ? `strings.Join(${f.varName}, ",")` : scalarString(f)
843
- l.push(`${ind}${guard}{`)
844
- l.push(`${ind}\treq.Header.Set(${goString(f.name)}, ${value})`)
845
- l.push(`${ind}}`)
846
- }
847
- l.push(`${ind}cli.ApplyAuth(req.Header, AuthHeaderName, AuthHeaderPrefix, apiKey)`)
848
-
849
- if (op.stream === "sse") {
850
- l.push(`${ind}req.Header.Set("Accept", "text/event-stream")`)
851
- if (cmd.lastEventIdVar) {
852
- l.push(`${ind}if ${cmd.lastEventIdVar} != "" {`)
853
- l.push(`${ind}\treq.Header.Set("Last-Event-ID", ${cmd.lastEventIdVar})`)
854
- l.push(`${ind}}`)
855
- }
856
- l.push(`${ind}resp, err := newHTTPClient().Do(req)`)
857
- l.push(`${ind}if err != nil {`)
858
- l.push(`${ind}\treturn err`)
859
- l.push(`${ind}}`)
860
- /* wrap SDK's Seq2[sdk.SSEEvent] → Seq2[cli.SSEEvent] so the runtime stays SDK-agnostic. */
861
- l.push(`${ind}it := sdk.HoneyParseSSEStream(ctx, resp)`)
862
- l.push(`${ind}wrapped := func(yield func(cli.SSEEvent, error) bool) {`)
863
- l.push(`${ind}\tfor ev, iterErr := range it {`)
864
- l.push(`${ind}\t\tif !yield(cli.SSEEvent{Data: ev.Data, Event: ev.Event, ID: ev.ID, Retry: ev.Retry}, iterErr) {`)
865
- l.push(`${ind}\t\t\treturn`)
866
- l.push(`${ind}\t\t}`)
867
- l.push(`${ind}\t}`)
868
- l.push(`${ind}}`)
869
- l.push(`${ind}return cli.StreamSSE(wrapped, os.Stdout, cfg.Output)`)
870
- return
871
- }
872
-
873
- l.push(`${ind}resp, err := newHTTPClient().Do(req)`)
874
- l.push(`${ind}if err != nil {`)
875
- l.push(`${ind}\treturn err`)
876
- l.push(`${ind}}`)
877
- l.push(`${ind}defer resp.Body.Close()`)
878
- l.push(`${ind}body, err := io.ReadAll(resp.Body)`)
879
- l.push(`${ind}if err != nil {`)
880
- l.push(`${ind}\treturn err`)
881
- l.push(`${ind}}`)
882
- l.push(`${ind}if err := sdk.HoneyRaiseForStatus(resp, body); err != nil {`)
883
- l.push(`${ind}\treturn err`)
884
- l.push(`${ind}}`)
885
- const kind = op.success.kind
886
- if (kind === "json") {
887
- l.push(`${ind}out, err := cli.DecodeJSON(body)`)
888
- l.push(`${ind}if err != nil {`)
889
- l.push(`${ind}\treturn err`)
890
- l.push(`${ind}}`)
891
- l.push(`${ind}return cli.Emit(out, cfg.Output, os.Stdout)`)
892
- } else if (kind === "text" || kind === "binary") {
893
- l.push(`${ind}_, err = os.Stdout.Write(body)`)
894
- l.push(`${ind}return err`)
895
- } else {
896
- l.push(`${ind}return nil`)
897
- }
898
- }
899
-
900
- /* ── emit: main.go ── */
901
-
902
- function emitMainFile(options: GoCLIOptions): string {
903
- const module = resolveModulePath(options)
904
- const l: string[] = []
905
- l.push(`// Code generated by honey. DO NOT EDIT.`)
906
- l.push(`package main`)
907
- l.push(``)
908
- l.push(`import (`)
909
- l.push(`\t"fmt"`)
910
- l.push(`\t"os"`)
911
- l.push(``)
912
- l.push(`\tcli ${goString(`${module}/internal/cli`)}`)
913
- l.push(`\t${goString(`${module}/cmd`)}`)
914
- l.push(`)`)
915
- l.push(``)
916
- l.push(`func main() {`)
917
- l.push(`\tif err := cmd.Execute(); err != nil {`)
918
- l.push(`\t\tfmt.Fprintln(os.Stderr, cli.Sanitize(err.Error()))`)
919
- l.push(`\t\tos.Exit(cli.ExitFor(err))`)
920
- l.push(`\t}`)
921
- l.push(`}`)
922
- l.push(``)
923
- return l.join("\n")
924
- }
925
-
926
- /* ── emit: go.mod ── */
927
-
928
- function emitGoMod(options: GoCLIOptions, hasEmbeddedSDK: boolean): string {
929
- const mod = resolveModulePath(options)
930
- const l: string[] = []
931
- l.push(`module ${mod}`)
932
- l.push(``)
933
- l.push(`go 1.24`)
934
- l.push(``)
935
- l.push(`require (`)
936
- l.push(`\tgithub.com/spf13/cobra v1.8.1`)
937
- l.push(`\tgithub.com/pelletier/go-toml/v2 v2.2.3`)
938
- l.push(`\tsigs.k8s.io/yaml v1.4.0`)
939
- if (!hasEmbeddedSDK && options.sdkModulePath) {
940
- l.push(`\t${options.sdkModulePath} v0.0.0`)
941
- }
942
- if (hasEmbeddedSDK) {
943
- l.push(`\tnhooyr.io/websocket v1.8.17`)
944
- }
945
- l.push(`)`)
946
- l.push(``)
947
- if (!hasEmbeddedSDK && options.sdkModulePath) {
948
- l.push(`replace ${options.sdkModulePath} => ../sdk`)
949
- l.push(``)
950
- }
951
- return l.join("\n")
952
- }
953
-
954
- /* ── emit: README.md ── */
955
-
956
- function emitReadme(info: IRInfo, options: GoCLIOptions): string {
957
- const envPrefix = options.envPrefix ?? toSnakeUpper(options.binaryName)
958
- const configName = options.configName ?? options.binaryName
959
- const title = info.title ?? options.binaryName
960
- return [
961
- `# ${options.binaryName}`,
962
- ``,
963
- `CLI for ${title} — auto-generated by honey.`,
964
- ``,
965
- `## Install`,
966
- ``,
967
- "```sh",
968
- `go build -ldflags "-X ${resolveModulePath(options)}/internal/cli.Version=1.0.0" -o ${options.binaryName} .`,
969
- "```",
970
- ``,
971
- `## Auth`,
972
- ``,
973
- `Resolution order (high → low):`,
974
- ``,
975
- `1. \`--api-key <value>\` (visible in the process list; prefer the env var)`,
976
- `2. \`${envPrefix}_API_KEY\` env var`,
977
- `3. \`~/.config/${configName}/config.toml\` → \`api_key = "..."\` (keep it \`chmod 600\`)`,
978
- `4. \`$XDG_CONFIG_HOME/${configName}/config.toml\``,
979
- ``,
980
- `## Global flags`,
981
- ``,
982
- `- \`--api-key\`, \`--base-url\`, \`--output\` (json|ndjson|yaml|table)`,
983
- `- \`--verbose\`, \`--config\`, \`--timeout\` (regular calls only; streams and uploads are not bounded)`,
984
- ``,
985
- `## Exit codes`,
986
- ``,
987
- `- 0: success`,
988
- `- 1: 4xx client error`,
989
- `- 2: 5xx server error`,
990
- `- 3: network failure / timeout`,
991
- `- 4: bad flags / bad config / missing api-key`,
992
- `- 5: unexpected 3xx (redirects to another host are not followed)`,
993
- ``,
994
- ].join("\n")
995
- }
996
-
997
- /* ── embedded SDK copy ── */
998
-
999
- function copyEmbeddedSDK(spec: Record<string, unknown>, options: GoCLIOptions, outFiles: Record<string, string>): void {
1000
- const sdkModule = `${resolveModulePath(options)}/internal/sdk`
1001
- const sdkGen = generateGoSDK(spec, { modulePath: sdkModule })
1002
- for (const [name, content] of Object.entries(sdkGen.files)) {
1003
- /* skip go.mod — CLI has its own */
1004
- if (name === "go.mod") continue
1005
- outFiles[`internal/sdk/${name}`] = content
1006
- }
1007
- }
1008
-
1009
- /* ── ParseSSEStreamExported shim ──
1010
- * Older generated CLIs call ParseSSEStreamExported; kept so they keep compiling against
1011
- * an embedded SDK. New code uses the Honey* helpers in export.go. */
1012
-
1013
- function emitSSEExportShim(files: Record<string, string>, hasEmbedded: boolean): void {
1014
- const shim = [
1015
- `// Code generated by honey. DO NOT EDIT.`,
1016
- `package sdk`,
1017
- ``,
1018
- `import (`,
1019
- `\t"context"`,
1020
- `\t"iter"`,
1021
- `\t"net/http"`,
1022
- `)`,
1023
- ``,
1024
- `// ParseSSEStreamExported exposes parseSSEStream for CLI consumption.`,
1025
- `func ParseSSEStreamExported(ctx context.Context, resp *http.Response) iter.Seq2[SSEEvent, error] {`,
1026
- `\treturn parseSSEStream(ctx, resp)`,
1027
- `}`,
1028
- ``,
1029
- ].join("\n")
1030
- if (hasEmbedded) files["internal/sdk/sse_export.go"] = shim
1031
- }
1032
-
1033
- /* ── public entrypoint ── */
1034
-
1035
- export function generateGoCLI(spec: Record<string, unknown>, options: GoCLIOptions): GeneratedGoCLI {
1036
- const input = spec as unknown as OpenApiSpecInput
1037
- const model = buildSdkModel(input)
1038
- const serviceMap = serviceMapOf(model.ir)
1039
- const pkg = new NameScope(CMD_PACKAGE_NAMES)
1040
- const { groups, skipped } = collectCLIMethods(model, pkg)
1041
-
1042
- const hasEmbeddedSDK = !options.sdkModulePath
1043
- const files: Record<string, string> = {}
1044
-
1045
- /* runtime templates → internal/cli/ */
1046
- for (const [name, content] of loadGoCliRuntimeTemplates()) {
1047
- files[`internal/cli/${name}`] = content
1048
- }
1049
-
1050
- files["main.go"] = emitMainFile(options)
1051
-
1052
- const sortedGroups = [...groups.values()].sort((a, b) => cmpCodeUnit(a.resource, b.resource))
1053
- files["cmd/root.go"] = emitRootFile(sortedGroups, options, model.ir.auth)
1054
-
1055
- for (const g of sortedGroups) {
1056
- files[`cmd/${g.fileName}`] = emitResourceFile(g, options)
1057
- }
1058
-
1059
- files["go.mod"] = emitGoMod(options, hasEmbeddedSDK)
1060
- files["README.md"] = emitReadme(model.ir.info, options)
1061
-
1062
- if (hasEmbeddedSDK) copyEmbeddedSDK(spec, options, files)
1063
- emitSSEExportShim(files, hasEmbeddedSDK)
1064
-
1065
- return { files, serviceMap: serviceMap as Record<string, Record<string, unknown>>, skippedOperations: skipped }
1066
- }