@taserjs/router 0.1.13 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/README.md +5 -5
  2. package/dist/builder-DYfjARJF.js +226 -0
  3. package/dist/builder-DYfjARJF.js.map +1 -0
  4. package/dist/builder-EWuIQcdU.cjs +283 -0
  5. package/dist/hono-Ddk3waH-.cjs +42 -0
  6. package/dist/hono-kDZSomjd.js +39 -0
  7. package/dist/hono-kDZSomjd.js.map +1 -0
  8. package/dist/index.cjs +60 -0
  9. package/dist/index.d.cts +104 -0
  10. package/dist/index.d.cts.map +1 -0
  11. package/dist/index.d.ts +104 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +14 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/middleware/body-limit.cjs +15 -0
  16. package/dist/middleware/body-limit.d.cts +11 -0
  17. package/dist/middleware/body-limit.d.cts.map +1 -0
  18. package/dist/middleware/body-limit.d.ts +11 -0
  19. package/dist/middleware/body-limit.d.ts.map +1 -0
  20. package/dist/middleware/body-limit.js +16 -0
  21. package/dist/middleware/body-limit.js.map +1 -0
  22. package/dist/middleware/compress.cjs +10 -0
  23. package/dist/middleware/compress.d.cts +8 -0
  24. package/dist/middleware/compress.d.cts.map +1 -0
  25. package/dist/middleware/compress.d.ts +8 -0
  26. package/dist/middleware/compress.d.ts.map +1 -0
  27. package/dist/middleware/compress.js +10 -0
  28. package/dist/middleware/compress.js.map +1 -0
  29. package/dist/middleware/cookie.cjs +87 -0
  30. package/dist/middleware/cookie.d.cts +26 -0
  31. package/dist/middleware/cookie.d.cts.map +1 -0
  32. package/dist/middleware/cookie.d.ts +26 -0
  33. package/dist/middleware/cookie.d.ts.map +1 -0
  34. package/dist/middleware/cookie.js +87 -0
  35. package/dist/middleware/cookie.js.map +1 -0
  36. package/dist/middleware/cors.cjs +9 -0
  37. package/dist/middleware/cors.d.cts +7 -0
  38. package/dist/middleware/cors.d.cts.map +1 -0
  39. package/dist/middleware/cors.d.ts +7 -0
  40. package/dist/middleware/cors.d.ts.map +1 -0
  41. package/dist/middleware/cors.js +10 -0
  42. package/dist/middleware/cors.js.map +1 -0
  43. package/dist/middleware/csrf.cjs +9 -0
  44. package/dist/middleware/csrf.d.cts +7 -0
  45. package/dist/middleware/csrf.d.cts.map +1 -0
  46. package/dist/middleware/csrf.d.ts +7 -0
  47. package/dist/middleware/csrf.d.ts.map +1 -0
  48. package/dist/middleware/csrf.js +10 -0
  49. package/dist/middleware/csrf.js.map +1 -0
  50. package/dist/middleware/etag.cjs +10 -0
  51. package/dist/middleware/etag.d.cts +8 -0
  52. package/dist/middleware/etag.d.cts.map +1 -0
  53. package/dist/middleware/etag.d.ts +8 -0
  54. package/dist/middleware/etag.d.ts.map +1 -0
  55. package/dist/middleware/etag.js +10 -0
  56. package/dist/middleware/etag.js.map +1 -0
  57. package/dist/middleware/index.cjs +39 -0
  58. package/dist/middleware/index.d.cts +11 -0
  59. package/dist/middleware/index.d.ts +11 -0
  60. package/dist/middleware/index.js +11 -0
  61. package/dist/middleware/jwk.cjs +12 -0
  62. package/dist/middleware/jwk.d.cts +9 -0
  63. package/dist/middleware/jwk.d.cts.map +1 -0
  64. package/dist/middleware/jwk.d.ts +9 -0
  65. package/dist/middleware/jwk.d.ts.map +1 -0
  66. package/dist/middleware/jwk.js +13 -0
  67. package/dist/middleware/jwk.js.map +1 -0
  68. package/dist/middleware/jwt.cjs +21 -0
  69. package/dist/middleware/jwt.d.cts +13 -0
  70. package/dist/middleware/jwt.d.cts.map +1 -0
  71. package/dist/middleware/jwt.d.ts +13 -0
  72. package/dist/middleware/jwt.d.ts.map +1 -0
  73. package/dist/middleware/jwt.js +17 -0
  74. package/dist/middleware/jwt.js.map +1 -0
  75. package/dist/middleware/secure-headers.cjs +10 -0
  76. package/dist/middleware/secure-headers.d.cts +8 -0
  77. package/dist/middleware/secure-headers.d.cts.map +1 -0
  78. package/dist/middleware/secure-headers.d.ts +8 -0
  79. package/dist/middleware/secure-headers.d.ts.map +1 -0
  80. package/dist/middleware/secure-headers.js +10 -0
  81. package/dist/middleware/secure-headers.js.map +1 -0
  82. package/dist/middleware/timing.cjs +13 -0
  83. package/dist/middleware/timing.d.cts +8 -0
  84. package/dist/middleware/timing.d.cts.map +1 -0
  85. package/dist/middleware/timing.d.ts +8 -0
  86. package/dist/middleware/timing.d.ts.map +1 -0
  87. package/dist/middleware/timing.js +10 -0
  88. package/dist/middleware/timing.js.map +1 -0
  89. package/dist/reply.cjs +128 -0
  90. package/dist/reply.d.cts +2 -0
  91. package/dist/reply.d.ts +2 -0
  92. package/dist/reply.js +2 -0
  93. package/dist/stream.cjs +32 -0
  94. package/dist/stream.d.cts +2 -0
  95. package/dist/stream.d.ts +2 -0
  96. package/dist/stream.js +2 -0
  97. package/dist/types-87QgPePQ.d.cts +294 -0
  98. package/dist/types-87QgPePQ.d.cts.map +1 -0
  99. package/dist/types-oo9In1Ss.d.ts +294 -0
  100. package/dist/types-oo9In1Ss.d.ts.map +1 -0
  101. package/package.json +49 -107
  102. package/src/builder.ts +753 -0
  103. package/src/context.ts +11 -0
  104. package/src/hono.ts +75 -0
  105. package/src/index.ts +67 -49
  106. package/src/middleware/body-limit.ts +17 -5
  107. package/src/middleware/compress.ts +7 -6
  108. package/src/middleware/cookie.ts +128 -0
  109. package/src/middleware/cors.ts +5 -6
  110. package/src/middleware/csrf.ts +5 -6
  111. package/src/middleware/etag.ts +7 -6
  112. package/src/middleware/index.ts +35 -0
  113. package/src/middleware/jwk.ts +12 -46
  114. package/src/middleware/jwt.ts +21 -26
  115. package/src/middleware/secure-headers.ts +7 -6
  116. package/src/middleware/timing.ts +9 -6
  117. package/src/reply.ts +26 -1
  118. package/src/stream.ts +10 -1
  119. package/src/taser.ts +55 -0
  120. package/src/types.ts +802 -0
  121. package/dist/cjs/builder/app.cjs +0 -27
  122. package/dist/cjs/builder/app.cjs.map +0 -1
  123. package/dist/cjs/builder/app.d.cts +0 -11
  124. package/dist/cjs/builder/constants.cjs +0 -11
  125. package/dist/cjs/builder/constants.cjs.map +0 -1
  126. package/dist/cjs/builder/constants.d.cts +0 -3
  127. package/dist/cjs/builder/middleware-unit.cjs +0 -64
  128. package/dist/cjs/builder/middleware-unit.cjs.map +0 -1
  129. package/dist/cjs/builder/middleware-unit.d.cts +0 -34
  130. package/dist/cjs/builder/middleware.cjs +0 -20
  131. package/dist/cjs/builder/middleware.cjs.map +0 -1
  132. package/dist/cjs/builder/middleware.d.cts +0 -2
  133. package/dist/cjs/builder/normalize.cjs +0 -10
  134. package/dist/cjs/builder/normalize.cjs.map +0 -1
  135. package/dist/cjs/builder/normalize.d.cts +0 -2
  136. package/dist/cjs/builder/route.cjs +0 -83
  137. package/dist/cjs/builder/route.cjs.map +0 -1
  138. package/dist/cjs/builder/route.d.cts +0 -4
  139. package/dist/cjs/builder/router.cjs +0 -88
  140. package/dist/cjs/builder/router.cjs.map +0 -1
  141. package/dist/cjs/builder/router.d.cts +0 -26
  142. package/dist/cjs/builder/standalone.cjs +0 -30
  143. package/dist/cjs/builder/standalone.cjs.map +0 -1
  144. package/dist/cjs/builder/standalone.d.cts +0 -23
  145. package/dist/cjs/context/create-context.cjs +0 -8
  146. package/dist/cjs/context/create-context.cjs.map +0 -1
  147. package/dist/cjs/context/create-context.d.cts +0 -5
  148. package/dist/cjs/define/middleware.cjs +0 -22
  149. package/dist/cjs/define/middleware.cjs.map +0 -1
  150. package/dist/cjs/define/middleware.d.cts +0 -45
  151. package/dist/cjs/define/validators.cjs +0 -14
  152. package/dist/cjs/define/validators.cjs.map +0 -1
  153. package/dist/cjs/define/validators.d.cts +0 -8
  154. package/dist/cjs/index.cjs +0 -26
  155. package/dist/cjs/index.d.cts +0 -17
  156. package/dist/cjs/middleware/body-limit.cjs +0 -12
  157. package/dist/cjs/middleware/body-limit.cjs.map +0 -1
  158. package/dist/cjs/middleware/body-limit.d.cts +0 -3
  159. package/dist/cjs/middleware/compress.cjs +0 -12
  160. package/dist/cjs/middleware/compress.cjs.map +0 -1
  161. package/dist/cjs/middleware/compress.d.cts +0 -3
  162. package/dist/cjs/middleware/cors.cjs +0 -12
  163. package/dist/cjs/middleware/cors.cjs.map +0 -1
  164. package/dist/cjs/middleware/cors.d.cts +0 -3
  165. package/dist/cjs/middleware/csrf.cjs +0 -12
  166. package/dist/cjs/middleware/csrf.cjs.map +0 -1
  167. package/dist/cjs/middleware/csrf.d.cts +0 -3
  168. package/dist/cjs/middleware/etag.cjs +0 -12
  169. package/dist/cjs/middleware/etag.cjs.map +0 -1
  170. package/dist/cjs/middleware/etag.d.cts +0 -3
  171. package/dist/cjs/middleware/hono-mw.cjs +0 -23
  172. package/dist/cjs/middleware/hono-mw.cjs.map +0 -1
  173. package/dist/cjs/middleware/hono-mw.d.cts +0 -17
  174. package/dist/cjs/middleware/jwk.cjs +0 -30
  175. package/dist/cjs/middleware/jwk.cjs.map +0 -1
  176. package/dist/cjs/middleware/jwk.d.cts +0 -14
  177. package/dist/cjs/middleware/jwt.cjs +0 -20
  178. package/dist/cjs/middleware/jwt.cjs.map +0 -1
  179. package/dist/cjs/middleware/jwt.d.cts +0 -12
  180. package/dist/cjs/middleware/secure-headers.cjs +0 -12
  181. package/dist/cjs/middleware/secure-headers.cjs.map +0 -1
  182. package/dist/cjs/middleware/secure-headers.d.cts +0 -3
  183. package/dist/cjs/middleware/timing.cjs +0 -12
  184. package/dist/cjs/middleware/timing.cjs.map +0 -1
  185. package/dist/cjs/middleware/timing.d.cts +0 -3
  186. package/dist/cjs/reply.cjs +0 -9
  187. package/dist/cjs/reply.d.cts +0 -1
  188. package/dist/cjs/stream.cjs +0 -9
  189. package/dist/cjs/stream.d.cts +0 -1
  190. package/dist/cjs/types/app.d.cts +0 -29
  191. package/dist/cjs/types/index.d.cts +0 -297
  192. package/dist/cjs/types/returns.d.cts +0 -34
  193. package/dist/cjs/types/schema.d.cts +0 -14
  194. package/dist/cjs/types/type-utils.d.cts +0 -50
  195. package/dist/cjs/types/units.d.cts +0 -71
  196. package/dist/esm/builder/app.d.ts +0 -11
  197. package/dist/esm/builder/app.js +0 -26
  198. package/dist/esm/builder/app.js.map +0 -1
  199. package/dist/esm/builder/constants.d.ts +0 -3
  200. package/dist/esm/builder/constants.js +0 -11
  201. package/dist/esm/builder/constants.js.map +0 -1
  202. package/dist/esm/builder/middleware-unit.d.ts +0 -34
  203. package/dist/esm/builder/middleware-unit.js +0 -64
  204. package/dist/esm/builder/middleware-unit.js.map +0 -1
  205. package/dist/esm/builder/middleware.d.ts +0 -2
  206. package/dist/esm/builder/middleware.js +0 -20
  207. package/dist/esm/builder/middleware.js.map +0 -1
  208. package/dist/esm/builder/normalize.d.ts +0 -2
  209. package/dist/esm/builder/normalize.js +0 -10
  210. package/dist/esm/builder/normalize.js.map +0 -1
  211. package/dist/esm/builder/route.d.ts +0 -4
  212. package/dist/esm/builder/route.js +0 -83
  213. package/dist/esm/builder/route.js.map +0 -1
  214. package/dist/esm/builder/router.d.ts +0 -26
  215. package/dist/esm/builder/router.js +0 -87
  216. package/dist/esm/builder/router.js.map +0 -1
  217. package/dist/esm/builder/standalone.d.ts +0 -23
  218. package/dist/esm/builder/standalone.js +0 -29
  219. package/dist/esm/builder/standalone.js.map +0 -1
  220. package/dist/esm/context/create-context.d.ts +0 -5
  221. package/dist/esm/context/create-context.js +0 -8
  222. package/dist/esm/context/create-context.js.map +0 -1
  223. package/dist/esm/define/middleware.d.ts +0 -45
  224. package/dist/esm/define/middleware.js +0 -22
  225. package/dist/esm/define/middleware.js.map +0 -1
  226. package/dist/esm/define/validators.d.ts +0 -8
  227. package/dist/esm/define/validators.js +0 -14
  228. package/dist/esm/define/validators.js.map +0 -1
  229. package/dist/esm/index.d.ts +0 -17
  230. package/dist/esm/index.js +0 -7
  231. package/dist/esm/middleware/body-limit.d.ts +0 -3
  232. package/dist/esm/middleware/body-limit.js +0 -11
  233. package/dist/esm/middleware/body-limit.js.map +0 -1
  234. package/dist/esm/middleware/compress.d.ts +0 -3
  235. package/dist/esm/middleware/compress.js +0 -11
  236. package/dist/esm/middleware/compress.js.map +0 -1
  237. package/dist/esm/middleware/cors.d.ts +0 -3
  238. package/dist/esm/middleware/cors.js +0 -11
  239. package/dist/esm/middleware/cors.js.map +0 -1
  240. package/dist/esm/middleware/csrf.d.ts +0 -3
  241. package/dist/esm/middleware/csrf.js +0 -11
  242. package/dist/esm/middleware/csrf.js.map +0 -1
  243. package/dist/esm/middleware/etag.d.ts +0 -3
  244. package/dist/esm/middleware/etag.js +0 -11
  245. package/dist/esm/middleware/etag.js.map +0 -1
  246. package/dist/esm/middleware/hono-mw.d.ts +0 -17
  247. package/dist/esm/middleware/hono-mw.js +0 -23
  248. package/dist/esm/middleware/hono-mw.js.map +0 -1
  249. package/dist/esm/middleware/jwk.d.ts +0 -14
  250. package/dist/esm/middleware/jwk.js +0 -29
  251. package/dist/esm/middleware/jwk.js.map +0 -1
  252. package/dist/esm/middleware/jwt.d.ts +0 -12
  253. package/dist/esm/middleware/jwt.js +0 -19
  254. package/dist/esm/middleware/jwt.js.map +0 -1
  255. package/dist/esm/middleware/secure-headers.d.ts +0 -3
  256. package/dist/esm/middleware/secure-headers.js +0 -11
  257. package/dist/esm/middleware/secure-headers.js.map +0 -1
  258. package/dist/esm/middleware/timing.d.ts +0 -3
  259. package/dist/esm/middleware/timing.js +0 -11
  260. package/dist/esm/middleware/timing.js.map +0 -1
  261. package/dist/esm/reply.d.ts +0 -1
  262. package/dist/esm/reply.js +0 -1
  263. package/dist/esm/stream.d.ts +0 -1
  264. package/dist/esm/stream.js +0 -1
  265. package/dist/esm/types/app.d.ts +0 -29
  266. package/dist/esm/types/index.d.ts +0 -297
  267. package/dist/esm/types/returns.d.ts +0 -34
  268. package/dist/esm/types/schema.d.ts +0 -14
  269. package/dist/esm/types/type-utils.d.ts +0 -50
  270. package/dist/esm/types/units.d.ts +0 -71
  271. package/src/builder/app.ts +0 -39
  272. package/src/builder/constants.ts +0 -4
  273. package/src/builder/middleware-unit.ts +0 -71
  274. package/src/builder/middleware.ts +0 -23
  275. package/src/builder/normalize.ts +0 -13
  276. package/src/builder/route.ts +0 -137
  277. package/src/builder/router.ts +0 -144
  278. package/src/builder/standalone.ts +0 -79
  279. package/src/context/create-context.ts +0 -19
  280. package/src/define/middleware.ts +0 -214
  281. package/src/define/validators.ts +0 -22
  282. package/src/middleware/hono-mw.ts +0 -27
  283. package/src/types/app.ts +0 -48
  284. package/src/types/index.ts +0 -801
  285. package/src/types/returns.ts +0 -61
  286. package/src/types/schema.ts +0 -21
  287. package/src/types/type-utils.ts +0 -90
  288. package/src/types/units.ts +0 -314
