hono 4.5.0-rc.1 → 4.5.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 (156) hide show
  1. package/README.md +2 -3
  2. package/dist/adapter/aws-lambda/handler.js +12 -2
  3. package/dist/adapter/bun/conninfo.js +1 -1
  4. package/dist/adapter/cloudflare-pages/handler.js +41 -0
  5. package/dist/adapter/cloudflare-pages/index.js +2 -1
  6. package/dist/adapter/cloudflare-workers/conninfo.js +1 -2
  7. package/dist/adapter/deno/conninfo.js +1 -2
  8. package/dist/adapter/deno/websocket.js +2 -2
  9. package/dist/adapter/lambda-edge/conninfo.js +9 -0
  10. package/dist/adapter/lambda-edge/index.js +2 -0
  11. package/dist/adapter/service-worker/handler.js +19 -0
  12. package/dist/adapter/service-worker/index.js +5 -0
  13. package/dist/adapter/service-worker/types.js +0 -0
  14. package/dist/adapter/vercel/conninfo.js +9 -0
  15. package/dist/adapter/vercel/index.js +2 -0
  16. package/dist/cjs/adapter/aws-lambda/handler.js +12 -2
  17. package/dist/cjs/adapter/bun/conninfo.js +1 -1
  18. package/dist/cjs/adapter/cloudflare-pages/handler.js +42 -0
  19. package/dist/cjs/adapter/cloudflare-pages/index.js +2 -0
  20. package/dist/cjs/adapter/cloudflare-workers/conninfo.js +1 -2
  21. package/dist/cjs/adapter/deno/conninfo.js +1 -2
  22. package/dist/cjs/adapter/deno/websocket.js +2 -2
  23. package/dist/cjs/adapter/lambda-edge/conninfo.js +32 -0
  24. package/dist/cjs/adapter/lambda-edge/index.js +3 -0
  25. package/dist/cjs/adapter/service-worker/handler.js +42 -0
  26. package/dist/cjs/adapter/service-worker/index.js +28 -0
  27. package/dist/cjs/adapter/service-worker/types.js +16 -0
  28. package/dist/cjs/adapter/vercel/conninfo.js +32 -0
  29. package/dist/cjs/adapter/vercel/index.js +3 -0
  30. package/dist/cjs/client/client.js +6 -2
  31. package/dist/cjs/context.js +36 -21
  32. package/dist/cjs/helper/accepts/accepts.js +11 -5
  33. package/dist/cjs/helper/html/index.js +1 -1
  34. package/dist/cjs/helper/streaming/sse.js +7 -0
  35. package/dist/cjs/helper/streaming/stream.js +7 -0
  36. package/dist/cjs/hono-base.js +3 -2
  37. package/dist/cjs/jsx/base.js +30 -2
  38. package/dist/cjs/jsx/constants.js +5 -2
  39. package/dist/cjs/jsx/context.js +15 -18
  40. package/dist/cjs/jsx/dom/context.js +6 -8
  41. package/dist/cjs/jsx/dom/hooks/index.js +75 -0
  42. package/dist/cjs/jsx/dom/index.js +10 -0
  43. package/dist/cjs/jsx/dom/intrinsic-element/components.js +351 -0
  44. package/dist/cjs/jsx/dom/jsx-dev-runtime.js +8 -1
  45. package/dist/cjs/jsx/dom/render.js +96 -42
  46. package/dist/cjs/jsx/hooks/index.js +56 -56
  47. package/dist/cjs/jsx/index.js +7 -0
  48. package/dist/cjs/jsx/intrinsic-element/common.js +40 -0
  49. package/dist/cjs/jsx/intrinsic-element/components.js +164 -0
  50. package/dist/cjs/jsx/utils.js +7 -1
  51. package/dist/cjs/middleware/combine/index.js +88 -0
  52. package/dist/cjs/middleware/ip-restriction/index.js +124 -0
  53. package/dist/cjs/middleware/jwt/jwt.js +20 -1
  54. package/dist/cjs/middleware/request-id/index.js +28 -0
  55. package/dist/cjs/middleware/request-id/request-id.js +44 -0
  56. package/dist/cjs/middleware/timing/timing.js +3 -0
  57. package/dist/cjs/utils/buffer.js +1 -2
  58. package/dist/cjs/utils/html.js +14 -2
  59. package/dist/cjs/utils/ipaddr.js +109 -0
  60. package/dist/cjs/utils/stream.js +10 -1
  61. package/dist/cjs/validator/validator.js +25 -24
  62. package/dist/client/client.js +6 -2
  63. package/dist/context.js +36 -21
  64. package/dist/helper/accepts/accepts.js +11 -5
  65. package/dist/helper/html/index.js +2 -2
  66. package/dist/helper/streaming/sse.js +7 -0
  67. package/dist/helper/streaming/stream.js +7 -0
  68. package/dist/hono-base.js +3 -2
  69. package/dist/jsx/base.js +25 -3
  70. package/dist/jsx/constants.js +3 -1
  71. package/dist/jsx/context.js +15 -18
  72. package/dist/jsx/dom/context.js +7 -9
  73. package/dist/jsx/dom/hooks/index.js +48 -0
  74. package/dist/jsx/dom/index.js +7 -0
  75. package/dist/jsx/dom/intrinsic-element/components.js +319 -0
  76. package/dist/jsx/dom/jsx-dev-runtime.js +2 -1
  77. package/dist/jsx/dom/render.js +95 -42
  78. package/dist/jsx/hooks/index.js +57 -57
  79. package/dist/jsx/index.js +5 -0
  80. package/dist/jsx/intrinsic-element/common.js +15 -0
  81. package/dist/jsx/intrinsic-element/components.js +134 -0
  82. package/dist/jsx/utils.js +7 -1
  83. package/dist/middleware/combine/index.js +63 -0
  84. package/dist/middleware/ip-restriction/index.js +106 -0
  85. package/dist/middleware/jwt/jwt.js +21 -2
  86. package/dist/middleware/request-id/index.js +5 -0
  87. package/dist/middleware/request-id/request-id.js +21 -0
  88. package/dist/middleware/timing/timing.js +3 -0
  89. package/dist/types/adapter/cloudflare-pages/handler.d.ts +4 -5
  90. package/dist/types/adapter/cloudflare-pages/index.d.ts +1 -1
  91. package/dist/types/adapter/deno/websocket.d.ts +20 -1
  92. package/dist/types/adapter/lambda-edge/conninfo.d.ts +2 -0
  93. package/dist/types/adapter/lambda-edge/index.d.ts +1 -0
  94. package/dist/types/adapter/service-worker/handler.d.ts +14 -0
  95. package/dist/types/adapter/service-worker/index.d.ts +5 -0
  96. package/dist/types/adapter/service-worker/types.d.ts +12 -0
  97. package/dist/types/adapter/vercel/conninfo.d.ts +2 -0
  98. package/dist/types/adapter/vercel/index.d.ts +1 -0
  99. package/dist/types/client/types.d.ts +1 -1
  100. package/dist/types/context.d.ts +42 -40
  101. package/dist/types/helper/conninfo/types.d.ts +3 -3
  102. package/dist/types/helper/factory/index.d.ts +1 -1
  103. package/dist/types/helper/websocket/index.d.ts +1 -1
  104. package/dist/types/hono-base.d.ts +13 -13
  105. package/dist/types/http-exception.d.ts +1 -1
  106. package/dist/types/jsx/base.d.ts +4 -4
  107. package/dist/types/jsx/constants.d.ts +1 -0
  108. package/dist/types/jsx/context.d.ts +3 -1
  109. package/dist/types/jsx/dom/hooks/index.d.ts +39 -0
  110. package/dist/types/jsx/dom/index.d.ts +21 -7
  111. package/dist/types/jsx/dom/intrinsic-element/components.d.ts +16 -0
  112. package/dist/types/jsx/dom/render.d.ts +21 -7
  113. package/dist/types/jsx/dom/server.d.ts +19 -6
  114. package/dist/types/jsx/hooks/index.d.ts +3 -2
  115. package/dist/types/jsx/index.d.ts +6 -3
  116. package/dist/types/jsx/intrinsic-element/common.d.ts +3 -0
  117. package/dist/types/jsx/intrinsic-element/components.d.ts +13 -0
  118. package/dist/types/jsx/intrinsic-elements.d.ts +38 -4
  119. package/dist/types/middleware/basic-auth/index.d.ts +1 -1
  120. package/dist/types/middleware/bearer-auth/index.d.ts +1 -1
  121. package/dist/types/middleware/body-limit/index.d.ts +1 -1
  122. package/dist/types/middleware/cache/index.d.ts +1 -1
  123. package/dist/types/middleware/combine/index.d.ts +85 -0
  124. package/dist/types/middleware/compress/index.d.ts +1 -1
  125. package/dist/types/middleware/cors/index.d.ts +1 -1
  126. package/dist/types/middleware/csrf/index.d.ts +1 -1
  127. package/dist/types/middleware/etag/index.d.ts +1 -1
  128. package/dist/types/middleware/ip-restriction/index.d.ts +31 -0
  129. package/dist/types/middleware/jsx-renderer/index.d.ts +1 -1
  130. package/dist/types/middleware/jwt/jwt.d.ts +7 -2
  131. package/dist/types/middleware/logger/index.d.ts +1 -1
  132. package/dist/types/middleware/method-override/index.d.ts +1 -1
  133. package/dist/types/middleware/pretty-json/index.d.ts +1 -1
  134. package/dist/types/middleware/request-id/index.d.ts +7 -0
  135. package/dist/types/middleware/request-id/request-id.d.ts +37 -0
  136. package/dist/types/middleware/secure-headers/secure-headers.d.ts +1 -1
  137. package/dist/types/middleware/timing/timing.d.ts +1 -1
  138. package/dist/types/middleware/trailing-slash/index.d.ts +2 -2
  139. package/dist/types/request.d.ts +17 -17
  140. package/dist/types/types.d.ts +94 -33
  141. package/dist/types/utils/html.d.ts +5 -1
  142. package/dist/types/utils/http-status.d.ts +2 -2
  143. package/dist/types/utils/ipaddr.d.ts +34 -0
  144. package/dist/types/utils/jwt/jwa.d.ts +5 -0
  145. package/dist/types/utils/jwt/jws.d.ts +5 -0
  146. package/dist/types/utils/jwt/jwt.d.ts +5 -0
  147. package/dist/types/utils/jwt/types.d.ts +4 -0
  148. package/dist/types/utils/jwt/utf8.d.ts +4 -0
  149. package/dist/types/utils/stream.d.ts +13 -0
  150. package/dist/types/utils/types.d.ts +15 -3
  151. package/dist/utils/buffer.js +1 -2
  152. package/dist/utils/html.js +13 -2
  153. package/dist/utils/ipaddr.js +82 -0
  154. package/dist/utils/stream.js +10 -1
  155. package/dist/validator/validator.js +25 -24
  156. package/package.json +37 -6
