hono 3.7.5 → 3.7.6
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/cjs/hono-base.js +2 -2
- package/dist/cjs/test-utils/setup-vitest.js +41 -0
- package/dist/cjs/validator/validator.js +27 -11
- package/dist/hono-base.js +2 -2
- package/dist/test-utils/setup-vitest.js +23 -0
- package/dist/types/test-utils/setup-vitest.d.ts +1 -0
- package/dist/validator/validator.js +27 -11
- package/package.json +1 -2
package/dist/cjs/hono-base.js
CHANGED
|
@@ -230,12 +230,12 @@ class Hono extends defineDynamicClass() {
|
|
|
230
230
|
} catch (err) {
|
|
231
231
|
return this.handleError(err, c);
|
|
232
232
|
}
|
|
233
|
-
if (res
|
|
233
|
+
if (res instanceof Response)
|
|
234
234
|
return res;
|
|
235
235
|
if ("response" in res) {
|
|
236
236
|
res = res.response;
|
|
237
237
|
}
|
|
238
|
-
if (res
|
|
238
|
+
if (res instanceof Response)
|
|
239
239
|
return res;
|
|
240
240
|
return (async () => {
|
|
241
241
|
let awaited;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
+
for (let key of __getOwnPropNames(from))
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
12
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
+
}
|
|
14
|
+
return to;
|
|
15
|
+
};
|
|
16
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
18
|
+
mod
|
|
19
|
+
));
|
|
20
|
+
var import_node_crypto = __toESM(require("node:crypto"), 1);
|
|
21
|
+
var import_vitest = require("vitest");
|
|
22
|
+
import_vitest.vi.stubGlobal("crypto", import_node_crypto.default);
|
|
23
|
+
class MockCache {
|
|
24
|
+
constructor(name, store) {
|
|
25
|
+
this.name = name;
|
|
26
|
+
this.store = store;
|
|
27
|
+
}
|
|
28
|
+
async match(key) {
|
|
29
|
+
return this.store.get(key) || null;
|
|
30
|
+
}
|
|
31
|
+
async put(key, response) {
|
|
32
|
+
this.store.set(key, response);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const globalStore = /* @__PURE__ */ new Map();
|
|
36
|
+
const caches = {
|
|
37
|
+
open: (name) => {
|
|
38
|
+
return new MockCache(name, globalStore);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
import_vitest.vi.stubGlobal("caches", caches);
|
|
@@ -29,6 +29,10 @@ const validator = (target, validationFunc) => {
|
|
|
29
29
|
switch (target) {
|
|
30
30
|
case "json":
|
|
31
31
|
try {
|
|
32
|
+
const contentType = c.req.header("Content-Type");
|
|
33
|
+
if (!contentType || !contentType.startsWith("application/json")) {
|
|
34
|
+
throw new Error(`Invalid HTTP header: Content-Type=${contentType}`);
|
|
35
|
+
}
|
|
32
36
|
const arrayBuffer = c.req.bodyCache.arrayBuffer ?? await c.req.raw.arrayBuffer();
|
|
33
37
|
value = await new Response(arrayBuffer).json();
|
|
34
38
|
c.req.bodyCache.json = value;
|
|
@@ -45,17 +49,29 @@ const validator = (target, validationFunc) => {
|
|
|
45
49
|
}
|
|
46
50
|
break;
|
|
47
51
|
case "form": {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
try {
|
|
53
|
+
const contentType = c.req.header("Content-Type");
|
|
54
|
+
if (contentType) {
|
|
55
|
+
const arrayBuffer = c.req.bodyCache.arrayBuffer ?? await c.req.raw.arrayBuffer();
|
|
56
|
+
const formData = await (0, import_buffer.bufferToFormData)(arrayBuffer, contentType);
|
|
57
|
+
const form = {};
|
|
58
|
+
formData.forEach((value2, key) => {
|
|
59
|
+
form[key] = value2;
|
|
60
|
+
});
|
|
61
|
+
value = form;
|
|
62
|
+
c.req.bodyCache.formData = formData;
|
|
63
|
+
c.req.bodyCache.arrayBuffer = arrayBuffer;
|
|
64
|
+
}
|
|
65
|
+
} catch (e) {
|
|
66
|
+
let message = "Malformed FormData request.";
|
|
67
|
+
message += e instanceof Error ? ` ${e.message}` : ` ${String(e)}`;
|
|
68
|
+
return c.json(
|
|
69
|
+
{
|
|
70
|
+
success: false,
|
|
71
|
+
message
|
|
72
|
+
},
|
|
73
|
+
400
|
|
74
|
+
);
|
|
59
75
|
}
|
|
60
76
|
break;
|
|
61
77
|
}
|
package/dist/hono-base.js
CHANGED
|
@@ -208,12 +208,12 @@ var Hono = class extends defineDynamicClass() {
|
|
|
208
208
|
} catch (err) {
|
|
209
209
|
return this.handleError(err, c);
|
|
210
210
|
}
|
|
211
|
-
if (res
|
|
211
|
+
if (res instanceof Response)
|
|
212
212
|
return res;
|
|
213
213
|
if ("response" in res) {
|
|
214
214
|
res = res.response;
|
|
215
215
|
}
|
|
216
|
-
if (res
|
|
216
|
+
if (res instanceof Response)
|
|
217
217
|
return res;
|
|
218
218
|
return (async () => {
|
|
219
219
|
let awaited;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// src/test-utils/setup-vitest.ts
|
|
2
|
+
import crypto from "node:crypto";
|
|
3
|
+
import { vi } from "vitest";
|
|
4
|
+
vi.stubGlobal("crypto", crypto);
|
|
5
|
+
var MockCache = class {
|
|
6
|
+
constructor(name, store) {
|
|
7
|
+
this.name = name;
|
|
8
|
+
this.store = store;
|
|
9
|
+
}
|
|
10
|
+
async match(key) {
|
|
11
|
+
return this.store.get(key) || null;
|
|
12
|
+
}
|
|
13
|
+
async put(key, response) {
|
|
14
|
+
this.store.set(key, response);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var globalStore = /* @__PURE__ */ new Map();
|
|
18
|
+
var caches = {
|
|
19
|
+
open: (name) => {
|
|
20
|
+
return new MockCache(name, globalStore);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
vi.stubGlobal("caches", caches);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -7,6 +7,10 @@ var validator = (target, validationFunc) => {
|
|
|
7
7
|
switch (target) {
|
|
8
8
|
case "json":
|
|
9
9
|
try {
|
|
10
|
+
const contentType = c.req.header("Content-Type");
|
|
11
|
+
if (!contentType || !contentType.startsWith("application/json")) {
|
|
12
|
+
throw new Error(`Invalid HTTP header: Content-Type=${contentType}`);
|
|
13
|
+
}
|
|
10
14
|
const arrayBuffer = c.req.bodyCache.arrayBuffer ?? await c.req.raw.arrayBuffer();
|
|
11
15
|
value = await new Response(arrayBuffer).json();
|
|
12
16
|
c.req.bodyCache.json = value;
|
|
@@ -23,17 +27,29 @@ var validator = (target, validationFunc) => {
|
|
|
23
27
|
}
|
|
24
28
|
break;
|
|
25
29
|
case "form": {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
try {
|
|
31
|
+
const contentType = c.req.header("Content-Type");
|
|
32
|
+
if (contentType) {
|
|
33
|
+
const arrayBuffer = c.req.bodyCache.arrayBuffer ?? await c.req.raw.arrayBuffer();
|
|
34
|
+
const formData = await bufferToFormData(arrayBuffer, contentType);
|
|
35
|
+
const form = {};
|
|
36
|
+
formData.forEach((value2, key) => {
|
|
37
|
+
form[key] = value2;
|
|
38
|
+
});
|
|
39
|
+
value = form;
|
|
40
|
+
c.req.bodyCache.formData = formData;
|
|
41
|
+
c.req.bodyCache.arrayBuffer = arrayBuffer;
|
|
42
|
+
}
|
|
43
|
+
} catch (e) {
|
|
44
|
+
let message = "Malformed FormData request.";
|
|
45
|
+
message += e instanceof Error ? ` ${e.message}` : ` ${String(e)}`;
|
|
46
|
+
return c.json(
|
|
47
|
+
{
|
|
48
|
+
success: false,
|
|
49
|
+
message
|
|
50
|
+
},
|
|
51
|
+
400
|
|
52
|
+
);
|
|
37
53
|
}
|
|
38
54
|
break;
|
|
39
55
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hono",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.6",
|
|
4
4
|
"description": "Ultrafast web framework for the Edges",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -431,7 +431,6 @@
|
|
|
431
431
|
"tsx": "^3.11.0",
|
|
432
432
|
"typescript": "^4.8.3",
|
|
433
433
|
"vitest": "^0.34.3",
|
|
434
|
-
"vitest-environment-miniflare": "^2.14.1",
|
|
435
434
|
"wrangler": "^2.12.0",
|
|
436
435
|
"zod": "^3.20.2"
|
|
437
436
|
},
|