@depup/hono 4.12.12-depup.0 → 4.12.32-depup.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.
- package/README.md +2 -2
- package/changes.json +1 -1
- package/dist/adapter/aws-lambda/handler.js +25 -27
- package/dist/adapter/bun/serve-static.js +1 -1
- package/dist/adapter/bun/websocket.js +3 -1
- package/dist/adapter/cloudflare-workers/serve-static.js +1 -1
- package/dist/adapter/deno/serve-static.js +1 -1
- package/dist/adapter/deno/websocket.js +5 -1
- package/dist/adapter/lambda-edge/handler.js +20 -4
- package/dist/cjs/adapter/aws-lambda/handler.js +25 -27
- package/dist/cjs/adapter/bun/serve-static.js +1 -1
- package/dist/cjs/adapter/bun/websocket.js +3 -1
- package/dist/cjs/adapter/cloudflare-workers/serve-static.js +1 -1
- package/dist/cjs/adapter/deno/serve-static.js +1 -1
- package/dist/cjs/adapter/deno/websocket.js +5 -1
- package/dist/cjs/adapter/lambda-edge/handler.js +20 -4
- package/dist/cjs/client/client.js +10 -1
- package/dist/cjs/client/utils.js +1 -1
- package/dist/cjs/helper/css/common.js +3 -1
- package/dist/cjs/helper/css/index.js +9 -1
- package/dist/cjs/helper/ssg/ssg.js +2 -0
- package/dist/cjs/helper/streaming/sse.js +5 -4
- package/dist/cjs/hono-base.js +9 -4
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/jsx/base.js +15 -15
- package/dist/cjs/jsx/components.js +41 -21
- package/dist/cjs/jsx/context.js +131 -5
- package/dist/cjs/jsx/dom/render.js +22 -9
- package/dist/cjs/jsx/jsx-runtime.js +3 -0
- package/dist/cjs/jsx/streaming.js +9 -7
- package/dist/cjs/jsx/utils.js +155 -5
- package/dist/cjs/middleware/bearer-auth/index.js +1 -1
- package/dist/cjs/middleware/body-limit/index.js +21 -30
- package/dist/cjs/middleware/cache/index.js +41 -28
- package/dist/cjs/middleware/compress/index.js +33 -6
- package/dist/cjs/middleware/cors/index.js +4 -10
- package/dist/cjs/middleware/etag/index.js +2 -1
- package/dist/cjs/middleware/ip-restriction/index.js +58 -28
- package/dist/cjs/middleware/jwk/jwk.js +1 -1
- package/dist/cjs/middleware/jwt/jwt.js +1 -1
- package/dist/cjs/middleware/language/language.js +10 -32
- package/dist/cjs/middleware/method-override/index.js +6 -4
- package/dist/cjs/middleware/secure-headers/secure-headers.js +10 -4
- package/dist/cjs/middleware/serve-static/index.js +2 -2
- package/dist/cjs/middleware/timing/timing.js +3 -1
- package/dist/cjs/middleware/trailing-slash/index.js +2 -2
- package/dist/cjs/request.js +23 -3
- package/dist/cjs/router/trie-router/node.js +9 -0
- package/dist/cjs/utils/accept.js +1 -1
- package/dist/cjs/utils/body.js +18 -4
- package/dist/cjs/utils/buffer.js +2 -1
- package/dist/cjs/utils/compress.js +1 -1
- package/dist/cjs/utils/cookie.js +4 -4
- package/dist/cjs/utils/filepath.js +1 -1
- package/dist/cjs/utils/ipaddr.js +193 -10
- package/dist/cjs/utils/jwt/jws.js +1 -1
- package/dist/cjs/utils/jwt/jwt.js +12 -6
- package/dist/cjs/utils/mime.js +15 -17
- package/dist/cjs/utils/stream.js +4 -2
- package/dist/cjs/utils/url.js +1 -1
- package/dist/cjs/validator/validator.js +3 -3
- package/dist/client/client.js +10 -1
- package/dist/client/utils.js +1 -1
- package/dist/helper/css/common.js +3 -1
- package/dist/helper/css/index.js +9 -1
- package/dist/helper/ssg/ssg.js +2 -0
- package/dist/helper/streaming/sse.js +5 -4
- package/dist/hono-base.js +9 -4
- package/dist/index.js +2 -0
- package/dist/jsx/base.js +28 -17
- package/dist/jsx/components.js +42 -22
- package/dist/jsx/context.js +129 -5
- package/dist/jsx/dom/render.js +22 -9
- package/dist/jsx/jsx-runtime.js +4 -1
- package/dist/jsx/streaming.js +10 -8
- package/dist/jsx/utils.js +153 -5
- package/dist/middleware/bearer-auth/index.js +1 -1
- package/dist/middleware/body-limit/index.js +21 -30
- package/dist/middleware/cache/index.js +41 -28
- package/dist/middleware/compress/index.js +32 -6
- package/dist/middleware/cors/index.js +4 -10
- package/dist/middleware/etag/index.js +2 -1
- package/dist/middleware/ip-restriction/index.js +60 -29
- package/dist/middleware/jwk/jwk.js +1 -1
- package/dist/middleware/jwt/jwt.js +1 -1
- package/dist/middleware/language/language.js +10 -32
- package/dist/middleware/method-override/index.js +6 -4
- package/dist/middleware/secure-headers/secure-headers.js +10 -4
- package/dist/middleware/serve-static/index.js +2 -2
- package/dist/middleware/timing/timing.js +3 -1
- package/dist/middleware/trailing-slash/index.js +2 -2
- package/dist/request.js +23 -3
- package/dist/router/trie-router/node.js +9 -0
- package/dist/types/adapter/aws-lambda/handler.d.ts +1 -1
- package/dist/types/adapter/aws-lambda/types.d.ts +9 -0
- package/dist/types/adapter/bun/serve-static.d.ts +1 -1
- package/dist/types/adapter/cloudflare-workers/serve-static.d.ts +2 -2
- package/dist/types/adapter/deno/serve-static.d.ts +1 -1
- package/dist/types/adapter/lambda-edge/handler.d.ts +1 -1
- package/dist/types/helper/websocket/index.d.ts +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/jsx/base.d.ts +3 -5
- package/dist/types/jsx/context.d.ts +39 -0
- package/dist/types/jsx/index.d.ts +1 -1
- package/dist/types/jsx/utils.d.ts +3 -1
- package/dist/types/middleware/bearer-auth/index.d.ts +6 -5
- package/dist/types/middleware/cache/index.d.ts +3 -1
- package/dist/types/middleware/combine/index.d.ts +1 -1
- package/dist/types/middleware/compress/index.d.ts +13 -2
- package/dist/types/middleware/context-storage/index.d.ts +2 -2
- package/dist/types/middleware/cors/index.d.ts +1 -1
- package/dist/types/middleware/language/language.d.ts +18 -0
- package/dist/types/middleware/trailing-slash/index.d.ts +16 -0
- package/dist/types/request.d.ts +13 -0
- package/dist/types/types.d.ts +116 -116
- package/dist/types/utils/body.d.ts +1 -1
- package/dist/types/utils/ipaddr.d.ts +4 -0
- package/dist/types/utils/mime.d.ts +11 -11
- package/dist/types/utils/types.d.ts +1 -1
- package/dist/utils/accept.js +1 -1
- package/dist/utils/body.js +18 -4
- package/dist/utils/buffer.js +2 -1
- package/dist/utils/compress.js +1 -1
- package/dist/utils/cookie.js +4 -4
- package/dist/utils/filepath.js +1 -1
- package/dist/utils/ipaddr.js +192 -10
- package/dist/utils/jwt/jws.js +1 -1
- package/dist/utils/jwt/jwt.js +12 -6
- package/dist/utils/mime.js +15 -17
- package/dist/utils/stream.js +4 -2
- package/dist/utils/url.js +1 -1
- package/dist/validator/validator.js +3 -3
- package/package.json +32 -25
- package/dist/tsconfig.build.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -13,8 +13,8 @@ npm install @depup/hono
|
|
|
13
13
|
|
|
14
14
|
| Field | Value |
|
|
15
15
|
|-------|-------|
|
|
16
|
-
| Original | [hono](https://www.npmjs.com/package/hono) @ 4.12.
|
|
17
|
-
| Processed | 2026-
|
|
16
|
+
| Original | [hono](https://www.npmjs.com/package/hono) @ 4.12.32 |
|
|
17
|
+
| Processed | 2026-07-24 |
|
|
18
18
|
| Smoke test | passed |
|
|
19
19
|
| Deps updated | 0 |
|
|
20
20
|
|
package/changes.json
CHANGED
|
@@ -62,8 +62,15 @@ var streamHandle = (app) => {
|
|
|
62
62
|
var handle = (app, { isContentTypeBinary } = { isContentTypeBinary: void 0 }) => {
|
|
63
63
|
return async (event, lambdaContext) => {
|
|
64
64
|
const processor = getProcessor(event);
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
let req, requestContext;
|
|
66
|
+
try {
|
|
67
|
+
req = processor.createRequest(event);
|
|
68
|
+
requestContext = getRequestContext(event);
|
|
69
|
+
} catch (error) {
|
|
70
|
+
console.error("Error processing request:", error);
|
|
71
|
+
const errorResponse = error instanceof TypeError ? new Response("Invalid request", { status: 400 }) : new Response("Internal Server Error", { status: 500 });
|
|
72
|
+
return processor.createResult(event, errorResponse, { isContentTypeBinary });
|
|
73
|
+
}
|
|
67
74
|
const res = await app.fetch(req, {
|
|
68
75
|
event,
|
|
69
76
|
requestContext,
|
|
@@ -102,7 +109,9 @@ var EventProcessor = class {
|
|
|
102
109
|
method
|
|
103
110
|
};
|
|
104
111
|
if (event.body) {
|
|
105
|
-
|
|
112
|
+
const body = event.isBase64Encoded ? decodeBase64(event.body) : new TextEncoder().encode(event.body);
|
|
113
|
+
requestInit.body = body;
|
|
114
|
+
headers.set("content-length", body.length.toString());
|
|
106
115
|
}
|
|
107
116
|
return new Request(url, requestInit);
|
|
108
117
|
}
|
|
@@ -200,21 +209,17 @@ var EventV1Processor = class extends EventProcessor {
|
|
|
200
209
|
getHeaders(event) {
|
|
201
210
|
const headers = new Headers();
|
|
202
211
|
this.getCookies(event, headers);
|
|
203
|
-
if (event.headers) {
|
|
204
|
-
for (const [k, v] of Object.entries(event.headers)) {
|
|
205
|
-
if (v) {
|
|
206
|
-
headers.set(k, sanitizeHeaderValue(v));
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
212
|
if (event.multiValueHeaders) {
|
|
211
213
|
for (const [k, values] of Object.entries(event.multiValueHeaders)) {
|
|
212
214
|
if (values) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
215
|
+
values.forEach((v) => headers.append(k, sanitizeHeaderValue(v)));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (event.headers) {
|
|
220
|
+
for (const [k, v] of Object.entries(event.headers)) {
|
|
221
|
+
if (v && !headers.has(k)) {
|
|
222
|
+
headers.set(k, sanitizeHeaderValue(v));
|
|
218
223
|
}
|
|
219
224
|
}
|
|
220
225
|
}
|
|
@@ -274,7 +279,7 @@ var ALBProcessor = class extends EventProcessor {
|
|
|
274
279
|
if (result.multiValueHeaders) {
|
|
275
280
|
result.multiValueHeaders["set-cookie"] = cookies;
|
|
276
281
|
} else {
|
|
277
|
-
result.headers["set-cookie"] = cookies
|
|
282
|
+
result.headers["set-cookie"] = cookies[0];
|
|
278
283
|
}
|
|
279
284
|
}
|
|
280
285
|
};
|
|
@@ -294,11 +299,7 @@ var LatticeV2Processor = class extends EventProcessor {
|
|
|
294
299
|
if (event.headers) {
|
|
295
300
|
for (const [k, values] of Object.entries(event.headers)) {
|
|
296
301
|
if (values) {
|
|
297
|
-
|
|
298
|
-
values.forEach((v) => {
|
|
299
|
-
const sanitizedValue = sanitizeHeaderValue(v);
|
|
300
|
-
return (!foundK || !foundK.includes(sanitizedValue)) && headers.append(k, sanitizedValue);
|
|
301
|
-
});
|
|
302
|
+
values.forEach((v) => headers.append(k, sanitizeHeaderValue(v)));
|
|
302
303
|
}
|
|
303
304
|
}
|
|
304
305
|
}
|
|
@@ -309,7 +310,7 @@ var LatticeV2Processor = class extends EventProcessor {
|
|
|
309
310
|
setCookiesToResult(result, cookies) {
|
|
310
311
|
result.headers = {
|
|
311
312
|
...result.headers,
|
|
312
|
-
"set-cookie": cookies
|
|
313
|
+
"set-cookie": cookies
|
|
313
314
|
};
|
|
314
315
|
}
|
|
315
316
|
};
|
|
@@ -333,7 +334,7 @@ var isProxyEventALB = (event) => {
|
|
|
333
334
|
return false;
|
|
334
335
|
};
|
|
335
336
|
var isProxyEventV2 = (event) => {
|
|
336
|
-
return Object.hasOwn(event, "rawPath");
|
|
337
|
+
return Object.hasOwn(event, "rawPath") && Object.hasOwn(event.requestContext ?? {}, "http");
|
|
337
338
|
};
|
|
338
339
|
var isLatticeEventV2 = (event) => {
|
|
339
340
|
if (event.requestContext) {
|
|
@@ -347,10 +348,7 @@ var defaultIsContentTypeBinary = (contentType) => {
|
|
|
347
348
|
);
|
|
348
349
|
};
|
|
349
350
|
var isContentEncodingBinary = (contentEncoding) => {
|
|
350
|
-
|
|
351
|
-
return false;
|
|
352
|
-
}
|
|
353
|
-
return /^(gzip|deflate|compress|br)/.test(contentEncoding);
|
|
351
|
+
return !!contentEncoding && !/^identity$/i.test(contentEncoding);
|
|
354
352
|
};
|
|
355
353
|
export {
|
|
356
354
|
ALBProcessor,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { stat } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { serveStatic as baseServeStatic } from "../../middleware/serve-static/index.js";
|
|
5
|
-
var serveStatic = (options) => {
|
|
5
|
+
var serveStatic = (options = {}) => {
|
|
6
6
|
return async function serveStatic2(c, next) {
|
|
7
7
|
const getContent = async (path) => {
|
|
8
8
|
const file = Bun.file(path);
|
|
@@ -24,7 +24,9 @@ var upgradeWebSocket = defineWebSocketHelper((c, events) => {
|
|
|
24
24
|
data: {
|
|
25
25
|
events,
|
|
26
26
|
url: new URL(c.req.url),
|
|
27
|
-
protocol
|
|
27
|
+
// The first requested subprotocol, exposed via WSContext.protocol to
|
|
28
|
+
// match the deno and cloudflare adapters.
|
|
29
|
+
protocol: c.req.header("sec-websocket-protocol")?.split(",")[0]?.trim() ?? ""
|
|
28
30
|
}
|
|
29
31
|
});
|
|
30
32
|
if (upgradeResult) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/adapter/cloudflare-workers/serve-static.ts
|
|
2
2
|
import { serveStatic as baseServeStatic } from "../../middleware/serve-static/index.js";
|
|
3
3
|
import { getContentFromKVAsset } from "./utils.js";
|
|
4
|
-
var serveStatic = (options) => {
|
|
4
|
+
var serveStatic = (options = {}) => {
|
|
5
5
|
return async function serveStatic2(c, next) {
|
|
6
6
|
const getContent = async (path) => {
|
|
7
7
|
return getContentFromKVAsset(path, {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { serveStatic as baseServeStatic } from "../../middleware/serve-static/index.js";
|
|
4
4
|
var { open, lstatSync, errors } = Deno;
|
|
5
|
-
var serveStatic = (options) => {
|
|
5
|
+
var serveStatic = (options = {}) => {
|
|
6
6
|
return async function serveStatic2(c, next) {
|
|
7
7
|
const getContent = async (path) => {
|
|
8
8
|
try {
|
|
@@ -4,7 +4,11 @@ var upgradeWebSocket = defineWebSocketHelper(async (c, events, options) => {
|
|
|
4
4
|
if (c.req.header("upgrade") !== "websocket") {
|
|
5
5
|
return;
|
|
6
6
|
}
|
|
7
|
-
const
|
|
7
|
+
const subprotocol = c.req.header("sec-websocket-protocol")?.split(",")[0]?.trim();
|
|
8
|
+
const { response, socket } = Deno.upgradeWebSocket(c.req.raw, {
|
|
9
|
+
...subprotocol ? { protocol: subprotocol } : {},
|
|
10
|
+
...options
|
|
11
|
+
});
|
|
8
12
|
const wsContext = new WSContext({
|
|
9
13
|
close: (code, reason) => socket.close(code, reason),
|
|
10
14
|
get protocol() {
|
|
@@ -15,21 +15,31 @@ var convertHeaders = (headers) => {
|
|
|
15
15
|
var handle = (app) => {
|
|
16
16
|
return async (event, ...args) => {
|
|
17
17
|
const [context, callback] = args;
|
|
18
|
+
let callbackError = null;
|
|
19
|
+
let callbackResult;
|
|
18
20
|
const res = await app.fetch(createRequest(event), {
|
|
19
21
|
event,
|
|
20
22
|
context,
|
|
21
23
|
callback: (err, result) => {
|
|
24
|
+
if (!callbackError && !callbackResult) {
|
|
25
|
+
callbackError = err;
|
|
26
|
+
callbackResult = result;
|
|
27
|
+
}
|
|
22
28
|
callback?.(err, result);
|
|
23
29
|
},
|
|
24
30
|
config: event.Records[0].cf.config,
|
|
25
31
|
request: event.Records[0].cf.request,
|
|
26
32
|
response: event.Records[0].cf.response
|
|
27
33
|
});
|
|
28
|
-
|
|
34
|
+
if (callbackError) {
|
|
35
|
+
throw callbackError;
|
|
36
|
+
}
|
|
37
|
+
return callbackResult ?? createResult(res);
|
|
29
38
|
};
|
|
30
39
|
};
|
|
31
40
|
var createResult = async (res) => {
|
|
32
|
-
const
|
|
41
|
+
const contentEncoding = res.headers.get("content-encoding");
|
|
42
|
+
const isBase64Encoded = isContentTypeBinary(res.headers.get("content-type") || "") || !!contentEncoding && !/^identity$/i.test(contentEncoding);
|
|
33
43
|
const body = isBase64Encoded ? encodeBase64(await res.arrayBuffer()) : await res.text();
|
|
34
44
|
return {
|
|
35
45
|
status: res.status.toString(),
|
|
@@ -45,11 +55,17 @@ var createRequest = (event) => {
|
|
|
45
55
|
const url = queryString ? `${urlPath}?${queryString}` : urlPath;
|
|
46
56
|
const headers = new Headers();
|
|
47
57
|
Object.entries(event.Records[0].cf.request.headers).forEach(([k, v]) => {
|
|
48
|
-
v.forEach((header) => headers.
|
|
58
|
+
v.forEach((header) => headers.append(k, header.value));
|
|
49
59
|
});
|
|
50
60
|
const requestBody = event.Records[0].cf.request.body;
|
|
51
61
|
const method = event.Records[0].cf.request.method;
|
|
52
|
-
const
|
|
62
|
+
const rawBody = createBody(method, requestBody);
|
|
63
|
+
let body = rawBody;
|
|
64
|
+
if (rawBody !== void 0) {
|
|
65
|
+
const bytes = typeof rawBody === "string" ? new TextEncoder().encode(rawBody) : rawBody;
|
|
66
|
+
body = bytes;
|
|
67
|
+
headers.set("content-length", bytes.length.toString());
|
|
68
|
+
}
|
|
53
69
|
return new Request(url, {
|
|
54
70
|
headers,
|
|
55
71
|
method,
|
|
@@ -92,8 +92,15 @@ const streamHandle = (app) => {
|
|
|
92
92
|
const handle = (app, { isContentTypeBinary } = { isContentTypeBinary: void 0 }) => {
|
|
93
93
|
return async (event, lambdaContext) => {
|
|
94
94
|
const processor = getProcessor(event);
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
let req, requestContext;
|
|
96
|
+
try {
|
|
97
|
+
req = processor.createRequest(event);
|
|
98
|
+
requestContext = getRequestContext(event);
|
|
99
|
+
} catch (error) {
|
|
100
|
+
console.error("Error processing request:", error);
|
|
101
|
+
const errorResponse = error instanceof TypeError ? new Response("Invalid request", { status: 400 }) : new Response("Internal Server Error", { status: 500 });
|
|
102
|
+
return processor.createResult(event, errorResponse, { isContentTypeBinary });
|
|
103
|
+
}
|
|
97
104
|
const res = await app.fetch(req, {
|
|
98
105
|
event,
|
|
99
106
|
requestContext,
|
|
@@ -132,7 +139,9 @@ class EventProcessor {
|
|
|
132
139
|
method
|
|
133
140
|
};
|
|
134
141
|
if (event.body) {
|
|
135
|
-
|
|
142
|
+
const body = event.isBase64Encoded ? (0, import_encode.decodeBase64)(event.body) : new TextEncoder().encode(event.body);
|
|
143
|
+
requestInit.body = body;
|
|
144
|
+
headers.set("content-length", body.length.toString());
|
|
136
145
|
}
|
|
137
146
|
return new Request(url, requestInit);
|
|
138
147
|
}
|
|
@@ -230,21 +239,17 @@ class EventV1Processor extends EventProcessor {
|
|
|
230
239
|
getHeaders(event) {
|
|
231
240
|
const headers = new Headers();
|
|
232
241
|
this.getCookies(event, headers);
|
|
233
|
-
if (event.headers) {
|
|
234
|
-
for (const [k, v] of Object.entries(event.headers)) {
|
|
235
|
-
if (v) {
|
|
236
|
-
headers.set(k, sanitizeHeaderValue(v));
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
242
|
if (event.multiValueHeaders) {
|
|
241
243
|
for (const [k, values] of Object.entries(event.multiValueHeaders)) {
|
|
242
244
|
if (values) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
245
|
+
values.forEach((v) => headers.append(k, sanitizeHeaderValue(v)));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (event.headers) {
|
|
250
|
+
for (const [k, v] of Object.entries(event.headers)) {
|
|
251
|
+
if (v && !headers.has(k)) {
|
|
252
|
+
headers.set(k, sanitizeHeaderValue(v));
|
|
248
253
|
}
|
|
249
254
|
}
|
|
250
255
|
}
|
|
@@ -304,7 +309,7 @@ class ALBProcessor extends EventProcessor {
|
|
|
304
309
|
if (result.multiValueHeaders) {
|
|
305
310
|
result.multiValueHeaders["set-cookie"] = cookies;
|
|
306
311
|
} else {
|
|
307
|
-
result.headers["set-cookie"] = cookies
|
|
312
|
+
result.headers["set-cookie"] = cookies[0];
|
|
308
313
|
}
|
|
309
314
|
}
|
|
310
315
|
}
|
|
@@ -324,11 +329,7 @@ class LatticeV2Processor extends EventProcessor {
|
|
|
324
329
|
if (event.headers) {
|
|
325
330
|
for (const [k, values] of Object.entries(event.headers)) {
|
|
326
331
|
if (values) {
|
|
327
|
-
|
|
328
|
-
values.forEach((v) => {
|
|
329
|
-
const sanitizedValue = sanitizeHeaderValue(v);
|
|
330
|
-
return (!foundK || !foundK.includes(sanitizedValue)) && headers.append(k, sanitizedValue);
|
|
331
|
-
});
|
|
332
|
+
values.forEach((v) => headers.append(k, sanitizeHeaderValue(v)));
|
|
332
333
|
}
|
|
333
334
|
}
|
|
334
335
|
}
|
|
@@ -339,7 +340,7 @@ class LatticeV2Processor extends EventProcessor {
|
|
|
339
340
|
setCookiesToResult(result, cookies) {
|
|
340
341
|
result.headers = {
|
|
341
342
|
...result.headers,
|
|
342
|
-
"set-cookie": cookies
|
|
343
|
+
"set-cookie": cookies
|
|
343
344
|
};
|
|
344
345
|
}
|
|
345
346
|
}
|
|
@@ -363,7 +364,7 @@ const isProxyEventALB = (event) => {
|
|
|
363
364
|
return false;
|
|
364
365
|
};
|
|
365
366
|
const isProxyEventV2 = (event) => {
|
|
366
|
-
return Object.hasOwn(event, "rawPath");
|
|
367
|
+
return Object.hasOwn(event, "rawPath") && Object.hasOwn(event.requestContext ?? {}, "http");
|
|
367
368
|
};
|
|
368
369
|
const isLatticeEventV2 = (event) => {
|
|
369
370
|
if (event.requestContext) {
|
|
@@ -377,10 +378,7 @@ const defaultIsContentTypeBinary = (contentType) => {
|
|
|
377
378
|
);
|
|
378
379
|
};
|
|
379
380
|
const isContentEncodingBinary = (contentEncoding) => {
|
|
380
|
-
|
|
381
|
-
return false;
|
|
382
|
-
}
|
|
383
|
-
return /^(gzip|deflate|compress|br)/.test(contentEncoding);
|
|
381
|
+
return !!contentEncoding && !/^identity$/i.test(contentEncoding);
|
|
384
382
|
};
|
|
385
383
|
// Annotate the CommonJS export names for ESM import in node:
|
|
386
384
|
0 && (module.exports = {
|
|
@@ -23,7 +23,7 @@ module.exports = __toCommonJS(serve_static_exports);
|
|
|
23
23
|
var import_promises = require("node:fs/promises");
|
|
24
24
|
var import_node_path = require("node:path");
|
|
25
25
|
var import_serve_static = require("../../middleware/serve-static");
|
|
26
|
-
const serveStatic = (options) => {
|
|
26
|
+
const serveStatic = (options = {}) => {
|
|
27
27
|
return async function serveStatic2(c, next) {
|
|
28
28
|
const getContent = async (path) => {
|
|
29
29
|
const file = Bun.file(path);
|
|
@@ -48,7 +48,9 @@ const upgradeWebSocket = (0, import_websocket.defineWebSocketHelper)((c, events)
|
|
|
48
48
|
data: {
|
|
49
49
|
events,
|
|
50
50
|
url: new URL(c.req.url),
|
|
51
|
-
protocol
|
|
51
|
+
// The first requested subprotocol, exposed via WSContext.protocol to
|
|
52
|
+
// match the deno and cloudflare adapters.
|
|
53
|
+
protocol: c.req.header("sec-websocket-protocol")?.split(",")[0]?.trim() ?? ""
|
|
52
54
|
}
|
|
53
55
|
});
|
|
54
56
|
if (upgradeResult) {
|
|
@@ -22,7 +22,7 @@ __export(serve_static_exports, {
|
|
|
22
22
|
module.exports = __toCommonJS(serve_static_exports);
|
|
23
23
|
var import_serve_static = require("../../middleware/serve-static");
|
|
24
24
|
var import_utils = require("./utils");
|
|
25
|
-
const serveStatic = (options) => {
|
|
25
|
+
const serveStatic = (options = {}) => {
|
|
26
26
|
return async function serveStatic2(c, next) {
|
|
27
27
|
const getContent = async (path) => {
|
|
28
28
|
return (0, import_utils.getContentFromKVAsset)(path, {
|
|
@@ -23,7 +23,7 @@ module.exports = __toCommonJS(serve_static_exports);
|
|
|
23
23
|
var import_node_path = require("node:path");
|
|
24
24
|
var import_serve_static = require("../../middleware/serve-static");
|
|
25
25
|
const { open, lstatSync, errors } = Deno;
|
|
26
|
-
const serveStatic = (options) => {
|
|
26
|
+
const serveStatic = (options = {}) => {
|
|
27
27
|
return async function serveStatic2(c, next) {
|
|
28
28
|
const getContent = async (path) => {
|
|
29
29
|
try {
|
|
@@ -25,7 +25,11 @@ const upgradeWebSocket = (0, import_websocket.defineWebSocketHelper)(async (c, e
|
|
|
25
25
|
if (c.req.header("upgrade") !== "websocket") {
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
|
-
const
|
|
28
|
+
const subprotocol = c.req.header("sec-websocket-protocol")?.split(",")[0]?.trim();
|
|
29
|
+
const { response, socket } = Deno.upgradeWebSocket(c.req.raw, {
|
|
30
|
+
...subprotocol ? { protocol: subprotocol } : {},
|
|
31
|
+
...options
|
|
32
|
+
});
|
|
29
33
|
const wsContext = new import_websocket.WSContext({
|
|
30
34
|
close: (code, reason) => socket.close(code, reason),
|
|
31
35
|
get protocol() {
|
|
@@ -48,21 +48,31 @@ const convertHeaders = (headers) => {
|
|
|
48
48
|
const handle = (app) => {
|
|
49
49
|
return async (event, ...args) => {
|
|
50
50
|
const [context, callback] = args;
|
|
51
|
+
let callbackError = null;
|
|
52
|
+
let callbackResult;
|
|
51
53
|
const res = await app.fetch(createRequest(event), {
|
|
52
54
|
event,
|
|
53
55
|
context,
|
|
54
56
|
callback: (err, result) => {
|
|
57
|
+
if (!callbackError && !callbackResult) {
|
|
58
|
+
callbackError = err;
|
|
59
|
+
callbackResult = result;
|
|
60
|
+
}
|
|
55
61
|
callback?.(err, result);
|
|
56
62
|
},
|
|
57
63
|
config: event.Records[0].cf.config,
|
|
58
64
|
request: event.Records[0].cf.request,
|
|
59
65
|
response: event.Records[0].cf.response
|
|
60
66
|
});
|
|
61
|
-
|
|
67
|
+
if (callbackError) {
|
|
68
|
+
throw callbackError;
|
|
69
|
+
}
|
|
70
|
+
return callbackResult ?? createResult(res);
|
|
62
71
|
};
|
|
63
72
|
};
|
|
64
73
|
const createResult = async (res) => {
|
|
65
|
-
const
|
|
74
|
+
const contentEncoding = res.headers.get("content-encoding");
|
|
75
|
+
const isBase64Encoded = isContentTypeBinary(res.headers.get("content-type") || "") || !!contentEncoding && !/^identity$/i.test(contentEncoding);
|
|
66
76
|
const body = isBase64Encoded ? (0, import_encode.encodeBase64)(await res.arrayBuffer()) : await res.text();
|
|
67
77
|
return {
|
|
68
78
|
status: res.status.toString(),
|
|
@@ -78,11 +88,17 @@ const createRequest = (event) => {
|
|
|
78
88
|
const url = queryString ? `${urlPath}?${queryString}` : urlPath;
|
|
79
89
|
const headers = new Headers();
|
|
80
90
|
Object.entries(event.Records[0].cf.request.headers).forEach(([k, v]) => {
|
|
81
|
-
v.forEach((header) => headers.
|
|
91
|
+
v.forEach((header) => headers.append(k, header.value));
|
|
82
92
|
});
|
|
83
93
|
const requestBody = event.Records[0].cf.request.body;
|
|
84
94
|
const method = event.Records[0].cf.request.method;
|
|
85
|
-
const
|
|
95
|
+
const rawBody = createBody(method, requestBody);
|
|
96
|
+
let body = rawBody;
|
|
97
|
+
if (rawBody !== void 0) {
|
|
98
|
+
const bytes = typeof rawBody === "string" ? new TextEncoder().encode(rawBody) : rawBody;
|
|
99
|
+
body = bytes;
|
|
100
|
+
headers.set("content-length", bytes.length.toString());
|
|
101
|
+
}
|
|
86
102
|
return new Request(url, {
|
|
87
103
|
headers,
|
|
88
104
|
method,
|
|
@@ -184,7 +184,16 @@ const hc = (baseUrl, options) => createProxy(function proxyCallback(opts) {
|
|
|
184
184
|
});
|
|
185
185
|
if (method) {
|
|
186
186
|
options ??= {};
|
|
187
|
-
const
|
|
187
|
+
const reqOptions = { ...opts.args[1] };
|
|
188
|
+
const baseHeaders = options.headers;
|
|
189
|
+
const reqHeaders = reqOptions.headers;
|
|
190
|
+
if (baseHeaders && reqHeaders) {
|
|
191
|
+
reqOptions.headers = async () => ({
|
|
192
|
+
...typeof baseHeaders === "function" ? await baseHeaders() : baseHeaders,
|
|
193
|
+
...typeof reqHeaders === "function" ? await reqHeaders() : reqHeaders
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
const args = (0, import_utils.deepMerge)(options, reqOptions);
|
|
188
197
|
return req.fetch(opts.args[0], args);
|
|
189
198
|
}
|
|
190
199
|
return req;
|
package/dist/cjs/client/utils.js
CHANGED
|
@@ -36,7 +36,7 @@ const mergePath = (base, path) => {
|
|
|
36
36
|
};
|
|
37
37
|
const replaceUrlParam = (urlString, params) => {
|
|
38
38
|
for (const [k, v] of Object.entries(params)) {
|
|
39
|
-
const reg = new RegExp("/:" + k + "(?:{[^/]+})?\\??");
|
|
39
|
+
const reg = new RegExp("/:" + k + "(?:{[^/]+})?\\??(?=/|$)");
|
|
40
40
|
urlString = urlString.replace(reg, v ? `/${v}` : "");
|
|
41
41
|
}
|
|
42
42
|
return urlString;
|
|
@@ -61,6 +61,7 @@ const normalizeLabel = (label) => {
|
|
|
61
61
|
return label.trim().replace(/\s+/g, "-");
|
|
62
62
|
};
|
|
63
63
|
const isValidClassName = (name) => /^-?[_a-zA-Z][_a-zA-Z0-9-]*$/.test(name);
|
|
64
|
+
const hasUnsafeSelectorChar = (name) => /[<{}]/.test(name);
|
|
64
65
|
const RESERVED_KEYFRAME_NAMES = /* @__PURE__ */ new Set([
|
|
65
66
|
"default",
|
|
66
67
|
"inherit",
|
|
@@ -198,7 +199,8 @@ const cxCommon = (args) => {
|
|
|
198
199
|
[CLASS_NAME]: "",
|
|
199
200
|
[STYLE_STRING]: "",
|
|
200
201
|
[SELECTORS]: [],
|
|
201
|
-
|
|
202
|
+
// drop names that are unsafe to emit as a selector
|
|
203
|
+
[EXTERNAL_CLASS_NAMES]: hasUnsafeSelectorChar(arg) ? [] : [arg]
|
|
202
204
|
};
|
|
203
205
|
}
|
|
204
206
|
}
|
|
@@ -29,6 +29,7 @@ module.exports = __toCommonJS(css_exports);
|
|
|
29
29
|
var import_html = require("../../helper/html");
|
|
30
30
|
var import_constants = require("../../jsx/constants");
|
|
31
31
|
var import_css = require("../../jsx/dom/css");
|
|
32
|
+
var import_html2 = require("../../utils/html");
|
|
32
33
|
var import_common = require("./common");
|
|
33
34
|
var import_common2 = require("./common");
|
|
34
35
|
const createCssContext = ({
|
|
@@ -88,7 +89,14 @@ const createCssContext = ({
|
|
|
88
89
|
}
|
|
89
90
|
return Promise.resolve((0, import_html.raw)("", [appendStyle]));
|
|
90
91
|
};
|
|
91
|
-
const
|
|
92
|
+
const rawClassName = cssClassName[import_common.CLASS_NAME];
|
|
93
|
+
let escapedClassName = rawClassName;
|
|
94
|
+
if (/[&<>'"]/.test(rawClassName)) {
|
|
95
|
+
const escapedBuffer = [""];
|
|
96
|
+
(0, import_html2.escapeToBuffer)(rawClassName, escapedBuffer);
|
|
97
|
+
escapedClassName = escapedBuffer[0];
|
|
98
|
+
}
|
|
99
|
+
const className = new String(escapedClassName);
|
|
92
100
|
Object.assign(className, cssClassName);
|
|
93
101
|
className.isEscaped = true;
|
|
94
102
|
className.callbacks = [addClassNameToContext];
|
|
@@ -69,6 +69,8 @@ const defaultExtensionMap = {
|
|
|
69
69
|
"text/html": "html",
|
|
70
70
|
"text/xml": "xml",
|
|
71
71
|
"application/xml": "xml",
|
|
72
|
+
"application/atom+xml": "xml",
|
|
73
|
+
"application/rss+xml": "xml",
|
|
72
74
|
"application/yaml": "yaml"
|
|
73
75
|
};
|
|
74
76
|
const determineExtension = (mimeType, userExtensionMap) => {
|
|
@@ -33,16 +33,17 @@ class SSEStreamingApi extends import_stream.StreamingApi {
|
|
|
33
33
|
const dataLines = data.split(/\r\n|\r|\n/).map((line) => {
|
|
34
34
|
return `data: ${line}`;
|
|
35
35
|
}).join("\n");
|
|
36
|
-
for (const key of ["event", "id"
|
|
37
|
-
|
|
36
|
+
for (const key of ["event", "id"]) {
|
|
37
|
+
const value = message[key];
|
|
38
|
+
if (value && /[\r\n]/.test(value)) {
|
|
38
39
|
throw new Error(`${key} must not contain "\\r" or "\\n"`);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
const sseData = [
|
|
42
43
|
message.event && `event: ${message.event}`,
|
|
43
44
|
dataLines,
|
|
44
|
-
message.id && `id: ${message.id}`,
|
|
45
|
-
message.retry && `retry: ${message.retry}`
|
|
45
|
+
message.id !== void 0 && `id: ${message.id}`,
|
|
46
|
+
message.retry !== void 0 && `retry: ${message.retry}`
|
|
46
47
|
].filter(Boolean).join("\n") + "\n\n";
|
|
47
48
|
await this.write(sseData);
|
|
48
49
|
}
|
package/dist/cjs/hono-base.js
CHANGED
|
@@ -139,7 +139,7 @@ class Hono {
|
|
|
139
139
|
handler = async (c, next) => (await (0, import_compose.compose)([], app.errorHandler)(c, () => r.handler(c, next))).res;
|
|
140
140
|
handler[import_constants.COMPOSED_HANDLER] = r.handler;
|
|
141
141
|
}
|
|
142
|
-
subApp.#addRoute(r.method, r.path, handler);
|
|
142
|
+
subApp.#addRoute(r.method, r.path, handler, r.basePath);
|
|
143
143
|
});
|
|
144
144
|
return this;
|
|
145
145
|
}
|
|
@@ -263,7 +263,7 @@ class Hono {
|
|
|
263
263
|
const pathPrefixLength = mergedPath === "/" ? 0 : mergedPath.length;
|
|
264
264
|
return (request) => {
|
|
265
265
|
const url = new URL(request.url);
|
|
266
|
-
url.pathname =
|
|
266
|
+
url.pathname = this.getPath(request).slice(pathPrefixLength) || "/";
|
|
267
267
|
return new Request(url, request);
|
|
268
268
|
};
|
|
269
269
|
})();
|
|
@@ -277,10 +277,15 @@ class Hono {
|
|
|
277
277
|
this.#addRoute(import_router.METHOD_NAME_ALL, (0, import_url.mergePath)(path, "*"), handler);
|
|
278
278
|
return this;
|
|
279
279
|
}
|
|
280
|
-
#addRoute(method, path, handler) {
|
|
280
|
+
#addRoute(method, path, handler, baseRoutePath) {
|
|
281
281
|
method = method.toUpperCase();
|
|
282
282
|
path = (0, import_url.mergePath)(this._basePath, path);
|
|
283
|
-
const r = {
|
|
283
|
+
const r = {
|
|
284
|
+
basePath: baseRoutePath !== void 0 ? (0, import_url.mergePath)(this._basePath, baseRoutePath) : this._basePath,
|
|
285
|
+
path,
|
|
286
|
+
method,
|
|
287
|
+
handler
|
|
288
|
+
};
|
|
284
289
|
this.router.add(method, path, [handler, r]);
|
|
285
290
|
this.routes.push(r);
|
|
286
291
|
}
|
package/dist/cjs/index.js
CHANGED
|
@@ -17,11 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
18
|
var index_exports = {};
|
|
19
19
|
__export(index_exports, {
|
|
20
|
+
Context: () => import_context.Context,
|
|
20
21
|
Hono: () => import_hono.Hono
|
|
21
22
|
});
|
|
22
23
|
module.exports = __toCommonJS(index_exports);
|
|
23
24
|
var import_hono = require("./hono");
|
|
25
|
+
var import_context = require("./context");
|
|
24
26
|
// Annotate the CommonJS export names for ESM import in node:
|
|
25
27
|
0 && (module.exports = {
|
|
28
|
+
Context,
|
|
26
29
|
Hono
|
|
27
30
|
});
|