hono 4.3.11 → 4.4.0

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 (188) hide show
  1. package/README.md +2 -3
  2. package/dist/adapter/aws-lambda/handler.js +12 -9
  3. package/dist/adapter/bun/conninfo.js +21 -0
  4. package/dist/adapter/bun/index.js +2 -0
  5. package/dist/adapter/bun/websocket.js +1 -3
  6. package/dist/adapter/cloudflare-workers/conninfo.js +10 -0
  7. package/dist/adapter/cloudflare-workers/websocket.js +2 -6
  8. package/dist/adapter/deno/conninfo.js +15 -0
  9. package/dist/adapter/deno/index.js +2 -0
  10. package/dist/adapter/lambda-edge/handler.js +3 -3
  11. package/dist/cjs/adapter/aws-lambda/handler.js +12 -9
  12. package/dist/cjs/adapter/bun/conninfo.js +44 -0
  13. package/dist/cjs/adapter/bun/index.js +3 -0
  14. package/dist/cjs/adapter/cloudflare-workers/conninfo.js +33 -0
  15. package/dist/cjs/adapter/cloudflare-workers/websocket.js +2 -6
  16. package/dist/cjs/adapter/deno/conninfo.js +38 -0
  17. package/dist/cjs/adapter/deno/index.js +3 -0
  18. package/dist/cjs/adapter/lambda-edge/handler.js +3 -3
  19. package/dist/cjs/helper/conninfo/index.js +16 -0
  20. package/dist/cjs/helper/ssg/ssg.js +64 -3
  21. package/dist/cjs/helper/streaming/text.js +1 -1
  22. package/dist/cjs/hono-base.js +10 -6
  23. package/dist/cjs/jsx/base.js +5 -2
  24. package/dist/cjs/jsx/dom/client.js +68 -0
  25. package/dist/cjs/jsx/dom/index.js +8 -4
  26. package/dist/cjs/jsx/dom/jsx-dev-runtime.js +6 -20
  27. package/dist/cjs/jsx/dom/render.js +41 -25
  28. package/dist/cjs/jsx/dom/utils.js +15 -0
  29. package/dist/cjs/jsx/hooks/index.js +4 -1
  30. package/dist/cjs/jsx/index.js +8 -4
  31. package/dist/cjs/middleware/jwt/index.js +5 -82
  32. package/dist/cjs/middleware/jwt/jwt.js +111 -0
  33. package/dist/cjs/middleware/secure-headers/index.js +3 -123
  34. package/dist/cjs/middleware/secure-headers/secure-headers.js +150 -0
  35. package/dist/cjs/middleware/timeout/index.js +48 -0
  36. package/dist/cjs/middleware/timing/index.js +5 -89
  37. package/dist/cjs/middleware/timing/timing.js +118 -0
  38. package/dist/cjs/utils/body.js +34 -9
  39. package/dist/cjs/utils/jwt/jws.js +4 -5
  40. package/dist/cjs/utils/jwt/jwt.js +6 -7
  41. package/dist/cjs/utils/url.js +26 -2
  42. package/dist/helper/css/index.js +4 -4
  43. package/dist/helper/html/index.js +1 -1
  44. package/dist/helper/ssg/ssg.js +63 -5
  45. package/dist/helper/streaming/text.js +1 -1
  46. package/dist/hono-base.js +11 -7
  47. package/dist/jsx/base.js +3 -1
  48. package/dist/jsx/dom/client.js +44 -0
  49. package/dist/jsx/dom/css.js +4 -4
  50. package/dist/jsx/dom/index.js +25 -21
  51. package/dist/jsx/dom/jsx-dev-runtime.js +6 -20
  52. package/dist/jsx/dom/render.js +40 -26
  53. package/dist/jsx/dom/utils.js +14 -0
  54. package/dist/jsx/hooks/index.js +4 -2
  55. package/dist/jsx/index.js +22 -18
  56. package/dist/jsx/jsx-runtime.js +1 -1
  57. package/dist/middleware/jsx-renderer/index.js +1 -1
  58. package/dist/middleware/jwt/index.js +1 -78
  59. package/dist/middleware/jwt/jwt.js +85 -0
  60. package/dist/middleware/secure-headers/index.js +1 -121
  61. package/dist/middleware/secure-headers/secure-headers.js +126 -0
  62. package/dist/middleware/timeout/index.js +25 -0
  63. package/dist/middleware/timing/index.js +1 -85
  64. package/dist/middleware/timing/timing.js +92 -0
  65. package/dist/request.js +1 -1
  66. package/dist/router/reg-exp-router/router.js +2 -2
  67. package/dist/router/smart-router/router.js +1 -1
  68. package/dist/router/trie-router/node.js +1 -1
  69. package/dist/types/adapter/aws-lambda/handler.d.ts +3 -3
  70. package/dist/types/adapter/aws-lambda/index.d.ts +4 -0
  71. package/dist/types/adapter/bun/conninfo.d.ts +7 -0
  72. package/dist/types/adapter/bun/index.d.ts +5 -0
  73. package/dist/types/adapter/bun/websocket.d.ts +2 -3
  74. package/dist/types/adapter/cloudflare-pages/index.d.ts +4 -0
  75. package/dist/types/adapter/cloudflare-workers/conninfo.d.ts +2 -0
  76. package/dist/types/adapter/cloudflare-workers/index.d.ts +4 -0
  77. package/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +2 -2
  78. package/dist/types/adapter/cloudflare-workers/serve-static.d.ts +1 -2
  79. package/dist/types/adapter/cloudflare-workers/utils.d.ts +1 -2
  80. package/dist/types/adapter/deno/conninfo.d.ts +7 -0
  81. package/dist/types/adapter/deno/index.d.ts +5 -0
  82. package/dist/types/adapter/lambda-edge/handler.d.ts +1 -2
  83. package/dist/types/adapter/lambda-edge/index.d.ts +4 -0
  84. package/dist/types/adapter/netlify/handler.d.ts +1 -7
  85. package/dist/types/adapter/netlify/index.d.ts +4 -0
  86. package/dist/types/adapter/netlify/mod.d.ts +0 -1
  87. package/dist/types/adapter/vercel/index.d.ts +4 -0
  88. package/dist/types/client/index.d.ts +4 -0
  89. package/dist/types/compose.d.ts +1 -1
  90. package/dist/types/helper/accepts/index.d.ts +4 -0
  91. package/dist/types/helper/adapter/index.d.ts +4 -0
  92. package/dist/types/helper/conninfo/index.d.ts +40 -0
  93. package/dist/types/helper/cookie/index.d.ts +5 -1
  94. package/dist/types/helper/css/index.d.ts +4 -0
  95. package/dist/types/helper/dev/index.d.ts +4 -0
  96. package/dist/types/helper/factory/index.d.ts +4 -0
  97. package/dist/types/helper/html/index.d.ts +4 -0
  98. package/dist/types/helper/ssg/index.d.ts +4 -0
  99. package/dist/types/helper/ssg/ssg.d.ts +6 -3
  100. package/dist/types/helper/streaming/index.d.ts +4 -0
  101. package/dist/types/helper/testing/index.d.ts +4 -0
  102. package/dist/types/helper/websocket/index.d.ts +4 -0
  103. package/dist/types/hono-base.d.ts +15 -15
  104. package/dist/types/http-exception.d.ts +4 -0
  105. package/dist/types/index.d.ts +15 -0
  106. package/dist/types/jsx/base.d.ts +10 -11
  107. package/dist/types/jsx/components.d.ts +1 -1
  108. package/dist/types/jsx/context.d.ts +1 -1
  109. package/dist/types/jsx/dom/client.d.ts +26 -0
  110. package/dist/types/jsx/dom/components.d.ts +2 -2
  111. package/dist/types/jsx/dom/css.d.ts +31 -20
  112. package/dist/types/jsx/dom/index.d.ts +13 -7
  113. package/dist/types/jsx/dom/jsx-dev-runtime.d.ts +5 -1
  114. package/dist/types/jsx/dom/jsx-runtime.d.ts +4 -0
  115. package/dist/types/jsx/dom/render.d.ts +4 -3
  116. package/dist/types/jsx/dom/utils.d.ts +6 -0
  117. package/dist/types/jsx/hooks/index.d.ts +4 -0
  118. package/dist/types/jsx/index.d.ts +13 -7
  119. package/dist/types/jsx/intrinsic-elements.d.ts +629 -630
  120. package/dist/types/jsx/jsx-dev-runtime.d.ts +5 -0
  121. package/dist/types/jsx/jsx-runtime.d.ts +5 -0
  122. package/dist/types/jsx/streaming.d.ts +5 -1
  123. package/dist/types/jsx/types.d.ts +1 -0
  124. package/dist/types/middleware/basic-auth/index.d.ts +35 -0
  125. package/dist/types/middleware/bearer-auth/index.d.ts +33 -0
  126. package/dist/types/middleware/body-limit/index.d.ts +28 -11
  127. package/dist/types/middleware/cache/index.d.ts +29 -0
  128. package/dist/types/middleware/compress/index.d.ts +20 -0
  129. package/dist/types/middleware/cors/index.d.ts +43 -0
  130. package/dist/types/middleware/csrf/index.d.ts +41 -0
  131. package/dist/types/middleware/etag/index.d.ts +24 -0
  132. package/dist/types/middleware/jsx-renderer/index.d.ts +63 -2
  133. package/dist/types/middleware/jwt/index.d.ts +5 -17
  134. package/dist/types/middleware/jwt/jwt.d.ts +48 -0
  135. package/dist/types/middleware/logger/index.d.ts +20 -0
  136. package/dist/types/middleware/method-override/index.d.ts +22 -10
  137. package/dist/types/middleware/powered-by/index.d.ts +4 -0
  138. package/dist/types/middleware/pretty-json/index.d.ts +23 -0
  139. package/dist/types/middleware/secure-headers/index.d.ts +6 -64
  140. package/dist/types/middleware/secure-headers/secure-headers.d.ts +97 -0
  141. package/dist/types/middleware/serve-static/index.d.ts +4 -0
  142. package/dist/types/middleware/timeout/index.d.ts +31 -0
  143. package/dist/types/middleware/timing/index.d.ts +5 -29
  144. package/dist/types/middleware/timing/timing.d.ts +111 -0
  145. package/dist/types/middleware/trailing-slash/index.d.ts +29 -5
  146. package/dist/types/preset/quick.d.ts +4 -0
  147. package/dist/types/preset/tiny.d.ts +4 -0
  148. package/dist/types/request.d.ts +5 -4
  149. package/dist/types/router/linear-router/index.d.ts +4 -0
  150. package/dist/types/router/linear-router/router.d.ts +1 -1
  151. package/dist/types/router/pattern-router/index.d.ts +4 -0
  152. package/dist/types/router/reg-exp-router/index.d.ts +4 -0
  153. package/dist/types/router/reg-exp-router/router.d.ts +1 -1
  154. package/dist/types/router/reg-exp-router/trie.d.ts +1 -1
  155. package/dist/types/router/smart-router/index.d.ts +4 -0
  156. package/dist/types/router/smart-router/router.d.ts +1 -1
  157. package/dist/types/router/trie-router/index.d.ts +4 -0
  158. package/dist/types/router.d.ts +4 -0
  159. package/dist/types/types.d.ts +4 -0
  160. package/dist/types/utils/body.d.ts +61 -3
  161. package/dist/types/utils/buffer.d.ts +4 -0
  162. package/dist/types/utils/color.d.ts +4 -0
  163. package/dist/types/utils/concurrent.d.ts +4 -0
  164. package/dist/types/utils/cookie.d.ts +4 -0
  165. package/dist/types/utils/crypto.d.ts +4 -0
  166. package/dist/types/utils/encode.d.ts +4 -0
  167. package/dist/types/utils/filepath.d.ts +4 -0
  168. package/dist/types/utils/handler.d.ts +4 -0
  169. package/dist/types/utils/html.d.ts +4 -0
  170. package/dist/types/utils/http-status.d.ts +4 -0
  171. package/dist/types/utils/jwt/index.d.ts +4 -0
  172. package/dist/types/utils/jwt/jwt.d.ts +3 -3
  173. package/dist/types/utils/mime.d.ts +4 -0
  174. package/dist/types/utils/stream.d.ts +4 -0
  175. package/dist/types/utils/types.d.ts +4 -0
  176. package/dist/types/utils/url.d.ts +4 -0
  177. package/dist/types/validator/index.d.ts +4 -0
  178. package/dist/types/validator/validator.d.ts +1 -1
  179. package/dist/utils/body.js +34 -9
  180. package/dist/utils/jwt/index.js +1 -1
  181. package/dist/utils/jwt/jws.js +1 -2
  182. package/dist/utils/jwt/jwt.js +5 -5
  183. package/dist/utils/url.js +26 -2
  184. package/package.json +27 -6
  185. package/dist/cjs/adapter/aws-lambda/awslambda.d.js +0 -1
  186. package/dist/cjs/helper.js +0 -44
  187. package/dist/helper.js +0 -18
  188. /package/dist/{adapter/aws-lambda/awslambda.d.js → helper/conninfo/index.js} +0 -0
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  <hr />
8
8
 
