hono 4.0.10 → 4.1.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/dist/adapter/aws-lambda/handler.js +1 -1
- package/dist/adapter/bun/index.js +2 -0
- package/dist/adapter/bun/websocket.js +77 -0
- package/dist/adapter/cloudflare-workers/index.js +3 -1
- package/dist/adapter/cloudflare-workers/websocket.js +57 -0
- package/dist/adapter/deno/index.js +3 -1
- package/dist/adapter/deno/websocket.js +29 -0
- package/dist/adapter/lambda-edge/handler.js +1 -1
- package/dist/cjs/adapter/aws-lambda/handler.js +1 -1
- package/dist/cjs/adapter/bun/index.js +3 -0
- package/dist/cjs/adapter/bun/websocket.js +98 -0
- package/dist/cjs/adapter/cloudflare-workers/index.js +5 -2
- package/dist/cjs/adapter/cloudflare-workers/websocket.js +80 -0
- package/dist/cjs/adapter/deno/index.js +5 -2
- package/dist/cjs/adapter/deno/websocket.js +52 -0
- package/dist/cjs/adapter/lambda-edge/handler.js +1 -1
- package/dist/cjs/client/client.js +68 -61
- package/dist/cjs/context.js +164 -188
- package/dist/cjs/helper/adapter/index.js +1 -1
- package/dist/cjs/helper/cookie/index.js +48 -8
- package/dist/cjs/helper/dev/index.js +3 -4
- package/dist/cjs/helper/factory/index.js +1 -3
- package/dist/cjs/helper/ssg/index.js +9 -159
- package/dist/cjs/helper/ssg/middleware.js +57 -0
- package/dist/cjs/helper/ssg/ssg.js +212 -0
- package/dist/cjs/helper/websocket/index.js +32 -0
- package/dist/cjs/helper.js +1 -0
- package/dist/cjs/hono-base.js +46 -65
- package/dist/cjs/http-exception.js +3 -1
- package/dist/cjs/jsx/base.js +7 -2
- package/dist/cjs/jsx/components.js +1 -1
- package/dist/cjs/jsx/dom/index.js +45 -3
- package/dist/cjs/jsx/dom/render.js +6 -6
- package/dist/cjs/jsx/hooks/index.js +25 -16
- package/dist/cjs/jsx/index.js +34 -2
- package/dist/cjs/middleware/body-limit/index.js +80 -0
- package/dist/cjs/middleware/logger/index.js +9 -7
- package/dist/cjs/request.js +29 -48
- package/dist/cjs/router/linear-router/router.js +3 -5
- package/dist/cjs/router/pattern-router/router.js +2 -4
- package/dist/cjs/router/reg-exp-router/node.js +3 -3
- package/dist/cjs/router/reg-exp-router/router.js +11 -12
- package/dist/cjs/router/reg-exp-router/trie.js +2 -4
- package/dist/cjs/router/smart-router/router.js +3 -3
- package/dist/cjs/router/trie-router/node.js +6 -2
- package/dist/cjs/router/trie-router/router.js +2 -1
- package/dist/cjs/test-utils/setup-vitest.js +2 -0
- package/dist/cjs/utils/color.js +32 -0
- package/dist/cjs/utils/concurrent.js +62 -0
- package/dist/cjs/utils/cookie.js +28 -1
- package/dist/cjs/utils/stream.js +5 -1
- package/dist/cjs/utils/url.js +2 -2
- package/dist/client/client.js +68 -61
- package/dist/context.js +164 -189
- package/dist/helper/adapter/index.js +1 -1
- package/dist/helper/cookie/index.js +48 -8
- package/dist/helper/dev/index.js +3 -4
- package/dist/helper/factory/index.js +1 -3
- package/dist/helper/ssg/index.js +3 -151
- package/dist/helper/ssg/middleware.js +29 -0
- package/dist/helper/ssg/ssg.js +187 -0
- package/dist/helper/websocket/index.js +9 -0
- package/dist/helper.js +1 -0
- package/dist/hono-base.js +45 -65
- package/dist/http-exception.js +3 -1
- package/dist/jsx/base.js +7 -2
- package/dist/jsx/components.js +1 -1
- package/dist/jsx/dom/index.js +44 -4
- package/dist/jsx/dom/render.js +6 -6
- package/dist/jsx/hooks/index.js +23 -16
- package/dist/jsx/index.js +34 -3
- package/dist/middleware/body-limit/index.js +57 -0
- package/dist/middleware/logger/index.js +9 -7
- package/dist/request.js +29 -49
- package/dist/router/linear-router/router.js +3 -5
- package/dist/router/pattern-router/router.js +2 -4
- package/dist/router/reg-exp-router/node.js +3 -3
- package/dist/router/reg-exp-router/router.js +11 -12
- package/dist/router/reg-exp-router/trie.js +2 -4
- package/dist/router/smart-router/router.js +3 -3
- package/dist/router/trie-router/node.js +6 -2
- package/dist/router/trie-router/router.js +2 -1
- package/dist/test-utils/setup-vitest.js +2 -0
- package/dist/types/adapter/bun/index.d.ts +1 -0
- package/dist/types/adapter/bun/websocket.d.ts +26 -0
- package/dist/types/adapter/cloudflare-workers/index.d.ts +1 -0
- package/dist/types/adapter/cloudflare-workers/websocket.d.ts +2 -0
- package/dist/types/adapter/deno/index.d.ts +1 -0
- package/dist/types/adapter/deno/websocket.d.ts +2 -0
- package/dist/types/client/types.d.ts +9 -0
- package/dist/types/helper/cookie/index.d.ts +3 -1
- package/dist/types/helper/ssg/index.d.ts +2 -105
- package/dist/types/helper/ssg/middleware.d.ts +38 -0
- package/dist/types/helper/ssg/ssg.d.ts +70 -0
- package/dist/types/helper/websocket/index.d.ts +34 -0
- package/dist/types/http-exception.d.ts +1 -0
- package/dist/types/jsx/dom/index.d.ts +40 -7
- package/dist/types/jsx/hooks/index.d.ts +2 -0
- package/dist/types/jsx/index.d.ts +41 -5
- package/dist/types/middleware/body-limit/index.d.ts +28 -0
- package/dist/types/utils/color.d.ts +1 -0
- package/dist/types/utils/concurrent.d.ts +7 -0
- package/dist/types/utils/cookie.d.ts +2 -0
- package/dist/utils/color.js +9 -0
- package/dist/utils/concurrent.js +39 -0
- package/dist/utils/cookie.js +28 -1
- package/dist/utils/stream.js +5 -1
- package/dist/utils/url.js +2 -2
- package/package.json +18 -2
|
@@ -42,76 +42,79 @@ const createProxy = (callback, path) => {
|
|
|
42
42
|
return proxy;
|
|
43
43
|
};
|
|
44
44
|
class ClientRequestImpl {
|
|
45
|
+
url;
|
|
46
|
+
method;
|
|
47
|
+
queryParams = void 0;
|
|
48
|
+
pathParams = {};
|
|
49
|
+
rBody;
|
|
50
|
+
cType = void 0;
|
|
45
51
|
constructor(url, method) {
|
|
46
|
-
this.
|
|
47
|
-
this.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
this.queryParams || (this.queryParams = new URLSearchParams());
|
|
57
|
-
if (Array.isArray(v)) {
|
|
58
|
-
for (const v2 of v) {
|
|
59
|
-
this.queryParams.append(k, v2);
|
|
60
|
-
}
|
|
61
|
-
} else {
|
|
62
|
-
this.queryParams.set(k, v);
|
|
63
|
-
}
|
|
52
|
+
this.url = url;
|
|
53
|
+
this.method = method;
|
|
54
|
+
}
|
|
55
|
+
fetch = (args, opt) => {
|
|
56
|
+
if (args) {
|
|
57
|
+
if (args.query) {
|
|
58
|
+
for (const [k, v] of Object.entries(args.query)) {
|
|
59
|
+
if (v === void 0) {
|
|
60
|
+
continue;
|
|
64
61
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
62
|
+
this.queryParams ||= new URLSearchParams();
|
|
63
|
+
if (Array.isArray(v)) {
|
|
64
|
+
for (const v2 of v) {
|
|
65
|
+
this.queryParams.append(k, v2);
|
|
66
|
+
}
|
|
67
|
+
} else {
|
|
68
|
+
this.queryParams.set(k, v);
|
|
70
69
|
}
|
|
71
|
-
this.rBody = form;
|
|
72
|
-
}
|
|
73
|
-
if (args.json) {
|
|
74
|
-
this.rBody = JSON.stringify(args.json);
|
|
75
|
-
this.cType = "application/json";
|
|
76
|
-
}
|
|
77
|
-
if (args.param) {
|
|
78
|
-
this.pathParams = args.param;
|
|
79
70
|
}
|
|
80
71
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
...opt?.headers ? opt.headers : {}
|
|
86
|
-
};
|
|
87
|
-
if (args?.cookie) {
|
|
88
|
-
const cookies = [];
|
|
89
|
-
for (const [key, value] of Object.entries(args.cookie)) {
|
|
90
|
-
cookies.push((0, import_cookie.serialize)(key, value, { path: "/" }));
|
|
72
|
+
if (args.form) {
|
|
73
|
+
const form = new FormData();
|
|
74
|
+
for (const [k, v] of Object.entries(args.form)) {
|
|
75
|
+
form.append(k, v);
|
|
91
76
|
}
|
|
92
|
-
|
|
77
|
+
this.rBody = form;
|
|
93
78
|
}
|
|
94
|
-
if (
|
|
95
|
-
|
|
79
|
+
if (args.json) {
|
|
80
|
+
this.rBody = JSON.stringify(args.json);
|
|
81
|
+
this.cType = "application/json";
|
|
96
82
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
url = (0, import_utils.removeIndexString)(url);
|
|
100
|
-
url = (0, import_utils.replaceUrlParam)(url, this.pathParams);
|
|
101
|
-
if (this.queryParams) {
|
|
102
|
-
url = url + "?" + this.queryParams.toString();
|
|
83
|
+
if (args.param) {
|
|
84
|
+
this.pathParams = args.param;
|
|
103
85
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
});
|
|
86
|
+
}
|
|
87
|
+
let methodUpperCase = this.method.toUpperCase();
|
|
88
|
+
let setBody = !(methodUpperCase === "GET" || methodUpperCase === "HEAD");
|
|
89
|
+
const headerValues = {
|
|
90
|
+
...args?.header ?? {},
|
|
91
|
+
...opt?.headers ? opt.headers : {}
|
|
111
92
|
};
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
93
|
+
if (args?.cookie) {
|
|
94
|
+
const cookies = [];
|
|
95
|
+
for (const [key, value] of Object.entries(args.cookie)) {
|
|
96
|
+
cookies.push((0, import_cookie.serialize)(key, value, { path: "/" }));
|
|
97
|
+
}
|
|
98
|
+
headerValues["Cookie"] = cookies.join(",");
|
|
99
|
+
}
|
|
100
|
+
if (this.cType) {
|
|
101
|
+
headerValues["Content-Type"] = this.cType;
|
|
102
|
+
}
|
|
103
|
+
const headers = new Headers(headerValues ?? void 0);
|
|
104
|
+
let url = this.url;
|
|
105
|
+
url = (0, import_utils.removeIndexString)(url);
|
|
106
|
+
url = (0, import_utils.replaceUrlParam)(url, this.pathParams);
|
|
107
|
+
if (this.queryParams) {
|
|
108
|
+
url = url + "?" + this.queryParams.toString();
|
|
109
|
+
}
|
|
110
|
+
methodUpperCase = this.method.toUpperCase();
|
|
111
|
+
setBody = !(methodUpperCase === "GET" || methodUpperCase === "HEAD");
|
|
112
|
+
return (opt?.fetch || fetch)(url, {
|
|
113
|
+
body: setBody ? this.rBody : void 0,
|
|
114
|
+
method: methodUpperCase,
|
|
115
|
+
headers
|
|
116
|
+
});
|
|
117
|
+
};
|
|
115
118
|
}
|
|
116
119
|
const hc = (baseUrl, options) => createProxy((opts) => {
|
|
117
120
|
const parts = [...opts.path];
|
|
@@ -130,9 +133,13 @@ const hc = (baseUrl, options) => createProxy((opts) => {
|
|
|
130
133
|
}
|
|
131
134
|
return new URL(url);
|
|
132
135
|
}
|
|
136
|
+
if (method === "ws") {
|
|
137
|
+
const targetUrl = opts.args[0] && opts.args[0].param ? (0, import_utils.replaceUrlParam)(url, opts.args[0].param) : url;
|
|
138
|
+
return new WebSocket(targetUrl);
|
|
139
|
+
}
|
|
133
140
|
const req = new ClientRequestImpl(url, method);
|
|
134
141
|
if (method) {
|
|
135
|
-
options
|
|
142
|
+
options ??= {};
|
|
136
143
|
const args = (0, import_utils.deepMerge)(options, { ...opts.args[1] ?? {} });
|
|
137
144
|
return req.fetch(opts.args[0], args);
|
|
138
145
|
}
|
package/dist/cjs/context.js
CHANGED
|
@@ -16,24 +16,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var __accessCheck = (obj, member, msg) => {
|
|
20
|
-
if (!member.has(obj))
|
|
21
|
-
throw TypeError("Cannot " + msg);
|
|
22
|
-
};
|
|
23
|
-
var __privateGet = (obj, member, getter) => {
|
|
24
|
-
__accessCheck(obj, member, "read from private field");
|
|
25
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
26
|
-
};
|
|
27
|
-
var __privateAdd = (obj, member, value) => {
|
|
28
|
-
if (member.has(obj))
|
|
29
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
30
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
31
|
-
};
|
|
32
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
33
|
-
__accessCheck(obj, member, "write to private field");
|
|
34
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
35
|
-
return value;
|
|
36
|
-
};
|
|
37
19
|
var context_exports = {};
|
|
38
20
|
__export(context_exports, {
|
|
39
21
|
Context: () => Context,
|
|
@@ -41,163 +23,30 @@ __export(context_exports, {
|
|
|
41
23
|
});
|
|
42
24
|
module.exports = __toCommonJS(context_exports);
|
|
43
25
|
var import_html = require("./utils/html");
|
|
44
|
-
var _status, _executionCtx, _headers, _preparedHeaders, _res, _isFresh;
|
|
45
26
|
const TEXT_PLAIN = "text/plain; charset=UTF-8";
|
|
46
27
|
const setHeaders = (headers, map = {}) => {
|
|
47
28
|
Object.entries(map).forEach(([key, value]) => headers.set(key, value));
|
|
48
29
|
return headers;
|
|
49
30
|
};
|
|
50
31
|
class Context {
|
|
32
|
+
req;
|
|
33
|
+
env = {};
|
|
34
|
+
_var = {};
|
|
35
|
+
finalized = false;
|
|
36
|
+
error = void 0;
|
|
37
|
+
#status = 200;
|
|
38
|
+
#executionCtx;
|
|
39
|
+
#headers = void 0;
|
|
40
|
+
#preparedHeaders = void 0;
|
|
41
|
+
#res;
|
|
42
|
+
#isFresh = true;
|
|
43
|
+
layout = void 0;
|
|
44
|
+
renderer = (content) => this.html(content);
|
|
45
|
+
notFoundHandler = () => new Response();
|
|
51
46
|
constructor(req, options) {
|
|
52
|
-
this.env = {};
|
|
53
|
-
this._var = {};
|
|
54
|
-
this.finalized = false;
|
|
55
|
-
this.error = void 0;
|
|
56
|
-
__privateAdd(this, _status, 200);
|
|
57
|
-
__privateAdd(this, _executionCtx, void 0);
|
|
58
|
-
__privateAdd(this, _headers, void 0);
|
|
59
|
-
__privateAdd(this, _preparedHeaders, void 0);
|
|
60
|
-
__privateAdd(this, _res, void 0);
|
|
61
|
-
__privateAdd(this, _isFresh, true);
|
|
62
|
-
this.layout = void 0;
|
|
63
|
-
this.renderer = (content) => this.html(content);
|
|
64
|
-
this.notFoundHandler = () => new Response();
|
|
65
|
-
this.render = (...args) => this.renderer(...args);
|
|
66
|
-
this.setLayout = (layout) => this.layout = layout;
|
|
67
|
-
this.getLayout = () => this.layout;
|
|
68
|
-
this.setRenderer = (renderer) => {
|
|
69
|
-
this.renderer = renderer;
|
|
70
|
-
};
|
|
71
|
-
this.header = (name, value, options) => {
|
|
72
|
-
if (value === void 0) {
|
|
73
|
-
if (__privateGet(this, _headers)) {
|
|
74
|
-
__privateGet(this, _headers).delete(name);
|
|
75
|
-
} else if (__privateGet(this, _preparedHeaders)) {
|
|
76
|
-
delete __privateGet(this, _preparedHeaders)[name.toLocaleLowerCase()];
|
|
77
|
-
}
|
|
78
|
-
if (this.finalized) {
|
|
79
|
-
this.res.headers.delete(name);
|
|
80
|
-
}
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
if (options?.append) {
|
|
84
|
-
if (!__privateGet(this, _headers)) {
|
|
85
|
-
__privateSet(this, _isFresh, false);
|
|
86
|
-
__privateSet(this, _headers, new Headers(__privateGet(this, _preparedHeaders)));
|
|
87
|
-
__privateSet(this, _preparedHeaders, {});
|
|
88
|
-
}
|
|
89
|
-
__privateGet(this, _headers).append(name, value);
|
|
90
|
-
} else {
|
|
91
|
-
if (__privateGet(this, _headers)) {
|
|
92
|
-
__privateGet(this, _headers).set(name, value);
|
|
93
|
-
} else {
|
|
94
|
-
__privateGet(this, _preparedHeaders) ?? __privateSet(this, _preparedHeaders, {});
|
|
95
|
-
__privateGet(this, _preparedHeaders)[name.toLowerCase()] = value;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
if (this.finalized) {
|
|
99
|
-
if (options?.append) {
|
|
100
|
-
this.res.headers.append(name, value);
|
|
101
|
-
} else {
|
|
102
|
-
this.res.headers.set(name, value);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
this.status = (status) => {
|
|
107
|
-
__privateSet(this, _isFresh, false);
|
|
108
|
-
__privateSet(this, _status, status);
|
|
109
|
-
};
|
|
110
|
-
this.set = (key, value) => {
|
|
111
|
-
this._var ?? (this._var = {});
|
|
112
|
-
this._var[key] = value;
|
|
113
|
-
};
|
|
114
|
-
this.get = (key) => {
|
|
115
|
-
return this._var ? this._var[key] : void 0;
|
|
116
|
-
};
|
|
117
|
-
this.newResponse = (data, arg, headers) => {
|
|
118
|
-
if (__privateGet(this, _isFresh) && !headers && !arg && __privateGet(this, _status) === 200) {
|
|
119
|
-
return new Response(data, {
|
|
120
|
-
headers: __privateGet(this, _preparedHeaders)
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
if (arg && typeof arg !== "number") {
|
|
124
|
-
const headers2 = setHeaders(new Headers(arg.headers), __privateGet(this, _preparedHeaders));
|
|
125
|
-
return new Response(data, {
|
|
126
|
-
headers: headers2,
|
|
127
|
-
status: arg.status ?? __privateGet(this, _status)
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
const status = typeof arg === "number" ? arg : __privateGet(this, _status);
|
|
131
|
-
__privateGet(this, _preparedHeaders) ?? __privateSet(this, _preparedHeaders, {});
|
|
132
|
-
__privateGet(this, _headers) ?? __privateSet(this, _headers, new Headers());
|
|
133
|
-
setHeaders(__privateGet(this, _headers), __privateGet(this, _preparedHeaders));
|
|
134
|
-
if (__privateGet(this, _res)) {
|
|
135
|
-
__privateGet(this, _res).headers.forEach((v, k) => {
|
|
136
|
-
__privateGet(this, _headers)?.set(k, v);
|
|
137
|
-
});
|
|
138
|
-
setHeaders(__privateGet(this, _headers), __privateGet(this, _preparedHeaders));
|
|
139
|
-
}
|
|
140
|
-
headers ?? (headers = {});
|
|
141
|
-
for (const [k, v] of Object.entries(headers)) {
|
|
142
|
-
if (typeof v === "string") {
|
|
143
|
-
__privateGet(this, _headers).set(k, v);
|
|
144
|
-
} else {
|
|
145
|
-
__privateGet(this, _headers).delete(k);
|
|
146
|
-
for (const v2 of v) {
|
|
147
|
-
__privateGet(this, _headers).append(k, v2);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
return new Response(data, {
|
|
152
|
-
status,
|
|
153
|
-
headers: __privateGet(this, _headers)
|
|
154
|
-
});
|
|
155
|
-
};
|
|
156
|
-
this.body = (data, arg, headers) => {
|
|
157
|
-
return typeof arg === "number" ? this.newResponse(data, arg, headers) : this.newResponse(data, arg);
|
|
158
|
-
};
|
|
159
|
-
this.text = (text, arg, headers) => {
|
|
160
|
-
if (!__privateGet(this, _preparedHeaders)) {
|
|
161
|
-
if (__privateGet(this, _isFresh) && !headers && !arg) {
|
|
162
|
-
return new Response(text);
|
|
163
|
-
}
|
|
164
|
-
__privateSet(this, _preparedHeaders, {});
|
|
165
|
-
}
|
|
166
|
-
__privateGet(this, _preparedHeaders)["content-type"] = TEXT_PLAIN;
|
|
167
|
-
return typeof arg === "number" ? this.newResponse(text, arg, headers) : this.newResponse(text, arg);
|
|
168
|
-
};
|
|
169
|
-
this.json = (object, arg, headers) => {
|
|
170
|
-
const body = JSON.stringify(object);
|
|
171
|
-
__privateGet(this, _preparedHeaders) ?? __privateSet(this, _preparedHeaders, {});
|
|
172
|
-
__privateGet(this, _preparedHeaders)["content-type"] = "application/json; charset=UTF-8";
|
|
173
|
-
return typeof arg === "number" ? this.newResponse(body, arg, headers) : this.newResponse(body, arg);
|
|
174
|
-
};
|
|
175
|
-
this.html = (html, arg, headers) => {
|
|
176
|
-
__privateGet(this, _preparedHeaders) ?? __privateSet(this, _preparedHeaders, {});
|
|
177
|
-
__privateGet(this, _preparedHeaders)["content-type"] = "text/html; charset=UTF-8";
|
|
178
|
-
if (typeof html === "object") {
|
|
179
|
-
if (!(html instanceof Promise)) {
|
|
180
|
-
html = html.toString();
|
|
181
|
-
}
|
|
182
|
-
if (html instanceof Promise) {
|
|
183
|
-
return html.then((html2) => (0, import_html.resolveCallback)(html2, import_html.HtmlEscapedCallbackPhase.Stringify, false, {})).then((html2) => {
|
|
184
|
-
return typeof arg === "number" ? this.newResponse(html2, arg, headers) : this.newResponse(html2, arg);
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
return typeof arg === "number" ? this.newResponse(html, arg, headers) : this.newResponse(html, arg);
|
|
189
|
-
};
|
|
190
|
-
this.redirect = (location, status = 302) => {
|
|
191
|
-
__privateGet(this, _headers) ?? __privateSet(this, _headers, new Headers());
|
|
192
|
-
__privateGet(this, _headers).set("Location", location);
|
|
193
|
-
return this.newResponse(null, status);
|
|
194
|
-
};
|
|
195
|
-
this.notFound = () => {
|
|
196
|
-
return this.notFoundHandler(this);
|
|
197
|
-
};
|
|
198
47
|
this.req = req;
|
|
199
48
|
if (options) {
|
|
200
|
-
|
|
49
|
+
this.#executionCtx = options.executionCtx;
|
|
201
50
|
this.env = options.env;
|
|
202
51
|
if (options.notFoundHandler) {
|
|
203
52
|
this.notFoundHandler = options.notFoundHandler;
|
|
@@ -205,52 +54,179 @@ class Context {
|
|
|
205
54
|
}
|
|
206
55
|
}
|
|
207
56
|
get event() {
|
|
208
|
-
if (
|
|
209
|
-
return
|
|
57
|
+
if (this.#executionCtx && "respondWith" in this.#executionCtx) {
|
|
58
|
+
return this.#executionCtx;
|
|
210
59
|
} else {
|
|
211
60
|
throw Error("This context has no FetchEvent");
|
|
212
61
|
}
|
|
213
62
|
}
|
|
214
63
|
get executionCtx() {
|
|
215
|
-
if (
|
|
216
|
-
return
|
|
64
|
+
if (this.#executionCtx) {
|
|
65
|
+
return this.#executionCtx;
|
|
217
66
|
} else {
|
|
218
67
|
throw Error("This context has no ExecutionContext");
|
|
219
68
|
}
|
|
220
69
|
}
|
|
221
70
|
get res() {
|
|
222
|
-
|
|
223
|
-
return
|
|
71
|
+
this.#isFresh = false;
|
|
72
|
+
return this.#res ||= new Response("404 Not Found", { status: 404 });
|
|
224
73
|
}
|
|
225
|
-
set res(
|
|
226
|
-
|
|
227
|
-
if (
|
|
228
|
-
|
|
229
|
-
for (const [k, v] of
|
|
74
|
+
set res(_res) {
|
|
75
|
+
this.#isFresh = false;
|
|
76
|
+
if (this.#res && _res) {
|
|
77
|
+
this.#res.headers.delete("content-type");
|
|
78
|
+
for (const [k, v] of this.#res.headers.entries()) {
|
|
230
79
|
if (k === "set-cookie") {
|
|
231
|
-
const cookies =
|
|
232
|
-
|
|
80
|
+
const cookies = this.#res.headers.getSetCookie();
|
|
81
|
+
_res.headers.delete("set-cookie");
|
|
233
82
|
for (const cookie of cookies) {
|
|
234
|
-
|
|
83
|
+
_res.headers.append("set-cookie", cookie);
|
|
235
84
|
}
|
|
236
85
|
} else {
|
|
237
|
-
|
|
86
|
+
_res.headers.set(k, v);
|
|
238
87
|
}
|
|
239
88
|
}
|
|
240
89
|
}
|
|
241
|
-
|
|
90
|
+
this.#res = _res;
|
|
242
91
|
this.finalized = true;
|
|
243
92
|
}
|
|
93
|
+
render = (...args) => this.renderer(...args);
|
|
94
|
+
setLayout = (layout) => this.layout = layout;
|
|
95
|
+
getLayout = () => this.layout;
|
|
96
|
+
setRenderer = (renderer) => {
|
|
97
|
+
this.renderer = renderer;
|
|
98
|
+
};
|
|
99
|
+
header = (name, value, options) => {
|
|
100
|
+
if (value === void 0) {
|
|
101
|
+
if (this.#headers) {
|
|
102
|
+
this.#headers.delete(name);
|
|
103
|
+
} else if (this.#preparedHeaders) {
|
|
104
|
+
delete this.#preparedHeaders[name.toLocaleLowerCase()];
|
|
105
|
+
}
|
|
106
|
+
if (this.finalized) {
|
|
107
|
+
this.res.headers.delete(name);
|
|
108
|
+
}
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (options?.append) {
|
|
112
|
+
if (!this.#headers) {
|
|
113
|
+
this.#isFresh = false;
|
|
114
|
+
this.#headers = new Headers(this.#preparedHeaders);
|
|
115
|
+
this.#preparedHeaders = {};
|
|
116
|
+
}
|
|
117
|
+
this.#headers.append(name, value);
|
|
118
|
+
} else {
|
|
119
|
+
if (this.#headers) {
|
|
120
|
+
this.#headers.set(name, value);
|
|
121
|
+
} else {
|
|
122
|
+
this.#preparedHeaders ??= {};
|
|
123
|
+
this.#preparedHeaders[name.toLowerCase()] = value;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (this.finalized) {
|
|
127
|
+
if (options?.append) {
|
|
128
|
+
this.res.headers.append(name, value);
|
|
129
|
+
} else {
|
|
130
|
+
this.res.headers.set(name, value);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
status = (status) => {
|
|
135
|
+
this.#isFresh = false;
|
|
136
|
+
this.#status = status;
|
|
137
|
+
};
|
|
138
|
+
set = (key, value) => {
|
|
139
|
+
this._var ??= {};
|
|
140
|
+
this._var[key] = value;
|
|
141
|
+
};
|
|
142
|
+
get = (key) => {
|
|
143
|
+
return this._var ? this._var[key] : void 0;
|
|
144
|
+
};
|
|
244
145
|
get var() {
|
|
245
146
|
return { ...this._var };
|
|
246
147
|
}
|
|
148
|
+
newResponse = (data, arg, headers) => {
|
|
149
|
+
if (this.#isFresh && !headers && !arg && this.#status === 200) {
|
|
150
|
+
return new Response(data, {
|
|
151
|
+
headers: this.#preparedHeaders
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
if (arg && typeof arg !== "number") {
|
|
155
|
+
const headers2 = setHeaders(new Headers(arg.headers), this.#preparedHeaders);
|
|
156
|
+
return new Response(data, {
|
|
157
|
+
headers: headers2,
|
|
158
|
+
status: arg.status ?? this.#status
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
const status = typeof arg === "number" ? arg : this.#status;
|
|
162
|
+
this.#preparedHeaders ??= {};
|
|
163
|
+
this.#headers ??= new Headers();
|
|
164
|
+
setHeaders(this.#headers, this.#preparedHeaders);
|
|
165
|
+
if (this.#res) {
|
|
166
|
+
this.#res.headers.forEach((v, k) => {
|
|
167
|
+
this.#headers?.set(k, v);
|
|
168
|
+
});
|
|
169
|
+
setHeaders(this.#headers, this.#preparedHeaders);
|
|
170
|
+
}
|
|
171
|
+
headers ??= {};
|
|
172
|
+
for (const [k, v] of Object.entries(headers)) {
|
|
173
|
+
if (typeof v === "string") {
|
|
174
|
+
this.#headers.set(k, v);
|
|
175
|
+
} else {
|
|
176
|
+
this.#headers.delete(k);
|
|
177
|
+
for (const v2 of v) {
|
|
178
|
+
this.#headers.append(k, v2);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return new Response(data, {
|
|
183
|
+
status,
|
|
184
|
+
headers: this.#headers
|
|
185
|
+
});
|
|
186
|
+
};
|
|
187
|
+
body = (data, arg, headers) => {
|
|
188
|
+
return typeof arg === "number" ? this.newResponse(data, arg, headers) : this.newResponse(data, arg);
|
|
189
|
+
};
|
|
190
|
+
text = (text, arg, headers) => {
|
|
191
|
+
if (!this.#preparedHeaders) {
|
|
192
|
+
if (this.#isFresh && !headers && !arg) {
|
|
193
|
+
return new Response(text);
|
|
194
|
+
}
|
|
195
|
+
this.#preparedHeaders = {};
|
|
196
|
+
}
|
|
197
|
+
this.#preparedHeaders["content-type"] = TEXT_PLAIN;
|
|
198
|
+
return typeof arg === "number" ? this.newResponse(text, arg, headers) : this.newResponse(text, arg);
|
|
199
|
+
};
|
|
200
|
+
json = (object, arg, headers) => {
|
|
201
|
+
const body = JSON.stringify(object);
|
|
202
|
+
this.#preparedHeaders ??= {};
|
|
203
|
+
this.#preparedHeaders["content-type"] = "application/json; charset=UTF-8";
|
|
204
|
+
return typeof arg === "number" ? this.newResponse(body, arg, headers) : this.newResponse(body, arg);
|
|
205
|
+
};
|
|
206
|
+
html = (html, arg, headers) => {
|
|
207
|
+
this.#preparedHeaders ??= {};
|
|
208
|
+
this.#preparedHeaders["content-type"] = "text/html; charset=UTF-8";
|
|
209
|
+
if (typeof html === "object") {
|
|
210
|
+
if (!(html instanceof Promise)) {
|
|
211
|
+
html = html.toString();
|
|
212
|
+
}
|
|
213
|
+
if (html instanceof Promise) {
|
|
214
|
+
return html.then((html2) => (0, import_html.resolveCallback)(html2, import_html.HtmlEscapedCallbackPhase.Stringify, false, {})).then((html2) => {
|
|
215
|
+
return typeof arg === "number" ? this.newResponse(html2, arg, headers) : this.newResponse(html2, arg);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return typeof arg === "number" ? this.newResponse(html, arg, headers) : this.newResponse(html, arg);
|
|
220
|
+
};
|
|
221
|
+
redirect = (location, status = 302) => {
|
|
222
|
+
this.#headers ??= new Headers();
|
|
223
|
+
this.#headers.set("Location", location);
|
|
224
|
+
return this.newResponse(null, status);
|
|
225
|
+
};
|
|
226
|
+
notFound = () => {
|
|
227
|
+
return this.notFoundHandler(this);
|
|
228
|
+
};
|
|
247
229
|
}
|
|
248
|
-
_status = new WeakMap();
|
|
249
|
-
_executionCtx = new WeakMap();
|
|
250
|
-
_headers = new WeakMap();
|
|
251
|
-
_preparedHeaders = new WeakMap();
|
|
252
|
-
_res = new WeakMap();
|
|
253
|
-
_isFresh = new WeakMap();
|
|
254
230
|
// Annotate the CommonJS export names for ESM import in node:
|
|
255
231
|
0 && (module.exports = {
|
|
256
232
|
Context,
|
|
@@ -25,7 +25,7 @@ module.exports = __toCommonJS(adapter_exports);
|
|
|
25
25
|
const env = (c, runtime) => {
|
|
26
26
|
const global = globalThis;
|
|
27
27
|
const globalEnv = global?.process?.env;
|
|
28
|
-
runtime
|
|
28
|
+
runtime ??= getRuntimeKey();
|
|
29
29
|
const runtimeEnvHandlers = {
|
|
30
30
|
bun: () => globalEnv,
|
|
31
31
|
node: () => globalEnv,
|
|
@@ -26,14 +26,20 @@ __export(cookie_exports, {
|
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(cookie_exports);
|
|
28
28
|
var import_cookie = require("../../utils/cookie");
|
|
29
|
-
const getCookie = (c, key) => {
|
|
29
|
+
const getCookie = (c, key, prefix) => {
|
|
30
30
|
const cookie = c.req.raw.headers.get("Cookie");
|
|
31
31
|
if (typeof key === "string") {
|
|
32
32
|
if (!cookie) {
|
|
33
33
|
return void 0;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
let finalKey = key;
|
|
36
|
+
if (prefix === "secure") {
|
|
37
|
+
finalKey = "__Secure-" + key;
|
|
38
|
+
} else if (prefix === "host") {
|
|
39
|
+
finalKey = "__Host-" + key;
|
|
40
|
+
}
|
|
41
|
+
const obj2 = (0, import_cookie.parse)(cookie, finalKey);
|
|
42
|
+
return obj2[finalKey];
|
|
37
43
|
}
|
|
38
44
|
if (!cookie) {
|
|
39
45
|
return {};
|
|
@@ -41,14 +47,20 @@ const getCookie = (c, key) => {
|
|
|
41
47
|
const obj = (0, import_cookie.parse)(cookie);
|
|
42
48
|
return obj;
|
|
43
49
|
};
|
|
44
|
-
const getSignedCookie = async (c, secret, key) => {
|
|
50
|
+
const getSignedCookie = async (c, secret, key, prefix) => {
|
|
45
51
|
const cookie = c.req.raw.headers.get("Cookie");
|
|
46
52
|
if (typeof key === "string") {
|
|
47
53
|
if (!cookie) {
|
|
48
54
|
return void 0;
|
|
49
55
|
}
|
|
50
|
-
|
|
51
|
-
|
|
56
|
+
let finalKey = key;
|
|
57
|
+
if (prefix === "secure") {
|
|
58
|
+
finalKey = "__Secure-" + key;
|
|
59
|
+
} else if (prefix === "host") {
|
|
60
|
+
finalKey = "__Host-" + key;
|
|
61
|
+
}
|
|
62
|
+
const obj2 = await (0, import_cookie.parseSigned)(cookie, secret, finalKey);
|
|
63
|
+
return obj2[finalKey];
|
|
52
64
|
}
|
|
53
65
|
if (!cookie) {
|
|
54
66
|
return {};
|
|
@@ -57,11 +69,39 @@ const getSignedCookie = async (c, secret, key) => {
|
|
|
57
69
|
return obj;
|
|
58
70
|
};
|
|
59
71
|
const setCookie = (c, name, value, opt) => {
|
|
60
|
-
|
|
72
|
+
let cookie;
|
|
73
|
+
if (opt?.prefix === "secure") {
|
|
74
|
+
cookie = (0, import_cookie.serialize)("__Secure-" + name, value, { path: "/", ...opt, secure: true });
|
|
75
|
+
} else if (opt?.prefix === "host") {
|
|
76
|
+
cookie = (0, import_cookie.serialize)("__Host-" + name, value, {
|
|
77
|
+
...opt,
|
|
78
|
+
path: "/",
|
|
79
|
+
secure: true,
|
|
80
|
+
domain: void 0
|
|
81
|
+
});
|
|
82
|
+
} else {
|
|
83
|
+
cookie = (0, import_cookie.serialize)(name, value, { path: "/", ...opt });
|
|
84
|
+
}
|
|
61
85
|
c.header("set-cookie", cookie, { append: true });
|
|
62
86
|
};
|
|
63
87
|
const setSignedCookie = async (c, name, value, secret, opt) => {
|
|
64
|
-
|
|
88
|
+
let cookie;
|
|
89
|
+
if (opt?.prefix === "secure") {
|
|
90
|
+
cookie = await (0, import_cookie.serializeSigned)("__Secure-" + name, value, secret, {
|
|
91
|
+
path: "/",
|
|
92
|
+
...opt,
|
|
93
|
+
secure: true
|
|
94
|
+
});
|
|
95
|
+
} else if (opt?.prefix === "host") {
|
|
96
|
+
cookie = await (0, import_cookie.serializeSigned)("__Host-" + name, value, secret, {
|
|
97
|
+
...opt,
|
|
98
|
+
path: "/",
|
|
99
|
+
secure: true,
|
|
100
|
+
domain: void 0
|
|
101
|
+
});
|
|
102
|
+
} else {
|
|
103
|
+
cookie = await (0, import_cookie.serializeSigned)(name, value, secret, { path: "/", ...opt });
|
|
104
|
+
}
|
|
65
105
|
c.header("set-cookie", cookie, { append: true });
|
|
66
106
|
};
|
|
67
107
|
const deleteCookie = (c, name, opt) => {
|
|
@@ -23,6 +23,7 @@ __export(dev_exports, {
|
|
|
23
23
|
showRoutes: () => showRoutes
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(dev_exports);
|
|
26
|
+
var import_color = require("../../utils/color");
|
|
26
27
|
var import_handler = require("../../utils/handler");
|
|
27
28
|
const handlerName = (handler) => {
|
|
28
29
|
return handler.name || ((0, import_handler.isMiddleware)(handler) ? "[middleware]" : "[handler]");
|
|
@@ -39,15 +40,13 @@ const inspectRoutes = (hono) => {
|
|
|
39
40
|
});
|
|
40
41
|
};
|
|
41
42
|
const showRoutes = (hono, opts) => {
|
|
42
|
-
const
|
|
43
|
-
const isNoColor = typeof process !== "undefined" ? "NO_COLOR" in process?.env : typeof Deno?.noColor === "boolean" ? Deno.noColor : false;
|
|
44
|
-
const colorEnabled = opts?.colorize ?? !isNoColor;
|
|
43
|
+
const colorEnabled = opts?.colorize ?? (0, import_color.getColorEnabled)();
|
|
45
44
|
const routeData = {};
|
|
46
45
|
let maxMethodLength = 0;
|
|
47
46
|
let maxPathLength = 0;
|
|
48
47
|
inspectRoutes(hono).filter(({ isMiddleware: isMiddleware2 }) => opts?.verbose || !isMiddleware2).map((route) => {
|
|
49
48
|
const key = `${route.method}-${route.path}`;
|
|
50
|
-
(routeData[key]
|
|
49
|
+
(routeData[key] ||= []).push(route);
|
|
51
50
|
if (routeData[key].length > 1) {
|
|
52
51
|
return;
|
|
53
52
|
}
|