hono 4.1.0-rc.1 → 4.1.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 (38) hide show
  1. package/dist/adapter/bun/index.js +2 -0
  2. package/dist/adapter/bun/websocket.js +77 -0
  3. package/dist/adapter/cloudflare-workers/index.js +3 -1
  4. package/dist/adapter/cloudflare-workers/websocket.js +57 -0
  5. package/dist/adapter/deno/index.js +3 -1
  6. package/dist/adapter/deno/websocket.js +29 -0
  7. package/dist/cjs/adapter/bun/index.js +3 -0
  8. package/dist/cjs/adapter/bun/websocket.js +98 -0
  9. package/dist/cjs/adapter/cloudflare-workers/index.js +5 -2
  10. package/dist/cjs/adapter/cloudflare-workers/websocket.js +80 -0
  11. package/dist/cjs/adapter/deno/index.js +5 -2
  12. package/dist/cjs/adapter/deno/websocket.js +52 -0
  13. package/dist/cjs/client/client.js +4 -0
  14. package/dist/cjs/helper/ssg/index.js +9 -212
  15. package/dist/cjs/helper/ssg/middleware.js +57 -0
  16. package/dist/cjs/helper/ssg/ssg.js +212 -0
  17. package/dist/cjs/helper/websocket/index.js +32 -0
  18. package/dist/cjs/helper.js +1 -0
  19. package/dist/cjs/utils/cookie.js +27 -0
  20. package/dist/client/client.js +4 -0
  21. package/dist/helper/ssg/index.js +3 -204
  22. package/dist/helper/ssg/middleware.js +29 -0
  23. package/dist/helper/ssg/ssg.js +187 -0
  24. package/dist/helper/websocket/index.js +9 -0
  25. package/dist/helper.js +1 -0
  26. package/dist/types/adapter/bun/index.d.ts +1 -0
  27. package/dist/types/adapter/bun/websocket.d.ts +26 -0
  28. package/dist/types/adapter/cloudflare-workers/index.d.ts +1 -0
  29. package/dist/types/adapter/cloudflare-workers/websocket.d.ts +2 -0
  30. package/dist/types/adapter/deno/index.d.ts +1 -0
  31. package/dist/types/adapter/deno/websocket.d.ts +2 -0
  32. package/dist/types/client/types.d.ts +9 -0
  33. package/dist/types/helper/ssg/index.d.ts +2 -103
  34. package/dist/types/helper/ssg/middleware.d.ts +38 -0
  35. package/dist/types/helper/ssg/ssg.d.ts +70 -0
  36. package/dist/types/helper/websocket/index.d.ts +34 -0
  37. package/dist/utils/cookie.js +27 -0
  38. package/package.json +10 -2
@@ -1,8 +1,10 @@
1
1
  // src/adapter/bun/index.ts
2
2
  import { serveStatic } from "./serve-static.js";
3
3
  import { bunFileSystemModule, toSSG } from "./ssg.js";
4
+ import { createBunWebSocket } from "./websocket.js";
4
5
  export {
5
6
  bunFileSystemModule,
7
+ createBunWebSocket,
6
8
  serveStatic,
7
9
  toSSG
8
10
  };