package/README.md CHANGED
@@ -25,8 +25,7 @@
25
25
  [![codecov](https://codecov.io/github/honojs/hono/graph/badge.svg)](https://codecov.io/github/honojs/hono)
26
26
  [![Discord badge](https://img.shields.io/discord/1011308539819597844?label=Discord&logo=Discord)](https://discord.gg/KMh2eNSdxV)
27
27
 
28
- Hono - _**\[炎\] means flame🔥 in Japanese**_ - is a small, simple, and ultrafast web framework for the Edges.
29
- It works on any JavaScript runtime: Cloudflare Workers, Fastly Compute, Deno, Bun, Vercel, AWS Lambda, Lambda@Edge, and Node.js.
28
+ Hono - _**means flame🔥 in Japanese**_ - is a small, simple, and ultrafast web framework built on Web Standards. It works on any JavaScript runtime: Cloudflare Workers, Fastly Compute, Deno, Bun, Vercel, AWS Lambda, Lambda@Edge, and Node.js.
30
29
 
31
30
  Fast, but not only fast.
32
31
 
@@ -41,7 +40,7 @@ export default app
41
40
 
42
41
  ## Quick Start
43
42
 
44
- ```
43
+ ```bash
45
44
  npm create hono@latest
46
45
  ```
47
46
 
@@ -25,9 +25,19 @@ var streamHandle = (app) => {
25
25
  requestContext,
26
26
  context
27
27
  });
28
+ const headers = {};
29
+ const cookies = [];
30
+ res.headers.forEach((value, name) => {
31
+ if (name === "set-cookie") {
32
+ cookies.push(value);
33
+ } else {
34
+ headers[name] = value;
35
+ }
36
+ });
28
37
  const httpResponseMetadata = {
29
38
  statusCode: res.status,
30
- headers: Object.fromEntries(res.headers.entries())
39
+ headers,
40
+ cookies
31
41
  };
32
42
  responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);
33
43
  if (res.body) {
@@ -101,7 +111,7 @@ var EventProcessor = class {
101
111
  }
102
112
  setCookies(event, res, result) {
103
113
  if (res.headers.has("set-cookie")) {
104
- const cookies = res.headers.get("set-cookie")?.split(", ");
114
+ const cookies = res.headers.getSetCookie ? res.headers.getSetCookie() : Array.from(res.headers.entries()).filter(([k]) => k === "set-cookie").map(([, v]) => v);
105
115
  if (Array.isArray(cookies)) {
106
116
  this.setCookiesToResult(event, result, cookies);
107
117
  res.headers.delete("set-cookie");
@@ -12,7 +12,7 @@ var getConnInfo = (c) => {
12
12
  return {
13
13
  remote: {
14
14
  address: info.address,
15
- addressType: info.family === "IPv6" || info.family === "IPv4" ? info.family : "unknown",
15
+ addressType: info.family === "IPv6" || info.family === "IPv4" ? info.family : void 0,
16
16
  port: info.port
17
17
  }
18
18
  };
@@ -1,4 +1,6 @@
1
1
  // src/adapter/cloudflare-pages/handler.ts
2
+ import { Context } from "../../context.js";
3
+ import { HTTPException } from "../../http-exception.js";
2
4
  var handle = (app) => (eventContext) => {
3
5
  return app.fetch(
4
6
  eventContext.request,
@@ -9,6 +11,44 @@ var handle = (app) => (eventContext) => {
9
11
  }
10
12
  );
11
13
  };
14
+ function handleMiddleware(middleware) {
15
+ return async (executionCtx) => {
16
+ const context = new Context(executionCtx.request, {
17
+ env: executionCtx.env,
18
+ executionCtx
19
+ });
20
+ let response = void 0;
21
+ try {
22
+ response = await middleware(context, async () => {
23
+ try {
24
+ context.res = await executionCtx.next();
25
+ } catch (error) {
26
+ if (error instanceof Error) {
27
+ context.error = error;
28
+ } else {
29
+ throw error;
30
+ }
31
+ }
32
+ });
33
+ } catch (error) {
34
+ if (error instanceof Error) {
35
+ context.error = error;
36
+ } else {
37
+ throw error;
38
+ }
39
+ }
40
+ if (response) {
41
+ return response;
42
+ }
43
+ if (context.error instanceof HTTPException) {
44
+ return context.error.getResponse();
45
+ }
46
+ if (context.error) {
47
+ throw context.error;
48
+ }
49
+ return context.res;
50
+ };
51
+ }
12
52
  var serveStatic = () => {
13
53
  return async (c) => {
14
54
  const env = c.env;
@@ -21,5 +61,6 @@ var serveStatic = () => {
21
61
  };
22
62
  export {
23
63
  handle,
64
+ handleMiddleware,
24
65
  serveStatic
25
66
  };
@@ -1,6 +1,7 @@
1
1
  // src/adapter/cloudflare-pages/index.ts
2
- import { handle, serveStatic } from "./handler.js";
2
+ import { handle, handleMiddleware, serveStatic } from "./handler.js";
3
3
  export {
4
4
  handle,
5
+ handleMiddleware,
5
6
  serveStatic
6
7
  };
@@ -1,8 +1,7 @@
1
1
  // src/adapter/cloudflare-workers/conninfo.ts
2
2
  var getConnInfo = (c) => ({
3
3
  remote: {
4
- address: c.req.header("cf-connecting-ip"),
5
- addressType: "unknown"
4
+ address: c.req.header("cf-connecting-ip")
6
5
  }
7
6
  });
8
7
  export {
@@ -5,8 +5,7 @@ var getConnInfo = (c) => {
5
5
  remote: {
6
6
  address: remoteAddr.hostname,
7
7
  port: remoteAddr.port,
8
- transport: remoteAddr.transport,
9
- addressType: "unknown"
8
+ transport: remoteAddr.transport
10
9
  }
11
10
  };
12
11
  };
@@ -1,10 +1,10 @@
1
1
  // src/adapter/deno/websocket.ts
2
- var upgradeWebSocket = (createEvents) => async (c, next) => {
2
+ var upgradeWebSocket = (createEvents, options) => async (c, next) => {
3
3
  if (c.req.header("upgrade") !== "websocket") {
4
4
  return await next();
5
5
  }
6
6
  const events = await createEvents(c);
7
- const { response, socket } = Deno.upgradeWebSocket(c.req.raw);
7
+ const { response, socket } = Deno.upgradeWebSocket(c.req.raw, options || {});
8
8
  const wsContext = {
9
9
  binaryType: "arraybuffer",
10
10
  close: (code, reason) => socket.close(code, reason),
@@ -0,0 +1,9 @@
1
+ // src/adapter/lambda-edge/conninfo.ts
2
+ var getConnInfo = (c) => ({
3
+ remote: {
4
+ address: c.env.event.Records[0].cf.request.clientIp
5
+ }
6
+ });
7
+ export {
8
+ getConnInfo
9
+ };
@@ -1,5 +1,7 @@
1
1
  // src/adapter/lambda-edge/index.ts
2
2
  import { handle } from "./handler.js";
3
+ import { getConnInfo } from "./conninfo.js";
3
4
  export {
5
+ getConnInfo,
4
6
  handle
5
7
  };
@@ -0,0 +1,19 @@
1
+ // src/adapter/service-worker/handler.ts
2
+ var handle = (app, opts = {
3
+ fetch
4
+ }) => {
5
+ return (evt) => {
6
+ evt.respondWith(
7
+ (async () => {
8
+ const res = await app.fetch(evt.request);
9
+ if (opts.fetch && res.status === 404) {
10
+ return await opts.fetch(evt.request);
11
+ }
12
+ return res;
13
+ })()
14
+ );
15
+ };
16
+ };
17
+ export {
18
+ handle
19
+ };
@@ -0,0 +1,5 @@
1
+ // src/adapter/service-worker/index.ts
2
+ import { handle } from "./handler.js";
3
+ export {
4
+ handle
5
+ };
File without changes
@@ -0,0 +1,9 @@
1
+ // src/adapter/vercel/conninfo.ts
2
+ var getConnInfo = (c) => ({
3
+ remote: {
4
+ address: c.req.header("x-real-ip")
5
+ }
6
+ });
7
+ export {
8
+ getConnInfo
9
+ };
@@ -1,5 +1,7 @@
1
1
  // src/adapter/vercel/index.ts
2
2
  import { handle } from "./handler.js";
3
+ import { getConnInfo } from "./conninfo.js";
3
4
  export {
5
+ getConnInfo,
4
6
  handle
5
7
  };
@@ -57,9 +57,19 @@ const streamHandle = (app) => {
57
57
  requestContext,
58
58
  context
59
59
  });
60
+ const headers = {};
61
+ const cookies = [];
62
+ res.headers.forEach((value, name) => {
63
+ if (name === "set-cookie") {
64
+ cookies.push(value);
65
+ } else {
66
+ headers[name] = value;
67
+ }
68
+ });
60
69
  const httpResponseMetadata = {
61
70
  statusCode: res.status,
62
- headers: Object.fromEntries(res.headers.entries())
71
+ headers,
72
+ cookies
63
73
  };
64
74
  responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);
65
75
  if (res.body) {
@@ -133,7 +143,7 @@ class EventProcessor {
133
143
  }
134
144
  setCookies(event, res, result) {
135
145
  if (res.headers.has("set-cookie")) {
136
- const cookies = res.headers.get("set-cookie")?.split(", ");
146
+ const cookies = res.headers.getSetCookie ? res.headers.getSetCookie() : Array.from(res.headers.entries()).filter(([k]) => k === "set-cookie").map(([, v]) => v);
137
147
  if (Array.isArray(cookies)) {
138
148
  this.setCookiesToResult(event, result, cookies);
139
149
  res.headers.delete("set-cookie");
@@ -34,7 +34,7 @@ const getConnInfo = (c) => {
34
34
  return {
35
35
  remote: {
36
36
  address: info.address,
37
- addressType: info.family === "IPv6" || info.family === "IPv4" ? info.family : "unknown",
37
+ addressType: info.family === "IPv6" || info.family === "IPv4" ? info.family : void 0,
38
38
  port: info.port
39
39
  }
40
40
  };
@@ -19,9 +19,12 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var handler_exports = {};
20
20
  __export(handler_exports, {
21
21
  handle: () => handle,
22
+ handleMiddleware: () => handleMiddleware,
22
23
  serveStatic: () => serveStatic
23
24
  });
24
25
  module.exports = __toCommonJS(handler_exports);
26
+ var import_context = require("../../context");
27
+ var import_http_exception = require("../../http-exception");
25
28
  const handle = (app) => (eventContext) => {
26
29
  return app.fetch(
27
30
  eventContext.request,
@@ -32,6 +35,44 @@ const handle = (app) => (eventContext) => {
32
35
  }
33
36
  );
34
37
  };
38
+ function handleMiddleware(middleware) {
39
+ return async (executionCtx) => {
40
+ const context = new import_context.Context(executionCtx.request, {
41
+ env: executionCtx.env,
42
+ executionCtx
43
+ });
44
+ let response = void 0;
45
+ try {
46
+ response = await middleware(context, async () => {
47
+ try {
48
+ context.res = await executionCtx.next();
49
+ } catch (error) {
50
+ if (error instanceof Error) {
51
+ context.error = error;
52
+ } else {
53
+ throw error;
54
+ }
55
+ }
56
+ });
57
+ } catch (error) {
58
+ if (error instanceof Error) {
59
+ context.error = error;
60
+ } else {
61
+ throw error;
62
+ }
63
+ }
64
+ if (response) {
65
+ return response;
66
+ }
67
+ if (context.error instanceof import_http_exception.HTTPException) {
68
+ return context.error.getResponse();
69
+ }
70
+ if (context.error) {
71
+ throw context.error;
72
+ }
73
+ return context.res;
74
+ };
75
+ }
35
76
  const serveStatic = () => {
36
77
  return async (c) => {
37
78
  const env = c.env;
@@ -45,5 +86,6 @@ const serveStatic = () => {
45
86
  // Annotate the CommonJS export names for ESM import in node:
46
87
  0 && (module.exports = {
47
88
  handle,
89
+ handleMiddleware,
48
90
  serveStatic
49
91
  });
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var cloudflare_pages_exports = {};
20
20
  __export(cloudflare_pages_exports, {
21
21
  handle: () => import_handler.handle,
22
+ handleMiddleware: () => import_handler.handleMiddleware,
22
23
  serveStatic: () => import_handler.serveStatic
23
24
  });
24
25
  module.exports = __toCommonJS(cloudflare_pages_exports);
@@ -26,5 +27,6 @@ var import_handler = require("./handler");
26
27
  // Annotate the CommonJS export names for ESM import in node:
27
28
  0 && (module.exports = {
28
29
  handle,
30
+ handleMiddleware,
29
31
  serveStatic
30
32
  });
@@ -23,8 +23,7 @@ __export(conninfo_exports, {
23
23
  module.exports = __toCommonJS(conninfo_exports);
24
24
  const getConnInfo = (c) => ({
25
25
  remote: {
26
- address: c.req.header("cf-connecting-ip"),
27
- addressType: "unknown"
26
+ address: c.req.header("cf-connecting-ip")
28
27
  }
29
28
  });
30
29
  // Annotate the CommonJS export names for ESM import in node:
@@ -27,8 +27,7 @@ const getConnInfo = (c) => {
27
27
  remote: {
28
28
  address: remoteAddr.hostname,
29
29
  port: remoteAddr.port,
30
- transport: remoteAddr.transport,
31
- addressType: "unknown"
30
+ transport: remoteAddr.transport
32
31
  }
33
32
  };
34
33
  };
@@ -21,12 +21,12 @@ __export(websocket_exports, {
21
21
  upgradeWebSocket: () => upgradeWebSocket
22
22
  });
23
23
  module.exports = __toCommonJS(websocket_exports);
24
- const upgradeWebSocket = (createEvents) => async (c, next) => {
24
+ const upgradeWebSocket = (createEvents, options) => async (c, next) => {
25
25
  if (c.req.header("upgrade") !== "websocket") {
26
26
  return await next();
27
27
  }
28
28
  const events = await createEvents(c);
29
- const { response, socket } = Deno.upgradeWebSocket(c.req.raw);
29
+ const { response, socket } = Deno.upgradeWebSocket(c.req.raw, options || {});
30
30
  const wsContext = {
31
31
  binaryType: "arraybuffer",
32
32
  close: (code, reason) => socket.close(code, reason),
@@ -0,0 +1,32 @@
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.env.event.Records[0].cf.request.clientIp
27
+ }
28
+ });
29
+ // Annotate the CommonJS export names for ESM import in node:
30
+ 0 && (module.exports = {
31
+ getConnInfo
32
+ });
@@ -18,11 +18,14 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var lambda_edge_exports = {};
20
20
  __export(lambda_edge_exports, {
21
+ getConnInfo: () => import_conninfo.getConnInfo,
21
22
  handle: () => import_handler.handle
22
23
  });
23
24
  module.exports = __toCommonJS(lambda_edge_exports);
24
25
  var import_handler = require("./handler");
26
+ var import_conninfo = require("./conninfo");
25
27
  // Annotate the CommonJS export names for ESM import in node:
26
28
  0 && (module.exports = {
29
+ getConnInfo,
27
30
  handle
28
31
  });
@@ -0,0 +1,42 @@
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 handler_exports = {};
20
+ __export(handler_exports, {
21
+ handle: () => handle
22
+ });
23
+ module.exports = __toCommonJS(handler_exports);
24
+ const handle = (app, opts = {
25
+ fetch
26
+ }) => {
27
+ return (evt) => {
28
+ evt.respondWith(
29
+ (async () => {
30
+ const res = await app.fetch(evt.request);
31
+ if (opts.fetch && res.status === 404) {
32
+ return await opts.fetch(evt.request);
33
+ }
34
+ return res;
35
+ })()
36
+ );
37
+ };
38
+ };
39
+ // Annotate the CommonJS export names for ESM import in node:
40
+ 0 && (module.exports = {
41
+ handle
42
+ });
@@ -0,0 +1,28 @@
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 service_worker_exports = {};
20
+ __export(service_worker_exports, {
21
+ handle: () => import_handler.handle
22
+ });
23
+ module.exports = __toCommonJS(service_worker_exports);
24
+ var import_handler = require("./handler");
25
+ // Annotate the CommonJS export names for ESM import in node:
26
+ 0 && (module.exports = {
27
+ handle
28
+ });
@@ -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 types_exports = {};
16
+ module.exports = __toCommonJS(types_exports);
@@ -0,0 +1,32 @@
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("x-real-ip")
27
+ }
28
+ });
29
+ // Annotate the CommonJS export names for ESM import in node:
30
+ 0 && (module.exports = {
31
+ getConnInfo
32
+ });
@@ -18,11 +18,14 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var vercel_exports = {};
20
20
  __export(vercel_exports, {
21
+ getConnInfo: () => import_conninfo.getConnInfo,
21
22
  handle: () => import_handler.handle
22
23
  });
23
24
  module.exports = __toCommonJS(vercel_exports);
24
25
  var import_handler = require("./handler");
26
+ var import_conninfo = require("./conninfo");
25
27
  // Annotate the CommonJS export names for ESM import in node:
26
28
  0 && (module.exports = {
29
+ getConnInfo,
27
30
  handle
28
31
  });
@@ -152,11 +152,15 @@ const hc = (baseUrl, options) => createProxy(function proxyCallback(opts) {
152
152
  return new URL(url);
153
153
  }
154
154
  if (method === "ws") {
155
- const targetUrl = (0, import_utils.replaceUrlProtocol)(
155
+ const webSocketUrl = (0, import_utils.replaceUrlProtocol)(
156
156
  opts.args[0] && opts.args[0].param ? (0, import_utils.replaceUrlParam)(url, opts.args[0].param) : url,
157
157
  "ws"
158
158
  );
159
- return new WebSocket(targetUrl);
159
+ const targetUrl = new URL(webSocketUrl);
160
+ for (const key in opts.args[0]?.query) {
161
+ targetUrl.searchParams.set(key, opts.args[0].query[key]);
162
+ }
163
+ return new WebSocket(targetUrl.toString());
160
164
  }
161
165
  const req = new ClientRequestImpl(url, method);
162
166
  if (method) {