hono 4.6.6 → 4.6.8

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 (37) hide show
  1. package/dist/adapter/bun/websocket.js +25 -30
  2. package/dist/adapter/cloudflare-workers/websocket.js +40 -39
  3. package/dist/adapter/deno/websocket.js +7 -8
  4. package/dist/adapter/vercel/handler.js +2 -2
  5. package/dist/cjs/adapter/bun/websocket.js +26 -30
  6. package/dist/cjs/adapter/cloudflare-workers/websocket.js +40 -39
  7. package/dist/cjs/adapter/deno/websocket.js +7 -8
  8. package/dist/cjs/adapter/vercel/handler.js +2 -2
  9. package/dist/cjs/helper/cookie/index.js +1 -1
  10. package/dist/cjs/helper/websocket/index.js +40 -2
  11. package/dist/cjs/router/linear-router/router.js +75 -77
  12. package/dist/cjs/router/pattern-router/router.js +3 -2
  13. package/dist/cjs/router/smart-router/router.js +3 -3
  14. package/dist/cjs/router/trie-router/node.js +9 -12
  15. package/dist/cjs/router/trie-router/router.js +2 -2
  16. package/dist/cjs/utils/headers.js +16 -0
  17. package/dist/cjs/utils/jwt/jws.js +4 -2
  18. package/dist/helper/cookie/index.js +1 -1
  19. package/dist/helper/websocket/index.js +37 -1
  20. package/dist/router/linear-router/router.js +75 -77
  21. package/dist/router/pattern-router/router.js +3 -2
  22. package/dist/router/smart-router/router.js +3 -3
  23. package/dist/router/trie-router/node.js +9 -12
  24. package/dist/router/trie-router/router.js +2 -2
  25. package/dist/types/adapter/bun/websocket.d.ts +14 -4
  26. package/dist/types/adapter/vercel/handler.d.ts +1 -2
  27. package/dist/types/context.d.ts +1 -1
  28. package/dist/types/helper/accepts/accepts.d.ts +1 -1
  29. package/dist/types/helper/websocket/index.d.ts +35 -6
  30. package/dist/types/request.d.ts +3 -1
  31. package/dist/types/router/trie-router/node.d.ts +0 -2
  32. package/dist/types/types.d.ts +71 -70
  33. package/dist/types/utils/cookie.d.ts +4 -4
  34. package/dist/types/utils/headers.d.ts +8 -0
  35. package/dist/utils/headers.js +0 -0
  36. package/dist/utils/jwt/jws.js +4 -2
  37. package/package.json +1 -1
@@ -1,53 +1,47 @@
1
1
  // src/adapter/bun/websocket.ts
2
- import { createWSMessageEvent } from "../../helper/websocket/index.js";
2
+ import { createWSMessageEvent, defineWebSocketHelper, WSContext } from "../../helper/websocket/index.js";
3
3
  import { getBunServer } from "./server.js";
4
4
  var createWSContext = (ws) => {
5
- return {
5
+ return new WSContext({
6
6
  send: (source, options) => {
7
- const sendingData = typeof source === "string" ? source : source instanceof Uint8Array ? source.buffer : source;
8
- ws.send(sendingData, options?.compress);
7
+ ws.send(source, options?.compress);
9
8
  },
10
9
  raw: ws,
11
- binaryType: "arraybuffer",
12
10
  readyState: ws.readyState,
13
11
  url: ws.data.url,
14
12
  protocol: ws.data.protocol,
15
13
  close(code, reason) {
16
14
  ws.close(code, reason);
17
15
  }
18
- };
16
+ });
19
17
  };
