hono 4.11.7 → 4.12.7

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 (248) hide show
  1. package/dist/adapter/aws-lambda/conninfo.js +24 -0
  2. package/dist/adapter/aws-lambda/handler.js +2 -2
  3. package/dist/adapter/aws-lambda/index.js +2 -0
  4. package/dist/adapter/cloudflare-pages/conninfo.js +9 -0
  5. package/dist/adapter/cloudflare-pages/index.js +2 -0
  6. package/dist/adapter/lambda-edge/handler.js +2 -1
  7. package/dist/adapter/netlify/conninfo.js +9 -0
  8. package/dist/adapter/netlify/mod.js +2 -0
  9. package/dist/cjs/adapter/aws-lambda/conninfo.js +46 -0
  10. package/dist/cjs/adapter/aws-lambda/handler.js +2 -3
  11. package/dist/cjs/adapter/aws-lambda/index.js +3 -1
  12. package/dist/cjs/adapter/aws-lambda/types.js +0 -1
  13. package/dist/cjs/adapter/bun/conninfo.js +0 -1
  14. package/dist/cjs/adapter/bun/index.js +0 -1
  15. package/dist/cjs/adapter/bun/serve-static.js +0 -1
  16. package/dist/cjs/adapter/bun/server.js +0 -1
  17. package/dist/cjs/adapter/bun/ssg.js +0 -1
  18. package/dist/cjs/adapter/bun/websocket.js +0 -1
  19. package/dist/cjs/adapter/cloudflare-pages/conninfo.js +31 -0
  20. package/dist/cjs/adapter/cloudflare-pages/handler.js +0 -1
  21. package/dist/cjs/adapter/cloudflare-pages/index.js +3 -1
  22. package/dist/cjs/adapter/cloudflare-workers/conninfo.js +0 -1
  23. package/dist/cjs/adapter/cloudflare-workers/index.js +0 -1
  24. package/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +0 -1
  25. package/dist/cjs/adapter/cloudflare-workers/serve-static.js +0 -1
  26. package/dist/cjs/adapter/cloudflare-workers/utils.js +0 -1
  27. package/dist/cjs/adapter/cloudflare-workers/websocket.js +0 -1
  28. package/dist/cjs/adapter/deno/conninfo.js +0 -1
  29. package/dist/cjs/adapter/deno/deno.d.js +0 -1
  30. package/dist/cjs/adapter/deno/index.js +0 -1
  31. package/dist/cjs/adapter/deno/serve-static.js +0 -1
  32. package/dist/cjs/adapter/deno/ssg.js +0 -1
  33. package/dist/cjs/adapter/deno/websocket.js +0 -1
  34. package/dist/cjs/adapter/lambda-edge/conninfo.js +0 -1
  35. package/dist/cjs/adapter/lambda-edge/handler.js +2 -2
  36. package/dist/cjs/adapter/lambda-edge/index.js +0 -1
  37. package/dist/cjs/adapter/netlify/conninfo.js +31 -0
  38. package/dist/cjs/adapter/netlify/handler.js +0 -1
  39. package/dist/cjs/adapter/netlify/index.js +0 -1
  40. package/dist/cjs/adapter/netlify/mod.js +3 -1
  41. package/dist/cjs/adapter/service-worker/handler.js +0 -1
  42. package/dist/cjs/adapter/service-worker/index.js +0 -1
  43. package/dist/cjs/adapter/service-worker/types.js +0 -1
  44. package/dist/cjs/adapter/vercel/conninfo.js +0 -1
  45. package/dist/cjs/adapter/vercel/handler.js +0 -1
  46. package/dist/cjs/adapter/vercel/index.js +0 -1
  47. package/dist/cjs/client/client.js +8 -3
  48. package/dist/cjs/client/fetch-result-please.js +0 -1
  49. package/dist/cjs/client/index.js +0 -1
  50. package/dist/cjs/client/types.js +0 -1
  51. package/dist/cjs/client/utils.js +0 -1
  52. package/dist/cjs/compose.js +0 -1
  53. package/dist/cjs/context.js +6 -6
  54. package/dist/cjs/helper/accepts/accepts.js +0 -1
  55. package/dist/cjs/helper/accepts/index.js +0 -1
  56. package/dist/cjs/helper/adapter/index.js +0 -1
  57. package/dist/cjs/helper/conninfo/index.js +0 -1
  58. package/dist/cjs/helper/conninfo/types.js +0 -1
  59. package/dist/cjs/helper/cookie/index.js +0 -1
  60. package/dist/cjs/helper/css/common.js +0 -1
  61. package/dist/cjs/helper/css/index.js +0 -1
  62. package/dist/cjs/helper/dev/index.js +0 -1
  63. package/dist/cjs/helper/factory/index.js +0 -1
  64. package/dist/cjs/helper/html/index.js +0 -1
  65. package/dist/cjs/helper/proxy/index.js +0 -1
  66. package/dist/cjs/helper/route/index.js +0 -1
  67. package/dist/cjs/helper/ssg/index.js +5 -1
  68. package/dist/cjs/helper/ssg/middleware.js +0 -1
  69. package/dist/cjs/helper/ssg/plugins.js +70 -0
  70. package/dist/cjs/helper/ssg/ssg.js +2 -12
  71. package/dist/cjs/helper/ssg/utils.js +0 -1
  72. package/dist/cjs/helper/streaming/index.js +0 -1
  73. package/dist/cjs/helper/streaming/sse.js +5 -1
  74. package/dist/cjs/helper/streaming/stream.js +0 -1
  75. package/dist/cjs/helper/streaming/text.js +0 -1
  76. package/dist/cjs/helper/streaming/utils.js +0 -1
  77. package/dist/cjs/helper/testing/index.js +0 -1
  78. package/dist/cjs/helper/websocket/index.js +0 -1
  79. package/dist/cjs/hono-base.js +0 -1
  80. package/dist/cjs/hono.js +0 -1
  81. package/dist/cjs/http-exception.js +0 -1
  82. package/dist/cjs/index.js +0 -1
  83. package/dist/cjs/jsx/base.js +0 -1
  84. package/dist/cjs/jsx/children.js +0 -1
  85. package/dist/cjs/jsx/components.js +0 -1
  86. package/dist/cjs/jsx/constants.js +0 -1
  87. package/dist/cjs/jsx/context.js +4 -3
  88. package/dist/cjs/jsx/dom/client.js +0 -1
  89. package/dist/cjs/jsx/dom/components.js +0 -1
  90. package/dist/cjs/jsx/dom/context.js +0 -1
  91. package/dist/cjs/jsx/dom/css.js +0 -1
  92. package/dist/cjs/jsx/dom/hooks/index.js +0 -1
  93. package/dist/cjs/jsx/dom/index.js +0 -1
  94. package/dist/cjs/jsx/dom/intrinsic-element/components.js +40 -10
  95. package/dist/cjs/jsx/dom/jsx-dev-runtime.js +0 -1
  96. package/dist/cjs/jsx/dom/jsx-runtime.js +0 -1
  97. package/dist/cjs/jsx/dom/render.js +7 -10
  98. package/dist/cjs/jsx/dom/server.js +0 -1
  99. package/dist/cjs/jsx/dom/utils.js +0 -1
  100. package/dist/cjs/jsx/hooks/index.js +0 -1
  101. package/dist/cjs/jsx/index.js +0 -1
  102. package/dist/cjs/jsx/intrinsic-element/common.js +13 -3
  103. package/dist/cjs/jsx/intrinsic-element/components.js +18 -12
  104. package/dist/cjs/jsx/intrinsic-elements.js +0 -1
  105. package/dist/cjs/jsx/jsx-dev-runtime.js +0 -1
  106. package/dist/cjs/jsx/jsx-runtime.js +0 -1
  107. package/dist/cjs/jsx/streaming.js +13 -4
  108. package/dist/cjs/jsx/types.js +0 -1
  109. package/dist/cjs/jsx/utils.js +0 -1
  110. package/dist/cjs/middleware/basic-auth/index.js +6 -1
  111. package/dist/cjs/middleware/bearer-auth/index.js +1 -2
  112. package/dist/cjs/middleware/body-limit/index.js +0 -1
  113. package/dist/cjs/middleware/cache/index.js +0 -1
  114. package/dist/cjs/middleware/combine/index.js +0 -1
  115. package/dist/cjs/middleware/compress/index.js +0 -1
  116. package/dist/cjs/middleware/context-storage/index.js +0 -1
  117. package/dist/cjs/middleware/cors/index.js +0 -1
  118. package/dist/cjs/middleware/csrf/index.js +0 -1
  119. package/dist/cjs/middleware/etag/digest.js +0 -1
  120. package/dist/cjs/middleware/etag/index.js +0 -1
  121. package/dist/cjs/middleware/ip-restriction/index.js +0 -1
  122. package/dist/cjs/middleware/jsx-renderer/index.js +1 -1
  123. package/dist/cjs/middleware/jwk/index.js +0 -1
  124. package/dist/cjs/middleware/jwk/jwk.js +0 -1
  125. package/dist/cjs/middleware/jwt/index.js +0 -1
  126. package/dist/cjs/middleware/jwt/jwt.js +0 -1
  127. package/dist/cjs/middleware/language/index.js +0 -1
  128. package/dist/cjs/middleware/language/language.js +13 -3
  129. package/dist/cjs/middleware/logger/index.js +0 -1
  130. package/dist/cjs/middleware/method-override/index.js +0 -1
  131. package/dist/cjs/middleware/powered-by/index.js +0 -1
  132. package/dist/cjs/middleware/pretty-json/index.js +0 -1
  133. package/dist/cjs/middleware/request-id/index.js +0 -1
  134. package/dist/cjs/middleware/request-id/request-id.js +0 -1
  135. package/dist/cjs/middleware/secure-headers/index.js +0 -1
  136. package/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -1
  137. package/dist/cjs/middleware/secure-headers/secure-headers.js +0 -1
  138. package/dist/cjs/middleware/serve-static/index.js +2 -2
  139. package/dist/cjs/middleware/serve-static/path.js +0 -1
  140. package/dist/cjs/middleware/timeout/index.js +0 -1
  141. package/dist/cjs/middleware/timing/index.js +0 -1
  142. package/dist/cjs/middleware/timing/timing.js +0 -1
  143. package/dist/cjs/middleware/trailing-slash/index.js +18 -5
  144. package/dist/cjs/preset/quick.js +0 -1
  145. package/dist/cjs/preset/tiny.js +0 -1
  146. package/dist/cjs/request/constants.js +0 -1
  147. package/dist/cjs/request.js +0 -1
  148. package/dist/cjs/router/linear-router/index.js +0 -1
  149. package/dist/cjs/router/linear-router/router.js +0 -1
  150. package/dist/cjs/router/pattern-router/index.js +0 -1
  151. package/dist/cjs/router/pattern-router/router.js +0 -1
  152. package/dist/cjs/router/reg-exp-router/index.js +0 -1
  153. package/dist/cjs/router/reg-exp-router/matcher.js +0 -1
  154. package/dist/cjs/router/reg-exp-router/node.js +0 -1
  155. package/dist/cjs/router/reg-exp-router/prepared-router.js +0 -1
  156. package/dist/cjs/router/reg-exp-router/router.js +0 -1
  157. package/dist/cjs/router/reg-exp-router/trie.js +0 -1
  158. package/dist/cjs/router/smart-router/index.js +0 -1
  159. package/dist/cjs/router/smart-router/router.js +0 -1
  160. package/dist/cjs/router/trie-router/index.js +0 -1
  161. package/dist/cjs/router/trie-router/node.js +33 -17
  162. package/dist/cjs/router/trie-router/router.js +0 -1
  163. package/dist/cjs/router.js +0 -1
  164. package/dist/cjs/types.js +0 -1
  165. package/dist/cjs/utils/accept.js +188 -29
  166. package/dist/cjs/utils/basic-auth.js +0 -1
  167. package/dist/cjs/utils/body.js +3 -1
  168. package/dist/cjs/utils/buffer.js +29 -3
  169. package/dist/cjs/utils/color.js +0 -1
  170. package/dist/cjs/utils/compress.js +0 -1
  171. package/dist/cjs/utils/concurrent.js +0 -1
  172. package/dist/cjs/utils/constants.js +0 -1
  173. package/dist/cjs/utils/cookie.js +5 -1
  174. package/dist/cjs/utils/crypto.js +0 -1
  175. package/dist/cjs/utils/encode.js +0 -1
  176. package/dist/cjs/utils/filepath.js +0 -1
  177. package/dist/cjs/utils/handler.js +0 -1
  178. package/dist/cjs/utils/headers.js +0 -1
  179. package/dist/cjs/utils/html.js +0 -1
  180. package/dist/cjs/utils/http-status.js +0 -1
  181. package/dist/cjs/utils/ipaddr.js +0 -1
  182. package/dist/cjs/utils/jwt/index.js +0 -1
  183. package/dist/cjs/utils/jwt/jwa.js +0 -1
  184. package/dist/cjs/utils/jwt/jws.js +0 -1
  185. package/dist/cjs/utils/jwt/jwt.js +17 -14
  186. package/dist/cjs/utils/jwt/types.js +0 -1
  187. package/dist/cjs/utils/jwt/utf8.js +0 -1
  188. package/dist/cjs/utils/mime.js +0 -1
  189. package/dist/cjs/utils/stream.js +0 -1
  190. package/dist/cjs/utils/types.js +0 -1
  191. package/dist/cjs/utils/url.js +8 -5
  192. package/dist/cjs/validator/index.js +0 -1
  193. package/dist/cjs/validator/utils.js +0 -1
  194. package/dist/cjs/validator/validator.js +2 -3
  195. package/dist/client/client.js +8 -2
  196. package/dist/context.js +6 -5
  197. package/dist/helper/ssg/index.js +3 -0
  198. package/dist/helper/ssg/plugins.js +47 -0
  199. package/dist/helper/ssg/ssg.js +2 -10
  200. package/dist/helper/streaming/sse.js +5 -0
  201. package/dist/jsx/context.js +4 -2
  202. package/dist/jsx/dom/intrinsic-element/components.js +47 -10
  203. package/dist/jsx/dom/render.js +7 -9
  204. package/dist/jsx/intrinsic-element/common.js +10 -1
  205. package/dist/jsx/intrinsic-element/components.js +24 -12
  206. package/dist/jsx/streaming.js +13 -3
  207. package/dist/middleware/basic-auth/index.js +6 -0
  208. package/dist/middleware/bearer-auth/index.js +1 -1
  209. package/dist/middleware/jsx-renderer/index.js +1 -0
  210. package/dist/middleware/language/language.js +13 -2
  211. package/dist/middleware/serve-static/index.js +2 -1
  212. package/dist/middleware/trailing-slash/index.js +18 -4
  213. package/dist/router/trie-router/node.js +33 -16
  214. package/dist/tsconfig.build.tsbuildinfo +1 -0
  215. package/dist/types/adapter/aws-lambda/conninfo.d.ts +27 -0
  216. package/dist/types/adapter/aws-lambda/handler.d.ts +2 -2
  217. package/dist/types/adapter/aws-lambda/index.d.ts +1 -0
  218. package/dist/types/adapter/cloudflare-pages/conninfo.d.ts +21 -0
  219. package/dist/types/adapter/cloudflare-pages/index.d.ts +1 -0
  220. package/dist/types/adapter/netlify/conninfo.d.ts +21 -0
  221. package/dist/types/adapter/netlify/mod.d.ts +1 -0
  222. package/dist/types/client/index.d.ts +1 -1
  223. package/dist/types/client/types.d.ts +43 -2
  224. package/dist/types/context.d.ts +4 -0
  225. package/dist/types/helper/ssg/index.d.ts +1 -0
  226. package/dist/types/helper/ssg/plugins.d.ts +27 -0
  227. package/dist/types/helper/ssg/ssg.d.ts +0 -8
  228. package/dist/types/hono-base.d.ts +1 -1
  229. package/dist/types/jsx/intrinsic-element/common.d.ts +3 -0
  230. package/dist/types/jsx/types.d.ts +1 -1
  231. package/dist/types/middleware/basic-auth/index.d.ts +19 -0
  232. package/dist/types/middleware/jsx-renderer/index.d.ts +1 -1
  233. package/dist/types/middleware/jwt/index.d.ts +1 -1
  234. package/dist/types/middleware/jwt/jwt.d.ts +1 -1
  235. package/dist/types/middleware/trailing-slash/index.d.ts +43 -2
  236. package/dist/types/request.d.ts +1 -1
  237. package/dist/types/types.d.ts +18 -18
  238. package/dist/types/utils/accept.d.ts +0 -5
  239. package/dist/types/utils/buffer.d.ts +10 -1
  240. package/dist/types/utils/url.d.ts +10 -0
  241. package/dist/utils/accept.js +188 -28
  242. package/dist/utils/body.js +3 -0
  243. package/dist/utils/buffer.js +29 -2
  244. package/dist/utils/cookie.js +5 -0
  245. package/dist/utils/jwt/jwt.js +17 -13
  246. package/dist/utils/url.js +6 -3
  247. package/dist/validator/validator.js +2 -2
  248. package/package.json +5 -4
