hono 4.6.8 → 4.6.10
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/cloudflare-workers/websocket.js +34 -39
- package/dist/adapter/deno/serve-static.js +5 -1
- package/dist/adapter/lambda-edge/handler.js +1 -1
- package/dist/cjs/adapter/cloudflare-workers/websocket.js +34 -39
- package/dist/cjs/adapter/deno/serve-static.js +5 -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/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/hono-base.js +38 -41
- 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/combine/index.js +15 -9
- 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/linear-router/router.js +4 -4
- package/dist/cjs/router/pattern-router/router.js +4 -4
- package/dist/cjs/router/reg-exp-router/node.js +18 -18
- package/dist/cjs/router/reg-exp-router/router.js +13 -12
- package/dist/cjs/router/reg-exp-router/trie.js +6 -6
- package/dist/cjs/router/smart-router/router.js +12 -11
- package/dist/cjs/router/trie-router/node.js +53 -47
- package/dist/cjs/router/trie-router/router.js +5 -5
- 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/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/html/index.js +1 -1
- package/dist/helper/ssg/ssg.js +2 -2
- package/dist/helper/ssg/utils.js +2 -2
- package/dist/hono-base.js +38 -41
- 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/combine/index.js +15 -9
- 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/linear-router/router.js +4 -4
- package/dist/router/pattern-router/router.js +4 -4
- package/dist/router/reg-exp-router/node.js +18 -18
- package/dist/router/reg-exp-router/router.js +13 -12
- package/dist/router/reg-exp-router/trie.js +6 -6
- package/dist/router/smart-router/router.js +12 -11
- package/dist/router/trie-router/node.js +53 -47
- package/dist/router/trie-router/router.js +5 -5
- package/dist/types/adapter/cloudflare-workers/websocket.d.ts +2 -2
- package/dist/types/adapter/deno/websocket.d.ts +1 -20
- package/dist/types/adapter/service-worker/index.d.ts +1 -1
- package/dist/types/compose.d.ts +5 -2
- package/dist/types/context.d.ts +1 -1
- package/dist/types/helper/websocket/index.d.ts +1 -1
- 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/router/linear-router/router.d.ts +0 -5
- package/dist/types/router/reg-exp-router/node.d.ts +0 -3
- package/dist/types/router/reg-exp-router/router.d.ts +0 -7
- package/dist/types/router/reg-exp-router/trie.d.ts +1 -4
- package/dist/types/router/smart-router/router.d.ts +3 -7
- package/dist/types/router/trie-router/node.d.ts +0 -12
- package/dist/types/router/trie-router/router.d.ts +0 -2
- package/dist/types/utils/body.d.ts +2 -2
- package/dist/types/utils/crypto.d.ts +2 -1
- 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/jwt/jwt.js +1 -1
- package/dist/utils/mime.js +2 -1
- package/dist/utils/url.js +7 -5
- package/package.json +20 -12
|
@@ -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
|
};
|
|
@@ -5,12 +5,16 @@ var serveStatic = (options) => {
|
|
|
5
5
|
return async function serveStatic2(c, next) {
|
|
6
6
|
const getContent = async (path) => {
|
|
7
7
|
try {
|
|
8
|
+
if (isDir(path)) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
8
11
|
const file = await open(path);
|
|
9
|
-
return file
|
|
12
|
+
return file.readable;
|
|
10
13
|
} catch (e) {
|
|
11
14
|
if (!(e instanceof errors.NotFound)) {
|
|
12
15
|
console.warn(`${e}`);
|
|
13
16
|
}
|
|
17
|
+
return null;
|
|
14
18
|
}
|
|
15
19
|
};
|
|
16
20
|
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) => {
|
|
@@ -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
|
|
@@ -27,12 +27,16 @@ const serveStatic = (options) => {
|
|
|
27
27
|
return async function serveStatic2(c, next) {
|
|
28
28
|
const getContent = async (path) => {
|
|
29
29
|
try {
|
|
30
|
+
if (isDir(path)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
30
33
|
const file = await open(path);
|
|
31
|
-
return file
|
|
34
|
+
return file.readable;
|
|
32
35
|
} catch (e) {
|
|
33
36
|
if (!(e instanceof errors.NotFound)) {
|
|
34
37
|
console.warn(`${e}`);
|
|
35
38
|
}
|
|
39
|
+
return null;
|
|
36
40
|
}
|
|
37
41
|
};
|
|
38
42
|
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 = () => {
|
|
@@ -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, "");
|
package/dist/cjs/hono-base.js
CHANGED
|
@@ -59,12 +59,10 @@ 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
|
-
|
|
66
|
-
this.addRoute(method, this.#path, handler);
|
|
67
|
-
}
|
|
65
|
+
this.#addRoute(method, this.#path, handler);
|
|
68
66
|
});
|
|
69
67
|
return this;
|
|
70
68
|
};
|
|
@@ -74,7 +72,7 @@ class Hono {
|
|
|
74
72
|
this.#path = p;
|
|
75
73
|
for (const m of [method].flat()) {
|
|
76
74
|
handlers.map((handler) => {
|
|
77
|
-
this
|
|
75
|
+
this.#addRoute(m.toUpperCase(), this.#path, handler);
|
|
78
76
|
});
|
|
79
77
|
}
|
|
80
78
|
}
|
|
@@ -88,7 +86,7 @@ class Hono {
|
|
|
88
86
|
handlers.unshift(arg1);
|
|
89
87
|
}
|
|
90
88
|
handlers.forEach((handler) => {
|
|
91
|
-
this
|
|
89
|
+
this.#addRoute(import_router.METHOD_NAME_ALL, this.#path, handler);
|
|
92
90
|
});
|
|
93
91
|
return this;
|
|
94
92
|
};
|
|
@@ -97,7 +95,7 @@ class Hono {
|
|
|
97
95
|
Object.assign(this, options);
|
|
98
96
|
this.getPath = strict ? options.getPath ?? import_url.getPath : import_url.getPathNoStrict;
|
|
99
97
|
}
|
|
100
|
-
clone() {
|
|
98
|
+
#clone() {
|
|
101
99
|
const clone = new Hono({
|
|
102
100
|
router: this.router,
|
|
103
101
|
getPath: this.getPath
|
|
@@ -105,33 +103,33 @@ class Hono {
|
|
|
105
103
|
clone.routes = this.routes;
|
|
106
104
|
return clone;
|
|
107
105
|
}
|
|
108
|
-
notFoundHandler = notFoundHandler;
|
|
109
|
-
errorHandler = errorHandler;
|
|
106
|
+
#notFoundHandler = notFoundHandler;
|
|
107
|
+
#errorHandler = errorHandler;
|
|
110
108
|
route(path, app) {
|
|
111
109
|
const subApp = this.basePath(path);
|
|
112
110
|
app.routes.map((r) => {
|
|
113
111
|
let handler;
|
|
114
|
-
if (app
|
|
112
|
+
if (app.#errorHandler === errorHandler) {
|
|
115
113
|
handler = r.handler;
|
|
116
114
|
} else {
|
|
117
|
-
handler = async (c, next) => (await (0, import_compose.compose)([], app
|
|
115
|
+
handler = async (c, next) => (await (0, import_compose.compose)([], app.#errorHandler)(c, () => r.handler(c, next))).res;
|
|
118
116
|
handler[COMPOSED_HANDLER] = r.handler;
|
|
119
117
|
}
|
|
120
|
-
subApp
|
|
118
|
+
subApp.#addRoute(r.method, r.path, handler);
|
|
121
119
|
});
|
|
122
120
|
return this;
|
|
123
121
|
}
|
|
124
122
|
basePath(path) {
|
|
125
|
-
const subApp = this
|
|
123
|
+
const subApp = this.#clone();
|
|
126
124
|
subApp._basePath = (0, import_url.mergePath)(this._basePath, path);
|
|
127
125
|
return subApp;
|
|
128
126
|
}
|
|
129
127
|
onError = (handler) => {
|
|
130
|
-
this
|
|
128
|
+
this.#errorHandler = handler;
|
|
131
129
|
return this;
|
|
132
130
|
};
|
|
133
131
|
notFound = (handler) => {
|
|
134
|
-
this
|
|
132
|
+
this.#notFoundHandler = handler;
|
|
135
133
|
return this;
|
|
136
134
|
};
|
|
137
135
|
mount(path, applicationHandler, options) {
|
|
@@ -172,52 +170,49 @@ class Hono {
|
|
|
172
170
|
}
|
|
173
171
|
await next();
|
|
174
172
|
};
|
|
175
|
-
this
|
|
173
|
+
this.#addRoute(import_router.METHOD_NAME_ALL, (0, import_url.mergePath)(path, "*"), handler);
|
|
176
174
|
return this;
|
|
177
175
|
}
|
|
178
|
-
addRoute(method, path, handler) {
|
|
176
|
+
#addRoute(method, path, handler) {
|
|
179
177
|
method = method.toUpperCase();
|
|
180
178
|
path = (0, import_url.mergePath)(this._basePath, path);
|
|
181
179
|
const r = { path, method, handler };
|
|
182
180
|
this.router.add(method, path, [handler, r]);
|
|
183
181
|
this.routes.push(r);
|
|
184
182
|
}
|
|
185
|
-
|
|
186
|
-
return this.router.match(method, path);
|
|
187
|
-
}
|
|
188
|
-
handleError(err, c) {
|
|
183
|
+
#handleError(err, c) {
|
|
189
184
|
if (err instanceof Error) {
|
|
190
|
-
return this
|
|
185
|
+
return this.#errorHandler(err, c);
|
|
191
186
|
}
|
|
192
187
|
throw err;
|
|
193
188
|
}
|
|
194
|
-
dispatch(request, executionCtx, env, method) {
|
|
189
|
+
#dispatch(request, executionCtx, env, method) {
|
|
195
190
|
if (method === "HEAD") {
|
|
196
|
-
return (async () => new Response(null, await this
|
|
191
|
+
return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, "GET")))();
|
|
197
192
|
}
|
|
198
193
|
const path = this.getPath(request, { env });
|
|
199
|
-
const matchResult = this.
|
|
194
|
+
const matchResult = this.router.match(method, path);
|
|
200
195
|
const c = new import_context.Context(request, {
|
|
201
196
|
path,
|
|
202
197
|
matchResult,
|
|
203
198
|
env,
|
|
204
199
|
executionCtx,
|
|
205
|
-
notFoundHandler: this
|
|
200
|
+
notFoundHandler: this.#notFoundHandler
|
|
206
201
|
});
|
|
207
202
|
if (matchResult[0].length === 1) {
|
|
208
203
|
let res;
|
|
209
204
|
try {
|
|
210
205
|
res = matchResult[0][0][0][0](c, async () => {
|
|
211
|
-
c.res = await this
|
|
206
|
+
c.res = await this.#notFoundHandler(c);
|
|
212
207
|
});
|
|
213
208
|
} catch (err) {
|
|
214
|
-
return this
|
|
209
|
+
return this.#handleError(err, c);
|
|
215
210
|
}
|
|
216
211
|
return res instanceof Promise ? res.then(
|
|
217
|
-
(resolved) => resolved || (c.finalized ? c.res : this
|
|
218
|
-
).catch((err) => this
|
|
212
|
+
(resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))
|
|
213
|
+
).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);
|
|
219
214
|
}
|
|
220
|
-
const composed = (0, import_compose.compose)(matchResult[0], this
|
|
215
|
+
const composed = (0, import_compose.compose)(matchResult[0], this.#errorHandler, this.#notFoundHandler);
|
|
221
216
|
return (async () => {
|
|
222
217
|
try {
|
|
223
218
|
const context = await composed(c);
|
|
@@ -228,28 +223,30 @@ class Hono {
|
|
|
228
223
|
}
|
|
229
224
|
return context.res;
|
|
230
225
|
} catch (err) {
|
|
231
|
-
return this
|
|
226
|
+
return this.#handleError(err, c);
|
|
232
227
|
}
|
|
233
228
|
})();
|
|
234
229
|
}
|
|
235
230
|
fetch = (request, ...rest) => {
|
|
236
|
-
return this
|
|
231
|
+
return this.#dispatch(request, rest[1], rest[0], request.method);
|
|
237
232
|
};
|
|
238
233
|
request = (input, requestInit, Env, executionCtx) => {
|
|
239
234
|
if (input instanceof Request) {
|
|
240
|
-
|
|
241
|
-
input = new Request(input, requestInit);
|
|
242
|
-
}
|
|
243
|
-
return this.fetch(input, Env, executionCtx);
|
|
235
|
+
return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);
|
|
244
236
|
}
|
|
245
237
|
input = input.toString();
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
238
|
+
return this.fetch(
|
|
239
|
+
new Request(
|
|
240
|
+
/^https?:\/\//.test(input) ? input : `http://localhost${(0, import_url.mergePath)("/", input)}`,
|
|
241
|
+
requestInit
|
|
242
|
+
),
|
|
243
|
+
Env,
|
|
244
|
+
executionCtx
|
|
245
|
+
);
|
|
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
|
}
|
package/dist/cjs/jsx/base.js
CHANGED
|
@@ -34,7 +34,8 @@ __export(base_exports, {
|
|
|
34
34
|
jsx: () => jsx,
|
|
35
35
|
jsxFn: () => jsxFn,
|
|
36
36
|
memo: () => memo,
|
|
37
|
-
reactAPICompatVersion: () => reactAPICompatVersion
|
|
37
|
+
reactAPICompatVersion: () => reactAPICompatVersion,
|
|
38
|
+
shallowEqual: () => shallowEqual
|
|
38
39
|
});
|
|
39
40
|
module.exports = __toCommonJS(base_exports);
|
|
40
41
|
var import_html = require("../helper/html");
|
|
@@ -308,13 +309,16 @@ const shallowEqual = (a, b) => {
|
|
|
308
309
|
const memo = (component, propsAreEqual = shallowEqual) => {
|
|
309
310
|
let computed = null;
|
|
310
311
|
let prevProps = void 0;
|
|
311
|
-
|
|
312
|
+
const wrapper = (props) => {
|
|
312
313
|
if (prevProps && !propsAreEqual(prevProps, props)) {
|
|
313
314
|
computed = null;
|
|
314
315
|
}
|
|
315
316
|
prevProps = props;
|
|
316
317
|
return computed ||= component(props);
|
|
317
318
|
};
|
|
319
|
+
wrapper[import_constants.DOM_MEMO] = propsAreEqual;
|
|
320
|
+
wrapper[import_constants.DOM_RENDERER] = component;
|
|
321
|
+
return wrapper;
|
|
318
322
|
};
|
|
319
323
|
const Fragment = ({
|
|
320
324
|
children
|
|
@@ -350,5 +354,6 @@ const reactAPICompatVersion = "19.0.0-hono-jsx";
|
|
|
350
354
|
jsx,
|
|
351
355
|
jsxFn,
|
|
352
356
|
memo,
|
|
353
|
-
reactAPICompatVersion
|
|
357
|
+
reactAPICompatVersion,
|
|
358
|
+
shallowEqual
|
|
354
359
|
});
|
|
@@ -20,6 +20,7 @@ var constants_exports = {};
|
|
|
20
20
|
__export(constants_exports, {
|
|
21
21
|
DOM_ERROR_HANDLER: () => DOM_ERROR_HANDLER,
|
|
22
22
|
DOM_INTERNAL_TAG: () => DOM_INTERNAL_TAG,
|
|
23
|
+
DOM_MEMO: () => DOM_MEMO,
|
|
23
24
|
DOM_RENDERER: () => DOM_RENDERER,
|
|
24
25
|
DOM_STASH: () => DOM_STASH,
|
|
25
26
|
PERMALINK: () => PERMALINK
|
|
@@ -29,11 +30,13 @@ const DOM_RENDERER = Symbol("RENDERER");
|
|
|
29
30
|
const DOM_ERROR_HANDLER = Symbol("ERROR_HANDLER");
|
|
30
31
|
const DOM_STASH = Symbol("STASH");
|
|
31
32
|
const DOM_INTERNAL_TAG = Symbol("INTERNAL");
|
|
33
|
+
const DOM_MEMO = Symbol("MEMO");
|
|
32
34
|
const PERMALINK = Symbol("PERMALINK");
|
|
33
35
|
// Annotate the CommonJS export names for ESM import in node:
|
|
34
36
|
0 && (module.exports = {
|
|
35
37
|
DOM_ERROR_HANDLER,
|
|
36
38
|
DOM_INTERNAL_TAG,
|
|
39
|
+
DOM_MEMO,
|
|
37
40
|
DOM_RENDERER,
|
|
38
41
|
DOM_STASH,
|
|
39
42
|
PERMALINK
|
|
@@ -33,7 +33,7 @@ __export(dom_exports, {
|
|
|
33
33
|
forwardRef: () => import_hooks.forwardRef,
|
|
34
34
|
isValidElement: () => import_base.isValidElement,
|
|
35
35
|
jsx: () => createElement,
|
|
36
|
-
memo: () =>
|
|
36
|
+
memo: () => memo,
|
|
37
37
|
render: () => import_render2.render,
|
|
38
38
|
startTransition: () => import_hooks.startTransition,
|
|
39
39
|
startViewTransition: () => import_hooks.startViewTransition,
|
|
@@ -62,6 +62,7 @@ __export(dom_exports, {
|
|
|
62
62
|
module.exports = __toCommonJS(dom_exports);
|
|
63
63
|
var import_base = require("../base");
|
|
64
64
|
var import_children = require("../children");
|
|
65
|
+
var import_constants = require("../constants");
|
|
65
66
|
var import_context = require("../context");
|
|
66
67
|
var import_hooks = require("../hooks");
|
|
67
68
|
var import_components = require("./components");
|
|
@@ -93,6 +94,11 @@ const cloneElement = (element, props, ...children) => {
|
|
|
93
94
|
element.key
|
|
94
95
|
);
|
|
95
96
|
};
|
|
97
|
+
const memo = (component, propsAreEqual = import_base.shallowEqual) => {
|
|
98
|
+
const wrapper = (props) => component(props);
|
|
99
|
+
wrapper[import_constants.DOM_MEMO] = propsAreEqual;
|
|
100
|
+
return wrapper;
|
|
101
|
+
};
|
|
96
102
|
var dom_default = {
|
|
97
103
|
version: import_base.reactAPICompatVersion,
|
|
98
104
|
useState: import_hooks.useState,
|
|
@@ -122,7 +128,7 @@ var dom_default = {
|
|
|
122
128
|
ErrorBoundary: import_components.ErrorBoundary,
|
|
123
129
|
createContext: import_context2.createContext,
|
|
124
130
|
useContext: import_context.useContext,
|
|
125
|
-
memo
|
|
131
|
+
memo,
|
|
126
132
|
isValidElement: import_base.isValidElement,
|
|
127
133
|
createElement,
|
|
128
134
|
cloneElement,
|