@lovrozagar/honey 0.7.3 → 1.0.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1005) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +930 -1664
  3. package/bin/honey.js +87 -27
  4. package/dist/adapters/bun/serve.d.ts +18 -0
  5. package/dist/adapters/bun/serve.js +89 -0
  6. package/dist/adapters/fetch-request.d.ts +20 -0
  7. package/dist/adapters/fetch-request.js +29 -0
  8. package/dist/adapters/node/headers.d.ts +27 -0
  9. package/dist/adapters/node/headers.js +86 -0
  10. package/dist/adapters/node/request.d.ts +16 -0
  11. package/dist/adapters/node/request.js +214 -0
  12. package/dist/adapters/node/response.d.ts +11 -0
  13. package/dist/adapters/node/response.js +126 -0
  14. package/dist/adapters/node/serve.d.ts +39 -0
  15. package/dist/adapters/node/serve.js +205 -0
  16. package/dist/adapters/node/url.d.ts +13 -0
  17. package/dist/adapters/node/url.js +87 -0
  18. package/dist/adapters/serve.d.ts +36 -0
  19. package/dist/adapters/serve.js +52 -0
  20. package/dist/build/artifacts.d.ts +34 -0
  21. package/dist/build/artifacts.js +123 -0
  22. package/dist/build/cli-args.d.ts +30 -0
  23. package/dist/build/cli-args.js +97 -0
  24. package/dist/build/cli.d.ts +11 -0
  25. package/dist/build/cli.js +150 -0
  26. package/dist/build/config.d.ts +102 -0
  27. package/dist/build/config.js +89 -0
  28. package/dist/build/generate.d.ts +19 -0
  29. package/dist/build/generate.js +80 -0
  30. package/dist/build/glob.d.ts +8 -0
  31. package/dist/build/glob.js +97 -0
  32. package/dist/build/index.d.ts +3 -58
  33. package/dist/build/index.js +3 -173
  34. package/dist/build/init.d.ts +3 -0
  35. package/dist/build/init.js +131 -0
  36. package/dist/build/loaders.d.ts +33 -0
  37. package/dist/build/loaders.js +105 -0
  38. package/dist/build/plugin.d.ts +52 -0
  39. package/dist/build/plugin.js +146 -0
  40. package/dist/build/source.d.ts +21 -0
  41. package/dist/build/source.js +100 -0
  42. package/dist/build/targets.d.ts +59 -0
  43. package/dist/build/targets.js +107 -0
  44. package/dist/context/context.d.ts +111 -0
  45. package/dist/context/context.js +213 -0
  46. package/dist/context/cookie-sign.d.ts +38 -0
  47. package/dist/context/cookie-sign.js +113 -0
  48. package/dist/context/cookie.d.ts +28 -0
  49. package/dist/context/cookie.js +142 -0
  50. package/dist/context/peer.d.ts +34 -0
  51. package/dist/context/peer.js +190 -0
  52. package/dist/errors/error.d.ts +60 -0
  53. package/dist/errors/error.js +84 -0
  54. package/dist/errors/errors.d.ts +45 -0
  55. package/dist/errors/errors.js +31 -0
  56. package/dist/errors/on-error.d.ts +10 -0
  57. package/dist/errors/on-error.js +204 -0
  58. package/dist/errors/problem-json.d.ts +14 -0
  59. package/dist/errors/problem-json.js +58 -0
  60. package/dist/errors/projector.d.ts +50 -0
  61. package/dist/errors/projector.js +107 -0
  62. package/dist/i18n/error-i18n.d.ts +26 -0
  63. package/dist/i18n/error-i18n.js +77 -0
  64. package/dist/i18n/i18n.d.ts +21 -0
  65. package/dist/i18n/i18n.js +40 -0
  66. package/dist/i18n/icu.d.ts +29 -0
  67. package/dist/i18n/icu.js +170 -0
  68. package/dist/i18n/index.d.ts +4 -0
  69. package/dist/i18n/index.js +3 -0
  70. package/dist/index.d.ts +30 -746
  71. package/dist/index.js +12 -2364
  72. package/dist/input/accepts.d.ts +5 -0
  73. package/dist/input/accepts.js +105 -0
  74. package/dist/input/binary.d.ts +20 -0
  75. package/dist/input/binary.js +40 -0
  76. package/dist/input/body-kind.d.ts +15 -0
  77. package/dist/input/body-kind.js +47 -0
  78. package/dist/input/body-limit.d.ts +21 -0
  79. package/dist/input/body-limit.js +99 -0
  80. package/dist/input/cookies.d.ts +7 -0
  81. package/dist/input/cookies.js +8 -0
  82. package/dist/input/form.d.ts +10 -0
  83. package/dist/input/form.js +24 -0
  84. package/dist/input/headers.d.ts +7 -0
  85. package/dist/input/headers.js +8 -0
  86. package/dist/input/input.d.ts +91 -0
  87. package/dist/input/input.js +88 -0
  88. package/dist/input/json.d.ts +10 -0
  89. package/dist/input/json.js +22 -0
  90. package/dist/input/params.d.ts +7 -0
  91. package/dist/input/params.js +8 -0
  92. package/dist/input/query.d.ts +10 -0
  93. package/dist/input/query.js +17 -0
  94. package/dist/mcp/mount.d.ts +116 -0
  95. package/dist/mcp/mount.js +45 -0
  96. package/dist/mcp/oauth.d.ts +14 -0
  97. package/dist/mcp/oauth.js +88 -0
  98. package/dist/mcp/uploads.d.ts +36 -0
  99. package/dist/mcp/uploads.js +171 -0
  100. package/dist/mcp/url-files.d.ts +32 -0
  101. package/dist/mcp/url-files.js +75 -0
  102. package/dist/meta/meta-spec-apply.d.ts +25 -0
  103. package/dist/meta/meta-spec-apply.js +83 -0
  104. package/dist/meta/meta-spec-merge.d.ts +103 -0
  105. package/dist/meta/meta-spec-merge.js +50 -0
  106. package/dist/meta/meta-spec-validate.d.ts +61 -0
  107. package/dist/meta/meta-spec-validate.js +166 -0
  108. package/dist/meta/meta-spec.d.ts +49 -0
  109. package/dist/meta/meta-spec.js +197 -0
  110. package/dist/middleware/compress.d.ts +15 -0
  111. package/dist/middleware/compress.js +93 -0
  112. package/dist/middleware/cors.d.ts +18 -0
  113. package/dist/middleware/cors.js +80 -0
  114. package/dist/middleware/csrf.d.ts +11 -0
  115. package/dist/middleware/csrf.js +65 -0
  116. package/dist/middleware/ip-restrict.d.ts +10 -0
  117. package/dist/middleware/ip-restrict.js +82 -0
  118. package/dist/middleware/middleware.d.ts +53 -0
  119. package/dist/middleware/middleware.js +112 -0
  120. package/dist/middleware/powered-by.d.ts +6 -0
  121. package/dist/middleware/powered-by.js +13 -0
  122. package/dist/middleware/rate-limit.d.ts +40 -0
  123. package/dist/middleware/rate-limit.js +90 -0
  124. package/dist/middleware/request-id.d.ts +25 -0
  125. package/dist/middleware/request-id.js +30 -0
  126. package/dist/middleware/secure-headers.d.ts +18 -0
  127. package/dist/middleware/secure-headers.js +36 -0
  128. package/dist/middleware/server-timing.d.ts +8 -0
  129. package/dist/middleware/server-timing.js +52 -0
  130. package/dist/middleware/timeout.d.ts +6 -0
  131. package/dist/middleware/timeout.js +29 -0
  132. package/dist/observability/curl-logger.d.ts +46 -0
  133. package/dist/observability/curl-logger.js +175 -0
  134. package/dist/observability/request-to-curl.d.ts +17 -0
  135. package/dist/observability/request-to-curl.js +47 -0
  136. package/dist/openapi/collect.d.ts +56 -18
  137. package/dist/openapi/collect.js +109 -23
  138. package/dist/openapi/components.d.ts +9 -0
  139. package/dist/openapi/components.js +90 -0
  140. package/dist/openapi/docs-page.d.ts +20 -18
  141. package/dist/openapi/docs-page.js +28 -46
  142. package/dist/openapi/document.d.ts +33 -26
  143. package/dist/openapi/document.js +21 -780
  144. package/dist/openapi/extract-schemas.d.ts +11 -0
  145. package/dist/openapi/extract-schemas.js +31 -0
  146. package/dist/openapi/generate.d.ts +47 -0
  147. package/dist/openapi/generate.js +180 -0
  148. package/dist/openapi/manifest.d.ts +41 -0
  149. package/dist/openapi/manifest.js +49 -0
  150. package/dist/openapi/output-keys.d.ts +6 -0
  151. package/dist/openapi/output-keys.js +24 -0
  152. package/dist/openapi/paths.d.ts +35 -0
  153. package/dist/openapi/paths.js +175 -0
  154. package/dist/openapi/register.d.ts +14 -3
  155. package/dist/openapi/register.js +13 -20
  156. package/dist/openapi/responses.d.ts +44 -0
  157. package/dist/openapi/responses.js +159 -0
  158. package/dist/openapi/scalar.d.ts +4 -14
  159. package/dist/openapi/scalar.js +5 -7
  160. package/dist/openapi/security.d.ts +4 -0
  161. package/dist/openapi/security.js +25 -0
  162. package/dist/openapi/serve.d.ts +25 -9
  163. package/dist/openapi/serve.js +108 -29
  164. package/dist/openapi/servers.d.ts +19 -0
  165. package/dist/openapi/servers.js +72 -0
  166. package/dist/openapi/swagger.d.ts +4 -14
  167. package/dist/openapi/swagger.js +5 -7
  168. package/dist/openapi/tags.d.ts +20 -0
  169. package/dist/openapi/tags.js +20 -0
  170. package/dist/openapi/webhooks.d.ts +19 -0
  171. package/dist/openapi/webhooks.js +70 -0
  172. package/dist/openapi/yaml.d.ts +8 -0
  173. package/dist/openapi/yaml.js +74 -0
  174. package/dist/proxy/headers.d.ts +30 -0
  175. package/dist/proxy/headers.js +86 -0
  176. package/dist/proxy/proxy.d.ts +39 -0
  177. package/dist/proxy/proxy.js +103 -0
  178. package/dist/proxy/upstream.d.ts +30 -0
  179. package/dist/proxy/upstream.js +116 -0
  180. package/dist/realtime/bus.d.ts +10 -13
  181. package/dist/realtime/bus.js +48 -93
  182. package/dist/realtime/invoke-user.d.ts +36 -0
  183. package/dist/realtime/invoke-user.js +103 -0
  184. package/dist/realtime/realtime.d.ts +7 -0
  185. package/dist/realtime/realtime.js +40 -0
  186. package/dist/realtime/route.d.ts +33 -27
  187. package/dist/realtime/route.js +27 -43
  188. package/dist/realtime/server.d.ts +24 -28
  189. package/dist/realtime/server.js +202 -225
  190. package/dist/response/binary.d.ts +18 -0
  191. package/dist/response/binary.js +10 -0
  192. package/dist/response/builder.d.ts +73 -0
  193. package/dist/response/builder.js +214 -0
  194. package/dist/response/cache-control.d.ts +30 -0
  195. package/dist/response/cache-control.js +74 -0
  196. package/dist/response/etag.d.ts +15 -0
  197. package/dist/response/etag.js +83 -0
  198. package/dist/response/media-type.d.ts +28 -0
  199. package/dist/response/media-type.js +97 -0
  200. package/dist/response/out-headers.d.ts +31 -0
  201. package/dist/response/out-headers.js +130 -0
  202. package/dist/response/pretty-json.d.ts +10 -0
  203. package/dist/response/pretty-json.js +44 -0
  204. package/dist/response/range.d.ts +19 -0
  205. package/dist/response/range.js +98 -0
  206. package/dist/response/response-headers.d.ts +11 -0
  207. package/dist/response/response-headers.js +21 -0
  208. package/dist/response/response.d.ts +69 -0
  209. package/dist/response/response.js +208 -0
  210. package/dist/response/sse.d.ts +41 -0
  211. package/dist/response/sse.js +73 -0
  212. package/dist/response/static.d.ts +20 -0
  213. package/dist/response/static.js +181 -0
  214. package/dist/response/status.d.ts +5 -0
  215. package/dist/response/status.js +68 -0
  216. package/dist/response/with-headers.d.ts +11 -0
  217. package/dist/response/with-headers.js +47 -0
  218. package/dist/routing/app-types.d.ts +175 -0
  219. package/dist/routing/app-types.js +1 -0
  220. package/dist/routing/app.d.ts +76 -0
  221. package/dist/routing/app.js +137 -0
  222. package/dist/routing/codegen-types.d.ts +17 -0
  223. package/dist/routing/codegen-types.js +1 -0
  224. package/dist/routing/delegate.d.ts +9 -0
  225. package/dist/routing/delegate.js +75 -0
  226. package/dist/routing/dispatch.d.ts +22 -0
  227. package/dist/routing/dispatch.js +255 -0
  228. package/dist/routing/finalize.d.ts +47 -0
  229. package/dist/routing/finalize.js +169 -0
  230. package/dist/routing/gateway-tree.d.ts +19 -0
  231. package/dist/routing/gateway-tree.js +74 -0
  232. package/dist/routing/invalidate-check.d.ts +58 -0
  233. package/dist/routing/invalidate-check.js +124 -0
  234. package/dist/routing/match.d.ts +22 -0
  235. package/dist/routing/match.js +108 -0
  236. package/dist/routing/meta-types.d.ts +34 -0
  237. package/dist/routing/meta-types.js +5 -0
  238. package/dist/routing/middleware-chain.d.ts +16 -0
  239. package/dist/routing/middleware-chain.js +41 -0
  240. package/dist/routing/output-types.d.ts +91 -0
  241. package/dist/routing/output-types.js +1 -0
  242. package/dist/routing/pattern.d.ts +55 -0
  243. package/dist/routing/pattern.js +219 -0
  244. package/dist/routing/record.d.ts +18 -0
  245. package/dist/routing/record.js +4 -0
  246. package/dist/routing/register.d.ts +135 -0
  247. package/dist/routing/register.js +155 -0
  248. package/dist/routing/request-path.d.ts +30 -0
  249. package/dist/routing/request-path.js +173 -0
  250. package/dist/routing/route-builder.d.ts +160 -0
  251. package/dist/routing/route-builder.js +86 -0
  252. package/dist/routing/route-tree.d.ts +18 -0
  253. package/dist/routing/route-tree.js +91 -0
  254. package/dist/routing/settings-chain.d.ts +75 -0
  255. package/dist/routing/settings-chain.js +137 -0
  256. package/dist/routing/settings.d.ts +90 -0
  257. package/dist/routing/settings.js +44 -0
  258. package/dist/routing/tap.d.ts +31 -0
  259. package/dist/routing/tap.js +77 -0
  260. package/dist/routing/tree-merge.d.ts +7 -0
  261. package/dist/routing/tree-merge.js +77 -0
  262. package/dist/routing/tree.d.ts +85 -0
  263. package/dist/routing/tree.js +196 -0
  264. package/dist/routing/types.d.ts +20 -0
  265. package/dist/routing/types.js +1 -0
  266. package/dist/routing/ws-builder.d.ts +62 -0
  267. package/dist/routing/ws-builder.js +109 -0
  268. package/dist/runtime/detect-runtime.d.ts +16 -0
  269. package/dist/runtime/detect-runtime.js +11 -0
  270. package/dist/runtime/optional-peer.d.ts +10 -0
  271. package/dist/runtime/optional-peer.js +19 -0
  272. package/dist/schema/arktype.d.ts +7 -0
  273. package/dist/schema/arktype.js +13 -0
  274. package/dist/schema/canonicalize.d.ts +8 -0
  275. package/dist/schema/canonicalize.js +19 -0
  276. package/dist/schema/effect.d.ts +7 -0
  277. package/dist/schema/effect.js +4 -0
  278. package/dist/schema/naming.d.ts +31 -0
  279. package/dist/schema/naming.js +116 -0
  280. package/dist/schema/sanitize-spec.d.ts +15 -0
  281. package/dist/schema/sanitize-spec.js +43 -0
  282. package/dist/schema/slots.d.ts +15 -0
  283. package/dist/schema/slots.js +179 -0
  284. package/dist/schema/to-json-schema.d.ts +34 -0
  285. package/dist/schema/to-json-schema.js +94 -0
  286. package/dist/schema/valibot.d.ts +4 -0
  287. package/dist/schema/valibot.js +153 -0
  288. package/dist/schema/yup.d.ts +3 -0
  289. package/dist/schema/yup.js +57 -0
  290. package/dist/schema/zod.d.ts +6 -0
  291. package/dist/schema/zod.js +192 -0
  292. package/dist/security/crypto.d.ts +7 -0
  293. package/dist/security/crypto.js +30 -0
  294. package/dist/streaming/producer-stream.d.ts +45 -0
  295. package/dist/streaming/producer-stream.js +251 -0
  296. package/dist/telemetry/fields.d.ts +43 -0
  297. package/dist/telemetry/fields.js +64 -0
  298. package/dist/telemetry/log-format.d.ts +7 -0
  299. package/dist/telemetry/log-format.js +43 -0
  300. package/dist/telemetry/logger.d.ts +44 -0
  301. package/dist/telemetry/logger.js +136 -0
  302. package/dist/telemetry/otel-subpath.d.ts +7 -0
  303. package/dist/telemetry/otel-subpath.js +5 -0
  304. package/dist/telemetry/otel.d.ts +50 -57
  305. package/dist/telemetry/otel.js +54 -130
  306. package/dist/telemetry/request-log.d.ts +22 -0
  307. package/dist/telemetry/request-log.js +83 -0
  308. package/dist/telemetry/request-trace.d.ts +123 -0
  309. package/dist/telemetry/request-trace.js +199 -0
  310. package/dist/telemetry/span-lifecycle.d.ts +11 -0
  311. package/dist/telemetry/span-lifecycle.js +114 -0
  312. package/dist/telemetry/traceparent.d.ts +40 -0
  313. package/dist/telemetry/traceparent.js +73 -0
  314. package/dist/testing/testing.d.ts +42 -0
  315. package/dist/testing/testing.js +101 -0
  316. package/dist/validation/content-type.d.ts +21 -0
  317. package/dist/validation/content-type.js +42 -0
  318. package/dist/validation/standard-schema.d.ts +41 -0
  319. package/dist/validation/standard-schema.js +5 -0
  320. package/dist/validation/validate-input.d.ts +45 -0
  321. package/dist/validation/validate-input.js +174 -0
  322. package/dist/validation/validate-output.d.ts +34 -0
  323. package/dist/validation/validate-output.js +107 -0
  324. package/dist/ws/bun.d.ts +30 -25
  325. package/dist/ws/bun.js +42 -46
  326. package/dist/ws/cloudflare.d.ts +6 -75
  327. package/dist/ws/cloudflare.js +37 -104
  328. package/dist/ws/contract.d.ts +74 -0
  329. package/dist/ws/contract.js +83 -0
  330. package/dist/ws/node.d.ts +12 -21
  331. package/dist/ws/node.js +103 -151
  332. package/dist/ws/origin.d.ts +23 -0
  333. package/dist/ws/origin.js +48 -0
  334. package/dist/ws/route.d.ts +14 -0
  335. package/dist/ws/route.js +5 -0
  336. package/dist/ws/session.d.ts +15 -6
  337. package/dist/ws/session.js +22 -23
  338. package/dist/ws/shared.d.ts +23 -33
  339. package/dist/ws/shared.js +53 -39
  340. package/package.json +169 -251
  341. package/dist/accepts.d.ts +0 -12
  342. package/dist/accepts.d.ts.map +0 -1
  343. package/dist/accepts.js +0 -126
  344. package/dist/accepts.js.map +0 -1
  345. package/dist/body-kind.d.ts +0 -26
  346. package/dist/body-kind.d.ts.map +0 -1
  347. package/dist/body-kind.js +0 -70
  348. package/dist/body-kind.js.map +0 -1
  349. package/dist/body-limit.d.ts +0 -26
  350. package/dist/body-limit.d.ts.map +0 -1
  351. package/dist/body-limit.js +0 -126
  352. package/dist/body-limit.js.map +0 -1
  353. package/dist/build/index.d.ts.map +0 -1
  354. package/dist/build/index.js.map +0 -1
  355. package/dist/cli-args.d.ts +0 -33
  356. package/dist/cli-args.d.ts.map +0 -1
  357. package/dist/cli-args.js +0 -102
  358. package/dist/cli-args.js.map +0 -1
  359. package/dist/cli-go/auth.go +0 -26
  360. package/dist/cli-go/config.go +0 -192
  361. package/dist/cli-go/errors.go +0 -75
  362. package/dist/cli-go/multipart.go +0 -79
  363. package/dist/cli-go/output.go +0 -163
  364. package/dist/cli-go/root.go +0 -30
  365. package/dist/cli-go/stream.go +0 -88
  366. package/dist/cli-go/version.go +0 -5
  367. package/dist/cli.d.ts +0 -3
  368. package/dist/cli.d.ts.map +0 -1
  369. package/dist/cli.js +0 -209
  370. package/dist/cli.js.map +0 -1
  371. package/dist/client/defaults.d.ts +0 -12
  372. package/dist/client/defaults.d.ts.map +0 -1
  373. package/dist/client/defaults.js +0 -48
  374. package/dist/client/defaults.js.map +0 -1
  375. package/dist/client/error.d.ts +0 -49
  376. package/dist/client/error.d.ts.map +0 -1
  377. package/dist/client/error.js +0 -71
  378. package/dist/client/error.js.map +0 -1
  379. package/dist/client/http.d.ts +0 -155
  380. package/dist/client/http.d.ts.map +0 -1
  381. package/dist/client/http.js +0 -571
  382. package/dist/client/http.js.map +0 -1
  383. package/dist/client/index.d.ts +0 -23
  384. package/dist/client/index.d.ts.map +0 -1
  385. package/dist/client/index.js +0 -95
  386. package/dist/client/index.js.map +0 -1
  387. package/dist/client/path.d.ts +0 -26
  388. package/dist/client/path.d.ts.map +0 -1
  389. package/dist/client/path.js +0 -163
  390. package/dist/client/path.js.map +0 -1
  391. package/dist/client/redirect-policy.d.ts +0 -12
  392. package/dist/client/redirect-policy.d.ts.map +0 -1
  393. package/dist/client/redirect-policy.js +0 -20
  394. package/dist/client/redirect-policy.js.map +0 -1
  395. package/dist/client/sdk.d.ts +0 -70
  396. package/dist/client/sdk.d.ts.map +0 -1
  397. package/dist/client/sdk.js +0 -292
  398. package/dist/client/sdk.js.map +0 -1
  399. package/dist/client/sse.d.ts +0 -23
  400. package/dist/client/sse.d.ts.map +0 -1
  401. package/dist/client/sse.js +0 -129
  402. package/dist/client/sse.js.map +0 -1
  403. package/dist/client/types.d.ts +0 -124
  404. package/dist/client/types.d.ts.map +0 -1
  405. package/dist/client/types.js +0 -2
  406. package/dist/client/types.js.map +0 -1
  407. package/dist/client/ws.d.ts +0 -22
  408. package/dist/client/ws.d.ts.map +0 -1
  409. package/dist/client/ws.js +0 -112
  410. package/dist/client/ws.js.map +0 -1
  411. package/dist/client-go/errors.go +0 -236
  412. package/dist/client-go/export.go +0 -44
  413. package/dist/client-go/invalidation.go +0 -371
  414. package/dist/client-go/nullable.go +0 -62
  415. package/dist/client-go/realtime.go +0 -354
  416. package/dist/client-go/result.go +0 -20
  417. package/dist/client-go/runtime.go +0 -975
  418. package/dist/client-go/sse.go +0 -159
  419. package/dist/client-go/transport.go +0 -495
  420. package/dist/client-go/ws.go +0 -128
  421. package/dist/client-info.d.ts +0 -36
  422. package/dist/client-info.d.ts.map +0 -1
  423. package/dist/client-info.js +0 -53
  424. package/dist/client-info.js.map +0 -1
  425. package/dist/client-mcp/README.md +0 -10
  426. package/dist/client-mcp/server.ts +0 -221
  427. package/dist/client-mcp/types.ts +0 -19
  428. package/dist/client-python/_errors.py +0 -115
  429. package/dist/client-python/_invalidation.py +0 -494
  430. package/dist/client-python/_realtime.py +0 -179
  431. package/dist/client-python/_runtime.py +0 -860
  432. package/dist/client-python/_sse.py +0 -155
  433. package/dist/client-python/_transport.py +0 -366
  434. package/dist/client-python/_ws.py +0 -159
  435. package/dist/client-python/py.typed +0 -0
  436. package/dist/client-rust/errors.rs +0 -220
  437. package/dist/client-rust/invalidation.rs +0 -412
  438. package/dist/client-rust/invalidation_sync.rs +0 -93
  439. package/dist/client-rust/nullable.rs +0 -17
  440. package/dist/client-rust/realtime.rs +0 -702
  441. package/dist/client-rust/result.rs +0 -22
  442. package/dist/client-rust/runtime.rs +0 -980
  443. package/dist/client-rust/runtime_sync.rs +0 -484
  444. package/dist/client-rust/sse.rs +0 -188
  445. package/dist/client-rust/ws.rs +0 -167
  446. package/dist/codegen-go-cli.d.ts +0 -22
  447. package/dist/codegen-go-cli.d.ts.map +0 -1
  448. package/dist/codegen-go-cli.js +0 -964
  449. package/dist/codegen-go-cli.js.map +0 -1
  450. package/dist/codegen-go.d.ts +0 -41
  451. package/dist/codegen-go.d.ts.map +0 -1
  452. package/dist/codegen-go.js +0 -872
  453. package/dist/codegen-go.js.map +0 -1
  454. package/dist/codegen-hash.d.ts +0 -3
  455. package/dist/codegen-hash.d.ts.map +0 -1
  456. package/dist/codegen-hash.js +0 -9
  457. package/dist/codegen-hash.js.map +0 -1
  458. package/dist/codegen-ir.d.ts +0 -190
  459. package/dist/codegen-ir.d.ts.map +0 -1
  460. package/dist/codegen-ir.js +0 -661
  461. package/dist/codegen-ir.js.map +0 -1
  462. package/dist/codegen-lang.d.ts +0 -65
  463. package/dist/codegen-lang.d.ts.map +0 -1
  464. package/dist/codegen-lang.js +0 -526
  465. package/dist/codegen-lang.js.map +0 -1
  466. package/dist/codegen-load.d.ts +0 -31
  467. package/dist/codegen-load.d.ts.map +0 -1
  468. package/dist/codegen-load.js +0 -138
  469. package/dist/codegen-load.js.map +0 -1
  470. package/dist/codegen-loaders.d.ts +0 -12
  471. package/dist/codegen-loaders.d.ts.map +0 -1
  472. package/dist/codegen-loaders.js +0 -55
  473. package/dist/codegen-loaders.js.map +0 -1
  474. package/dist/codegen-mcp.d.ts +0 -13
  475. package/dist/codegen-mcp.d.ts.map +0 -1
  476. package/dist/codegen-mcp.js +0 -368
  477. package/dist/codegen-mcp.js.map +0 -1
  478. package/dist/codegen-python.d.ts +0 -33
  479. package/dist/codegen-python.d.ts.map +0 -1
  480. package/dist/codegen-python.js +0 -828
  481. package/dist/codegen-python.js.map +0 -1
  482. package/dist/codegen-route-tree-intern.d.ts +0 -40
  483. package/dist/codegen-route-tree-intern.d.ts.map +0 -1
  484. package/dist/codegen-route-tree-intern.js +0 -221
  485. package/dist/codegen-route-tree-intern.js.map +0 -1
  486. package/dist/codegen-rust.d.ts +0 -18
  487. package/dist/codegen-rust.d.ts.map +0 -1
  488. package/dist/codegen-rust.js +0 -1293
  489. package/dist/codegen-rust.js.map +0 -1
  490. package/dist/codegen-sanitize.d.ts +0 -3
  491. package/dist/codegen-sanitize.d.ts.map +0 -1
  492. package/dist/codegen-sanitize.js +0 -56
  493. package/dist/codegen-sanitize.js.map +0 -1
  494. package/dist/codegen-schema-naming.d.ts +0 -27
  495. package/dist/codegen-schema-naming.d.ts.map +0 -1
  496. package/dist/codegen-schema-naming.js +0 -150
  497. package/dist/codegen-schema-naming.js.map +0 -1
  498. package/dist/codegen-sdk-model.d.ts +0 -71
  499. package/dist/codegen-sdk-model.d.ts.map +0 -1
  500. package/dist/codegen-sdk-model.js +0 -179
  501. package/dist/codegen-sdk-model.js.map +0 -1
  502. package/dist/codegen.d.ts +0 -187
  503. package/dist/codegen.d.ts.map +0 -1
  504. package/dist/codegen.js +0 -4619
  505. package/dist/codegen.js.map +0 -1
  506. package/dist/context.d.ts +0 -86
  507. package/dist/context.d.ts.map +0 -1
  508. package/dist/context.js +0 -242
  509. package/dist/context.js.map +0 -1
  510. package/dist/cookie-sign.d.ts +0 -17
  511. package/dist/cookie-sign.d.ts.map +0 -1
  512. package/dist/cookie-sign.js +0 -104
  513. package/dist/cookie-sign.js.map +0 -1
  514. package/dist/cookie.d.ts +0 -24
  515. package/dist/cookie.d.ts.map +0 -1
  516. package/dist/cookie.js +0 -138
  517. package/dist/cookie.js.map +0 -1
  518. package/dist/cors.d.ts +0 -14
  519. package/dist/cors.d.ts.map +0 -1
  520. package/dist/cors.js +0 -87
  521. package/dist/cors.js.map +0 -1
  522. package/dist/crypto.d.ts +0 -7
  523. package/dist/crypto.d.ts.map +0 -1
  524. package/dist/crypto.js +0 -38
  525. package/dist/crypto.js.map +0 -1
  526. package/dist/csrf.d.ts +0 -28
  527. package/dist/csrf.d.ts.map +0 -1
  528. package/dist/csrf.js +0 -79
  529. package/dist/csrf.js.map +0 -1
  530. package/dist/curl-logger.d.ts +0 -44
  531. package/dist/curl-logger.d.ts.map +0 -1
  532. package/dist/curl-logger.js +0 -199
  533. package/dist/curl-logger.js.map +0 -1
  534. package/dist/detect-runtime.d.ts +0 -16
  535. package/dist/detect-runtime.d.ts.map +0 -1
  536. package/dist/detect-runtime.js +0 -13
  537. package/dist/detect-runtime.js.map +0 -1
  538. package/dist/dict.d.ts +0 -11
  539. package/dist/dict.d.ts.map +0 -1
  540. package/dist/dict.js +0 -13
  541. package/dist/dict.js.map +0 -1
  542. package/dist/error.d.ts +0 -21
  543. package/dist/error.d.ts.map +0 -1
  544. package/dist/error.js +0 -44
  545. package/dist/error.js.map +0 -1
  546. package/dist/errors.d.ts +0 -40
  547. package/dist/errors.d.ts.map +0 -1
  548. package/dist/errors.js +0 -39
  549. package/dist/errors.js.map +0 -1
  550. package/dist/etag.d.ts +0 -11
  551. package/dist/etag.d.ts.map +0 -1
  552. package/dist/etag.js +0 -82
  553. package/dist/etag.js.map +0 -1
  554. package/dist/feature-detect.d.ts +0 -25
  555. package/dist/feature-detect.d.ts.map +0 -1
  556. package/dist/feature-detect.js +0 -144
  557. package/dist/feature-detect.js.map +0 -1
  558. package/dist/feature-load.d.ts +0 -3
  559. package/dist/feature-load.d.ts.map +0 -1
  560. package/dist/feature-load.js +0 -36
  561. package/dist/feature-load.js.map +0 -1
  562. package/dist/feature-slots.d.ts +0 -44
  563. package/dist/feature-slots.d.ts.map +0 -1
  564. package/dist/feature-slots.js +0 -48
  565. package/dist/feature-slots.js.map +0 -1
  566. package/dist/fetch-request.d.ts +0 -10
  567. package/dist/fetch-request.d.ts.map +0 -1
  568. package/dist/fetch-request.js +0 -13
  569. package/dist/fetch-request.js.map +0 -1
  570. package/dist/gen-process.d.ts +0 -15
  571. package/dist/gen-process.d.ts.map +0 -1
  572. package/dist/gen-process.js +0 -43
  573. package/dist/gen-process.js.map +0 -1
  574. package/dist/gen-write.d.ts +0 -19
  575. package/dist/gen-write.d.ts.map +0 -1
  576. package/dist/gen-write.js +0 -120
  577. package/dist/gen-write.js.map +0 -1
  578. package/dist/glob.d.ts +0 -21
  579. package/dist/glob.d.ts.map +0 -1
  580. package/dist/glob.js +0 -115
  581. package/dist/glob.js.map +0 -1
  582. package/dist/go-type-emitter.d.ts +0 -47
  583. package/dist/go-type-emitter.d.ts.map +0 -1
  584. package/dist/go-type-emitter.js +0 -594
  585. package/dist/go-type-emitter.js.map +0 -1
  586. package/dist/honey-response.d.ts +0 -82
  587. package/dist/honey-response.d.ts.map +0 -1
  588. package/dist/honey-response.js +0 -338
  589. package/dist/honey-response.js.map +0 -1
  590. package/dist/i18n-slot.d.ts +0 -15
  591. package/dist/i18n-slot.d.ts.map +0 -1
  592. package/dist/i18n-slot.js +0 -14
  593. package/dist/i18n-slot.js.map +0 -1
  594. package/dist/i18n.d.ts +0 -29
  595. package/dist/i18n.d.ts.map +0 -1
  596. package/dist/i18n.js +0 -250
  597. package/dist/i18n.js.map +0 -1
  598. package/dist/index.d.ts.map +0 -1
  599. package/dist/index.js.map +0 -1
  600. package/dist/init.d.ts +0 -5
  601. package/dist/init.d.ts.map +0 -1
  602. package/dist/init.js +0 -140
  603. package/dist/init.js.map +0 -1
  604. package/dist/input.d.ts +0 -6
  605. package/dist/input.d.ts.map +0 -1
  606. package/dist/input.js +0 -4
  607. package/dist/input.js.map +0 -1
  608. package/dist/invalidate-check.d.ts +0 -61
  609. package/dist/invalidate-check.d.ts.map +0 -1
  610. package/dist/invalidate-check.js +0 -163
  611. package/dist/invalidate-check.js.map +0 -1
  612. package/dist/invoke-user.d.ts +0 -35
  613. package/dist/invoke-user.d.ts.map +0 -1
  614. package/dist/invoke-user.js +0 -73
  615. package/dist/invoke-user.js.map +0 -1
  616. package/dist/ip-restrict.d.ts +0 -24
  617. package/dist/ip-restrict.d.ts.map +0 -1
  618. package/dist/ip-restrict.js +0 -60
  619. package/dist/ip-restrict.js.map +0 -1
  620. package/dist/ip.d.ts +0 -39
  621. package/dist/ip.d.ts.map +0 -1
  622. package/dist/ip.js +0 -209
  623. package/dist/ip.js.map +0 -1
  624. package/dist/logger.d.ts +0 -45
  625. package/dist/logger.d.ts.map +0 -1
  626. package/dist/logger.js +0 -113
  627. package/dist/logger.js.map +0 -1
  628. package/dist/media-type.d.ts +0 -30
  629. package/dist/media-type.d.ts.map +0 -1
  630. package/dist/media-type.js +0 -97
  631. package/dist/media-type.js.map +0 -1
  632. package/dist/meta-spec-merge.d.ts +0 -32
  633. package/dist/meta-spec-merge.d.ts.map +0 -1
  634. package/dist/meta-spec-merge.js +0 -68
  635. package/dist/meta-spec-merge.js.map +0 -1
  636. package/dist/meta-spec.d.ts +0 -94
  637. package/dist/meta-spec.d.ts.map +0 -1
  638. package/dist/meta-spec.js +0 -535
  639. package/dist/meta-spec.js.map +0 -1
  640. package/dist/middleware.d.ts +0 -77
  641. package/dist/middleware.d.ts.map +0 -1
  642. package/dist/middleware.js +0 -253
  643. package/dist/middleware.js.map +0 -1
  644. package/dist/node-request.d.ts +0 -104
  645. package/dist/node-request.d.ts.map +0 -1
  646. package/dist/node-request.js +0 -407
  647. package/dist/node-request.js.map +0 -1
  648. package/dist/node.d.ts +0 -30
  649. package/dist/node.d.ts.map +0 -1
  650. package/dist/node.js +0 -396
  651. package/dist/node.js.map +0 -1
  652. package/dist/openapi/collect.d.ts.map +0 -1
  653. package/dist/openapi/collect.js.map +0 -1
  654. package/dist/openapi/docs-page.d.ts.map +0 -1
  655. package/dist/openapi/docs-page.js.map +0 -1
  656. package/dist/openapi/document.d.ts.map +0 -1
  657. package/dist/openapi/document.js.map +0 -1
  658. package/dist/openapi/json-schema-slot.d.ts +0 -12
  659. package/dist/openapi/json-schema-slot.d.ts.map +0 -1
  660. package/dist/openapi/json-schema-slot.js +0 -38
  661. package/dist/openapi/json-schema-slot.js.map +0 -1
  662. package/dist/openapi/register.d.ts.map +0 -1
  663. package/dist/openapi/register.js.map +0 -1
  664. package/dist/openapi/scalar.d.ts.map +0 -1
  665. package/dist/openapi/scalar.js.map +0 -1
  666. package/dist/openapi/serve.d.ts.map +0 -1
  667. package/dist/openapi/serve.js.map +0 -1
  668. package/dist/openapi/spec-factory.d.ts +0 -65
  669. package/dist/openapi/spec-factory.d.ts.map +0 -1
  670. package/dist/openapi/spec-factory.js +0 -52
  671. package/dist/openapi/spec-factory.js.map +0 -1
  672. package/dist/openapi/spec.d.ts +0 -29
  673. package/dist/openapi/spec.d.ts.map +0 -1
  674. package/dist/openapi/spec.js +0 -50
  675. package/dist/openapi/spec.js.map +0 -1
  676. package/dist/openapi/swagger.d.ts.map +0 -1
  677. package/dist/openapi/swagger.js.map +0 -1
  678. package/dist/pattern.d.ts +0 -71
  679. package/dist/pattern.d.ts.map +0 -1
  680. package/dist/pattern.js +0 -239
  681. package/dist/pattern.js.map +0 -1
  682. package/dist/peer.d.ts +0 -17
  683. package/dist/peer.d.ts.map +0 -1
  684. package/dist/peer.js +0 -50
  685. package/dist/peer.js.map +0 -1
  686. package/dist/plugin.d.ts +0 -228
  687. package/dist/plugin.d.ts.map +0 -1
  688. package/dist/plugin.js +0 -666
  689. package/dist/plugin.js.map +0 -1
  690. package/dist/powered-by.d.ts +0 -7
  691. package/dist/powered-by.d.ts.map +0 -1
  692. package/dist/powered-by.js +0 -11
  693. package/dist/powered-by.js.map +0 -1
  694. package/dist/pretty-json.d.ts +0 -10
  695. package/dist/pretty-json.d.ts.map +0 -1
  696. package/dist/pretty-json.js +0 -47
  697. package/dist/pretty-json.js.map +0 -1
  698. package/dist/producer-stream.d.ts +0 -47
  699. package/dist/producer-stream.d.ts.map +0 -1
  700. package/dist/producer-stream.js +0 -267
  701. package/dist/producer-stream.js.map +0 -1
  702. package/dist/proxy.d.ts +0 -90
  703. package/dist/proxy.d.ts.map +0 -1
  704. package/dist/proxy.js +0 -274
  705. package/dist/proxy.js.map +0 -1
  706. package/dist/python-type-emitter.d.ts +0 -24
  707. package/dist/python-type-emitter.d.ts.map +0 -1
  708. package/dist/python-type-emitter.js +0 -157
  709. package/dist/python-type-emitter.js.map +0 -1
  710. package/dist/realtime/bus.d.ts.map +0 -1
  711. package/dist/realtime/bus.js.map +0 -1
  712. package/dist/realtime/register.d.ts +0 -3
  713. package/dist/realtime/register.d.ts.map +0 -1
  714. package/dist/realtime/register.js +0 -10
  715. package/dist/realtime/register.js.map +0 -1
  716. package/dist/realtime/route.d.ts.map +0 -1
  717. package/dist/realtime/route.js.map +0 -1
  718. package/dist/realtime/server.d.ts.map +0 -1
  719. package/dist/realtime/server.js.map +0 -1
  720. package/dist/request-id.d.ts +0 -19
  721. package/dist/request-id.d.ts.map +0 -1
  722. package/dist/request-id.js +0 -16
  723. package/dist/request-id.js.map +0 -1
  724. package/dist/request-limits.d.ts +0 -3
  725. package/dist/request-limits.d.ts.map +0 -1
  726. package/dist/request-limits.js +0 -3
  727. package/dist/request-limits.js.map +0 -1
  728. package/dist/request-path.d.ts +0 -33
  729. package/dist/request-path.d.ts.map +0 -1
  730. package/dist/request-path.js +0 -178
  731. package/dist/request-path.js.map +0 -1
  732. package/dist/request-to-curl.d.ts +0 -15
  733. package/dist/request-to-curl.d.ts.map +0 -1
  734. package/dist/request-to-curl.js +0 -48
  735. package/dist/request-to-curl.js.map +0 -1
  736. package/dist/response.d.ts +0 -86
  737. package/dist/response.d.ts.map +0 -1
  738. package/dist/response.js +0 -313
  739. package/dist/response.js.map +0 -1
  740. package/dist/rust-type-emitter.d.ts +0 -44
  741. package/dist/rust-type-emitter.d.ts.map +0 -1
  742. package/dist/rust-type-emitter.js +0 -463
  743. package/dist/rust-type-emitter.js.map +0 -1
  744. package/dist/secure-headers.d.ts +0 -16
  745. package/dist/secure-headers.d.ts.map +0 -1
  746. package/dist/secure-headers.js +0 -53
  747. package/dist/secure-headers.js.map +0 -1
  748. package/dist/serve-register.d.ts +0 -6
  749. package/dist/serve-register.d.ts.map +0 -1
  750. package/dist/serve-register.js +0 -9
  751. package/dist/serve-register.js.map +0 -1
  752. package/dist/serve-slot.d.ts +0 -9
  753. package/dist/serve-slot.d.ts.map +0 -1
  754. package/dist/serve-slot.js +0 -52
  755. package/dist/serve-slot.js.map +0 -1
  756. package/dist/serve.d.ts +0 -38
  757. package/dist/serve.d.ts.map +0 -1
  758. package/dist/serve.js +0 -157
  759. package/dist/serve.js.map +0 -1
  760. package/dist/server-timing.d.ts +0 -9
  761. package/dist/server-timing.d.ts.map +0 -1
  762. package/dist/server-timing.js +0 -51
  763. package/dist/server-timing.js.map +0 -1
  764. package/dist/static.d.ts +0 -21
  765. package/dist/static.d.ts.map +0 -1
  766. package/dist/static.js +0 -102
  767. package/dist/static.js.map +0 -1
  768. package/dist/telemetry/otel.d.ts.map +0 -1
  769. package/dist/telemetry/otel.js.map +0 -1
  770. package/dist/testing.d.ts +0 -36
  771. package/dist/testing.d.ts.map +0 -1
  772. package/dist/testing.js +0 -124
  773. package/dist/testing.js.map +0 -1
  774. package/dist/timeout.d.ts +0 -13
  775. package/dist/timeout.d.ts.map +0 -1
  776. package/dist/timeout.js +0 -36
  777. package/dist/timeout.js.map +0 -1
  778. package/dist/tree.d.ts +0 -197
  779. package/dist/tree.d.ts.map +0 -1
  780. package/dist/tree.js +0 -437
  781. package/dist/tree.js.map +0 -1
  782. package/dist/trust.d.ts +0 -21
  783. package/dist/trust.d.ts.map +0 -1
  784. package/dist/trust.js +0 -100
  785. package/dist/trust.js.map +0 -1
  786. package/dist/ts-type-emitter.d.ts +0 -8
  787. package/dist/ts-type-emitter.d.ts.map +0 -1
  788. package/dist/ts-type-emitter.js +0 -150
  789. package/dist/ts-type-emitter.js.map +0 -1
  790. package/dist/type-emitter.d.ts +0 -36
  791. package/dist/type-emitter.d.ts.map +0 -1
  792. package/dist/type-emitter.js +0 -729
  793. package/dist/type-emitter.js.map +0 -1
  794. package/dist/type-extractor.d.ts +0 -43
  795. package/dist/type-extractor.d.ts.map +0 -1
  796. package/dist/type-extractor.js +0 -819
  797. package/dist/type-extractor.js.map +0 -1
  798. package/dist/types.d.ts +0 -467
  799. package/dist/types.d.ts.map +0 -1
  800. package/dist/types.js +0 -96
  801. package/dist/types.js.map +0 -1
  802. package/dist/validation.d.ts +0 -31
  803. package/dist/validation.d.ts.map +0 -1
  804. package/dist/validation.js +0 -335
  805. package/dist/validation.js.map +0 -1
  806. package/dist/with-headers.d.ts +0 -15
  807. package/dist/with-headers.d.ts.map +0 -1
  808. package/dist/with-headers.js +0 -45
  809. package/dist/with-headers.js.map +0 -1
  810. package/dist/ws/bun.d.ts.map +0 -1
  811. package/dist/ws/bun.js.map +0 -1
  812. package/dist/ws/cloudflare.d.ts.map +0 -1
  813. package/dist/ws/cloudflare.js.map +0 -1
  814. package/dist/ws/deno.d.ts +0 -13
  815. package/dist/ws/deno.d.ts.map +0 -1
  816. package/dist/ws/deno.js +0 -133
  817. package/dist/ws/deno.js.map +0 -1
  818. package/dist/ws/node.d.ts.map +0 -1
  819. package/dist/ws/node.js.map +0 -1
  820. package/dist/ws/session.d.ts.map +0 -1
  821. package/dist/ws/session.js.map +0 -1
  822. package/dist/ws/shared.d.ts.map +0 -1
  823. package/dist/ws/shared.js.map +0 -1
  824. package/dist/ws-origin.d.ts +0 -20
  825. package/dist/ws-origin.d.ts.map +0 -1
  826. package/dist/ws-origin.js +0 -41
  827. package/dist/ws-origin.js.map +0 -1
  828. package/dist/yaml.d.ts +0 -18
  829. package/dist/yaml.d.ts.map +0 -1
  830. package/dist/yaml.js +0 -101
  831. package/dist/yaml.js.map +0 -1
  832. package/docs/api-ref/go.md +0 -399
  833. package/docs/api-ref/python.md +0 -399
  834. package/docs/api-ref/rust.md +0 -399
  835. package/docs/api-ref/typescript.md +0 -399
  836. package/docs/invalidate-spec.md +0 -333
  837. package/docs/meta-spec.md +0 -555
  838. package/docs/packaging.md +0 -104
  839. package/docs/regression-matrix/README.md +0 -32
  840. package/docs/regression-matrix/review.md +0 -44
  841. package/docs/regression-matrix/ws1-3.md +0 -97
  842. package/docs/regression-matrix/ws4-8.md +0 -107
  843. package/docs/regression-matrix/ws9-12.md +0 -266
  844. package/docs/sdk.md +0 -798
  845. package/src/accepts.ts +0 -136
  846. package/src/body-kind.ts +0 -67
  847. package/src/body-limit.ts +0 -152
  848. package/src/build/index.ts +0 -217
  849. package/src/cli-args.ts +0 -123
  850. package/src/cli-go/auth.go +0 -26
  851. package/src/cli-go/config.go +0 -192
  852. package/src/cli-go/errors.go +0 -75
  853. package/src/cli-go/multipart.go +0 -79
  854. package/src/cli-go/output.go +0 -163
  855. package/src/cli-go/root.go +0 -30
  856. package/src/cli-go/stream.go +0 -88
  857. package/src/cli-go/version.go +0 -5
  858. package/src/cli.ts +0 -209
  859. package/src/client/defaults.ts +0 -47
  860. package/src/client/error.ts +0 -82
  861. package/src/client/http.ts +0 -737
  862. package/src/client/index.ts +0 -157
  863. package/src/client/path.ts +0 -169
  864. package/src/client/redirect-policy.ts +0 -19
  865. package/src/client/sdk.ts +0 -351
  866. package/src/client/sse.ts +0 -128
  867. package/src/client/types.ts +0 -206
  868. package/src/client/ws.ts +0 -149
  869. package/src/client-go/errors.go +0 -236
  870. package/src/client-go/export.go +0 -44
  871. package/src/client-go/invalidation.go +0 -371
  872. package/src/client-go/nullable.go +0 -62
  873. package/src/client-go/realtime.go +0 -354
  874. package/src/client-go/result.go +0 -20
  875. package/src/client-go/runtime.go +0 -975
  876. package/src/client-go/sse.go +0 -159
  877. package/src/client-go/transport.go +0 -495
  878. package/src/client-go/ws.go +0 -128
  879. package/src/client-info.ts +0 -79
  880. package/src/client-mcp/README.md +0 -10
  881. package/src/client-mcp/server.ts +0 -221
  882. package/src/client-mcp/types.ts +0 -19
  883. package/src/client-python/_errors.py +0 -115
  884. package/src/client-python/_invalidation.py +0 -494
  885. package/src/client-python/_realtime.py +0 -179
  886. package/src/client-python/_runtime.py +0 -860
  887. package/src/client-python/_sse.py +0 -155
  888. package/src/client-python/_transport.py +0 -366
  889. package/src/client-python/_ws.py +0 -159
  890. package/src/client-python/py.typed +0 -0
  891. package/src/client-rust/errors.rs +0 -220
  892. package/src/client-rust/invalidation.rs +0 -412
  893. package/src/client-rust/invalidation_sync.rs +0 -93
  894. package/src/client-rust/nullable.rs +0 -17
  895. package/src/client-rust/realtime.rs +0 -702
  896. package/src/client-rust/result.rs +0 -22
  897. package/src/client-rust/runtime.rs +0 -980
  898. package/src/client-rust/runtime_sync.rs +0 -484
  899. package/src/client-rust/sse.rs +0 -188
  900. package/src/client-rust/ws.rs +0 -167
  901. package/src/codegen-go-cli.ts +0 -1066
  902. package/src/codegen-go.ts +0 -970
  903. package/src/codegen-hash.ts +0 -8
  904. package/src/codegen-ir.ts +0 -812
  905. package/src/codegen-lang.ts +0 -517
  906. package/src/codegen-load.ts +0 -150
  907. package/src/codegen-loaders.ts +0 -50
  908. package/src/codegen-mcp.ts +0 -445
  909. package/src/codegen-python.ts +0 -916
  910. package/src/codegen-route-tree-intern.ts +0 -198
  911. package/src/codegen-rust.ts +0 -1402
  912. package/src/codegen-sanitize.ts +0 -57
  913. package/src/codegen-schema-naming.ts +0 -165
  914. package/src/codegen-sdk-model.ts +0 -228
  915. package/src/codegen.ts +0 -5089
  916. package/src/context.ts +0 -325
  917. package/src/cookie-sign.ts +0 -119
  918. package/src/cookie.ts +0 -143
  919. package/src/cors.ts +0 -95
  920. package/src/crypto.ts +0 -38
  921. package/src/csrf.ts +0 -86
  922. package/src/curl-logger.ts +0 -258
  923. package/src/detect-runtime.ts +0 -17
  924. package/src/dict.ts +0 -12
  925. package/src/error.ts +0 -55
  926. package/src/errors.ts +0 -85
  927. package/src/etag.ts +0 -97
  928. package/src/feature-detect.ts +0 -147
  929. package/src/feature-load.ts +0 -23
  930. package/src/feature-slots.ts +0 -70
  931. package/src/fetch-request.ts +0 -13
  932. package/src/gen-process.ts +0 -42
  933. package/src/gen-write.ts +0 -127
  934. package/src/glob.ts +0 -109
  935. package/src/go-type-emitter.ts +0 -660
  936. package/src/honey-response.ts +0 -379
  937. package/src/i18n-slot.ts +0 -30
  938. package/src/i18n.ts +0 -300
  939. package/src/index.ts +0 -3829
  940. package/src/init.ts +0 -161
  941. package/src/input.ts +0 -8
  942. package/src/invalidate-check.ts +0 -205
  943. package/src/invoke-user.ts +0 -95
  944. package/src/ip-restrict.ts +0 -79
  945. package/src/ip.ts +0 -194
  946. package/src/logger.ts +0 -178
  947. package/src/media-type.ts +0 -104
  948. package/src/meta-spec-merge.ts +0 -80
  949. package/src/meta-spec.ts +0 -718
  950. package/src/middleware.ts +0 -331
  951. package/src/node-request.ts +0 -431
  952. package/src/node.ts +0 -454
  953. package/src/openapi/collect.ts +0 -50
  954. package/src/openapi/docs-page.ts +0 -89
  955. package/src/openapi/document.ts +0 -902
  956. package/src/openapi/json-schema-slot.ts +0 -53
  957. package/src/openapi/register.ts +0 -23
  958. package/src/openapi/scalar.ts +0 -34
  959. package/src/openapi/serve.ts +0 -39
  960. package/src/openapi/spec-factory.ts +0 -100
  961. package/src/openapi/spec.ts +0 -74
  962. package/src/openapi/swagger.ts +0 -35
  963. package/src/pattern.ts +0 -245
  964. package/src/peer.ts +0 -53
  965. package/src/plugin.ts +0 -864
  966. package/src/powered-by.ts +0 -18
  967. package/src/pretty-json.ts +0 -56
  968. package/src/producer-stream.ts +0 -296
  969. package/src/proxy.ts +0 -370
  970. package/src/python-type-emitter.ts +0 -181
  971. package/src/realtime/bus.ts +0 -140
  972. package/src/realtime/register.ts +0 -13
  973. package/src/realtime/route.ts +0 -153
  974. package/src/realtime/server.ts +0 -298
  975. package/src/request-id.ts +0 -32
  976. package/src/request-limits.ts +0 -2
  977. package/src/request-path.ts +0 -165
  978. package/src/request-to-curl.ts +0 -52
  979. package/src/response.ts +0 -411
  980. package/src/rust-type-emitter.ts +0 -548
  981. package/src/secure-headers.ts +0 -74
  982. package/src/serve-register.ts +0 -12
  983. package/src/serve-slot.ts +0 -58
  984. package/src/serve.ts +0 -220
  985. package/src/server-timing.ts +0 -71
  986. package/src/static.ts +0 -112
  987. package/src/telemetry/otel.ts +0 -156
  988. package/src/testing.ts +0 -167
  989. package/src/timeout.ts +0 -45
  990. package/src/tree.ts +0 -558
  991. package/src/trust.ts +0 -117
  992. package/src/ts-type-emitter.ts +0 -168
  993. package/src/type-emitter.ts +0 -760
  994. package/src/type-extractor.ts +0 -855
  995. package/src/types.ts +0 -756
  996. package/src/validation.ts +0 -413
  997. package/src/with-headers.ts +0 -45
  998. package/src/ws/bun.ts +0 -120
  999. package/src/ws/cloudflare.ts +0 -192
  1000. package/src/ws/deno.ts +0 -188
  1001. package/src/ws/node.ts +0 -240
  1002. package/src/ws/session.ts +0 -73
  1003. package/src/ws/shared.ts +0 -140
  1004. package/src/ws-origin.ts +0 -53
  1005. package/src/yaml.ts +0 -103
