hono 4.11.7 → 4.12.7

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.
Files changed (248) hide show
  1. package/dist/adapter/aws-lambda/conninfo.js +24 -0
  2. package/dist/adapter/aws-lambda/handler.js +2 -2
  3. package/dist/adapter/aws-lambda/index.js +2 -0
  4. package/dist/adapter/cloudflare-pages/conninfo.js +9 -0
  5. package/dist/adapter/cloudflare-pages/index.js +2 -0
  6. package/dist/adapter/lambda-edge/handler.js +2 -1
  7. package/dist/adapter/netlify/conninfo.js +9 -0
  8. package/dist/adapter/netlify/mod.js +2 -0
  9. package/dist/cjs/adapter/aws-lambda/conninfo.js +46 -0
  10. package/dist/cjs/adapter/aws-lambda/handler.js +2 -3
  11. package/dist/cjs/adapter/aws-lambda/index.js +3 -1
  12. package/dist/cjs/adapter/aws-lambda/types.js +0 -1
  13. package/dist/cjs/adapter/bun/conninfo.js +0 -1
  14. package/dist/cjs/adapter/bun/index.js +0 -1
  15. package/dist/cjs/adapter/bun/serve-static.js +0 -1
  16. package/dist/cjs/adapter/bun/server.js +0 -1
  17. package/dist/cjs/adapter/bun/ssg.js +0 -1
  18. package/dist/cjs/adapter/bun/websocket.js +0 -1
  19. package/dist/cjs/adapter/cloudflare-pages/conninfo.js +31 -0
  20. package/dist/cjs/adapter/cloudflare-pages/handler.js +0 -1
  21. package/dist/cjs/adapter/cloudflare-pages/index.js +3 -1
  22. package/dist/cjs/adapter/cloudflare-workers/conninfo.js +0 -1
  23. package/dist/cjs/adapter/cloudflare-workers/index.js +0 -1
  24. package/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +0 -1
  25. package/dist/cjs/adapter/cloudflare-workers/serve-static.js +0 -1
  26. package/dist/cjs/adapter/cloudflare-workers/utils.js +0 -1
  27. package/dist/cjs/adapter/cloudflare-workers/websocket.js +0 -1
  28. package/dist/cjs/adapter/deno/conninfo.js +0 -1
  29. package/dist/cjs/adapter/deno/deno.d.js +0 -1
  30. package/dist/cjs/adapter/deno/index.js +0 -1
  31. package/dist/cjs/adapter/deno/serve-static.js +0 -1
  32. package/dist/cjs/adapter/deno/ssg.js +0 -1
  33. package/dist/cjs/adapter/deno/websocket.js +0 -1
  34. package/dist/cjs/adapter/lambda-edge/conninfo.js +0 -1
  35. package/dist/cjs/adapter/lambda-edge/handler.js +2 -2
  36. package/dist/cjs/adapter/lambda-edge/index.js +0 -1
  37. package/dist/cjs/adapter/netlify/conninfo.js +31 -0
  38. package/dist/cjs/adapter/netlify/handler.js +0 -1
  39. package/dist/cjs/adapter/netlify/index.js +0 -1
  40. package/dist/cjs/adapter/netlify/mod.js +3 -1
  41. package/dist/cjs/adapter/service-worker/handler.js +0 -1
  42. package/dist/cjs/adapter/service-worker/index.js +0 -1
  43. package/dist/cjs/adapter/service-worker/types.js +0 -1
  44. package/dist/cjs/adapter/vercel/conninfo.js +0 -1
  45. package/dist/cjs/adapter/vercel/handler.js +0 -1
  46. package/dist/cjs/adapter/vercel/index.js +0 -1
  47. package/dist/cjs/client/client.js +8 -3
  48. package/dist/cjs/client/fetch-result-please.js +0 -1
  49. package/dist/cjs/client/index.js +0 -1
  50. package/dist/cjs/client/types.js +0 -1
  51. package/dist/cjs/client/utils.js +0 -1
  52. package/dist/cjs/compose.js +0 -1
  53. package/dist/cjs/context.js +6 -6
  54. package/dist/cjs/helper/accepts/accepts.js +0 -1
  55. package/dist/cjs/helper/accepts/index.js +0 -1
  56. package/dist/cjs/helper/adapter/index.js +0 -1
  57. package/dist/cjs/helper/conninfo/index.js +0 -1
  58. package/dist/cjs/helper/conninfo/types.js +0 -1
  59. package/dist/cjs/helper/cookie/index.js +0 -1
  60. package/dist/cjs/helper/css/common.js +0 -1
  61. package/dist/cjs/helper/css/index.js +0 -1
  62. package/dist/cjs/helper/dev/index.js +0 -1
  63. package/dist/cjs/helper/factory/index.js +0 -1
  64. package/dist/cjs/helper/html/index.js +0 -1
  65. package/dist/cjs/helper/proxy/index.js +0 -1
  66. package/dist/cjs/helper/route/index.js +0 -1
  67. package/dist/cjs/helper/ssg/index.js +5 -1
  68. package/dist/cjs/helper/ssg/middleware.js +0 -1
  69. package/dist/cjs/helper/ssg/plugins.js +70 -0
  70. package/dist/cjs/helper/ssg/ssg.js +2 -12
  71. package/dist/cjs/helper/ssg/utils.js +0 -1
  72. package/dist/cjs/helper/streaming/index.js +0 -1
  73. package/dist/cjs/helper/streaming/sse.js +5 -1
  74. package/dist/cjs/helper/streaming/stream.js +0 -1
  75. package/dist/cjs/helper/streaming/text.js +0 -1
  76. package/dist/cjs/helper/streaming/utils.js +0 -1
  77. package/dist/cjs/helper/testing/index.js +0 -1
  78. package/dist/cjs/helper/websocket/index.js +0 -1
  79. package/dist/cjs/hono-base.js +0 -1
  80. package/dist/cjs/hono.js +0 -1
  81. package/dist/cjs/http-exception.js +0 -1
  82. package/dist/cjs/index.js +0 -1
  83. package/dist/cjs/jsx/base.js +0 -1
  84. package/dist/cjs/jsx/children.js +0 -1
  85. package/dist/cjs/jsx/components.js +0 -1
  86. package/dist/cjs/jsx/constants.js +0 -1
  87. package/dist/cjs/jsx/context.js +4 -3
  88. package/dist/cjs/jsx/dom/client.js +0 -1
  89. package/dist/cjs/jsx/dom/components.js +0 -1
  90. package/dist/cjs/jsx/dom/context.js +0 -1
  91. package/dist/cjs/jsx/dom/css.js +0 -1
  92. package/dist/cjs/jsx/dom/hooks/index.js +0 -1
  93. package/dist/cjs/jsx/dom/index.js +0 -1
  94. package/dist/cjs/jsx/dom/intrinsic-element/components.js +40 -10
  95. package/dist/cjs/jsx/dom/jsx-dev-runtime.js +0 -1
  96. package/dist/cjs/jsx/dom/jsx-runtime.js +0 -1
  97. package/dist/cjs/jsx/dom/render.js +7 -10
  98. package/dist/cjs/jsx/dom/server.js +0 -1
  99. package/dist/cjs/jsx/dom/utils.js +0 -1
  100. package/dist/cjs/jsx/hooks/index.js +0 -1
  101. package/dist/cjs/jsx/index.js +0 -1
  102. package/dist/cjs/jsx/intrinsic-element/common.js +13 -3
  103. package/dist/cjs/jsx/intrinsic-element/components.js +18 -12
  104. package/dist/cjs/jsx/intrinsic-elements.js +0 -1
  105. package/dist/cjs/jsx/jsx-dev-runtime.js +0 -1
  106. package/dist/cjs/jsx/jsx-runtime.js +0 -1
  107. package/dist/cjs/jsx/streaming.js +13 -4
  108. package/dist/cjs/jsx/types.js +0 -1
  109. package/dist/cjs/jsx/utils.js +0 -1
  110. package/dist/cjs/middleware/basic-auth/index.js +6 -1
  111. package/dist/cjs/middleware/bearer-auth/index.js +1 -2
  112. package/dist/cjs/middleware/body-limit/index.js +0 -1
  113. package/dist/cjs/middleware/cache/index.js +0 -1
  114. package/dist/cjs/middleware/combine/index.js +0 -1
  115. package/dist/cjs/middleware/compress/index.js +0 -1
  116. package/dist/cjs/middleware/context-storage/index.js +0 -1
  117. package/dist/cjs/middleware/cors/index.js +0 -1
  118. package/dist/cjs/middleware/csrf/index.js +0 -1
  119. package/dist/cjs/middleware/etag/digest.js +0 -1
  120. package/dist/cjs/middleware/etag/index.js +0 -1
  121. package/dist/cjs/middleware/ip-restriction/index.js +0 -1
  122. package/dist/cjs/middleware/jsx-renderer/index.js +1 -1
  123. package/dist/cjs/middleware/jwk/index.js +0 -1
  124. package/dist/cjs/middleware/jwk/jwk.js +0 -1
  125. package/dist/cjs/middleware/jwt/index.js +0 -1
  126. package/dist/cjs/middleware/jwt/jwt.js +0 -1
  127. package/dist/cjs/middleware/language/index.js +0 -1
  128. package/dist/cjs/middleware/language/language.js +13 -3
  129. package/dist/cjs/middleware/logger/index.js +0 -1
  130. package/dist/cjs/middleware/method-override/index.js +0 -1
  131. package/dist/cjs/middleware/powered-by/index.js +0 -1
  132. package/dist/cjs/middleware/pretty-json/index.js +0 -1
  133. package/dist/cjs/middleware/request-id/index.js +0 -1
  134. package/dist/cjs/middleware/request-id/request-id.js +0 -1
  135. package/dist/cjs/middleware/secure-headers/index.js +0 -1
  136. package/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -1
  137. package/dist/cjs/middleware/secure-headers/secure-headers.js +0 -1
  138. package/dist/cjs/middleware/serve-static/index.js +2 -2
  139. package/dist/cjs/middleware/serve-static/path.js +0 -1
  140. package/dist/cjs/middleware/timeout/index.js +0 -1
  141. package/dist/cjs/middleware/timing/index.js +0 -1
  142. package/dist/cjs/middleware/timing/timing.js +0 -1
  143. package/dist/cjs/middleware/trailing-slash/index.js +18 -5
  144. package/dist/cjs/preset/quick.js +0 -1
  145. package/dist/cjs/preset/tiny.js +0 -1
  146. package/dist/cjs/request/constants.js +0 -1
  147. package/dist/cjs/request.js +0 -1
  148. package/dist/cjs/router/linear-router/index.js +0 -1
  149. package/dist/cjs/router/linear-router/router.js +0 -1
  150. package/dist/cjs/router/pattern-router/index.js +0 -1
  151. package/dist/cjs/router/pattern-router/router.js +0 -1
  152. package/dist/cjs/router/reg-exp-router/index.js +0 -1
  153. package/dist/cjs/router/reg-exp-router/matcher.js +0 -1
  154. package/dist/cjs/router/reg-exp-router/node.js +0 -1
  155. package/dist/cjs/router/reg-exp-router/prepared-router.js +0 -1
  156. package/dist/cjs/router/reg-exp-router/router.js +0 -1
  157. package/dist/cjs/router/reg-exp-router/trie.js +0 -1
  158. package/dist/cjs/router/smart-router/index.js +0 -1
  159. package/dist/cjs/router/smart-router/router.js +0 -1
  160. package/dist/cjs/router/trie-router/index.js +0 -1
  161. package/dist/cjs/router/trie-router/node.js +33 -17
  162. package/dist/cjs/router/trie-router/router.js +0 -1
  163. package/dist/cjs/router.js +0 -1
  164. package/dist/cjs/types.js +0 -1
  165. package/dist/cjs/utils/accept.js +188 -29
  166. package/dist/cjs/utils/basic-auth.js +0 -1
  167. package/dist/cjs/utils/body.js +3 -1
  168. package/dist/cjs/utils/buffer.js +29 -3
  169. package/dist/cjs/utils/color.js +0 -1
  170. package/dist/cjs/utils/compress.js +0 -1
  171. package/dist/cjs/utils/concurrent.js +0 -1
  172. package/dist/cjs/utils/constants.js +0 -1
  173. package/dist/cjs/utils/cookie.js +5 -1
  174. package/dist/cjs/utils/crypto.js +0 -1
  175. package/dist/cjs/utils/encode.js +0 -1
  176. package/dist/cjs/utils/filepath.js +0 -1
  177. package/dist/cjs/utils/handler.js +0 -1
  178. package/dist/cjs/utils/headers.js +0 -1
  179. package/dist/cjs/utils/html.js +0 -1
  180. package/dist/cjs/utils/http-status.js +0 -1
  181. package/dist/cjs/utils/ipaddr.js +0 -1
  182. package/dist/cjs/utils/jwt/index.js +0 -1
  183. package/dist/cjs/utils/jwt/jwa.js +0 -1
  184. package/dist/cjs/utils/jwt/jws.js +0 -1
  185. package/dist/cjs/utils/jwt/jwt.js +17 -14
  186. package/dist/cjs/utils/jwt/types.js +0 -1
  187. package/dist/cjs/utils/jwt/utf8.js +0 -1
  188. package/dist/cjs/utils/mime.js +0 -1
  189. package/dist/cjs/utils/stream.js +0 -1
  190. package/dist/cjs/utils/types.js +0 -1
  191. package/dist/cjs/utils/url.js +8 -5
  192. package/dist/cjs/validator/index.js +0 -1
  193. package/dist/cjs/validator/utils.js +0 -1
  194. package/dist/cjs/validator/validator.js +2 -3
  195. package/dist/client/client.js +8 -2
  196. package/dist/context.js +6 -5
  197. package/dist/helper/ssg/index.js +3 -0
  198. package/dist/helper/ssg/plugins.js +47 -0
  199. package/dist/helper/ssg/ssg.js +2 -10
  200. package/dist/helper/streaming/sse.js +5 -0
  201. package/dist/jsx/context.js +4 -2
  202. package/dist/jsx/dom/intrinsic-element/components.js +47 -10
  203. package/dist/jsx/dom/render.js +7 -9
  204. package/dist/jsx/intrinsic-element/common.js +10 -1
  205. package/dist/jsx/intrinsic-element/components.js +24 -12
  206. package/dist/jsx/streaming.js +13 -3
  207. package/dist/middleware/basic-auth/index.js +6 -0
  208. package/dist/middleware/bearer-auth/index.js +1 -1
  209. package/dist/middleware/jsx-renderer/index.js +1 -0
  210. package/dist/middleware/language/language.js +13 -2
  211. package/dist/middleware/serve-static/index.js +2 -1
  212. package/dist/middleware/trailing-slash/index.js +18 -4
  213. package/dist/router/trie-router/node.js +33 -16
  214. package/dist/tsconfig.build.tsbuildinfo +1 -0
  215. package/dist/types/adapter/aws-lambda/conninfo.d.ts +27 -0
  216. package/dist/types/adapter/aws-lambda/handler.d.ts +2 -2
  217. package/dist/types/adapter/aws-lambda/index.d.ts +1 -0
  218. package/dist/types/adapter/cloudflare-pages/conninfo.d.ts +21 -0
  219. package/dist/types/adapter/cloudflare-pages/index.d.ts +1 -0
  220. package/dist/types/adapter/netlify/conninfo.d.ts +21 -0
  221. package/dist/types/adapter/netlify/mod.d.ts +1 -0
  222. package/dist/types/client/index.d.ts +1 -1
  223. package/dist/types/client/types.d.ts +43 -2
  224. package/dist/types/context.d.ts +4 -0
  225. package/dist/types/helper/ssg/index.d.ts +1 -0
  226. package/dist/types/helper/ssg/plugins.d.ts +27 -0
  227. package/dist/types/helper/ssg/ssg.d.ts +0 -8
  228. package/dist/types/hono-base.d.ts +1 -1
  229. package/dist/types/jsx/intrinsic-element/common.d.ts +3 -0
  230. package/dist/types/jsx/types.d.ts +1 -1
  231. package/dist/types/middleware/basic-auth/index.d.ts +19 -0
  232. package/dist/types/middleware/jsx-renderer/index.d.ts +1 -1
  233. package/dist/types/middleware/jwt/index.d.ts +1 -1
  234. package/dist/types/middleware/jwt/jwt.d.ts +1 -1
  235. package/dist/types/middleware/trailing-slash/index.d.ts +43 -2
  236. package/dist/types/request.d.ts +1 -1
  237. package/dist/types/types.d.ts +18 -18
  238. package/dist/types/utils/accept.d.ts +0 -5
  239. package/dist/types/utils/buffer.d.ts +10 -1
  240. package/dist/types/utils/url.d.ts +10 -0
  241. package/dist/utils/accept.js +188 -28
  242. package/dist/utils/body.js +3 -0
  243. package/dist/utils/buffer.js +29 -2
  244. package/dist/utils/cookie.js +5 -0
  245. package/dist/utils/jwt/jwt.js +17 -13
  246. package/dist/utils/url.js +6 -3
  247. package/dist/validator/validator.js +2 -2
  248. package/package.json +5 -4
