hono 4.11.7 → 4.12.7
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/aws-lambda/conninfo.js +24 -0
- package/dist/adapter/aws-lambda/handler.js +2 -2
- package/dist/adapter/aws-lambda/index.js +2 -0
- package/dist/adapter/cloudflare-pages/conninfo.js +9 -0
- package/dist/adapter/cloudflare-pages/index.js +2 -0
- package/dist/adapter/lambda-edge/handler.js +2 -1
- package/dist/adapter/netlify/conninfo.js +9 -0
- package/dist/adapter/netlify/mod.js +2 -0
- package/dist/cjs/adapter/aws-lambda/conninfo.js +46 -0
- package/dist/cjs/adapter/aws-lambda/handler.js +2 -3
- package/dist/cjs/adapter/aws-lambda/index.js +3 -1
- package/dist/cjs/adapter/aws-lambda/types.js +0 -1
- package/dist/cjs/adapter/bun/conninfo.js +0 -1
- package/dist/cjs/adapter/bun/index.js +0 -1
- package/dist/cjs/adapter/bun/serve-static.js +0 -1
- package/dist/cjs/adapter/bun/server.js +0 -1
- package/dist/cjs/adapter/bun/ssg.js +0 -1
- package/dist/cjs/adapter/bun/websocket.js +0 -1
- package/dist/cjs/adapter/cloudflare-pages/conninfo.js +31 -0
- package/dist/cjs/adapter/cloudflare-pages/handler.js +0 -1
- package/dist/cjs/adapter/cloudflare-pages/index.js +3 -1
- package/dist/cjs/adapter/cloudflare-workers/conninfo.js +0 -1
- package/dist/cjs/adapter/cloudflare-workers/index.js +0 -1
- package/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +0 -1
- package/dist/cjs/adapter/cloudflare-workers/serve-static.js +0 -1
- package/dist/cjs/adapter/cloudflare-workers/utils.js +0 -1
- package/dist/cjs/adapter/cloudflare-workers/websocket.js +0 -1
- package/dist/cjs/adapter/deno/conninfo.js +0 -1
- package/dist/cjs/adapter/deno/deno.d.js +0 -1
- package/dist/cjs/adapter/deno/index.js +0 -1
- package/dist/cjs/adapter/deno/serve-static.js +0 -1
- package/dist/cjs/adapter/deno/ssg.js +0 -1
- package/dist/cjs/adapter/deno/websocket.js +0 -1
- package/dist/cjs/adapter/lambda-edge/conninfo.js +0 -1
- package/dist/cjs/adapter/lambda-edge/handler.js +2 -2
- package/dist/cjs/adapter/lambda-edge/index.js +0 -1
- package/dist/cjs/adapter/netlify/conninfo.js +31 -0
- package/dist/cjs/adapter/netlify/handler.js +0 -1
- package/dist/cjs/adapter/netlify/index.js +0 -1
- package/dist/cjs/adapter/netlify/mod.js +3 -1
- package/dist/cjs/adapter/service-worker/handler.js +0 -1
- package/dist/cjs/adapter/service-worker/index.js +0 -1
- package/dist/cjs/adapter/service-worker/types.js +0 -1
- package/dist/cjs/adapter/vercel/conninfo.js +0 -1
- package/dist/cjs/adapter/vercel/handler.js +0 -1
- package/dist/cjs/adapter/vercel/index.js +0 -1
- package/dist/cjs/client/client.js +8 -3
- package/dist/cjs/client/fetch-result-please.js +0 -1
- package/dist/cjs/client/index.js +0 -1
- package/dist/cjs/client/types.js +0 -1
- package/dist/cjs/client/utils.js +0 -1
- package/dist/cjs/compose.js +0 -1
- package/dist/cjs/context.js +6 -6
- package/dist/cjs/helper/accepts/accepts.js +0 -1
- package/dist/cjs/helper/accepts/index.js +0 -1
- package/dist/cjs/helper/adapter/index.js +0 -1
- package/dist/cjs/helper/conninfo/index.js +0 -1
- package/dist/cjs/helper/conninfo/types.js +0 -1
- package/dist/cjs/helper/cookie/index.js +0 -1
- package/dist/cjs/helper/css/common.js +0 -1
- package/dist/cjs/helper/css/index.js +0 -1
- package/dist/cjs/helper/dev/index.js +0 -1
- package/dist/cjs/helper/factory/index.js +0 -1
- package/dist/cjs/helper/html/index.js +0 -1
- package/dist/cjs/helper/proxy/index.js +0 -1
- package/dist/cjs/helper/route/index.js +0 -1
- package/dist/cjs/helper/ssg/index.js +5 -1
- package/dist/cjs/helper/ssg/middleware.js +0 -1
- package/dist/cjs/helper/ssg/plugins.js +70 -0
- package/dist/cjs/helper/ssg/ssg.js +2 -12
- package/dist/cjs/helper/ssg/utils.js +0 -1
- package/dist/cjs/helper/streaming/index.js +0 -1
- package/dist/cjs/helper/streaming/sse.js +5 -1
- package/dist/cjs/helper/streaming/stream.js +0 -1
- package/dist/cjs/helper/streaming/text.js +0 -1
- package/dist/cjs/helper/streaming/utils.js +0 -1
- package/dist/cjs/helper/testing/index.js +0 -1
- package/dist/cjs/helper/websocket/index.js +0 -1
- package/dist/cjs/hono-base.js +0 -1
- package/dist/cjs/hono.js +0 -1
- package/dist/cjs/http-exception.js +0 -1
- package/dist/cjs/index.js +0 -1
- package/dist/cjs/jsx/base.js +0 -1
- package/dist/cjs/jsx/children.js +0 -1
- package/dist/cjs/jsx/components.js +0 -1
- package/dist/cjs/jsx/constants.js +0 -1
- package/dist/cjs/jsx/context.js +4 -3
- package/dist/cjs/jsx/dom/client.js +0 -1
- package/dist/cjs/jsx/dom/components.js +0 -1
- package/dist/cjs/jsx/dom/context.js +0 -1
- package/dist/cjs/jsx/dom/css.js +0 -1
- package/dist/cjs/jsx/dom/hooks/index.js +0 -1
- package/dist/cjs/jsx/dom/index.js +0 -1
- package/dist/cjs/jsx/dom/intrinsic-element/components.js +40 -10
- package/dist/cjs/jsx/dom/jsx-dev-runtime.js +0 -1
- package/dist/cjs/jsx/dom/jsx-runtime.js +0 -1
- package/dist/cjs/jsx/dom/render.js +7 -10
- package/dist/cjs/jsx/dom/server.js +0 -1
- package/dist/cjs/jsx/dom/utils.js +0 -1
- package/dist/cjs/jsx/hooks/index.js +0 -1
- package/dist/cjs/jsx/index.js +0 -1
- package/dist/cjs/jsx/intrinsic-element/common.js +13 -3
- package/dist/cjs/jsx/intrinsic-element/components.js +18 -12
- package/dist/cjs/jsx/intrinsic-elements.js +0 -1
- package/dist/cjs/jsx/jsx-dev-runtime.js +0 -1
- package/dist/cjs/jsx/jsx-runtime.js +0 -1
- package/dist/cjs/jsx/streaming.js +13 -4
- package/dist/cjs/jsx/types.js +0 -1
- package/dist/cjs/jsx/utils.js +0 -1
- package/dist/cjs/middleware/basic-auth/index.js +6 -1
- package/dist/cjs/middleware/bearer-auth/index.js +1 -2
- package/dist/cjs/middleware/body-limit/index.js +0 -1
- package/dist/cjs/middleware/cache/index.js +0 -1
- package/dist/cjs/middleware/combine/index.js +0 -1
- package/dist/cjs/middleware/compress/index.js +0 -1
- package/dist/cjs/middleware/context-storage/index.js +0 -1
- package/dist/cjs/middleware/cors/index.js +0 -1
- package/dist/cjs/middleware/csrf/index.js +0 -1
- package/dist/cjs/middleware/etag/digest.js +0 -1
- package/dist/cjs/middleware/etag/index.js +0 -1
- package/dist/cjs/middleware/ip-restriction/index.js +0 -1
- package/dist/cjs/middleware/jsx-renderer/index.js +1 -1
- package/dist/cjs/middleware/jwk/index.js +0 -1
- package/dist/cjs/middleware/jwk/jwk.js +0 -1
- package/dist/cjs/middleware/jwt/index.js +0 -1
- package/dist/cjs/middleware/jwt/jwt.js +0 -1
- package/dist/cjs/middleware/language/index.js +0 -1
- package/dist/cjs/middleware/language/language.js +13 -3
- package/dist/cjs/middleware/logger/index.js +0 -1
- package/dist/cjs/middleware/method-override/index.js +0 -1
- package/dist/cjs/middleware/powered-by/index.js +0 -1
- package/dist/cjs/middleware/pretty-json/index.js +0 -1
- package/dist/cjs/middleware/request-id/index.js +0 -1
- package/dist/cjs/middleware/request-id/request-id.js +0 -1
- package/dist/cjs/middleware/secure-headers/index.js +0 -1
- package/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -1
- package/dist/cjs/middleware/secure-headers/secure-headers.js +0 -1
- package/dist/cjs/middleware/serve-static/index.js +2 -2
- package/dist/cjs/middleware/serve-static/path.js +0 -1
- package/dist/cjs/middleware/timeout/index.js +0 -1
- package/dist/cjs/middleware/timing/index.js +0 -1
- package/dist/cjs/middleware/timing/timing.js +0 -1
- package/dist/cjs/middleware/trailing-slash/index.js +18 -5
- package/dist/cjs/preset/quick.js +0 -1
- package/dist/cjs/preset/tiny.js +0 -1
- package/dist/cjs/request/constants.js +0 -1
- package/dist/cjs/request.js +0 -1
- package/dist/cjs/router/linear-router/index.js +0 -1
- package/dist/cjs/router/linear-router/router.js +0 -1
- package/dist/cjs/router/pattern-router/index.js +0 -1
- package/dist/cjs/router/pattern-router/router.js +0 -1
- package/dist/cjs/router/reg-exp-router/index.js +0 -1
- package/dist/cjs/router/reg-exp-router/matcher.js +0 -1
- package/dist/cjs/router/reg-exp-router/node.js +0 -1
- package/dist/cjs/router/reg-exp-router/prepared-router.js +0 -1
- package/dist/cjs/router/reg-exp-router/router.js +0 -1
- package/dist/cjs/router/reg-exp-router/trie.js +0 -1
- package/dist/cjs/router/smart-router/index.js +0 -1
- package/dist/cjs/router/smart-router/router.js +0 -1
- package/dist/cjs/router/trie-router/index.js +0 -1
- package/dist/cjs/router/trie-router/node.js +33 -17
- package/dist/cjs/router/trie-router/router.js +0 -1
- package/dist/cjs/router.js +0 -1
- package/dist/cjs/types.js +0 -1
- package/dist/cjs/utils/accept.js +188 -29
- package/dist/cjs/utils/basic-auth.js +0 -1
- package/dist/cjs/utils/body.js +3 -1
- package/dist/cjs/utils/buffer.js +29 -3
- package/dist/cjs/utils/color.js +0 -1
- package/dist/cjs/utils/compress.js +0 -1
- package/dist/cjs/utils/concurrent.js +0 -1
- package/dist/cjs/utils/constants.js +0 -1
- package/dist/cjs/utils/cookie.js +5 -1
- package/dist/cjs/utils/crypto.js +0 -1
- package/dist/cjs/utils/encode.js +0 -1
- package/dist/cjs/utils/filepath.js +0 -1
- package/dist/cjs/utils/handler.js +0 -1
- package/dist/cjs/utils/headers.js +0 -1
- package/dist/cjs/utils/html.js +0 -1
- package/dist/cjs/utils/http-status.js +0 -1
- package/dist/cjs/utils/ipaddr.js +0 -1
- package/dist/cjs/utils/jwt/index.js +0 -1
- package/dist/cjs/utils/jwt/jwa.js +0 -1
- package/dist/cjs/utils/jwt/jws.js +0 -1
- package/dist/cjs/utils/jwt/jwt.js +17 -14
- package/dist/cjs/utils/jwt/types.js +0 -1
- package/dist/cjs/utils/jwt/utf8.js +0 -1
- package/dist/cjs/utils/mime.js +0 -1
- package/dist/cjs/utils/stream.js +0 -1
- package/dist/cjs/utils/types.js +0 -1
- package/dist/cjs/utils/url.js +8 -5
- package/dist/cjs/validator/index.js +0 -1
- package/dist/cjs/validator/utils.js +0 -1
- package/dist/cjs/validator/validator.js +2 -3
- package/dist/client/client.js +8 -2
- package/dist/context.js +6 -5
- package/dist/helper/ssg/index.js +3 -0
- package/dist/helper/ssg/plugins.js +47 -0
- package/dist/helper/ssg/ssg.js +2 -10
- package/dist/helper/streaming/sse.js +5 -0
- package/dist/jsx/context.js +4 -2
- package/dist/jsx/dom/intrinsic-element/components.js +47 -10
- package/dist/jsx/dom/render.js +7 -9
- package/dist/jsx/intrinsic-element/common.js +10 -1
- package/dist/jsx/intrinsic-element/components.js +24 -12
- package/dist/jsx/streaming.js +13 -3
- package/dist/middleware/basic-auth/index.js +6 -0
- package/dist/middleware/bearer-auth/index.js +1 -1
- package/dist/middleware/jsx-renderer/index.js +1 -0
- package/dist/middleware/language/language.js +13 -2
- package/dist/middleware/serve-static/index.js +2 -1
- package/dist/middleware/trailing-slash/index.js +18 -4
- package/dist/router/trie-router/node.js +33 -16
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/types/adapter/aws-lambda/conninfo.d.ts +27 -0
- package/dist/types/adapter/aws-lambda/handler.d.ts +2 -2
- package/dist/types/adapter/aws-lambda/index.d.ts +1 -0
- package/dist/types/adapter/cloudflare-pages/conninfo.d.ts +21 -0
- package/dist/types/adapter/cloudflare-pages/index.d.ts +1 -0
- package/dist/types/adapter/netlify/conninfo.d.ts +21 -0
- package/dist/types/adapter/netlify/mod.d.ts +1 -0
- package/dist/types/client/index.d.ts +1 -1
- package/dist/types/client/types.d.ts +43 -2
- package/dist/types/context.d.ts +4 -0
- package/dist/types/helper/ssg/index.d.ts +1 -0
- package/dist/types/helper/ssg/plugins.d.ts +27 -0
- package/dist/types/helper/ssg/ssg.d.ts +0 -8
- package/dist/types/hono-base.d.ts +1 -1
- package/dist/types/jsx/intrinsic-element/common.d.ts +3 -0
- package/dist/types/jsx/types.d.ts +1 -1
- package/dist/types/middleware/basic-auth/index.d.ts +19 -0
- package/dist/types/middleware/jsx-renderer/index.d.ts +1 -1
- package/dist/types/middleware/jwt/index.d.ts +1 -1
- package/dist/types/middleware/jwt/jwt.d.ts +1 -1
- package/dist/types/middleware/trailing-slash/index.d.ts +43 -2
- package/dist/types/request.d.ts +1 -1
- package/dist/types/types.d.ts +18 -18
- package/dist/types/utils/accept.d.ts +0 -5
- package/dist/types/utils/buffer.d.ts +10 -1
- package/dist/types/utils/url.d.ts +10 -0
- package/dist/utils/accept.js +188 -28
- package/dist/utils/body.js +3 -0
- package/dist/utils/buffer.js +29 -2
- package/dist/utils/cookie.js +5 -0
- package/dist/utils/jwt/jwt.js +17 -13
- package/dist/utils/url.js +6 -3
- package/dist/validator/validator.js +2 -2
- package/package.json +5 -4
package/dist/utils/accept.js
CHANGED
|
@@ -1,30 +1,197 @@
|
|
|
1
1
|
// src/utils/accept.ts
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
var isWhitespace = (char) => char === 32 || char === 9 || char === 10 || char === 13;
|
|
3
|
+
var consumeWhitespace = (acceptHeader, startIndex) => {
|
|
4
|
+
while (startIndex < acceptHeader.length) {
|
|
5
|
+
if (!isWhitespace(acceptHeader.charCodeAt(startIndex))) {
|
|
6
|
+
break;
|
|
7
|
+
}
|
|
8
|
+
startIndex++;
|
|
9
|
+
}
|
|
10
|
+
return startIndex;
|
|
11
|
+
};
|
|
12
|
+
var ignoreTrailingWhitespace = (acceptHeader, startIndex) => {
|
|
13
|
+
while (startIndex > 0) {
|
|
14
|
+
if (!isWhitespace(acceptHeader.charCodeAt(startIndex - 1))) {
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
startIndex--;
|
|
18
|
+
}
|
|
19
|
+
return startIndex;
|
|
20
|
+
};
|
|
21
|
+
var skipInvalidParam = (acceptHeader, startIndex) => {
|
|
22
|
+
while (startIndex < acceptHeader.length) {
|
|
23
|
+
const char = acceptHeader.charCodeAt(startIndex);
|
|
24
|
+
if (char === 59) {
|
|
25
|
+
return [startIndex + 1, true];
|
|
26
|
+
}
|
|
27
|
+
if (char === 44) {
|
|
28
|
+
return [startIndex + 1, false];
|
|
29
|
+
}
|
|
30
|
+
startIndex++;
|
|
31
|
+
}
|
|
32
|
+
return [startIndex, false];
|
|
33
|
+
};
|
|
34
|
+
var skipInvalidAcceptValue = (acceptHeader, startIndex) => {
|
|
35
|
+
let i = startIndex;
|
|
36
|
+
let inQuotes = false;
|
|
37
|
+
while (i < acceptHeader.length) {
|
|
38
|
+
const char = acceptHeader.charCodeAt(i);
|
|
39
|
+
if (inQuotes && char === 92) {
|
|
40
|
+
i++;
|
|
41
|
+
} else if (char === 34) {
|
|
42
|
+
inQuotes = !inQuotes;
|
|
43
|
+
} else if (!inQuotes && char === 44) {
|
|
44
|
+
return i + 1;
|
|
45
|
+
}
|
|
46
|
+
i++;
|
|
47
|
+
}
|
|
48
|
+
return i;
|
|
49
|
+
};
|
|
50
|
+
var getNextParam = (acceptHeader, startIndex) => {
|
|
51
|
+
startIndex = consumeWhitespace(acceptHeader, startIndex);
|
|
52
|
+
let i = startIndex;
|
|
53
|
+
let key;
|
|
54
|
+
let value;
|
|
55
|
+
let hasNext = false;
|
|
56
|
+
while (i < acceptHeader.length) {
|
|
57
|
+
const char = acceptHeader.charCodeAt(i);
|
|
58
|
+
if (char === 61) {
|
|
59
|
+
key = acceptHeader.slice(startIndex, ignoreTrailingWhitespace(acceptHeader, i));
|
|
60
|
+
i++;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
if (char === 59) {
|
|
64
|
+
return [i + 1, void 0, void 0, true];
|
|
65
|
+
}
|
|
66
|
+
if (char === 44) {
|
|
67
|
+
return [i + 1, void 0, void 0, false];
|
|
68
|
+
}
|
|
69
|
+
i++;
|
|
70
|
+
}
|
|
71
|
+
if (key === void 0) {
|
|
72
|
+
return [i, void 0, void 0, false];
|
|
73
|
+
}
|
|
74
|
+
i = consumeWhitespace(acceptHeader, i);
|
|
75
|
+
if (acceptHeader.charCodeAt(i) === 61) {
|
|
76
|
+
const skipResult = skipInvalidParam(acceptHeader, i + 1);
|
|
77
|
+
return [skipResult[0], key, void 0, skipResult[1]];
|
|
78
|
+
}
|
|
79
|
+
let inQuotes = false;
|
|
80
|
+
const paramStartIndex = i;
|
|
81
|
+
while (i < acceptHeader.length) {
|
|
82
|
+
const char = acceptHeader.charCodeAt(i);
|
|
83
|
+
if (inQuotes && char === 92) {
|
|
84
|
+
i++;
|
|
85
|
+
} else if (char === 34) {
|
|
86
|
+
if (inQuotes) {
|
|
87
|
+
let nextIndex = consumeWhitespace(acceptHeader, i + 1);
|
|
88
|
+
const nextChar = acceptHeader.charCodeAt(nextIndex);
|
|
89
|
+
if (nextIndex < acceptHeader.length && !(nextChar === 59 || nextChar === 44)) {
|
|
90
|
+
const skipResult = skipInvalidParam(acceptHeader, nextIndex);
|
|
91
|
+
return [skipResult[0], key, void 0, skipResult[1]];
|
|
92
|
+
}
|
|
93
|
+
value = acceptHeader.slice(paramStartIndex + 1, i);
|
|
94
|
+
if (value.includes("\\")) {
|
|
95
|
+
value = value.replace(/\\(.)/g, "$1");
|
|
96
|
+
}
|
|
97
|
+
if (nextChar === 44) {
|
|
98
|
+
return [nextIndex + 1, key, value, false];
|
|
99
|
+
}
|
|
100
|
+
if (nextChar === 59) {
|
|
101
|
+
hasNext = true;
|
|
102
|
+
nextIndex++;
|
|
103
|
+
}
|
|
104
|
+
i = nextIndex;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
inQuotes = true;
|
|
108
|
+
} else if (!inQuotes && (char === 59 || char === 44)) {
|
|
109
|
+
value = acceptHeader.slice(paramStartIndex, ignoreTrailingWhitespace(acceptHeader, i));
|
|
110
|
+
if (char === 59) {
|
|
111
|
+
hasNext = true;
|
|
112
|
+
}
|
|
113
|
+
i++;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
i++;
|
|
5
117
|
}
|
|
6
|
-
|
|
7
|
-
|
|
118
|
+
return [
|
|
119
|
+
i,
|
|
120
|
+
key,
|
|
121
|
+
value ?? acceptHeader.slice(paramStartIndex, ignoreTrailingWhitespace(acceptHeader, i)),
|
|
122
|
+
hasNext
|
|
123
|
+
];
|
|
8
124
|
};
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
125
|
+
var getNextAcceptValue = (acceptHeader, startIndex) => {
|
|
126
|
+
const accept = {
|
|
127
|
+
type: "",
|
|
128
|
+
params: {},
|
|
129
|
+
q: 1
|
|
130
|
+
};
|
|
131
|
+
startIndex = consumeWhitespace(acceptHeader, startIndex);
|
|
132
|
+
let i = startIndex;
|
|
133
|
+
while (i < acceptHeader.length) {
|
|
134
|
+
const char = acceptHeader.charCodeAt(i);
|
|
135
|
+
if (char === 59 || char === 44) {
|
|
136
|
+
accept.type = acceptHeader.slice(startIndex, ignoreTrailingWhitespace(acceptHeader, i));
|
|
137
|
+
i++;
|
|
138
|
+
if (char === 44) {
|
|
139
|
+
return [i, accept.type ? accept : void 0];
|
|
140
|
+
}
|
|
141
|
+
if (!accept.type) {
|
|
142
|
+
return [skipInvalidAcceptValue(acceptHeader, i), void 0];
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
i++;
|
|
147
|
+
}
|
|
148
|
+
if (!accept.type) {
|
|
149
|
+
accept.type = acceptHeader.slice(
|
|
150
|
+
startIndex,
|
|
151
|
+
ignoreTrailingWhitespace(acceptHeader, acceptHeader.length)
|
|
152
|
+
);
|
|
153
|
+
return [acceptHeader.length, accept.type ? accept : void 0];
|
|
154
|
+
}
|
|
155
|
+
let param;
|
|
156
|
+
let value;
|
|
157
|
+
let hasNext;
|
|
158
|
+
while (i < acceptHeader.length) {
|
|
159
|
+
;
|
|
160
|
+
[i, param, value, hasNext] = getNextParam(acceptHeader, i);
|
|
161
|
+
if (param && value) {
|
|
162
|
+
accept.params[param] = value;
|
|
163
|
+
}
|
|
164
|
+
if (!hasNext) {
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
15
167
|
}
|
|
16
|
-
|
|
17
|
-
const q = parseQuality(params.q);
|
|
18
|
-
return { type, params, q, index };
|
|
168
|
+
return [i, accept];
|
|
19
169
|
};
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
170
|
+
var parseAccept = (acceptHeader) => {
|
|
171
|
+
if (!acceptHeader) {
|
|
172
|
+
return [];
|
|
173
|
+
}
|
|
174
|
+
const values = [];
|
|
175
|
+
let i = 0;
|
|
176
|
+
let accept;
|
|
177
|
+
let requiresSort = false;
|
|
178
|
+
let lastAccept;
|
|
179
|
+
while (i < acceptHeader.length) {
|
|
180
|
+
;
|
|
181
|
+
[i, accept] = getNextAcceptValue(acceptHeader, i);
|
|
182
|
+
if (accept) {
|
|
183
|
+
accept.q = parseQuality(accept.params.q);
|
|
184
|
+
values.push(accept);
|
|
185
|
+
if (lastAccept && lastAccept.q < accept.q) {
|
|
186
|
+
requiresSort = true;
|
|
187
|
+
}
|
|
188
|
+
lastAccept = accept;
|
|
25
189
|
}
|
|
26
|
-
|
|
27
|
-
|
|
190
|
+
}
|
|
191
|
+
if (requiresSort) {
|
|
192
|
+
values.sort((a, b) => b.q - a.q);
|
|
193
|
+
}
|
|
194
|
+
return values;
|
|
28
195
|
};
|
|
29
196
|
var parseQuality = (qVal) => {
|
|
30
197
|
if (qVal === void 0) {
|
|
@@ -51,13 +218,6 @@ var parseQuality = (qVal) => {
|
|
|
51
218
|
}
|
|
52
219
|
return num;
|
|
53
220
|
};
|
|
54
|
-
var sortByQualityAndIndex = (a, b) => {
|
|
55
|
-
const qDiff = b.q - a.q;
|
|
56
|
-
if (qDiff !== 0) {
|
|
57
|
-
return qDiff;
|
|
58
|
-
}
|
|
59
|
-
return a.index - b.index;
|
|
60
|
-
};
|
|
61
221
|
export {
|
|
62
222
|
parseAccept
|
|
63
223
|
};
|
package/dist/utils/body.js
CHANGED
|
@@ -54,6 +54,9 @@ var handleParsingAllValues = (form, key, value) => {
|
|
|
54
54
|
}
|
|
55
55
|
};
|
|
56
56
|
var handleParsingNestedValues = (form, key, value) => {
|
|
57
|
+
if (/(?:^|\.)__proto__\./.test(key)) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
57
60
|
let nestedForm = form;
|
|
58
61
|
const keys = key.split(".");
|
|
59
62
|
keys.forEach((key2, index) => {
|
package/dist/utils/buffer.js
CHANGED
|
@@ -17,15 +17,42 @@ var equal = (a, b) => {
|
|
|
17
17
|
}
|
|
18
18
|
return true;
|
|
19
19
|
};
|
|
20
|
+
var constantTimeEqualString = (a, b) => {
|
|
21
|
+
const aLen = a.length;
|
|
22
|
+
const bLen = b.length;
|
|
23
|
+
const maxLen = Math.max(aLen, bLen);
|
|
24
|
+
let out = aLen ^ bLen;
|
|
25
|
+
for (let i = 0; i < maxLen; i++) {
|
|
26
|
+
const aChar = i < aLen ? a.charCodeAt(i) : 0;
|
|
27
|
+
const bChar = i < bLen ? b.charCodeAt(i) : 0;
|
|
28
|
+
out |= aChar ^ bChar;
|
|
29
|
+
}
|
|
30
|
+
return out === 0;
|
|
31
|
+
};
|
|
32
|
+
var timingSafeEqualString = async (a, b, hashFunction) => {
|
|
33
|
+
if (!hashFunction) {
|
|
34
|
+
hashFunction = sha256;
|
|
35
|
+
}
|
|
36
|
+
const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);
|
|
37
|
+
if (sa == null || sb == null || typeof sa !== "string" || typeof sb !== "string") {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const hashEqual = constantTimeEqualString(sa, sb);
|
|
41
|
+
const originalEqual = constantTimeEqualString(a, b);
|
|
42
|
+
return hashEqual && originalEqual;
|
|
43
|
+
};
|
|
20
44
|
var timingSafeEqual = async (a, b, hashFunction) => {
|
|
45
|
+
if (typeof a === "string" && typeof b === "string") {
|
|
46
|
+
return timingSafeEqualString(a, b, hashFunction);
|
|
47
|
+
}
|
|
21
48
|
if (!hashFunction) {
|
|
22
49
|
hashFunction = sha256;
|
|
23
50
|
}
|
|
24
51
|
const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);
|
|
25
|
-
if (!sa || !sb) {
|
|
52
|
+
if (!sa || !sb || typeof sa !== "string" || typeof sb !== "string") {
|
|
26
53
|
return false;
|
|
27
54
|
}
|
|
28
|
-
return sa
|
|
55
|
+
return timingSafeEqualString(sa, sb);
|
|
29
56
|
};
|
|
30
57
|
var bufferToString = (buffer) => {
|
|
31
58
|
if (buffer instanceof ArrayBuffer) {
|
package/dist/utils/cookie.js
CHANGED
|
@@ -87,6 +87,11 @@ var _serialize = (name, value, opt = {}) => {
|
|
|
87
87
|
throw new Error("__Host- Cookie must not have Domain attributes");
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
+
for (const key of ["domain", "path"]) {
|
|
91
|
+
if (opt[key] && /[;\r\n]/.test(opt[key])) {
|
|
92
|
+
throw new Error(`${key} must not contain ";", "\\r", or "\\n"`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
90
95
|
if (opt && typeof opt.maxAge === "number" && opt.maxAge >= 0) {
|
|
91
96
|
if (opt.maxAge > 3456e4) {
|
|
92
97
|
throw new Error(
|
package/dist/utils/jwt/jwt.js
CHANGED
|
@@ -69,7 +69,7 @@ var verify = async (token, publicKey, algOrOptions) => {
|
|
|
69
69
|
if (header.alg !== alg) {
|
|
70
70
|
throw new JwtAlgorithmMismatch(alg, header.alg);
|
|
71
71
|
}
|
|
72
|
-
const now = Date.now() / 1e3
|
|
72
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
73
73
|
if (nbf && payload.nbf && payload.nbf > now) {
|
|
74
74
|
throw new JwtTokenNotBefore(token);
|
|
75
75
|
}
|
|
@@ -134,6 +134,7 @@ var verifyWithJwks = async (token, options, init) => {
|
|
|
134
134
|
if (!options.allowedAlgorithms.includes(header.alg)) {
|
|
135
135
|
throw new JwtAlgorithmNotAllowed(header.alg, options.allowedAlgorithms);
|
|
136
136
|
}
|
|
137
|
+
let verifyKeys = options.keys ? [...options.keys] : void 0;
|
|
137
138
|
if (options.jwks_uri) {
|
|
138
139
|
const response = await fetch(options.jwks_uri, init);
|
|
139
140
|
if (!response.ok) {
|
|
@@ -146,15 +147,12 @@ var verifyWithJwks = async (token, options, init) => {
|
|
|
146
147
|
if (!Array.isArray(data.keys)) {
|
|
147
148
|
throw new Error('invalid JWKS response. "keys" field is not an array');
|
|
148
149
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
options.keys = data.keys;
|
|
153
|
-
}
|
|
154
|
-
} else if (!options.keys) {
|
|
150
|
+
verifyKeys ??= [];
|
|
151
|
+
verifyKeys.push(...data.keys);
|
|
152
|
+
} else if (!verifyKeys) {
|
|
155
153
|
throw new Error('verifyWithJwks requires options for either "keys" or "jwks_uri" or both');
|
|
156
154
|
}
|
|
157
|
-
const matchingKey =
|
|
155
|
+
const matchingKey = verifyKeys.find((key) => key.kid === header.kid);
|
|
158
156
|
if (!matchingKey) {
|
|
159
157
|
throw new JwtTokenInvalid(token);
|
|
160
158
|
}
|
|
@@ -167,10 +165,13 @@ var verifyWithJwks = async (token, options, init) => {
|
|
|
167
165
|
});
|
|
168
166
|
};
|
|
169
167
|
var decode = (token) => {
|
|
168
|
+
const parts = token.split(".");
|
|
169
|
+
if (parts.length !== 3) {
|
|
170
|
+
throw new JwtTokenInvalid(token);
|
|
171
|
+
}
|
|
170
172
|
try {
|
|
171
|
-
const
|
|
172
|
-
const
|
|
173
|
-
const payload = decodeJwtPart(p);
|
|
173
|
+
const header = decodeJwtPart(parts[0]);
|
|
174
|
+
const payload = decodeJwtPart(parts[1]);
|
|
174
175
|
return {
|
|
175
176
|
header,
|
|
176
177
|
payload
|
|
@@ -180,9 +181,12 @@ var decode = (token) => {
|
|
|
180
181
|
}
|
|
181
182
|
};
|
|
182
183
|
var decodeHeader = (token) => {
|
|
184
|
+
const parts = token.split(".");
|
|
185
|
+
if (parts.length !== 3) {
|
|
186
|
+
throw new JwtTokenInvalid(token);
|
|
187
|
+
}
|
|
183
188
|
try {
|
|
184
|
-
|
|
185
|
-
return decodeJwtPart(h);
|
|
189
|
+
return decodeJwtPart(parts[0]);
|
|
186
190
|
} catch {
|
|
187
191
|
throw new JwtTokenInvalid(token);
|
|
188
192
|
}
|
package/dist/utils/url.js
CHANGED
|
@@ -73,9 +73,11 @@ var getPath = (request) => {
|
|
|
73
73
|
const charCode = url.charCodeAt(i);
|
|
74
74
|
if (charCode === 37) {
|
|
75
75
|
const queryIndex = url.indexOf("?", i);
|
|
76
|
-
const
|
|
76
|
+
const hashIndex = url.indexOf("#", i);
|
|
77
|
+
const end = queryIndex === -1 ? hashIndex === -1 ? void 0 : hashIndex : hashIndex === -1 ? queryIndex : Math.min(queryIndex, hashIndex);
|
|
78
|
+
const path = url.slice(start, end);
|
|
77
79
|
return tryDecodeURI(path.includes("%25") ? path.replace(/%25/g, "%2525") : path);
|
|
78
|
-
} else if (charCode === 63) {
|
|
80
|
+
} else if (charCode === 63 || charCode === 35) {
|
|
79
81
|
break;
|
|
80
82
|
}
|
|
81
83
|
}
|
|
@@ -215,5 +217,6 @@ export {
|
|
|
215
217
|
mergePath,
|
|
216
218
|
splitPath,
|
|
217
219
|
splitRoutingPath,
|
|
218
|
-
tryDecode
|
|
220
|
+
tryDecode,
|
|
221
|
+
tryDecodeURI
|
|
219
222
|
};
|
|
@@ -39,7 +39,7 @@ var validator = (target, validationFunc) => {
|
|
|
39
39
|
throw new HTTPException(400, { message });
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
const form =
|
|
42
|
+
const form = /* @__PURE__ */ Object.create(null);
|
|
43
43
|
formData.forEach((value2, key) => {
|
|
44
44
|
if (key.endsWith("[]")) {
|
|
45
45
|
;
|
|
@@ -47,7 +47,7 @@ var validator = (target, validationFunc) => {
|
|
|
47
47
|
} else if (Array.isArray(form[key])) {
|
|
48
48
|
;
|
|
49
49
|
form[key].push(value2);
|
|
50
|
-
} else if (key
|
|
50
|
+
} else if (Object.hasOwn(form, key)) {
|
|
51
51
|
form[key] = [form[key], value2];
|
|
52
52
|
} else {
|
|
53
53
|
form[key] = value2;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hono",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.12.7",
|
|
4
4
|
"description": "Web framework built on Web Standards",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -656,18 +656,19 @@
|
|
|
656
656
|
"nodejs"
|
|
657
657
|
],
|
|
658
658
|
"devDependencies": {
|
|
659
|
-
"@hono/eslint-config": "^2.0
|
|
659
|
+
"@hono/eslint-config": "^2.1.0",
|
|
660
660
|
"@hono/node-server": "^1.13.5",
|
|
661
661
|
"@types/glob": "^9.0.0",
|
|
662
662
|
"@types/jsdom": "^21.1.7",
|
|
663
663
|
"@types/node": "^24.3.0",
|
|
664
|
-
"@
|
|
664
|
+
"@types/ws": "^8.18.1",
|
|
665
|
+
"@typescript/native-preview": "7.0.0-dev.20260210.1",
|
|
665
666
|
"@vitest/coverage-v8": "^3.2.4",
|
|
666
667
|
"arg": "^5.0.2",
|
|
667
668
|
"bun-types": "^1.2.20",
|
|
668
669
|
"editorconfig-checker": "6.1.1",
|
|
669
670
|
"esbuild": "^0.27.1",
|
|
670
|
-
"eslint": "9.39.
|
|
671
|
+
"eslint": "^9.39.3",
|
|
671
672
|
"glob": "^11.0.0",
|
|
672
673
|
"jsdom": "22.1.0",
|
|
673
674
|
"msw": "^2.6.0",
|