@@ -0,0 +1,77 @@
1
+ // src/adapter/bun/websocket.ts
2
+ import {
3
+ createWSMessageEvent
4
+ } from "../../helper/websocket/index.js";
5
+ var createWSContext = (ws) => {
6
+ return {
7
+ send: (source, options) => {
8
+ const sendingData = typeof source === "string" ? source : source instanceof Uint8Array ? source.buffer : source;
9
+ ws.send(sendingData, options?.compress);
10
+ },
11
+ raw: ws,
12
+ binaryType: "arraybuffer",
13
+ readyState: ws.readyState,
14
+ url: ws.data.url,
15
+ protocol: ws.data.protocol,
16
+ close(code, reason) {
17
+ ws.close(code, reason);
18
+ }
19
+ };
20
+ };
21
+ var createBunWebSocket = () => {
22
+ const websocketConns = [];
23
+ const upgradeWebSocket = (createEvents) => {
24
+ return async (c, next) => {
25
+ const server = c.env;
26
+ const connId = websocketConns.push(await createEvents(c)) - 1;
27
+ const upgradeResult = server.upgrade(c.req.raw, {
28
+ data: {
29
+ connId,
30
+ url: new URL(c.req.url),
31
+ protocol: c.req.url
32
+ }
33
+ });
34
+ if (upgradeResult) {
35
+ return new Response(null);
36
+ }
37
+ await next();
38
+ };
39
+ };
40
+ const websocket = {
41
+ open(ws) {
42
+ const websocketListeners = websocketConns[ws.data.connId];
43
+ if (websocketListeners.onOpen) {
44
+ websocketListeners.onOpen(new Event("open"), createWSContext(ws));
45
+ }
46
+ },
47
+ close(ws, code, reason) {
48
+ const websocketListeners = websocketConns[ws.data.connId];
49
+ if (websocketListeners.onClose) {
50
+ websocketListeners.onClose(
51
+ new CloseEvent("close", {
52
+ code,
53
+ reason
54
+ }),
55
+ createWSContext(ws)
56
+ );
57
+ }
58
+ },
59
+ message(ws, message) {
60
+ const websocketListeners = websocketConns[ws.data.connId];
61
+ if (websocketListeners.onMessage) {
62
+ const normalizedReceiveData = typeof message === "string" ? message : message.buffer;
63
+ websocketListeners.onMessage(
64
+ createWSMessageEvent(normalizedReceiveData),
65
+ createWSContext(ws)
66
+ );
67
+ }
68
+ }
69
+ };
70
+ return {
71
+ upgradeWebSocket,
72
+ websocket
73
+ };
74
+ };
75
+ export {
76
+ createBunWebSocket
77
+ };
@@ -1,5 +1,7 @@
1
1
  // src/adapter/cloudflare-workers/index.ts
2
2
  import { serveStatic } from "./serve-static-module.js";
3
+ import { upgradeWebSocket } from "./websocket.js";
3
4
  export {
4
- serveStatic
5
+ serveStatic,
6
+ upgradeWebSocket
5
7
  };
@@ -0,0 +1,57 @@
1
+ // src/adapter/cloudflare-workers/websocket.ts
2
+ var upgradeWebSocket = (createEvents) => async (c, next) => {
3
+ const CFWebSocketPair = globalThis.WebSocketPair;
4
+ const events = await createEvents(c);
5
+ const upgradeHeader = c.req.header("Upgrade");
6
+ if (upgradeHeader !== "websocket") {
7
+ return await next();
8
+ }
9
+ const webSocketPair = new CFWebSocketPair();
10
+ const client = webSocketPair[0];
11
+ const server = webSocketPair[1];
12
+ const wsContext = {
13
+ binaryType: "arraybuffer",
14
+ close: (code, reason) => server.close(code, reason),
15
+ get protocol() {
16
+ return server.protocol;
17
+ },
18
+ raw: server,
19
+ get readyState() {
20
+ return server.readyState;
21
+ },
22
+ url: server.url ? new URL(server.url) : null,
23
+ send: (source) => server.send(source)
24
+ };
25
+ if (events.onOpen) {
26
+ server.addEventListener(
27
+ "open",
28
+ (evt) => events.onOpen && events.onOpen(evt, wsContext)
29
+ );
30
+ }
31
+ if (events.onClose) {
32
+ server.addEventListener(
33
+ "close",
34
+ (evt) => events.onClose && events.onClose(evt, wsContext)
35
+ );
36
+ }
37
+ if (events.onMessage) {
38
+ server.addEventListener(
39
+ "message",
40
+ (evt) => events.onMessage && events.onMessage(evt, wsContext)
41
+ );
42
+ }
43
+ if (events.onError) {
44
+ server.addEventListener(
45
+ "error",
46
+ (evt) => events.onError && events.onError(evt, wsContext)
47
+ );
48
+ }
49
+ server.accept();
50
+ return new Response(null, {
51
+ status: 101,
52
+ webSocket: client
53
+ });
54
+ };
55
+ export {
56
+ upgradeWebSocket
57
+ };
@@ -1,8 +1,10 @@
1
1
  // src/adapter/deno/index.ts
