hono 4.13.9 → 4.13.11

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 (566) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +13 -0
  2. package/dist/adapter/aws-lambda/conninfo.js +42 -23
  3. package/dist/adapter/aws-lambda/handler.js +318 -344
  4. package/dist/adapter/aws-lambda/index.js +2 -8
  5. package/dist/adapter/aws-lambda/types.js +1 -0
  6. package/dist/adapter/bun/conninfo.js +20 -25
  7. package/dist/adapter/bun/index.js +3 -13
  8. package/dist/adapter/bun/serve-static.js +27 -27
  9. package/dist/adapter/bun/server.js +11 -5
  10. package/dist/adapter/bun/ssg.js +25 -15
  11. package/dist/adapter/bun/websocket.js +61 -68
  12. package/dist/adapter/cloudflare-pages/conninfo.js +24 -9
  13. package/dist/adapter/cloudflare-pages/handler.js +59 -62
  14. package/dist/adapter/cloudflare-pages/index.js +2 -8
  15. package/dist/adapter/cloudflare-workers/conninfo.js +7 -9
  16. package/dist/adapter/cloudflare-workers/index.js +3 -8
  17. package/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
  18. package/dist/adapter/cloudflare-workers/serve-static.js +26 -20
  19. package/dist/adapter/cloudflare-workers/utils.js +21 -34
  20. package/dist/adapter/cloudflare-workers/websocket.js +31 -39
  21. package/dist/adapter/deno/conninfo.js +16 -13
  22. package/dist/adapter/deno/deno.d.js +1 -0
  23. package/dist/adapter/deno/index.js +3 -10
  24. package/dist/adapter/deno/serve-static.js +33 -38
  25. package/dist/adapter/deno/ssg.js +27 -16
  26. package/dist/adapter/deno/websocket.js +30 -30
  27. package/dist/adapter/lambda-edge/conninfo.js +7 -9
  28. package/dist/adapter/lambda-edge/handler.js +102 -101
  29. package/dist/adapter/lambda-edge/index.js +2 -6
  30. package/dist/adapter/netlify/conninfo.js +24 -9
  31. package/dist/adapter/netlify/handler.js +10 -8
  32. package/dist/adapter/netlify/index.js +3 -2
  33. package/dist/adapter/netlify/mod.js +2 -6
  34. package/dist/adapter/service-worker/handler.js +15 -19
  35. package/dist/adapter/service-worker/index.js +23 -7
  36. package/dist/adapter/service-worker/types.js +1 -0
  37. package/dist/adapter/vercel/conninfo.js +7 -10
  38. package/dist/adapter/vercel/handler.js +8 -6
  39. package/dist/adapter/vercel/index.js +2 -6
  40. package/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
  41. package/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
  42. package/dist/cjs/adapter/aws-lambda/handler.js +326 -373
  43. package/dist/cjs/adapter/aws-lambda/index.js +7 -34
  44. package/dist/cjs/adapter/aws-lambda/types.js +0 -15
  45. package/dist/cjs/adapter/bun/conninfo.js +21 -47
  46. package/dist/cjs/adapter/bun/index.js +14 -45
  47. package/dist/cjs/adapter/bun/serve-static.js +29 -50
  48. package/dist/cjs/adapter/bun/server.js +11 -26
  49. package/dist/cjs/adapter/bun/ssg.js +24 -35
  50. package/dist/cjs/adapter/bun/websocket.js +63 -91
  51. package/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
  52. package/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
  53. package/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
  54. package/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
  55. package/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
  56. package/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
  57. package/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
  58. package/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
  59. package/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
  60. package/dist/cjs/adapter/deno/conninfo.js +16 -34
  61. package/dist/cjs/adapter/deno/index.js +10 -38
  62. package/dist/cjs/adapter/deno/serve-static.js +33 -59
  63. package/dist/cjs/adapter/deno/ssg.js +27 -37
  64. package/dist/cjs/adapter/deno/websocket.js +32 -53
  65. package/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
  66. package/dist/cjs/adapter/lambda-edge/handler.js +102 -130
  67. package/dist/cjs/adapter/lambda-edge/index.js +5 -30
  68. package/dist/cjs/adapter/netlify/conninfo.js +25 -31
  69. package/dist/cjs/adapter/netlify/handler.js +10 -29
  70. package/dist/cjs/adapter/netlify/index.js +5 -21
  71. package/dist/cjs/adapter/netlify/mod.js +5 -30
  72. package/dist/cjs/adapter/service-worker/handler.js +16 -41
  73. package/dist/cjs/adapter/service-worker/index.js +25 -30
  74. package/dist/cjs/adapter/service-worker/types.js +0 -15
  75. package/dist/cjs/adapter/vercel/conninfo.js +8 -32
  76. package/dist/cjs/adapter/vercel/handler.js +8 -27
  77. package/dist/cjs/adapter/vercel/index.js +5 -30
  78. package/dist/cjs/client/client.js +139 -212
  79. package/dist/cjs/client/fetch-result-please.js +62 -80
  80. package/dist/cjs/client/index.js +7 -32
  81. package/dist/cjs/client/types.js +0 -15
  82. package/dist/cjs/client/utils.js +54 -92
  83. package/dist/cjs/compose.js +49 -66
  84. package/dist/cjs/context.js +379 -450
  85. package/dist/cjs/helper/accepts/accepts.js +47 -72
  86. package/dist/cjs/helper/accepts/index.js +3 -27
  87. package/dist/cjs/helper/adapter/index.js +33 -73
  88. package/dist/cjs/helper/conninfo/index.js +0 -15
  89. package/dist/cjs/helper/conninfo/types.js +0 -15
  90. package/dist/cjs/helper/cookie/index.js +75 -116
  91. package/dist/cjs/helper/css/common.js +165 -244
  92. package/dist/cjs/helper/css/index.js +136 -151
  93. package/dist/cjs/helper/dev/index.js +45 -71
  94. package/dist/cjs/helper/factory/index.js +30 -51
  95. package/dist/cjs/helper/html/index.js +32 -62
  96. package/dist/cjs/helper/proxy/index.js +113 -106
  97. package/dist/cjs/helper/route/index.js +123 -66
  98. package/dist/cjs/helper/ssg/index.js +19 -43
  99. package/dist/cjs/helper/ssg/middleware.js +56 -64
  100. package/dist/cjs/helper/ssg/plugins.js +55 -57
  101. package/dist/cjs/helper/ssg/ssg.js +196 -296
  102. package/dist/cjs/helper/ssg/utils.js +47 -90
  103. package/dist/cjs/helper/streaming/index.js +8 -35
  104. package/dist/cjs/helper/streaming/sse.js +53 -85
  105. package/dist/cjs/helper/streaming/stream.js +23 -53
  106. package/dist/cjs/helper/streaming/text.js +10 -32
  107. package/dist/cjs/helper/streaming/utils.js +13 -32
  108. package/dist/cjs/helper/testing/index.js +16 -31
  109. package/dist/cjs/helper/websocket/index.js +51 -76
  110. package/dist/cjs/hono-base.js +345 -403
  111. package/dist/cjs/hono.js +28 -42
  112. package/dist/cjs/http-exception.js +55 -56
  113. package/dist/cjs/index.js +22 -30
  114. package/dist/cjs/jsx/base.js +237 -366
  115. package/dist/cjs/jsx/children.js +16 -41
  116. package/dist/cjs/jsx/components.js +119 -192
  117. package/dist/cjs/jsx/constants.js +15 -42
  118. package/dist/cjs/jsx/context.js +144 -162
  119. package/dist/cjs/jsx/dom/client.js +49 -69
  120. package/dist/cjs/jsx/dom/components.js +23 -52
  121. package/dist/cjs/jsx/dom/context.js +39 -67
  122. package/dist/cjs/jsx/dom/css.js +143 -158
  123. package/dist/cjs/jsx/dom/hooks/index.js +55 -64
  124. package/dist/cjs/jsx/dom/index.js +114 -173
  125. package/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
  126. package/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
  127. package/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
  128. package/dist/cjs/jsx/dom/render.js +469 -623
  129. package/dist/cjs/jsx/dom/server.js +37 -64
  130. package/dist/cjs/jsx/dom/utils.js +7 -30
  131. package/dist/cjs/jsx/hooks/index.js +225 -318
  132. package/dist/cjs/jsx/index.js +86 -135
  133. package/dist/cjs/jsx/intrinsic-element/common.js +20 -43
  134. package/dist/cjs/jsx/intrinsic-element/components.js +117 -168
  135. package/dist/cjs/jsx/intrinsic-elements.js +0 -15
  136. package/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
  137. package/dist/cjs/jsx/jsx-runtime.js +34 -68
  138. package/dist/cjs/jsx/streaming.js +123 -166
  139. package/dist/cjs/jsx/types.js +0 -15
  140. package/dist/cjs/jsx/utils.js +91 -175
  141. package/dist/cjs/middleware/basic-auth/index.js +98 -86
  142. package/dist/cjs/middleware/bearer-auth/index.js +92 -109
  143. package/dist/cjs/middleware/body-limit/index.js +66 -72
  144. package/dist/cjs/middleware/cache/index.js +153 -199
  145. package/dist/cjs/middleware/combine/index.js +133 -95
  146. package/dist/cjs/middleware/compress/index.js +73 -88
  147. package/dist/cjs/middleware/context-storage/index.js +49 -41
  148. package/dist/cjs/middleware/cors/index.js +107 -107
  149. package/dist/cjs/middleware/csrf/index.js +101 -72
  150. package/dist/cjs/middleware/etag/digest.js +58 -97
  151. package/dist/cjs/middleware/etag/index.js +71 -91
  152. package/dist/cjs/middleware/ip-restriction/index.js +161 -169
  153. package/dist/cjs/middleware/jsx-renderer/index.js +99 -77
  154. package/dist/cjs/middleware/jwk/index.js +3 -27
  155. package/dist/cjs/middleware/jwk/jwk.js +118 -135
  156. package/dist/cjs/middleware/jwt/index.js +9 -38
  157. package/dist/cjs/middleware/jwt/jwt.js +120 -141
  158. package/dist/cjs/middleware/language/index.js +7 -35
  159. package/dist/cjs/middleware/language/language.js +184 -182
  160. package/dist/cjs/middleware/logger/index.js +41 -62
  161. package/dist/cjs/middleware/method-not-allowed/index.js +82 -88
  162. package/dist/cjs/middleware/method-override/index.js +101 -102
  163. package/dist/cjs/middleware/powered-by/index.js +23 -30
  164. package/dist/cjs/middleware/pretty-json/index.js +38 -42
  165. package/dist/cjs/middleware/request-id/index.js +3 -27
  166. package/dist/cjs/middleware/request-id/request-id.js +34 -42
  167. package/dist/cjs/middleware/secure-headers/index.js +4 -29
  168. package/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
  169. package/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
  170. package/dist/cjs/middleware/serve-static/index.js +56 -93
  171. package/dist/cjs/middleware/serve-static/path.js +15 -38
  172. package/dist/cjs/middleware/timeout/index.js +40 -45
  173. package/dist/cjs/middleware/timing/index.js +7 -35
  174. package/dist/cjs/middleware/timing/timing.js +177 -118
  175. package/dist/cjs/middleware/trailing-slash/index.js +85 -58
  176. package/dist/cjs/preset/quick.js +18 -37
  177. package/dist/cjs/preset/tiny.js +15 -33
  178. package/dist/cjs/request/constants.js +5 -27
  179. package/dist/cjs/request.js +334 -346
  180. package/dist/cjs/router/linear-router/index.js +3 -27
  181. package/dist/cjs/router/linear-router/router.js +95 -143
  182. package/dist/cjs/router/pattern-router/index.js +3 -27
  183. package/dist/cjs/router/pattern-router/router.js +41 -63
  184. package/dist/cjs/router/reg-exp-router/index.js +7 -34
  185. package/dist/cjs/router/reg-exp-router/matcher.js +18 -45
  186. package/dist/cjs/router/reg-exp-router/node.js +91 -135
  187. package/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
  188. package/dist/cjs/router/reg-exp-router/router.js +98 -147
  189. package/dist/cjs/router/reg-exp-router/trie.js +73 -89
  190. package/dist/cjs/router/smart-router/index.js +3 -27
  191. package/dist/cjs/router/smart-router/router.js +49 -79
  192. package/dist/cjs/router/trie-router/index.js +3 -27
  193. package/dist/cjs/router/trie-router/node.js +134 -186
  194. package/dist/cjs/router/trie-router/router.js +15 -39
  195. package/dist/cjs/router/utils.js +5 -27
  196. package/dist/cjs/router.js +37 -37
  197. package/dist/cjs/types.js +5 -28
  198. package/dist/cjs/utils/accept.js +177 -225
  199. package/dist/cjs/utils/basic-auth.js +16 -40
  200. package/dist/cjs/utils/body.js +84 -110
  201. package/dist/cjs/utils/buffer.js +43 -91
  202. package/dist/cjs/utils/color.js +35 -44
  203. package/dist/cjs/utils/compress.js +11 -26
  204. package/dist/cjs/utils/concurrent.js +29 -59
  205. package/dist/cjs/utils/constants.js +7 -26
  206. package/dist/cjs/utils/cookie.js +107 -177
  207. package/dist/cjs/utils/crypto.js +30 -61
  208. package/dist/cjs/utils/encode.js +31 -48
  209. package/dist/cjs/utils/filepath.js +23 -54
  210. package/dist/cjs/utils/handler.js +11 -33
  211. package/dist/cjs/utils/headers.js +0 -15
  212. package/dist/cjs/utils/html.js +96 -137
  213. package/dist/cjs/utils/http-status.js +0 -15
  214. package/dist/cjs/utils/ipaddr.js +213 -286
  215. package/dist/cjs/utils/jwt/index.js +14 -27
  216. package/dist/cjs/utils/jwt/jwa.js +25 -42
  217. package/dist/cjs/utils/jwt/jws.js +119 -199
  218. package/dist/cjs/utils/jwt/jwt.js +122 -206
  219. package/dist/cjs/utils/jwt/types.js +122 -159
  220. package/dist/cjs/utils/jwt/utf8.js +9 -28
  221. package/dist/cjs/utils/mime.js +75 -101
  222. package/dist/cjs/utils/stream.js +88 -111
  223. package/dist/cjs/utils/types.js +0 -15
  224. package/dist/cjs/utils/url.js +185 -234
  225. package/dist/cjs/validator/index.js +3 -27
  226. package/dist/cjs/validator/utils.js +0 -15
  227. package/dist/cjs/validator/validator.js +60 -103
  228. package/dist/client/client.js +138 -197
  229. package/dist/client/fetch-result-please.js +59 -56
  230. package/dist/client/index.js +3 -7
  231. package/dist/client/types.js +1 -0
  232. package/dist/client/utils.js +51 -68
  233. package/dist/compose.js +49 -45
  234. package/dist/context.js +376 -426
  235. package/dist/helper/accepts/accepts.js +47 -51
  236. package/dist/helper/accepts/index.js +1 -4
  237. package/dist/helper/adapter/index.js +33 -52
  238. package/dist/helper/conninfo/index.js +1 -0
  239. package/dist/helper/conninfo/types.js +1 -0
  240. package/dist/helper/cookie/index.js +74 -94
  241. package/dist/helper/css/common.js +167 -225
  242. package/dist/helper/css/index.js +132 -137
  243. package/dist/helper/dev/index.js +44 -49
  244. package/dist/helper/factory/index.js +27 -27
  245. package/dist/helper/html/index.js +30 -39
  246. package/dist/helper/proxy/index.js +116 -88
  247. package/dist/helper/route/index.js +121 -43
  248. package/dist/helper/ssg/index.js +3 -18
  249. package/dist/helper/ssg/middleware.js +53 -40
  250. package/dist/helper/ssg/plugins.js +55 -36
  251. package/dist/helper/ssg/ssg.js +198 -283
  252. package/dist/helper/ssg/utils.js +53 -75
  253. package/dist/helper/streaming/index.js +2 -8
  254. package/dist/helper/streaming/sse.js +50 -61
  255. package/dist/helper/streaming/stream.js +22 -31
  256. package/dist/helper/streaming/text.js +9 -10
  257. package/dist/helper/streaming/utils.js +9 -12
  258. package/dist/helper/testing/index.js +16 -10
  259. package/dist/helper/websocket/index.js +49 -53
  260. package/dist/hono-base.js +342 -379
  261. package/dist/hono.js +27 -20
  262. package/dist/http-exception.js +53 -33
  263. package/dist/index.js +19 -6
  264. package/dist/jsx/base.js +231 -340
  265. package/dist/jsx/children.js +16 -20
  266. package/dist/jsx/components.js +118 -170
  267. package/dist/jsx/constants.js +9 -15
  268. package/dist/jsx/context.js +153 -150
  269. package/dist/jsx/dom/client.js +45 -48
  270. package/dist/jsx/dom/components.js +21 -29
  271. package/dist/jsx/dom/context.js +37 -44
  272. package/dist/jsx/dom/css.js +142 -147
  273. package/dist/jsx/dom/hooks/index.js +52 -40
  274. package/dist/jsx/dom/index.js +71 -134
  275. package/dist/jsx/dom/intrinsic-element/components.js +275 -359
  276. package/dist/jsx/dom/jsx-dev-runtime.js +14 -18
  277. package/dist/jsx/dom/jsx-runtime.js +2 -8
  278. package/dist/jsx/dom/render.js +492 -631
  279. package/dist/jsx/dom/server.js +32 -32
  280. package/dist/jsx/dom/utils.js +6 -8
  281. package/dist/jsx/hooks/index.js +236 -308
  282. package/dist/jsx/index.js +45 -98
  283. package/dist/jsx/intrinsic-element/common.js +20 -22
  284. package/dist/jsx/intrinsic-element/components.js +113 -154
  285. package/dist/jsx/intrinsic-elements.js +1 -0
  286. package/dist/jsx/jsx-dev-runtime.js +12 -16
  287. package/dist/jsx/jsx-runtime.js +29 -42
  288. package/dist/jsx/streaming.js +120 -142
  289. package/dist/jsx/types.js +1 -0
  290. package/dist/jsx/utils.js +105 -168
  291. package/dist/middleware/basic-auth/index.js +96 -63
  292. package/dist/middleware/bearer-auth/index.js +93 -89
  293. package/dist/middleware/body-limit/index.js +66 -51
  294. package/dist/middleware/cache/index.js +165 -190
  295. package/dist/middleware/combine/index.js +132 -73
  296. package/dist/middleware/compress/index.js +75 -69
  297. package/dist/middleware/context-storage/index.js +49 -19
  298. package/dist/middleware/cors/index.js +107 -86
  299. package/dist/middleware/csrf/index.js +103 -53
  300. package/dist/middleware/etag/digest.js +59 -77
  301. package/dist/middleware/etag/index.js +71 -70
  302. package/dist/middleware/ip-restriction/index.js +163 -158
  303. package/dist/middleware/jsx-renderer/index.js +97 -54
  304. package/dist/middleware/jwk/index.js +1 -4
  305. package/dist/middleware/jwk/jwk.js +116 -112
  306. package/dist/middleware/jwt/index.js +2 -10
  307. package/dist/middleware/jwt/jwt.js +114 -114
  308. package/dist/middleware/language/index.js +2 -15
  309. package/dist/middleware/language/language.js +180 -157
  310. package/dist/middleware/logger/index.js +43 -37
  311. package/dist/middleware/method-not-allowed/index.js +81 -66
  312. package/dist/middleware/method-override/index.js +101 -81
  313. package/dist/middleware/powered-by/index.js +23 -9
  314. package/dist/middleware/pretty-json/index.js +39 -22
  315. package/dist/middleware/request-id/index.js +1 -4
  316. package/dist/middleware/request-id/request-id.js +33 -20
  317. package/dist/middleware/secure-headers/index.js +1 -5
  318. package/dist/middleware/secure-headers/permissions-policy.js +1 -0
  319. package/dist/middleware/secure-headers/secure-headers.js +144 -155
  320. package/dist/middleware/serve-static/index.js +56 -72
  321. package/dist/middleware/serve-static/path.js +15 -17
  322. package/dist/middleware/timeout/index.js +40 -23
  323. package/dist/middleware/timing/index.js +2 -9
  324. package/dist/middleware/timing/timing.js +177 -97
  325. package/dist/middleware/trailing-slash/index.js +85 -37
  326. package/dist/preset/quick.js +17 -15
  327. package/dist/preset/tiny.js +14 -11
  328. package/dist/request/constants.js +4 -5
  329. package/dist/request.js +328 -319
  330. package/dist/router/linear-router/index.js +1 -4
  331. package/dist/router/linear-router/router.js +93 -120
  332. package/dist/router/pattern-router/index.js +1 -4
  333. package/dist/router/pattern-router/router.js +39 -40
  334. package/dist/router/reg-exp-router/index.js +1 -7
  335. package/dist/router/reg-exp-router/matcher.js +17 -23
  336. package/dist/router/reg-exp-router/node.js +87 -110
  337. package/dist/router/reg-exp-router/prepared-router.js +89 -137
  338. package/dist/router/reg-exp-router/router.js +92 -129
  339. package/dist/router/reg-exp-router/trie.js +69 -64
  340. package/dist/router/smart-router/index.js +1 -4
  341. package/dist/router/smart-router/router.js +46 -55
  342. package/dist/router/trie-router/index.js +1 -4
  343. package/dist/router/trie-router/node.js +131 -162
  344. package/dist/router/trie-router/router.js +11 -14
  345. package/dist/router/utils.js +4 -5
  346. package/dist/router.js +35 -14
  347. package/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
  348. package/dist/types/adapter/aws-lambda/handler.d.ts +150 -105
  349. package/dist/types/adapter/aws-lambda/index.d.ts +4 -8
  350. package/dist/types/adapter/aws-lambda/types.d.ts +152 -123
  351. package/dist/types/adapter/bun/conninfo.d.ts +4 -1
  352. package/dist/types/adapter/bun/index.d.ts +6 -10
  353. package/dist/types/adapter/bun/serve-static.d.ts +7 -2
  354. package/dist/types/adapter/bun/server.d.ts +4 -5
  355. package/dist/types/adapter/bun/ssg.d.ts +5 -1
  356. package/dist/types/adapter/bun/websocket.d.ts +31 -17
  357. package/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
  358. package/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -18
  359. package/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
  360. package/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
  361. package/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
  362. package/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -3
  363. package/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
  364. package/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
  365. package/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
  366. package/dist/types/adapter/deno/conninfo.d.ts +4 -1
  367. package/dist/types/adapter/deno/deno.d.ts +1 -0
  368. package/dist/types/adapter/deno/index.d.ts +5 -8
  369. package/dist/types/adapter/deno/serve-static.d.ts +7 -2
  370. package/dist/types/adapter/deno/ssg.d.ts +5 -1
  371. package/dist/types/adapter/deno/websocket.d.ts +6 -1
  372. package/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
  373. package/dist/types/adapter/lambda-edge/handler.d.ts +83 -58
  374. package/dist/types/adapter/lambda-edge/index.d.ts +3 -7
  375. package/dist/types/adapter/netlify/conninfo.d.ts +4 -1
  376. package/dist/types/adapter/netlify/handler.d.ts +6 -1
  377. package/dist/types/adapter/netlify/index.d.ts +3 -5
  378. package/dist/types/adapter/netlify/mod.d.ts +3 -2
  379. package/dist/types/adapter/service-worker/handler.d.ts +9 -8
  380. package/dist/types/adapter/service-worker/index.d.ts +6 -9
  381. package/dist/types/adapter/service-worker/types.d.ts +12 -8
  382. package/dist/types/adapter/vercel/conninfo.d.ts +6 -1
  383. package/dist/types/adapter/vercel/handler.d.ts +6 -1
  384. package/dist/types/adapter/vercel/index.d.ts +3 -6
  385. package/dist/types/client/client.d.ts +5 -3
  386. package/dist/types/client/fetch-result-please.d.ts +21 -19
  387. package/dist/types/client/index.d.ts +5 -7
  388. package/dist/types/client/types.d.ts +134 -160
  389. package/dist/types/client/utils.d.ts +6 -4
  390. package/dist/types/compose.d.ts +4 -2
  391. package/dist/types/context.d.ts +335 -336
  392. package/dist/types/helper/accepts/accepts.d.ts +11 -9
  393. package/dist/types/helper/accepts/index.d.ts +2 -5
  394. package/dist/types/helper/adapter/index.d.ts +4 -6
  395. package/dist/types/helper/conninfo/index.d.ts +2 -5
  396. package/dist/types/helper/conninfo/types.d.ts +25 -23
  397. package/dist/types/helper/cookie/index.d.ts +10 -13
  398. package/dist/types/helper/css/common.d.ts +11 -10
  399. package/dist/types/helper/css/index.d.ts +25 -28
  400. package/dist/types/helper/dev/index.d.ts +10 -13
  401. package/dist/types/helper/factory/index.d.ts +26 -74
  402. package/dist/types/helper/html/index.d.ts +4 -7
  403. package/dist/types/helper/proxy/index.d.ts +19 -22
  404. package/dist/types/helper/route/index.d.ts +4 -2
  405. package/dist/types/helper/ssg/index.d.ts +4 -7
  406. package/dist/types/helper/ssg/middleware.d.ts +8 -7
  407. package/dist/types/helper/ssg/plugins.d.ts +3 -1
  408. package/dist/types/helper/ssg/ssg.d.ts +38 -36
  409. package/dist/types/helper/ssg/utils.d.ts +5 -4
  410. package/dist/types/helper/streaming/index.d.ts +4 -8
  411. package/dist/types/helper/streaming/sse.d.ts +10 -8
  412. package/dist/types/helper/streaming/stream.d.ts +4 -2
  413. package/dist/types/helper/streaming/text.d.ts +4 -2
  414. package/dist/types/helper/streaming/utils.d.ts +2 -0
  415. package/dist/types/helper/testing/index.d.ts +7 -10
  416. package/dist/types/helper/websocket/index.d.ts +30 -33
  417. package/dist/types/hono-base.d.ts +208 -211
  418. package/dist/types/hono.d.ts +11 -10
  419. package/dist/types/http-exception.d.ts +20 -23
  420. package/dist/types/index.d.ts +6 -37
  421. package/dist/types/jsx/base.d.ts +36 -35
  422. package/dist/types/jsx/children.d.ts +8 -6
  423. package/dist/types/jsx/components.d.ts +8 -5
  424. package/dist/types/jsx/constants.d.ts +2 -0
  425. package/dist/types/jsx/context.d.ts +9 -7
  426. package/dist/types/jsx/dom/client.d.ts +8 -10
  427. package/dist/types/jsx/dom/components.d.ts +9 -6
  428. package/dist/types/jsx/dom/context.d.ts +3 -1
  429. package/dist/types/jsx/dom/css.d.ts +26 -30
  430. package/dist/types/jsx/dom/hooks/index.d.ts +11 -13
  431. package/dist/types/jsx/dom/index.d.ts +78 -83
  432. package/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
  433. package/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
  434. package/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
  435. package/dist/types/jsx/dom/render.d.ts +32 -51
  436. package/dist/types/jsx/dom/server.d.ts +86 -85
  437. package/dist/types/jsx/dom/utils.d.ts +2 -0
  438. package/dist/types/jsx/hooks/index.d.ts +16 -17
  439. package/dist/types/jsx/index.d.ts +70 -73
  440. package/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
  441. package/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
  442. package/dist/types/jsx/intrinsic-elements.d.ts +708 -708
  443. package/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
  444. package/dist/types/jsx/jsx-runtime.d.ts +7 -10
  445. package/dist/types/jsx/streaming.d.ts +9 -10
  446. package/dist/types/jsx/types.d.ts +11 -13
  447. package/dist/types/jsx/utils.d.ts +2 -0
  448. package/dist/types/middleware/basic-auth/index.d.ts +17 -20
  449. package/dist/types/middleware/bearer-auth/index.d.ts +46 -49
  450. package/dist/types/middleware/body-limit/index.d.ts +6 -9
  451. package/dist/types/middleware/cache/index.d.ts +13 -15
  452. package/dist/types/middleware/combine/index.d.ts +4 -7
  453. package/dist/types/middleware/compress/index.d.ts +8 -10
  454. package/dist/types/middleware/context-storage/index.d.ts +4 -6
  455. package/dist/types/middleware/cors/index.d.ts +10 -13
  456. package/dist/types/middleware/csrf/index.d.ts +6 -9
  457. package/dist/types/middleware/etag/digest.d.ts +2 -0
  458. package/dist/types/middleware/etag/index.d.ts +6 -9
  459. package/dist/types/middleware/ip-restriction/index.d.ts +11 -13
  460. package/dist/types/middleware/jsx-renderer/index.d.ts +11 -12
  461. package/dist/types/middleware/jwk/index.d.ts +2 -1
  462. package/dist/types/middleware/jwk/jwk.d.ts +20 -23
  463. package/dist/types/middleware/jwt/index.d.ts +6 -6
  464. package/dist/types/middleware/jwt/jwt.d.ts +28 -30
  465. package/dist/types/middleware/language/index.d.ts +5 -5
  466. package/dist/types/middleware/language/language.d.ts +42 -44
  467. package/dist/types/middleware/logger/index.d.ts +3 -6
  468. package/dist/types/middleware/method-not-allowed/index.d.ts +7 -10
  469. package/dist/types/middleware/method-override/index.d.ts +14 -17
  470. package/dist/types/middleware/powered-by/index.d.ts +8 -11
  471. package/dist/types/middleware/pretty-json/index.d.ts +18 -21
  472. package/dist/types/middleware/request-id/index.d.ts +5 -5
  473. package/dist/types/middleware/request-id/request-id.d.ts +9 -11
  474. package/dist/types/middleware/secure-headers/index.d.ts +5 -6
  475. package/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -1
  476. package/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -58
  477. package/dist/types/middleware/serve-static/index.d.ts +24 -24
  478. package/dist/types/middleware/serve-static/path.d.ts +2 -0
  479. package/dist/types/middleware/timeout/index.d.ts +5 -7
  480. package/dist/types/middleware/timing/index.d.ts +5 -5
  481. package/dist/types/middleware/timing/timing.d.ts +17 -21
  482. package/dist/types/middleware/trailing-slash/index.d.ts +35 -38
  483. package/dist/types/preset/quick.d.ts +6 -9
  484. package/dist/types/preset/tiny.d.ts +6 -9
  485. package/dist/types/request/constants.d.ts +2 -0
  486. package/dist/types/request.d.ts +288 -287
  487. package/dist/types/router/linear-router/index.d.ts +2 -5
  488. package/dist/types/router/linear-router/router.d.ts +7 -5
  489. package/dist/types/router/pattern-router/index.d.ts +2 -5
  490. package/dist/types/router/pattern-router/router.d.ts +7 -5
  491. package/dist/types/router/reg-exp-router/index.d.ts +3 -6
  492. package/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
  493. package/dist/types/router/reg-exp-router/node.d.ts +6 -4
  494. package/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -11
  495. package/dist/types/router/reg-exp-router/router.d.ts +10 -9
  496. package/dist/types/router/reg-exp-router/trie.d.ts +7 -5
  497. package/dist/types/router/smart-router/index.d.ts +2 -5
  498. package/dist/types/router/smart-router/router.d.ts +11 -9
  499. package/dist/types/router/trie-router/index.d.ts +2 -5
  500. package/dist/types/router/trie-router/node.d.ts +6 -4
  501. package/dist/types/router/trie-router/router.d.ts +7 -5
  502. package/dist/types/router/utils.d.ts +2 -0
  503. package/dist/types/router.d.ts +23 -22
  504. package/dist/types/types.d.ts +146 -506
  505. package/dist/types/utils/accept.d.ts +5 -3
  506. package/dist/types/utils/basic-auth.d.ts +4 -2
  507. package/dist/types/utils/body.d.ts +46 -51
  508. package/dist/types/utils/buffer.d.ts +7 -6
  509. package/dist/types/utils/color.d.ts +2 -0
  510. package/dist/types/utils/compress.d.ts +2 -0
  511. package/dist/types/utils/concurrent.d.ts +6 -4
  512. package/dist/types/utils/constants.d.ts +2 -0
  513. package/dist/types/utils/cookie.d.ts +20 -19
  514. package/dist/types/utils/crypto.d.ts +5 -8
  515. package/dist/types/utils/encode.d.ts +2 -0
  516. package/dist/types/utils/filepath.d.ts +5 -4
  517. package/dist/types/utils/handler.d.ts +2 -0
  518. package/dist/types/utils/headers.d.ts +2 -0
  519. package/dist/types/utils/html.d.ts +11 -10
  520. package/dist/types/utils/http-status.d.ts +2 -0
  521. package/dist/types/utils/ipaddr.d.ts +4 -6
  522. package/dist/types/utils/jwt/index.d.ts +18 -12
  523. package/dist/types/utils/jwt/jwa.d.ts +15 -13
  524. package/dist/types/utils/jwt/jws.d.ts +4 -7
  525. package/dist/types/utils/jwt/jwt.d.ts +26 -29
  526. package/dist/types/utils/jwt/types.d.ts +48 -45
  527. package/dist/types/utils/jwt/utf8.d.ts +2 -0
  528. package/dist/types/utils/mime.d.ts +59 -57
  529. package/dist/types/utils/stream.d.ts +27 -25
  530. package/dist/types/utils/types.d.ts +14 -27
  531. package/dist/types/utils/url.d.ts +2 -1
  532. package/dist/types/validator/index.d.ts +3 -7
  533. package/dist/types/validator/utils.d.ts +6 -9
  534. package/dist/types/validator/validator.d.ts +11 -10
  535. package/dist/types.js +4 -6
  536. package/dist/utils/accept.js +185 -212
  537. package/dist/utils/basic-auth.js +18 -21
  538. package/dist/utils/body.js +87 -92
  539. package/dist/utils/buffer.js +44 -71
  540. package/dist/utils/color.js +33 -21
  541. package/dist/utils/compress.js +11 -5
  542. package/dist/utils/concurrent.js +29 -38
  543. package/dist/utils/constants.js +7 -5
  544. package/dist/utils/cookie.js +114 -163
  545. package/dist/utils/crypto.js +30 -40
  546. package/dist/utils/encode.js +30 -26
  547. package/dist/utils/filepath.js +23 -33
  548. package/dist/utils/handler.js +10 -11
  549. package/dist/utils/headers.js +1 -0
  550. package/dist/utils/html.js +97 -117
  551. package/dist/utils/http-status.js +1 -0
  552. package/dist/utils/ipaddr.js +227 -279
  553. package/dist/utils/jwt/index.js +12 -4
  554. package/dist/utils/jwt/jwa.js +24 -20
  555. package/dist/utils/jwt/jws.js +115 -174
  556. package/dist/utils/jwt/jwt.js +120 -198
  557. package/dist/utils/jwt/types.js +79 -95
  558. package/dist/utils/jwt/utf8.js +9 -7
  559. package/dist/utils/mime.js +74 -79
  560. package/dist/utils/stream.js +86 -88
  561. package/dist/utils/types.js +1 -0
  562. package/dist/utils/url.js +187 -215
  563. package/dist/validator/index.js +1 -4
  564. package/dist/validator/utils.js +1 -0
  565. package/dist/validator/validator.js +61 -83
  566. package/package.json +27 -27
