hono 4.4.7 → 4.4.9
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 -3
- package/dist/adapter/deno/websocket.js +2 -2
- package/dist/cjs/adapter/deno/websocket.js +2 -2
- package/dist/cjs/context.js +33 -21
- package/dist/cjs/helper/accepts/accepts.js +11 -5
- package/dist/cjs/hono-base.js +3 -2
- package/dist/cjs/middleware/timing/timing.js +3 -0
- package/dist/cjs/utils/buffer.js +1 -2
- package/dist/context.js +33 -21
- package/dist/helper/accepts/accepts.js +11 -5
- package/dist/hono-base.js +3 -2
- package/dist/middleware/timing/timing.js +3 -0
- package/dist/types/adapter/deno/websocket.d.ts +20 -1
- package/dist/types/context.d.ts +12 -13
- package/dist/types/helper/conninfo/types.d.ts +2 -2
- package/dist/types/helper/websocket/index.d.ts +1 -1
- package/dist/types/hono-base.d.ts +2 -2
- package/dist/types/types.d.ts +10 -10
- package/dist/utils/buffer.js +1 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -25,8 +25,7 @@
|
|
|
25
25
|
[](https://codecov.io/github/honojs/hono)
|
|
26
26
|
[](https://discord.gg/KMh2eNSdxV)
|
|
27
27
|
|
|
28
|
-
Hono - _
|
|
29
|
-
It works on any JavaScript runtime: Cloudflare Workers, Fastly Compute, Deno, Bun, Vercel, AWS Lambda, Lambda@Edge, and Node.js.
|
|
28
|
+
Hono - _**means flame🔥 in Japanese**_ - is a small, simple, and ultrafast web framework built on Web Standards. It works on any JavaScript runtime: Cloudflare Workers, Fastly Compute, Deno, Bun, Vercel, AWS Lambda, Lambda@Edge, and Node.js.
|
|
30
29
|
|
|
31
30
|
Fast, but not only fast.
|
|
32
31
|
|
|
@@ -41,7 +40,7 @@ export default app
|
|
|
41
40
|
|
|
42
41
|
## Quick Start
|
|
43
42
|
|
|
44
|
-
```
|
|
43
|
+
```bash
|
|
45
44
|
npm create hono@latest
|
|
46
45
|
```
|
|
47
46
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// src/adapter/deno/websocket.ts
|
|
2
|
-
var upgradeWebSocket = (createEvents) => async (c, next) => {
|
|
2
|
+
var upgradeWebSocket = (createEvents, options) => async (c, next) => {
|
|
3
3
|
if (c.req.header("upgrade") !== "websocket") {
|
|
4
4
|
return await next();
|
|
5
5
|
}
|
|
6
6
|
const events = await createEvents(c);
|
|
7
|
-
const { response, socket } = Deno.upgradeWebSocket(c.req.raw);
|
|
7
|
+
const { response, socket } = Deno.upgradeWebSocket(c.req.raw, options || {});
|
|
8
8
|
const wsContext = {
|
|
9
9
|
binaryType: "arraybuffer",
|
|
10
10
|
close: (code, reason) => socket.close(code, reason),
|
|
@@ -21,12 +21,12 @@ __export(websocket_exports, {
|
|
|
21
21
|
upgradeWebSocket: () => upgradeWebSocket
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(websocket_exports);
|
|
24
|
-
const upgradeWebSocket = (createEvents) => async (c, next) => {
|
|
24
|
+
const upgradeWebSocket = (createEvents, options) => async (c, next) => {
|
|
25
25
|
if (c.req.header("upgrade") !== "websocket") {
|
|
26
26
|
return await next();
|
|
27
27
|
}
|
|
28
28
|
const events = await createEvents(c);
|
|
29
|
-
const { response, socket } = Deno.upgradeWebSocket(c.req.raw);
|
|
29
|
+
const { response, socket } = Deno.upgradeWebSocket(c.req.raw, options || {});
|
|
30
30
|
const wsContext = {
|
|
31
31
|
binaryType: "arraybuffer",
|
|
32
32
|
close: (code, reason) => socket.close(code, reason),
|
package/dist/cjs/context.js
CHANGED
|
@@ -22,6 +22,7 @@ __export(context_exports, {
|
|
|
22
22
|
TEXT_PLAIN: () => TEXT_PLAIN
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(context_exports);
|
|
25
|
+
var import_request = require("./request");
|
|
25
26
|
var import_html = require("./utils/html");
|
|
26
27
|
const TEXT_PLAIN = "text/plain; charset=UTF-8";
|
|
27
28
|
const setHeaders = (headers, map = {}) => {
|
|
@@ -29,30 +30,37 @@ const setHeaders = (headers, map = {}) => {
|
|
|
29
30
|
return headers;
|
|
30
31
|
};
|
|
31
32
|
class Context {
|
|
32
|
-
|
|
33
|
+
#rawRequest;
|
|
34
|
+
#req;
|
|
33
35
|
env = {};
|
|
34
|
-
|
|
36
|
+
#var;
|
|
35
37
|
finalized = false;
|
|
36
|
-
error
|
|
38
|
+
error;
|
|
37
39
|
#status = 200;
|
|
38
40
|
#executionCtx;
|
|
39
|
-
#headers
|
|
40
|
-
#preparedHeaders
|
|
41
|
+
#headers;
|
|
42
|
+
#preparedHeaders;
|
|
41
43
|
#res;
|
|
42
44
|
#isFresh = true;
|
|
43
|
-
layout
|
|
44
|
-
renderer
|
|
45
|
-
notFoundHandler
|
|
45
|
+
#layout;
|
|
46
|
+
#renderer;
|
|
47
|
+
#notFoundHandler;
|
|
48
|
+
#matchResult;
|
|
49
|
+
#path;
|
|
46
50
|
constructor(req, options) {
|
|
47
|
-
this
|
|
51
|
+
this.#rawRequest = req;
|
|
48
52
|
if (options) {
|
|
49
53
|
this.#executionCtx = options.executionCtx;
|
|
50
54
|
this.env = options.env;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
this.#notFoundHandler = options.notFoundHandler;
|
|
56
|
+
this.#path = options.path;
|
|
57
|
+
this.#matchResult = options.matchResult;
|
|
54
58
|
}
|
|
55
59
|
}
|
|
60
|
+
get req() {
|
|
61
|
+
this.#req ??= new import_request.HonoRequest(this.#rawRequest, this.#path, this.#matchResult);
|
|
62
|
+
return this.#req;
|
|
63
|
+
}
|
|
56
64
|
get event() {
|
|
57
65
|
if (this.#executionCtx && "respondWith" in this.#executionCtx) {
|
|
58
66
|
return this.#executionCtx;
|
|
@@ -90,11 +98,14 @@ class Context {
|
|
|
90
98
|
this.#res = _res;
|
|
91
99
|
this.finalized = true;
|
|
92
100
|
}
|
|
93
|
-
render = (...args) =>
|
|
94
|
-
|
|
95
|
-
|
|
101
|
+
render = (...args) => {
|
|
102
|
+
this.#renderer ??= (content) => this.html(content);
|
|
103
|
+
return this.#renderer(...args);
|
|
104
|
+
};
|
|
105
|
+
setLayout = (layout) => this.#layout = layout;
|
|
106
|
+
getLayout = () => this.#layout;
|
|
96
107
|
setRenderer = (renderer) => {
|
|
97
|
-
this
|
|
108
|
+
this.#renderer = renderer;
|
|
98
109
|
};
|
|
99
110
|
header = (name, value, options) => {
|
|
100
111
|
if (value === void 0) {
|
|
@@ -136,14 +147,14 @@ class Context {
|
|
|
136
147
|
this.#status = status;
|
|
137
148
|
};
|
|
138
149
|
set = (key, value) => {
|
|
139
|
-
this
|
|
140
|
-
this
|
|
150
|
+
this.#var ??= {};
|
|
151
|
+
this.#var[key] = value;
|
|
141
152
|
};
|
|
142
153
|
get = (key) => {
|
|
143
|
-
return this
|
|
154
|
+
return this.#var ? this.#var[key] : void 0;
|
|
144
155
|
};
|
|
145
156
|
get var() {
|
|
146
|
-
return { ...this
|
|
157
|
+
return { ...this.#var };
|
|
147
158
|
}
|
|
148
159
|
newResponse = (data, arg, headers) => {
|
|
149
160
|
if (this.#isFresh && !headers && !arg && this.#status === 200) {
|
|
@@ -238,7 +249,8 @@ class Context {
|
|
|
238
249
|
return this.newResponse(null, status ?? 302);
|
|
239
250
|
};
|
|
240
251
|
notFound = () => {
|
|
241
|
-
|
|
252
|
+
this.#notFoundHandler ??= () => new Response();
|
|
253
|
+
return this.#notFoundHandler(this);
|
|
242
254
|
};
|
|
243
255
|
}
|
|
244
256
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -26,14 +26,20 @@ module.exports = __toCommonJS(accepts_exports);
|
|
|
26
26
|
const parseAccept = (acceptHeader) => {
|
|
27
27
|
const accepts2 = acceptHeader.split(",");
|
|
28
28
|
return accepts2.map((accept) => {
|
|
29
|
-
const
|
|
29
|
+
const parts = accept.trim().split(";");
|
|
30
|
+
const type = parts[0];
|
|
31
|
+
const params = parts.slice(1);
|
|
30
32
|
const q = params.find((param) => param.startsWith("q="));
|
|
33
|
+
const paramsObject = params.reduce((acc, param) => {
|
|
34
|
+
const keyValue = param.split("=");
|
|
35
|
+
const key = keyValue[0].trim();
|
|
36
|
+
const value = keyValue[1].trim();
|
|
37
|
+
acc[key] = value;
|
|
38
|
+
return acc;
|
|
39
|
+
}, {});
|
|
31
40
|
return {
|
|
32
41
|
type,
|
|
33
|
-
params:
|
|
34
|
-
const [key, value] = param.split("=");
|
|
35
|
-
return { ...acc, [key.trim()]: value.trim() };
|
|
36
|
-
}, {}),
|
|
42
|
+
params: paramsObject,
|
|
37
43
|
q: q ? parseFloat(q.split("=")[1]) : 1
|
|
38
44
|
};
|
|
39
45
|
});
|
package/dist/cjs/hono-base.js
CHANGED
|
@@ -24,7 +24,6 @@ __export(hono_base_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(hono_base_exports);
|
|
25
25
|
var import_compose = require("./compose");
|
|
26
26
|
var import_context = require("./context");
|
|
27
|
-
var import_request = require("./request");
|
|
28
27
|
var import_router = require("./router");
|
|
29
28
|
var import_url = require("./utils/url");
|
|
30
29
|
const COMPOSED_HANDLER = Symbol("composedHandler");
|
|
@@ -198,7 +197,9 @@ class Hono {
|
|
|
198
197
|
}
|
|
199
198
|
const path = this.getPath(request, { env });
|
|
200
199
|
const matchResult = this.matchRoute(method, path);
|
|
201
|
-
const c = new import_context.Context(
|
|
200
|
+
const c = new import_context.Context(request, {
|
|
201
|
+
path,
|
|
202
|
+
matchResult,
|
|
202
203
|
env,
|
|
203
204
|
executionCtx,
|
|
204
205
|
notFoundHandler: this.notFoundHandler
|
|
@@ -46,6 +46,9 @@ const timing = (config) => {
|
|
|
46
46
|
return async function timing2(c, next) {
|
|
47
47
|
const headers = [];
|
|
48
48
|
const timers = /* @__PURE__ */ new Map();
|
|
49
|
+
if (c.get("metric")) {
|
|
50
|
+
return await next();
|
|
51
|
+
}
|
|
49
52
|
c.set("metric", { headers, timers });
|
|
50
53
|
if (options.total) {
|
|
51
54
|
startTime(c, "total", options.totalDescription);
|
package/dist/cjs/utils/buffer.js
CHANGED
|
@@ -46,8 +46,7 @@ const timingSafeEqual = async (a, b, hashFunction) => {
|
|
|
46
46
|
if (!hashFunction) {
|
|
47
47
|
hashFunction = import_crypto.sha256;
|
|
48
48
|
}
|
|
49
|
-
const sa = await hashFunction(a);
|
|
50
|
-
const sb = await hashFunction(b);
|
|
49
|
+
const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);
|
|
51
50
|
if (!sa || !sb) {
|
|
52
51
|
return false;
|
|
53
52
|
}
|
package/dist/context.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// src/context.ts
|
|
2
|
+
import { HonoRequest } from "./request.js";
|
|
2
3
|
import { HtmlEscapedCallbackPhase, resolveCallback } from "./utils/html.js";
|
|
3
4
|
var TEXT_PLAIN = "text/plain; charset=UTF-8";
|
|
4
5
|
var setHeaders = (headers, map = {}) => {
|
|
@@ -6,30 +7,37 @@ var setHeaders = (headers, map = {}) => {
|
|
|
6
7
|
return headers;
|
|
7
8
|
};
|
|
8
9
|
var Context = class {
|
|
9
|
-
|
|
10
|
+
#rawRequest;
|
|
11
|
+
#req;
|
|
10
12
|
env = {};
|
|
11
|
-
|
|
13
|
+
#var;
|
|
12
14
|
finalized = false;
|
|
13
|
-
error
|
|
15
|
+
error;
|
|
14
16
|
#status = 200;
|
|
15
17
|
#executionCtx;
|
|
16
|
-
#headers
|
|
17
|
-
#preparedHeaders
|
|
18
|
+
#headers;
|
|
19
|
+
#preparedHeaders;
|
|
18
20
|
#res;
|
|
19
21
|
#isFresh = true;
|
|
20
|
-
layout
|
|
21
|
-
renderer
|
|
22
|
-
notFoundHandler
|
|
22
|
+
#layout;
|
|
23
|
+
#renderer;
|
|
24
|
+
#notFoundHandler;
|
|
25
|
+
#matchResult;
|
|
26
|
+
#path;
|
|
23
27
|
constructor(req, options) {
|
|
24
|
-
this
|
|
28
|
+
this.#rawRequest = req;
|
|
25
29
|
if (options) {
|
|
26
30
|
this.#executionCtx = options.executionCtx;
|
|
27
31
|
this.env = options.env;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
this.#notFoundHandler = options.notFoundHandler;
|
|
33
|
+
this.#path = options.path;
|
|
34
|
+
this.#matchResult = options.matchResult;
|
|
31
35
|
}
|
|
32
36
|
}
|
|
37
|
+
get req() {
|
|
38
|
+
this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);
|
|
39
|
+
return this.#req;
|
|
40
|
+
}
|
|
33
41
|
get event() {
|
|
34
42
|
if (this.#executionCtx && "respondWith" in this.#executionCtx) {
|
|
35
43
|
return this.#executionCtx;
|
|
@@ -67,11 +75,14 @@ var Context = class {
|
|
|
67
75
|
this.#res = _res;
|
|
68
76
|
this.finalized = true;
|
|
69
77
|
}
|
|
70
|
-
render = (...args) =>
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
render = (...args) => {
|
|
79
|
+
this.#renderer ??= (content) => this.html(content);
|
|
80
|
+
return this.#renderer(...args);
|
|
81
|
+
};
|
|
82
|
+
setLayout = (layout) => this.#layout = layout;
|
|
83
|
+
getLayout = () => this.#layout;
|
|
73
84
|
setRenderer = (renderer) => {
|
|
74
|
-
this
|
|
85
|
+
this.#renderer = renderer;
|
|
75
86
|
};
|
|
76
87
|
header = (name, value, options) => {
|
|
77
88
|
if (value === void 0) {
|
|
@@ -113,14 +124,14 @@ var Context = class {
|
|
|
113
124
|
this.#status = status;
|
|
114
125
|
};
|
|
115
126
|
set = (key, value) => {
|
|
116
|
-
this
|
|
117
|
-
this
|
|
127
|
+
this.#var ??= {};
|
|
128
|
+
this.#var[key] = value;
|
|
118
129
|
};
|
|
119
130
|
get = (key) => {
|
|
120
|
-
return this
|
|
131
|
+
return this.#var ? this.#var[key] : void 0;
|
|
121
132
|
};
|
|
122
133
|
get var() {
|
|
123
|
-
return { ...this
|
|
134
|
+
return { ...this.#var };
|
|
124
135
|
}
|
|
125
136
|
newResponse = (data, arg, headers) => {
|
|
126
137
|
if (this.#isFresh && !headers && !arg && this.#status === 200) {
|
|
@@ -215,7 +226,8 @@ var Context = class {
|
|
|
215
226
|
return this.newResponse(null, status ?? 302);
|
|
216
227
|
};
|
|
217
228
|
notFound = () => {
|
|
218
|
-
|
|
229
|
+
this.#notFoundHandler ??= () => new Response();
|
|
230
|
+
return this.#notFoundHandler(this);
|
|
219
231
|
};
|
|
220
232
|
};
|
|
221
233
|
export {
|
|
@@ -2,14 +2,20 @@
|
|
|
2
2
|
var parseAccept = (acceptHeader) => {
|
|
3
3
|
const accepts2 = acceptHeader.split(",");
|
|
4
4
|
return accepts2.map((accept) => {
|
|
5
|
-
const
|
|
5
|
+
const parts = accept.trim().split(";");
|
|
6
|
+
const type = parts[0];
|
|
7
|
+
const params = parts.slice(1);
|
|
6
8
|
const q = params.find((param) => param.startsWith("q="));
|
|
9
|
+
const paramsObject = params.reduce((acc, param) => {
|
|
10
|
+
const keyValue = param.split("=");
|
|
11
|
+
const key = keyValue[0].trim();
|
|
12
|
+
const value = keyValue[1].trim();
|
|
13
|
+
acc[key] = value;
|
|
14
|
+
return acc;
|
|
15
|
+
}, {});
|
|
7
16
|
return {
|
|
8
17
|
type,
|
|
9
|
-
params:
|
|
10
|
-
const [key, value] = param.split("=");
|
|
11
|
-
return { ...acc, [key.trim()]: value.trim() };
|
|
12
|
-
}, {}),
|
|
18
|
+
params: paramsObject,
|
|
13
19
|
q: q ? parseFloat(q.split("=")[1]) : 1
|
|
14
20
|
};
|
|
15
21
|
});
|
package/dist/hono-base.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// src/hono-base.ts
|
|
2
2
|
import { compose } from "./compose.js";
|
|
3
3
|
import { Context } from "./context.js";
|
|
4
|
-
import { HonoRequest } from "./request.js";
|
|
5
4
|
import { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from "./router.js";
|
|
6
5
|
import { getPath, getPathNoStrict, mergePath } from "./utils/url.js";
|
|
7
6
|
var COMPOSED_HANDLER = Symbol("composedHandler");
|
|
@@ -175,7 +174,9 @@ var Hono = class {
|
|
|
175
174
|
}
|
|
176
175
|
const path = this.getPath(request, { env });
|
|
177
176
|
const matchResult = this.matchRoute(method, path);
|
|
178
|
-
const c = new Context(
|
|
177
|
+
const c = new Context(request, {
|
|
178
|
+
path,
|
|
179
|
+
matchResult,
|
|
179
180
|
env,
|
|
180
181
|
executionCtx,
|
|
181
182
|
notFoundHandler: this.notFoundHandler
|
|
@@ -21,6 +21,9 @@ var timing = (config) => {
|
|
|
21
21
|
return async function timing2(c, next) {
|
|
22
22
|
const headers = [];
|
|
23
23
|
const timers = /* @__PURE__ */ new Map();
|
|
24
|
+
if (c.get("metric")) {
|
|
25
|
+
return await next();
|
|
26
|
+
}
|
|
24
27
|
c.set("metric", { headers, timers });
|
|
25
28
|
if (options.total) {
|
|
26
29
|
startTime(c, "total", options.totalDescription);
|
|
@@ -1,2 +1,21 @@
|
|
|
1
1
|
import type { UpgradeWebSocket } from '../../helper/websocket';
|
|
2
|
-
export
|
|
2
|
+
export interface UpgradeWebSocketOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Sets the `.protocol` property on the client side web socket to the
|
|
5
|
+
* value provided here, which should be one of the strings specified in the
|
|
6
|
+
* `protocols` parameter when requesting the web socket. This is intended
|
|
7
|
+
* for clients and servers to specify sub-protocols to use to communicate to
|
|
8
|
+
* each other.
|
|
9
|
+
*/
|
|
10
|
+
protocol?: string;
|
|
11
|
+
/**
|
|
12
|
+
* If the client does not respond to this frame with a
|
|
13
|
+
* `pong` within the timeout specified, the connection is deemed
|
|
14
|
+
* unhealthy and is closed. The `close` and `error` event will be emitted.
|
|
15
|
+
*
|
|
16
|
+
* The unit is seconds, with a default of 30.
|
|
17
|
+
* Set to `0` to disable timeouts.
|
|
18
|
+
*/
|
|
19
|
+
idleTimeout?: number;
|
|
20
|
+
}
|
|
21
|
+
export declare const upgradeWebSocket: UpgradeWebSocket<UpgradeWebSocketOptions>;
|
package/dist/types/context.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type {
|
|
1
|
+
import { HonoRequest } from './request';
|
|
2
|
+
import type { Result } from './router';
|
|
3
|
+
import type { Env, FetchEventLike, H, Input, NotFoundHandler, RouterRoute, TypedResponse } from './types';
|
|
3
4
|
import type { RedirectStatusCode, StatusCode } from './utils/http-status';
|
|
4
5
|
import type { IsAny, JSONParsed, JSONValue, SimplifyDeepArray } from './utils/types';
|
|
5
6
|
type HeaderRecord = Record<string, string | string[]>;
|
|
@@ -154,14 +155,12 @@ type ContextOptions<E extends Env> = {
|
|
|
154
155
|
* Handler for not found responses.
|
|
155
156
|
*/
|
|
156
157
|
notFoundHandler?: NotFoundHandler<E>;
|
|
158
|
+
matchResult?: Result<[H, RouterRoute]>;
|
|
159
|
+
path?: string;
|
|
157
160
|
};
|
|
158
161
|
export declare const TEXT_PLAIN = "text/plain; charset=UTF-8";
|
|
159
162
|
export declare class Context<E extends Env = any, P extends string = any, I extends Input = {}> {
|
|
160
163
|
#private;
|
|
161
|
-
/**
|
|
162
|
-
* `.req` is the instance of {@link HonoRequest}.
|
|
163
|
-
*/
|
|
164
|
-
req: HonoRequest<P, I['out']>;
|
|
165
164
|
/**
|
|
166
165
|
* `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.
|
|
167
166
|
*
|
|
@@ -176,7 +175,6 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
176
175
|
* ```
|
|
177
176
|
*/
|
|
178
177
|
env: E['Bindings'];
|
|
179
|
-
private _var;
|
|
180
178
|
finalized: boolean;
|
|
181
179
|
/**
|
|
182
180
|
* `.error` can get the error object from the middleware if the Handler throws an error.
|
|
@@ -194,16 +192,17 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
194
192
|
* ```
|
|
195
193
|
*/
|
|
196
194
|
error: Error | undefined;
|
|
197
|
-
private layout;
|
|
198
|
-
private renderer;
|
|
199
|
-
private notFoundHandler;
|
|
200
195
|
/**
|
|
201
196
|
* Creates an instance of the Context class.
|
|
202
197
|
*
|
|
203
|
-
* @param req - The
|
|
198
|
+
* @param req - The Request object.
|
|
204
199
|
* @param options - Optional configuration options for the context.
|
|
205
200
|
*/
|
|
206
|
-
constructor(req:
|
|
201
|
+
constructor(req: Request, options?: ContextOptions<E>);
|
|
202
|
+
/**
|
|
203
|
+
* `.req` is the instance of {@link HonoRequest}.
|
|
204
|
+
*/
|
|
205
|
+
get req(): HonoRequest<P, I['out']>;
|
|
207
206
|
/**
|
|
208
207
|
* @see {@link https://hono.dev/api/context#event}
|
|
209
208
|
* The FetchEvent associated with the current request.
|
|
@@ -258,7 +257,7 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
258
257
|
*
|
|
259
258
|
* @returns The current layout function.
|
|
260
259
|
*/
|
|
261
|
-
getLayout: () => Layout<{
|
|
260
|
+
getLayout: () => Layout<PropsForRenderer & {
|
|
262
261
|
Layout: Layout;
|
|
263
262
|
}> | undefined;
|
|
264
263
|
/**
|
|
@@ -22,11 +22,11 @@ export type NetAddrInfo = {
|
|
|
22
22
|
addressType: AddressType;
|
|
23
23
|
} | {});
|
|
24
24
|
/**
|
|
25
|
-
* HTTP Connection
|
|
25
|
+
* HTTP Connection information
|
|
26
26
|
*/
|
|
27
27
|
export interface ConnInfo {
|
|
28
28
|
/**
|
|
29
|
-
* Remote
|
|
29
|
+
* Remote information
|
|
30
30
|
*/
|
|
31
31
|
remote: NetAddrInfo;
|
|
32
32
|
}
|
|
@@ -16,7 +16,7 @@ export interface WSEvents {
|
|
|
16
16
|
/**
|
|
17
17
|
* Upgrade WebSocket Type
|
|
18
18
|
*/
|
|
19
|
-
export type UpgradeWebSocket = (createEvents: (c: Context) => WSEvents | Promise<WSEvents
|
|
19
|
+
export type UpgradeWebSocket<T = any> = (createEvents: (c: Context) => WSEvents | Promise<WSEvents>, options?: T) => MiddlewareHandler<any, string, {
|
|
20
20
|
outputFormat: 'ws';
|
|
21
21
|
}>;
|
|
22
22
|
export type WSReadyState = 0 | 1 | 2 | 3;
|
|
@@ -87,7 +87,7 @@ declare class Hono<E extends Env = Env, S extends Schema = {}, BasePath extends
|
|
|
87
87
|
*
|
|
88
88
|
* @param {string} path - base Path
|
|
89
89
|
* @param {Hono} app - other Hono instance
|
|
90
|
-
* @returns {Hono} routed Hono
|
|
90
|
+
* @returns {Hono} routed Hono instance
|
|
91
91
|
*
|
|
92
92
|
* @example
|
|
93
93
|
* ```ts
|
|
@@ -188,7 +188,7 @@ declare class Hono<E extends Env = Env, S extends Schema = {}, BasePath extends
|
|
|
188
188
|
*
|
|
189
189
|
* @see {@link https://hono.dev/api/hono#fetch}
|
|
190
190
|
*
|
|
191
|
-
* @param {Request} request -
|
|
191
|
+
* @param {Request} request - request Object of request
|
|
192
192
|
* @param {Env} Env - env Object
|
|
193
193
|
* @param {ExecutionContext} - context of execution
|
|
194
194
|
* @returns {Response | Promise<Response>} response of request
|
package/dist/types/types.d.ts
CHANGED
|
@@ -38,18 +38,18 @@ export interface HTTPResponseError extends Error {
|
|
|
38
38
|
export type ErrorHandler<E extends Env = any> = (err: Error | HTTPResponseError, c: Context<E>) => Response | Promise<Response>;
|
|
39
39
|
export interface HandlerInterface<E extends Env = Env, M extends string = string, S extends Schema = BlankSchema, BasePath extends string = '/'> {
|
|
40
40
|
<P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, I extends Input = BlankInput, R extends HandlerResponse<any> = any, E2 extends Env = E>(handler: H<E2, P, I, R>): Hono<IntersectNonAnyTypes<[E, E2]>, S & ToSchema<M, P, I, MergeTypedResponse<R>>, BasePath>;
|
|
41
|
-
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, E2 extends Env = E>(path: P, handler: H<E2, MergedPath, I, R>): Hono<
|
|
41
|
+
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, E2 extends Env = E>(path: P, handler: H<E2, MergedPath, I, R>): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
|
|
42
42
|
<P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, I extends Input = BlankInput, I2 extends Input = I, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(...handlers: [H<E2, P, I>, H<E3, P, I2, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3]>, S & ToSchema<M, P, I2, MergeTypedResponse<R>>, BasePath>;
|
|
43
|
-
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2, R>]): Hono<
|
|
43
|
+
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2, R>]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I2, MergeTypedResponse<R>>, BasePath>;
|
|
44
44
|
<P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4]>, S & ToSchema<M, P, I3, MergeTypedResponse<R>>, BasePath>;
|
|
45
|
-
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3, R>]): Hono<
|
|
45
|
+
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3, R>]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I3, MergeTypedResponse<R>>, BasePath>;
|
|
46
46
|
<P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S & ToSchema<M, P, I4, MergeTypedResponse<R>>, BasePath>;
|
|
47
47
|
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(path: P, ...handlers: [
|
|
48
48
|
H<E2, MergedPath, I>,
|
|
49
49
|
H<E3, MergedPath, I2>,
|
|
50
50
|
H<E4, MergedPath, I3>,
|
|
51
51
|
H<E5, MergedPath, I4, R>
|
|
52
|
-
]): Hono<
|
|
52
|
+
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I4, MergeTypedResponse<R>>, BasePath>;
|
|
53
53
|
<P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4>, H<E6, P, I5, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, S & ToSchema<M, P, I5, MergeTypedResponse<R>>, BasePath>;
|
|
54
54
|
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>>(path: P, ...handlers: [
|
|
55
55
|
H<E2, MergedPath, I>,
|
|
@@ -57,7 +57,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
|
|
|
57
57
|
H<E4, MergedPath, I3>,
|
|
58
58
|
H<E5, MergedPath, I4>,
|
|
59
59
|
H<E6, MergedPath, I5, R>
|
|
60
|
-
]): Hono<
|
|
60
|
+
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I5, MergeTypedResponse<R>>, BasePath>;
|
|
61
61
|
<P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>>(...handlers: [
|
|
62
62
|
H<E2, P, I>,
|
|
63
63
|
H<E3, P, I2>,
|
|
@@ -73,7 +73,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
|
|
|
73
73
|
H<E5, MergedPath, I4>,
|
|
74
74
|
H<E6, MergedPath, I5>,
|
|
75
75
|
H<E7, MergedPath, I6, R>
|
|
76
|
-
]): Hono<
|
|
76
|
+
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I6, MergeTypedResponse<R>>, BasePath>;
|
|
77
77
|
<P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>>(...handlers: [
|
|
78
78
|
H<E2, P, I>,
|
|
79
79
|
H<E3, P, I2>,
|
|
@@ -91,7 +91,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
|
|
|
91
91
|
H<E6, MergedPath, I5>,
|
|
92
92
|
H<E7, MergedPath, I6>,
|
|
93
93
|
H<E8, MergedPath, I7, R>
|
|
94
|
-
]): Hono<
|
|
94
|
+
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I7, MergeTypedResponse<R>>, BasePath>;
|
|
95
95
|
<P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>>(...handlers: [
|
|
96
96
|
H<E2, P, I>,
|
|
97
97
|
H<E3, P, I2>,
|
|
@@ -111,7 +111,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
|
|
|
111
111
|
H<E7, MergedPath, I6>,
|
|
112
112
|
H<E8, MergedPath, I7>,
|
|
113
113
|
H<E9, MergedPath, I8, R>
|
|
114
|
-
]): Hono<
|
|
114
|
+
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I8, MergeTypedResponse<R>>, BasePath>;
|
|
115
115
|
<P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>>(...handlers: [
|
|
116
116
|
H<E2, P, I>,
|
|
117
117
|
H<E3, P, I2>,
|
|
@@ -133,7 +133,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
|
|
|
133
133
|
H<E8, MergedPath, I7>,
|
|
134
134
|
H<E9, MergedPath, I8>,
|
|
135
135
|
H<E10, MergedPath, I9, R>
|
|
136
|
-
]): Hono<
|
|
136
|
+
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I9, MergeTypedResponse<R>>, BasePath>;
|
|
137
137
|
<P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>>(...handlers: [
|
|
138
138
|
H<E2, P, I>,
|
|
139
139
|
H<E3, P, I2>,
|
|
@@ -157,7 +157,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
|
|
|
157
157
|
H<E9, MergedPath, I8>,
|
|
158
158
|
H<E10, MergedPath, I9>,
|
|
159
159
|
H<E11, MergedPath, I10, R>
|
|
160
|
-
]): Hono<
|
|
160
|
+
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I10, MergeTypedResponse<R>>, BasePath>;
|
|
161
161
|
<P extends string = ExtractKey<S> extends never ? BasePath : ExtractKey<S>, I extends Input = BlankInput, R extends HandlerResponse<any> = any>(...handlers: H<E, P, I, R>[]): Hono<E, S & ToSchema<M, P, I, MergeTypedResponse<R>>, BasePath>;
|
|
162
162
|
<P extends string, I extends Input = BlankInput, R extends HandlerResponse<any> = any>(path: P, ...handlers: H<E, MergePath<BasePath, P>, I, R>[]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
|
|
163
163
|
<P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(path: P): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
|
package/dist/utils/buffer.js
CHANGED
|
@@ -21,8 +21,7 @@ var timingSafeEqual = async (a, b, hashFunction) => {
|
|
|
21
21
|
if (!hashFunction) {
|
|
22
22
|
hashFunction = sha256;
|
|
23
23
|
}
|
|
24
|
-
const sa = await hashFunction(a);
|
|
25
|
-
const sb = await hashFunction(b);
|
|
24
|
+
const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);
|
|
26
25
|
if (!sa || !sb) {
|
|
27
26
|
return false;
|
|
28
27
|
}
|
package/package.json
CHANGED