2
2
  import { serveStatic } from "./serve-static.js";
3
3
  import { toSSG, denoFileSystemModule } from "./ssg.js";
4
+ import { upgradeWebSocket } from "./websocket.js";
4
5
  export {
5
6
  denoFileSystemModule,
6
7
  serveStatic,
7
- toSSG
8
+ toSSG,
9
+ upgradeWebSocket
8
10
  };
@@ -0,0 +1,29 @@
1
+ // src/adapter/deno/websocket.ts
2
+ var upgradeWebSocket = (createEvents) => async (c, next) => {
3
+ if (c.req.header("upgrade") !== "websocket") {
4
+ return await next();
5
+ }
6
+ const { response, socket } = Deno.upgradeWebSocket(c.req.raw);
7
+ const events = await createEvents(c);
8
+ const wsContext = {
9
+ binaryType: "arraybuffer",
10
+ close: (code, reason) => socket.close(code, reason),
11
+ get protocol() {
12
+ return socket.protocol;
13
+ },
14
+ raw: socket,
15
+ get readyState() {
16
+ return socket.readyState;
17
+ },
18
+ url: socket.url ? new URL(socket.url) : null,
19
+ send: (source) => socket.send(source)
20
+ };
21
+ socket.onopen = (evt) => events.onOpen && events.onOpen(evt, wsContext);
22
+ socket.onmessage = (evt) => events.onMessage && events.onMessage(evt, wsContext);
23
+ socket.onclose = (evt) => events.onClose && events.onClose(evt, wsContext);
24
+ socket.onerror = (evt) => events.onError && events.onError(evt, wsContext);
25
+ return response;
26
+ };
27
+ export {
28
+ upgradeWebSocket
29
+ };
@@ -19,15 +19,18 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var bun_exports = {};
20
20
  __export(bun_exports, {
21
21
  bunFileSystemModule: () => import_ssg.bunFileSystemModule,
22
+ createBunWebSocket: () => import_websocket.createBunWebSocket,
22
23
  serveStatic: () => import_serve_static.serveStatic,
23
24
  toSSG: () => import_ssg.toSSG
24
25
  });
25
26
  module.exports = __toCommonJS(bun_exports);
26
27
  var import_serve_static = require("./serve-static");
27
28
  var import_ssg = require("./ssg");
29
+ var import_websocket = require("./websocket");
28
30
  // Annotate the CommonJS export names for ESM import in node:
29
31
  0 && (module.exports = {
30
32
  bunFileSystemModule,
33
+ createBunWebSocket,
31
34
  serveStatic,
32
35
  toSSG
33
36
  });
