@kerebron/extension-server-hono 0.4.27 → 0.4.29

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 (97) hide show
  1. package/esm/HonoYjsMemAdapter.d.ts +41 -0
  2. package/esm/HonoYjsMemAdapter.d.ts.map +1 -0
  3. package/esm/HonoYjsMemAdapter.js +204 -0
  4. package/esm/HonoYjsMemAdapter.js.map +1 -0
  5. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/compose.d.ts +15 -0
  6. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/compose.d.ts.map +1 -0
  7. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/compose.js +65 -0
  8. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/compose.js.map +1 -0
  9. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/context.d.ts +452 -0
  10. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/context.d.ts.map +1 -0
  11. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/context.js +411 -0
  12. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/context.js.map +1 -0
  13. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/helper/websocket/index.d.ts +70 -0
  14. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/helper/websocket/index.d.ts.map +1 -0
  15. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/helper/websocket/index.js +63 -0
  16. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/helper/websocket/index.js.map +1 -0
  17. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/hono-base.d.ts +221 -0
  18. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/hono-base.d.ts.map +1 -0
  19. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/hono-base.js +392 -0
  20. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/hono-base.js.map +1 -0
  21. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/http-exception.d.ts +60 -0
  22. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/http-exception.d.ts.map +1 -0
  23. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/http-exception.js +62 -0
  24. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/http-exception.js.map +1 -0
  25. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request/constants.d.ts +2 -0
  26. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request/constants.d.ts.map +1 -0
  27. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request/constants.js +2 -0
  28. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request/constants.js.map +1 -0
  29. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request.d.ts +314 -0
  30. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request.d.ts.map +1 -0
  31. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request.js +328 -0
  32. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request.js.map +1 -0
  33. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/router.d.ts +98 -0
  34. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/router.d.ts.map +1 -0
  35. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/router.js +26 -0
  36. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/router.js.map +1 -0
  37. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/types.d.ts +574 -0
  38. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/types.d.ts.map +1 -0
  39. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/types.js +12 -0
  40. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/types.js.map +1 -0
  41. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/body.d.ts +80 -0
  42. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/body.d.ts.map +1 -0
  43. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/body.js +112 -0
  44. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/body.js.map +1 -0
  45. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/constants.d.ts +5 -0
  46. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/constants.d.ts.map +1 -0
  47. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/constants.js +5 -0
  48. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/constants.js.map +1 -0
  49. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/headers.d.ts +9 -0
  50. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/headers.d.ts.map +1 -0
  51. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/headers.js +6 -0
  52. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/headers.js.map +1 -0
  53. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/html.d.ts +45 -0
  54. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/html.d.ts.map +1 -0
  55. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/html.js +123 -0
  56. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/html.js.map +1 -0
  57. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/http-status.d.ts +33 -0
  58. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/http-status.d.ts.map +1 -0
  59. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/http-status.js +6 -0
  60. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/http-status.js.map +1 -0
  61. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/mime.d.ts +71 -0
  62. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/mime.d.ts.map +1 -0
  63. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/mime.js +84 -0
  64. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/mime.js.map +1 -0
  65. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/types.d.ts +75 -0
  66. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/types.d.ts.map +1 -0
  67. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/types.js +6 -0
  68. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/types.js.map +1 -0
  69. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/url.d.ts +30 -0
  70. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/url.d.ts.map +1 -0
  71. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/url.js +256 -0
  72. package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/url.js.map +1 -0
  73. package/esm/mod.d.ts +5 -0
  74. package/esm/mod.d.ts.map +1 -0
  75. package/esm/mod.js +2 -0
  76. package/esm/mod.js.map +1 -0
  77. package/esm/package.json +3 -0
  78. package/package.json +5 -2
  79. package/src/HonoYjsMemAdapter.ts +264 -0
  80. package/src/deps/jsr.io/@hono/hono/4.11.3/src/compose.ts +73 -0
  81. package/src/deps/jsr.io/@hono/hono/4.11.3/src/context.ts +770 -0
  82. package/src/deps/jsr.io/@hono/hono/4.11.3/src/helper/websocket/index.ts +140 -0
  83. package/src/deps/jsr.io/@hono/hono/4.11.3/src/hono-base.ts +539 -0
  84. package/src/deps/jsr.io/@hono/hono/4.11.3/src/http-exception.ts +78 -0
  85. package/src/deps/jsr.io/@hono/hono/4.11.3/src/request/constants.ts +1 -0
  86. package/src/deps/jsr.io/@hono/hono/4.11.3/src/request.ts +487 -0
  87. package/src/deps/jsr.io/@hono/hono/4.11.3/src/router.ts +103 -0
  88. package/src/deps/jsr.io/@hono/hono/4.11.3/src/types.ts +2489 -0
  89. package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/body.ts +229 -0
  90. package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/constants.ts +4 -0
  91. package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/headers.ts +333 -0
  92. package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/html.ts +182 -0
  93. package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/http-status.ts +72 -0
  94. package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/mime.ts +96 -0
  95. package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/types.ts +116 -0
  96. package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/url.ts +310 -0
  97. package/src/mod.ts +5 -0
