hono 4.0.8 → 4.1.0-rc.1
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/lambda-edge/handler.js +1 -1
- package/dist/cjs/adapter/aws-lambda/handler.js +1 -1
- package/dist/cjs/adapter/lambda-edge/handler.js +1 -1
- package/dist/cjs/client/client.js +64 -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 +104 -51
- 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 +32 -14
- 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 +1 -1
- package/dist/cjs/utils/stream.js +6 -2
- package/dist/cjs/utils/url.js +2 -2
- package/dist/client/client.js +64 -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 +103 -50
- 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 +30 -14
- 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/helper/cookie/index.d.ts +3 -1
- package/dist/types/helper/ssg/index.d.ts +8 -10
- 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/types.d.ts +2 -4
- 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/types/utils/stream.d.ts +1 -1
- package/dist/utils/color.js +9 -0
- package/dist/utils/concurrent.js +39 -0
- package/dist/utils/cookie.js +1 -1
- package/dist/utils/stream.js +6 -2
- package/dist/utils/url.js +2 -2
- package/package.json +9 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/adapter/aws-lambda/handler.ts
|
|
2
2
|
import crypto from "crypto";
|
|
3
3
|
import { encodeBase64 } from "../../utils/encode.js";
|
|
4
|
-
globalThis.crypto
|
|
4
|
+
globalThis.crypto ??= crypto;
|
|
5
5
|
var getRequestContext = (event) => {
|
|
6
6
|
return event.requestContext;
|
|
7
7
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/adapter/lambda-edge/handler.ts
|
|
2
2
|
import crypto from "crypto";
|
|
3
3
|
import { encodeBase64 } from "../../utils/encode.js";
|
|
4
|
-
globalThis.crypto
|
|
4
|
+
globalThis.crypto ??= crypto;
|
|
5
5
|
var convertHeaders = (headers) => {
|
|
6
6
|
const cfHeaders = {};
|
|
7
7
|
headers.forEach((value, key) => {
|
|
@@ -32,7 +32,7 @@ __export(handler_exports, {
|
|
|
32
32
|
module.exports = __toCommonJS(handler_exports);
|
|
33
33
|
var import_crypto = __toESM(require("crypto"), 1);
|
|
34
34
|
var import_encode = require("../../utils/encode");
|
|
35
|
-
globalThis.crypto
|
|
35
|
+
globalThis.crypto ??= import_crypto.default;
|
|
36
36
|
const getRequestContext = (event) => {
|
|
37
37
|
return event.requestContext;
|
|
38
38
|
};
|
|
@@ -30,7 +30,7 @@ __export(handler_exports, {
|
|
|
30
30
|
module.exports = __toCommonJS(handler_exports);
|
|
31
31
|
var import_crypto = __toESM(require("crypto"), 1);
|
|
32
32
|
var import_encode = require("../../utils/encode");
|
|
33
|
-
globalThis.crypto
|
|
33
|
+
globalThis.crypto ??= import_crypto.default;
|
|
34
34
|
const convertHeaders = (headers) => {
|
|
35
35
|
const cfHeaders = {};
|
|
36
36
|
headers.forEach((value, key) => {
|
|
@@ -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];
|
|
@@ -132,7 +135,7 @@ const hc = (baseUrl, options) => createProxy((opts) => {
|
|
|
132
135
|
}
|
|
133
136
|
const req = new ClientRequestImpl(url, method);
|
|
134
137
|
if (method) {
|
|
135
|
-
options
|
|
138
|
+
options ??= {};
|
|
136
139
|
const args = (0, import_utils.deepMerge)(options, { ...opts.args[1] ?? {} });
|
|
137
140
|
return req.fetch(opts.args[0], args);
|
|
138
141
|
}
|
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,
|