package/src/codegen-go.ts DELETED
@@ -1,970 +0,0 @@
1
- /* Go SDK emitter — generates a complete Go module from an OpenAPI 3.1 spec.
2
- *
3
- * Input is the SDK request model (codegen-sdk-model.ts), never the raw spec. Every identifier
4
- * comes from a NameScope seeded with the runtime's own package-level names, and every spec string
5
- * lands in source through goString / goComment (codegen-lang.ts).
6
- *
7
- * Static runtime files (sse.go, ws.go, etc.) are read from ./client-go/ at module load time and
8
- * copied verbatim into the output file map.
9
- */
10
-
11
- import { spawnSync } from "node:child_process"
12
- import { readFileSync } from "node:fs"
13
- import { fileURLToPath } from "node:url"
14
- import type { OpenApiSpecInput } from "./codegen.ts"
15
- import { serviceMapOf } from "./codegen.ts"
16
- import { methodsOf, namespacesOf, specAuth } from "./codegen-ir.ts"
17
- import type { IRAuth, IRInfo, IRNamespace, IRSchema } from "./codegen-ir.ts"
18
- import {
19
- GO_KEYWORDS,
20
- GO_PREDECLARED,
21
- NameScope,
22
- cmpCodeUnit,
23
- goComment,
24
- goExported,
25
- goLocal,
26
- goString,
27
- } from "./codegen-lang.ts"
28
- import { buildSdkModel, valueCycleSchemas } from "./codegen-sdk-model.ts"
29
- import type { SdkModel, SdkOp } from "./codegen-sdk-model.ts"
30
- import { irRenderTopLevel, irRenderUse } from "./go-type-emitter.ts"
31
- import type { GoTypeNames, RenderUseCtx } from "./go-type-emitter.ts"
32
-
33
- /* ── types ── */
34
-
35
- export type GoSDKOptions = {
36
- /* post-process every emitted .go file with `gofmt`. Off by default — gofmt
37
- * spawns a subprocess per file and byte-equivalence snapshot tests want
38
- * stable unformatted output. Consumers publishing to pkg.go.dev should
39
- * enable it so the rendered docs are canonical Go (aligned struct fields,
40
- * multi-line if blocks, etc.). */
41
- gofmt?: boolean
42
- modulePath?: string
43
- throwOnError?: boolean
44
- }
45
-
46
- export type GeneratedGoSDK = {
47
- files: Record<string, string>
48
- serviceMap: Record<string, Record<string, unknown>>
49
- }
50
-
51
- /* ── runtime template loader ── */
52
-
53
- let runtimeCache: Map<string, string> | null = null
54
-
55
- const RUNTIME_FILES = [
56
- "result.go",
57
- "errors.go",
58
- "runtime.go",
59
- "invalidation.go",
60
- "sse.go",
61
- "ws.go",
62
- "transport.go",
63
- "realtime.go",
64
- "export.go",
65
- "nullable.go",
66
- ]
67
-
68
- /** Reads static .go runtime files from ./client-go/ and caches them. */
69
- export function loadGoRuntimeTemplates(): Map<string, string> {
70
- if (runtimeCache) return runtimeCache
71
-
72
- const cache = new Map<string, string>()
73
- for (const name of RUNTIME_FILES) {
74
- const filePath = fileURLToPath(new URL(`./client-go/${name}`, import.meta.url))
75
- let content: string
76
- try {
77
- content = readFileSync(filePath, "utf8")
78
- } catch {
79
- throw new Error(`loadGoRuntimeTemplates: missing file ${filePath}`)
80
- }
81
- cache.set(name, content)
82
- }
83
- runtimeCache = cache
84
- return cache
85
- }
86
-
87
- let runtimeIdentCache: Set<string> | null = null
88
-
89
- /** Every package-level identifier the runtime files declare; generated names must avoid them all. */
90
- export function goRuntimeIdentifiers(): Set<string> {
91
- if (runtimeIdentCache) return runtimeIdentCache
92
- const out = new Set<string>()
93
- for (const src of loadGoRuntimeTemplates().values()) {
94
- let inBlock = false
95
- for (const line of src.split("\n")) {
96
- const top = /^(?:func|type|var|const)\s+([A-Za-z_]\w*)/.exec(line)
97
- if (top) out.add(top[1])
98
- if (/^(?:var|const|type)\s*\($/.test(line)) {
99
- inBlock = true
100
- continue
101
- }
102
- if (inBlock) {
103
- if (line.startsWith(")")) inBlock = false
104
- else {
105
- const m = /^\t([A-Za-z_]\w*)/.exec(line)
106
- if (m) out.add(m[1])
107
- }
108
- }
109
- }
110
- }
111
- runtimeIdentCache = out
112
- return out
113
- }
114
-
115
- /* ── helpers ── */
116
-
117
- /** @deprecated kept for callers outside this file; use goLocal / goExported. */
118
- export function safeResourceName(name: string): string {
119
- const lower = name.toLowerCase()
120
- return GO_KEYWORDS.has(lower) ? `${name}_` : name
121
- }
122
-
123
- /**
124
- * Derive auth header name + prefix from OpenAPI securitySchemes.
125
- * Defaults to Authorization + "Bearer " when no scheme is declared, preserving
126
- * legacy behavior. apiKey type sends the raw token unless the scheme description
127
- * embeds a "Format: <Prefix> {token}" hint (common pattern for APIs like Anyrow
128
- * that use `Authorization: ApiKey <token>`).
129
- */
130
- /** The auth header and prefix the spec's first security scheme asks for (see `IR.auth`). */
131
- export function detectAuthScheme(spec: Record<string, unknown>): IRAuth {
132
- return specAuth(spec as unknown as OpenApiSpecInput)
133
- }
134
-
135
- function goImportBlock(stdlib: string[], thirdParty: string[]): string {
136
- const l: string[] = []
137
- l.push(`import (`)
138
- for (const p of [...new Set(stdlib)].sort(cmpCodeUnit)) l.push(`\t"${p}"`)
139
- if (thirdParty.length > 0) {
140
- l.push(``)
141
- for (const p of [...thirdParty].sort(cmpCodeUnit)) l.push(`\t"${p}"`)
142
- }
143
- l.push(`)`)
144
- return l.join("\n")
145
- }
146
-
147
- /* ── naming ── */
148
-
149
- /** Package-level names for one generated SDK. */
150
- export type GoNames = {
151
- scope: NameScope
152
- types: GoTypeNames
153
- hoistedDecls: Map<string, string>
154
- }
155
-
156
- export function buildGoNames(model: SdkModel): GoNames {
157
- const scope = new NameScope([...goRuntimeIdentifiers(), ...GO_PREDECLARED, "Client", "NewClient", "serviceEntry"])
158
- const schemaNames = new Map<string, string>()
159
- /* schemas first: a schema keeps its own name unless the runtime owns it */
160
- for (const name of model.schemaNames) {
161
- const base = goExported(name)
162
- schemaNames.set(name, scope.has(base) ? scope.claim(`${base}Model`) : scope.claim(base))
163
- }
164
- const hoistKeys = new Map<string, string>()
165
- const types: GoTypeNames = {
166
- claimConst: (base) => scope.claim(base),
167
- cyclic: valueCycleSchemas(model.ir.schemas),
168
- hoist: (key, base) => {
169
- const hit = hoistKeys.get(key)
170
- if (hit) return hit
171
- const name = scope.claim(base)
172
- hoistKeys.set(key, name)
173
- return name
174
- },
175
- ref: (name) => schemaNames.get(name) ?? goExported(name),
176
- resolve: model.resolve,
177
- }
178
- return { hoistedDecls: new Map(), scope, types }
179
- }
180
-
181
- /* ── buildGoTypes ── */
182
-
183
- function buildGoTypes(model: SdkModel, names: GoNames): string {
184
- const body: string[] = []
185
- const decls = names.hoistedDecls
186
- for (const name of model.schemaNames) {
187
- const ir = model.ir.schemas[name]
188
- const goName = names.types.ref(name)
189
- const description = Object.hasOwn(model.ir.schemaDescriptions, name) ? model.ir.schemaDescriptions[name] : ""
190
- if (description) body.push(...goComment(description))
191
- body.push(irRenderTopLevel(goName, ir, decls, undefined, names.types))
192
- body.push(``)
193
- }
194
- return body.join("\n")
195
- }
196
-
197
- function hoistedDeclsSource(decls: Map<string, string>): string {
198
- const out: string[] = []
199
- for (const name of [...decls.keys()].sort(cmpCodeUnit)) {
200
- const decl = decls.get(name)
201
- if (!decl) continue
202
- out.push(decl)
203
- out.push(``)
204
- }
205
- return out.join("\n")
206
- }
207
-
208
- /** types.go: component schemas, then every hoisted declaration (call after the client is planned). */
209
- function typesFile(schemaTypes: string, names: GoNames): string {
210
- const body = `${schemaTypes}\n${hoistedDeclsSource(names.hoistedDecls)}`
211
- const l: string[] = []
212
- /* blank line after generator header detaches it from package-doc on pkg.go.dev */
213
- l.push(`// Code generated by honey. DO NOT EDIT.`)
214
- l.push(``)
215
- l.push(`package sdk`)
216
- l.push(``)
217
- if (/\bjson\./.test(body)) {
218
- l.push(`import "encoding/json"`)
219
- l.push(``)
220
- }
221
- l.push(body)
222
- return l.join("\n")
223
- }
224
-
225
- /* ── buildGoMod ── */
226
-
227
- function buildGoMod(modulePath?: string): string {
228
- const mod = modulePath ?? "example.com/sdk"
229
- return [`module ${mod}`, ``, `go 1.24`, ``, `require nhooyr.io/websocket v1.8.17`, ``].join("\n")
230
- }
231
-
232
- /* ── buildGoDoc ── */
233
-
234
- function buildGoDoc(info: IRInfo): string {
235
- const title = info.title ?? "API"
236
- const desc = info.description ?? ""
237
- /* Generator directive on its own line, separated from package-doc by blank
238
- * line so pkg.go.dev does not aggregate "Code generated..." into Overview.
239
- * The `// Package sdk ...` line IS attached to `package sdk` (no blank line
240
- * before it) and becomes the package-level doc shown in the Overview. */
241
- const l: string[] = []
242
- l.push(`// Code generated by honey. DO NOT EDIT.`)
243
- l.push(``)
244
- l.push(...goComment(`Package sdk is an auto-generated client for ${title}.${desc ? ` ${desc}` : ""}`))
245
- l.push(`package sdk`)
246
- l.push(``)
247
- return l.join("\n")
248
- }
249
-
250
- /* ── buildGoClient ── */
251
-
252
- type GoOpPlan = {
253
- op: SdkOp
254
- methodName: string
255
- optsName: string
256
- /** opts struct field per query/header param */
257
- optFields: Array<{ goName: string; type: string; param: { name: string }; where: "query" | "header" }>
258
- /** local identifier per path param */
259
- pathLocals: Array<{ local: string; name: string }>
260
- bodyParam?: { local: string; type: string }
261
- multipartName?: string
262
- multipartFields?: Array<{
263
- goName: string
264
- type: string
265
- key: string
266
- file: boolean
267
- list: boolean
268
- required: boolean
269
- }>
270
- /** Go type returned on success, "" for none */
271
- resultType: string
272
- }
273
-
274
- const OPTS_RESERVED = [
275
- "Headers",
276
- "IdempotencyKey",
277
- "LastEventID",
278
- "ReconnectToken",
279
- "Protocols",
280
- "MaxReconnectAttempts",
281
- "ReconnectDelayMs",
282
- ]
283
-
284
- /** Locals every emitted method body uses. Path params must not shadow them. */
285
- const METHOD_LOCALS = [
286
- "ctx",
287
- "opts",
288
- "q",
289
- "path",
290
- "err",
291
- "result",
292
- "out",
293
- "resp",
294
- "req",
295
- "reqBody",
296
- "callHeaders",
297
- "pathParams",
298
- "concretePath",
299
- "selector",
300
- "requestMeta",
301
- "stale",
302
- "cfg",
303
- "yield",
304
- "ev",
305
- "conn",
306
- "dialOpts",
307
- "wsURL",
308
- "transports",
309
- "topts",
310
- "parts",
311
- "c",
312
- "r",
313
- ]
314
-
315
- function planOp(op: SdkOp, methodName: string, optsName: string, names: GoNames): GoOpPlan {
316
- const plan: GoOpPlan = { methodName, op, optFields: [], optsName, pathLocals: [], resultType: "" }
317
-
318
- const locals = new NameScope(METHOD_LOCALS)
319
- const bodyLocal =
320
- op.body && op.stream !== "ws" && op.stream !== "realtime"
321
- ? locals.claim(op.body.kind === "form" ? "form" : "body")
322
- : ""
323
- for (const p of op.pathParams) plan.pathLocals.push({ local: locals.claim(goLocal(p.name)), name: p.name })
324
-
325
- if (op.stream !== "realtime") {
326
- const fieldScope = new NameScope(OPTS_RESERVED)
327
- const decls = names.hoistedDecls
328
- const params: Array<[{ name: string; schema: IRSchema; required?: boolean }, "query" | "header"]> = [
329
- ...op.query.map((p): [typeof p, "query"] => [p, "query"]),
330
- ...op.headers.map((p): [typeof p, "header"] => [p, "header"]),
331
- ]
332
- for (const [p, where] of params) {
333
- if (op.stream === "sse" && where === "query" && /^last[-_]?event[-_]?id$/i.test(p.name)) continue
334
- const goName = fieldScope.claim(goExported(p.name))
335
- const ctx: RenderUseCtx = { decls, fieldName: goName, names: names.types, parentName: optsName }
336
- const t = irRenderUse(p.schema, ctx)
337
- const nilable = t.startsWith("*") || t.startsWith("[]") || t.startsWith("map[") || t === "json.RawMessage"
338
- plan.optFields.push({ goName, param: p, type: p.required || nilable ? t : `*${t}`, where })
339
- }
340
- }
341
-
342
- const body = op.body
343
- if (body && op.stream !== "ws" && op.stream !== "realtime") {
344
- const local = bodyLocal
345
- switch (body.kind) {
346
- case "json": {
347
- const resolved = body.schema
348
- let t: string
349
- if (resolved.kind === "ref") t = names.types.ref(resolved.name)
350
- else if (resolved.kind === "object" && resolved.fields.length > 0) {
351
- const name = names.types.hoist(`${op.id}.body`, `${optsName.replace(/Opts$/, "")}Body`)
352
- if (!names.hoistedDecls.has(name)) {
353
- names.hoistedDecls.set(name, "")
354
- names.hoistedDecls.set(name, irRenderTopLevel(name, resolved, names.hoistedDecls, undefined, names.types))
355
- }
356
- t = name
357
- } else {
358
- t = irRenderUse(resolved, {
359
- decls: names.hoistedDecls,
360
- fieldName: "Body",
361
- names: names.types,
362
- parentName: optsName.replace(/Opts$/, ""),
363
- })
364
- }
365
- plan.bodyParam = { local, type: t }
366
- break
367
- }
368
- case "form":
369
- plan.bodyParam = { local, type: "url.Values" }
370
- break
371
- case "binary":
372
- plan.bodyParam = { local, type: "io.Reader" }
373
- break
374
- case "text":
375
- plan.bodyParam = { local, type: "string" }
376
- break
377
- case "multipart": {
378
- const name = names.types.hoist(`${op.id}.multipart`, `${optsName.replace(/Opts$/, "")}Body`)
379
- const fieldScope = new NameScope()
380
- plan.multipartName = name
381
- plan.multipartFields = body.parts.map((part) => {
382
- const goName = fieldScope.claim(goExported(part.name))
383
- const schema = part.schema ? names.types.resolve(part.schema) : { kind: "unknown" as const }
384
- const list = schema.kind === "array"
385
- if (part.type === "file") {
386
- return { file: true, goName, key: part.name, list, required: true, type: list ? "[]FilePart" : "FilePart" }
387
- }
388
- const item = list && schema.kind === "array" ? schema.items : schema
389
- let t = "string"
390
- if (item.kind === "scalar") {
391
- t =
392
- item.type === "integer"
393
- ? "int64"
394
- : item.type === "number"
395
- ? "float64"
396
- : item.type === "boolean"
397
- ? "bool"
398
- : "string"
399
- }
400
- return { file: false, goName, key: part.name, list, required: false, type: list ? `[]${t}` : `*${t}` }
401
- })
402
- plan.bodyParam = { local, type: name }
403
- break
404
- }
405
- }
406
- }
407
-
408
- if (op.stream === null) {
409
- const s = op.success
410
- if (s.kind === "json") {
411
- if (!s.schema) plan.resultType = "json.RawMessage"
412
- else if (s.schema.kind === "ref") plan.resultType = names.types.ref(s.schema.name)
413
- else if (s.schema.kind === "object" && s.schema.fields.length > 0) {
414
- const name = names.types.hoist(`${op.id}.response`, `${optsName.replace(/Opts$/, "")}Response`)
415
- if (!names.hoistedDecls.has(name)) {
416
- names.hoistedDecls.set(name, "")
417
- names.hoistedDecls.set(name, irRenderTopLevel(name, s.schema, names.hoistedDecls, undefined, names.types))
418
- }
419
- plan.resultType = name
420
- } else {
421
- const t = irRenderUse(s.schema, {
422
- decls: names.hoistedDecls,
423
- fieldName: "Response",
424
- names: names.types,
425
- parentName: optsName.replace(/Opts$/, ""),
426
- })
427
- plan.resultType = t.startsWith("*") ? t.slice(1) : t
428
- }
429
- } else if (s.kind === "text") plan.resultType = "string"
430
- else if (s.kind === "binary") plan.resultType = "[]byte"
431
- }
432
- return plan
433
- }
434
-
435
- function emitOptsStruct(plan: GoOpPlan): string[] {
436
- const l: string[] = []
437
- const { op, optsName } = plan
438
- l.push(`// ${optsName} holds the optional inputs of ${plan.methodName}.`)
439
- if (op.stream === "realtime") {
440
- /* realtime ops get a fixed opts shape — transports receive
441
- * ReconnectToken / LastEventID via TransportOpts. */
442
- l.push(`type ${optsName} struct {`)
443
- l.push(`\tReconnectToken string`)
444
- l.push(`\tLastEventID string`)
445
- l.push(`\tProtocols []string`)
446
- l.push(`\t// MaxReconnectAttempts caps reconnects after a drop. Zero means 5; negative means unlimited.`)
447
- l.push(`\tMaxReconnectAttempts int`)
448
- l.push(`\t// ReconnectDelayMs is the first backoff delay. Zero means 1000.`)
449
- l.push(`\tReconnectDelayMs int`)
450
- l.push(`\tHeaders map[string]string`)
451
- l.push(`}`)
452
- l.push(``)
453
- return l
454
- }
455
- l.push(`type ${optsName} struct {`)
456
- for (const f of plan.optFields) l.push(`\t${f.goName} ${f.type}`)
457
- if (op.stream === "sse") l.push(`\tLastEventID string`)
458
- if (op.stream === "ws") {
459
- l.push(`\tReconnectToken string`)
460
- l.push(`\tProtocols []string`)
461
- }
462
- if (op.idempotent && op.stream === null) l.push(`\tIdempotencyKey string`)
463
- l.push(`\tHeaders map[string]string`)
464
- l.push(`}`)
465
- l.push(``)
466
- return l
467
- }
468
-
469
- function emitMultipartStruct(plan: GoOpPlan): string[] {
470
- if (!plan.multipartName || !plan.multipartFields) return []
471
- const l: string[] = []
472
- l.push(`// ${plan.multipartName} is the multipart/form-data body of ${plan.methodName}.`)
473
- l.push(`type ${plan.multipartName} struct {`)
474
- for (const f of plan.multipartFields) l.push(`\t${f.goName} ${f.type}`)
475
- l.push(`}`)
476
- l.push(``)
477
- return l
478
- }
479
-
480
- function pathExpr(plan: GoOpPlan): string {
481
- if (plan.pathLocals.length === 0) return ""
482
- return `map[string]string{${plan.pathLocals.map((p) => `${goString(p.name)}: ${p.local}`).join(", ")}}`
483
- }
484
-
485
- /** Lines that compute `path` (and return on error through `fail`). */
486
- function emitPath(plan: GoOpPlan, fail: string, indent: string): string[] {
487
- const l: string[] = []
488
- if (plan.pathLocals.length === 0) {
489
- l.push(`${indent}path := ${goString(plan.op.path)}`)
490
- return l
491
- }
492
- l.push(`${indent}path, err := expandPath(${goString(plan.op.path)}, ${pathExpr(plan)})`)
493
- l.push(`${indent}if err != nil {`)
494
- l.push(`${indent}\t${fail}`)
495
- l.push(`${indent}}`)
496
- return l
497
- }
498
-
499
- /** Lines that build `q` and `callHeaders` from opts. */
500
- function emitQueryAndHeaders(plan: GoOpPlan, indent: string, baseHeaders: string): string[] {
501
- const l: string[] = []
502
- l.push(`${indent}var q queryList`)
503
- l.push(`${indent}callHeaders := ${baseHeaders}`)
504
- l.push(`${indent}if opts != nil {`)
505
- for (const f of plan.optFields) {
506
- if (f.where === "query") l.push(`${indent}\tq.set(${goString(f.param.name)}, opts.${f.goName})`)
507
- }
508
- l.push(`${indent}\tfor k, v := range opts.Headers {`)
509
- l.push(`${indent}\t\tcallHeaders[k] = v`)
510
- l.push(`${indent}\t}`)
511
- for (const f of plan.optFields) {
512
- if (f.where === "header")
513
- l.push(`${indent}\tsetHeaderValue(callHeaders, ${goString(f.param.name)}, opts.${f.goName})`)
514
- }
515
- l.push(`${indent}}`)
516
- return l
517
- }
518
-
519
- /** Expression for the request body, plus setup lines. */
520
- function emitBody(plan: GoOpPlan, fail: string, indent: string): { lines: string[]; expr: string } {
521
- const body = plan.op.body
522
- const local = plan.bodyParam?.local
523
- if (!body || !local) return { expr: "noBody()", lines: [] }
524
- switch (body.kind) {
525
- case "json":
526
- return { expr: `jsonBody(${local})`, lines: [] }
527
- case "form":
528
- return { expr: `formBody(${local})`, lines: [] }
529
- case "text":
530
- return { expr: `rawBody([]byte(${local}), ${goString(body.contentType)})`, lines: [] }
531
- case "binary":
532
- return { expr: `readerBody(${local}, ${goString(body.contentType)})`, lines: [] }
533
- case "multipart": {
534
- const l: string[] = []
535
- l.push(`${indent}var parts []multipartField`)
536
- for (const f of plan.multipartFields ?? []) {
537
- if (f.file) {
538
- if (f.list) {
539
- l.push(`${indent}for _, file := range ${local}.${f.goName} {`)
540
- l.push(`${indent}\tparts = append(parts, fileField(${goString(f.key)}, file))`)
541
- l.push(`${indent}}`)
542
- } else {
543
- l.push(`${indent}parts = append(parts, fileField(${goString(f.key)}, ${local}.${f.goName}))`)
544
- }
545
- } else if (f.list) {
546
- l.push(`${indent}for _, v := range ${local}.${f.goName} {`)
547
- l.push(`${indent}\tparts = append(parts, textField(${goString(f.key)}, v))`)
548
- l.push(`${indent}}`)
549
- } else {
550
- l.push(`${indent}if ${local}.${f.goName} != nil {`)
551
- l.push(`${indent}\tparts = append(parts, textField(${goString(f.key)}, *${local}.${f.goName}))`)
552
- l.push(`${indent}}`)
553
- }
554
- }
555
- l.push(`${indent}reqBody, err := multipartBody(parts)`)
556
- l.push(`${indent}if err != nil {`)
557
- l.push(`${indent}\t${fail}`)
558
- l.push(`${indent}}`)
559
- return { expr: "reqBody", lines: l }
560
- }
561
- }
562
- }
563
-
564
- function emitDoc(plan: GoOpPlan): string[] {
565
- const l: string[] = []
566
- const { op } = plan
567
- const text = [op.summary, op.description].filter((s) => s !== "").join("\n")
568
- if (text) l.push(...goComment(`${plan.methodName} — ${text}`))
569
- if (op.deprecated) {
570
- if (text) l.push(`//`)
571
- l.push(`// Deprecated: the API marks this operation deprecated.`)
572
- }
573
- return l
574
- }
575
-
576
- function emitMethod(plan: GoOpPlan, recv: string, recvType: string, throwOnError: boolean): string[] {
577
- const l: string[] = []
578
- const { op, optsName } = plan
579
- const cfg = recvType === "*Client" ? `${recv}.cfg` : `${recv}.client.cfg`
580
- const stale = recvType === "*Client" ? `${recv}.stale` : `${recv}.client.stale`
581
-
582
- l.push(...emitDoc(plan))
583
-
584
- const params: string[] = [`ctx context.Context`]
585
- for (const p of plan.pathLocals) params.push(`${p.local} string`)
586
- if (plan.bodyParam) params.push(`${plan.bodyParam.local} ${plan.bodyParam.type}`)
587
- params.push(`opts *${optsName}`)
588
-
589
- if (op.stream === "realtime") {
590
- l.push(`func (${recv} ${recvType}) ${plan.methodName}(${params.join(", ")}) (*ResumableConnection, error) {`)
591
- /* ctx bounds nothing here: ResumableConnection.Connect(ctx) takes its own */
592
- l.push(`\t_ = ctx`)
593
- l.push(...emitPath(plan, "return nil, err", "\t"))
594
- l.push(`\trtURL, err := buildURL(${cfg}.BaseURL, path, nil)`)
595
- l.push(`\tif err != nil {`)
596
- l.push(`\t\treturn nil, err`)
597
- l.push(`\t}`)
598
- l.push(`\tvar extra map[string]string`)
599
- l.push(`\ttopts := &TransportOpts{HTTPClient: streamClient(${cfg})}`)
600
- l.push(`\tif opts != nil {`)
601
- l.push(`\t\textra = opts.Headers`)
602
- l.push(`\t\ttopts.ReconnectToken = opts.ReconnectToken`)
603
- l.push(`\t\ttopts.LastEventID = opts.LastEventID`)
604
- l.push(`\t\ttopts.Protocols = opts.Protocols`)
605
- l.push(`\t\ttopts.MaxReconnectAttempts = opts.MaxReconnectAttempts`)
606
- l.push(`\t\ttopts.ReconnectDelayMs = opts.ReconnectDelayMs`)
607
- l.push(`\t}`)
608
- l.push(`\ttopts.Headers = authHeaders(${cfg}, extra)`)
609
- l.push(`\ttransports := []Transport{&WsTransport{}, &SseTransport{}, &LongpollTransport{}}`)
610
- l.push(`\treturn NewResumableConnection(rtURL, transports, topts), nil`)
611
- l.push(`}`)
612
- l.push(``)
613
- return l
614
- }
615
-
616
- if (op.stream === "sse") {
617
- l.push(`func (${recv} ${recvType}) ${plan.methodName}(${params.join(", ")}) iter.Seq2[SSEEvent, error] {`)
618
- l.push(`\treturn func(yield func(SSEEvent, error) bool) {`)
619
- l.push(...emitPath(plan, "yield(SSEEvent{}, err)\n\t\t\treturn", "\t\t"))
620
- l.push(...emitQueryAndHeaders(plan, "\t\t", `map[string]string{"Accept": "text/event-stream"}`))
621
- l.push(`\t\tif opts != nil && opts.LastEventID != "" {`)
622
- l.push(`\t\t\tcallHeaders["Last-Event-ID"] = opts.LastEventID`)
623
- l.push(`\t\t}`)
624
- const body = emitBody(plan, "yield(SSEEvent{}, err)\n\t\t\treturn", "\t\t")
625
- l.push(...body.lines)
626
- l.push(`\t\tresp, err := openStream(ctx, ${cfg}, ${goString(op.method)}, path, q, ${body.expr}, callHeaders)`)
627
- l.push(`\t\tif err != nil {`)
628
- l.push(`\t\t\tyield(SSEEvent{}, err)`)
629
- l.push(`\t\t\treturn`)
630
- l.push(`\t\t}`)
631
- l.push(`\t\tfor ev, err := range parseSSEStream(ctx, resp) {`)
632
- l.push(`\t\t\tif !yield(ev, err) {`)
633
- l.push(`\t\t\t\treturn`)
634
- l.push(`\t\t\t}`)
635
- l.push(`\t\t}`)
636
- l.push(`\t}`)
637
- l.push(`}`)
638
- l.push(``)
639
- return l
640
- }
641
-
642
- if (op.stream === "ws") {
643
- l.push(`func (${recv} ${recvType}) ${plan.methodName}(${params.join(", ")}) (*TypedWebSocket, error) {`)
644
- l.push(...emitPath(plan, "return nil, err", "\t"))
645
- l.push(...emitQueryAndHeaders(plan, "\t", "map[string]string{}"))
646
- l.push(`\tif opts != nil && opts.ReconnectToken != "" {`)
647
- l.push(`\t\tq.set("reconnect_token", opts.ReconnectToken)`)
648
- l.push(`\t}`)
649
- l.push(`\twsURL, err := buildURL(${cfg}.BaseURL, path, q)`)
650
- l.push(`\tif err != nil {`)
651
- l.push(`\t\treturn nil, err`)
652
- l.push(`\t}`)
653
- l.push(
654
- `\tdialOpts := &websocket.DialOptions{HTTPClient: streamClient(${cfg}), HTTPHeader: authHeaders(${cfg}, callHeaders)}`,
655
- )
656
- l.push(`\tif opts != nil && len(opts.Protocols) > 0 {`)
657
- l.push(`\t\tdialOpts.Subprotocols = opts.Protocols`)
658
- l.push(`\t}`)
659
- l.push(`\tconn, _, err := websocket.Dial(ctx, toWsURL(wsURL), dialOpts)`)
660
- l.push(`\tif err != nil {`)
661
- l.push(`\t\treturn nil, err`)
662
- l.push(`\t}`)
663
- l.push(`\treturn newTypedWebSocket(conn), nil`)
664
- l.push(`}`)
665
- l.push(``)
666
- return l
667
- }
668
-
669
- const resultType = plan.resultType
670
- let ret: string
671
- let failRet: string
672
- if (resultType === "") {
673
- ret = "error"
674
- failRet = "return err"
675
- } else if (throwOnError) {
676
- ret = `(*${resultType}, error)`
677
- failRet = "return nil, err"
678
- } else {
679
- ret = `(SDKResult[${resultType}], error)`
680
- failRet = `return SDKResult[${resultType}]{}, err`
681
- }
682
- l.push(`func (${recv} ${recvType}) ${plan.methodName}(${params.join(", ")}) ${ret} {`)
683
- l.push(`\tvar err error`)
684
- l.push(...emitPath(plan, failRet, "\t"))
685
- l.push(...emitQueryAndHeaders(plan, "\t", "map[string]string{}"))
686
-
687
- /* idempotency-key auto-injection: an explicit header (any casing) wins, then
688
- * opts.IdempotencyKey, then a fresh UUID — every dispatch carries a key. */
689
- if (op.idempotent) {
690
- l.push(`\tif !hasHeader(callHeaders, "Idempotency-Key") {`)
691
- l.push(`\t\tkey := newUUIDv4()`)
692
- l.push(`\t\tif opts != nil && opts.IdempotencyKey != "" {`)
693
- l.push(`\t\t\tkey = opts.IdempotencyKey`)
694
- l.push(`\t\t}`)
695
- l.push(`\t\tcallHeaders["Idempotency-Key"] = key`)
696
- l.push(`\t}`)
697
- }
698
-
699
- const body = emitBody(plan, failRet, "\t")
700
- l.push(...body.lines)
701
-
702
- /* invalidation pre-flight for every call: reads see and clear staleness too */
703
- const pathParamsExpr = plan.pathLocals.length > 0 ? pathExpr(plan) : "map[string]string(nil)"
704
- l.push(`\tpathParams := ${pathParamsExpr}`)
705
- l.push(`\tselector := ${goString(`${op.method} `)} + path`)
706
- l.push(`\tvar requestMeta *RequestMeta`)
707
- l.push(`\tif ${stale} != nil {`)
708
- l.push(`\t\trequestMeta = ${stale}.BuildRequestMeta(selector, path, ${goString(op.method)})`)
709
- l.push(`\t}`)
710
-
711
- const resultBind = resultType === "" ? "_, err =" : "result, err :="
712
- l.push(
713
- `\t${resultBind} doRequest(ctx, ${cfg}, ${goString(op.method)}, path, q, ${body.expr}, callHeaders, ${goString(`${op.method} ${op.path}`)}, requestMeta)`,
714
- )
715
- l.push(`\tif err != nil {`)
716
- if (resultType !== "" && !throwOnError) {
717
- l.push(`\t\tvar apiErr APIError`)
718
- l.push(`\t\tif errors.As(err, &apiErr) {`)
719
- l.push(`\t\t\treturn SDKResult[${resultType}]{Err: apiErr, Status: apiErr.Status()}, nil`)
720
- l.push(`\t\t}`)
721
- l.push(`\t\treturn SDKResult[${resultType}]{}, err`)
722
- } else {
723
- l.push(`\t\t${failRet}`)
724
- }
725
- l.push(`\t}`)
726
-
727
- /* invalidation post-flight: mark declared targets stale (templated ones expanded
728
- * with this call's params), then clear this key if the call read through a stale window */
729
- l.push(`\tif ${stale} != nil {`)
730
- if (op.invalidates.length > 0) {
731
- l.push(`\t\t${stale}.MarkStale([]string{${op.invalidates.map(goString).join(", ")}}, pathParams, selector)`)
732
- } else {
733
- l.push(`\t\t_ = pathParams`)
734
- }
735
- l.push(`\t\tif requestMeta != nil && requestMeta.IsStale {`)
736
- l.push(`\t\t\t${stale}.ClearStale(selector, path, ${goString(op.method)}, requestMeta.SeqSnapshot)`)
737
- l.push(`\t\t}`)
738
- l.push(`\t}`)
739
-
740
- if (resultType === "") {
741
- l.push(`\treturn nil`)
742
- l.push(`}`)
743
- l.push(``)
744
- return l
745
- }
746
-
747
- l.push(`\tvar out ${resultType}`)
748
- if (op.success.kind === "text") {
749
- l.push(`\tout = string(result.body)`)
750
- } else if (op.success.kind === "binary") {
751
- l.push(`\tout = result.body`)
752
- } else {
753
- l.push(`\tif len(result.body) > 0 {`)
754
- l.push(`\t\tif err := json.Unmarshal(result.body, &out); err != nil {`)
755
- if (throwOnError) {
756
- l.push(`\t\t\treturn nil, fmt.Errorf("honey: decode response: %w", err)`)
757
- } else {
758
- l.push(
759
- `\t\t\treturn SDKResult[${resultType}]{Err: &StatusError{StatusCode: result.status, Body: result.body, Response: result.resp, Message: err.Error()}, Status: result.status, Response: result.resp}, nil`,
760
- )
761
- }
762
- l.push(`\t\t}`)
763
- l.push(`\t}`)
764
- }
765
- if (throwOnError) l.push(`\treturn &out, nil`)
766
- else l.push(`\treturn SDKResult[${resultType}]{Data: &out, Status: result.status, Response: result.resp}, nil`)
767
- l.push(`}`)
768
- l.push(``)
769
- return l
770
- }
771
-
772
- type ResourceNode = {
773
- structName: string
774
- ns: IRNamespace
775
- path: string[]
776
- children: Array<{ field: string; node: ResourceNode }>
777
- methods: GoOpPlan[]
778
- }
779
-
780
- function buildGoClient(
781
- model: SdkModel,
782
- names: GoNames,
783
- options: GoSDKOptions,
784
- auth: { headerName: string; prefix: string },
785
- ): string {
786
- const throwOnError = options.throwOnError ?? true
787
-
788
- /* plan resources top-down so names are claimed in a stable order */
789
- const allPlans: GoOpPlan[] = []
790
- function planNs(
791
- ns: IRNamespace,
792
- path: string[],
793
- reserved: string[],
794
- ): { children: ResourceNode["children"]; methods: GoOpPlan[] } {
795
- const members = new NameScope(reserved)
796
- const children: ResourceNode["children"] = []
797
- for (const [seg, childNs] of namespacesOf(ns)) {
798
- const field = members.claim(goExported(seg))
799
- const childPath = [...path, seg]
800
- const structName = names.scope.claim(`${childPath.map(goExported).join("")}Resource`)
801
- children.push({ field, node: { children: [], methods: [], ns: childNs, path: childPath, structName } })
802
- }
803
- const methods: GoOpPlan[] = []
804
- for (const [seg, irOp] of methodsOf(ns)) {
805
- const op = model.opsById.get(irOp.id)
806
- if (!op) continue
807
- const base = goExported(seg)
808
- /* Go forbids a field and a method with one name: `extract` + `extract.table` → ExtractCall */
809
- const methodName = members.has(base) ? members.claim(`${base}Call`) : members.claim(base)
810
- const optsName = names.scope.claim(`${[...path, seg].map(goExported).join("")}Opts`)
811
- const plan = planOp(op, methodName, optsName, names)
812
- methods.push(plan)
813
- allPlans.push(plan)
814
- }
815
- for (const child of children) {
816
- const sub = planNs(child.node.ns, child.node.path, ["client"])
817
- child.node.children = sub.children
818
- child.node.methods = sub.methods
819
- }
820
- return { children, methods }
821
- }
822
- const root = planNs(model.ir.tree, [], ["cfg", "stale", "IsStale"])
823
-
824
- const body: string[] = []
825
- /* ---- Client struct: cfg + stale + one field per root namespace ---- */
826
- body.push(`// Client is the generated SDK client.`)
827
- body.push(`type Client struct {`)
828
- body.push(`\tcfg Config`)
829
- body.push(`\tstale *StaleTracker`)
830
- for (const child of root.children) body.push(`\t${child.field} *${child.node.structName}`)
831
- body.push(`}`)
832
- body.push(``)
833
- body.push(emitClientBody(root, allPlans, throwOnError, auth))
834
- return body.join("\n")
835
- }
836
-
837
- function emitClientBody(
838
- root: { children: ResourceNode["children"]; methods: GoOpPlan[] },
839
- allPlans: GoOpPlan[],
840
- throwOnError: boolean,
841
- auth: { headerName: string; prefix: string },
842
- ): string {
843
- const body: string[] = []
844
- /* ---- NewClient: init + cascade nested struct init ---- */
845
- body.push(`// NewClient creates a new SDK client. BaseURL must be non-empty.`)
846
- body.push(`func NewClient(cfg Config) *Client {`)
847
- body.push(`\tif cfg.BaseURL == "" {`)
848
- body.push(`\t\tpanic("honey sdk: Config.BaseURL must not be empty")`)
849
- body.push(`\t}`)
850
- body.push(`\tif cfg.AuthHeaderName == "" {`)
851
- body.push(`\t\tcfg.AuthHeaderName = ${goString(auth.headerName)}`)
852
- body.push(`\t}`)
853
- body.push(`\tif cfg.AuthHeaderPrefix == "" {`)
854
- body.push(`\t\tcfg.AuthHeaderPrefix = ${goString(auth.prefix)}`)
855
- body.push(`\t}`)
856
- body.push(`\tcfg = prepareConfig(cfg)`)
857
- body.push(`\tc := &Client{cfg: cfg}`)
858
- body.push(`\tc.stale = NewStaleTracker(cfg.Invalidation)`)
859
- for (const child of root.children) body.push(`\tc.${child.field} = new${child.node.structName}(c)`)
860
- body.push(`\treturn c`)
861
- body.push(`}`)
862
- body.push(``)
863
-
864
- /* IsStale predicate */
865
- body.push(`// IsStale reports whether (method, path) currently sits inside an active stale window.`)
866
- body.push(`func (c *Client) IsStale(method, path string) bool {`)
867
- body.push(`\tif c.stale == nil {`)
868
- body.push(`\t\treturn false`)
869
- body.push(`\t}`)
870
- body.push(`\treturn c.stale.IsStale(method, path)`)
871
- body.push(`}`)
872
- body.push(``)
873
-
874
- for (const plan of root.methods) body.push(...emitMethod(plan, "c", "*Client", throwOnError))
875
-
876
- function emitResource(node: ResourceNode): void {
877
- body.push(`// ${node.structName} groups the ${goString(node.path.join("."))} operations.`)
878
- body.push(`type ${node.structName} struct {`)
879
- body.push(`\tclient *Client`)
880
- for (const child of node.children) body.push(`\t${child.field} *${child.node.structName}`)
881
- body.push(`}`)
882
- body.push(``)
883
- body.push(`func new${node.structName}(c *Client) *${node.structName} {`)
884
- body.push(`\tr := &${node.structName}{client: c}`)
885
- for (const child of node.children) body.push(`\tr.${child.field} = new${child.node.structName}(c)`)
886
- body.push(`\treturn r`)
887
- body.push(`}`)
888
- body.push(``)
889
- for (const plan of node.methods) body.push(...emitMethod(plan, "r", `*${node.structName}`, throwOnError))
890
- for (const child of node.children) emitResource(child.node)
891
- }
892
- for (const child of root.children) emitResource(child.node)
893
-
894
- for (const plan of [...allPlans].sort((a, b) => cmpCodeUnit(a.optsName, b.optsName))) {
895
- body.push(...emitMultipartStruct(plan))
896
- body.push(...emitOptsStruct(plan))
897
- }
898
- return body.join("\n")
899
- }
900
-
901
- function clientFile(model: SdkModel, names: GoNames, options: GoSDKOptions): string {
902
- const bodyStr = buildGoClient(model, names, options, model.ir.auth)
903
-
904
- const stdlib = ["context"]
905
- const uses = (re: RegExp) => re.test(bodyStr)
906
- if (uses(/\bjson\./)) stdlib.push("encoding/json")
907
- if (uses(/\berrors\./)) stdlib.push("errors")
908
- if (uses(/\bfmt\./)) stdlib.push("fmt")
909
- if (uses(/\bio\./)) stdlib.push("io")
910
- if (uses(/\biter\./)) stdlib.push("iter")
911
- if (uses(/\burl\./)) stdlib.push("net/url")
912
- const thirdParty = uses(/\bwebsocket\./) ? ["nhooyr.io/websocket"] : []
913
-
914
- const out: string[] = []
915
- /* blank line after generator header detaches it from package-doc on pkg.go.dev */
916
- out.push(`// Code generated by honey. DO NOT EDIT.`)
917
- out.push(``)
918
- out.push(`package sdk`)
919
- out.push(``)
920
- out.push(goImportBlock(stdlib, thirdParty))
921
- out.push(``)
922
- out.push(bodyStr)
923
- return out.join("\n")
924
- }
925
-
926
- /* ── public entrypoint ── */
927
-
928
- /**
929
- * Generates a complete Go SDK module from an OpenAPI 3.1 spec.
930
- * Returns a file map (filename → content) ready to write to disk as a Go module.
931
- */
932
- export function generateGoSDK(spec: Record<string, unknown>, options: GoSDKOptions = {}): GeneratedGoSDK {
933
- const input = spec as unknown as OpenApiSpecInput
934
- const model = buildSdkModel(input)
935
- const names = buildGoNames(model)
936
- const serviceMap = serviceMapOf(model.ir)
937
-
938
- const files: Record<string, string> = {}
939
-
940
- /* static runtime templates */
941
- for (const [name, content] of loadGoRuntimeTemplates()) {
942
- files[name] = content
943
- }
944
-
945
- /* schema types claim their names first; the client then hoists into the same table */
946
- const schemaTypes = buildGoTypes(model, names)
947
- files["client.go"] = clientFile(model, names, options)
948
- files["types.go"] = typesFile(schemaTypes, names)
949
- files["go.mod"] = buildGoMod(options.modulePath)
950
- files["doc.go"] = buildGoDoc(model.ir.info)
951
-
952
- /* Opt-in post-process. Consumers publishing to pkg.go.dev pass `gofmt: true`
953
- * so struct fields align and single-line `if` blocks expand. No-op when
954
- * gofmt is not on PATH (pure-JS environments), preserving generator
955
- * portability. */
956
- if (options.gofmt) {
957
- for (const [name, content] of Object.entries(files)) {
958
- if (!name.endsWith(".go")) continue
959
- files[name] = tryGofmt(content)
960
- }
961
- }
962
-
963
- return { files, serviceMap }
964
- }
965
-
966
- function tryGofmt(src: string): string {
967
- const res = spawnSync("gofmt", [], { encoding: "utf8", input: src })
968
- if (res.error || res.status !== 0 || !res.stdout) return src
969
- return res.stdout
970
- }