hono 4.6.7 → 4.6.9
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.
- package/dist/adapter/bun/websocket.js +4 -6
- package/dist/adapter/cloudflare-workers/websocket.js +34 -39
- package/dist/adapter/deno/serve-static.js +2 -1
- package/dist/adapter/lambda-edge/handler.js +1 -1
- package/dist/cjs/adapter/bun/websocket.js +4 -6
- package/dist/cjs/adapter/cloudflare-workers/websocket.js +34 -39
- package/dist/cjs/adapter/deno/serve-static.js +2 -1
- package/dist/cjs/adapter/lambda-edge/handler.js +1 -1
- package/dist/cjs/client/client.js +3 -3
- package/dist/cjs/compose.js +4 -3
- package/dist/cjs/context.js +12 -9
- package/dist/cjs/helper/cookie/index.js +1 -1
- package/dist/cjs/helper/html/index.js +1 -1
- package/dist/cjs/helper/ssg/ssg.js +2 -2
- package/dist/cjs/helper/ssg/utils.js +2 -2
- package/dist/cjs/helper/websocket/index.js +1 -4
- package/dist/cjs/hono-base.js +29 -32
- package/dist/cjs/jsx/base.js +8 -3
- package/dist/cjs/jsx/constants.js +3 -0
- package/dist/cjs/jsx/dom/index.js +8 -2
- package/dist/cjs/jsx/dom/render.js +15 -12
- package/dist/cjs/middleware/etag/digest.js +59 -0
- package/dist/cjs/middleware/etag/index.js +5 -2
- package/dist/cjs/middleware/ip-restriction/index.js +3 -3
- package/dist/cjs/middleware/jsx-renderer/index.js +2 -1
- package/dist/cjs/middleware/logger/index.js +13 -11
- package/dist/cjs/middleware/timing/timing.js +5 -7
- package/dist/cjs/request.js +15 -14
- package/dist/cjs/router/pattern-router/router.js +4 -4
- package/dist/cjs/router/reg-exp-router/router.js +5 -5
- package/dist/cjs/router/reg-exp-router/trie.js +2 -2
- package/dist/cjs/router/trie-router/node.js +9 -7
- package/dist/cjs/utils/color.js +1 -1
- package/dist/cjs/utils/cookie.js +13 -6
- package/dist/cjs/utils/crypto.js +0 -9
- package/dist/cjs/utils/headers.js +16 -0
- package/dist/cjs/utils/jwt/jwt.js +1 -1
- package/dist/cjs/utils/mime.js +2 -1
- package/dist/cjs/utils/url.js +9 -6
- package/dist/client/client.js +3 -3
- package/dist/compose.js +4 -3
- package/dist/context.js +12 -9
- package/dist/helper/cookie/index.js +1 -1
- package/dist/helper/html/index.js +1 -1
- package/dist/helper/ssg/ssg.js +2 -2
- package/dist/helper/ssg/utils.js +2 -2
- package/dist/helper/websocket/index.js +1 -4
- package/dist/hono-base.js +29 -32
- package/dist/jsx/base.js +7 -3
- package/dist/jsx/constants.js +2 -0
- package/dist/jsx/dom/index.js +7 -1
- package/dist/jsx/dom/render.js +22 -13
- package/dist/middleware/etag/digest.js +36 -0
- package/dist/middleware/etag/index.js +5 -2
- package/dist/middleware/ip-restriction/index.js +3 -3
- package/dist/middleware/jsx-renderer/index.js +2 -1
- package/dist/middleware/logger/index.js +13 -11
- package/dist/middleware/timing/timing.js +5 -7
- package/dist/request.js +16 -15
- package/dist/router/pattern-router/router.js +4 -4
- package/dist/router/reg-exp-router/router.js +5 -5
- package/dist/router/reg-exp-router/trie.js +2 -2
- package/dist/router/trie-router/node.js +9 -7
- package/dist/types/adapter/bun/websocket.d.ts +5 -3
- package/dist/types/adapter/cloudflare-workers/websocket.d.ts +2 -2
- package/dist/types/adapter/deno/websocket.d.ts +1 -20
- package/dist/types/context.d.ts +2 -2
- package/dist/types/helper/accepts/accepts.d.ts +1 -1
- package/dist/types/helper/websocket/index.d.ts +3 -3
- package/dist/types/hono-base.d.ts +1 -1
- package/dist/types/jsx/base.d.ts +5 -0
- package/dist/types/jsx/constants.d.ts +1 -0
- package/dist/types/jsx/dom/index.d.ts +6 -5
- package/dist/types/jsx/dom/render.d.ts +1 -0
- package/dist/types/middleware/etag/digest.d.ts +1 -0
- package/dist/types/request.d.ts +3 -1
- package/dist/types/types.d.ts +71 -70
- package/dist/types/utils/body.d.ts +2 -2
- package/dist/types/utils/cookie.d.ts +4 -4
- package/dist/types/utils/crypto.d.ts +2 -1
- package/dist/types/utils/headers.d.ts +8 -0
- package/dist/types/utils/mime.d.ts +58 -1
- package/dist/types/utils/url.d.ts +3 -0
- package/dist/utils/color.js +1 -1
- package/dist/utils/cookie.js +13 -6
- package/dist/utils/crypto.js +0 -9
- package/dist/utils/headers.js +0 -0
- package/dist/utils/jwt/jwt.js +1 -1
- package/dist/utils/mime.js +2 -1
- package/dist/utils/url.js +7 -5
- package/package.json +1 -1
|
@@ -16,16 +16,14 @@ var createWSContext = (ws) => {
|
|
|
16
16
|
});
|
|
17
17
|
};
|
|
18
18
|
var createBunWebSocket = () => {
|
|
19
|
-
const websocketConns = [];
|
|
20
19
|
const upgradeWebSocket = defineWebSocketHelper((c, events) => {
|
|
21
20
|
const server = getBunServer(c);
|
|
22
21
|
if (!server) {
|
|
23
22
|
throw new TypeError("env has to include the 2nd argument of fetch.");
|
|
24
23
|
}
|
|
25
|
-
const connId = websocketConns.push(events) - 1;
|
|
26
24
|
const upgradeResult = server.upgrade(c.req.raw, {
|
|
27
25
|
data: {
|
|
28
|
-
|
|
26
|
+
events,
|
|
29
27
|
url: new URL(c.req.url),
|
|
30
28
|
protocol: c.req.url
|
|
31
29
|
}
|
|
@@ -37,13 +35,13 @@ var createBunWebSocket = () => {
|
|
|
37
35
|
});
|
|
38
36
|
const websocket = {
|
|
39
37
|
open(ws) {
|
|
40
|
-
const websocketListeners =
|
|
38
|
+
const websocketListeners = ws.data.events;
|
|
41
39
|
if (websocketListeners.onOpen) {
|
|
42
40
|
websocketListeners.onOpen(new Event("open"), createWSContext(ws));
|
|
43
41
|
}
|
|
44
42
|
},
|
|
45
43
|
close(ws, code, reason) {
|
|
46
|
-
const websocketListeners =
|
|
44
|
+
const websocketListeners = ws.data.events;
|
|
47
45
|
if (websocketListeners.onClose) {
|
|
48
46
|
websocketListeners.onClose(
|
|
49
47
|
new CloseEvent("close", {
|
|
@@ -55,7 +53,7 @@ var createBunWebSocket = () => {
|
|
|
55
53
|
}
|
|
56
54
|
},
|
|
57
55
|
message(ws, message) {
|
|
58
|
-
const websocketListeners =
|
|
56
|
+
const websocketListeners = ws.data.events;
|
|
59
57
|
if (websocketListeners.onMessage) {
|
|
60
58
|
const normalizedReceiveData = typeof message === "string" ? message : message.buffer;
|
|
61
59
|
websocketListeners.onMessage(
|
|
@@ -1,45 +1,40 @@
|
|
|
1
1
|
// src/adapter/cloudflare-workers/websocket.ts
|
|
2
2
|
import { WSContext, defineWebSocketHelper } from "../../helper/websocket/index.js";
|
|
3
|
-
var upgradeWebSocket = defineWebSocketHelper(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
});
|
|
3
|
+
var upgradeWebSocket = defineWebSocketHelper(async (c, events) => {
|
|
4
|
+
const upgradeHeader = c.req.header("Upgrade");
|
|
5
|
+
if (upgradeHeader !== "websocket") {
|
|
6
|
+
return;
|
|
41
7
|
}
|
|
42
|
-
);
|
|
8
|
+
const webSocketPair = new WebSocketPair();
|
|
9
|
+
const client = webSocketPair[0];
|
|
10
|
+
const server = webSocketPair[1];
|
|
11
|
+
const wsContext = new WSContext({
|
|
12
|
+
close: (code, reason) => server.close(code, reason),
|
|
13
|
+
get protocol() {
|
|
14
|
+
return server.protocol;
|
|
15
|
+
},
|
|
16
|
+
raw: server,
|
|
17
|
+
get readyState() {
|
|
18
|
+
return server.readyState;
|
|
19
|
+
},
|
|
20
|
+
url: server.url ? new URL(server.url) : null,
|
|
21
|
+
send: (source) => server.send(source)
|
|
22
|
+
});
|
|
23
|
+
if (events.onClose) {
|
|
24
|
+
server.addEventListener("close", (evt) => events.onClose?.(evt, wsContext));
|
|
25
|
+
}
|
|
26
|
+
if (events.onMessage) {
|
|
27
|
+
server.addEventListener("message", (evt) => events.onMessage?.(evt, wsContext));
|
|
28
|
+
}
|
|
29
|
+
if (events.onError) {
|
|
30
|
+
server.addEventListener("error", (evt) => events.onError?.(evt, wsContext));
|
|
31
|
+
}
|
|
32
|
+
server.accept?.();
|
|
33
|
+
return new Response(null, {
|
|
34
|
+
status: 101,
|
|
35
|
+
webSocket: client
|
|
36
|
+
});
|
|
37
|
+
});
|
|
43
38
|
export {
|
|
44
39
|
upgradeWebSocket
|
|
45
40
|
};
|
|
@@ -6,11 +6,12 @@ var serveStatic = (options) => {
|
|
|
6
6
|
const getContent = async (path) => {
|
|
7
7
|
try {
|
|
8
8
|
const file = await open(path);
|
|
9
|
-
return file
|
|
9
|
+
return file.readable;
|
|
10
10
|
} catch (e) {
|
|
11
11
|
if (!(e instanceof errors.NotFound)) {
|
|
12
12
|
console.warn(`${e}`);
|
|
13
13
|
}
|
|
14
|
+
return null;
|
|
14
15
|
}
|
|
15
16
|
};
|
|
16
17
|
const pathResolve = (path) => {
|
|
@@ -31,7 +31,7 @@ var createResult = async (res) => {
|
|
|
31
31
|
status: res.status.toString(),
|
|
32
32
|
headers: convertHeaders(res.headers),
|
|
33
33
|
body,
|
|
34
|
-
...isBase64Encoded
|
|
34
|
+
...isBase64Encoded && { bodyEncoding: "base64" }
|
|
35
35
|
};
|
|
36
36
|
};
|
|
37
37
|
var createRequest = (event) => {
|
|
@@ -39,16 +39,14 @@ const createWSContext = (ws) => {
|
|
|
39
39
|
});
|
|
40
40
|
};
|
|
41
41
|
const createBunWebSocket = () => {
|
|
42
|
-
const websocketConns = [];
|
|
43
42
|
const upgradeWebSocket = (0, import_websocket.defineWebSocketHelper)((c, events) => {
|
|
44
43
|
const server = (0, import_server.getBunServer)(c);
|
|
45
44
|
if (!server) {
|
|
46
45
|
throw new TypeError("env has to include the 2nd argument of fetch.");
|
|
47
46
|
}
|
|
48
|
-
const connId = websocketConns.push(events) - 1;
|
|
49
47
|
const upgradeResult = server.upgrade(c.req.raw, {
|
|
50
48
|
data: {
|
|
51
|
-
|
|
49
|
+
events,
|
|
52
50
|
url: new URL(c.req.url),
|
|
53
51
|
protocol: c.req.url
|
|
54
52
|
}
|
|
@@ -60,13 +58,13 @@ const createBunWebSocket = () => {
|
|
|
60
58
|
});
|
|
61
59
|
const websocket = {
|
|
62
60
|
open(ws) {
|
|
63
|
-
const websocketListeners =
|
|
61
|
+
const websocketListeners = ws.data.events;
|
|
64
62
|
if (websocketListeners.onOpen) {
|
|
65
63
|
websocketListeners.onOpen(new Event("open"), createWSContext(ws));
|
|
66
64
|
}
|
|
67
65
|
},
|
|
68
66
|
close(ws, code, reason) {
|
|
69
|
-
const websocketListeners =
|
|
67
|
+
const websocketListeners = ws.data.events;
|
|
70
68
|
if (websocketListeners.onClose) {
|
|
71
69
|
websocketListeners.onClose(
|
|
72
70
|
new CloseEvent("close", {
|
|
@@ -78,7 +76,7 @@ const createBunWebSocket = () => {
|
|
|
78
76
|
}
|
|
79
77
|
},
|
|
80
78
|
message(ws, message) {
|
|
81
|
-
const websocketListeners =
|
|
79
|
+
const websocketListeners = ws.data.events;
|
|
82
80
|
if (websocketListeners.onMessage) {
|
|
83
81
|
const normalizedReceiveData = typeof message === "string" ? message : message.buffer;
|
|
84
82
|
websocketListeners.onMessage(
|
|
@@ -22,46 +22,41 @@ __export(websocket_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(websocket_exports);
|
|
24
24
|
var import_websocket = require("../../helper/websocket");
|
|
25
|
-
const upgradeWebSocket = (0, import_websocket.defineWebSocketHelper)(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
});
|
|
25
|
+
const upgradeWebSocket = (0, import_websocket.defineWebSocketHelper)(async (c, events) => {
|
|
26
|
+
const upgradeHeader = c.req.header("Upgrade");
|
|
27
|
+
if (upgradeHeader !== "websocket") {
|
|
28
|
+
return;
|
|
63
29
|
}
|
|
64
|
-
);
|
|
30
|
+
const webSocketPair = new WebSocketPair();
|
|
31
|
+
const client = webSocketPair[0];
|
|
32
|
+
const server = webSocketPair[1];
|
|
33
|
+
const wsContext = new import_websocket.WSContext({
|
|
34
|
+
close: (code, reason) => server.close(code, reason),
|
|
35
|
+
get protocol() {
|
|
36
|
+
return server.protocol;
|
|
37
|
+
},
|
|
38
|
+
raw: server,
|
|
39
|
+
get readyState() {
|
|
40
|
+
return server.readyState;
|
|
41
|
+
},
|
|
42
|
+
url: server.url ? new URL(server.url) : null,
|
|
43
|
+
send: (source) => server.send(source)
|
|
44
|
+
});
|
|
45
|
+
if (events.onClose) {
|
|
46
|
+
server.addEventListener("close", (evt) => events.onClose?.(evt, wsContext));
|
|
47
|
+
}
|
|
48
|
+
if (events.onMessage) {
|
|
49
|
+
server.addEventListener("message", (evt) => events.onMessage?.(evt, wsContext));
|
|
50
|
+
}
|
|
51
|
+
if (events.onError) {
|
|
52
|
+
server.addEventListener("error", (evt) => events.onError?.(evt, wsContext));
|
|
53
|
+
}
|
|
54
|
+
server.accept?.();
|
|
55
|
+
return new Response(null, {
|
|
56
|
+
status: 101,
|
|
57
|
+
webSocket: client
|
|
58
|
+
});
|
|
59
|
+
});
|
|
65
60
|
// Annotate the CommonJS export names for ESM import in node:
|
|
66
61
|
0 && (module.exports = {
|
|
67
62
|
upgradeWebSocket
|
|
@@ -28,11 +28,12 @@ const serveStatic = (options) => {
|
|
|
28
28
|
const getContent = async (path) => {
|
|
29
29
|
try {
|
|
30
30
|
const file = await open(path);
|
|
31
|
-
return file
|
|
31
|
+
return file.readable;
|
|
32
32
|
} catch (e) {
|
|
33
33
|
if (!(e instanceof errors.NotFound)) {
|
|
34
34
|
console.warn(`${e}`);
|
|
35
35
|
}
|
|
36
|
+
return null;
|
|
36
37
|
}
|
|
37
38
|
};
|
|
38
39
|
const pathResolve = (path) => {
|
|
@@ -61,7 +61,7 @@ const createResult = async (res) => {
|
|
|
61
61
|
status: res.status.toString(),
|
|
62
62
|
headers: convertHeaders(res.headers),
|
|
63
63
|
body,
|
|
64
|
-
...isBase64Encoded
|
|
64
|
+
...isBase64Encoded && { bodyEncoding: "base64" }
|
|
65
65
|
};
|
|
66
66
|
};
|
|
67
67
|
const createRequest = (event) => {
|
|
@@ -80,8 +80,8 @@ class ClientRequestImpl {
|
|
|
80
80
|
}
|
|
81
81
|
let methodUpperCase = this.method.toUpperCase();
|
|
82
82
|
const headerValues = {
|
|
83
|
-
...args?.header
|
|
84
|
-
...typeof opt?.headers === "function" ? await opt.headers() : opt?.headers
|
|
83
|
+
...args?.header,
|
|
84
|
+
...typeof opt?.headers === "function" ? await opt.headers() : opt?.headers
|
|
85
85
|
};
|
|
86
86
|
if (args?.cookie) {
|
|
87
87
|
const cookies = [];
|
|
@@ -172,7 +172,7 @@ const hc = (baseUrl, options) => createProxy(function proxyCallback(opts) {
|
|
|
172
172
|
const req = new ClientRequestImpl(url, method);
|
|
173
173
|
if (method) {
|
|
174
174
|
options ??= {};
|
|
175
|
-
const args = (0, import_utils.deepMerge)(options, { ...opts.args[1]
|
|
175
|
+
const args = (0, import_utils.deepMerge)(options, { ...opts.args[1] });
|
|
176
176
|
return req.fetch(opts.args[0], args);
|
|
177
177
|
}
|
|
178
178
|
return req;
|
package/dist/cjs/compose.js
CHANGED
|
@@ -25,6 +25,7 @@ var import_context = require("./context");
|
|
|
25
25
|
const compose = (middleware, onError, onNotFound) => {
|
|
26
26
|
return (context, next) => {
|
|
27
27
|
let index = -1;
|
|
28
|
+
const isContext = context instanceof import_context.Context;
|
|
28
29
|
return dispatch(0);
|
|
29
30
|
async function dispatch(i) {
|
|
30
31
|
if (i <= index) {
|
|
@@ -36,14 +37,14 @@ const compose = (middleware, onError, onNotFound) => {
|
|
|
36
37
|
let handler;
|
|
37
38
|
if (middleware[i]) {
|
|
38
39
|
handler = middleware[i][0][0];
|
|
39
|
-
if (
|
|
40
|
+
if (isContext) {
|
|
40
41
|
context.req.routeIndex = i;
|
|
41
42
|
}
|
|
42
43
|
} else {
|
|
43
44
|
handler = i === middleware.length && next || void 0;
|
|
44
45
|
}
|
|
45
46
|
if (!handler) {
|
|
46
|
-
if (
|
|
47
|
+
if (isContext && context.finalized === false && onNotFound) {
|
|
47
48
|
res = await onNotFound(context);
|
|
48
49
|
}
|
|
49
50
|
} else {
|
|
@@ -52,7 +53,7 @@ const compose = (middleware, onError, onNotFound) => {
|
|
|
52
53
|
return dispatch(i + 1);
|
|
53
54
|
});
|
|
54
55
|
} catch (err) {
|
|
55
|
-
if (err instanceof Error &&
|
|
56
|
+
if (err instanceof Error && isContext && onError) {
|
|
56
57
|
context.error = err;
|
|
57
58
|
res = await onError(err, context);
|
|
58
59
|
isError = true;
|
package/dist/cjs/context.js
CHANGED
|
@@ -26,7 +26,9 @@ var import_request = require("./request");
|
|
|
26
26
|
var import_html = require("./utils/html");
|
|
27
27
|
const TEXT_PLAIN = "text/plain; charset=UTF-8";
|
|
28
28
|
const setHeaders = (headers, map = {}) => {
|
|
29
|
-
|
|
29
|
+
for (const key of Object.keys(map)) {
|
|
30
|
+
headers.set(key, map[key]);
|
|
31
|
+
}
|
|
30
32
|
return headers;
|
|
31
33
|
};
|
|
32
34
|
class Context {
|
|
@@ -173,7 +175,7 @@ class Context {
|
|
|
173
175
|
}
|
|
174
176
|
return Object.fromEntries(this.#var);
|
|
175
177
|
}
|
|
176
|
-
newResponse
|
|
178
|
+
#newResponse(data, arg, headers) {
|
|
177
179
|
if (this.#isFresh && !headers && !arg && this.#status === 200) {
|
|
178
180
|
return new Response(data, {
|
|
179
181
|
headers: this.#preparedHeaders
|
|
@@ -225,9 +227,10 @@ class Context {
|
|
|
225
227
|
status,
|
|
226
228
|
headers: this.#headers
|
|
227
229
|
});
|
|
228
|
-
}
|
|
230
|
+
}
|
|
231
|
+
newResponse = (...args) => this.#newResponse(...args);
|
|
229
232
|
body = (data, arg, headers) => {
|
|
230
|
-
return typeof arg === "number" ? this
|
|
233
|
+
return typeof arg === "number" ? this.#newResponse(data, arg, headers) : this.#newResponse(data, arg);
|
|
231
234
|
};
|
|
232
235
|
text = (text, arg, headers) => {
|
|
233
236
|
if (!this.#preparedHeaders) {
|
|
@@ -237,27 +240,27 @@ class Context {
|
|
|
237
240
|
this.#preparedHeaders = {};
|
|
238
241
|
}
|
|
239
242
|
this.#preparedHeaders["content-type"] = TEXT_PLAIN;
|
|
240
|
-
return typeof arg === "number" ? this
|
|
243
|
+
return typeof arg === "number" ? this.#newResponse(text, arg, headers) : this.#newResponse(text, arg);
|
|
241
244
|
};
|
|
242
245
|
json = (object, arg, headers) => {
|
|
243
246
|
const body = JSON.stringify(object);
|
|
244
247
|
this.#preparedHeaders ??= {};
|
|
245
248
|
this.#preparedHeaders["content-type"] = "application/json; charset=UTF-8";
|
|
246
|
-
return typeof arg === "number" ? this
|
|
249
|
+
return typeof arg === "number" ? this.#newResponse(body, arg, headers) : this.#newResponse(body, arg);
|
|
247
250
|
};
|
|
248
251
|
html = (html, arg, headers) => {
|
|
249
252
|
this.#preparedHeaders ??= {};
|
|
250
253
|
this.#preparedHeaders["content-type"] = "text/html; charset=UTF-8";
|
|
251
254
|
if (typeof html === "object") {
|
|
252
255
|
return (0, import_html.resolveCallback)(html, import_html.HtmlEscapedCallbackPhase.Stringify, false, {}).then((html2) => {
|
|
253
|
-
return typeof arg === "number" ? this
|
|
256
|
+
return typeof arg === "number" ? this.#newResponse(html2, arg, headers) : this.#newResponse(html2, arg);
|
|
254
257
|
});
|
|
255
258
|
}
|
|
256
|
-
return typeof arg === "number" ? this
|
|
259
|
+
return typeof arg === "number" ? this.#newResponse(html, arg, headers) : this.#newResponse(html, arg);
|
|
257
260
|
};
|
|
258
261
|
redirect = (location, status) => {
|
|
259
262
|
this.#headers ??= new Headers();
|
|
260
|
-
this.#headers.set("Location", location);
|
|
263
|
+
this.#headers.set("Location", String(location));
|
|
261
264
|
return this.newResponse(null, status ?? 302);
|
|
262
265
|
};
|
|
263
266
|
notFound = () => {
|
|
@@ -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("
|
|
85
|
+
c.header("Set-Cookie", cookie, { append: true });
|
|
86
86
|
};
|
|
87
87
|
const setSignedCookie = async (c, name, value, secret, opt) => {
|
|
88
88
|
let cookie;
|
|
@@ -27,7 +27,7 @@ const html = (strings, ...values) => {
|
|
|
27
27
|
const buffer = [""];
|
|
28
28
|
for (let i = 0, len = strings.length - 1; i < len; i++) {
|
|
29
29
|
buffer[0] += strings[i];
|
|
30
|
-
const children = values[i]
|
|
30
|
+
const children = Array.isArray(values[i]) ? values[i].flat(Infinity) : [values[i]];
|
|
31
31
|
for (let i2 = 0, len2 = children.length; i2 < len2; i2++) {
|
|
32
32
|
const child = children[i2];
|
|
33
33
|
if (typeof child === "string") {
|
|
@@ -261,8 +261,8 @@ const toSSG = async (app, fs, options) => {
|
|
|
261
261
|
result = { success: false, files: [], error: errorObj };
|
|
262
262
|
}
|
|
263
263
|
if (options?.afterGenerateHook) {
|
|
264
|
-
const
|
|
265
|
-
await
|
|
264
|
+
const combinedAfterGenerateHooks = combineAfterGenerateHooks(options?.afterGenerateHook);
|
|
265
|
+
await combinedAfterGenerateHooks(result);
|
|
266
266
|
}
|
|
267
267
|
return result;
|
|
268
268
|
};
|
|
@@ -26,8 +26,8 @@ module.exports = __toCommonJS(utils_exports);
|
|
|
26
26
|
var import_router = require("../../router");
|
|
27
27
|
var import_handler = require("../../utils/handler");
|
|
28
28
|
const dirname = (path) => {
|
|
29
|
-
const
|
|
30
|
-
return
|
|
29
|
+
const separatedPath = path.split(/[\/\\]/);
|
|
30
|
+
return separatedPath.slice(0, -1).join("/");
|
|
31
31
|
};
|
|
32
32
|
const normalizePath = (path) => {
|
|
33
33
|
return path.replace(/(\\)/g, "/").replace(/\/$/g, "");
|
|
@@ -32,10 +32,7 @@ class WSContext {
|
|
|
32
32
|
this.protocol = init.protocol ?? null;
|
|
33
33
|
}
|
|
34
34
|
send(source, options) {
|
|
35
|
-
this.#init.send(
|
|
36
|
-
typeof source === "string" ? source : source instanceof Uint8Array ? source.buffer : source,
|
|
37
|
-
options ?? {}
|
|
38
|
-
);
|
|
35
|
+
this.#init.send(source, options ?? {});
|
|
39
36
|
}
|
|
40
37
|
raw;
|
|
41
38
|
binaryType = "arraybuffer";
|
package/dist/cjs/hono-base.js
CHANGED
|
@@ -59,11 +59,11 @@ class Hono {
|
|
|
59
59
|
if (typeof args1 === "string") {
|
|
60
60
|
this.#path = args1;
|
|
61
61
|
} else {
|
|
62
|
-
this
|
|
62
|
+
this.#addRoute(method, this.#path, args1);
|
|
63
63
|
}
|
|
64
64
|
args.forEach((handler) => {
|
|
65
65
|
if (typeof handler !== "string") {
|
|
66
|
-
this
|
|
66
|
+
this.#addRoute(method, this.#path, handler);
|
|
67
67
|
}
|
|
68
68
|
});
|
|
69
69
|
return this;
|
|
@@ -74,7 +74,7 @@ class Hono {
|
|
|
74
74
|
this.#path = p;
|
|
75
75
|
for (const m of [method].flat()) {
|
|
76
76
|
handlers.map((handler) => {
|
|
77
|
-
this
|
|
77
|
+
this.#addRoute(m.toUpperCase(), this.#path, handler);
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
}
|
|
@@ -88,7 +88,7 @@ class Hono {
|
|
|
88
88
|
handlers.unshift(arg1);
|
|
89
89
|
}
|
|
90
90
|
handlers.forEach((handler) => {
|
|
91
|
-
this
|
|
91
|
+
this.#addRoute(import_router.METHOD_NAME_ALL, this.#path, handler);
|
|
92
92
|
});
|
|
93
93
|
return this;
|
|
94
94
|
};
|
|
@@ -97,7 +97,7 @@ class Hono {
|
|
|
97
97
|
Object.assign(this, options);
|
|
98
98
|
this.getPath = strict ? options.getPath ?? import_url.getPath : import_url.getPathNoStrict;
|
|
99
99
|
}
|
|
100
|
-
clone() {
|
|
100
|
+
#clone() {
|
|
101
101
|
const clone = new Hono({
|
|
102
102
|
router: this.router,
|
|
103
103
|
getPath: this.getPath
|
|
@@ -105,33 +105,33 @@ class Hono {
|
|
|
105
105
|
clone.routes = this.routes;
|
|
106
106
|
return clone;
|
|
107
107
|
}
|
|
108
|
-
notFoundHandler = notFoundHandler;
|
|
109
|
-
errorHandler = errorHandler;
|
|
108
|
+
#notFoundHandler = notFoundHandler;
|
|
109
|
+
#errorHandler = errorHandler;
|
|
110
110
|
route(path, app) {
|
|
111
111
|
const subApp = this.basePath(path);
|
|
112
112
|
app.routes.map((r) => {
|
|
113
113
|
let handler;
|
|
114
|
-
if (app
|
|
114
|
+
if (app.#errorHandler === errorHandler) {
|
|
115
115
|
handler = r.handler;
|
|
116
116
|
} else {
|
|
117
|
-
handler = async (c, next) => (await (0, import_compose.compose)([], app
|
|
117
|
+
handler = async (c, next) => (await (0, import_compose.compose)([], app.#errorHandler)(c, () => r.handler(c, next))).res;
|
|
118
118
|
handler[COMPOSED_HANDLER] = r.handler;
|
|
119
119
|
}
|
|
120
|
-
subApp
|
|
120
|
+
subApp.#addRoute(r.method, r.path, handler);
|
|
121
121
|
});
|
|
122
122
|
return this;
|
|
123
123
|
}
|
|
124
124
|
basePath(path) {
|
|
125
|
-
const subApp = this
|
|
125
|
+
const subApp = this.#clone();
|
|
126
126
|
subApp._basePath = (0, import_url.mergePath)(this._basePath, path);
|
|
127
127
|
return subApp;
|
|
128
128
|
}
|
|
129
129
|
onError = (handler) => {
|
|
130
|
-
this
|
|
130
|
+
this.#errorHandler = handler;
|
|
131
131
|
return this;
|
|
132
132
|
};
|
|
133
133
|
notFound = (handler) => {
|
|
134
|
-
this
|
|
134
|
+
this.#notFoundHandler = handler;
|
|
135
135
|
return this;
|
|
136
136
|
};
|
|
137
137
|
mount(path, applicationHandler, options) {
|
|
@@ -172,52 +172,49 @@ class Hono {
|
|
|
172
172
|
}
|
|
173
173
|
await next();
|
|
174
174
|
};
|
|
175
|
-
this
|
|
175
|
+
this.#addRoute(import_router.METHOD_NAME_ALL, (0, import_url.mergePath)(path, "*"), handler);
|
|
176
176
|
return this;
|
|
177
177
|
}
|
|
178
|
-
addRoute(method, path, handler) {
|
|
178
|
+
#addRoute(method, path, handler) {
|
|
179
179
|
method = method.toUpperCase();
|
|
180
180
|
path = (0, import_url.mergePath)(this._basePath, path);
|
|
181
181
|
const r = { path, method, handler };
|
|
182
182
|
this.router.add(method, path, [handler, r]);
|
|
183
183
|
this.routes.push(r);
|
|
184
184
|
}
|
|
185
|
-
|
|
186
|
-
return this.router.match(method, path);
|
|
187
|
-
}
|
|
188
|
-
handleError(err, c) {
|
|
185
|
+
#handleError(err, c) {
|
|
189
186
|
if (err instanceof Error) {
|
|
190
|
-
return this
|
|
187
|
+
return this.#errorHandler(err, c);
|
|
191
188
|
}
|
|
192
189
|
throw err;
|
|
193
190
|
}
|
|
194
|
-
dispatch(request, executionCtx, env, method) {
|
|
191
|
+
#dispatch(request, executionCtx, env, method) {
|
|
195
192
|
if (method === "HEAD") {
|
|
196
|
-
return (async () => new Response(null, await this
|
|
193
|
+
return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, "GET")))();
|
|
197
194
|
}
|
|
198
195
|
const path = this.getPath(request, { env });
|
|
199
|
-
const matchResult = this.
|
|
196
|
+
const matchResult = this.router.match(method, path);
|
|
200
197
|
const c = new import_context.Context(request, {
|
|
201
198
|
path,
|
|
202
199
|
matchResult,
|
|
203
200
|
env,
|
|
204
201
|
executionCtx,
|
|
205
|
-
notFoundHandler: this
|
|
202
|
+
notFoundHandler: this.#notFoundHandler
|
|
206
203
|
});
|
|
207
204
|
if (matchResult[0].length === 1) {
|
|
208
205
|
let res;
|
|
209
206
|
try {
|
|
210
207
|
res = matchResult[0][0][0][0](c, async () => {
|
|
211
|
-
c.res = await this
|
|
208
|
+
c.res = await this.#notFoundHandler(c);
|
|
212
209
|
});
|
|
213
210
|
} catch (err) {
|
|
214
|
-
return this
|
|
211
|
+
return this.#handleError(err, c);
|
|
215
212
|
}
|
|
216
213
|
return res instanceof Promise ? res.then(
|
|
217
|
-
(resolved) => resolved || (c.finalized ? c.res : this
|
|
218
|
-
).catch((err) => this
|
|
214
|
+
(resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))
|
|
215
|
+
).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);
|
|
219
216
|
}
|
|
220
|
-
const composed = (0, import_compose.compose)(matchResult[0], this
|
|
217
|
+
const composed = (0, import_compose.compose)(matchResult[0], this.#errorHandler, this.#notFoundHandler);
|
|
221
218
|
return (async () => {
|
|
222
219
|
try {
|
|
223
220
|
const context = await composed(c);
|
|
@@ -228,12 +225,12 @@ class Hono {
|
|
|
228
225
|
}
|
|
229
226
|
return context.res;
|
|
230
227
|
} catch (err) {
|
|
231
|
-
return this
|
|
228
|
+
return this.#handleError(err, c);
|
|
232
229
|
}
|
|
233
230
|
})();
|
|
234
231
|
}
|
|
235
232
|
fetch = (request, ...rest) => {
|
|
236
|
-
return this
|
|
233
|
+
return this.#dispatch(request, rest[1], rest[0], request.method);
|
|
237
234
|
};
|
|
238
235
|
request = (input, requestInit, Env, executionCtx) => {
|
|
239
236
|
if (input instanceof Request) {
|
|
@@ -249,7 +246,7 @@ class Hono {
|
|
|
249
246
|
};
|
|
250
247
|
fire = () => {
|
|
251
248
|
addEventListener("fetch", (event) => {
|
|
252
|
-
event.respondWith(this
|
|
249
|
+
event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));
|
|
253
250
|
});
|
|
254
251
|
};
|
|
255
252
|
}
|