@@ -1,30 +1,197 @@
1
1
  // src/utils/accept.ts
2
- var parseAccept = (acceptHeader) => {
3
- if (!acceptHeader) {
4
- return [];
2
+ var isWhitespace = (char) => char === 32 || char === 9 || char === 10 || char === 13;
3
+ var consumeWhitespace = (acceptHeader, startIndex) => {
4
+ while (startIndex < acceptHeader.length) {
5
+ if (!isWhitespace(acceptHeader.charCodeAt(startIndex))) {
6
+ break;
7
+ }
8
+ startIndex++;
9
+ }
10
+ return startIndex;
11
+ };
12
+ var ignoreTrailingWhitespace = (acceptHeader, startIndex) => {
13
+ while (startIndex > 0) {
14
+ if (!isWhitespace(acceptHeader.charCodeAt(startIndex - 1))) {
15
+ break;
16
+ }
17
+ startIndex--;
18
+ }
19
+ return startIndex;
20
+ };
21
+ var skipInvalidParam = (acceptHeader, startIndex) => {
22
+ while (startIndex < acceptHeader.length) {
23
+ const char = acceptHeader.charCodeAt(startIndex);
24
+ if (char === 59) {
25
+ return [startIndex + 1, true];
26
+ }
27
+ if (char === 44) {
28
+ return [startIndex + 1, false];
29
+ }
30
+ startIndex++;
31
+ }
32
+ return [startIndex, false];
33
+ };
34
+ var skipInvalidAcceptValue = (acceptHeader, startIndex) => {
35
+ let i = startIndex;
36
+ let inQuotes = false;
37
+ while (i < acceptHeader.length) {
38
+ const char = acceptHeader.charCodeAt(i);
39
+ if (inQuotes && char === 92) {
40
+ i++;
41
+ } else if (char === 34) {
42
+ inQuotes = !inQuotes;
43
+ } else if (!inQuotes && char === 44) {
44
+ return i + 1;
45
+ }
46
+ i++;
47
+ }
48
+ return i;
49
+ };
50
+ var getNextParam = (acceptHeader, startIndex) => {
51
+ startIndex = consumeWhitespace(acceptHeader, startIndex);
52
+ let i = startIndex;
53
+ let key;
54
+ let value;
55
+ let hasNext = false;
56
+ while (i < acceptHeader.length) {
57
+ const char = acceptHeader.charCodeAt(i);
58
+ if (char === 61) {
59
+ key = acceptHeader.slice(startIndex, ignoreTrailingWhitespace(acceptHeader, i));
60
+ i++;
61
+ break;
62
+ }
63
+ if (char === 59) {
64
+ return [i + 1, void 0, void 0, true];
65
+ }
66
+ if (char === 44) {
67
+ return [i + 1, void 0, void 0, false];
68
+ }
69
+ i++;
70
+ }
71
+ if (key === void 0) {
72
+ return [i, void 0, void 0, false];
73
+ }
74
+ i = consumeWhitespace(acceptHeader, i);
75
+ if (acceptHeader.charCodeAt(i) === 61) {
76
+ const skipResult = skipInvalidParam(acceptHeader, i + 1);
77
+ return [skipResult[0], key, void 0, skipResult[1]];
78
+ }
79
+ let inQuotes = false;
80
+ const paramStartIndex = i;
81
+ while (i < acceptHeader.length) {
82
+ const char = acceptHeader.charCodeAt(i);
83
+ if (inQuotes && char === 92) {
84
+ i++;
85
+ } else if (char === 34) {
86
+ if (inQuotes) {
87
+ let nextIndex = consumeWhitespace(acceptHeader, i + 1);
88
+ const nextChar = acceptHeader.charCodeAt(nextIndex);
89
+ if (nextIndex < acceptHeader.length && !(nextChar === 59 || nextChar === 44)) {
90
+ const skipResult = skipInvalidParam(acceptHeader, nextIndex);
91
+ return [skipResult[0], key, void 0, skipResult[1]];
92
+ }
93
+ value = acceptHeader.slice(paramStartIndex + 1, i);
94
+ if (value.includes("\\")) {
95
+ value = value.replace(/\\(.)/g, "$1");
96
+ }
97
+ if (nextChar === 44) {
98
+ return [nextIndex + 1, key, value, false];
99
+ }
100
+ if (nextChar === 59) {
101
+ hasNext = true;
102
+ nextIndex++;
103
+ }
104
+ i = nextIndex;
105
+ break;
106
+ }
107
+ inQuotes = true;
108
+ } else if (!inQuotes && (char === 59 || char === 44)) {
109
+ value = acceptHeader.slice(paramStartIndex, ignoreTrailingWhitespace(acceptHeader, i));
110
+ if (char === 59) {
111
+ hasNext = true;
112
+ }
113
+ i++;
114
+ break;
115
+ }
116
+ i++;
5
117
  }
6
- const acceptValues = acceptHeader.split(",").map((value, index) => ({ value, index }));
7
- return acceptValues.map(parseAcceptValue).filter((item) => Boolean(item)).sort(sortByQualityAndIndex).map(({ type, params, q }) => ({ type, params, q }));
118
+ return [
119
+ i,
120
+ key,
121
+ value ?? acceptHeader.slice(paramStartIndex, ignoreTrailingWhitespace(acceptHeader, i)),
122
+ hasNext
123
+ ];
8
124
  };
9
- var parseAcceptValueRegex = /;(?=(?:(?:[^"]*"){2})*[^"]*$)/;
10
- var parseAcceptValue = ({ value, index }) => {
11
- const parts = value.trim().split(parseAcceptValueRegex).map((s) => s.trim());
12
- const type = parts[0];
13
- if (!type) {
14
- return null;
125
+ var getNextAcceptValue = (acceptHeader, startIndex) => {
126
+ const accept = {
127
+ type: "",
128
+ params: {},
129
+ q: 1
130
+ };
131
+ startIndex = consumeWhitespace(acceptHeader, startIndex);
132
+ let i = startIndex;
133
+ while (i < acceptHeader.length) {
134
+ const char = acceptHeader.charCodeAt(i);
135
+ if (char === 59 || char === 44) {
136
+ accept.type = acceptHeader.slice(startIndex, ignoreTrailingWhitespace(acceptHeader, i));
137
+ i++;
138
+ if (char === 44) {
139
+ return [i, accept.type ? accept : void 0];
140
+ }
141
+ if (!accept.type) {
142
+ return [skipInvalidAcceptValue(acceptHeader, i), void 0];
143
+ }
144
+ break;
145
+ }
146
+ i++;
147
+ }
148
+ if (!accept.type) {
149
+ accept.type = acceptHeader.slice(
150
+ startIndex,
151
+ ignoreTrailingWhitespace(acceptHeader, acceptHeader.length)
152
+ );
153
+ return [acceptHeader.length, accept.type ? accept : void 0];
154
+ }
155
+ let param;
156
+ let value;
157
+ let hasNext;
158
+ while (i < acceptHeader.length) {
159
+ ;
160
+ [i, param, value, hasNext] = getNextParam(acceptHeader, i);
161
+ if (param && value) {
162
+ accept.params[param] = value;
163
+ }
164
+ if (!hasNext) {
165
+ break;
166
+ }
15
167
  }
16
- const params = parseParams(parts.slice(1));
17
- const q = parseQuality(params.q);
18
- return { type, params, q, index };
168
+ return [i, accept];
19
169
  };
20
- var parseParams = (paramParts) => {
21
- return paramParts.reduce((acc, param) => {
22
- const [key, val] = param.split("=").map((s) => s.trim());
23
- if (key && val) {
24
- acc[key] = val;
170
+ var parseAccept = (acceptHeader) => {
171
+ if (!acceptHeader) {
172
+ return [];
173
+ }
174
+ const values = [];
175
+ let i = 0;
176
+ let accept;
177
+ let requiresSort = false;
178
+ let lastAccept;
179
+ while (i < acceptHeader.length) {
180
+ ;
181
+ [i, accept] = getNextAcceptValue(acceptHeader, i);
182
+ if (accept) {
183
+ accept.q = parseQuality(accept.params.q);
184
+ values.push(accept);
185
+ if (lastAccept && lastAccept.q < accept.q) {
186
+ requiresSort = true;
187
+ }
188
+ lastAccept = accept;
25
189
  }
26
- return acc;
27
- }, {});
190
+ }
191
+ if (requiresSort) {
192
+ values.sort((a, b) => b.q - a.q);
193
+ }
194
+ return values;
28
195
  };
29
196
  var parseQuality = (qVal) => {
30
197
  if (qVal === void 0) {
@@ -51,13 +218,6 @@ var parseQuality = (qVal) => {
51
218
  }
52
219
  return num;
53
220
  };
54
- var sortByQualityAndIndex = (a, b) => {
55
- const qDiff = b.q - a.q;
56
- if (qDiff !== 0) {
57
- return qDiff;
58
- }
59
- return a.index - b.index;
60
- };
61
221
  export {
62
222
  parseAccept
63
223
  };
@@ -54,6 +54,9 @@ var handleParsingAllValues = (form, key, value) => {
54
54
  }
55
55
  };
56
56
  var handleParsingNestedValues = (form, key, value) => {
57
+ if (/(?:^|\.)__proto__\./.test(key)) {
58
+ return;
59
+ }
57
60
  let nestedForm = form;
58
61
  const keys = key.split(".");
59
62
  keys.forEach((key2, index) => {
@@ -17,15 +17,42 @@ var equal = (a, b) => {
17
17
  }
18
18
  return true;
19
19
  };
20
+ var constantTimeEqualString = (a, b) => {
21
+ const aLen = a.length;
22
+ const bLen = b.length;
23
+ const maxLen = Math.max(aLen, bLen);
24
+ let out = aLen ^ bLen;
25
+ for (let i = 0; i < maxLen; i++) {
26
+ const aChar = i < aLen ? a.charCodeAt(i) : 0;
27
+ const bChar = i < bLen ? b.charCodeAt(i) : 0;
28
+ out |= aChar ^ bChar;
29
+ }
30
+ return out === 0;
31
+ };
32
+ var timingSafeEqualString = async (a, b, hashFunction) => {
33
+ if (!hashFunction) {
34
+ hashFunction = sha256;
35
+ }
36
+ const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);
37
+ if (sa == null || sb == null || typeof sa !== "string" || typeof sb !== "string") {
38
+ return false;
39
+ }
40
+ const hashEqual = constantTimeEqualString(sa, sb);
41
+ const originalEqual = constantTimeEqualString(a, b);
42
+ return hashEqual && originalEqual;
43
+ };
20
44
  var timingSafeEqual = async (a, b, hashFunction) => {
45
+ if (typeof a === "string" && typeof b === "string") {
46
+ return timingSafeEqualString(a, b, hashFunction);
47
+ }
21
48
  if (!hashFunction) {
22
49
  hashFunction = sha256;
23
50
  }
24
51
  const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);
25
- if (!sa || !sb) {
52
+ if (!sa || !sb || typeof sa !== "string" || typeof sb !== "string") {
26
53
  return false;
27
54
  }
28
- return sa === sb && a === b;
55
+ return timingSafeEqualString(sa, sb);
29
56
  };
30
57
  var bufferToString = (buffer) => {
31
58
  if (buffer instanceof ArrayBuffer) {
@@ -87,6 +87,11 @@ var _serialize = (name, value, opt = {}) => {
87
87
  throw new Error("__Host- Cookie must not have Domain attributes");
88
88
  }
89
89
  }
90
+ for (const key of ["domain", "path"]) {
91
+ if (opt[key] && /[;\r\n]/.test(opt[key])) {
92
+ throw new Error(`${key} must not contain ";", "\\r", or "\\n"`);
93
+ }
94
+ }
90
95
  if (opt && typeof opt.maxAge === "number" && opt.maxAge >= 0) {
91
96
  if (opt.maxAge > 3456e4) {
92
97
  throw new Error(
@@ -69,7 +69,7 @@ var verify = async (token, publicKey, algOrOptions) => {
69
69
  if (header.alg !== alg) {
70
70
  throw new JwtAlgorithmMismatch(alg, header.alg);
71
71
  }
72
- const now = Date.now() / 1e3 | 0;
72
+ const now = Math.floor(Date.now() / 1e3);
73
73
  if (nbf && payload.nbf && payload.nbf > now) {
74
74
  throw new JwtTokenNotBefore(token);
75
75
  }
@@ -134,6 +134,7 @@ var verifyWithJwks = async (token, options, init) => {
134
134
  if (!options.allowedAlgorithms.includes(header.alg)) {
135
135
  throw new JwtAlgorithmNotAllowed(header.alg, options.allowedAlgorithms);
136
136
  }
137
+ let verifyKeys = options.keys ? [...options.keys] : void 0;
137
138
  if (options.jwks_uri) {
138
139
  const response = await fetch(options.jwks_uri, init);
139
140
  if (!response.ok) {
@@ -146,15 +147,12 @@ var verifyWithJwks = async (token, options, init) => {
146
147
  if (!Array.isArray(data.keys)) {
147
148
  throw new Error('invalid JWKS response. "keys" field is not an array');
148
149
  }
149
- if (options.keys) {
150
- options.keys.push(...data.keys);
151
- } else {
152
- options.keys = data.keys;
153
- }
154
- } else if (!options.keys) {
150
+ verifyKeys ??= [];
151
+ verifyKeys.push(...data.keys);
152
+ } else if (!verifyKeys) {
155
153
  throw new Error('verifyWithJwks requires options for either "keys" or "jwks_uri" or both');
156
154
  }
157
- const matchingKey = options.keys.find((key) => key.kid === header.kid);
155
+ const matchingKey = verifyKeys.find((key) => key.kid === header.kid);
158
156
  if (!matchingKey) {
159
157
  throw new JwtTokenInvalid(token);
160
158
  }
@@ -167,10 +165,13 @@ var verifyWithJwks = async (token, options, init) => {
167
165
  });
168
166
  };
169
167
  var decode = (token) => {
168
+ const parts = token.split(".");
169
+ if (parts.length !== 3) {
170
+ throw new JwtTokenInvalid(token);
171
+ }
170
172
  try {
171
- const [h, p] = token.split(".");
172
- const header = decodeJwtPart(h);
173
- const payload = decodeJwtPart(p);
173
+ const header = decodeJwtPart(parts[0]);
174
+ const payload = decodeJwtPart(parts[1]);
174
175
  return {
175
176
  header,
176
177
  payload
@@ -180,9 +181,12 @@ var decode = (token) => {
180
181
  }
181
182
  };
182
183
  var decodeHeader = (token) => {
184
+ const parts = token.split(".");
185
+ if (parts.length !== 3) {
186
+ throw new JwtTokenInvalid(token);
187
+ }
183
188
  try {
184
- const [h] = token.split(".");
185
- return decodeJwtPart(h);
189
+ return decodeJwtPart(parts[0]);
186
190
  } catch {
187
191
  throw new JwtTokenInvalid(token);
188
192
  }
package/dist/utils/url.js CHANGED
@@ -73,9 +73,11 @@ var getPath = (request) => {
73
73
  const charCode = url.charCodeAt(i);
74
74
  if (charCode === 37) {
75
75
  const queryIndex = url.indexOf("?", i);
76
- const path = url.slice(start, queryIndex === -1 ? void 0 : queryIndex);
76
+ const hashIndex = url.indexOf("#", i);
77
+ const end = queryIndex === -1 ? hashIndex === -1 ? void 0 : hashIndex : hashIndex === -1 ? queryIndex : Math.min(queryIndex, hashIndex);
78
+ const path = url.slice(start, end);
77
79
  return tryDecodeURI(path.includes("%25") ? path.replace(/%25/g, "%2525") : path);
78
- } else if (charCode === 63) {
80
+ } else if (charCode === 63 || charCode === 35) {
79
81
  break;
80
82
  }
81
83
  }
@@ -215,5 +217,6 @@ export {
215
217
  mergePath,
216
218
  splitPath,
217
219
  splitRoutingPath,
218
- tryDecode
220
+ tryDecode,
221
+ tryDecodeURI
219
222
  };
@@ -39,7 +39,7 @@ var validator = (target, validationFunc) => {
39
39
  throw new HTTPException(400, { message });
40
40
  }
41
41
  }
42
- const form = {};
42
+ const form = /* @__PURE__ */ Object.create(null);
43
43
  formData.forEach((value2, key) => {
44
44
  if (key.endsWith("[]")) {
45
45
  ;
@@ -47,7 +47,7 @@ var validator = (target, validationFunc) => {
47
47
  } else if (Array.isArray(form[key])) {
48
48
  ;
49
49
  form[key].push(value2);
50
- } else if (key in form) {
50
+ } else if (Object.hasOwn(form, key)) {
51
51
  form[key] = [form[key], value2];
52
52
  } else {
53
53
  form[key] = value2;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hono",
3
- "version": "4.11.7",
3
+ "version": "4.12.7",
4
4
  "description": "Web framework built on Web Standards",
5
5
  "main": "dist/cjs/index.js",
6
6
  "type": "module",
@@ -656,18 +656,19 @@
656
656
  "nodejs"
657
657
  ],
658
658
  "devDependencies": {
659
- "@hono/eslint-config": "^2.0.5",
659
+ "@hono/eslint-config": "^2.1.0",
660
660
  "@hono/node-server": "^1.13.5",
661
661
  "@types/glob": "^9.0.0",
662
662
  "@types/jsdom": "^21.1.7",
663
663
  "@types/node": "^24.3.0",
664
- "@typescript/native-preview": "7.0.0-dev.20251220.1",
664
+ "@types/ws": "^8.18.1",
665
+ "@typescript/native-preview": "7.0.0-dev.20260210.1",
665
666
  "@vitest/coverage-v8": "^3.2.4",
666
667
  "arg": "^5.0.2",
667
668
  "bun-types": "^1.2.20",
668
669
  "editorconfig-checker": "6.1.1",
669
670
  "esbuild": "^0.27.1",
670
- "eslint": "9.39.1",
671
+ "eslint": "^9.39.3",
671
672
  "glob": "^11.0.0",
672
673
  "jsdom": "22.1.0",
673
674
  "msw": "^2.6.0",