9
9
  <p align="center">
10
- <a href="https://hono.dev"><b>Documentation :point_right: hono.dev</b></a><br />
10
+ <a href="https://hono.dev"><b>Documentation 👉 hono.dev</b></a><br />
11
11
  <i>v4 has been released!</i> <a href="docs/MIGRATION.md">Migration guide</b>
12
12
  </p>
13
13
 
@@ -17,12 +17,11 @@
17
17
  [![GitHub](https://img.shields.io/github/license/honojs/hono)](https://github.com/honojs/hono/blob/main/LICENSE)
18
18
  [![npm](https://img.shields.io/npm/v/hono)](https://www.npmjs.com/package/hono)
19
19
  [![npm](https://img.shields.io/npm/dm/hono)](https://www.npmjs.com/package/hono)
20
+ [![JSR](https://jsr.io/badges/@hono/hono)](https://jsr.io/@hono/hono)
20
21
  [![Bundle Size](https://img.shields.io/bundlephobia/min/hono)](https://bundlephobia.com/result?p=hono)
21
22
  [![Bundle Size](https://img.shields.io/bundlephobia/minzip/hono)](https://bundlephobia.com/result?p=hono)
22
- [![npm type definitions](https://img.shields.io/npm/types/hono)](https://www.npmjs.com/package/hono)
23
23
  [![GitHub commit activity](https://img.shields.io/github/commit-activity/m/honojs/hono)](https://github.com/honojs/hono/pulse)
24
24
  [![GitHub last commit](https://img.shields.io/github/last-commit/honojs/hono)](https://github.com/honojs/hono/commits/main)
25
- [![Deno badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fdeno-visualizer.danopia.net%2Fshields%2Flatest-version%2Fx%2Fhono%2Fmod.ts)](https://doc.deno.land/https/deno.land/x/hono/mod.ts)
26
25
  [![Discord badge](https://img.shields.io/discord/1011308539819597844?label=Discord&logo=Discord)](https://discord.gg/KMh2eNSdxV)
27
26
 
28
27
  Hono - _**\[炎\] means flame🔥 in Japanese**_ - is a small, simple, and ultrafast web framework for the Edges.
@@ -1,6 +1,6 @@
1
1
  // src/adapter/aws-lambda/handler.ts
2
- import crypto from "crypto";
3
- import { encodeBase64 } from "../../utils/encode.js";
2
+ import crypto from "node:crypto";
3
+ import { decodeBase64, encodeBase64 } from "../../utils/encode.js";
4
4
  globalThis.crypto ??= crypto;
5
5
  var getRequestContext = (event) => {
6
6
  return event.requestContext;
@@ -71,7 +71,7 @@ var EventProcessor = class {
71
71
  method
72
72
  };
73
73
  if (event.body) {
74
- requestInit.body = event.isBase64Encoded ? Buffer.from(event.body, "base64") : event.body;
74
+ requestInit.body = event.isBase64Encoded ? decodeBase64(event.body) : event.body;
75
75
  }
76
76
  return new Request(url, requestInit);
77
77
  }
@@ -109,7 +109,7 @@ var EventProcessor = class {
109
109
  }
110
110
  }
111
111
  };
112
- var v2Processor = new class EventV2Processor extends EventProcessor {
112
+ var EventV2Processor = class extends EventProcessor {
113
113
  getPath(event) {
114
114
  return event.rawPath;
115
115
  }
@@ -139,8 +139,9 @@ var v2Processor = new class EventV2Processor extends EventProcessor {
139
139
  }
140
140
  return headers;
141
141
  }
142
- }();
143
- var v1Processor = new class EventV1Processor extends EventProcessor {
142
+ };
143
+ var v2Processor = new EventV2Processor();
144
+ var EventV1Processor = class extends EventProcessor {
144
145
  getPath(event) {
145
146
  return event.path;
146
147
  }
@@ -177,8 +178,9 @@ var v1Processor = new class EventV1Processor extends EventProcessor {
177
178
  "set-cookie": cookies
178
179
  };
179
180
  }
180
- }();
181
- var albProcessor = new class ALBProcessor extends EventProcessor {
181
+ };
182
+ var v1Processor = new EventV1Processor();
183
+ var ALBProcessor = class extends EventProcessor {
182
184
  getHeaders(event) {
183
185
  const headers = new Headers();
184
186
  if (event.multiValueHeaders) {
@@ -242,7 +244,8 @@ var albProcessor = new class ALBProcessor extends EventProcessor {
242
244
  result.headers["set-cookie"] = cookies.join(", ");
243
245
  }
244
246
  }
245
- }();
247
+ };
248
+ var albProcessor = new ALBProcessor();
246
249
  var getProcessor = (event) => {
247
250
  if (isProxyEventALB(event)) {
248
251
  return albProcessor;
@@ -0,0 +1,21 @@
1
+ // src/adapter/bun/conninfo.ts
2
+ var getConnInfo = (c) => {
3
+ const server = "server" in c.env ? c.env.server : c.env;
4
+ if (!server) {
5
+ throw new TypeError("env has to include the 2nd argument of fetch.");
6
+ }
7
+ if (typeof server.requestIP !== "function") {
8
+ throw new TypeError("server.requestIP is not a function.");
9
+ }
10
+ const info = server.requestIP(c.req.raw);
11
+ return {
12
+ remote: {
13
+ address: info.address,
14
+ addressType: info.family === "IPv6" || info.family === "IPv4" ? info.family : "unknown",
15
+ port: info.port
16
+ }
17
+ };
18
+ };
19
+ export {
20
+ getConnInfo
21
+ };
@@ -2,9 +2,11 @@
2
2
  import { serveStatic } from "./serve-static.js";
3
3
  import { bunFileSystemModule, toSSG } from "./ssg.js";
4
4
  import { createBunWebSocket } from "./websocket.js";
5
+ import { getConnInfo } from "./conninfo.js";
5
6
  export {
6
7
  bunFileSystemModule,
7
8
  createBunWebSocket,
9
+ getConnInfo,
8
10
  serveStatic,
9
11
  toSSG
10
12
  };
@@ -1,7 +1,5 @@
1
1
  // src/adapter/bun/websocket.ts
2
- import {
3
- createWSMessageEvent
4
- } from "../../helper/websocket/index.js";
2
+ import { createWSMessageEvent } from "../../helper/websocket/index.js";
5
3
  var createWSContext = (ws) => {
6
4
  return {
7
5
  send: (source, options) => {
@@ -0,0 +1,10 @@
1
+ // src/adapter/cloudflare-workers/conninfo.ts
2
+ var getConnInfo = (c) => ({
3
+ remote: {
4
+ address: c.req.header("cf-connecting-ip"),
5
+ addressType: "unknown"
6
+ }
7
+ });
8
+ export {
9
+ getConnInfo
10
+ };
@@ -1,12 +1,11 @@
1
1
  // src/adapter/cloudflare-workers/websocket.ts
2
2
  var upgradeWebSocket = (createEvents) => async (c, next) => {
3
- const CFWebSocketPair = globalThis.WebSocketPair;
4
3
  const events = await createEvents(c);
5
4
  const upgradeHeader = c.req.header("Upgrade");
6
5
  if (upgradeHeader !== "websocket") {
7
6
  return await next();
8
7
  }
9
- const webSocketPair = new CFWebSocketPair();
8
+ const webSocketPair = new WebSocketPair();
10
9
  const client = webSocketPair[0];
11
10
  const server = webSocketPair[1];
12
11
  const wsContext = {
@@ -23,10 +22,7 @@ var upgradeWebSocket = (createEvents) => async (c, next) => {
23
22
  send: (source) => server.send(source)
24
23
  };
25
24
  if (events.onOpen) {
26
- server.addEventListener(
27
- "open",
28
- (evt) => events.onOpen && events.onOpen(evt, wsContext)
29
- );
25
+ server.addEventListener("open", (evt) => events.onOpen && events.onOpen(evt, wsContext));
30
26
  }
31
27
  if (events.onClose) {
32
28
  server.addEventListener(
@@ -0,0 +1,15 @@
1
+ // src/adapter/deno/conninfo.ts
2
+ var getConnInfo = (c) => {
3
+ const { remoteAddr } = c.env;
4
+ return {
5
+ remote: {
6
+ address: remoteAddr.hostname,
7
+ port: remoteAddr.port,
8
+ transport: remoteAddr.transport,
9
+ addressType: "unknown"
10
+ }
11
+ };
12
+ };
13
+ export {
14
+ getConnInfo
15
+ };
@@ -2,8 +2,10 @@
2
2
  import { serveStatic } from "./serve-static.js";
3
3
  import { toSSG, denoFileSystemModule } from "./ssg.js";
4
4
  import { upgradeWebSocket } from "./websocket.js";
5
+ import { getConnInfo } from "./conninfo.js";
5
6
  export {
6
7
  denoFileSystemModule,
8
+ getConnInfo,
7
9
  serveStatic,
8
10
  toSSG,
9
11
  upgradeWebSocket
@@ -1,6 +1,6 @@
1
1
  // src/adapter/lambda-edge/handler.ts
2
- import crypto from "crypto";
3
- import { encodeBase64 } from "../../utils/encode.js";
2
+ import crypto from "node:crypto";
3
+ import { decodeBase64, encodeBase64 } from "../../utils/encode.js";
4
4
  globalThis.crypto ??= crypto;
5
5
  var convertHeaders = (headers) => {
6
6
  const cfHeaders = {};
@@ -59,7 +59,7 @@ var createBody = (method, requestBody) => {
59
59
  return void 0;
60
60
  }
61
61
  if (requestBody.encoding === "base64") {
62
- return Buffer.from(requestBody.data, "base64");
62
+ return decodeBase64(requestBody.data);
63
63
  }
64
64
  return requestBody.data;
65
65
  };
@@ -31,9 +31,9 @@ __export(handler_exports, {
31
31
  streamHandle: () => streamHandle
32
32
  });
33
33
  module.exports = __toCommonJS(handler_exports);
34
- var import_crypto = __toESM(require("crypto"), 1);
34
+ var import_node_crypto = __toESM(require("node:crypto"), 1);
35
35
  var import_encode = require("../../utils/encode");
36
- globalThis.crypto ??= import_crypto.default;
36
+ globalThis.crypto ??= import_node_crypto.default;
37
37
  const getRequestContext = (event) => {
38
38
  return event.requestContext;
39
39
  };
@@ -103,7 +103,7 @@ class EventProcessor {
103
103
  method
104
104
  };
105
105
  if (event.body) {
106
- requestInit.body = event.isBase64Encoded ? Buffer.from(event.body, "base64") : event.body;
106
+ requestInit.body = event.isBase64Encoded ? (0, import_encode.decodeBase64)(event.body) : event.body;
107
107
  }
108
108
  return new Request(url, requestInit);
109
109
  }
@@ -141,7 +141,7 @@ class EventProcessor {
141
141
  }
142
142
  }
143
143
  }
144
- const v2Processor = new class EventV2Processor extends EventProcessor {
144
+ class EventV2Processor extends EventProcessor {
145
145
  getPath(event) {
146
146
  return event.rawPath;
147
147
  }
@@ -171,8 +171,9 @@ const v2Processor = new class EventV2Processor extends EventProcessor {
171
171
  }
172
172
  return headers;
173
173
  }
174
- }();
175
- const v1Processor = new class EventV1Processor extends EventProcessor {
174
+ }
175
+ const v2Processor = new EventV2Processor();
176
+ class EventV1Processor extends EventProcessor {
176
177
  getPath(event) {
177
178
  return event.path;
178
179
  }
@@ -209,8 +210,9 @@ const v1Processor = new class EventV1Processor extends EventProcessor {
209
210
  "set-cookie": cookies
210
211
  };
211
212
  }
212
- }();
213
- const albProcessor = new class ALBProcessor extends EventProcessor {
213
+ }
214
+ const v1Processor = new EventV1Processor();
215
+ class ALBProcessor extends EventProcessor {
214
216
  getHeaders(event) {
215
217
  const headers = new Headers();
216
218
  if (event.multiValueHeaders) {
@@ -274,7 +276,8 @@ const albProcessor = new class ALBProcessor extends EventProcessor {
274
276
  result.headers["set-cookie"] = cookies.join(", ");
275
277
  }
276
278
  }
277
- }();
279
+ }
280
+ const albProcessor = new ALBProcessor();
278
281
  const getProcessor = (event) => {
279
282
  if (isProxyEventALB(event)) {
280
283
  return albProcessor;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var conninfo_exports = {};
20
+ __export(conninfo_exports, {
21
+ getConnInfo: () => getConnInfo
22
+ });
23
+ module.exports = __toCommonJS(conninfo_exports);
24
+ const getConnInfo = (c) => {
25
+ const server = "server" in c.env ? c.env.server : c.env;
26
+ if (!server) {
27
+ throw new TypeError("env has to include the 2nd argument of fetch.");
28
+ }
29
+ if (typeof server.requestIP !== "function") {
30
+ throw new TypeError("server.requestIP is not a function.");
31
+ }
32
+ const info = server.requestIP(c.req.raw);
33
+ return {
34
+ remote: {
35
+ address: info.address,
36
+ addressType: info.family === "IPv6" || info.family === "IPv4" ? info.family : "unknown",
37
+ port: info.port
38
+ }
39
+ };
40
+ };
41
+ // Annotate the CommonJS export names for ESM import in node:
42
+ 0 && (module.exports = {
43
+ getConnInfo
44
+ });
@@ -20,6 +20,7 @@ var bun_exports = {};
20
20
  __export(bun_exports, {
21
21
  bunFileSystemModule: () => import_ssg.bunFileSystemModule,
22
22
  createBunWebSocket: () => import_websocket.createBunWebSocket,
23
+ getConnInfo: () => import_conninfo.getConnInfo,
23
24
  serveStatic: () => import_serve_static.serveStatic,
24
25
  toSSG: () => import_ssg.toSSG
25
26
  });
@@ -27,10 +28,12 @@ module.exports = __toCommonJS(bun_exports);
27
28
  var import_serve_static = require("./serve-static");
28
29
  var import_ssg = require("./ssg");
29
30
  var import_websocket = require("./websocket");
31
+ var import_conninfo = require("./conninfo");
30
32
  // Annotate the CommonJS export names for ESM import in node:
31
33
  0 && (module.exports = {
32
34
  bunFileSystemModule,
33
35
  createBunWebSocket,
36
+ getConnInfo,
34
37
  serveStatic,
35
38
  toSSG
36
39
  });
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var conninfo_exports = {};
20
+ __export(conninfo_exports, {
21
+ getConnInfo: () => getConnInfo
22
+ });
23
+ module.exports = __toCommonJS(conninfo_exports);
24
+ const getConnInfo = (c) => ({
25
+ remote: {
26
+ address: c.req.header("cf-connecting-ip"),
27
+ addressType: "unknown"
28
+ }
29
+ });
30
+ // Annotate the CommonJS export names for ESM import in node:
31
+ 0 && (module.exports = {
32
+ getConnInfo
33
+ });
@@ -22,13 +22,12 @@ __export(websocket_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(websocket_exports);
24
24
  const upgradeWebSocket = (createEvents) => async (c, next) => {
25
- const CFWebSocketPair = globalThis.WebSocketPair;
26
25
  const events = await createEvents(c);
27
26
  const upgradeHeader = c.req.header("Upgrade");
28
27
  if (upgradeHeader !== "websocket") {
29
28
  return await next();
30
29
  }
31
- const webSocketPair = new CFWebSocketPair();
30
+ const webSocketPair = new WebSocketPair();
32
31
  const client = webSocketPair[0];
33
32
  const server = webSocketPair[1];
34
33
  const wsContext = {
@@ -45,10 +44,7 @@ const upgradeWebSocket = (createEvents) => async (c, next) => {
45
44
  send: (source) => server.send(source)
46
45
  };
47
46
  if (events.onOpen) {
48
- server.addEventListener(
49
- "open",
50
- (evt) => events.onOpen && events.onOpen(evt, wsContext)
51
- );
47
+ server.addEventListener("open", (evt) => events.onOpen && events.onOpen(evt, wsContext));
52
48
  }
53
49
  if (events.onClose) {
54
50
  server.addEventListener(
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var conninfo_exports = {};
20
+ __export(conninfo_exports, {
21
+ getConnInfo: () => getConnInfo
22
+ });
23
+ module.exports = __toCommonJS(conninfo_exports);
24
+ const getConnInfo = (c) => {
25
+ const { remoteAddr } = c.env;
26
+ return {
27
+ remote: {
28
+ address: remoteAddr.hostname,
29
+ port: remoteAddr.port,
30
+ transport: remoteAddr.transport,
31
+ addressType: "unknown"
32
+ }
33
+ };
34
+ };
35
+ // Annotate the CommonJS export names for ESM import in node:
36
+ 0 && (module.exports = {
37
+ getConnInfo
38
+ });
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var deno_exports = {};
20
20
  __export(deno_exports, {
21
21
  denoFileSystemModule: () => import_ssg.denoFileSystemModule,
22
+ getConnInfo: () => import_conninfo.getConnInfo,
22
23
  serveStatic: () => import_serve_static.serveStatic,
23
24
  toSSG: () => import_ssg.toSSG,
24
25
  upgradeWebSocket: () => import_websocket.upgradeWebSocket
@@ -27,9 +28,11 @@ module.exports = __toCommonJS(deno_exports);
27
28
  var import_serve_static = require("./serve-static");
28
29
  var import_ssg = require("./ssg");
29
30
  var import_websocket = require("./websocket");
31
+ var import_conninfo = require("./conninfo");
30
32
  // Annotate the CommonJS export names for ESM import in node:
31
33
  0 && (module.exports = {
32
34
  denoFileSystemModule,
35
+ getConnInfo,
33
36
  serveStatic,
34
37
  toSSG,
35
38
  upgradeWebSocket
@@ -29,9 +29,9 @@ __export(handler_exports, {
29
29
  isContentTypeBinary: () => isContentTypeBinary
30
30
  });
31
31
  module.exports = __toCommonJS(handler_exports);
32
- var import_crypto = __toESM(require("crypto"), 1);
32
+ var import_node_crypto = __toESM(require("node:crypto"), 1);
33
33
  var import_encode = require("../../utils/encode");
34
- globalThis.crypto ??= import_crypto.default;
34
+ globalThis.crypto ??= import_node_crypto.default;
35
35
  const convertHeaders = (headers) => {
36
36
  const cfHeaders = {};
37
37
  headers.forEach((value, key) => {
@@ -89,7 +89,7 @@ const createBody = (method, requestBody) => {
89
89
  return void 0;
90
90
  }
91
91
  if (requestBody.encoding === "base64") {
92
- return Buffer.from(requestBody.data, "base64");
92
+ return (0, import_encode.decodeBase64)(requestBody.data);
93
93
  }
94
94
  return requestBody.data;
95
95
  };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var conninfo_exports = {};
16
+ module.exports = __toCommonJS(conninfo_exports);
@@ -18,6 +18,9 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var ssg_exports = {};
20
20
  __export(ssg_exports, {
21
+ combineAfterGenerateHooks: () => combineAfterGenerateHooks,
22
+ combineAfterResponseHooks: () => combineAfterResponseHooks,
23
+ combineBeforeRequestHooks: () => combineBeforeRequestHooks,
21
24
  defaultExtensionMap: () => defaultExtensionMap,
22
25
  fetchRoutesContent: () => fetchRoutesContent,
23
26
  saveContentToFile: () => saveContentToFile,
@@ -71,6 +74,52 @@ const determineExtension = (mimeType, userExtensionMap) => {
71
74
  }
72
75
  return (0, import_mime.getExtension)(mimeType) || "html";
73
76
  };
77
+ const combineBeforeRequestHooks = (hooks) => {
78
+ if (!Array.isArray(hooks)) {
79
+ return hooks;
80
+ }
81
+ return async (req) => {
82
+ let currentReq = req;
83
+ for (const hook of hooks) {
84
+ const result = await hook(currentReq);
85
+ if (result === false) {
86
+ return false;
87
+ }
88
+ if (result instanceof Request) {
89
+ currentReq = result;
90
+ }
91
+ }
92
+ return currentReq;
93
+ };
94
+ };
95
+ const combineAfterResponseHooks = (hooks) => {
96
+ if (!Array.isArray(hooks)) {
97
+ return hooks;
98
+ }
99
+ return async (res) => {
100
+ let currentRes = res;
101
+ for (const hook of hooks) {
102
+ const result = await hook(currentRes);
103
+ if (result === false) {
104
+ return false;
105
+ }
106
+ if (result instanceof Response) {
107
+ currentRes = result;
108
+ }
109
+ }
110
+ return currentRes;
111
+ };
112
+ };
113
+ const combineAfterGenerateHooks = (hooks) => {
114
+ if (!Array.isArray(hooks)) {
115
+ return hooks;
116
+ }
117
+ return async (result) => {
118
+ for (const hook of hooks) {
119
+ await hook(result);
120
+ }
121
+ };
122
+ };
74
123
  const fetchRoutesContent = function* (app, beforeRequestHook, afterResponseHook, concurrency) {
75
124
  const baseURL = "http://localhost";
76
125
  const pool = (0, import_concurrent.createPool)({ concurrency });
@@ -172,10 +221,16 @@ const toSSG = async (app, fs, options) => {
172
221
  try {
173
222
  const outputDir = options?.dir ?? "./static";
174
223
  const concurrency = options?.concurrency ?? DEFAULT_CONCURRENCY;
224
+ const combinedBeforeRequestHook = combineBeforeRequestHooks(
225
+ options?.beforeRequestHook || ((req) => req)
226
+ );
227
+ const combinedAfterResponseHook = combineAfterResponseHooks(
228
+ options?.afterResponseHook || ((req) => req)
229
+ );
175
230
  const getInfoGen = fetchRoutesContent(
176
231
  app,
177
- options?.beforeRequestHook,
178
- options?.afterResponseHook,
232
+ combinedBeforeRequestHook,
233
+ combinedAfterResponseHook,
179
234
  concurrency
180
235
  );
181
236
  for (const getInfo of getInfoGen) {
@@ -205,11 +260,17 @@ const toSSG = async (app, fs, options) => {
205
260
  const errorObj = error instanceof Error ? error : new Error(String(error));
206
261
  result = { success: false, files: [], error: errorObj };
207
262
  }
208
- await options?.afterGenerateHook?.(result);
263
+ if (options?.afterGenerateHook) {
264
+ const conbinedAfterGenerateHooks = combineAfterGenerateHooks(options?.afterGenerateHook);
265
+ await conbinedAfterGenerateHooks(result);
266
+ }
209
267
  return result;
210
268
  };
211
269
  // Annotate the CommonJS export names for ESM import in node:
212
270
  0 && (module.exports = {
271
+ combineAfterGenerateHooks,
272
+ combineAfterResponseHooks,
273
+ combineBeforeRequestHooks,
213
274
  defaultExtensionMap,
214
275
  fetchRoutesContent,
215
276
  saveContentToFile,
@@ -22,7 +22,7 @@ __export(text_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(text_exports);
24
24
  var import_context = require("../../context");
25
- var import__ = require(".");
25
+ var import__ = require("./");
26
26
  const streamText = (c, cb, onError) => {
27
27
  c.header("Content-Type", import_context.TEXT_PLAIN);
28
28
  c.header("X-Content-Type-Options", "nosniff");
@@ -29,10 +29,6 @@ var import_request = require("./request");
29
29
  var import_router = require("./router");
30
30
  var import_url = require("./utils/url");
31
31
  const COMPOSED_HANDLER = Symbol("composedHandler");
32
- function defineDynamicClass() {
33
- return class {
34
- };
35
- }
36
32
  const notFoundHandler = (c) => {
37
33
  return c.text("404 Not Found", 404);
38
34
  };
@@ -43,14 +39,22 @@ const errorHandler = (err, c) => {
43
39
  console.error(err);
44
40
  return c.text("Internal Server Error", 500);
45
41
  };
46
- class Hono extends defineDynamicClass() {
42
+ class Hono {
43
+ get;
44
+ post;
45
+ put;
46
+ delete;
47
+ options;
48
+ patch;
49
+ all;
50
+ on;
51
+ use;
47
52
  router;
48
53
  getPath;
49
54
  _basePath = "/";
50
55
  #path = "/";
51
56
  routes = [];
52
57
  constructor(options = {}) {
53
- super();
54
58
  const allMethods = [...import_router.METHODS, import_router.METHOD_NAME_ALL_LOWERCASE];
55
59
  allMethods.forEach((method) => {
56
60
  this[method] = (args1, ...args) => {