@@ -0,0 +1,27 @@
1
+ import type { SSGPlugin } from './ssg';
2
+ /**
3
+ * The default plugin that defines the recommended behavior.
4
+ *
5
+ * @experimental
6
+ * `defaultPlugin` is an experimental feature.
7
+ * The API might be changed.
8
+ */
9
+ export declare const defaultPlugin: () => SSGPlugin;
10
+ /**
11
+ * The redirect plugin that generates HTML redirect pages for HTTP redirect responses for status codes 301, 302, 303, 307 and 308.
12
+ *
13
+ * When used with `defaultPlugin`, place `redirectPlugin` before it, because `defaultPlugin` skips non-200 responses.
14
+ *
15
+ * ```ts
16
+ * // ✅ Will work as expected
17
+ * toSSG(app, fs, { plugins: [redirectPlugin(), defaultPlugin()] })
18
+ *
19
+ * // ❌ Will not work as expected
20
+ * toSSG(app, fs, { plugins: [defaultPlugin(), redirectPlugin()] })
21
+ * ```
22
+ *
23
+ * @experimental
24
+ * `redirectPlugin` is an experimental feature.
25
+ * The API might be changed.
26
+ */
27
+ export declare const redirectPlugin: () => SSGPlugin;
@@ -83,14 +83,6 @@ export interface ToSSGInterface {
83
83
  export interface ToSSGAdaptorInterface<E extends Env = Env, S extends Schema = {}, BasePath extends string = '/'> {
84
84
  (app: Hono<E, S, BasePath>, options?: ToSSGOptions): Promise<ToSSGResult>;
85
85
  }
86
- /**
87
- * The default plugin that defines the recommended behavior.
88
- *
89
- * @experimental
90
- * `defaultPlugin` is an experimental feature.
91
- * The API might be changed.
92
- */
93
- export declare const defaultPlugin: SSGPlugin;
94
86
  /**
95
87
  * @experimental
96
88
  * `toSSG` is an experimental feature.
@@ -197,7 +197,7 @@ declare class Hono<E extends Env = Env, S extends Schema = {}, BasePath extends
197
197
  * ```
198
198
  * @see https://hono.dev/docs/api/hono#request
199
199
  */
200
- request: (input: RequestInfo | URL, requestInit?: RequestInit, Env?: E["Bindings"] | {}, executionCtx?: ExecutionContext) => Response | Promise<Response>;
200
+ request: (input: Request | string | URL, requestInit?: RequestInit, Env?: E["Bindings"] | {}, executionCtx?: ExecutionContext) => Response | Promise<Response>;
201
201
  /**
202
202
  * `.fire()` automatically adds a global fetch event listener.
203
203
  * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.
@@ -1,3 +1,6 @@
1
+ import type { Props } from '../base';
1
2
  export declare const deDupeKeyMap: Record<string, string[]>;
2
3
  export declare const domRenderers: Record<string, Function>;
3
4
  export declare const dataPrecedenceAttr = "data-precedence";
5
+ export declare const isStylesheetLinkWithPrecedence: (props: Props) => boolean;
6
+ export declare const shouldDeDupeByKey: (tagName: string, supportSort: boolean) => boolean;
@@ -19,7 +19,7 @@ type ReactElement<P = any, T = string | Function> = JSXNode & {
19
19
  key: string | null;
20
20
  };
21
21
  type ReactNode = ReactElement | string | number | boolean | null | undefined;
22
- type ComponentClass<P = {}, S = {}> = unknown;
22
+ type ComponentClass<_P = {}, _S = {}> = unknown;
23
23
  export type { ReactElement, ReactNode, ComponentClass };
24
24
  export type Event = globalThis.Event;
25
25
  export type MouseEvent = globalThis.MouseEvent;
@@ -11,11 +11,13 @@ type BasicAuthOptions = {
11
11
  realm?: string;
12
12
  hashFunction?: Function;
13
13
  invalidUserMessage?: string | object | MessageFunction;
14
+ onAuthSuccess?: (c: Context, username: string) => void | Promise<void>;
14
15
  } | {
15
16
  verifyUser: (username: string, password: string, c: Context) => boolean | Promise<boolean>;
16
17
  realm?: string;
17
18
  hashFunction?: Function;
18
19
  invalidUserMessage?: string | object | MessageFunction;
20
+ onAuthSuccess?: (c: Context, username: string) => void | Promise<void>;
19
21
  };
20
22
  /**
21
23
  * Basic Auth Middleware for Hono.
@@ -29,6 +31,7 @@ type BasicAuthOptions = {
29
31
  * @param {Function} [options.hashFunction] - The hash function used for secure comparison.
30
32
  * @param {Function} [options.verifyUser] - The function to verify user credentials.
31
33
  * @param {string | object | MessageFunction} [options.invalidUserMessage="Unauthorized"] - The invalid user message.
34
+ * @param {Function} [options.onAuthSuccess] - Callback function called on successful authentication.
32
35
  * @returns {MiddlewareHandler} The middleware handler function.
33
36
  * @throws {HTTPException} If neither "username and password" nor "verifyUser" options are provided.
34
37
  *
@@ -48,6 +51,22 @@ type BasicAuthOptions = {
48
51
  * return c.text('You are authorized')
49
52
  * })
50
53
  * ```
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * // With onAuthSuccess callback
58
+ * app.use(
59
+ * '/auth/*',
60
+ * basicAuth({
61
+ * username: 'hono',
62
+ * password: 'ahotproject',
63
+ * onAuthSuccess: (c, username) => {
64
+ * c.set('user', { name: username, role: 'admin' })
65
+ * console.log(`User ${username} authenticated`)
66
+ * },
67
+ * })
68
+ * )
69
+ * ```
51
70
  */
52
71
  export declare const basicAuth: (options: BasicAuthOptions, ...users: {
53
72
  username: string;
@@ -48,7 +48,7 @@ type ComponentWithChildren = (props: PropsWithChildren<PropsForRenderer & {
48
48
  * })
49
49
  * ```
50
50
  */
51
- export declare const jsxRenderer: (component?: ComponentWithChildren, options?: RendererOptions) => MiddlewareHandler;
51
+ export declare const jsxRenderer: <E extends Env = Env>(component?: ComponentWithChildren, options?: RendererOptions | ((c: Context<E>) => RendererOptions)) => MiddlewareHandler;
52
52
  /**
53
53
  * useRequestContext for Hono.
54
54
  *
@@ -3,6 +3,6 @@ export type { JwtVariables };
3
3
  export { jwt, verifyWithJwks, verify, decode, sign } from './jwt';
4
4
  export { AlgorithmTypes } from '../../utils/jwt/jwa';
5
5
  declare module '../..' {
6
- interface ContextVariableMap extends JwtVariables {
6
+ interface ContextVariableMap extends JwtVariables<unknown> {
7
7
  }
8
8
  }
@@ -17,7 +17,7 @@ export type JwtVariables<T = any> = {
17
17
  * @see {@link https://hono.dev/docs/middleware/builtin/jwt}
18
18
  *
19
19
  * @param {object} options - The options for the JWT middleware.
20
- * @param {SignatureKey} [options.secret] - A value of your secret key.
20
+ * @param {SignatureKey} options.secret - A value of your secret key.
21
21
  * @param {string} [options.cookie] - If this value is set, then the value is retrieved from the cookie header using that value as a key, which is then validated as a token.
22
22
  * @param {SignatureAlgorithm} options.alg - An algorithm type that is used for verifying (required). Available types are `HS256` | `HS384` | `HS512` | `RS256` | `RS384` | `RS512` | `PS256` | `PS384` | `PS512` | `ES256` | `ES384` | `ES512` | `EdDSA`.
23
23
  * @param {string} [options.headerName='Authorization'] - The name of the header to look for the JWT token. Default is 'Authorization'.
@@ -3,11 +3,22 @@
3
3
  * Trailing Slash Middleware for Hono.
4
4
  */
5
5
  import type { MiddlewareHandler } from '../../types';
6
+ type TrimTrailingSlashOptions = {
7
+ /**
8
+ * If `true`, the middleware will always redirect requests with a trailing slash
9
+ * before executing handlers.
10
+ * This is useful for routes with wildcards (`*`).
11
+ * If `false` (default), it will only redirect when the route is not found (404).
12
+ * @default false
13
+ */
14
+ alwaysRedirect?: boolean;
15
+ };
6
16
  /**
7
17
  * Trailing Slash Middleware for Hono.
8
18
  *
9
19
  * @see {@link https://hono.dev/docs/middleware/builtin/trailing-slash}
10
20
  *
21
+ * @param {TrimTrailingSlashOptions} options - The options for the middleware.
11
22
  * @returns {MiddlewareHandler} The middleware handler function.
12
23
  *
13
24
  * @example
@@ -17,14 +28,34 @@ import type { MiddlewareHandler } from '../../types';
17
28
  * app.use(trimTrailingSlash())
18
29
  * app.get('/about/me/', (c) => c.text('With Trailing Slash'))
19
30
  * ```
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * // With alwaysRedirect option for wildcard routes
35
+ * const app = new Hono()
36
+ *
37
+ * app.use(trimTrailingSlash({ alwaysRedirect: true }))
38
+ * app.get('/my-path/*', (c) => c.text('Wildcard route'))
39
+ * ```
20
40
  */
21
- export declare const trimTrailingSlash: () => MiddlewareHandler;
41
+ export declare const trimTrailingSlash: (options?: TrimTrailingSlashOptions) => MiddlewareHandler;
42
+ type AppendTrailingSlashOptions = {
43
+ /**
44
+ * If `true`, the middleware will always redirect requests without a trailing slash
45
+ * before executing handlers.
46
+ * This is useful for routes with wildcards (`*`).
47
+ * If `false` (default), it will only redirect when the route is not found (404).
48
+ * @default false
49
+ */
50
+ alwaysRedirect?: boolean;
51
+ };
22
52
  /**
23
53
  * Append trailing slash middleware for Hono.
24
54
  * Append a trailing slash to the URL if it doesn't have one. For example, `/path/to/page` will be redirected to `/path/to/page/`.
25
55
  *
26
56
  * @see {@link https://hono.dev/docs/middleware/builtin/trailing-slash}
27
57
  *
58
+ * @param {AppendTrailingSlashOptions} options - The options for the middleware.
28
59
  * @returns {MiddlewareHandler} The middleware handler function.
29
60
  *
30
61
  * @example
@@ -33,5 +64,15 @@ export declare const trimTrailingSlash: () => MiddlewareHandler;
33
64
  *
34
65
  * app.use(appendTrailingSlash())
35
66
  * ```
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * // With alwaysRedirect option for wildcard routes
71
+ * const app = new Hono()
72
+ *
73
+ * app.use(appendTrailingSlash({ alwaysRedirect: true }))
74
+ * app.get('/my-path/*', (c) => c.text('Wildcard route'))
75
+ * ```
36
76
  */
37
- export declare const appendTrailingSlash: () => MiddlewareHandler;
77
+ export declare const appendTrailingSlash: (options?: AppendTrailingSlashOptions) => MiddlewareHandler;
78
+ export {};
@@ -59,7 +59,7 @@ export declare class HonoRequest<P extends string = '/', I extends Input['out']
59
59
  * const { id, comment_id } = c.req.param()
60
60
  * ```
61
61
  */
62
- param<P2 extends ParamKeys<P> = ParamKeys<P>>(key: P2 extends `${infer _}?` ? never : P2): string;
62
+ param<P2 extends ParamKeys<P> = ParamKeys<P>>(key: string extends P ? never : P2 extends `${infer _}?` ? never : P2): string;
63
63
  param<P2 extends RemoveQuestion<ParamKeys<P>> = RemoveQuestion<ParamKeys<P>>>(key: P2): string | undefined;
64
64
  param(key: string): string | undefined;
65
65
  param<P2 extends string = P>(): Simplify<UnionToIntersection<ParamKeyToRecord<ParamKeys<P2>>>>;
@@ -50,26 +50,26 @@ export interface HTTPResponseError extends Error {
50
50
  export type ErrorHandler<E extends Env = any> = (err: Error | HTTPResponseError, c: Context<E>) => Response | Promise<Response>;
51
51
  export interface HandlerInterface<E extends Env = Env, M extends string = string, S extends Schema = BlankSchema, BasePath extends string = '/', CurrentPath extends string = BasePath> {
52
52
  <P extends string = CurrentPath, I extends Input = BlankInput, R extends HandlerResponse<any> = any, E2 extends Env = E>(handler: H<E2, P, I, R>): HonoBase<IntersectNonAnyTypes<[E, E2]>, S & ToSchema<M, P, I, MergeTypedResponse<R>>, BasePath, CurrentPath>;
53
- <P extends string = CurrentPath, I extends Input = BlankInput, I2 extends Input = I, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, M1 extends H<E2, P, any> = H<E2, P, any>>(...handlers: [H<E2, P, I> & M1, H<E3, P, I2, R>]): HonoBase<IntersectNonAnyTypes<[E, E2, E3]>, S & ToSchema<M, P, I2, MergeTypedResponse<R> | MergeMiddlewareResponse<M1>>, BasePath, CurrentPath>;
53
+ <P extends string = CurrentPath, I extends Input = BlankInput, I2 extends Input = I, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, M1 extends H<E2, P, I> = H<E2, P, I>>(...handlers: [H<E2, P, I> & M1, H<E3, P, I2, R>]): HonoBase<IntersectNonAnyTypes<[E, E2, E3]>, S & ToSchema<M, P, I2, MergeTypedResponse<R> | MergeMiddlewareResponse<M1>>, BasePath, CurrentPath>;
54
54
  <P extends string, MergedPath extends MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, E2 extends Env = E>(path: P, handler: H<E2, MergedPath, I, R>): HonoBase<E, AddSchemaIfHasResponse<MergeTypedResponse<R>, S, M, P, I, BasePath>, BasePath, MergePath<BasePath, P>>;
55
- <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, M1 extends H<E2, P, any> = H<E2, P, any>, M2 extends H<E3, P, any> = H<E3, P, any>>(...handlers: [H<E2, P, I> & M1, H<E3, P, I2> & M2, H<E4, P, I3, R>]): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4]>, S & ToSchema<M, P, I3, MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2>>, BasePath, CurrentPath>;
56
- <P extends string, MergedPath extends 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]>, M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>>(path: P, ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2, R>]): HonoBase<E, AddSchemaIfHasResponse<MergeTypedResponse<R> | MergeMiddlewareResponse<M1>, S, M, P, I2, BasePath>, BasePath, MergePath<BasePath, P>>;
57
- <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, M1 extends H<E2, P, any> = H<E2, P, any>, M2 extends H<E3, P, any> = H<E3, P, any>, M3 extends H<E4, P, any> = H<E4, P, any>>(...handlers: [H<E2, P, I> & M1, H<E3, P, I2> & M2, H<E4, P, I3> & M3, H<E5, P, I4, R>]): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S & ToSchema<M, P, I4, MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3>>, BasePath, CurrentPath>;
58
- <P extends string, MergedPath extends 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>, M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>>(path: P, ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2> & M2, H<E4, MergedPath, I3, R>]): HonoBase<E, AddSchemaIfHasResponse<MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2>, S, M, P, I3, BasePath>, BasePath, MergePath<BasePath, P>>;
59
- <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, M1 extends H<E2, P, any> = H<E2, P, any>, M2 extends H<E3, P, any> = H<E3, P, any>, M3 extends H<E4, P, any> = H<E4, P, any>, M4 extends H<E5, P, any> = H<E5, P, any>>(...handlers: [
55
+ <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, M1 extends H<E2, P, I> = H<E2, P, I>, M2 extends H<E3, P, I2> = H<E3, P, I2>>(...handlers: [H<E2, P, I> & M1, H<E3, P, I2> & M2, H<E4, P, I3, R>]): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4]>, S & ToSchema<M, P, I3, MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2>>, BasePath, CurrentPath>;
56
+ <P extends string, MergedPath extends 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]>, M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>>(path: P, ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2, R>]): HonoBase<E, AddSchemaIfHasResponse<MergeTypedResponse<R> | MergeMiddlewareResponse<M1>, S, M, P, I2, BasePath>, BasePath, MergePath<BasePath, P>>;
57
+ <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, M1 extends H<E2, P, I> = H<E2, P, I>, M2 extends H<E3, P, I2> = H<E3, P, I2>, M3 extends H<E4, P, I3> = H<E4, P, I3>>(...handlers: [H<E2, P, I> & M1, H<E3, P, I2> & M2, H<E4, P, I3> & M3, H<E5, P, I4, R>]): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S & ToSchema<M, P, I4, MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3>>, BasePath, CurrentPath>;
58
+ <P extends string, MergedPath extends 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>, M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>>(path: P, ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2> & M2, H<E4, MergedPath, I3, R>]): HonoBase<E, AddSchemaIfHasResponse<MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2>, S, M, P, I3, BasePath>, BasePath, MergePath<BasePath, P>>;
59
+ <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, M1 extends H<E2, P, I> = H<E2, P, I>, M2 extends H<E3, P, I2> = H<E3, P, I2>, M3 extends H<E4, P, I3> = H<E4, P, I3>, M4 extends H<E5, P, I4> = H<E5, P, I4>>(...handlers: [
60
60
  H<E2, P, I> & M1,
61
61
  H<E3, P, I2> & M2,
62
62
  H<E4, P, I3> & M3,
63
63
  H<E5, P, I4> & M4,
64
64
  H<E6, P, I5, R>
65
65
  ]): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, S & ToSchema<M, P, I5, MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3> | MergeMiddlewareResponse<M4>>, BasePath, CurrentPath>;