@@ -0,0 +1,98 @@
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 websocket_exports = {};
20
+ __export(websocket_exports, {
21
+ createBunWebSocket: () => createBunWebSocket
22
+ });
23
+ module.exports = __toCommonJS(websocket_exports);
24
+ var import_websocket = require("../../helper/websocket");
25
+ const createWSContext = (ws) => {
26
+ return {
27
+ send: (source, options) => {
28
+ const sendingData = typeof source === "string" ? source : source instanceof Uint8Array ? source.buffer : source;
29
+ ws.send(sendingData, options?.compress);
30
+ },
31
+ raw: ws,
32
+ binaryType: "arraybuffer",
33
+ readyState: ws.readyState,
34
+ url: ws.data.url,
35
+ protocol: ws.data.protocol,
36
+ close(code, reason) {
37
+ ws.close(code, reason);
38
+ }
39
+ };
40
+ };
41
+ const createBunWebSocket = () => {
42
+ const websocketConns = [];
43
+ const upgradeWebSocket = (createEvents) => {
44
+ return async (c, next) => {
45
+ const server = c.env;
46
+ const connId = websocketConns.push(await createEvents(c)) - 1;
47
+ const upgradeResult = server.upgrade(c.req.raw, {
48
+ data: {
49
+ connId,
50
+ url: new URL(c.req.url),
51
+ protocol: c.req.url
52
+ }
53
+ });
54
+ if (upgradeResult) {
55
+ return new Response(null);
56
+ }
57
+ await next();
58
+ };
59
+ };
60
+ const websocket = {
61
+ open(ws) {
62
+ const websocketListeners = websocketConns[ws.data.connId];
63
+ if (websocketListeners.onOpen) {
64
+ websocketListeners.onOpen(new Event("open"), createWSContext(ws));
65
+ }
66
+ },
67
+ close(ws, code, reason) {
68
+ const websocketListeners = websocketConns[ws.data.connId];
69
+ if (websocketListeners.onClose) {
70
+ websocketListeners.onClose(
71
+ new CloseEvent("close", {
72
+ code,
73
+ reason
74
+ }),
75
+ createWSContext(ws)
76
+ );
77
+ }
78
+ },
79
+ message(ws, message) {
80
+ const websocketListeners = websocketConns[ws.data.connId];
81
+ if (websocketListeners.onMessage) {
82
+ const normalizedReceiveData = typeof message === "string" ? message : message.buffer;
83
+ websocketListeners.onMessage(
84
+ (0, import_websocket.createWSMessageEvent)(normalizedReceiveData),
85
+ createWSContext(ws)
86
+ );
87
+ }
88
+ }
89
+ };
90
+ return {
91
+ upgradeWebSocket,
92
+ websocket
93
+ };
94
+ };
95
+ // Annotate the CommonJS export names for ESM import in node:
96
+ 0 && (module.exports = {
97
+ createBunWebSocket
98
+ });
@@ -18,11 +18,14 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var cloudflare_workers_exports = {};
20
20
  __export(cloudflare_workers_exports, {
21
- serveStatic: () => import_serve_static_module.serveStatic
21
+ serveStatic: () => import_serve_static_module.serveStatic,
22
+ upgradeWebSocket: () => import_websocket.upgradeWebSocket
22
23
  });
23
24
  module.exports = __toCommonJS(cloudflare_workers_exports);
24
25
  var import_serve_static_module = require("./serve-static-module");
26
+ var import_websocket = require("./websocket");
25
27
  // Annotate the CommonJS export names for ESM import in node:
26
28
  0 && (module.exports = {
27
- serveStatic
29
+ serveStatic,
30
+ upgradeWebSocket
28
31
  });