20
18
  var createBunWebSocket = () => {
21
- const websocketConns = [];
22
- const upgradeWebSocket = (createEvents) => {
23
- return async (c, next) => {
24
- const server = getBunServer(c);
25
- if (!server) {
26
- throw new TypeError("env has to include the 2nd argument of fetch.");
27
- }
28
- const connId = websocketConns.push(await createEvents(c)) - 1;
29
- const upgradeResult = server.upgrade(c.req.raw, {
30
- data: {
31
- connId,
32
- url: new URL(c.req.url),
33
- protocol: c.req.url
34
- }
35
- });
36
- if (upgradeResult) {
37
- return new Response(null);
19
+ const upgradeWebSocket = defineWebSocketHelper((c, events) => {
20
+ const server = getBunServer(c);
21
+ if (!server) {
22
+ throw new TypeError("env has to include the 2nd argument of fetch.");
23
+ }
24
+ const upgradeResult = server.upgrade(c.req.raw, {
25
+ data: {
26
+ events,
27
+ url: new URL(c.req.url),
28
+ protocol: c.req.url
38
29
  }
39
- await next();
40
- };
41
- };
30
+ });
31
+ if (upgradeResult) {
32
+ return new Response(null);
33
+ }
34
+ return;
35
+ });
42
36
  const websocket = {
43
37
  open(ws) {
44
- const websocketListeners = websocketConns[ws.data.connId];
38
+ const websocketListeners = ws.data.events;
45
39
  if (websocketListeners.onOpen) {
46
40
  websocketListeners.onOpen(new Event("open"), createWSContext(ws));
47
41
  }
48
42
  },
49
43
  close(ws, code, reason) {
50
- const websocketListeners = websocketConns[ws.data.connId];
44
+ const websocketListeners = ws.data.events;
51
45
  if (websocketListeners.onClose) {
52
46
  websocketListeners.onClose(
53
47
  new CloseEvent("close", {
@@ -59,7 +53,7 @@ var createBunWebSocket = () => {
59
53
  }
60
54
  },
61
55
  message(ws, message) {
62
- const websocketListeners = websocketConns[ws.data.connId];
56
+ const websocketListeners = ws.data.events;
63
57
  if (websocketListeners.onMessage) {
64
58
  const normalizedReceiveData = typeof message === "string" ? message : message.buffer;
65
59
  websocketListeners.onMessage(
@@ -75,5 +69,6 @@ var createBunWebSocket = () => {
75
69
  };
76
70
  };
77
71
  export {
78
- createBunWebSocket
72
+ createBunWebSocket,
73
+ createWSContext
79
74
  };
@@ -1,44 +1,45 @@
1
1
  // src/adapter/cloudflare-workers/websocket.ts
2
- var upgradeWebSocket = (createEvents) => async (c, next) => {
3
- const events = await createEvents(c);
4
- const upgradeHeader = c.req.header("Upgrade");
5
- if (upgradeHeader !== "websocket") {
6
- return await next();
2
+ import { WSContext, defineWebSocketHelper } from "../../helper/websocket/index.js";
3
+ var upgradeWebSocket = defineWebSocketHelper(
4
+ async (c, events) => {
5
+ const upgradeHeader = c.req.header("Upgrade");
6
+ if (upgradeHeader !== "websocket") {
7
+ return;
8
+ }
9
+ const webSocketPair = new WebSocketPair();
10
+ const client = webSocketPair[0];
11
+ const server = webSocketPair[1];
12
+ const wsContext = new WSContext({
13
+ close: (code, reason) => server.close(code, reason),
14
+ get protocol() {
15
+ return server.protocol;
16
+ },
17
+ raw: server,
18
+ get readyState() {
19
+ return server.readyState;
20
+ },
21
+ url: server.url ? new URL(server.url) : null,
22
+ send: (source) => server.send(source)
23
+ });
24
+ if (events.onOpen) {
25
+ server.addEventListener("open", (evt) => events.onOpen?.(evt, wsContext));
26
+ }
27
+ if (events.onClose) {
28
+ server.addEventListener("close", (evt) => events.onClose?.(evt, wsContext));
29
+ }
30
+ if (events.onMessage) {
31
+ server.addEventListener("message", (evt) => events.onMessage?.(evt, wsContext));
32
+ }
33
+ if (events.onError) {
34
+ server.addEventListener("error", (evt) => events.onError?.(evt, wsContext));
35
+ }
36
+ server.accept?.();
37
+ return new Response(null, {
38
+ status: 101,
39
+ webSocket: client
40
+ });
7
41
  }
8
- const webSocketPair = new WebSocketPair();
9
- const client = webSocketPair[0];
10
- const server = webSocketPair[1];
11
- const wsContext = {
12
- binaryType: "arraybuffer",
13
- close: (code, reason) => server.close(code, reason),
14
- get protocol() {
15
- return server.protocol;
16
- },
17
- raw: server,
18
- get readyState() {
19
- return server.readyState;
20
- },
21
- url: server.url ? new URL(server.url) : null,
22
- send: (source) => server.send(source)
23
- };
24
- if (events.onOpen) {
25
- server.addEventListener("open", (evt) => events.onOpen?.(evt, wsContext));
26
- }
27
- if (events.onClose) {
28
- server.addEventListener("close", (evt) => events.onClose?.(evt, wsContext));
29
- }
30
- if (events.onMessage) {
31
- server.addEventListener("message", (evt) => events.onMessage?.(evt, wsContext));
32
- }
33
- if (events.onError) {
34
- server.addEventListener("error", (evt) => events.onError?.(evt, wsContext));
35
- }
36
- server.accept?.();
37
- return new Response(null, {
38
- status: 101,
39
- webSocket: client
40
- });
41
- };
42
+ );
42
43
  export {
43
44
  upgradeWebSocket
44
45
  };
@@ -1,12 +1,11 @@
1
1
  // src/adapter/deno/websocket.ts
2
- var upgradeWebSocket = (createEvents, options) => async (c, next) => {
2
+ import { WSContext, defineWebSocketHelper } from "../../helper/websocket/index.js";
3
+ var upgradeWebSocket = defineWebSocketHelper(async (c, events, options) => {
3
4
  if (c.req.header("upgrade") !== "websocket") {
4
- return await next();
5
+ return;
5
6
  }
6
- const events = await createEvents(c);
7
- const { response, socket } = Deno.upgradeWebSocket(c.req.raw, options || {});
8
- const wsContext = {
9
- binaryType: "arraybuffer",
7
+ const { response, socket } = Deno.upgradeWebSocket(c.req.raw, options ?? {});
8
+ const wsContext = new WSContext({
10
9
  close: (code, reason) => socket.close(code, reason),
11
10
  get protocol() {
12
11
  return socket.protocol;
@@ -17,13 +16,13 @@ var upgradeWebSocket = (createEvents, options) => async (c, next) => {
17
16
  },
18
17
  url: socket.url ? new URL(socket.url) : null,
19
18
  send: (source) => socket.send(source)
20
- };
19
+ });
21
20
  socket.onopen = (evt) => events.onOpen?.(evt, wsContext);
22
21
  socket.onmessage = (evt) => events.onMessage?.(evt, wsContext);
23
22
  socket.onclose = (evt) => events.onClose?.(evt, wsContext);
24
23
  socket.onerror = (evt) => events.onError?.(evt, wsContext);
25
24
  return response;
26
- };
25
+ });
27
26
  export {
28
27
  upgradeWebSocket
29
28
  };
@@ -1,6 +1,6 @@
1
1
  // src/adapter/vercel/handler.ts
2
- var handle = (app) => (req, requestContext) => {
3
- return app.fetch(req, {}, requestContext);
2
+ var handle = (app) => (req) => {
3
+ return app.fetch(req);
4
4
  };
5
5
  export {
6
6
  handle
@@ -18,58 +18,53 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var websocket_exports = {};
20
20
  __export(websocket_exports, {
21
- createBunWebSocket: () => createBunWebSocket
21
+ createBunWebSocket: () => createBunWebSocket,
22
+ createWSContext: () => createWSContext
22
23
  });
23
24
  module.exports = __toCommonJS(websocket_exports);
24
25
  var import_websocket = require("../../helper/websocket");
25
26
  var import_server = require("./server");
26
27
  const createWSContext = (ws) => {
27
- return {
28
+ return new import_websocket.WSContext({
28
29
  send: (source, options) => {
29
- const sendingData = typeof source === "string" ? source : source instanceof Uint8Array ? source.buffer : source;
30
- ws.send(sendingData, options?.compress);
30
+ ws.send(source, options?.compress);
31
31
  },
32
32
  raw: ws,
33
- binaryType: "arraybuffer",
34
33
  readyState: ws.readyState,
35
34
  url: ws.data.url,
36
35
  protocol: ws.data.protocol,
37
36
  close(code, reason) {
38
37
  ws.close(code, reason);
39
38
  }
40
- };
39
+ });
41
40
  };
42
41
  const createBunWebSocket = () => {
43
- const websocketConns = [];
44
- const upgradeWebSocket = (createEvents) => {
45
- return async (c, next) => {
46
- const server = (0, import_server.getBunServer)(c);
47
- if (!server) {
48
- throw new TypeError("env has to include the 2nd argument of fetch.");
49
- }
50
- const connId = websocketConns.push(await createEvents(c)) - 1;
51
- const upgradeResult = server.upgrade(c.req.raw, {
52
- data: {
53
- connId,
54
- url: new URL(c.req.url),
55
- protocol: c.req.url
56
- }
57
- });
58
- if (upgradeResult) {
59
- return new Response(null);
42
+ const upgradeWebSocket = (0, import_websocket.defineWebSocketHelper)((c, events) => {
43
+ const server = (0, import_server.getBunServer)(c);
44
+ if (!server) {
45
+ throw new TypeError("env has to include the 2nd argument of fetch.");
46
+ }
47
+ const upgradeResult = server.upgrade(c.req.raw, {
48
+ data: {
49
+ events,
50
+ url: new URL(c.req.url),
51
+ protocol: c.req.url
60
52
  }
61
- await next();
62
- };
63
- };
53
+ });
54
+ if (upgradeResult) {
55
+ return new Response(null);
56
+ }
57
+ return;
58
+ });
64
59
  const websocket = {
65
60
  open(ws) {
66
- const websocketListeners = websocketConns[ws.data.connId];
61
+ const websocketListeners = ws.data.events;
67
62
  if (websocketListeners.onOpen) {
68
63
  websocketListeners.onOpen(new Event("open"), createWSContext(ws));
69
64
  }
70
65
  },
71
66
  close(ws, code, reason) {
72
- const websocketListeners = websocketConns[ws.data.connId];
67
+ const websocketListeners = ws.data.events;
73
68
  if (websocketListeners.onClose) {
74
69
  websocketListeners.onClose(
75
70
  new CloseEvent("close", {
@@ -81,7 +76,7 @@ const createBunWebSocket = () => {
81
76
  }
82
77
  },
83
78
  message(ws, message) {
84
- const websocketListeners = websocketConns[ws.data.connId];
79
+ const websocketListeners = ws.data.events;
85
80
  if (websocketListeners.onMessage) {
86
81
  const normalizedReceiveData = typeof message === "string" ? message : message.buffer;
87
82
  websocketListeners.onMessage(
@@ -98,5 +93,6 @@ const createBunWebSocket = () => {
98
93
  };
99
94
  // Annotate the CommonJS export names for ESM import in node:
100
95
  0 && (module.exports = {
101
- createBunWebSocket
96
+ createBunWebSocket,
97
+ createWSContext
102
98
  });
@@ -21,46 +21,47 @@ __export(websocket_exports, {
21
21
  upgradeWebSocket: () => upgradeWebSocket
22
22
  });
23
23
  module.exports = __toCommonJS(websocket_exports);
24
- const upgradeWebSocket = (createEvents) => async (c, next) => {
25
- const events = await createEvents(c);
26
- const upgradeHeader = c.req.header("Upgrade");
27
- if (upgradeHeader !== "websocket") {
28
- return await next();
24
+ var import_websocket = require("../../helper/websocket");
25
+ const upgradeWebSocket = (0, import_websocket.defineWebSocketHelper)(
26
+ async (c, events) => {
27
+ const upgradeHeader = c.req.header("Upgrade");
28
+ if (upgradeHeader !== "websocket") {
29
+ return;
30
+ }
31
+ const webSocketPair = new WebSocketPair();
32
+ const client = webSocketPair[0];
33
+ const server = webSocketPair[1];
34
+ const wsContext = new import_websocket.WSContext({
35
+ close: (code, reason) => server.close(code, reason),
36
+ get protocol() {
37
+ return server.protocol;
38
+ },
39
+ raw: server,
40
+ get readyState() {
41
+ return server.readyState;
42
+ },
43
+ url: server.url ? new URL(server.url) : null,
44
+ send: (source) => server.send(source)
45
+ });
46
+ if (events.onOpen) {
47
+ server.addEventListener("open", (evt) => events.onOpen?.(evt, wsContext));
48
+ }
49
+ if (events.onClose) {
50
+ server.addEventListener("close", (evt) => events.onClose?.(evt, wsContext));
51
+ }
52
+ if (events.onMessage) {
53
+ server.addEventListener("message", (evt) => events.onMessage?.(evt, wsContext));
54
+ }
55
+ if (events.onError) {
56
+ server.addEventListener("error", (evt) => events.onError?.(evt, wsContext));
57
+ }
58
+ server.accept?.();
59
+ return new Response(null, {
60
+ status: 101,
61
+ webSocket: client
62
+ });
29
63
  }
30
- const webSocketPair = new WebSocketPair();
31
- const client = webSocketPair[0];
32
- const server = webSocketPair[1];
33
- const wsContext = {
34
- binaryType: "arraybuffer",
35
- close: (code, reason) => server.close(code, reason),
36
- get protocol() {
37
- return server.protocol;
38
- },
39
- raw: server,
40
- get readyState() {
41
- return server.readyState;
42
- },
43
- url: server.url ? new URL(server.url) : null,
44
- send: (source) => server.send(source)
45
- };
46
- if (events.onOpen) {
47
- server.addEventListener("open", (evt) => events.onOpen?.(evt, wsContext));
48
- }
49
- if (events.onClose) {
50
- server.addEventListener("close", (evt) => events.onClose?.(evt, wsContext));
51
- }
52
- if (events.onMessage) {
53
- server.addEventListener("message", (evt) => events.onMessage?.(evt, wsContext));
54
- }
55
- if (events.onError) {
56
- server.addEventListener("error", (evt) => events.onError?.(evt, wsContext));
57
- }
58
- server.accept?.();
59
- return new Response(null, {
60
- status: 101,
61
- webSocket: client
62
- });
63
- };
64
+ );
64
65
  // Annotate the CommonJS export names for ESM import in node:
65
66
  0 && (module.exports = {
66
67
  upgradeWebSocket
@@ -21,14 +21,13 @@ __export(websocket_exports, {
21
21
  upgradeWebSocket: () => upgradeWebSocket
22
22
  });
23
23
  module.exports = __toCommonJS(websocket_exports);
24
- const upgradeWebSocket = (createEvents, options) => async (c, next) => {
24
+ var import_websocket = require("../../helper/websocket");
25
+ const upgradeWebSocket = (0, import_websocket.defineWebSocketHelper)(async (c, events, options) => {
25
26
  if (c.req.header("upgrade") !== "websocket") {
26
- return await next();
27
+ return;
27
28
  }
28
- const events = await createEvents(c);
29
- const { response, socket } = Deno.upgradeWebSocket(c.req.raw, options || {});
30
- const wsContext = {
31
- binaryType: "arraybuffer",
29
+ const { response, socket } = Deno.upgradeWebSocket(c.req.raw, options ?? {});
30
+ const wsContext = new import_websocket.WSContext({
32
31
  close: (code, reason) => socket.close(code, reason),
33
32
  get protocol() {
34
33
  return socket.protocol;
@@ -39,13 +38,13 @@ const upgradeWebSocket = (createEvents, options) => async (c, next) => {
39
38
  },
40
39
  url: socket.url ? new URL(socket.url) : null,
41
40
  send: (source) => socket.send(source)
42
- };
41
+ });
43
42
  socket.onopen = (evt) => events.onOpen?.(evt, wsContext);
44
43
  socket.onmessage = (evt) => events.onMessage?.(evt, wsContext);
45
44
  socket.onclose = (evt) => events.onClose?.(evt, wsContext);
46
45
  socket.onerror = (evt) => events.onError?.(evt, wsContext);
47
46
  return response;
48
- };
47
+ });
49
48
  // Annotate the CommonJS export names for ESM import in node:
50
49
  0 && (module.exports = {
51
50
  upgradeWebSocket
@@ -21,8 +21,8 @@ __export(handler_exports, {
21
21
  handle: () => handle
22
22
  });
23
23
  module.exports = __toCommonJS(handler_exports);
24
- const handle = (app) => (req, requestContext) => {
25
- return app.fetch(req, {}, requestContext);
24
+ const handle = (app) => (req) => {
25
+ return app.fetch(req);
26
26
  };
27
27
  // Annotate the CommonJS export names for ESM import in node:
28
28
  0 && (module.exports = {
@@ -82,7 +82,7 @@ const setCookie = (c, name, value, opt) => {
82
82
  } else {
83
83
  cookie = (0, import_cookie.serialize)(name, value, { path: "/", ...opt });
84
84
  }
85
- c.header("set-cookie", cookie, { append: true });
85
+ c.header("Set-Cookie", cookie, { append: true });
86
86
  };
87
87
  const setSignedCookie = async (c, name, value, secret, opt) => {
88
88
  let cookie;
@@ -18,15 +18,53 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var websocket_exports = {};
20
20
  __export(websocket_exports, {
21
- createWSMessageEvent: () => createWSMessageEvent
21
+ WSContext: () => WSContext,
22
+ createWSMessageEvent: () => createWSMessageEvent,
23
+ defineWebSocketHelper: () => defineWebSocketHelper
22
24
  });
23
25
  module.exports = __toCommonJS(websocket_exports);
26
+ class WSContext {
27
+ #init;
28
+ constructor(init) {
29
+ this.#init = init;
30
+ this.raw = init.raw;
31
+ this.url = init.url ? new URL(init.url) : null;
32
+ this.protocol = init.protocol ?? null;
33
+ }
34
+ send(source, options) {
35
+ this.#init.send(source, options ?? {});
36
+ }
37
+ raw;
38
+ binaryType = "arraybuffer";
39
+ get readyState() {
40
+ return this.#init.readyState;
41
+ }
42
+ url;
43
+ protocol;
44
+ close(code, reason) {
45
+ this.#init.close(code, reason);
46
+ }
47
+ }
24
48
  const createWSMessageEvent = (source) => {
25
49
  return new MessageEvent("message", {
26
50
  data: source
27
51
  });
28
52
  };
53
+ const defineWebSocketHelper = (handler) => {
54
+ return (createEvents, options) => {
55
+ return async function UpgradeWebSocket(c, next) {
56
+ const events = await createEvents(c);
57
+ const result = await handler(c, events, options);
58
+ if (result) {
59
+ return result;
60
+ }
61
+ await next();
62
+ };
63
+ };
64
+ };
29
65
  // Annotate the CommonJS export names for ESM import in node:
30
66
  0 && (module.exports = {
31
- createWSMessageEvent
67
+ WSContext,
68
+ createWSMessageEvent,
69
+ defineWebSocketHelper
32
70
  });