66
- <P extends string, MergedPath extends 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>, M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>, M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>>(path: P, ...handlers: [
66
+ <P extends string, MergedPath extends 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>, M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>, M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>>(path: P, ...handlers: [
67
67
  H<E2, MergedPath, I> & M1,
68
68
  H<E3, MergedPath, I2> & M2,
69
69
  H<E4, MergedPath, I3> & M3,
70
70
  H<E5, MergedPath, I4, R>
71
71
  ]): HonoBase<E, AddSchemaIfHasResponse<MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3>, S, M, P, I4, BasePath>, BasePath, MergePath<BasePath, P>>;
72
- <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, M1 extends H<E2, P, any> = H<E2, P, any>, M2 extends H<E3, P, any> = H<E3, P, any>, M3 extends H<E4, P, any> = H<E4, P, any>, M4 extends H<E5, P, any> = H<E5, P, any>, M5 extends H<E6, P, any> = H<E6, P, any>>(...handlers: [
72
+ <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, M1 extends H<E2, P, I> = H<E2, P, I>, M2 extends H<E3, P, I2> = H<E3, P, I2>, M3 extends H<E4, P, I3> = H<E4, P, I3>, M4 extends H<E5, P, I4> = H<E5, P, I4>, M5 extends H<E6, P, I5> = H<E6, P, I5>>(...handlers: [
73
73
  H<E2, P, I> & M1,
74
74
  H<E3, P, I2> & M2,
75
75
  H<E4, P, I3> & M3,
@@ -77,14 +77,14 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
77
77
  H<E6, P, I5> & M5,
78
78
  H<E7, P, I6, R>
79
79
  ]): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, S & ToSchema<M, P, I6, MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3> | MergeMiddlewareResponse<M4> | MergeMiddlewareResponse<M5>>, BasePath, CurrentPath>;
80
- <P extends string, MergedPath extends 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>, M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>, M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>, M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>>(path: P, ...handlers: [
80
+ <P extends string, MergedPath extends 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>, M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>, M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>, M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>>(path: P, ...handlers: [
81
81
  H<E2, MergedPath, I> & M1,
82
82
  H<E3, MergedPath, I2> & M2,
83
83
  H<E4, MergedPath, I3> & M3,
84
84
  H<E5, MergedPath, I4> & M4,
85
85
  H<E6, MergedPath, I5, R>
86
86
  ]): HonoBase<E, AddSchemaIfHasResponse<MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3> | MergeMiddlewareResponse<M4>, S, M, P, I5, BasePath>, BasePath, MergePath<BasePath, P>>;
87
- <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, M1 extends H<E2, P, any> = H<E2, P, any>, M2 extends H<E3, P, any> = H<E3, P, any>, M3 extends H<E4, P, any> = H<E4, P, any>, M4 extends H<E5, P, any> = H<E5, P, any>, M5 extends H<E6, P, any> = H<E6, P, any>, M6 extends H<E7, P, any> = H<E7, P, any>>(...handlers: [
87
+ <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, M1 extends H<E2, P, I> = H<E2, P, I>, M2 extends H<E3, P, I2> = H<E3, P, I2>, M3 extends H<E4, P, I3> = H<E4, P, I3>, M4 extends H<E5, P, I4> = H<E5, P, I4>, M5 extends H<E6, P, I5> = H<E6, P, I5>, M6 extends H<E7, P, I6> = H<E7, P, I6>>(...handlers: [
88
88
  H<E2, P, I> & M1,
89
89
  H<E3, P, I2> & M2,
90
90
  H<E4, P, I3> & M3,
@@ -93,7 +93,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
93
93
  H<E7, P, I6> & M6,
94
94
  H<E8, P, I7, R>
95
95
  ]): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, S & ToSchema<M, P, I7, MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3> | MergeMiddlewareResponse<M4> | MergeMiddlewareResponse<M5> | MergeMiddlewareResponse<M6>>, BasePath, CurrentPath>;
96
- <P extends string, MergedPath extends 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, I6 extends Input = I & I2 & I3 & I4 & I5, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>, M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>, M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>, M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>, M5 extends H<E6, MergedPath, any> = H<E6, MergedPath, any>>(path: P, ...handlers: [
96
+ <P extends string, MergedPath extends 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, I6 extends Input = I & I2 & I3 & I4 & I5, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>, M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>, M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>, M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>, M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>>(path: P, ...handlers: [
97
97
  H<E2, MergedPath, I> & M1,
98
98
  H<E3, MergedPath, I2> & M2,
99
99
  H<E4, MergedPath, I3> & M3,
@@ -101,7 +101,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
101
101
  H<E6, MergedPath, I5> & M5,
102
102
  H<E7, MergedPath, I6, R>
103
103
  ]): HonoBase<E, AddSchemaIfHasResponse<MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3> | MergeMiddlewareResponse<M4> | MergeMiddlewareResponse<M5>, S, M, P, I6, BasePath>, BasePath, MergePath<BasePath, P>>;
104
- <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, M1 extends H<E2, P, any> = H<E2, P, any>, M2 extends H<E3, P, any> = H<E3, P, any>, M3 extends H<E4, P, any> = H<E4, P, any>, M4 extends H<E5, P, any> = H<E5, P, any>, M5 extends H<E6, P, any> = H<E6, P, any>, M6 extends H<E7, P, any> = H<E7, P, any>, M7 extends H<E8, P, any> = H<E8, P, any>>(...handlers: [
104
+ <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, M1 extends H<E2, P, I> = H<E2, P, I>, M2 extends H<E3, P, I2> = H<E3, P, I2>, M3 extends H<E4, P, I3> = H<E4, P, I3>, M4 extends H<E5, P, I4> = H<E5, P, I4>, M5 extends H<E6, P, I5> = H<E6, P, I5>, M6 extends H<E7, P, I6> = H<E7, P, I6>, M7 extends H<E8, P, I7> = H<E8, P, I7>>(...handlers: [
105
105
  H<E2, P, I> & M1,
106
106
  H<E3, P, I2> & M2,
107
107
  H<E4, P, I3> & M3,
@@ -111,7 +111,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
111
111
  H<E8, P, I7> & M7,
112
112
  H<E9, P, I8, R>
113
113
  ]): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, S & ToSchema<M, P, I8, MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3> | MergeMiddlewareResponse<M4> | MergeMiddlewareResponse<M5> | MergeMiddlewareResponse<M6> | MergeMiddlewareResponse<M7>>, BasePath, CurrentPath>;
114
- <P extends string, MergedPath extends 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, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>, M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>, M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>, M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>, M5 extends H<E6, MergedPath, any> = H<E6, MergedPath, any>, M6 extends H<E7, MergedPath, any> = H<E7, MergedPath, any>>(path: P, ...handlers: [
114
+ <P extends string, MergedPath extends 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, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>, M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>, M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>, M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>, M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>, M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>>(path: P, ...handlers: [
115
115
  H<E2, MergedPath, I> & M1,
116
116
  H<E3, MergedPath, I2> & M2,
117
117
  H<E4, MergedPath, I3> & M3,
@@ -120,7 +120,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
120
120
  H<E7, MergedPath, I6> & M6,
121
121
  H<E8, MergedPath, I7, R>
122
122
  ]): HonoBase<E, AddSchemaIfHasResponse<MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3> | MergeMiddlewareResponse<M4> | MergeMiddlewareResponse<M5> | MergeMiddlewareResponse<M6>, S, M, P, I7, BasePath>, BasePath, MergePath<BasePath, P>>;
123
- <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, M1 extends H<E2, P, any> = H<E2, P, any>, M2 extends H<E3, P, any> = H<E3, P, any>, M3 extends H<E4, P, any> = H<E4, P, any>, M4 extends H<E5, P, any> = H<E5, P, any>, M5 extends H<E6, P, any> = H<E6, P, any>, M6 extends H<E7, P, any> = H<E7, P, any>, M7 extends H<E8, P, any> = H<E8, P, any>, M8 extends H<E9, P, any> = H<E9, P, any>>(...handlers: [
123
+ <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, M1 extends H<E2, P, I> = H<E2, P, I>, M2 extends H<E3, P, I2> = H<E3, P, I2>, M3 extends H<E4, P, I3> = H<E4, P, I3>, M4 extends H<E5, P, I4> = H<E5, P, I4>, M5 extends H<E6, P, I5> = H<E6, P, I5>, M6 extends H<E7, P, I6> = H<E7, P, I6>, M7 extends H<E8, P, I7> = H<E8, P, I7>, M8 extends H<E9, P, I8> = H<E9, P, I8>>(...handlers: [
124
124
  H<E2, P, I> & M1,
125
125
  H<E3, P, I2> & M2,
126
126
  H<E4, P, I3> & M3,
@@ -131,7 +131,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
131
131
  H<E9, P, I8> & M8,
132
132
  H<E10, P, I9, R>
133
133
  ]): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, S & ToSchema<M, P, I9, MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3> | MergeMiddlewareResponse<M4> | MergeMiddlewareResponse<M5> | MergeMiddlewareResponse<M6> | MergeMiddlewareResponse<M7> | MergeMiddlewareResponse<M8>>, BasePath, CurrentPath>;
134
- <P extends string, MergedPath extends 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, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>, M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>, M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>, M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>, M5 extends H<E6, MergedPath, any> = H<E6, MergedPath, any>, M6 extends H<E7, MergedPath, any> = H<E7, MergedPath, any>, M7 extends H<E8, MergedPath, any> = H<E8, MergedPath, any>>(path: P, ...handlers: [
134
+ <P extends string, MergedPath extends 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, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>, M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>, M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>, M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>, M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>, M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>, M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>>(path: P, ...handlers: [
135
135
  H<E2, MergedPath, I> & M1,
136
136
  H<E3, MergedPath, I2> & M2,
137
137
  H<E4, MergedPath, I3> & M3,
@@ -141,7 +141,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
141
141
  H<E8, MergedPath, I7> & M7,
142
142
  H<E9, MergedPath, I8, R>
143
143
  ]): HonoBase<E, AddSchemaIfHasResponse<MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3> | MergeMiddlewareResponse<M4> | MergeMiddlewareResponse<M5> | MergeMiddlewareResponse<M6> | MergeMiddlewareResponse<M7>, S, M, P, I8, BasePath>, BasePath, MergePath<BasePath, P>>;
144
- <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, M1 extends H<E2, P, any> = H<E2, P, any>, M2 extends H<E3, P, any> = H<E3, P, any>, M3 extends H<E4, P, any> = H<E4, P, any>, M4 extends H<E5, P, any> = H<E5, P, any>, M5 extends H<E6, P, any> = H<E6, P, any>, M6 extends H<E7, P, any> = H<E7, P, any>, M7 extends H<E8, P, any> = H<E8, P, any>, M8 extends H<E9, P, any> = H<E9, P, any>, M9 extends H<E10, P, any> = H<E10, P, any>>(...handlers: [
144
+ <P extends string = CurrentPath, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, M1 extends H<E2, P, I> = H<E2, P, I>, M2 extends H<E3, P, I2> = H<E3, P, I2>, M3 extends H<E4, P, I3> = H<E4, P, I3>, M4 extends H<E5, P, I4> = H<E5, P, I4>, M5 extends H<E6, P, I5> = H<E6, P, I5>, M6 extends H<E7, P, I6> = H<E7, P, I6>, M7 extends H<E8, P, I7> = H<E8, P, I7>, M8 extends H<E9, P, I8> = H<E9, P, I8>, M9 extends H<E10, P, I9> = H<E10, P, I9>>(...handlers: [
145
145
  H<E2, P, I> & M1,
146
146
  H<E3, P, I2> & M2,
147
147
  H<E4, P, I3> & M3,
@@ -153,7 +153,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
153
153
  H<E10, P, I9> & M9,
154
154
  H<E11, P, I10, R>
155
155
  ]): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>, S & ToSchema<M, P, I10, MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3> | MergeMiddlewareResponse<M4> | MergeMiddlewareResponse<M5> | MergeMiddlewareResponse<M6> | MergeMiddlewareResponse<M7> | MergeMiddlewareResponse<M8> | MergeMiddlewareResponse<M9>>, BasePath, CurrentPath>;
156
- <P extends string, MergedPath extends 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, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>, M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>, M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>, M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>, M5 extends H<E6, MergedPath, any> = H<E6, MergedPath, any>, M6 extends H<E7, MergedPath, any> = H<E7, MergedPath, any>, M7 extends H<E8, MergedPath, any> = H<E8, MergedPath, any>, M8 extends H<E9, MergedPath, any> = H<E9, MergedPath, any>>(path: P, ...handlers: [
156
+ <P extends string, MergedPath extends 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, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>, M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>, M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>, M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>, M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>, M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>, M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>, M8 extends H<E9, MergedPath, I8> = H<E9, MergedPath, I8>>(path: P, ...handlers: [
157
157
  H<E2, MergedPath, I> & M1,
158
158
  H<E3, MergedPath, I2> & M2,
159
159
  H<E4, MergedPath, I3> & M3,
@@ -164,7 +164,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
164
164
  H<E9, MergedPath, I8> & M8,
165
165
  H<E10, MergedPath, I9, R>
166
166
  ]): HonoBase<E, AddSchemaIfHasResponse<MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2> | MergeMiddlewareResponse<M3> | MergeMiddlewareResponse<M4> | MergeMiddlewareResponse<M5> | MergeMiddlewareResponse<M6> | MergeMiddlewareResponse<M7> | MergeMiddlewareResponse<M8>, S, M, P, I9, BasePath>, BasePath, MergePath<BasePath, P>>;
167
- <P extends string, MergedPath extends 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, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>, M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>, M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>, M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>, M5 extends H<E6, MergedPath, any> = H<E6, MergedPath, any>, M6 extends H<E7, MergedPath, any> = H<E7, MergedPath, any>, M7 extends H<E8, MergedPath, any> = H<E8, MergedPath, any>, M8 extends H<E9, MergedPath, any> = H<E9, MergedPath, any>, M9 extends H<E10, MergedPath, any> = H<E10, MergedPath, any>>(path: P, ...handlers: [
167
+ <P extends string, MergedPath extends 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, 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 = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>, M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>, M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>, M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>, M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>, M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>, M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>, M8 extends H<E9, MergedPath, I8> = H<E9, MergedPath, I8>, M9 extends H<E10, MergedPath, I9> = H<E10, MergedPath, I9>>(path: P, ...handlers: [
168
168
  H<E2, MergedPath, I> & M1,
169
169
  H<E3, MergedPath, I2> & M2,
170
170
  H<E4, MergedPath, I3> & M3,
@@ -3,9 +3,4 @@ export interface Accept {
3
3
  params: Record<string, string>;
4
4
  q: number;
5
5
  }
6
- /**
7
- * Parse an Accept header into an array of objects with type, parameters, and quality score.
8
- * @param acceptHeader The Accept header string
9
- * @returns An array of parsed Accept values
10
- */
11
6
  export declare const parseAccept: (acceptHeader: string) => Accept[];
@@ -3,6 +3,15 @@
3
3
  * Buffer utility.
4
4
  */
5
5
  export declare const equal: (a: ArrayBuffer, b: ArrayBuffer) => boolean;
6
- export declare const timingSafeEqual: (a: string | object | boolean, b: string | object | boolean, hashFunction?: Function) => Promise<boolean>;
6
+ type StringHashFunction = (input: string) => string | null | Promise<string | null>;
7
+ type TimingSafeEqual = {
8
+ (a: string, b: string, hashFunction?: StringHashFunction): Promise<boolean>;
9
+ /**
10
+ * @deprecated object and boolean signatures that take boolean as first and second arguments, and functions with signatures that take non-string arguments have been deprecated
11
+ */
12
+ (a: string | object | boolean, b: string | object | boolean, hashFunction?: Function): Promise<boolean>;
13
+ };
14
+ export declare const timingSafeEqual: TimingSafeEqual;
7
15
  export declare const bufferToString: (buffer: ArrayBuffer) => string;
8
16
  export declare const bufferToFormData: (arrayBuffer: ArrayBuffer, contentType: string) => Promise<FormData>;
17
+ export {};
@@ -8,6 +8,16 @@ export declare const splitRoutingPath: (routePath: string) => string[];
8
8
  export declare const getPattern: (label: string, next?: string) => Pattern | null;
9
9
  type Decoder = (str: string) => string;
10
10
  export declare const tryDecode: (str: string, decoder: Decoder) => string;
11
+ /**
12
+ * Try to apply decodeURI() to given string.
13
+ * If it fails, skip invalid percent encoding or invalid UTF-8 sequences, and apply decodeURI() to the rest as much as possible.
14
+ * @param str The string to decode.
15
+ * @returns The decoded string that sometimes contains undecodable percent encoding.
16
+ * @example
17
+ * tryDecodeURI('Hello%20World') // 'Hello World'
18
+ * tryDecodeURI('Hello%20World/%A4%A2') // 'Hello World/%A4%A2'
19
+ */
20
+ export declare const tryDecodeURI: (str: string) => string;
11
21
  export declare const getPath: (request: Request) => string;
12
22
  export declare const getQueryStrings: (url: string) => string;
13
23
  export declare const getPathNoStrict: (request: Request) => string;