@@ -0,0 +1,80 @@
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 websocket_exports = {};
20
+ __export(websocket_exports, {
21
+ upgradeWebSocket: () => upgradeWebSocket
22
+ });
23
+ module.exports = __toCommonJS(websocket_exports);
24
+ const upgradeWebSocket = (createEvents) => async (c, next) => {
25
+ const CFWebSocketPair = globalThis.WebSocketPair;
26
+ const events = await createEvents(c);
27
+ const upgradeHeader = c.req.header("Upgrade");
28
+ if (upgradeHeader !== "websocket") {
29
+ return await next();
30
+ }
31
+ const webSocketPair = new CFWebSocketPair();
32
+ const client = webSocketPair[0];
33
+ const server = webSocketPair[1];
34
+ const wsContext = {
35
+ binaryType: "arraybuffer",
36
+ close: (code, reason) => server.close(code, reason),
37
+ get protocol() {
38
+ return server.protocol;
39
+ },
40
+ raw: server,
41
+ get readyState() {
42
+ return server.readyState;
43
+ },
44
+ url: server.url ? new URL(server.url) : null,
45
+ send: (source) => server.send(source)
46
+ };
47
+ if (events.onOpen) {
48
+ server.addEventListener(
49
+ "open",
50
+ (evt) => events.onOpen && events.onOpen(evt, wsContext)
51
+ );
52
+ }
53
+ if (events.onClose) {
54
+ server.addEventListener(
55
+ "close",
56
+ (evt) => events.onClose && events.onClose(evt, wsContext)
57
+ );
58
+ }
59
+ if (events.onMessage) {
60
+ server.addEventListener(
61
+ "message",
62
+ (evt) => events.onMessage && events.onMessage(evt, wsContext)
63
+ );
64
+ }
65
+ if (events.onError) {
66
+ server.addEventListener(
67
+ "error",
68
+ (evt) => events.onError && events.onError(evt, wsContext)
69
+ );
70
+ }
71
+ server.accept();
72
+ return new Response(null, {
73
+ status: 101,
74
+ webSocket: client
75
+ });
76
+ };
77
+ // Annotate the CommonJS export names for ESM import in node:
78
+ 0 && (module.exports = {
79
+ upgradeWebSocket
80
+ });
@@ -20,14 +20,17 @@ var deno_exports = {};
20
20
  __export(deno_exports, {
21
21
  denoFileSystemModule: () => import_ssg.denoFileSystemModule,
22
22
  serveStatic: () => import_serve_static.serveStatic,
23
- toSSG: () => import_ssg.toSSG
23
+ toSSG: () => import_ssg.toSSG,
24
+ upgradeWebSocket: () => import_websocket.upgradeWebSocket
24
25
  });
25
26
  module.exports = __toCommonJS(deno_exports);
26
27
  var import_serve_static = require("./serve-static");
27
28
  var import_ssg = require("./ssg");
29
+ var import_websocket = require("./websocket");
28
30
  // Annotate the CommonJS export names for ESM import in node:
29
31
  0 && (module.exports = {
30
32
  denoFileSystemModule,
31
33
  serveStatic,
32
- toSSG
34
+ toSSG,
35
+ upgradeWebSocket
33
36
  });
@@ -0,0 +1,52 @@
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 websocket_exports = {};
20
+ __export(websocket_exports, {
21
+ upgradeWebSocket: () => upgradeWebSocket
22
+ });
23
+ module.exports = __toCommonJS(websocket_exports);
24
+ const upgradeWebSocket = (createEvents) => async (c, next) => {
25
+ if (c.req.header("upgrade") !== "websocket") {
26
+ return await next();
27
+ }
28
+ const { response, socket } = Deno.upgradeWebSocket(c.req.raw);
29
+ const events = await createEvents(c);
30
+ const wsContext = {
31
+ binaryType: "arraybuffer",
32
+ close: (code, reason) => socket.close(code, reason),
33
+ get protocol() {
34
+ return socket.protocol;
35
+ },
36
+ raw: socket,
37
+ get readyState() {
38
+ return socket.readyState;
39
+ },
40
+ url: socket.url ? new URL(socket.url) : null,
41
+ send: (source) => socket.send(source)
42
+ };
43
+ socket.onopen = (evt) => events.onOpen && events.onOpen(evt, wsContext);
44
+ socket.onmessage = (evt) => events.onMessage && events.onMessage(evt, wsContext);
45
+ socket.onclose = (evt) => events.onClose && events.onClose(evt, wsContext);
46
+ socket.onerror = (evt) => events.onError && events.onError(evt, wsContext);
47
+ return response;
48
+ };
49
+ // Annotate the CommonJS export names for ESM import in node:
50
+ 0 && (module.exports = {
51
+ upgradeWebSocket
52
+ });
@@ -133,6 +133,10 @@ const hc = (baseUrl, options) => createProxy((opts) => {
133
133
  }
134
134
  return new URL(url);
135
135
  }
136
+ if (method === "ws") {
137
+ const targetUrl = opts.args[0] && opts.args[0].param ? (0, import_utils.replaceUrlParam)(url, opts.args[0].param) : url;
138
+ return new WebSocket(targetUrl);
139
+ }
136
140
  const req = new ClientRequestImpl(url, method);
137
141
  if (method) {
138
142
  options ??= {};