package/dist/context.js CHANGED
@@ -1,431 +1,381 @@
1
- // src/context.ts
2
1
  import { HonoRequest } from "./request.js";
3
2
  import { HtmlEscapedCallbackPhase, resolveCallback } from "./utils/html.js";
4
- var TEXT_PLAIN = "text/plain; charset=UTF-8";
5
- var setDefaultContentType = (contentType, headers) => {
6
- return {
7
- "Content-Type": contentType,
8
- ...headers
9
- };
3
+ //#region src/context.ts
4
+ const TEXT_PLAIN = "text/plain; charset=UTF-8";
5
+ const setDefaultContentType = (contentType, headers) => {
6
+ return {
7
+ "Content-Type": contentType,
8
+ ...headers
9
+ };
10
10
  };
11
- var createResponseInstance = (body, init) => new Response(body, init);
11
+ const createResponseInstance = (body, init) => new Response(body, init);
12
12
  var Context = class {
13
- #rawRequest;
14
- #req;
15
- /**
16
- * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.
17
- *
18
- * @see {@link https://hono.dev/docs/api/context#env}
19
- *
20
- * @example
21
- * ```ts
22
- * // Environment object for Cloudflare Workers
23
- * app.get('*', async c => {
24
- * const counter = c.env.COUNTER
25
- * })
26
- * ```
27
- */
28
- env = {};
29
- #var;
30
- finalized = false;
31
- /**
32
- * `.error` can get the error object from the middleware if the Handler throws an error.
33
- *
34
- * @see {@link https://hono.dev/docs/api/context#error}
35
- *
36
- * @example
37
- * ```ts
38
- * app.use('*', async (c, next) => {
39
- * await next()
40
- * if (c.error) {
41
- * // do something...
42
- * }
43
- * })
44
- * ```
45
- */
46
- error;
47
- #status;
48
- #executionCtx;
49
- #res;
50
- #layout;
51
- #renderer;
52
- #notFoundHandler;
53
- #preparedHeaders;
54
- #matchResult;
55
- #path;
56
- /**
57
- * Creates an instance of the Context class.
58
- *
59
- * @param req - The Request object.
60
- * @param options - Optional configuration options for the context.
61
- */
62
- constructor(req, options) {
63
- this.#rawRequest = req;
64
- if (options) {
65
- this.#executionCtx = options.executionCtx;
66
- this.env = options.env;
67
- this.#notFoundHandler = options.notFoundHandler;
68
- this.#path = options.path;
69
- this.#matchResult = options.matchResult;
70
- }
71
- }
72
- /**
73
- * `.req` is the instance of {@link HonoRequest}.
74
- */
75
- get req() {
76
- this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);
77
- return this.#req;
78
- }
79
- /**
80
- * @see {@link https://hono.dev/docs/api/context#event}
81
- * The FetchEvent associated with the current request.
82
- *
83
- * @throws Will throw an error if the context does not have a FetchEvent.
84
- */
85
- get event() {
86
- if (this.#executionCtx && "respondWith" in this.#executionCtx) {
87
- return this.#executionCtx;
88
- } else {
89
- throw Error("This context has no FetchEvent");
90
- }
91
- }
92
- /**
93
- * @see {@link https://hono.dev/docs/api/context#executionctx}
94
- * The ExecutionContext associated with the current request.
95
- *
96
- * @throws Will throw an error if the context does not have an ExecutionContext.
97
- */
98
- get executionCtx() {
99
- if (this.#executionCtx) {
100
- return this.#executionCtx;
101
- } else {
102
- throw Error("This context has no ExecutionContext");
103
- }
104
- }
105
- /**
106
- * @see {@link https://hono.dev/docs/api/context#res}
107
- * The Response object for the current request.
108
- */
109
- get res() {
110
- return this.#res ||= createResponseInstance(null, {
111
- headers: this.#preparedHeaders ??= new Headers()
112
- });
113
- }
114
- /**
115
- * Sets the Response object for the current request.
116
- *
117
- * @param _res - The Response object to set.
118
- */
119
- set res(_res) {
120
- if (this.#res && _res) {
121
- _res = createResponseInstance(_res.body, _res);
122
- for (const [k, v] of this.#res.headers.entries()) {
123
- if (k === "content-type") {
124
- continue;
125
- }
126
- if (k === "set-cookie") {
127
- const cookies = this.#res.headers.getSetCookie();
128
- _res.headers.delete("set-cookie");
129
- for (const cookie of cookies) {
130
- _res.headers.append("set-cookie", cookie);
131
- }
132
- } else {
133
- _res.headers.set(k, v);
134
- }
135
- }
136
- }
137
- this.#res = _res;
138
- this.finalized = true;
139
- }
140
- /**
141
- * `.render()` can create a response within a layout.
142
- *
143
- * @see {@link https://hono.dev/docs/api/context#render-setrenderer}
144
- *
145
- * @example
146
- * ```ts
147
- * app.get('/', (c) => {
148
- * return c.render('Hello!')
149
- * })
150
- * ```
151
- */
152
- render = (...args) => {
153
- this.#renderer ??= (content) => this.html(content);
154
- return this.#renderer(...args);
155
- };
156
- /**
157
- * Sets the layout for the response.
158
- *
159
- * @param layout - The layout to set.
160
- * @returns The layout function.
161
- */
162
- setLayout = (layout) => this.#layout = layout;
163
- /**
164
- * Gets the current layout for the response.
165
- *
166
- * @returns The current layout function.
167
- */
168
- getLayout = () => this.#layout;
169
- /**
170
- * `.setRenderer()` can set the layout in the custom middleware.
171
- *
172
- * @see {@link https://hono.dev/docs/api/context#render-setrenderer}
173
- *
174
- * @example
175
- * ```tsx
176
- * app.use('*', async (c, next) => {
177
- * c.setRenderer((content) => {
178
- * return c.html(
179
- * <html>
180
- * <body>
181
- * <p>{content}</p>
182
- * </body>
183
- * </html>
184
- * )
185
- * })
186
- * await next()
187
- * })
188
- * ```
189
- */
190
- setRenderer = (renderer) => {
191
- this.#renderer = renderer;
192
- };
193
- /**
194
- * `.header()` can set headers.
195
- *
196
- * @see {@link https://hono.dev/docs/api/context#header}
197
- *
198
- * @example
199
- * ```ts
200
- * app.get('/welcome', (c) => {
201
- * // Set headers
202
- * c.header('X-Message', 'Hello!')
203
- * c.header('Content-Type', 'text/plain')
204
- *
205
- * // Append multiple headers using the append option (e.g. Vary)
206
- * c.header('Vary', 'Accept-Encoding', { append: true })
207
- * c.header('Vary', 'User-Agent', { append: true })
208
- *
209
- * return c.body('Thank you for coming')
210
- * })
211
- * ```
212
- */
213
- header = (name, value, options) => {
214
- if (this.finalized) {
215
- this.#res = createResponseInstance(this.#res.body, this.#res);
216
- }
217
- const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();
218
- if (value === void 0) {
219
- headers.delete(name);
220
- } else if (options?.append) {
221
- headers.append(name, value);
222
- } else {
223
- headers.set(name, value);
224
- }
225
- };
226
- status = (status) => {
227
- this.#status = status;
228
- };
229
- /**
230
- * `.set()` can set the value specified by the key.
231
- *
232
- * @see {@link https://hono.dev/docs/api/context#set-get}
233
- *
234
- * @example
235
- * ```ts
236
- * app.use('*', async (c, next) => {
237
- * c.set('message', 'Hono is hot!!')
238
- * await next()
239
- * })
240
- * ```
241
- */
242
- set = (key, value) => {
243
- this.#var ??= /* @__PURE__ */ new Map();
244
- this.#var.set(key, value);
245
- };
246
- /**
247
- * `.get()` can use the value specified by the key.
248
- *
249
- * @see {@link https://hono.dev/docs/api/context#set-get}
250
- *
251
- * @example
252
- * ```ts
253
- * app.get('/', (c) => {
254
- * const message = c.get('message')
255
- * return c.text(`The message is "${message}"`)
256
- * })
257
- * ```
258
- */
259
- get = (key) => {
260
- return this.#var ? this.#var.get(key) : void 0;
261
- };
262
- /**
263
- * `.var` can access the value of a variable.
264
- *
265
- * @see {@link https://hono.dev/docs/api/context#var}
266
- *
267
- * @example
268
- * ```ts
269
- * const result = c.var.client.oneMethod()
270
- * ```
271
- */
272
- // c.var.propName is a read-only
273
- get var() {
274
- if (!this.#var) {
275
- return {};
276
- }
277
- return Object.fromEntries(this.#var);
278
- }
279
- #newResponse(data, arg, headers) {
280
- let responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders;
281
- if (typeof arg === "object" && arg.headers) {
282
- responseHeaders ??= new Headers();
283
- for (const [key, value] of new Headers(arg.headers)) {
284
- if (key === "set-cookie") {
285
- responseHeaders.append(key, value);
286
- } else {
287
- responseHeaders.set(key, value);
288
- }
289
- }
290
- }
291
- if (headers) {
292
- if (!responseHeaders) {
293
- let count = 0;
294
- for (const k in headers) {
295
- if (++count > 1 || typeof headers[k] !== "string") {
296
- responseHeaders = new Headers();
297
- break;
298
- }
299
- }
300
- }
301
- if (responseHeaders) {
302
- for (const k in headers) {
303
- const v = headers[k];
304
- if (typeof v === "string") {
305
- responseHeaders.set(k, v);
306
- } else {
307
- responseHeaders.delete(k);
308
- for (const v2 of v) {
309
- responseHeaders.append(k, v2);
310
- }
311
- }
312
- }
313
- }
314
- }
315
- const status = typeof arg === "number" ? arg : arg?.status ?? this.#status;
316
- return createResponseInstance(data, {
317
- status,
318
- headers: responseHeaders ?? headers
319
- });
320
- }
321
- newResponse = (...args) => this.#newResponse(...args);
322
- /**
323
- * `.body()` can return the HTTP response.
324
- * You can set headers with `.header()` and set HTTP status code with `.status`.
325
- * This can also be set in `.text()`, `.json()` and so on.
326
- *
327
- * @see {@link https://hono.dev/docs/api/context#body}
328
- *
329
- * @example
330
- * ```ts
331
- * app.get('/welcome', (c) => {
332
- * // Set headers
333
- * c.header('X-Message', 'Hello!')
334
- * c.header('Content-Type', 'text/plain')
335
- * // Set HTTP status code
336
- * c.status(201)
337
- *
338
- * // Return the response body
339
- * return c.body('Thank you for coming')
340
- * })
341
- * ```
342
- */
343
- body = (data, arg, headers) => this.#newResponse(data, arg, headers);
344
- /**
345
- * `.text()` can render text as `Content-Type:text/plain`.
346
- *
347
- * @see {@link https://hono.dev/docs/api/context#text}
348
- *
349
- * @example
350
- * ```ts
351
- * app.get('/say', (c) => {
352
- * return c.text('Hello!')
353
- * })
354
- * ```
355
- */
356
- text = (text, arg, headers) => {
357
- return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(
358
- text,
359
- arg,
360
- setDefaultContentType(TEXT_PLAIN, headers)
361
- );
362
- };
363
- /**
364
- * `.json()` can render JSON as `Content-Type:application/json`.
365
- *
366
- * @see {@link https://hono.dev/docs/api/context#json}
367
- *
368
- * @example
369
- * ```ts
370
- * app.get('/api', (c) => {
371
- * return c.json({ message: 'Hello!' })
372
- * })
373
- * ```
374
- */
375
- json = (object, arg, headers) => {
376
- return this.#newResponse(
377
- JSON.stringify(object),
378
- arg,
379
- setDefaultContentType("application/json", headers)
380
- );
381
- };
382
- html = (html, arg, headers) => {
383
- const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType("text/html; charset=UTF-8", headers));
384
- return typeof html === "object" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);
385
- };
386
- /**
387
- * `.redirect()` can Redirect, default status code is 302.
388
- *
389
- * @see {@link https://hono.dev/docs/api/context#redirect}
390
- *
391
- * @example
392
- * ```ts
393
- * app.get('/redirect', (c) => {
394
- * return c.redirect('/')
395
- * })
396
- * app.get('/redirect-permanently', (c) => {
397
- * return c.redirect('/', 301)
398
- * })
399
- * ```
400
- */
401
- redirect = (location, status) => {
402
- const locationString = String(location);
403
- this.header(
404
- "Location",
405
- // Multibytes should be encoded
406
- // eslint-disable-next-line no-control-regex
407
- !/[^\x00-\xFF]/.test(locationString) ? locationString : encodeURI(locationString)
408
- );
409
- return this.newResponse(null, status ?? 302);
410
- };
411
- /**
412
- * `.notFound()` can return the Not Found Response.
413
- *
414
- * @see {@link https://hono.dev/docs/api/context#notfound}
415
- *
416
- * @example
417
- * ```ts
418
- * app.get('/notfound', (c) => {
419
- * return c.notFound()
420
- * })
421
- * ```
422
- */
423
- notFound = () => {
424
- this.#notFoundHandler ??= () => createResponseInstance();
425
- return this.#notFoundHandler(this);
426
- };
427
- };
428
- export {
429
- Context,
430
- TEXT_PLAIN
13
+ #rawRequest;
14
+ #req;
15
+ /**
16
+ * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.
17
+ *
18
+ * @see {@link https://hono.dev/docs/api/context#env}
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * // Environment object for Cloudflare Workers
23
+ * app.get('*', async c => {
24
+ * const counter = c.env.COUNTER
25
+ * })
26
+ * ```
27
+ */
28
+ env = {};
29
+ #var;
30
+ finalized = false;
31
+ /**
32
+ * `.error` can get the error object from the middleware if the Handler throws an error.
33
+ *
34
+ * @see {@link https://hono.dev/docs/api/context#error}
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * app.use('*', async (c, next) => {
39
+ * await next()
40
+ * if (c.error) {
41
+ * // do something...
42
+ * }
43
+ * })
44
+ * ```
45
+ */
46
+ error;
47
+ #status;
48
+ #executionCtx;
49
+ #res;
50
+ #layout;
51
+ #renderer;
52
+ #notFoundHandler;
53
+ #preparedHeaders;
54
+ #matchResult;
55
+ #path;
56
+ /**
57
+ * Creates an instance of the Context class.
58
+ *
59
+ * @param req - The Request object.
60
+ * @param options - Optional configuration options for the context.
61
+ */
62
+ constructor(req, options) {
63
+ this.#rawRequest = req;
64
+ if (options) {
65
+ this.#executionCtx = options.executionCtx;
66
+ this.env = options.env;
67
+ this.#notFoundHandler = options.notFoundHandler;
68
+ this.#path = options.path;
69
+ this.#matchResult = options.matchResult;
70
+ }
71
+ }
72
+ /**
73
+ * `.req` is the instance of {@link HonoRequest}.
74
+ */
75
+ get req() {
76
+ this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);
77
+ return this.#req;
78
+ }
79
+ /**
80
+ * @see {@link https://hono.dev/docs/api/context#event}
81
+ * The FetchEvent associated with the current request.
82
+ *
83
+ * @throws Will throw an error if the context does not have a FetchEvent.
84
+ */
85
+ get event() {
86
+ if (this.#executionCtx && "respondWith" in this.#executionCtx) return this.#executionCtx;
87
+ else throw Error("This context has no FetchEvent");
88
+ }
89
+ /**
90
+ * @see {@link https://hono.dev/docs/api/context#executionctx}
91
+ * The ExecutionContext associated with the current request.
92
+ *
93
+ * @throws Will throw an error if the context does not have an ExecutionContext.
94
+ */
95
+ get executionCtx() {
96
+ if (this.#executionCtx) return this.#executionCtx;
97
+ else throw Error("This context has no ExecutionContext");
98
+ }
99
+ /**
100
+ * @see {@link https://hono.dev/docs/api/context#res}
101
+ * The Response object for the current request.
102
+ */
103
+ get res() {
104
+ return this.#res ||= createResponseInstance(null, { headers: this.#preparedHeaders ??= new Headers() });
105
+ }
106
+ /**
107
+ * Sets the Response object for the current request.
108
+ *
109
+ * @param _res - The Response object to set.
110
+ */
111
+ set res(_res) {
112
+ if (this.#res && _res) {
113
+ _res = createResponseInstance(_res.body, _res);
114
+ for (const [k, v] of this.#res.headers.entries()) {
115
+ if (k === "content-type") continue;
116
+ if (k === "set-cookie") {
117
+ const cookies = this.#res.headers.getSetCookie();
118
+ _res.headers.delete("set-cookie");
119
+ for (const cookie of cookies) _res.headers.append("set-cookie", cookie);
120
+ } else _res.headers.set(k, v);
121
+ }
122
+ }
123
+ this.#res = _res;
124
+ this.finalized = true;
125
+ }
126
+ /**
127
+ * `.render()` can create a response within a layout.
128
+ *
129
+ * @see {@link https://hono.dev/docs/api/context#render-setrenderer}
130
+ *
131
+ * @example
132
+ * ```ts
133
+ * app.get('/', (c) => {
134
+ * return c.render('Hello!')
135
+ * })
136
+ * ```
137
+ */
138
+ render = (...args) => {
139
+ this.#renderer ??= (content) => this.html(content);
140
+ return this.#renderer(...args);
141
+ };
142
+ /**
143
+ * Sets the layout for the response.
144
+ *
145
+ * @param layout - The layout to set.
146
+ * @returns The layout function.
147
+ */
148
+ setLayout = (layout) => this.#layout = layout;
149
+ /**
150
+ * Gets the current layout for the response.
151
+ *
152
+ * @returns The current layout function.
153
+ */
154
+ getLayout = () => this.#layout;
155
+ /**
156
+ * `.setRenderer()` can set the layout in the custom middleware.
157
+ *
158
+ * @see {@link https://hono.dev/docs/api/context#render-setrenderer}
159
+ *
160
+ * @example
161
+ * ```tsx
162
+ * app.use('*', async (c, next) => {
163
+ * c.setRenderer((content) => {
164
+ * return c.html(
165
+ * <html>
166
+ * <body>
167
+ * <p>{content}</p>
168
+ * </body>
169
+ * </html>
170
+ * )
171
+ * })
172
+ * await next()
173
+ * })
174
+ * ```
175
+ */
176
+ setRenderer = (renderer) => {
177
+ this.#renderer = renderer;
178
+ };
179
+ /**
180
+ * `.header()` can set headers.
181
+ *
182
+ * @see {@link https://hono.dev/docs/api/context#header}
183
+ *
184
+ * @example
185
+ * ```ts
186
+ * app.get('/welcome', (c) => {
187
+ * // Set headers
188
+ * c.header('X-Message', 'Hello!')
189
+ * c.header('Content-Type', 'text/plain')
190
+ *
191
+ * // Append multiple headers using the append option (e.g. Vary)
192
+ * c.header('Vary', 'Accept-Encoding', { append: true })
193
+ * c.header('Vary', 'User-Agent', { append: true })
194
+ *
195
+ * return c.body('Thank you for coming')
196
+ * })
197
+ * ```
198
+ */
199
+ header = (name, value, options) => {
200
+ if (this.finalized) this.#res = createResponseInstance(this.#res.body, this.#res);
201
+ const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();
202
+ if (value === void 0) headers.delete(name);
203
+ else if (options?.append) headers.append(name, value);
204
+ else headers.set(name, value);
205
+ };
206
+ status = (status) => {
207
+ this.#status = status;
208
+ };
209
+ /**
210
+ * `.set()` can set the value specified by the key.
211
+ *
212
+ * @see {@link https://hono.dev/docs/api/context#set-get}
213
+ *
214
+ * @example
215
+ * ```ts
216
+ * app.use('*', async (c, next) => {
217
+ * c.set('message', 'Hono is hot!!')
218
+ * await next()
219
+ * })
220
+ * ```
221
+ */
222
+ set = (key, value) => {
223
+ this.#var ??= /* @__PURE__ */ new Map();
224
+ this.#var.set(key, value);
225
+ };
226
+ /**
227
+ * `.get()` can use the value specified by the key.
228
+ *
229
+ * @see {@link https://hono.dev/docs/api/context#set-get}
230
+ *
231
+ * @example
232
+ * ```ts
233
+ * app.get('/', (c) => {
234
+ * const message = c.get('message')
235
+ * return c.text(`The message is "${message}"`)
236
+ * })
237
+ * ```
238
+ */
239
+ get = (key) => {
240
+ return this.#var ? this.#var.get(key) : void 0;
241
+ };
242
+ /**
243
+ * `.var` can access the value of a variable.
244
+ *
245
+ * @see {@link https://hono.dev/docs/api/context#var}
246
+ *
247
+ * @example
248
+ * ```ts
249
+ * const result = c.var.client.oneMethod()
250
+ * ```
251
+ */
252
+ get var() {
253
+ if (!this.#var) return {};
254
+ return Object.fromEntries(this.#var);
255
+ }
256
+ #newResponse(data, arg, headers) {
257
+ let responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders;
258
+ if (typeof arg === "object" && arg.headers) {
259
+ responseHeaders ??= new Headers();
260
+ for (const [key, value] of new Headers(arg.headers)) if (key === "set-cookie") responseHeaders.append(key, value);
261
+ else responseHeaders.set(key, value);
262
+ }
263
+ if (headers) {
264
+ if (!responseHeaders) {
265
+ let count = 0;
266
+ for (const k in headers) if (++count > 1 || typeof headers[k] !== "string") {
267
+ responseHeaders = new Headers();
268
+ break;
269
+ }
270
+ }
271
+ if (responseHeaders) for (const k in headers) {
272
+ const v = headers[k];
273
+ if (typeof v === "string") responseHeaders.set(k, v);
274
+ else {
275
+ responseHeaders.delete(k);
276
+ for (const v2 of v) responseHeaders.append(k, v2);
277
+ }
278
+ }
279
+ }
280
+ const status = typeof arg === "number" ? arg : arg?.status ?? this.#status;
281
+ return createResponseInstance(data, {
282
+ status,
283
+ headers: responseHeaders ?? headers
284
+ });
285
+ }
286
+ newResponse = (...args) => this.#newResponse(...args);
287
+ /**
288
+ * `.body()` can return the HTTP response.
289
+ * You can set headers with `.header()` and set HTTP status code with `.status`.
290
+ * This can also be set in `.text()`, `.json()` and so on.
291
+ *
292
+ * @see {@link https://hono.dev/docs/api/context#body}
293
+ *
294
+ * @example
295
+ * ```ts
296
+ * app.get('/welcome', (c) => {
297
+ * // Set headers
298
+ * c.header('X-Message', 'Hello!')
299
+ * c.header('Content-Type', 'text/plain')
300
+ * // Set HTTP status code
301
+ * c.status(201)
302
+ *
303
+ * // Return the response body
304
+ * return c.body('Thank you for coming')
305
+ * })
306
+ * ```
307
+ */
308
+ body = (data, arg, headers) => this.#newResponse(data, arg, headers);
309
+ /**
310
+ * `.text()` can render text as `Content-Type:text/plain`.
311
+ *
312
+ * @see {@link https://hono.dev/docs/api/context#text}
313
+ *
314
+ * @example
315
+ * ```ts
316
+ * app.get('/say', (c) => {
317
+ * return c.text('Hello!')
318
+ * })
319
+ * ```
320
+ */
321
+ text = (text, arg, headers) => {
322
+ return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(text, arg, setDefaultContentType(TEXT_PLAIN, headers));
323
+ };
324
+ /**
325
+ * `.json()` can render JSON as `Content-Type:application/json`.
326
+ *
327
+ * @see {@link https://hono.dev/docs/api/context#json}
328
+ *
329
+ * @example
330
+ * ```ts
331
+ * app.get('/api', (c) => {
332
+ * return c.json({ message: 'Hello!' })
333
+ * })
334
+ * ```
335
+ */
336
+ json = (object, arg, headers) => {
337
+ return this.#newResponse(JSON.stringify(object), arg, setDefaultContentType("application/json", headers));
338
+ };
339
+ html = (html, arg, headers) => {
340
+ const res = (html) => this.#newResponse(html, arg, setDefaultContentType("text/html; charset=UTF-8", headers));
341
+ return typeof html === "object" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);
342
+ };
343
+ /**
344
+ * `.redirect()` can Redirect, default status code is 302.
345
+ *
346
+ * @see {@link https://hono.dev/docs/api/context#redirect}
347
+ *
348
+ * @example
349
+ * ```ts
350
+ * app.get('/redirect', (c) => {
351
+ * return c.redirect('/')
352
+ * })
353
+ * app.get('/redirect-permanently', (c) => {
354
+ * return c.redirect('/', 301)
355
+ * })
356
+ * ```
357
+ */
358
+ redirect = (location, status) => {
359
+ const locationString = String(location);
360
+ this.header("Location", !/[^\x00-\xFF]/.test(locationString) ? locationString : encodeURI(locationString));
361
+ return this.newResponse(null, status ?? 302);
362
+ };
363
+ /**
364
+ * `.notFound()` can return the Not Found Response.
365
+ *
366
+ * @see {@link https://hono.dev/docs/api/context#notfound}
367
+ *
368
+ * @example
369
+ * ```ts
370
+ * app.get('/notfound', (c) => {
371
+ * return c.notFound()
372
+ * })
373
+ * ```
374
+ */
375
+ notFound = () => {
376
+ this.#notFoundHandler ??= () => createResponseInstance();
377
+ return this.#notFoundHandler(this);
378
+ };
431
379
  };
380
+ //#endregion
381
+ export { Context, TEXT_PLAIN };