@@ -0,0 +1,2489 @@
1
+ /**
2
+ * @module
3
+ * This module contains some type definitions for the Hono modules.
4
+ */
5
+
6
+ /* eslint-disable @typescript-eslint/no-unused-vars */
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ import type { Context } from './context.js'
9
+ import type { HonoBase } from './hono-base.js'
10
+ import type { CustomHeader, RequestHeader } from './utils/headers.js'
11
+ import type { StatusCode } from './utils/http-status.js'
12
+ import type {
13
+ IfAnyThenEmptyObject,
14
+ IsAny,
15
+ JSONValue,
16
+ RemoveBlankRecord,
17
+ Simplify,
18
+ UnionToIntersection,
19
+ } from './utils/types.js'
20
+
21
+ ////////////////////////////////////////
22
+ ////// //////
23
+ ////// Values //////
24
+ ////// //////
25
+ ////////////////////////////////////////
26
+
27
+ export type Bindings = object
28
+ export type Variables = object
29
+
30
+ export type BlankEnv = {}
31
+ export type Env = {
32
+ Bindings?: Bindings
33
+ Variables?: Variables
34
+ }
35
+
36
+ export type Next = () => Promise<void>
37
+
38
+ export type ExtractInput<I extends Input | Input['in']> = I extends Input
39
+ ? unknown extends I['in']
40
+ ? {}
41
+ : I['in']
42
+ : I
43
+ export type Input = {
44
+ in?: {}
45
+ out?: {}
46
+ outputFormat?: ResponseFormat
47
+ }
48
+
49
+ export type BlankSchema = {}
50
+ export type BlankInput = {}
51
+
52
+ ////////////////////////////////////////
53
+ ////// //////
54
+ ////// Routes //////
55
+ ////// //////
56
+ ////////////////////////////////////////
57
+
58
+ export interface RouterRoute {
59
+ basePath: string
60
+ path: string
61
+ method: string
62
+ handler: H
63
+ }
64
+
65
+ ////////////////////////////////////////
66
+ ////// //////
67
+ ////// Handlers //////
68
+ ////// //////
69
+ ////////////////////////////////////////
70
+
71
+ export type HandlerResponse<O> =
72
+ | Response
73
+ | TypedResponse<O>
74
+ | Promise<Response | TypedResponse<O>>
75
+ | Promise<void>
76
+
77
+ export type Handler<
78
+ E extends Env = any,
79
+ P extends string = any,
80
+ I extends Input = BlankInput,
81
+ R extends HandlerResponse<any> = any,
82
+ > = (c: Context<E, P, I>, next: Next) => R
83
+
84
+ export type MiddlewareHandler<
85
+ E extends Env = any,
86
+ P extends string = string,
87
+ I extends Input = {},
88
+ R extends HandlerResponse<any> = Response,
89
+ > = (c: Context<E, P, I>, next: Next) => Promise<R | void>
90
+
91
+ export type H<
92
+ E extends Env = any,
93
+ P extends string = any,
94
+ I extends Input = BlankInput,
95
+ R extends HandlerResponse<any> = any,
96
+ > = Handler<E, P, I, R> | MiddlewareHandler<E, P, I, R>
97
+
98
+ /**
99
+ * You can extend this interface to define a custom `c.notFound()` Response type.
100
+ *
101
+ * @example
102
+ * declare module 'hono' {
103
+ * interface NotFoundResponse extends Response, TypedResponse<string, 404, 'text'> {}
104
+ * }
105
+ */
106
+ export interface NotFoundResponse {}
107
+
108
+ export type NotFoundHandler<E extends Env = any> = (
109
+ c: Context<E>
110
+ ) => NotFoundResponse extends Response
111
+ ? NotFoundResponse | Promise<NotFoundResponse>
112
+ : Response | Promise<Response>
113
+
114
+ export interface HTTPResponseError extends Error {
115
+ getResponse: () => Response
116
+ }
117
+ export type ErrorHandler<E extends Env = any> = (
118
+ err: Error | HTTPResponseError,
119
+ c: Context<E>
120
+ ) => Response | Promise<Response>
121
+
122
+ ////////////////////////////////////////
123
+ ////// //////
124
+ ////// HandlerInterface //////
125
+ ////// //////
126
+ ////////////////////////////////////////
127
+
128
+ export interface HandlerInterface<
129
+ E extends Env = Env,
130
+ M extends string = string,
131
+ S extends Schema = BlankSchema,
132
+ BasePath extends string = '/',
133
+ CurrentPath extends string = BasePath,
134
+ > {
135
+ // app.get(handler)
136
+ <
137
+ P extends string = CurrentPath,
138
+ I extends Input = BlankInput,
139
+ R extends HandlerResponse<any> = any,
140
+ E2 extends Env = E,
141
+ >(
142
+ handler: H<E2, P, I, R>
143
+ ): HonoBase<
144
+ IntersectNonAnyTypes<[E, E2]>,
145
+ S & ToSchema<M, P, I, MergeTypedResponse<R>>,
146
+ BasePath,
147
+ CurrentPath
148
+ >
149
+
150
+ // app.get(handler x2)
151
+ <
152
+ P extends string = CurrentPath,
153
+ I extends Input = BlankInput,
154
+ I2 extends Input = I,
155
+ R extends HandlerResponse<any> = any,
156
+ E2 extends Env = E,
157
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
158
+ M1 extends H<E2, P, any> = H<E2, P, any>,
159
+ >(
160
+ ...handlers: [H<E2, P, I> & M1, H<E3, P, I2, R>]
161
+ ): HonoBase<
162
+ IntersectNonAnyTypes<[E, E2, E3]>,
163
+ S & ToSchema<M, P, I2, MergeTypedResponse<R> | MergeMiddlewareResponse<M1>>,
164
+ BasePath,
165
+ CurrentPath
166
+ >
167
+
168
+ // app.get(path, handler)
169
+ <
170
+ P extends string,
171
+ MergedPath extends MergePath<BasePath, P>,
172
+ R extends HandlerResponse<any> = any,
173
+ I extends Input = BlankInput,
174
+ E2 extends Env = E,
175
+ >(
176
+ path: P,
177
+ handler: H<E2, MergedPath, I, R>
178
+ ): HonoBase<
179
+ E,
180
+ AddSchemaIfHasResponse<MergeTypedResponse<R>, S, M, P, I, BasePath>,
181
+ BasePath,
182
+ MergePath<BasePath, P>
183
+ >
184
+
185
+ // app.get(handler x 3)
186
+ <
187
+ P extends string = CurrentPath,
188
+ R extends HandlerResponse<any> = any,
189
+ I extends Input = BlankInput,
190
+ I2 extends Input = I,
191
+ I3 extends Input = I & I2,
192
+ E2 extends Env = E,
193
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
194
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
195
+ // Middleware
196
+ M1 extends H<E2, P, any> = H<E2, P, any>,
197
+ M2 extends H<E3, P, any> = H<E3, P, any>,
198
+ >(
199
+ ...handlers: [H<E2, P, I> & M1, H<E3, P, I2> & M2, H<E4, P, I3, R>]
200
+ ): HonoBase<
201
+ IntersectNonAnyTypes<[E, E2, E3, E4]>,
202
+ S &
203
+ ToSchema<
204
+ M,
205
+ P,
206
+ I3,
207
+ MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2>
208
+ >,
209
+ BasePath,
210
+ CurrentPath
211
+ >
212
+
213
+ // app.get(path, handler x2)
214
+ <
215
+ P extends string,
216
+ MergedPath extends MergePath<BasePath, P>,
217
+ R extends HandlerResponse<any> = any,
218
+ I extends Input = BlankInput,
219
+ I2 extends Input = I,
220
+ E2 extends Env = E,
221
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
222
+ // Middleware
223
+ M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>,
224
+ >(
225
+ path: P,
226
+ ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2, R>]
227
+ ): HonoBase<
228
+ E,
229
+ AddSchemaIfHasResponse<
230
+ MergeTypedResponse<R> | MergeMiddlewareResponse<M1>,
231
+ S,
232
+ M,
233
+ P,
234
+ I2,
235
+ BasePath
236
+ >,
237
+ BasePath,
238
+ MergePath<BasePath, P>
239
+ >
240
+
241
+ // app.get(handler x 4)
242
+ <
243
+ P extends string = CurrentPath,
244
+ R extends HandlerResponse<any> = any,
245
+ I extends Input = BlankInput,
246
+ I2 extends Input = I,
247
+ I3 extends Input = I & I2,
248
+ I4 extends Input = I & I2 & I3,
249
+ E2 extends Env = E,
250
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
251
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
252
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
253
+ // Middleware
254
+ M1 extends H<E2, P, any> = H<E2, P, any>,
255
+ M2 extends H<E3, P, any> = H<E3, P, any>,
256
+ M3 extends H<E4, P, any> = H<E4, P, any>,
257
+ >(
258
+ ...handlers: [H<E2, P, I> & M1, H<E3, P, I2> & M2, H<E4, P, I3> & M3, H<E5, P, I4, R>]
259
+ ): HonoBase<
260
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
261
+ S &
262
+ ToSchema<
263
+ M,
264
+ P,
265
+ I4,
266
+ | MergeTypedResponse<R>
267
+ | MergeMiddlewareResponse<M1>
268
+ | MergeMiddlewareResponse<M2>
269
+ | MergeMiddlewareResponse<M3>
270
+ >,
271
+ BasePath,
272
+ CurrentPath
273
+ >
274
+
275
+ // app.get(path, handler x3)
276
+ <
277
+ P extends string,
278
+ MergedPath extends MergePath<BasePath, P>,
279
+ R extends HandlerResponse<any> = any,
280
+ I extends Input = BlankInput,
281
+ I2 extends Input = I,
282
+ I3 extends Input = I & I2,
283
+ E2 extends Env = E,
284
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
285
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
286
+ // Middleware
287
+ M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>,
288
+ M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>,
289
+ >(
290
+ path: P,
291
+ ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2> & M2, H<E4, MergedPath, I3, R>]
292
+ ): HonoBase<
293
+ E,
294
+ AddSchemaIfHasResponse<
295
+ MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2>,
296
+ S,
297
+ M,
298
+ P,
299
+ I3,
300
+ BasePath
301
+ >,
302
+ BasePath,
303
+ MergePath<BasePath, P>
304
+ >
305
+
306
+ // app.get(handler x 5)
307
+ <
308
+ P extends string = CurrentPath,
309
+ R extends HandlerResponse<any> = any,
310
+ I extends Input = BlankInput,
311
+ I2 extends Input = I,
312
+ I3 extends Input = I & I2,
313
+ I4 extends Input = I & I2 & I3,
314
+ I5 extends Input = I & I2 & I3 & I4,
315
+ E2 extends Env = E,
316
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
317
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
318
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
319
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
320
+ // Middleware
321
+ M1 extends H<E2, P, any> = H<E2, P, any>,
322
+ M2 extends H<E3, P, any> = H<E3, P, any>,
323
+ M3 extends H<E4, P, any> = H<E4, P, any>,
324
+ M4 extends H<E5, P, any> = H<E5, P, any>,
325
+ >(
326
+ ...handlers: [
327
+ H<E2, P, I> & M1,
328
+ H<E3, P, I2> & M2,
329
+ H<E4, P, I3> & M3,
330
+ H<E5, P, I4> & M4,
331
+ H<E6, P, I5, R>,
332
+ ]
333
+ ): HonoBase<
334
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
335
+ S &
336
+ ToSchema<
337
+ M,
338
+ P,
339
+ I5,
340
+ | MergeTypedResponse<R>
341
+ | MergeMiddlewareResponse<M1>
342
+ | MergeMiddlewareResponse<M2>
343
+ | MergeMiddlewareResponse<M3>
344
+ | MergeMiddlewareResponse<M4>
345
+ >,
346
+ BasePath,
347
+ CurrentPath
348
+ >
349
+
350
+ // app.get(path, handler x4)
351
+ <
352
+ P extends string,
353
+ MergedPath extends MergePath<BasePath, P>,
354
+ R extends HandlerResponse<any> = any,
355
+ I extends Input = BlankInput,
356
+ I2 extends Input = I,
357
+ I3 extends Input = I & I2,
358
+ I4 extends Input = I & I2 & I3,
359
+ E2 extends Env = E,
360
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
361
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
362
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
363
+ // Middleware
364
+ M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>,
365
+ M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>,
366
+ M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>,
367
+ >(
368
+ path: P,
369
+ ...handlers: [
370
+ H<E2, MergedPath, I> & M1,
371
+ H<E3, MergedPath, I2> & M2,
372
+ H<E4, MergedPath, I3> & M3,
373
+ H<E5, MergedPath, I4, R>,
374
+ ]
375
+ ): HonoBase<
376
+ E,
377
+ AddSchemaIfHasResponse<
378
+ | MergeTypedResponse<R>
379
+ | MergeMiddlewareResponse<M1>
380
+ | MergeMiddlewareResponse<M2>
381
+ | MergeMiddlewareResponse<M3>,
382
+ S,
383
+ M,
384
+ P,
385
+ I4,
386
+ BasePath
387
+ >,
388
+ BasePath,
389
+ MergePath<BasePath, P>
390
+ >
391
+
392
+ // app.get(handler x 6)
393
+ <
394
+ P extends string = CurrentPath,
395
+ R extends HandlerResponse<any> = any,
396
+ I extends Input = BlankInput,
397
+ I2 extends Input = I,
398
+ I3 extends Input = I & I2,
399
+ I4 extends Input = I & I2 & I3,
400
+ I5 extends Input = I & I2 & I3 & I4,
401
+ I6 extends Input = I & I2 & I3 & I4 & I5,
402
+ E2 extends Env = E,
403
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
404
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
405
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
406
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
407
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
408
+ // Middleware
409
+ M1 extends H<E2, P, any> = H<E2, P, any>,
410
+ M2 extends H<E3, P, any> = H<E3, P, any>,
411
+ M3 extends H<E4, P, any> = H<E4, P, any>,
412
+ M4 extends H<E5, P, any> = H<E5, P, any>,
413
+ M5 extends H<E6, P, any> = H<E6, P, any>,
414
+ >(
415
+ ...handlers: [
416
+ H<E2, P, I> & M1,
417
+ H<E3, P, I2> & M2,
418
+ H<E4, P, I3> & M3,
419
+ H<E5, P, I4> & M4,
420
+ H<E6, P, I5> & M5,
421
+ H<E7, P, I6, R>,
422
+ ]
423
+ ): HonoBase<
424
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
425
+ S &
426
+ ToSchema<
427
+ M,
428
+ P,
429
+ I6,
430
+ | MergeTypedResponse<R>
431
+ | MergeMiddlewareResponse<M1>
432
+ | MergeMiddlewareResponse<M2>
433
+ | MergeMiddlewareResponse<M3>
434
+ | MergeMiddlewareResponse<M4>
435
+ | MergeMiddlewareResponse<M5>
436
+ >,
437
+ BasePath,
438
+ CurrentPath
439
+ >
440
+
441
+ // app.get(path, handler x5)
442
+ <
443
+ P extends string,
444
+ MergedPath extends MergePath<BasePath, P>,
445
+ R extends HandlerResponse<any> = any,
446
+ I extends Input = BlankInput,
447
+ I2 extends Input = I,
448
+ I3 extends Input = I & I2,
449
+ I4 extends Input = I & I2 & I3,
450
+ I5 extends Input = I & I2 & I3 & I4,
451
+ E2 extends Env = E,
452
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
453
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
454
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
455
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
456
+ // Middleware
457
+ M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>,
458
+ M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>,
459
+ M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>,
460
+ M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>,
461
+ >(
462
+ path: P,
463
+ ...handlers: [
464
+ H<E2, MergedPath, I> & M1,
465
+ H<E3, MergedPath, I2> & M2,
466
+ H<E4, MergedPath, I3> & M3,
467
+ H<E5, MergedPath, I4> & M4,
468
+ H<E6, MergedPath, I5, R>,
469
+ ]
470
+ ): HonoBase<
471
+ E,
472
+ AddSchemaIfHasResponse<
473
+ | MergeTypedResponse<R>
474
+ | MergeMiddlewareResponse<M1>
475
+ | MergeMiddlewareResponse<M2>
476
+ | MergeMiddlewareResponse<M3>
477
+ | MergeMiddlewareResponse<M4>,
478
+ S,
479
+ M,
480
+ P,
481
+ I5,
482
+ BasePath
483
+ >,
484
+ BasePath,
485
+ MergePath<BasePath, P>
486
+ >
487
+
488
+ // app.get(handler x 7)
489
+ <
490
+ P extends string = CurrentPath,
491
+ R extends HandlerResponse<any> = any,
492
+ I extends Input = BlankInput,
493
+ I2 extends Input = I,
494
+ I3 extends Input = I & I2,
495
+ I4 extends Input = I & I2 & I3,
496
+ I5 extends Input = I & I2 & I3 & I4,
497
+ I6 extends Input = I & I2 & I3 & I4 & I5,
498
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
499
+ E2 extends Env = E,
500
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
501
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
502
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
503
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
504
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
505
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
506
+ // Middleware
507
+ M1 extends H<E2, P, any> = H<E2, P, any>,
508
+ M2 extends H<E3, P, any> = H<E3, P, any>,
509
+ M3 extends H<E4, P, any> = H<E4, P, any>,
510
+ M4 extends H<E5, P, any> = H<E5, P, any>,
511
+ M5 extends H<E6, P, any> = H<E6, P, any>,
512
+ M6 extends H<E7, P, any> = H<E7, P, any>,
513
+ >(
514
+ ...handlers: [
515
+ H<E2, P, I> & M1,
516
+ H<E3, P, I2> & M2,
517
+ H<E4, P, I3> & M3,
518
+ H<E5, P, I4> & M4,
519
+ H<E6, P, I5> & M5,
520
+ H<E7, P, I6> & M6,
521
+ H<E8, P, I7, R>,
522
+ ]
523
+ ): HonoBase<
524
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
525
+ S &
526
+ ToSchema<
527
+ M,
528
+ P,
529
+ I7,
530
+ | MergeTypedResponse<R>
531
+ | MergeMiddlewareResponse<M1>
532
+ | MergeMiddlewareResponse<M2>
533
+ | MergeMiddlewareResponse<M3>
534
+ | MergeMiddlewareResponse<M4>
535
+ | MergeMiddlewareResponse<M5>
536
+ | MergeMiddlewareResponse<M6>
537
+ >,
538
+ BasePath,
539
+ CurrentPath
540
+ >
541
+
542
+ // app.get(path, handler x6)
543
+ <
544
+ P extends string,
545
+ MergedPath extends MergePath<BasePath, P>,
546
+ R extends HandlerResponse<any> = any,
547
+ I extends Input = BlankInput,
548
+ I2 extends Input = I,
549
+ I3 extends Input = I & I2,
550
+ I4 extends Input = I & I2 & I3,
551
+ I5 extends Input = I & I2 & I3 & I4,
552
+ I6 extends Input = I & I2 & I3 & I4 & I5,
553
+ E2 extends Env = E,
554
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
555
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
556
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
557
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
558
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
559
+ // Middleware
560
+ M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>,
561
+ M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>,
562
+ M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>,
563
+ M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>,
564
+ M5 extends H<E6, MergedPath, any> = H<E6, MergedPath, any>,
565
+ >(
566
+ path: P,
567
+ ...handlers: [
568
+ H<E2, MergedPath, I> & M1,
569
+ H<E3, MergedPath, I2> & M2,
570
+ H<E4, MergedPath, I3> & M3,
571
+ H<E5, MergedPath, I4> & M4,
572
+ H<E6, MergedPath, I5> & M5,
573
+ H<E7, MergedPath, I6, R>,
574
+ ]
575
+ ): HonoBase<
576
+ E,
577
+ AddSchemaIfHasResponse<
578
+ | MergeTypedResponse<R>
579
+ | MergeMiddlewareResponse<M1>
580
+ | MergeMiddlewareResponse<M2>
581
+ | MergeMiddlewareResponse<M3>
582
+ | MergeMiddlewareResponse<M4>
583
+ | MergeMiddlewareResponse<M5>,
584
+ S,
585
+ M,
586
+ P,
587
+ I6,
588
+ BasePath
589
+ >,
590
+ BasePath,
591
+ MergePath<BasePath, P>
592
+ >
593
+
594
+ // app.get(handler x 8)
595
+ <
596
+ P extends string = CurrentPath,
597
+ R extends HandlerResponse<any> = any,
598
+ I extends Input = BlankInput,
599
+ I2 extends Input = I,
600
+ I3 extends Input = I & I2,
601
+ I4 extends Input = I & I2 & I3,
602
+ I5 extends Input = I & I2 & I3 & I4,
603
+ I6 extends Input = I & I2 & I3 & I4 & I5,
604
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
605
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
606
+ E2 extends Env = E,
607
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
608
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
609
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
610
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
611
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
612
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
613
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
614
+ // Middleware
615
+ M1 extends H<E2, P, any> = H<E2, P, any>,
616
+ M2 extends H<E3, P, any> = H<E3, P, any>,
617
+ M3 extends H<E4, P, any> = H<E4, P, any>,
618
+ M4 extends H<E5, P, any> = H<E5, P, any>,
619
+ M5 extends H<E6, P, any> = H<E6, P, any>,
620
+ M6 extends H<E7, P, any> = H<E7, P, any>,
621
+ M7 extends H<E8, P, any> = H<E8, P, any>,
622
+ >(
623
+ ...handlers: [
624
+ H<E2, P, I> & M1,
625
+ H<E3, P, I2> & M2,
626
+ H<E4, P, I3> & M3,
627
+ H<E5, P, I4> & M4,
628
+ H<E6, P, I5> & M5,
629
+ H<E7, P, I6> & M6,
630
+ H<E8, P, I7> & M7,
631
+ H<E9, P, I8, R>,
632
+ ]
633
+ ): HonoBase<
634
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
635
+ S &
636
+ ToSchema<
637
+ M,
638
+ P,
639
+ I8,
640
+ | MergeTypedResponse<R>
641
+ | MergeMiddlewareResponse<M1>
642
+ | MergeMiddlewareResponse<M2>
643
+ | MergeMiddlewareResponse<M3>
644
+ | MergeMiddlewareResponse<M4>
645
+ | MergeMiddlewareResponse<M5>
646
+ | MergeMiddlewareResponse<M6>
647
+ | MergeMiddlewareResponse<M7>
648
+ >,
649
+ BasePath,
650
+ CurrentPath
651
+ >
652
+
653
+ // app.get(path, handler x7)
654
+ <
655
+ P extends string,
656
+ MergedPath extends MergePath<BasePath, P>,
657
+ R extends HandlerResponse<any> = any,
658
+ I extends Input = BlankInput,
659
+ I2 extends Input = I,
660
+ I3 extends Input = I & I2,
661
+ I4 extends Input = I & I2 & I3,
662
+ I5 extends Input = I & I2 & I3 & I4,
663
+ I6 extends Input = I & I2 & I3 & I4 & I5,
664
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
665
+ E2 extends Env = E,
666
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
667
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
668
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
669
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
670
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
671
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
672
+ // Middleware
673
+ M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>,
674
+ M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>,
675
+ M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>,
676
+ M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>,
677
+ M5 extends H<E6, MergedPath, any> = H<E6, MergedPath, any>,
678
+ M6 extends H<E7, MergedPath, any> = H<E7, MergedPath, any>,
679
+ >(
680
+ path: P,
681
+ ...handlers: [
682
+ H<E2, MergedPath, I> & M1,
683
+ H<E3, MergedPath, I2> & M2,
684
+ H<E4, MergedPath, I3> & M3,
685
+ H<E5, MergedPath, I4> & M4,
686
+ H<E6, MergedPath, I5> & M5,
687
+ H<E7, MergedPath, I6> & M6,
688
+ H<E8, MergedPath, I7, R>,
689
+ ]
690
+ ): HonoBase<
691
+ E,
692
+ AddSchemaIfHasResponse<
693
+ | MergeTypedResponse<R>
694
+ | MergeMiddlewareResponse<M1>
695
+ | MergeMiddlewareResponse<M2>
696
+ | MergeMiddlewareResponse<M3>
697
+ | MergeMiddlewareResponse<M4>
698
+ | MergeMiddlewareResponse<M5>
699
+ | MergeMiddlewareResponse<M6>,
700
+ S,
701
+ M,
702
+ P,
703
+ I7,
704
+ BasePath
705
+ >,
706
+ BasePath,
707
+ MergePath<BasePath, P>
708
+ >
709
+
710
+ // app.get(handler x 9)
711
+ <
712
+ P extends string = CurrentPath,
713
+ R extends HandlerResponse<any> = any,
714
+ I extends Input = BlankInput,
715
+ I2 extends Input = I,
716
+ I3 extends Input = I & I2,
717
+ I4 extends Input = I & I2 & I3,
718
+ I5 extends Input = I & I2 & I3 & I4,
719
+ I6 extends Input = I & I2 & I3 & I4 & I5,
720
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
721
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
722
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
723
+ E2 extends Env = E,
724
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
725
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
726
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
727
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
728
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
729
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
730
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
731
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
732
+ // Middleware
733
+ M1 extends H<E2, P, any> = H<E2, P, any>,
734
+ M2 extends H<E3, P, any> = H<E3, P, any>,
735
+ M3 extends H<E4, P, any> = H<E4, P, any>,
736
+ M4 extends H<E5, P, any> = H<E5, P, any>,
737
+ M5 extends H<E6, P, any> = H<E6, P, any>,
738
+ M6 extends H<E7, P, any> = H<E7, P, any>,
739
+ M7 extends H<E8, P, any> = H<E8, P, any>,
740
+ M8 extends H<E9, P, any> = H<E9, P, any>,
741
+ >(
742
+ ...handlers: [
743
+ H<E2, P, I> & M1,
744
+ H<E3, P, I2> & M2,
745
+ H<E4, P, I3> & M3,
746
+ H<E5, P, I4> & M4,
747
+ H<E6, P, I5> & M5,
748
+ H<E7, P, I6> & M6,
749
+ H<E8, P, I7> & M7,
750
+ H<E9, P, I8> & M8,
751
+ H<E10, P, I9, R>,
752
+ ]
753
+ ): HonoBase<
754
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
755
+ S &
756
+ ToSchema<
757
+ M,
758
+ P,
759
+ I9,
760
+ | MergeTypedResponse<R>
761
+ | MergeMiddlewareResponse<M1>
762
+ | MergeMiddlewareResponse<M2>
763
+ | MergeMiddlewareResponse<M3>
764
+ | MergeMiddlewareResponse<M4>
765
+ | MergeMiddlewareResponse<M5>
766
+ | MergeMiddlewareResponse<M6>
767
+ | MergeMiddlewareResponse<M7>
768
+ | MergeMiddlewareResponse<M8>
769
+ >,
770
+ BasePath,
771
+ CurrentPath
772
+ >
773
+
774
+ // app.get(path, handler x8)
775
+ <
776
+ P extends string,
777
+ MergedPath extends MergePath<BasePath, P>,
778
+ R extends HandlerResponse<any> = any,
779
+ I extends Input = BlankInput,
780
+ I2 extends Input = I,
781
+ I3 extends Input = I & I2,
782
+ I4 extends Input = I & I2 & I3,
783
+ I5 extends Input = I & I2 & I3 & I4,
784
+ I6 extends Input = I & I2 & I3 & I4 & I5,
785
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
786
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
787
+ E2 extends Env = E,
788
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
789
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
790
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
791
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
792
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
793
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
794
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
795
+ // Middleware
796
+ M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>,
797
+ M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>,
798
+ M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>,
799
+ M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>,
800
+ M5 extends H<E6, MergedPath, any> = H<E6, MergedPath, any>,
801
+ M6 extends H<E7, MergedPath, any> = H<E7, MergedPath, any>,
802
+ M7 extends H<E8, MergedPath, any> = H<E8, MergedPath, any>,
803
+ >(
804
+ path: P,
805
+ ...handlers: [
806
+ H<E2, MergedPath, I> & M1,
807
+ H<E3, MergedPath, I2> & M2,
808
+ H<E4, MergedPath, I3> & M3,
809
+ H<E5, MergedPath, I4> & M4,
810
+ H<E6, MergedPath, I5> & M5,
811
+ H<E7, MergedPath, I6> & M6,
812
+ H<E8, MergedPath, I7> & M7,
813
+ H<E9, MergedPath, I8, R>,
814
+ ]
815
+ ): HonoBase<
816
+ E,
817
+ AddSchemaIfHasResponse<
818
+ | MergeTypedResponse<R>
819
+ | MergeMiddlewareResponse<M1>
820
+ | MergeMiddlewareResponse<M2>
821
+ | MergeMiddlewareResponse<M3>
822
+ | MergeMiddlewareResponse<M4>
823
+ | MergeMiddlewareResponse<M5>
824
+ | MergeMiddlewareResponse<M6>
825
+ | MergeMiddlewareResponse<M7>,
826
+ S,
827
+ M,
828
+ P,
829
+ I8,
830
+ BasePath
831
+ >,
832
+ BasePath,
833
+ MergePath<BasePath, P>
834
+ >
835
+
836
+ // app.get(handler x 10)
837
+ <
838
+ P extends string = CurrentPath,
839
+ R extends HandlerResponse<any> = any,
840
+ I extends Input = BlankInput,
841
+ I2 extends Input = I,
842
+ I3 extends Input = I & I2,
843
+ I4 extends Input = I & I2 & I3,
844
+ I5 extends Input = I & I2 & I3 & I4,
845
+ I6 extends Input = I & I2 & I3 & I4 & I5,
846
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
847
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
848
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
849
+ I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9,
850
+ E2 extends Env = E,
851
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
852
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
853
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
854
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
855
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
856
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
857
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
858
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
859
+ E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
860
+ // Middleware
861
+ M1 extends H<E2, P, any> = H<E2, P, any>,
862
+ M2 extends H<E3, P, any> = H<E3, P, any>,
863
+ M3 extends H<E4, P, any> = H<E4, P, any>,
864
+ M4 extends H<E5, P, any> = H<E5, P, any>,
865
+ M5 extends H<E6, P, any> = H<E6, P, any>,
866
+ M6 extends H<E7, P, any> = H<E7, P, any>,
867
+ M7 extends H<E8, P, any> = H<E8, P, any>,
868
+ M8 extends H<E9, P, any> = H<E9, P, any>,
869
+ M9 extends H<E10, P, any> = H<E10, P, any>,
870
+ >(
871
+ ...handlers: [
872
+ H<E2, P, I> & M1,
873
+ H<E3, P, I2> & M2,
874
+ H<E4, P, I3> & M3,
875
+ H<E5, P, I4> & M4,
876
+ H<E6, P, I5> & M5,
877
+ H<E7, P, I6> & M6,
878
+ H<E8, P, I7> & M7,
879
+ H<E9, P, I8> & M8,
880
+ H<E10, P, I9> & M9,
881
+ H<E11, P, I10, R>,
882
+ ]
883
+ ): HonoBase<
884
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>,
885
+ S &
886
+ ToSchema<
887
+ M,
888
+ P,
889
+ I10,
890
+ | MergeTypedResponse<R>
891
+ | MergeMiddlewareResponse<M1>
892
+ | MergeMiddlewareResponse<M2>
893
+ | MergeMiddlewareResponse<M3>
894
+ | MergeMiddlewareResponse<M4>
895
+ | MergeMiddlewareResponse<M5>
896
+ | MergeMiddlewareResponse<M6>
897
+ | MergeMiddlewareResponse<M7>
898
+ | MergeMiddlewareResponse<M8>
899
+ | MergeMiddlewareResponse<M9>
900
+ >,
901
+ BasePath,
902
+ CurrentPath
903
+ >
904
+
905
+ // app.get(path, handler x9)
906
+ <
907
+ P extends string,
908
+ MergedPath extends MergePath<BasePath, P>,
909
+ R extends HandlerResponse<any> = any,
910
+ I extends Input = BlankInput,
911
+ I2 extends Input = I,
912
+ I3 extends Input = I & I2,
913
+ I4 extends Input = I & I2 & I3,
914
+ I5 extends Input = I & I2 & I3 & I4,
915
+ I6 extends Input = I & I2 & I3 & I4 & I5,
916
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
917
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
918
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
919
+ E2 extends Env = E,
920
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
921
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
922
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
923
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
924
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
925
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
926
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
927
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
928
+ // Middleware
929
+ M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>,
930
+ M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>,
931
+ M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>,
932
+ M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>,
933
+ M5 extends H<E6, MergedPath, any> = H<E6, MergedPath, any>,
934
+ M6 extends H<E7, MergedPath, any> = H<E7, MergedPath, any>,
935
+ M7 extends H<E8, MergedPath, any> = H<E8, MergedPath, any>,
936
+ M8 extends H<E9, MergedPath, any> = H<E9, MergedPath, any>,
937
+ >(
938
+ path: P,
939
+ ...handlers: [
940
+ H<E2, MergedPath, I> & M1,
941
+ H<E3, MergedPath, I2> & M2,
942
+ H<E4, MergedPath, I3> & M3,
943
+ H<E5, MergedPath, I4> & M4,
944
+ H<E6, MergedPath, I5> & M5,
945
+ H<E7, MergedPath, I6> & M6,
946
+ H<E8, MergedPath, I7> & M7,
947
+ H<E9, MergedPath, I8> & M8,
948
+ H<E10, MergedPath, I9, R>,
949
+ ]
950
+ ): HonoBase<
951
+ E,
952
+ AddSchemaIfHasResponse<
953
+ | MergeTypedResponse<R>
954
+ | MergeMiddlewareResponse<M1>
955
+ | MergeMiddlewareResponse<M2>
956
+ | MergeMiddlewareResponse<M3>
957
+ | MergeMiddlewareResponse<M4>
958
+ | MergeMiddlewareResponse<M5>
959
+ | MergeMiddlewareResponse<M6>
960
+ | MergeMiddlewareResponse<M7>
961
+ | MergeMiddlewareResponse<M8>,
962
+ S,
963
+ M,
964
+ P,
965
+ I9,
966
+ BasePath
967
+ >,
968
+ BasePath,
969
+ MergePath<BasePath, P>
970
+ >
971
+
972
+ // app.get(path, handler x10)
973
+ <
974
+ P extends string,
975
+ MergedPath extends MergePath<BasePath, P>,
976
+ R extends HandlerResponse<any> = any,
977
+ I extends Input = BlankInput,
978
+ I2 extends Input = I,
979
+ I3 extends Input = I & I2,
980
+ I4 extends Input = I & I2 & I3,
981
+ I5 extends Input = I & I2 & I3 & I4,
982
+ I6 extends Input = I & I2 & I3 & I4 & I5,
983
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
984
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
985
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
986
+ I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9,
987
+ E2 extends Env = E,
988
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
989
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
990
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
991
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
992
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
993
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
994
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
995
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
996
+ E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
997
+ // Middleware
998
+ M1 extends H<E2, MergedPath, any> = H<E2, MergedPath, any>,
999
+ M2 extends H<E3, MergedPath, any> = H<E3, MergedPath, any>,
1000
+ M3 extends H<E4, MergedPath, any> = H<E4, MergedPath, any>,
1001
+ M4 extends H<E5, MergedPath, any> = H<E5, MergedPath, any>,
1002
+ M5 extends H<E6, MergedPath, any> = H<E6, MergedPath, any>,
1003
+ M6 extends H<E7, MergedPath, any> = H<E7, MergedPath, any>,
1004
+ M7 extends H<E8, MergedPath, any> = H<E8, MergedPath, any>,
1005
+ M8 extends H<E9, MergedPath, any> = H<E9, MergedPath, any>,
1006
+ M9 extends H<E10, MergedPath, any> = H<E10, MergedPath, any>,
1007
+ >(
1008
+ path: P,
1009
+ ...handlers: [
1010
+ H<E2, MergedPath, I> & M1,
1011
+ H<E3, MergedPath, I2> & M2,
1012
+ H<E4, MergedPath, I3> & M3,
1013
+ H<E5, MergedPath, I4> & M4,
1014
+ H<E6, MergedPath, I5> & M5,
1015
+ H<E7, MergedPath, I6> & M6,
1016
+ H<E8, MergedPath, I7> & M7,
1017
+ H<E9, MergedPath, I8> & M8,
1018
+ H<E10, MergedPath, I9> & M9,
1019
+ H<E11, MergedPath, I10, R>,
1020
+ ]
1021
+ ): HonoBase<
1022
+ E,
1023
+ AddSchemaIfHasResponse<
1024
+ | MergeTypedResponse<R>
1025
+ | MergeMiddlewareResponse<M1>
1026
+ | MergeMiddlewareResponse<M2>
1027
+ | MergeMiddlewareResponse<M3>
1028
+ | MergeMiddlewareResponse<M4>
1029
+ | MergeMiddlewareResponse<M5>
1030
+ | MergeMiddlewareResponse<M6>
1031
+ | MergeMiddlewareResponse<M7>
1032
+ | MergeMiddlewareResponse<M8>
1033
+ | MergeMiddlewareResponse<M9>,
1034
+ S,
1035
+ M,
1036
+ P,
1037
+ I10,
1038
+ BasePath
1039
+ >,
1040
+ BasePath,
1041
+ MergePath<BasePath, P>
1042
+ >
1043
+
1044
+ // app.get(...handlers[])
1045
+ <
1046
+ P extends string = CurrentPath,
1047
+ I extends Input = BlankInput,
1048
+ R extends HandlerResponse<any> = any,
1049
+ >(
1050
+ ...handlers: H<E, P, I, R>[]
1051
+ ): HonoBase<E, S & ToSchema<M, P, I, MergeTypedResponse<R>>, BasePath, CurrentPath>
1052
+
1053
+ // app.get(path, ...handlers[])
1054
+ <P extends string, I extends Input = BlankInput, R extends HandlerResponse<any> = any>(
1055
+ path: P,
1056
+ ...handlers: [H<E, MergePath<BasePath, P>, I, R>, ...H<E, MergePath<BasePath, P>, I, R>[]]
1057
+ ): HonoBase<
1058
+ E,
1059
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
1060
+ BasePath,
1061
+ MergePath<BasePath, P>
1062
+ >
1063
+
1064
+ // app.get(path)
1065
+ <P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(
1066
+ path: P
1067
+ ): HonoBase<
1068
+ E,
1069
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
1070
+ BasePath,
1071
+ MergePath<BasePath, P>
1072
+ >
1073
+ }
1074
+
1075
+ ////////////////////////////////////////
1076
+ ////// //////
1077
+ ////// MiddlewareHandlerInterface //////
1078
+ ////// //////
1079
+ ////////////////////////////////////////
1080
+
1081
+ export interface MiddlewareHandlerInterface<
1082
+ E extends Env = Env,
1083
+ S extends Schema = BlankSchema,
1084
+ BasePath extends string = '/',
1085
+ > {
1086
+ //// app.use(...handlers[])
1087
+ <E2 extends Env = E>(
1088
+ ...handlers: MiddlewareHandler<E2, MergePath<BasePath, '*'>>[]
1089
+ ): HonoBase<IntersectNonAnyTypes<[E, E2]>, S, BasePath, MergePath<BasePath, '*'>>
1090
+
1091
+ // app.use(handler)
1092
+ <E2 extends Env = E>(
1093
+ handler: MiddlewareHandler<E2, MergePath<BasePath, '*'>>
1094
+ ): HonoBase<IntersectNonAnyTypes<[E, E2]>, S, BasePath, MergePath<BasePath, '*'>>
1095
+
1096
+ // app.use(handler x2)
1097
+ <
1098
+ E2 extends Env = E,
1099
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1100
+ P extends string = MergePath<BasePath, '*'>,
1101
+ >(
1102
+ ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>]
1103
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3]>, S, BasePath, P>
1104
+
1105
+ // app.use(path, handler)
1106
+ <P extends string, MergedPath extends MergePath<BasePath, P>, E2 extends Env = E>(
1107
+ path: P,
1108
+ handler: MiddlewareHandler<E2, MergedPath, any, any>
1109
+ ): HonoBase<IntersectNonAnyTypes<[E, E2]>, S, BasePath, MergedPath>
1110
+
1111
+ // app.use(handler x3)
1112
+ <
1113
+ E2 extends Env = E,
1114
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1115
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1116
+ P extends string = MergePath<BasePath, '*'>,
1117
+ >(
1118
+ ...handlers: [
1119
+ MiddlewareHandler<E2, P, any, any>,
1120
+ MiddlewareHandler<E3, P, any, any>,
1121
+ MiddlewareHandler<E4, P, any, any>,
1122
+ ]
1123
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4]>, S, BasePath, P>
1124
+
1125
+ // app.use(path, handler x2)
1126
+ <
1127
+ P extends string,
1128
+ MergedPath extends MergePath<BasePath, P>,
1129
+ E2 extends Env = E,
1130
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1131
+ >(
1132
+ path: P,
1133
+ ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>]
1134
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3]>, S, BasePath, MergedPath>
1135
+
1136
+ // app.use(handler x4)
1137
+ <
1138
+ E2 extends Env = E,
1139
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1140
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1141
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1142
+ P extends string = MergePath<BasePath, '*'>,
1143
+ >(
1144
+ ...handlers: [
1145
+ MiddlewareHandler<E2, P>,
1146
+ MiddlewareHandler<E3, P>,
1147
+ MiddlewareHandler<E4, P>,
1148
+ MiddlewareHandler<E5, P>,
1149
+ ]
1150
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S, BasePath, P>
1151
+
1152
+ // app.use(path, handler x3)
1153
+ <
1154
+ P extends string,
1155
+ MergedPath extends MergePath<BasePath, P>,
1156
+ E2 extends Env = E,
1157
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1158
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1159
+ >(
1160
+ path: P,
1161
+ ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>]
1162
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4]>, S, BasePath, MergedPath>
1163
+
1164
+ // app.use(handler x5)
1165
+ <
1166
+ E2 extends Env = E,
1167
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1168
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1169
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1170
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1171
+ P extends string = MergePath<BasePath, '*'>,
1172
+ >(
1173
+ ...handlers: [
1174
+ MiddlewareHandler<E2, P>,
1175
+ MiddlewareHandler<E3, P>,
1176
+ MiddlewareHandler<E4, P>,
1177
+ MiddlewareHandler<E5, P>,
1178
+ MiddlewareHandler<E6, P>,
1179
+ ]
1180
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, S, BasePath, P>
1181
+
1182
+ // app.use(path, handler x4)
1183
+ <
1184
+ P extends string,
1185
+ MergedPath extends MergePath<BasePath, P>,
1186
+ E2 extends Env = E,
1187
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1188
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1189
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1190
+ >(
1191
+ path: P,
1192
+ ...handlers: [
1193
+ MiddlewareHandler<E2, P>,
1194
+ MiddlewareHandler<E3, P>,
1195
+ MiddlewareHandler<E4, P>,
1196
+ MiddlewareHandler<E5, P>,
1197
+ ]
1198
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S, BasePath, MergedPath>
1199
+
1200
+ // app.use(handler x6)
1201
+ <
1202
+ E2 extends Env = E,
1203
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1204
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1205
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1206
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1207
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1208
+ P extends string = MergePath<BasePath, '*'>,
1209
+ >(
1210
+ ...handlers: [
1211
+ MiddlewareHandler<E2, P>,
1212
+ MiddlewareHandler<E3, P>,
1213
+ MiddlewareHandler<E4, P>,
1214
+ MiddlewareHandler<E5, P>,
1215
+ MiddlewareHandler<E6, P>,
1216
+ MiddlewareHandler<E7, P>,
1217
+ ]
1218
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, S, BasePath, P>
1219
+
1220
+ // app.use(path, handler x5)
1221
+ <
1222
+ P extends string,
1223
+ MergedPath extends MergePath<BasePath, P>,
1224
+ E2 extends Env = E,
1225
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1226
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1227
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1228
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1229
+ >(
1230
+ path: P,
1231
+ ...handlers: [
1232
+ MiddlewareHandler<E2, P>,
1233
+ MiddlewareHandler<E3, P>,
1234
+ MiddlewareHandler<E4, P>,
1235
+ MiddlewareHandler<E5, P>,
1236
+ MiddlewareHandler<E6, P>,
1237
+ ]
1238
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, S, BasePath, MergedPath>
1239
+
1240
+ // app.use(handler x7)
1241
+ <
1242
+ E2 extends Env = E,
1243
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1244
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1245
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1246
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1247
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1248
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1249
+ P extends string = MergePath<BasePath, '*'>,
1250
+ >(
1251
+ ...handlers: [
1252
+ MiddlewareHandler<E2, P>,
1253
+ MiddlewareHandler<E3, P>,
1254
+ MiddlewareHandler<E4, P>,
1255
+ MiddlewareHandler<E5, P>,
1256
+ MiddlewareHandler<E6, P>,
1257
+ MiddlewareHandler<E7, P>,
1258
+ MiddlewareHandler<E8, P>,
1259
+ ]
1260
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, S, BasePath, P>
1261
+
1262
+ // app.use(path, handler x6)
1263
+ <
1264
+ P extends string,
1265
+ MergedPath extends MergePath<BasePath, P>,
1266
+ E2 extends Env = E,
1267
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1268
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1269
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1270
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1271
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1272
+ >(
1273
+ path: P,
1274
+ ...handlers: [
1275
+ MiddlewareHandler<E2, P>,
1276
+ MiddlewareHandler<E3, P>,
1277
+ MiddlewareHandler<E4, P>,
1278
+ MiddlewareHandler<E5, P>,
1279
+ MiddlewareHandler<E6, P>,
1280
+ MiddlewareHandler<E7, P>,
1281
+ ]
1282
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, S, BasePath, MergedPath>
1283
+
1284
+ // app.use(handler x8)
1285
+ <
1286
+ E2 extends Env = E,
1287
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1288
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1289
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1290
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1291
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1292
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1293
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1294
+ P extends string = MergePath<BasePath, '*'>,
1295
+ >(
1296
+ ...handlers: [
1297
+ MiddlewareHandler<E2, P>,
1298
+ MiddlewareHandler<E3, P>,
1299
+ MiddlewareHandler<E4, P>,
1300
+ MiddlewareHandler<E5, P>,
1301
+ MiddlewareHandler<E6, P>,
1302
+ MiddlewareHandler<E7, P>,
1303
+ MiddlewareHandler<E8, P>,
1304
+ MiddlewareHandler<E9, P>,
1305
+ ]
1306
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, S, BasePath, P>
1307
+
1308
+ // app.use(path, handler x7)
1309
+ <
1310
+ P extends string,
1311
+ MergedPath extends MergePath<BasePath, P>,
1312
+ E2 extends Env = E,
1313
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1314
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1315
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1316
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1317
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1318
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1319
+ >(
1320
+ path: P,
1321
+ ...handlers: [
1322
+ MiddlewareHandler<E2, P>,
1323
+ MiddlewareHandler<E3, P>,
1324
+ MiddlewareHandler<E4, P>,
1325
+ MiddlewareHandler<E5, P>,
1326
+ MiddlewareHandler<E6, P>,
1327
+ MiddlewareHandler<E7, P>,
1328
+ MiddlewareHandler<E8, P>,
1329
+ ]
1330
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, S, BasePath, MergedPath>
1331
+
1332
+ // app.use(handler x9)
1333
+ <
1334
+ E2 extends Env = E,
1335
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1336
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1337
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1338
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1339
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1340
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1341
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1342
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1343
+ P extends string = MergePath<BasePath, '*'>,
1344
+ >(
1345
+ ...handlers: [
1346
+ MiddlewareHandler<E2, P>,
1347
+ MiddlewareHandler<E3, P>,
1348
+ MiddlewareHandler<E4, P>,
1349
+ MiddlewareHandler<E5, P>,
1350
+ MiddlewareHandler<E6, P>,
1351
+ MiddlewareHandler<E7, P>,
1352
+ MiddlewareHandler<E8, P>,
1353
+ MiddlewareHandler<E9, P>,
1354
+ MiddlewareHandler<E10, P>,
1355
+ ]
1356
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, S, BasePath, P>
1357
+
1358
+ // app.use(path, handler x8)
1359
+ <
1360
+ P extends string,
1361
+ MergedPath extends MergePath<BasePath, P>,
1362
+ E2 extends Env = E,
1363
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1364
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1365
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1366
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1367
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1368
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1369
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1370
+ >(
1371
+ path: P,
1372
+ ...handlers: [
1373
+ MiddlewareHandler<E2, P>,
1374
+ MiddlewareHandler<E3, P>,
1375
+ MiddlewareHandler<E4, P>,
1376
+ MiddlewareHandler<E5, P>,
1377
+ MiddlewareHandler<E6, P>,
1378
+ MiddlewareHandler<E7, P>,
1379
+ MiddlewareHandler<E8, P>,
1380
+ MiddlewareHandler<E9, P>,
1381
+ ]
1382
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, S, BasePath, MergedPath>
1383
+
1384
+ // app.use(handler x10)
1385
+ <
1386
+ E2 extends Env = E,
1387
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1388
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1389
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1390
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1391
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1392
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1393
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1394
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1395
+ E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
1396
+ P extends string = MergePath<BasePath, '*'>,
1397
+ >(
1398
+ ...handlers: [
1399
+ MiddlewareHandler<E2, P>,
1400
+ MiddlewareHandler<E3, P>,
1401
+ MiddlewareHandler<E4, P>,
1402
+ MiddlewareHandler<E5, P>,
1403
+ MiddlewareHandler<E6, P>,
1404
+ MiddlewareHandler<E7, P>,
1405
+ MiddlewareHandler<E8, P>,
1406
+ MiddlewareHandler<E9, P>,
1407
+ MiddlewareHandler<E10, P>,
1408
+ MiddlewareHandler<E11, P>,
1409
+ ]
1410
+ ): HonoBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>, S, BasePath, P>
1411
+
1412
+ // app.use(path, handler x9)
1413
+ <
1414
+ P extends string,
1415
+ MergedPath extends MergePath<BasePath, P>,
1416
+ E2 extends Env = E,
1417
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1418
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1419
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1420
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1421
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1422
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1423
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1424
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1425
+ >(
1426
+ path: P,
1427
+ ...handlers: [
1428
+ MiddlewareHandler<E2, P>,
1429
+ MiddlewareHandler<E3, P>,
1430
+ MiddlewareHandler<E4, P>,
1431
+ MiddlewareHandler<E5, P>,
1432
+ MiddlewareHandler<E6, P>,
1433
+ MiddlewareHandler<E7, P>,
1434
+ MiddlewareHandler<E8, P>,
1435
+ MiddlewareHandler<E9, P>,
1436
+ MiddlewareHandler<E10, P>,
1437
+ ]
1438
+ ): HonoBase<
1439
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
1440
+ S,
1441
+ BasePath,
1442
+ MergedPath
1443
+ >
1444
+
1445
+ //// app.use(path, ...handlers[])
1446
+ <P extends string, E2 extends Env = E>(
1447
+ path: P,
1448
+ ...handlers: MiddlewareHandler<E2, MergePath<BasePath, P>>[]
1449
+ ): HonoBase<E, S, BasePath, MergePath<BasePath, P>>
1450
+ }
1451
+
1452
+ ////////////////////////////////////////
1453
+ ////// //////
1454
+ ////// OnHandlerInterface //////
1455
+ ////// //////
1456
+ ////////////////////////////////////////
1457
+
1458
+ export interface OnHandlerInterface<
1459
+ E extends Env = Env,
1460
+ S extends Schema = BlankSchema,
1461
+ BasePath extends string = '/',
1462
+ > {
1463
+ // app.on(method, path, handler)
1464
+ <
1465
+ M extends string,
1466
+ P extends string,
1467
+ MergedPath extends MergePath<BasePath, P>,
1468
+ R extends HandlerResponse<any> = any,
1469
+ I extends Input = BlankInput,
1470
+ E2 extends Env = E,
1471
+ >(
1472
+ method: M,
1473
+ path: P,
1474
+ handler: H<E2, MergedPath, I, R>
1475
+ ): HonoBase<
1476
+ IntersectNonAnyTypes<[E, E2]>,
1477
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
1478
+ BasePath,
1479
+ MergePath<BasePath, P>
1480
+ >
1481
+
1482
+ // app.on(method, path, handler x2)
1483
+ <
1484
+ M extends string,
1485
+ P extends string,
1486
+ MergedPath extends MergePath<BasePath, P>,
1487
+ R extends HandlerResponse<any> = any,
1488
+ I extends Input = BlankInput,
1489
+ I2 extends Input = I,
1490
+ E2 extends Env = E,
1491
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1492
+ >(
1493
+ method: M,
1494
+ path: P,
1495
+ ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2, R>]
1496
+ ): HonoBase<
1497
+ IntersectNonAnyTypes<[E, E2, E3]>,
1498
+ S & ToSchema<M, MergePath<BasePath, P>, I2, MergeTypedResponse<R>>,
1499
+ BasePath,
1500
+ MergePath<BasePath, P>
1501
+ >
1502
+
1503
+ // app.on(method, path, handler x3)
1504
+ <
1505
+ M extends string,
1506
+ P extends string,
1507
+ MergedPath extends MergePath<BasePath, P>,
1508
+ R extends HandlerResponse<any> = any,
1509
+ I extends Input = BlankInput,
1510
+ I2 extends Input = I,
1511
+ I3 extends Input = I & I2,
1512
+ E2 extends Env = E,
1513
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1514
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1515
+ >(
1516
+ method: M,
1517
+ path: P,
1518
+ ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3, R>]
1519
+ ): HonoBase<
1520
+ IntersectNonAnyTypes<[E, E2, E3, E4]>,
1521
+ S & ToSchema<M, MergePath<BasePath, P>, I3, MergeTypedResponse<R>>,
1522
+ BasePath,
1523
+ MergePath<BasePath, P>
1524
+ >
1525
+
1526
+ // app.on(method, path, handler x4)
1527
+ <
1528
+ M extends string,
1529
+ P extends string,
1530
+ MergedPath extends MergePath<BasePath, P>,
1531
+ R extends HandlerResponse<any> = any,
1532
+ I extends Input = BlankInput,
1533
+ I2 extends Input = I,
1534
+ I3 extends Input = I & I2,
1535
+ I4 extends Input = I & I2 & I3,
1536
+ E2 extends Env = E,
1537
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1538
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1539
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1540
+ >(
1541
+ method: M,
1542
+ path: P,
1543
+ ...handlers: [
1544
+ H<E2, MergedPath, I>,
1545
+ H<E3, MergedPath, I2>,
1546
+ H<E4, MergedPath, I3>,
1547
+ H<E5, MergedPath, I4, R>,
1548
+ ]
1549
+ ): HonoBase<
1550
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1551
+ S & ToSchema<M, MergePath<BasePath, P>, I4, MergeTypedResponse<R>>,
1552
+ BasePath,
1553
+ MergePath<BasePath, P>
1554
+ >
1555
+
1556
+ // app.on(method, path, handler x5)
1557
+ <
1558
+ M extends string,
1559
+ P extends string,
1560
+ MergedPath extends MergePath<BasePath, P>,
1561
+ R extends HandlerResponse<any> = any,
1562
+ I extends Input = BlankInput,
1563
+ I2 extends Input = I,
1564
+ I3 extends Input = I & I2,
1565
+ I4 extends Input = I & I2 & I3,
1566
+ I5 extends Input = I & I2 & I3 & I4,
1567
+ E2 extends Env = E,
1568
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1569
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1570
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1571
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1572
+ >(
1573
+ method: M,
1574
+ path: P,
1575
+ ...handlers: [
1576
+ H<E2, MergedPath, I>,
1577
+ H<E3, MergedPath, I2>,
1578
+ H<E4, MergedPath, I3>,
1579
+ H<E5, MergedPath, I4>,
1580
+ H<E6, MergedPath, I5, R>,
1581
+ ]
1582
+ ): HonoBase<
1583
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1584
+ S & ToSchema<M, MergePath<BasePath, P>, I5, MergeTypedResponse<R>>,
1585
+ BasePath,
1586
+ MergePath<BasePath, P>
1587
+ >
1588
+
1589
+ // app.on(method, path, handler x6)
1590
+ <
1591
+ M extends string,
1592
+ P extends string,
1593
+ MergedPath extends MergePath<BasePath, P>,
1594
+ R extends HandlerResponse<any> = any,
1595
+ I extends Input = BlankInput,
1596
+ I2 extends Input = I,
1597
+ I3 extends Input = I & I2,
1598
+ I4 extends Input = I & I2 & I3,
1599
+ I5 extends Input = I & I2 & I3 & I4,
1600
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1601
+ E2 extends Env = E,
1602
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1603
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1604
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1605
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1606
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1607
+ >(
1608
+ method: M,
1609
+ path: P,
1610
+ ...handlers: [
1611
+ H<E2, MergedPath, I>,
1612
+ H<E3, MergedPath, I2>,
1613
+ H<E4, MergedPath, I3>,
1614
+ H<E5, MergedPath, I4>,
1615
+ H<E6, MergedPath, I5>,
1616
+ H<E7, MergedPath, I6, R>,
1617
+ ]
1618
+ ): HonoBase<
1619
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1620
+ S & ToSchema<M, MergePath<BasePath, P>, I6, MergeTypedResponse<R>>,
1621
+ BasePath,
1622
+ MergePath<BasePath, P>
1623
+ >
1624
+
1625
+ // app.on(method, path, handler x7)
1626
+ <
1627
+ M extends string,
1628
+ P extends string,
1629
+ MergedPath extends MergePath<BasePath, P>,
1630
+ R extends HandlerResponse<any> = any,
1631
+ I extends Input = BlankInput,
1632
+ I2 extends Input = I,
1633
+ I3 extends Input = I & I2,
1634
+ I4 extends Input = I & I2 & I3,
1635
+ I5 extends Input = I & I2 & I3 & I4,
1636
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1637
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
1638
+ E2 extends Env = E,
1639
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1640
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1641
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1642
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1643
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1644
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1645
+ >(
1646
+ method: M,
1647
+ path: P,
1648
+ ...handlers: [
1649
+ H<E2, MergedPath, I>,
1650
+ H<E3, MergedPath, I2>,
1651
+ H<E4, MergedPath, I3>,
1652
+ H<E5, MergedPath, I4>,
1653
+ H<E6, MergedPath, I5>,
1654
+ H<E7, MergedPath, I6>,
1655
+ H<E8, MergedPath, I7, R>,
1656
+ ]
1657
+ ): HonoBase<
1658
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1659
+ S & ToSchema<M, MergePath<BasePath, P>, I7, MergeTypedResponse<R>>,
1660
+ BasePath,
1661
+ MergePath<BasePath, P>
1662
+ >
1663
+
1664
+ // app.on(method, path, handler x8)
1665
+ <
1666
+ M extends string,
1667
+ P extends string,
1668
+ MergedPath extends MergePath<BasePath, P>,
1669
+ R extends HandlerResponse<any> = any,
1670
+ I extends Input = BlankInput,
1671
+ I2 extends Input = I,
1672
+ I3 extends Input = I & I2,
1673
+ I4 extends Input = I & I2 & I3,
1674
+ I5 extends Input = I & I2 & I3 & I4,
1675
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1676
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
1677
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
1678
+ E2 extends Env = E,
1679
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1680
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1681
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1682
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1683
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1684
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1685
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1686
+ >(
1687
+ method: M,
1688
+ path: P,
1689
+ ...handlers: [
1690
+ H<E2, MergedPath, I>,
1691
+ H<E3, MergedPath, I2>,
1692
+ H<E4, MergedPath, I3>,
1693
+ H<E5, MergedPath, I4>,
1694
+ H<E6, MergedPath, I5>,
1695
+ H<E7, MergedPath, I6>,
1696
+ H<E8, MergedPath, I7>,
1697
+ H<E9, MergedPath, I8, R>,
1698
+ ]
1699
+ ): HonoBase<
1700
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1701
+ S & ToSchema<M, MergePath<BasePath, P>, I8, MergeTypedResponse<R>>,
1702
+ BasePath,
1703
+ MergePath<BasePath, P>
1704
+ >
1705
+
1706
+ // app.on(method, path, handler x9)
1707
+ <
1708
+ M extends string,
1709
+ P extends string,
1710
+ MergedPath extends MergePath<BasePath, P>,
1711
+ R extends HandlerResponse<any> = any,
1712
+ I extends Input = BlankInput,
1713
+ I2 extends Input = I,
1714
+ I3 extends Input = I & I2,
1715
+ I4 extends Input = I & I2 & I3,
1716
+ I5 extends Input = I & I2 & I3 & I4,
1717
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1718
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
1719
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
1720
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
1721
+ E2 extends Env = E,
1722
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1723
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1724
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1725
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1726
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1727
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1728
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1729
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1730
+ >(
1731
+ method: M,
1732
+ path: P,
1733
+ ...handlers: [
1734
+ H<E2, MergedPath, I>,
1735
+ H<E3, MergedPath, I2>,
1736
+ H<E4, MergedPath, I3>,
1737
+ H<E5, MergedPath, I4>,
1738
+ H<E6, MergedPath, I5>,
1739
+ H<E7, MergedPath, I6>,
1740
+ H<E8, MergedPath, I7>,
1741
+ H<E9, MergedPath, I8>,
1742
+ H<E10, MergedPath, I9, R>,
1743
+ ]
1744
+ ): HonoBase<
1745
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
1746
+ S & ToSchema<M, MergePath<BasePath, P>, I9, MergeTypedResponse<R>>,
1747
+ BasePath,
1748
+ MergePath<BasePath, P>
1749
+ >
1750
+
1751
+ // app.on(method, path, handler x10)
1752
+ <
1753
+ M extends string,
1754
+ P extends string,
1755
+ MergedPath extends MergePath<BasePath, P>,
1756
+ R extends HandlerResponse<any> = any,
1757
+ I extends Input = BlankInput,
1758
+ I2 extends Input = I,
1759
+ I3 extends Input = I & I2,
1760
+ I4 extends Input = I & I2 & I3,
1761
+ I5 extends Input = I & I2 & I3 & I4,
1762
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1763
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
1764
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
1765
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
1766
+ I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9,
1767
+ E2 extends Env = E,
1768
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1769
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1770
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1771
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1772
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1773
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1774
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1775
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1776
+ E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
1777
+ >(
1778
+ method: M,
1779
+ path: P,
1780
+ ...handlers: [
1781
+ H<E2, MergedPath, I>,
1782
+ H<E3, MergedPath, I2>,
1783
+ H<E4, MergedPath, I3>,
1784
+ H<E5, MergedPath, I4>,
1785
+ H<E6, MergedPath, I5>,
1786
+ H<E7, MergedPath, I6>,
1787
+ H<E8, MergedPath, I7>,
1788
+ H<E9, MergedPath, I8>,
1789
+ H<E10, MergedPath, I9>,
1790
+ H<E11, MergedPath, I10, R>,
1791
+ ]
1792
+ ): HonoBase<
1793
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>,
1794
+ S & ToSchema<M, MergePath<BasePath, P>, I10, MergeTypedResponse<HandlerResponse<any>>>,
1795
+ BasePath,
1796
+ MergePath<BasePath, P>
1797
+ >
1798
+
1799
+ // app.on(method, path, ...handler)
1800
+ <
1801
+ M extends string,
1802
+ P extends string,
1803
+ R extends HandlerResponse<any> = any,
1804
+ I extends Input = BlankInput,
1805
+ >(
1806
+ method: M,
1807
+ path: P,
1808
+ ...handlers: [H<E, MergePath<BasePath, P>, I, R>, ...H<E, MergePath<BasePath, P>, I, R>[]]
1809
+ ): HonoBase<
1810
+ E,
1811
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
1812
+ BasePath,
1813
+ MergePath<BasePath, P>
1814
+ >
1815
+
1816
+ // app.on(method[], path, handler)
1817
+ <
1818
+ M extends string,
1819
+ P extends string,
1820
+ MergedPath extends MergePath<BasePath, P>,
1821
+ R extends HandlerResponse<any> = any,
1822
+ I extends Input = BlankInput,
1823
+ E2 extends Env = E,
1824
+ >(
1825
+ methods: M[],
1826
+ path: P,
1827
+ handler: H<E2, MergedPath, I, R>
1828
+ ): HonoBase<
1829
+ IntersectNonAnyTypes<[E, E2]>,
1830
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
1831
+ BasePath,
1832
+ MergePath<BasePath, P>
1833
+ >
1834
+
1835
+ // app.on(method[], path, handler x2)
1836
+ <
1837
+ M extends string,
1838
+ P extends string,
1839
+ MergedPath extends MergePath<BasePath, P>,
1840
+ R extends HandlerResponse<any> = any,
1841
+ I extends Input = BlankInput,
1842
+ I2 extends Input = I,
1843
+ E2 extends Env = E,
1844
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1845
+ >(
1846
+ methods: M[],
1847
+ path: P,
1848
+ ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2, R>]
1849
+ ): HonoBase<
1850
+ IntersectNonAnyTypes<[E, E2, E3]>,
1851
+ S & ToSchema<M, MergePath<BasePath, P>, I2, MergeTypedResponse<R>>,
1852
+ BasePath,
1853
+ MergePath<BasePath, P>
1854
+ >
1855
+
1856
+ // app.on(method[], path, handler x3)
1857
+ <
1858
+ M extends string,
1859
+ P extends string,
1860
+ MergedPath extends MergePath<BasePath, P>,
1861
+ R extends HandlerResponse<any> = any,
1862
+ I extends Input = BlankInput,
1863
+ I2 extends Input = I,
1864
+ I3 extends Input = I & I2,
1865
+ E2 extends Env = E,
1866
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1867
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1868
+ >(
1869
+ methods: M[],
1870
+ path: P,
1871
+ ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3, R>]
1872
+ ): HonoBase<
1873
+ IntersectNonAnyTypes<[E, E2, E3, E4]>,
1874
+ S & ToSchema<M, MergePath<BasePath, P>, I3, MergeTypedResponse<R>>,
1875
+ BasePath,
1876
+ MergePath<BasePath, P>
1877
+ >
1878
+
1879
+ // app.on(method[], path, handler x4)
1880
+ <
1881
+ M extends string,
1882
+ P extends string,
1883
+ MergedPath extends MergePath<BasePath, P>,
1884
+ R extends HandlerResponse<any> = any,
1885
+ I extends Input = BlankInput,
1886
+ I2 extends Input = I,
1887
+ I3 extends Input = I & I2,
1888
+ I4 extends Input = I & I2 & I3,
1889
+ E2 extends Env = E,
1890
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1891
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1892
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1893
+ >(
1894
+ methods: M[],
1895
+ path: P,
1896
+ ...handlers: [
1897
+ H<E2, MergedPath, I>,
1898
+ H<E3, MergedPath, I2>,
1899
+ H<E4, MergedPath, I3>,
1900
+ H<E5, MergedPath, I4, R>,
1901
+ ]
1902
+ ): HonoBase<
1903
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1904
+ S & ToSchema<M, MergePath<BasePath, P>, I4, MergeTypedResponse<R>>,
1905
+ BasePath,
1906
+ MergePath<BasePath, P>
1907
+ >
1908
+
1909
+ // app.on(method[], path, handler x5)
1910
+ <
1911
+ M extends string,
1912
+ P extends string,
1913
+ MergedPath extends MergePath<BasePath, P>,
1914
+ R extends HandlerResponse<any> = any,
1915
+ I extends Input = BlankInput,
1916
+ I2 extends Input = I,
1917
+ I3 extends Input = I & I2,
1918
+ I4 extends Input = I & I2 & I3,
1919
+ I5 extends Input = I & I2 & I3 & I4,
1920
+ E2 extends Env = E,
1921
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1922
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1923
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1924
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1925
+ >(
1926
+ methods: M[],
1927
+ path: P,
1928
+ ...handlers: [
1929
+ H<E2, MergedPath, I>,
1930
+ H<E3, MergedPath, I2>,
1931
+ H<E4, MergedPath, I3>,
1932
+ H<E5, MergedPath, I4>,
1933
+ H<E6, MergedPath, I5, R>,
1934
+ ]
1935
+ ): HonoBase<
1936
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1937
+ S & ToSchema<M, MergePath<BasePath, P>, I5, MergeTypedResponse<R>>,
1938
+ BasePath,
1939
+ MergePath<BasePath, P>
1940
+ >
1941
+
1942
+ // app.on(method[], path, handler x6)
1943
+ <
1944
+ M extends string,
1945
+ P extends string,
1946
+ MergedPath extends MergePath<BasePath, P>,
1947
+ R extends HandlerResponse<any> = any,
1948
+ I extends Input = BlankInput,
1949
+ I2 extends Input = I,
1950
+ I3 extends Input = I & I2,
1951
+ I4 extends Input = I & I2 & I3,
1952
+ I5 extends Input = I & I2 & I3 & I4,
1953
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1954
+ E2 extends Env = E,
1955
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1956
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1957
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1958
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1959
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1960
+ >(
1961
+ methods: M[],
1962
+ path: P,
1963
+ ...handlers: [
1964
+ H<E2, MergedPath, I>,
1965
+ H<E3, MergedPath, I2>,
1966
+ H<E4, MergedPath, I3>,
1967
+ H<E5, MergedPath, I4>,
1968
+ H<E6, MergedPath, I5>,
1969
+ H<E7, MergedPath, I6, R>,
1970
+ ]
1971
+ ): HonoBase<
1972
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1973
+ S & ToSchema<M, MergePath<BasePath, P>, I6, MergeTypedResponse<R>>,
1974
+ BasePath,
1975
+ MergePath<BasePath, P>
1976
+ >
1977
+
1978
+ // app.on(method[], path, handler x7)
1979
+ <
1980
+ M extends string,
1981
+ P extends string,
1982
+ MergedPath extends MergePath<BasePath, P>,
1983
+ R extends HandlerResponse<any> = any,
1984
+ I extends Input = BlankInput,
1985
+ I2 extends Input = I,
1986
+ I3 extends Input = I & I2,
1987
+ I4 extends Input = I & I2 & I3,
1988
+ I5 extends Input = I & I2 & I3 & I4,
1989
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1990
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
1991
+ E2 extends Env = E,
1992
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1993
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1994
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1995
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1996
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1997
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1998
+ >(
1999
+ methods: M[],
2000
+ path: P,
2001
+ ...handlers: [
2002
+ H<E2, MergedPath, I>,
2003
+ H<E3, MergedPath, I2>,
2004
+ H<E4, MergedPath, I3>,
2005
+ H<E5, MergedPath, I4>,
2006
+ H<E6, MergedPath, I5>,
2007
+ H<E7, MergedPath, I6>,
2008
+ H<E8, MergedPath, I7, R>,
2009
+ ]
2010
+ ): HonoBase<
2011
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
2012
+ S & ToSchema<M, MergePath<BasePath, P>, I7, MergeTypedResponse<R>>,
2013
+ BasePath,
2014
+ MergePath<BasePath, P>
2015
+ >
2016
+
2017
+ // app.on(method[], path, handler x8)
2018
+ <
2019
+ M extends string,
2020
+ P extends string,
2021
+ MergedPath extends MergePath<BasePath, P>,
2022
+ R extends HandlerResponse<any> = any,
2023
+ I extends Input = BlankInput,
2024
+ I2 extends Input = I,
2025
+ I3 extends Input = I & I2,
2026
+ I4 extends Input = I & I2 & I3,
2027
+ I5 extends Input = I & I2 & I3 & I4,
2028
+ I6 extends Input = I & I2 & I3 & I4 & I5,
2029
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
2030
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
2031
+ E2 extends Env = E,
2032
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
2033
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
2034
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
2035
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
2036
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
2037
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
2038
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
2039
+ >(
2040
+ methods: M[],
2041
+ path: P,
2042
+ ...handlers: [
2043
+ H<E2, MergedPath, I>,
2044
+ H<E3, MergedPath, I2>,
2045
+ H<E4, MergedPath, I3>,
2046
+ H<E5, MergedPath, I4>,
2047
+ H<E6, MergedPath, I5>,
2048
+ H<E7, MergedPath, I6>,
2049
+ H<E8, MergedPath, I7>,
2050
+ H<E9, MergedPath, I8, R>,
2051
+ ]
2052
+ ): HonoBase<
2053
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
2054
+ S & ToSchema<M, MergePath<BasePath, P>, I8, MergeTypedResponse<R>>,
2055
+ BasePath,
2056
+ MergePath<BasePath, P>
2057
+ >
2058
+
2059
+ // app.on(method[], path, handler x9)
2060
+ <
2061
+ M extends string,
2062
+ P extends string,
2063
+ MergedPath extends MergePath<BasePath, P>,
2064
+ R extends HandlerResponse<any> = any,
2065
+ I extends Input = BlankInput,
2066
+ I2 extends Input = I,
2067
+ I3 extends Input = I & I2,
2068
+ I4 extends Input = I & I2 & I3,
2069
+ I5 extends Input = I & I2 & I3 & I4,
2070
+ I6 extends Input = I & I2 & I3 & I4 & I5,
2071
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
2072
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
2073
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
2074
+ E2 extends Env = E,
2075
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
2076
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
2077
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
2078
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
2079
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
2080
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
2081
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
2082
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
2083
+ >(
2084
+ methods: M[],
2085
+ path: P,
2086
+ ...handlers: [
2087
+ H<E2, MergedPath, I>,
2088
+ H<E3, MergedPath, I2>,
2089
+ H<E4, MergedPath, I3>,
2090
+ H<E5, MergedPath, I4>,
2091
+ H<E6, MergedPath, I5>,
2092
+ H<E7, MergedPath, I6>,
2093
+ H<E8, MergedPath, I7>,
2094
+ H<E9, MergedPath, I8>,
2095
+ H<E10, MergedPath, I9, R>,
2096
+ ]
2097
+ ): HonoBase<
2098
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
2099
+ S & ToSchema<M, MergePath<BasePath, P>, I9, MergeTypedResponse<HandlerResponse<any>>>,
2100
+ BasePath,
2101
+ MergePath<BasePath, P>
2102
+ >
2103
+
2104
+ // app.on(method[], path, handler x10)
2105
+ <
2106
+ M extends string,
2107
+ P extends string,
2108
+ MergedPath extends MergePath<BasePath, P>,
2109
+ R extends HandlerResponse<any> = any,
2110
+ I extends Input = BlankInput,
2111
+ I2 extends Input = I,
2112
+ I3 extends Input = I & I2,
2113
+ I4 extends Input = I & I2 & I3,
2114
+ I5 extends Input = I & I2 & I3 & I4,
2115
+ I6 extends Input = I & I2 & I3 & I4 & I5,
2116
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
2117
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
2118
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
2119
+ I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9,
2120
+ E2 extends Env = E,
2121
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
2122
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
2123
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
2124
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
2125
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
2126
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
2127
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
2128
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
2129
+ E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
2130
+ >(
2131
+ methods: M[],
2132
+ path: P,
2133
+ ...handlers: [
2134
+ H<E2, MergedPath, I>,
2135
+ H<E3, MergedPath, I2>,
2136
+ H<E4, MergedPath, I3>,
2137
+ H<E5, MergedPath, I4>,
2138
+ H<E6, MergedPath, I5>,
2139
+ H<E7, MergedPath, I6>,
2140
+ H<E8, MergedPath, I7>,
2141
+ H<E9, MergedPath, I8>,
2142
+ H<E10, MergedPath, I9>,
2143
+ H<E11, MergedPath, I10, R>,
2144
+ ]
2145
+ ): HonoBase<
2146
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>,
2147
+ S & ToSchema<M, MergePath<BasePath, P>, I10, MergeTypedResponse<HandlerResponse<any>>>,
2148
+ BasePath,
2149
+ MergePath<BasePath, P>
2150
+ >
2151
+
2152
+ // app.on(method[], path, ...handlers[])
2153
+ <
2154
+ M extends string,
2155
+ P extends string,
2156
+ R extends HandlerResponse<any> = any,
2157
+ I extends Input = BlankInput,
2158
+ >(
2159
+ methods: M[],
2160
+ path: P,
2161
+ ...handlers: [H<E, MergePath<BasePath, P>, I, R>, ...H<E, MergePath<BasePath, P>, I, R>[]]
2162
+ ): HonoBase<
2163
+ E,
2164
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
2165
+ BasePath,
2166
+ MergePath<BasePath, P>
2167
+ >
2168
+
2169
+ // app.on(method | method[], path[], ...handlers[])
2170
+ <
2171
+ M extends string,
2172
+ const Ps extends string[],
2173
+ I extends Input = BlankInput,
2174
+ R extends HandlerResponse<any> = any,
2175
+ E2 extends Env = E,
2176
+ >(
2177
+ methods: M | M[],
2178
+ paths: Ps,
2179
+ ...handlers: H<E2, MergePath<BasePath, Ps[number]>, I, R>[]
2180
+ ): HonoBase<
2181
+ E,
2182
+ S & ToSchema<M, MergePath<BasePath, Ps[number]>, I, MergeTypedResponse<R>>,
2183
+ BasePath,
2184
+ Ps extends [...string[], infer LastPath extends string] ? MergePath<BasePath, LastPath> : never
2185
+ >
2186
+ }
2187
+
2188
+ ////////////////////////////////////////
2189
+ ////// //////
2190
+ ////// ToSchema //////
2191
+ ////// //////
2192
+ ////////////////////////////////////////
2193
+
2194
+ type ToSchemaOutput<RorO, I extends Input | Input['in']> =
2195
+ RorO extends TypedResponse<infer T, infer U, infer F>
2196
+ ? {
2197
+ output: unknown extends T ? {} : T
2198
+ outputFormat: I extends { outputFormat: string } ? I['outputFormat'] : F
2199
+ status: U
2200
+ }
2201
+ : {
2202
+ output: unknown extends RorO ? {} : RorO
2203
+ outputFormat: unknown extends RorO
2204
+ ? 'json'
2205
+ : I extends { outputFormat: string }
2206
+ ? I['outputFormat']
2207
+ : 'json'
2208
+ status: StatusCode
2209
+ }
2210
+
2211
+ export type ToSchema<
2212
+ M extends string,
2213
+ P extends string,
2214
+ I extends Input | Input['in'],
2215
+ RorO, // Response or Output
2216
+ > =
2217
+ IsAny<RorO> extends true
2218
+ ? {
2219
+ [K in P]: {
2220
+ [K2 in M as AddDollar<K2>]: {
2221
+ input: AddParam<ExtractInput<I>, P>
2222
+ output: {}
2223
+ outputFormat: ResponseFormat
2224
+ status: StatusCode
2225
+ }
2226
+ }
2227
+ }
2228
+ : [RorO] extends [never]
2229
+ ? {}
2230
+ : [RorO] extends [Promise<void>]
2231
+ ? {}
2232
+ : {
2233
+ [K in P]: {
2234
+ [K2 in M as AddDollar<K2>]: Simplify<
2235
+ {
2236
+ input: AddParam<ExtractInput<I>, P>
2237
+ } & ToSchemaOutput<RorO, I>
2238
+ >
2239
+ }
2240
+ }
2241
+
2242
+ export type Schema = {
2243
+ [Path: string]: {
2244
+ [Method: `$${Lowercase<string>}`]: Endpoint
2245
+ }
2246
+ }
2247
+
2248
+ type AddSchemaIfHasResponse<
2249
+ Merged,
2250
+ S extends Schema,
2251
+ M extends string,
2252
+ P extends string,
2253
+ I extends Input | Input['in'],
2254
+ BasePath extends string,
2255
+ > = [Merged] extends [Promise<void>] ? S : S & ToSchema<M, MergePath<BasePath, P>, I, Merged>
2256
+
2257
+ export type Endpoint = {
2258
+ input: any
2259
+ output: any
2260
+ outputFormat: ResponseFormat
2261
+ status: StatusCode
2262
+ }
2263
+
2264
+ type ExtractParams<Path extends string> = string extends Path
2265
+ ? Record<string, string>
2266
+ : Path extends `${infer _Start}:${infer Param}/${infer Rest}`
2267
+ ? { [K in Param | keyof ExtractParams<`/${Rest}`>]: string }
2268
+ : Path extends `${infer _Start}:${infer Param}`
2269
+ ? { [K in Param]: string }
2270
+ : never
2271
+
2272
+ type FlattenIfIntersect<T> = T extends infer O ? { [K in keyof O]: O[K] } : never
2273
+
2274
+ export type MergeSchemaPath<OrigSchema extends Schema, SubPath extends string> = {
2275
+ [P in keyof OrigSchema as MergePath<SubPath, P & string>]: [OrigSchema[P]] extends [
2276
+ Record<string, Endpoint>,
2277
+ ]
2278
+ ? { [M in keyof OrigSchema[P]]: MergeEndpointParamsWithPath<OrigSchema[P][M], SubPath> }
2279
+ : never
2280
+ }
2281
+
2282
+ type MergeEndpointParamsWithPath<T extends Endpoint, SubPath extends string> = T extends unknown
2283
+ ? {
2284
+ input: T['input'] extends { param: infer _ }
2285
+ ? ExtractParams<SubPath> extends never
2286
+ ? T['input']
2287
+ : FlattenIfIntersect<
2288
+ T['input'] & {
2289
+ param: {
2290
+ // Maps extracted keys, stripping braces, to a string-typed record.
2291
+ [K in keyof ExtractParams<SubPath> as K extends `${infer Prefix}{${infer _}}`
2292
+ ? Prefix
2293
+ : K]: string
2294
+ }
2295
+ }
2296
+ >
2297
+ : RemoveBlankRecord<ExtractParams<SubPath>> extends never
2298
+ ? T['input']
2299
+ : T['input'] & {
2300
+ // Maps extracted keys, stripping braces, to a string-typed record.
2301
+ param: {
2302
+ [K in keyof ExtractParams<SubPath> as K extends `${infer Prefix}{${infer _}}`
2303
+ ? Prefix
2304
+ : K]: string
2305
+ }
2306
+ }
2307
+ output: T['output']
2308
+ outputFormat: T['outputFormat']
2309
+ status: T['status']
2310
+ }
2311
+ : never
2312
+ export type AddParam<I, P extends string> =
2313
+ ParamKeys<P> extends never
2314
+ ? I
2315
+ : I extends { param: infer _ }
2316
+ ? I
2317
+ : I & { param: UnionToIntersection<ParamKeyToRecord<ParamKeys<P>>> }
2318
+
2319
+ type AddDollar<T extends string> = `$${Lowercase<T>}`
2320
+
2321
+ export type MergePath<A extends string, B extends string> = B extends ''
2322
+ ? MergePath<A, '/'>
2323
+ : A extends ''
2324
+ ? B
2325
+ : A extends '/'
2326
+ ? B
2327
+ : A extends `${infer P}/`
2328
+ ? B extends `/${infer Q}`
2329
+ ? `${P}/${Q}`
2330
+ : `${P}/${B}`
2331
+ : B extends `/${infer Q}`
2332
+ ? Q extends ''
2333
+ ? A
2334
+ : `${A}/${Q}`
2335
+ : `${A}/${B}`
2336
+
2337
+ ////////////////////////////////////////
2338
+ ////// //////
2339
+ ////// TypedResponse //////
2340
+ ////// //////
2341
+ ////////////////////////////////////////
2342
+
2343
+ export type KnownResponseFormat = 'json' | 'text' | 'redirect'
2344
+ export type ResponseFormat = KnownResponseFormat | string
2345
+
2346
+ export type TypedResponse<
2347
+ T = unknown,
2348
+ U extends StatusCode = StatusCode,
2349
+ F extends ResponseFormat = T extends string
2350
+ ? 'text'
2351
+ : T extends JSONValue
2352
+ ? 'json'
2353
+ : ResponseFormat,
2354
+ > = {
2355
+ _data: T
2356
+ _status: U
2357
+ _format: F
2358
+ }
2359
+
2360
+ type MergeTypedResponse<T> =
2361
+ T extends Promise<void>
2362
+ ? T
2363
+ : T extends Promise<infer T2>
2364
+ ? T2 extends TypedResponse
2365
+ ? T2
2366
+ : TypedResponse
2367
+ : T extends TypedResponse
2368
+ ? T
2369
+ : TypedResponse
2370
+
2371
+ type ExtractTypedResponseOnly<T> = T extends TypedResponse ? T : never
2372
+
2373
+ type MergeMiddlewareResponse<T> = T extends (c: any, next: any) => Promise<infer R>
2374
+ ? Exclude<R, void> extends never
2375
+ ? never
2376
+ : Exclude<R, void> extends Response | TypedResponse<any, any, any>
2377
+ ? ExtractTypedResponseOnly<Exclude<R, void>>
2378
+ : never
2379
+ : T extends (c: any, next: any) => infer R
2380
+ ? R extends Response | TypedResponse<any, any, any>
2381
+ ? ExtractTypedResponseOnly<R>
2382
+ : never
2383
+ : never
2384
+
2385
+ ////////////////////////////////////////
2386
+ ////// /////
2387
+ ////// ValidationTargets /////
2388
+ ////// /////
2389
+ ////////////////////////////////////////
2390
+
2391
+ export type FormValue = string | Blob
2392
+ export type ParsedFormValue = string | File
2393
+
2394
+ export type ValidationTargets<T extends FormValue = ParsedFormValue, P extends string = string> = {
2395
+ json: any
2396
+ form: Record<string, T | T[]>
2397
+ query: Record<string, string | string[]>
2398
+ param: Record<P, P extends `${infer _}?` ? string | undefined : string>
2399
+ header: Record<RequestHeader | CustomHeader, string>
2400
+ cookie: Record<string, string>
2401
+ }
2402
+
2403
+ ////////////////////////////////////////
2404
+ ////// //////
2405
+ ////// Path parameters //////
2406
+ ////// //////
2407
+ ////////////////////////////////////////
2408
+
2409
+ type ParamKey<Component> = Component extends `:${infer NameWithPattern}`
2410
+ ? NameWithPattern extends `${infer Name}{${infer Rest}`
2411
+ ? Rest extends `${infer _Pattern}?`
2412
+ ? `${Name}?`
2413
+ : Name
2414
+ : NameWithPattern
2415
+ : never
2416
+
2417
+ export type ParamKeys<Path> = Path extends `${infer Component}/${infer Rest}`
2418
+ ? ParamKey<Component> | ParamKeys<Rest>
2419
+ : ParamKey<Path>
2420
+
2421
+ export type ParamKeyToRecord<T extends string> = T extends `${infer R}?`
2422
+ ? Record<R, string | undefined>
2423
+ : { [K in T]: string }
2424
+
2425
+ ////////////////////////////////////////
2426
+ ////// //////
2427
+ ///// For HonoRequest //////
2428
+ ////// //////
2429
+ ////////////////////////////////////////
2430
+
2431
+ export type InputToDataByTarget<
2432
+ T extends Input['out'],
2433
+ Target extends keyof ValidationTargets,
2434
+ > = T extends {
2435
+ [K in Target]: infer R
2436
+ }
2437
+ ? R
2438
+ : never
2439
+
2440
+ export type RemoveQuestion<T> = T extends `${infer R}?` ? R : T
2441
+
2442
+ ////////////////////////////////////////
2443
+ ////// //////
2444
+ ////// Utilities //////
2445
+ ////// //////
2446
+ ////////////////////////////////////////
2447
+
2448
+ export type ExtractSchema<T> = UnionToIntersection<
2449
+ T extends HonoBase<infer _, infer S, any, any> ? S : never
2450
+ >
2451
+
2452
+ export type ExtractSchemaForStatusCode<T, Status extends number> = {
2453
+ [Path in keyof ExtractSchema<T>]: {
2454
+ [Method in keyof ExtractSchema<T>[Path]]: Extract<
2455
+ ExtractSchema<T>[Path][Method],
2456
+ { status: Status }
2457
+ >
2458
+ }
2459
+ }
2460
+
2461
+ export type ExtractHandlerResponse<T> = T extends (c: any, next: any) => Promise<infer R>
2462
+ ? Exclude<R, void> extends never
2463
+ ? never // Only void in the type → filter out
2464
+ : Exclude<R, void> extends Response | TypedResponse<any, any, any>
2465
+ ? Exclude<R, void> // Return the response type without void
2466
+ : never // Invalid response type → filter out
2467
+ : T extends (c: any, next: any) => infer R
2468
+ ? R extends Response | TypedResponse<any, any, any>
2469
+ ? R
2470
+ : never
2471
+ : never
2472
+
2473
+ type ProcessHead<T> = IfAnyThenEmptyObject<T extends Env ? (Env extends T ? {} : T) : T>
2474
+ export type IntersectNonAnyTypes<T extends any[]> = T extends [infer Head, ...infer Rest]
2475
+ ? ProcessHead<Head> & IntersectNonAnyTypes<Rest>
2476
+ : {}
2477
+
2478
+ ////////////////////////////////////////
2479
+ ////// //////
2480
+ ////// FetchEvent //////
2481
+ ////// //////
2482
+ ////////////////////////////////////////
2483
+
2484
+ export abstract class FetchEventLike {
2485
+ abstract readonly request: Request
2486
+ abstract respondWith(promise: Response | Promise<Response>): void
2487
+ abstract passThroughOnException(): void
2488
+ abstract waitUntil(promise: Promise<void>): void
2489
+ }