@@ -1,801 +0,0 @@
1
- import type { Awaitable, TaserCookieJar, TaserHeaders } from "@taserjs/router-core";
2
- import type { RouterMiddlewaresRegister, RouterRegister, RouterRoutesRegister } from "../index.js";
3
- import type {
4
- MergeMiddlewareField,
5
- MergeMiddlewareInputField,
6
- MergePart,
7
- RequestShape,
8
- Simplify,
9
- UnionToIntersection,
10
- UnitRuntimeContext,
11
- } from "./type-utils.js";
12
- import type { ReturnsMap, ValidHandlerReply } from "./returns.js";
13
- import type { Schema } from "./schema.js";
14
- import type {
15
- EmptyAppContext,
16
- ExtractState,
17
- Method,
18
- MiddlewareDefinition,
19
- MiddlewareRequirements,
20
- MiddlewareReturnFromParts,
21
- MiddlewareUnit,
22
- NextFn,
23
- ValidatorParts,
24
- } from "./units.js";
25
-
26
- export type { Awaitable } from "@taserjs/router-core";
27
- export type {
28
- SchemaRequestShape,
29
- InferInput,
30
- InferOutput,
31
- Schema,
32
- StandardSchemaV1,
33
- } from "./schema.js";
34
- export type {
35
- MergeMiddlewareField,
36
- MergeMiddlewareInputField,
37
- MergePart,
38
- RequestShape,
39
- Simplify,
40
- UnitRuntimeContext,
41
- UnwrapPart,
42
- } from "./type-utils.js";
43
- export type {
44
- EmptyReturns,
45
- EnforceHandlerReply,
46
- HandlerReply,
47
- HasReturns,
48
- MergeReturns,
49
- ReplyFor,
50
- ReturnsMap,
51
- StatusCode,
52
- ValidHandlerReply,
53
- } from "./returns.js";
54
- export type {
55
- EmptyAppContext,
56
- ExtractState,
57
- HttpMethod,
58
- IsUnknown,
59
- Method,
60
- MiddlewareDefinition,
61
- MiddlewareRequirements,
62
- MiddlewareReturnFromParts,
63
- MiddlewareUnit,
64
- MiddlewareUnitBuilder,
65
- NextFn,
66
- NextResult,
67
- StandaloneMiddlewareContext,
68
- StateBrand,
69
- ValidatorParts,
70
- } from "./units.js";
71
-
72
- export type AppContext = RouterRegister extends { AppContext: infer C } ? C : EmptyAppContext;
73
-
74
- export type RoutePath = RouterRegister extends { RoutePath: infer P } ? P : never;
75
- export type LayoutId = RouterRegister extends { LayoutId: infer L } ? L : never;
76
- export type LayoutTree = RouterRegister extends { LayoutTree: infer T } ? T : Record<never, never>;
77
- export type LayoutMiddlewaresMap = RouterMiddlewaresRegister extends {
78
- LayoutMiddlewares: infer M;
79
- }
80
- ? M
81
- : RouterRegister extends { LayoutMiddlewares: infer M }
82
- ? M
83
- : Record<never, never>;
84
- export type RouteByPathMethod = RouterRoutesRegister extends { RouteByPathMethod: infer R }
85
- ? R
86
- : RouterRegister extends { RouteByPathMethod: infer R }
87
- ? R
88
- : Record<never, never>;
89
-
90
- export type LayoutBuilder<TAppContext extends Record<string, unknown> = AppContext> = <
91
- const Layout extends LayoutId,
92
- >(
93
- layout: Layout,
94
- ) => MiddlewareBuilder<Layout, readonly [], TAppContext>;
95
-
96
- type ParseParam<Segment extends string> = Segment extends "*"
97
- ? { _splat: string }
98
- : Segment extends `:${infer Name extends string}`
99
- ? Name extends ""
100
- ? {}
101
- : { [K in Name]: string }
102
- : {};
103
-
104
- type ParseParamsFromSegments<S extends string> = S extends `${infer Segment}/${infer Rest}`
105
- ? ParseParam<Segment> & ParseParamsFromSegments<Rest>
106
- : ParseParam<S>;
107
-
108
- export type PathParams<Path extends string> = Path extends `/${infer Rest}`
109
- ? ParseParamsFromSegments<Rest>
110
- : ParseParamsFromSegments<Path>;
111
-
112
- export type LayoutParams<Layout extends string> = PathParams<Layout>;
113
-
114
- export type ResolveParams<TPathParams, TSchemaParams> =
115
- TSchemaParams extends Record<string, unknown>
116
- ? [keyof TSchemaParams] extends [never]
117
- ? TPathParams
118
- : Simplify<Omit<TPathParams, keyof TSchemaParams> & TSchemaParams>
119
- : TPathParams;
120
-
121
- type LayoutParent<Layout extends LayoutId> = Layout extends keyof LayoutTree
122
- ? LayoutTree[Layout] extends { parent: infer P extends LayoutId }
123
- ? P
124
- : null
125
- : null;
126
-
127
- type LayoutMiddlewares<Layout extends LayoutId> = [Layout] extends [keyof LayoutMiddlewaresMap]
128
- ? LayoutMiddlewaresMap[Layout] extends { readonly __acc?: infer Acc extends readonly unknown[] }
129
- ? Acc
130
- : LayoutMiddlewaresMap[Layout] extends readonly unknown[]
131
- ? LayoutMiddlewaresMap[Layout]
132
- : readonly []
133
- : readonly [];
134
-
135
- type ResolveLayoutMiddlewares<
136
- Layout extends LayoutId | null,
137
- Depth extends readonly unknown[] = [],
138
- > = Depth["length"] extends 10
139
- ? readonly []
140
- : [Layout] extends [LayoutId]
141
- ? LayoutParent<Layout> extends infer Parent extends LayoutId
142
- ? readonly [
143
- ...ResolveLayoutMiddlewares<Parent, [...Depth, unknown]>,
144
- ...LayoutMiddlewares<Layout>,
145
- ]
146
- : readonly [...LayoutMiddlewares<Layout>]
147
- : readonly [];
148
-
149
- export type ResolveLayoutIdChain<
150
- L extends LayoutId | null,
151
- Depth extends readonly unknown[] = [],
152
- > = Depth["length"] extends 10
153
- ? readonly []
154
- : L extends LayoutId
155
- ? readonly [...ResolveLayoutIdChain<LayoutParent<L>, [...Depth, unknown]>, L]
156
- : readonly [];
157
-
158
- export type ResolveLayoutMiddlewaresState<Layout extends LayoutId | null> = Layout extends LayoutId
159
- ? MergeMiddlewareField<ResolveLayoutMiddlewares<Layout>, "state">
160
- : {};
161
-
162
- export type ResolveLayoutsState<Layouts extends LayoutId | readonly LayoutId[]> =
163
- Layouts extends LayoutId
164
- ? ResolveLayoutMiddlewaresState<Layouts>
165
- : Layouts extends readonly LayoutId[]
166
- ? UnionToIntersection<
167
- Layouts[number] extends infer L extends LayoutId
168
- ? ResolveLayoutMiddlewaresState<L>
169
- : never
170
- >
171
- : {};
172
-
173
- /** Fold layout middleware Acc from a route's layoutChain (shallow → deep). */
174
- type ResolveLayoutChainMiddlewares<Chain extends readonly LayoutId[]> = Chain extends readonly [
175
- infer Head extends LayoutId,
176
- ...infer Rest,
177
- ]
178
- ? readonly [
179
- ...LayoutMiddlewares<Head>,
180
- ...ResolveLayoutChainMiddlewares<Rest extends readonly LayoutId[] ? Rest : readonly []>,
181
- ]
182
- : readonly [];
183
-
184
- type RouteEntry<Path extends RoutePath, TMethod extends Method> = RouteByPathMethod[Path] extends {
185
- [K in TMethod]: infer Entry;
186
- }
187
- ? Entry
188
- : never;
189
-
190
- type RouteLayoutChain<Path extends RoutePath, TMethod extends Method> =
191
- RouteEntry<Path, TMethod> extends { layouts: infer Chain extends readonly LayoutId[] }
192
- ? Chain
193
- : readonly [];
194
-
195
- export type RouteLayoutMiddlewares<
196
- Path extends RoutePath,
197
- TMethod extends Method,
198
- > = ResolveLayoutChainMiddlewares<RouteLayoutChain<Path, TMethod>>;
199
-
200
- export type RouteLayoutField<
201
- Path extends RoutePath,
202
- TMethod extends Method,
203
- Field extends "query" | "params" | "body" | "state",
204
- > = MergeMiddlewareField<RouteLayoutMiddlewares<Path, TMethod>, Field>;
205
-
206
- export type RouteLayoutInputField<
207
- Path extends RoutePath,
208
- TMethod extends Method,
209
- Field extends "query" | "params" | "body",
210
- > = MergeMiddlewareInputField<RouteLayoutMiddlewares<Path, TMethod>, Field>;
211
-
212
- type RouteResolvedField<
213
- Path extends RoutePath,
214
- TMethod extends Method,
215
- Acc extends readonly unknown[],
216
- Field extends "query" | "params" | "body" | "state",
217
- > = RouteLayoutField<Path, TMethod, Field> & MergeMiddlewareField<Acc, Field>;
218
-
219
- export type RouteChainContext<
220
- Path extends RoutePath,
221
- TMethod extends Method,
222
- Acc extends readonly unknown[],
223
- TQuery,
224
- TParams,
225
- TBody,
226
- TAppContext extends Record<string, unknown> = AppContext,
227
- > = Simplify<
228
- TAppContext &
229
- UnitRuntimeContext & {
230
- query: MergePart<TQuery, RouteResolvedField<Path, TMethod, Acc, "query">>;
231
- params: ResolveParams<
232
- PathParams<Path>,
233
- MergePart<TParams, RouteResolvedField<Path, TMethod, Acc, "params">>
234
- >;
235
- body: MergePart<TBody, RouteResolvedField<Path, TMethod, Acc, "body">>;
236
- state: RouteResolvedField<Path, TMethod, Acc, "state">;
237
- headers: TaserHeaders;
238
- cookies: TaserCookieJar;
239
- }
240
- >;
241
-
242
- export type RouteHandleContext<
243
- Path extends RoutePath,
244
- TMethod extends Method,
245
- Acc extends readonly unknown[],
246
- Validators extends {
247
- query?: unknown;
248
- params?: unknown;
249
- body?: unknown;
250
- },
251
- TAppContext extends Record<string, unknown> = AppContext,
252
- > = Simplify<
253
- TAppContext &
254
- UnitRuntimeContext & {
255
- path: Path;
256
- method: TMethod;
257
- query: Simplify<
258
- MergePart<
259
- Validators extends { query?: infer Q } ? Q : unknown,
260
- RouteResolvedField<Path, TMethod, Acc, "query">
261
- >
262
- >;
263
- params: Simplify<
264
- ResolveParams<
265
- PathParams<Path>,
266
- MergePart<
267
- Validators extends { params?: infer P } ? P : unknown,
268
- RouteResolvedField<Path, TMethod, Acc, "params">
269
- >
270
- >
271
- >;
272
- body: Simplify<
273
- MergePart<
274
- Validators extends { body?: infer B } ? B : unknown,
275
- RouteResolvedField<Path, TMethod, Acc, "body">
276
- >
277
- >;
278
- state: Simplify<RouteResolvedField<Path, TMethod, Acc, "state">>;
279
- headers: TaserHeaders;
280
- cookies: TaserCookieJar;
281
- }
282
- >;
283
-
284
- export type RouteHandleContextWithoutBody<
285
- Path extends RoutePath,
286
- TMethod extends Method,
287
- Acc extends readonly unknown[],
288
- Validators extends {
289
- query?: unknown;
290
- params?: unknown;
291
- },
292
- TAppContext extends Record<string, unknown> = AppContext,
293
- > = Simplify<
294
- TAppContext &
295
- UnitRuntimeContext & {
296
- path: Path;
297
- method: TMethod;
298
- query: Simplify<
299
- MergePart<
300
- Validators extends { query?: infer Q } ? Q : unknown,
301
- RouteResolvedField<Path, TMethod, Acc, "query">
302
- >
303
- >;
304
- params: Simplify<
305
- ResolveParams<
306
- PathParams<Path>,
307
- MergePart<
308
- Validators extends { params?: infer P } ? P : unknown,
309
- RouteResolvedField<Path, TMethod, Acc, "params">
310
- >
311
- >
312
- >;
313
- body: never;
314
- state: Simplify<RouteResolvedField<Path, TMethod, Acc, "state">>;
315
- headers: TaserHeaders;
316
- cookies: TaserCookieJar;
317
- }
318
- >;
319
-
320
- type RouteResolvedInputField<
321
- Path extends RoutePath,
322
- TMethod extends Method,
323
- Acc extends readonly unknown[],
324
- Field extends "query" | "params" | "body",
325
- > = RouteLayoutInputField<Path, TMethod, Field> & MergeMiddlewareInputField<Acc, Field>;
326
-
327
- type IsNever<T> = [T] extends [never] ? true : false;
328
-
329
- type IsEmptyObject<T> = [keyof T] extends [never] ? true : false;
330
-
331
- export type IsLayoutAllowed<TRequiredLayouts, TChain extends readonly LayoutId[]> = [
332
- TRequiredLayouts,
333
- ] extends [never]
334
- ? true
335
- : [unknown] extends [TRequiredLayouts]
336
- ? true
337
- : [null] extends [TRequiredLayouts]
338
- ? true
339
- : [undefined] extends [TRequiredLayouts]
340
- ? true
341
- : TRequiredLayouts extends LayoutId
342
- ? TRequiredLayouts extends TChain[number]
343
- ? true
344
- : false
345
- : TRequiredLayouts extends readonly LayoutId[]
346
- ? [TRequiredLayouts[number] & TChain[number]] extends [never]
347
- ? false
348
- : true
349
- : true;
350
-
351
- export type IsRequirementsSatisfied<
352
- TActual extends {
353
- query?: unknown;
354
- params?: unknown;
355
- body?: unknown;
356
- state?: unknown;
357
- },
358
- TRequires extends MiddlewareRequirements,
359
- > = [TRequires] extends [never]
360
- ? true
361
- : [unknown] extends [TRequires]
362
- ? true
363
- : [null] extends [TRequires]
364
- ? true
365
- : [undefined] extends [TRequires]
366
- ? true
367
- : [IsEmptyObject<TRequires>] extends [true]
368
- ? true
369
- : (
370
- TRequires extends { state: infer S extends Record<string, unknown> }
371
- ? [TActual["state"]] extends [S]
372
- ? true
373
- : false
374
- : true
375
- ) extends false
376
- ? false
377
- : (
378
- TRequires extends { query: infer Q extends Record<string, unknown> }
379
- ? [TActual["query"]] extends [Q]
380
- ? true
381
- : false
382
- : true
383
- ) extends false
384
- ? false
385
- : (
386
- TRequires extends { params: infer P extends Record<string, unknown> }
387
- ? [TActual["params"]] extends [P]
388
- ? true
389
- : false
390
- : true
391
- ) extends false
392
- ? false
393
- : (
394
- TRequires extends { body: infer B }
395
- ? unknown extends B
396
- ? true
397
- : [TRequires["body"]] extends [undefined]
398
- ? true
399
- : [TActual["body"]] extends [B]
400
- ? true
401
- : false
402
- : true
403
- ) extends false
404
- ? false
405
- : true;
406
-
407
- export type IsStateSatisfied<TActualState, TRequiredState> = IsRequirementsSatisfied<
408
- { state: TActualState },
409
- { state: TRequiredState extends Record<string, unknown> ? TRequiredState : {} }
410
- >;
411
-
412
- type InputFacet<T, K extends string> =
413
- IsNever<T> extends true ? {} : IsEmptyObject<T> extends true ? {} : { [Key in K]: T };
414
-
415
- type RouteQueryInput<
416
- Path extends RoutePath,
417
- TMethod extends Method,
418
- Acc extends readonly unknown[],
419
- Validators extends ValidatorParts,
420
- > = Simplify<
421
- MergePart<
422
- RequestShape<
423
- Validators extends { queryIn?: infer QI } ? QI : unknown,
424
- Validators extends { query?: infer Q } ? Q : unknown
425
- >,
426
- RouteResolvedInputField<Path, TMethod, Acc, "query">
427
- >
428
- >;
429
-
430
- type RouteParamsInput<
431
- Path extends RoutePath,
432
- TMethod extends Method,
433
- Acc extends readonly unknown[],
434
- Validators extends ValidatorParts,
435
- > = Simplify<
436
- ResolveParams<
437
- PathParams<Path>,
438
- MergePart<
439
- RequestShape<
440
- Validators extends { paramsIn?: infer PI } ? PI : unknown,
441
- Validators extends { params?: infer P } ? P : unknown
442
- >,
443
- RouteResolvedInputField<Path, TMethod, Acc, "params">
444
- >
445
- >
446
- >;
447
-
448
- type RouteBodyInput<
449
- Path extends RoutePath,
450
- TMethod extends Method,
451
- Acc extends readonly unknown[],
452
- Validators extends ValidatorParts,
453
- > = Simplify<
454
- MergePart<
455
- RequestShape<
456
- Validators extends { bodyIn?: infer BI } ? BI : unknown,
457
- Validators extends { body?: infer B } ? B : unknown
458
- >,
459
- RouteResolvedInputField<Path, TMethod, Acc, "body">
460
- >
461
- >;
462
-
463
- export type RouteHandleInputWithoutBody<
464
- Path extends RoutePath,
465
- TMethod extends Method,
466
- Acc extends readonly unknown[],
467
- Validators extends ValidatorParts = {},
468
- > = Simplify<
469
- InputFacet<RouteQueryInput<Path, TMethod, Acc, Validators>, "query"> &
470
- InputFacet<RouteParamsInput<Path, TMethod, Acc, Validators>, "params">
471
- >;
472
-
473
- export type RouteHandleInput<
474
- Path extends RoutePath,
475
- TMethod extends Method,
476
- Acc extends readonly unknown[],
477
- Validators extends ValidatorParts = {},
478
- > = Simplify<
479
- RouteHandleInputWithoutBody<Path, TMethod, Acc, Validators> &
480
- InputFacet<RouteBodyInput<Path, TMethod, Acc, Validators>, "body">
481
- >;
482
-
483
- export type InferRouteInputFromPath<Path extends RoutePath, TMethod extends Method> =
484
- RouteEntry<Path, TMethod> extends { route: infer Route }
485
- ? Route extends { $Infer: { Input: infer I } }
486
- ? I
487
- : never
488
- : never;
489
-
490
- export type MiddlewareLayoutField<
491
- Layout extends LayoutId,
492
- Field extends "query" | "params" | "body" | "state",
493
- > = [LayoutParent<Layout>] extends [infer Parent extends LayoutId]
494
- ? MergeMiddlewareField<ResolveLayoutMiddlewares<Parent>, Field>
495
- : {};
496
-
497
- type MiddlewareChainField<
498
- Layout extends LayoutId,
499
- Acc extends readonly unknown[],
500
- Field extends "query" | "params" | "body" | "state",
501
- > = MiddlewareLayoutField<Layout, Field> & MergeMiddlewareField<Acc, Field>;
502
-
503
- export type MiddlewareChainContext<
504
- Layout extends LayoutId,
505
- Acc extends readonly unknown[],
506
- TQuery = unknown,
507
- TParams = unknown,
508
- TBody = unknown,
509
- TAppContext extends Record<string, unknown> = AppContext,
510
- > = Simplify<
511
- TAppContext & {
512
- readonly request: Request;
513
- readonly method: Method;
514
- readonly url: URL;
515
- readonly headers: TaserHeaders;
516
- readonly cookies: TaserCookieJar;
517
- query: Simplify<MergePart<TQuery, MiddlewareChainField<Layout, Acc, "query">>>;
518
- params: Simplify<
519
- ResolveParams<
520
- LayoutParams<Layout>,
521
- Simplify<MergePart<TParams, MiddlewareChainField<Layout, Acc, "params">>>
522
- >
523
- >;
524
- body: Simplify<MergePart<TBody, MiddlewareChainField<Layout, Acc, "body">>>;
525
- state: Simplify<MiddlewareChainField<Layout, Acc, "state">>;
526
- }
527
- >;
528
-
529
- export type MiddlewareBuilder<
530
- Layout extends LayoutId,
531
- Acc extends readonly unknown[] = readonly [],
532
- TAppContext extends Record<string, unknown> = AppContext,
533
- > = {
534
- readonly layout: Layout;
535
- readonly middlewares: readonly MiddlewareDefinition[];
536
- readonly __acc?: Acc;
537
- use<
538
- TAcc,
539
- TReturns extends ReturnsMap = {},
540
- TRequiredLayouts = unknown,
541
- TRequires extends MiddlewareRequirements = {},
542
- >(
543
- unit: [
544
- IsLayoutAllowed<TRequiredLayouts, ResolveLayoutIdChain<Layout>>,
545
- IsRequirementsSatisfied<
546
- {
547
- query: MiddlewareChainField<Layout, Acc, "query">;
548
- params: MiddlewareChainField<Layout, Acc, "params">;
549
- body: MiddlewareChainField<Layout, Acc, "body">;
550
- state: MiddlewareChainField<Layout, Acc, "state">;
551
- },
552
- TRequires
553
- >,
554
- ] extends [true, true]
555
- ? MiddlewareUnit<TAcc, TReturns, TRequiredLayouts, TRequires>
556
- : never,
557
- ): MiddlewareBuilder<Layout, readonly [...Acc, TAcc], TAppContext>;
558
- use<R = unknown>(
559
- fn: (
560
- ctx: Simplify<
561
- TAppContext & {
562
- readonly request: Request;
563
- readonly method: Method;
564
- readonly url: URL;
565
- readonly headers: TaserHeaders;
566
- readonly cookies: TaserCookieJar;
567
- query: Simplify<MergePart<unknown, MiddlewareChainField<Layout, Acc, "query">>>;
568
- params: Simplify<
569
- ResolveParams<
570
- LayoutParams<Layout>,
571
- Simplify<MergePart<unknown, MiddlewareChainField<Layout, Acc, "params">>>
572
- >
573
- >;
574
- body: Simplify<MergePart<unknown, MiddlewareChainField<Layout, Acc, "body">>>;
575
- state: Simplify<MiddlewareChainField<Layout, Acc, "state">>;
576
- }
577
- >,
578
- next: NextFn,
579
- ) => Awaitable<R>,
580
- ): MiddlewareBuilder<
581
- Layout,
582
- readonly [...Acc, MiddlewareReturnFromParts<unknown, unknown, unknown, ExtractState<R>>],
583
- TAppContext
584
- >;
585
- };
586
-
587
- export type RouteExport<
588
- Path extends RoutePath,
589
- TMethod extends Method,
590
- Acc extends readonly unknown[],
591
- TReturns extends ReturnsMap = {},
592
- TOutput = Response,
593
- > = {
594
- readonly path: Path;
595
- readonly method: TMethod | "ANY" | "ALL";
596
- readonly methods?: readonly Method[];
597
- readonly middlewares: readonly MiddlewareDefinition[];
598
- readonly __acc?: Acc;
599
- readonly returns?: TReturns;
600
- readonly bodyMode?: "json" | "form" | "urlencoded";
601
- handler: (ctx: unknown) => Awaitable<Response>;
602
- readonly $Infer: {
603
- Context: TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS"
604
- ? RouteHandleContextWithoutBody<Path, TMethod, Acc, {}>
605
- : RouteHandleContext<Path, TMethod, Acc, {}>;
606
- Input: TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS"
607
- ? RouteHandleInputWithoutBody<Path, TMethod, Acc, {}>
608
- : RouteHandleInput<Path, TMethod, Acc, {}>;
609
- Output: TOutput;
610
- };
611
- query?: Schema<unknown>;
612
- params?: Schema<unknown>;
613
- body?: Schema<unknown>;
614
- };
615
-
616
- type RouteHandleResult<
617
- Path extends RoutePath,
618
- TMethod extends Method,
619
- Acc extends readonly unknown[],
620
- Validators extends ValidatorParts,
621
- TReturns extends ReturnsMap = {},
622
- TOutput = Response,
623
- TAppContext extends Record<string, unknown> = AppContext,
624
- > = Omit<RouteExport<Path, TMethod, Acc, TReturns, TOutput>, "$Infer"> & {
625
- readonly $Infer: {
626
- Context: TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS"
627
- ? RouteHandleContextWithoutBody<Path, TMethod, Acc, Validators, TAppContext>
628
- : RouteHandleContext<Path, TMethod, Acc, Validators, TAppContext>;
629
- Input: TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS"
630
- ? RouteHandleInputWithoutBody<Path, TMethod, Acc, Validators>
631
- : RouteHandleInput<Path, TMethod, Acc, Validators>;
632
- Output: TOutput;
633
- };
634
- };
635
-
636
- export type RouteContractBuilderBase<
637
- Path extends RoutePath,
638
- TMethod extends Method,
639
- Acc extends readonly unknown[] = readonly [],
640
- Validators extends ValidatorParts = {},
641
- TReturns extends ReturnsMap = {},
642
- TAppContext extends Record<string, unknown> = AppContext,
643
- > = {
644
- readonly path: Path;
645
- readonly method: TMethod;
646
- readonly $Infer: {
647
- Context: TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS"
648
- ? RouteHandleContextWithoutBody<Path, TMethod, Acc, Validators, TAppContext>
649
- : RouteHandleContext<Path, TMethod, Acc, Validators, TAppContext>;
650
- Input: TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS"
651
- ? RouteHandleInputWithoutBody<Path, TMethod, Acc, Validators>
652
- : RouteHandleInput<Path, TMethod, Acc, Validators>;
653
- Output: TReturns;
654
- };
655
- query<TQuery, TQueryIn = unknown>(
656
- schema: Schema<TQuery, TQueryIn>,
657
- ): RouteContractBuilder<
658
- Path,
659
- TMethod,
660
- Acc,
661
- Omit<Validators, "query" | "queryIn"> & { query: TQuery; queryIn: TQueryIn },
662
- TReturns,
663
- TAppContext
664
- >;
665
- params<TParams, TParamsIn = unknown>(
666
- schema: Schema<TParams, TParamsIn>,
667
- ): RouteContractBuilder<
668
- Path,
669
- TMethod,
670
- Acc,
671
- Omit<Validators, "params" | "paramsIn"> & { params: TParams; paramsIn: TParamsIn },
672
- TReturns,
673
- TAppContext
674
- >;
675
- returns<const M extends ReturnsMap>(
676
- map: M,
677
- ): RouteContractBuilder<Path, TMethod, Acc, Validators, Omit<TReturns, keyof M> & M, TAppContext>;
678
- handler<R extends Response = Response>(
679
- fn: (
680
- ctx: TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS"
681
- ? RouteHandleContextWithoutBody<Path, TMethod, Acc, Validators, TAppContext>
682
- : RouteHandleContext<Path, TMethod, Acc, Validators, TAppContext>,
683
- ) => Awaitable<R>,
684
- ..._assert: [R] extends [ValidHandlerReply<R, TReturns>]
685
- ? []
686
- : [
687
- {
688
- expected: ValidHandlerReply<R, TReturns>;
689
- actual: R;
690
- },
691
- ]
692
- ): RouteHandleResult<Path, TMethod, Acc, Validators, TReturns, R, TAppContext>;
693
- };
694
-
695
- export type RouteContractBuilder<
696
- Path extends RoutePath,
697
- TMethod extends Method,
698
- Acc extends readonly unknown[] = readonly [],
699
- Validators extends ValidatorParts = {},
700
- TReturns extends ReturnsMap = {},
701
- TAppContext extends Record<string, unknown> = AppContext,
702
- > = RouteContractBuilderBase<Path, TMethod, Acc, Validators, TReturns, TAppContext> &
703
- (TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS"
704
- ? {}
705
- : {
706
- body<TBody, TBodyIn = unknown>(
707
- schema: Schema<TBody, TBodyIn>,
708
- ): RouteContractBuilder<
709
- Path,
710
- TMethod,
711
- Acc,
712
- Omit<Validators, "body" | "bodyIn"> & { body: TBody; bodyIn: TBodyIn },
713
- TReturns,
714
- TAppContext
715
- >;
716
- body<Mode extends "json" | "form" | "urlencoded", TBody, TBodyIn = unknown>(
717
- mode: Mode,
718
- schema: Schema<TBody, TBodyIn>,
719
- ): RouteContractBuilder<
720
- Path,
721
- TMethod,
722
- Acc,
723
- Omit<Validators, "body" | "bodyIn"> & { body: TBody; bodyIn: TBodyIn },
724
- TReturns,
725
- TAppContext
726
- >;
727
- });
728
-
729
- export type RouteMiddlewareBuilder<
730
- Path extends RoutePath,
731
- TMethod extends Method,
732
- Acc extends readonly unknown[] = readonly [],
733
- Validators extends ValidatorParts = {},
734
- TReturns extends ReturnsMap = {},
735
- TAppContext extends Record<string, unknown> = AppContext,
736
- > = RouteContractBuilder<Path, TMethod, Acc, Validators, TReturns, TAppContext> & {
737
- use<
738
- TAcc,
739
- UReturns extends ReturnsMap = {},
740
- TRequiredLayouts = unknown,
741
- TRequires extends MiddlewareRequirements = {},
742
- >(
743
- unit: [
744
- IsLayoutAllowed<TRequiredLayouts, RouteLayoutChain<Path, TMethod>>,
745
- IsRequirementsSatisfied<
746
- {
747
- query: RouteResolvedField<Path, TMethod, Acc, "query">;
748
- params: ResolveParams<PathParams<Path>, RouteResolvedField<Path, TMethod, Acc, "params">>;
749
- body: RouteResolvedField<Path, TMethod, Acc, "body">;
750
- state: RouteResolvedField<Path, TMethod, Acc, "state">;
751
- },
752
- TRequires
753
- >,
754
- ] extends [true, true]
755
- ? MiddlewareUnit<TAcc, UReturns, TRequiredLayouts, TRequires>
756
- : never,
757
- ): RouteMiddlewareBuilder<
758
- Path,
759
- TMethod,
760
- readonly [...Acc, TAcc],
761
- Validators,
762
- Omit<TReturns, keyof UReturns> & UReturns,
763
- TAppContext
764
- >;
765
- use<R = unknown>(
766
- fn: (
767
- ctx: RouteChainContext<Path, TMethod, Acc, unknown, unknown, unknown, TAppContext>,
768
- next: NextFn,
769
- ) => Awaitable<R>,
770
- ): RouteMiddlewareBuilder<
771
- Path,
772
- TMethod,
773
- readonly [...Acc, MiddlewareReturnFromParts<unknown, unknown, unknown, ExtractState<R>>],
774
- Validators,
775
- TReturns,
776
- TAppContext
777
- >;
778
- };
779
-
780
- export type RouteBuilder<
781
- Path extends RoutePath,
782
- TMethod extends Method,
783
- Acc extends readonly unknown[] = readonly [],
784
- Validators extends ValidatorParts = {},
785
- TReturns extends ReturnsMap = {},
786
- TAppContext extends Record<string, unknown> = AppContext,
787
- > = RouteMiddlewareBuilder<Path, TMethod, Acc, Validators, TReturns, TAppContext>;
788
-
789
- export type RouteDefinition<
790
- Path extends RoutePath = RoutePath,
791
- TMethod extends Method = Method,
792
- Acc extends readonly unknown[] = readonly unknown[],
793
- Validators extends ValidatorParts = ValidatorParts,
794
- TReturns extends ReturnsMap = ReturnsMap,
795
- TOutput = Response,
796
- TAppContext extends Record<string, unknown> = AppContext,
797
- > = RouteHandleResult<Path, TMethod, Acc, Validators, TReturns, TOutput, TAppContext>;
798
-
799
- export type InferRouteContext<R> = R extends { $Infer: { Context: infer C } } ? C : never;
800
- export type InferRouteInput<R> = R extends { $Infer: { Input: infer I } } ? I : never;
801
- export type InferRouteOutput<R> = R extends { $Infer: { Output: infer O } } ? O : never;