@taserjs/router 0.0.2 → 0.0.4

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 (138) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/constants.cjs.map +1 -1
  3. package/dist/cjs/create-context.cjs.map +1 -1
  4. package/dist/cjs/define/handler.cjs.map +1 -1
  5. package/dist/cjs/define/middleware.cjs +18 -27
  6. package/dist/cjs/define/middleware.cjs.map +1 -1
  7. package/dist/cjs/define/middleware.d.cts +27 -79
  8. package/dist/cjs/define/validators.cjs.map +1 -1
  9. package/dist/cjs/factories.cjs.map +1 -1
  10. package/dist/cjs/factories.d.cts +2 -2
  11. package/dist/cjs/index.cjs +1 -2
  12. package/dist/cjs/index.d.cts +1 -1
  13. package/dist/cjs/middleware/body-limit.cjs +2 -2
  14. package/dist/cjs/middleware/body-limit.cjs.map +1 -1
  15. package/dist/cjs/middleware/compress.cjs +2 -2
  16. package/dist/cjs/middleware/compress.cjs.map +1 -1
  17. package/dist/cjs/middleware/cors.cjs +2 -2
  18. package/dist/cjs/middleware/cors.cjs.map +1 -1
  19. package/dist/cjs/middleware/csrf.cjs +2 -2
  20. package/dist/cjs/middleware/csrf.cjs.map +1 -1
  21. package/dist/cjs/middleware/etag.cjs +2 -2
  22. package/dist/cjs/middleware/etag.cjs.map +1 -1
  23. package/dist/cjs/middleware/jwk.cjs +11 -4
  24. package/dist/cjs/middleware/jwk.cjs.map +1 -1
  25. package/dist/cjs/middleware/jwk.d.cts +4 -5
  26. package/dist/cjs/middleware/jwt.cjs +11 -5
  27. package/dist/cjs/middleware/jwt.cjs.map +1 -1
  28. package/dist/cjs/middleware/jwt.d.cts +7 -5
  29. package/dist/cjs/middleware/secure-headers.cjs +2 -2
  30. package/dist/cjs/middleware/secure-headers.cjs.map +1 -1
  31. package/dist/cjs/middleware/timing.cjs +2 -2
  32. package/dist/cjs/middleware/timing.cjs.map +1 -1
  33. package/dist/cjs/middleware/wrap-hono.cjs +9 -0
  34. package/dist/cjs/middleware/wrap-hono.cjs.map +1 -0
  35. package/dist/cjs/middleware/wrap-hono.d.cts +3 -0
  36. package/dist/cjs/middleware.cjs.map +1 -1
  37. package/dist/cjs/reply.d.cts +1 -1
  38. package/dist/cjs/route.cjs.map +1 -1
  39. package/dist/cjs/route.d.cts +1 -1
  40. package/dist/cjs/stream.d.cts +1 -1
  41. package/dist/cjs/taser-app.cjs +0 -6
  42. package/dist/cjs/taser-app.cjs.map +1 -1
  43. package/dist/cjs/taser-app.d.cts +0 -3
  44. package/dist/cjs/taser-router.cjs +9 -10
  45. package/dist/cjs/taser-router.cjs.map +1 -1
  46. package/dist/cjs/taser-router.d.cts +9 -11
  47. package/dist/cjs/types/app.d.cts +3 -2
  48. package/dist/cjs/types/index.d.cts +94 -143
  49. package/dist/cjs/types/type-utils.d.cts +8 -10
  50. package/dist/cjs/types/units.cjs.map +1 -1
  51. package/dist/cjs/types/units.d.cts +32 -27
  52. package/dist/esm/constants.js.map +1 -1
  53. package/dist/esm/create-context.js.map +1 -1
  54. package/dist/esm/define/handler.js.map +1 -1
  55. package/dist/esm/define/middleware.d.ts +27 -79
  56. package/dist/esm/define/middleware.js +18 -27
  57. package/dist/esm/define/middleware.js.map +1 -1
  58. package/dist/esm/define/validators.js.map +1 -1
  59. package/dist/esm/factories.d.ts +2 -2
  60. package/dist/esm/factories.js.map +1 -1
  61. package/dist/esm/index.d.ts +1 -1
  62. package/dist/esm/index.js +3 -3
  63. package/dist/esm/middleware/body-limit.js +1 -1
  64. package/dist/esm/middleware/body-limit.js.map +1 -1
  65. package/dist/esm/middleware/compress.js +1 -1
  66. package/dist/esm/middleware/compress.js.map +1 -1
  67. package/dist/esm/middleware/cors.js +1 -1
  68. package/dist/esm/middleware/cors.js.map +1 -1
  69. package/dist/esm/middleware/csrf.js +1 -1
  70. package/dist/esm/middleware/csrf.js.map +1 -1
  71. package/dist/esm/middleware/etag.js +1 -1
  72. package/dist/esm/middleware/etag.js.map +1 -1
  73. package/dist/esm/middleware/jwk.d.ts +4 -5
  74. package/dist/esm/middleware/jwk.js +11 -4
  75. package/dist/esm/middleware/jwk.js.map +1 -1
  76. package/dist/esm/middleware/jwt.d.ts +7 -5
  77. package/dist/esm/middleware/jwt.js +11 -5
  78. package/dist/esm/middleware/jwt.js.map +1 -1
  79. package/dist/esm/middleware/secure-headers.js +1 -1
  80. package/dist/esm/middleware/secure-headers.js.map +1 -1
  81. package/dist/esm/middleware/timing.js +1 -1
  82. package/dist/esm/middleware/timing.js.map +1 -1
  83. package/dist/esm/middleware/wrap-hono.d.ts +3 -0
  84. package/dist/esm/middleware/wrap-hono.js +9 -0
  85. package/dist/esm/middleware/wrap-hono.js.map +1 -0
  86. package/dist/esm/middleware.js.map +1 -1
  87. package/dist/esm/reply.d.ts +1 -1
  88. package/dist/esm/route.d.ts +1 -1
  89. package/dist/esm/route.js.map +1 -1
  90. package/dist/esm/stream.d.ts +1 -1
  91. package/dist/esm/taser-app.d.ts +0 -3
  92. package/dist/esm/taser-app.js +1 -6
  93. package/dist/esm/taser-app.js.map +1 -1
  94. package/dist/esm/taser-router.d.ts +9 -11
  95. package/dist/esm/taser-router.js +7 -8
  96. package/dist/esm/taser-router.js.map +1 -1
  97. package/dist/esm/types/app.d.ts +3 -2
  98. package/dist/esm/types/index.d.ts +94 -143
  99. package/dist/esm/types/type-utils.d.ts +8 -10
  100. package/dist/esm/types/units.d.ts +32 -27
  101. package/dist/esm/types/units.js.map +1 -1
  102. package/package.json +17 -17
  103. package/src/constants.ts +6 -6
  104. package/src/create-context.ts +8 -8
  105. package/src/define/handler.ts +24 -34
  106. package/src/define/middleware.ts +222 -222
  107. package/src/define/validators.ts +10 -10
  108. package/src/factories.ts +63 -61
  109. package/src/index.ts +12 -12
  110. package/src/middleware/body-limit.ts +5 -5
  111. package/src/middleware/compress.ts +5 -5
  112. package/src/middleware/cors.ts +5 -5
  113. package/src/middleware/csrf.ts +5 -5
  114. package/src/middleware/etag.ts +5 -5
  115. package/src/middleware/jwk.ts +33 -26
  116. package/src/middleware/jwt.ts +26 -10
  117. package/src/middleware/secure-headers.ts +5 -5
  118. package/src/middleware/timing.ts +5 -5
  119. package/src/middleware/wrap-hono.ts +12 -0
  120. package/src/middleware.ts +7 -7
  121. package/src/reply.ts +2 -6
  122. package/src/route.ts +45 -48
  123. package/src/stream.ts +1 -7
  124. package/src/taser-app.ts +13 -18
  125. package/src/taser-router.ts +103 -98
  126. package/src/types/app.ts +33 -35
  127. package/src/types/index.ts +403 -731
  128. package/src/types/returns.ts +92 -97
  129. package/src/types/schema.ts +8 -9
  130. package/src/types/type-utils.ts +42 -45
  131. package/src/types/units.ts +140 -104
  132. package/dist/cjs/middleware/auth.cjs +0 -34
  133. package/dist/cjs/middleware/auth.cjs.map +0 -1
  134. package/dist/cjs/middleware/auth.d.cts +0 -9
  135. package/dist/esm/middleware/auth.d.ts +0 -9
  136. package/dist/esm/middleware/auth.js +0 -33
  137. package/dist/esm/middleware/auth.js.map +0 -1
  138. package/src/middleware/auth.ts +0 -51
@@ -1,289 +1,289 @@
1
- import type { ReplyResult } from '@taserjs/router-utils'
2
- import { createTaserCompatHandler } from '@taserjs/router-core'
1
+ import { createTaserCompatHandler, type Awaitable } from "@taserjs/router-core";
3
2
 
4
- import type { Awaitable, ReturnsMap } from '../types/index.js'
3
+ import type { ReturnsMap } from "../types/returns.js";
5
4
  import type {
6
5
  AppContext,
6
+ ExtractState,
7
+ IsUnknown,
7
8
  MiddlewareReturnFromParts,
8
9
  MiddlewareUnit,
10
+ NextFn,
9
11
  StandaloneMiddlewareContext,
10
- } from '../types/units.js'
11
- import type { Schema } from '../types/schema.js'
12
+ } from "../types/units.js";
13
+ import type {
14
+ LayoutId,
15
+ ResolveLayoutMiddlewaresState,
16
+ ResolveLayoutsState,
17
+ } from "../types/index.js";
18
+ import type { Schema } from "../types/schema.js";
12
19
 
13
- type HonoMiddlewareHandler = Parameters<typeof createTaserCompatHandler>[0]
20
+ type HonoMiddlewareHandler = Parameters<typeof createTaserCompatHandler>[0];
14
21
 
15
22
  type HonoMiddlewareUnit = MiddlewareUnit<
16
- MiddlewareReturnFromParts<unknown, unknown, unknown, {}>
17
- >
23
+ MiddlewareReturnFromParts<unknown, unknown, unknown, {}>,
24
+ {},
25
+ null,
26
+ {}
27
+ >;
18
28
 
19
- type MiddlewareBuilderState<
29
+ export type DefineMiddlewareOptions<
30
+ TState = unknown,
31
+ TRequires = {},
20
32
  TQuery = unknown,
21
33
  TParams = unknown,
22
34
  TBody = unknown,
23
- TState = unknown,
24
- TCtx = unknown,
25
35
  TReturns extends ReturnsMap = {},
36
+ TQueryIn = unknown,
37
+ TParamsIn = unknown,
38
+ TBodyIn = unknown,
39
+ TAppContext extends Record<string, unknown> = AppContext,
40
+ R = unknown,
26
41
  > = {
27
- state?: Schema<TState>
28
- ctx?: Schema<TCtx>
29
- query?: Schema<TQuery>
30
- params?: Schema<TParams>
31
- body?: Schema<TBody>
32
- returns?: TReturns
33
- }
34
-
35
- type FluentNext<TState, TCtx>
36
- = [TState] extends [undefined]
37
- ? [TCtx] extends [undefined]
38
- ? () => Promise<ReplyResult>
39
- : (args: { ctx: TCtx }) => Promise<ReplyResult>
40
- : [TCtx] extends [undefined]
41
- ? (args: { state: TState }) => Promise<ReplyResult>
42
- : (args: { state: TState, ctx: TCtx }) => Promise<ReplyResult>
42
+ query?: Schema<TQuery, TQueryIn>;
43
+ params?: Schema<TParams, TParamsIn>;
44
+ body?: Schema<TBody, TBodyIn>;
45
+ returns?: TReturns;
46
+ handler: (
47
+ ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext, TRequires>,
48
+ next: NextFn<NoInfer<TState>>,
49
+ ) => Awaitable<R>;
50
+ };
43
51
 
44
- type FluentMiddlewareBuilder<
52
+ export type ScopedMiddlewareOptions<
53
+ Layout extends LayoutId,
54
+ TState = unknown,
55
+ TRequires = {},
45
56
  TQuery = unknown,
46
57
  TParams = unknown,
47
58
  TBody = unknown,
48
- TState = undefined,
49
- TCtx = undefined,
50
59
  TReturns extends ReturnsMap = {},
60
+ TQueryIn = unknown,
61
+ TParamsIn = unknown,
62
+ TBodyIn = unknown,
51
63
  TAppContext extends Record<string, unknown> = AppContext,
64
+ R = unknown,
52
65
  > = {
53
- returns<const M extends ReturnsMap>(
54
- map: M,
55
- ): FluentMiddlewareBuilder<
56
- TQuery,
57
- TParams,
58
- TBody,
59
- TState,
60
- TCtx,
61
- Omit<TReturns, keyof M> & M,
62
- TAppContext
63
- >
64
- handler(
65
- fn: (
66
- ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>,
67
- next: FluentNext<TState, TCtx>,
68
- ) => Awaitable<ReplyResult | Response | unknown>,
69
- ): MiddlewareUnit<
70
- MiddlewareReturnFromParts<
66
+ query?: Schema<TQuery, TQueryIn>;
67
+ params?: Schema<TParams, TParamsIn>;
68
+ body?: Schema<TBody, TBodyIn>;
69
+ returns?: TReturns;
70
+ handler: (
71
+ ctx: StandaloneMiddlewareContext<
71
72
  TQuery,
72
73
  TParams,
73
74
  TBody,
74
- TState extends undefined ? {} : TState,
75
- TCtx extends undefined ? {} : TCtx
75
+ TAppContext,
76
+ ResolveLayoutMiddlewaresState<Layout> & TRequires
76
77
  >,
77
- TReturns
78
- >
79
- }
80
-
81
- function createFluentBuilder<TAppContext extends Record<string, unknown> = AppContext>(
82
- state: MiddlewareBuilderState,
83
- ): FluentMiddlewareBuilder<unknown, unknown, unknown, undefined, undefined, {}, TAppContext> {
84
- return {
85
- returns(map: ReturnsMap) {
86
- return createFluentBuilder<TAppContext>({
87
- ...state,
88
- returns: { ...(state.returns ?? {}), ...map },
89
- })
90
- },
91
- handler(fn: (...args: never[]) => unknown) {
92
- const unit = {
93
- ...state,
94
- handler: fn,
95
- __middlewareAcc: undefined as unknown,
96
- ...(state.returns ? { __returns: state.returns } : {}),
97
- }
98
- return unit as unknown as MiddlewareUnit<
99
- MiddlewareReturnFromParts<unknown, unknown, unknown, unknown, unknown>,
100
- ReturnsMap
101
- >
102
- },
103
- } as unknown as FluentMiddlewareBuilder<unknown, unknown, unknown, undefined, undefined, {}, TAppContext>
104
- }
78
+ next: NextFn<NoInfer<TState>>,
79
+ ) => Awaitable<R>;
80
+ };
105
81
 
106
- export function defineMiddleware(middleware: HonoMiddlewareHandler): HonoMiddlewareUnit
107
-
108
- export function defineMiddleware<
109
- TAppContext extends Record<string, unknown> = AppContext,
82
+ export type MultiScopedMiddlewareOptions<
83
+ Layouts extends readonly LayoutId[],
110
84
  TState = unknown,
111
- TCtx = unknown,
85
+ TRequires = {},
112
86
  TQuery = unknown,
113
87
  TParams = unknown,
114
88
  TBody = unknown,
115
89
  TReturns extends ReturnsMap = {},
116
- >(
117
- options: {
118
- state: Schema<TState>
119
- ctx: Schema<TCtx>
120
- query?: Schema<TQuery>
121
- params?: Schema<TParams>
122
- body?: Schema<TBody>
123
- returns?: TReturns
124
- handler: (
125
- ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>,
126
- next: (args: { state: TState, ctx: TCtx }) => Promise<ReplyResult>,
127
- ) => Awaitable<ReplyResult | Response | unknown>
128
- },
129
- ): MiddlewareUnit<
130
- MiddlewareReturnFromParts<TQuery, TParams, TBody, TState, TCtx>,
131
- TReturns
132
- >
133
-
134
- export function defineMiddleware<
90
+ TQueryIn = unknown,
91
+ TParamsIn = unknown,
92
+ TBodyIn = unknown,
135
93
  TAppContext extends Record<string, unknown> = AppContext,
136
- TState = unknown,
137
- TQuery = unknown,
138
- TParams = unknown,
139
- TBody = unknown,
140
- TReturns extends ReturnsMap = {},
141
- >(
142
- options: {
143
- state: Schema<TState>
144
- query?: Schema<TQuery>
145
- params?: Schema<TParams>
146
- body?: Schema<TBody>
147
- returns?: TReturns
148
- handler: (
149
- ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>,
150
- next: (args: { state: TState }) => Promise<ReplyResult>,
151
- ) => Awaitable<ReplyResult | Response | unknown>
152
- },
153
- ): MiddlewareUnit<
154
- MiddlewareReturnFromParts<TQuery, TParams, TBody, TState>,
155
- TReturns
156
- >
94
+ R = unknown,
95
+ > = {
96
+ query?: Schema<TQuery, TQueryIn>;
97
+ params?: Schema<TParams, TParamsIn>;
98
+ body?: Schema<TBody, TBodyIn>;
99
+ returns?: TReturns;
100
+ handler: (
101
+ ctx: StandaloneMiddlewareContext<
102
+ TQuery,
103
+ TParams,
104
+ TBody,
105
+ TAppContext,
106
+ ResolveLayoutsState<Layouts> & TRequires
107
+ >,
108
+ next: NextFn<NoInfer<TState>>,
109
+ ) => Awaitable<R>;
110
+ };
111
+
112
+ export function defineMiddleware(middleware: HonoMiddlewareHandler): HonoMiddlewareUnit;
157
113
 
158
114
  export function defineMiddleware<
115
+ const Layout extends LayoutId,
116
+ TState = unknown,
117
+ TRequires = {},
159
118
  TAppContext extends Record<string, unknown> = AppContext,
160
- TCtx = unknown,
161
119
  TQuery = unknown,
162
120
  TParams = unknown,
163
121
  TBody = unknown,
164
122
  TReturns extends ReturnsMap = {},
123
+ TQueryIn = unknown,
124
+ TParamsIn = unknown,
125
+ TBodyIn = unknown,
126
+ R = unknown,
165
127
  >(
166
- options: {
167
- ctx: Schema<TCtx>
168
- query?: Schema<TQuery>
169
- params?: Schema<TParams>
170
- body?: Schema<TBody>
171
- returns?: TReturns
172
- handler: (
173
- ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>,
174
- next: (args: { ctx: TCtx }) => Promise<ReplyResult>,
175
- ) => Awaitable<ReplyResult | Response | unknown>
176
- },
128
+ layout: Layout,
129
+ options: ScopedMiddlewareOptions<
130
+ Layout,
131
+ TState,
132
+ TRequires,
133
+ TQuery,
134
+ TParams,
135
+ TBody,
136
+ TReturns,
137
+ TQueryIn,
138
+ TParamsIn,
139
+ TBodyIn,
140
+ TAppContext,
141
+ R
142
+ >,
177
143
  ): MiddlewareUnit<
178
- MiddlewareReturnFromParts<TQuery, TParams, TBody, {}, TCtx>,
179
- TReturns
180
- >
144
+ MiddlewareReturnFromParts<
145
+ TQuery,
146
+ TParams,
147
+ TBody,
148
+ IsUnknown<TState> extends true ? ExtractState<R> : TState,
149
+ TQueryIn,
150
+ TParamsIn,
151
+ TBodyIn
152
+ >,
153
+ TReturns,
154
+ Layout,
155
+ TRequires
156
+ >;
181
157
 
182
158
  export function defineMiddleware<
159
+ const Layouts extends readonly [LayoutId, ...LayoutId[]],
160
+ TState = unknown,
161
+ TRequires = {},
183
162
  TAppContext extends Record<string, unknown> = AppContext,
184
163
  TQuery = unknown,
185
164
  TParams = unknown,
186
165
  TBody = unknown,
187
166
  TReturns extends ReturnsMap = {},
167
+ TQueryIn = unknown,
168
+ TParamsIn = unknown,
169
+ TBodyIn = unknown,
170
+ R = unknown,
188
171
  >(
189
- options: {
190
- query?: Schema<TQuery>
191
- params?: Schema<TParams>
192
- body?: Schema<TBody>
193
- returns?: TReturns
194
- handler: (
195
- ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>,
196
- next: () => Promise<ReplyResult>,
197
- ) => Awaitable<ReplyResult | Response | unknown>
198
- },
172
+ layouts: Layouts,
173
+ options: MultiScopedMiddlewareOptions<
174
+ Layouts,
175
+ TState,
176
+ TRequires,
177
+ TQuery,
178
+ TParams,
179
+ TBody,
180
+ TReturns,
181
+ TQueryIn,
182
+ TParamsIn,
183
+ TBodyIn,
184
+ TAppContext,
185
+ R
186
+ >,
199
187
  ): MiddlewareUnit<
200
- MiddlewareReturnFromParts<TQuery, TParams, TBody, {}>,
201
- TReturns
202
- >
203
-
204
- export function defineMiddleware<
205
- TAppContext extends Record<string, unknown> = AppContext,
206
- >(): FluentMiddlewareBuilder<unknown, unknown, unknown, undefined, undefined, {}, TAppContext>
207
-
208
- export function defineMiddleware<
209
- TAppContext extends Record<string, unknown> = AppContext,
210
- TQuery = unknown,
211
- TParams = unknown,
212
- TBody = unknown,
213
- >(
214
- options: {
215
- query?: Schema<TQuery>
216
- params?: Schema<TParams>
217
- body?: Schema<TBody>
218
- },
219
- ): FluentMiddlewareBuilder<TQuery, TParams, TBody, undefined, undefined, {}, TAppContext>
188
+ MiddlewareReturnFromParts<
189
+ TQuery,
190
+ TParams,
191
+ TBody,
192
+ IsUnknown<TState> extends true ? ExtractState<R> : TState,
193
+ TQueryIn,
194
+ TParamsIn,
195
+ TBodyIn
196
+ >,
197
+ TReturns,
198
+ Layouts,
199
+ TRequires
200
+ >;
220
201
 
221
202
  export function defineMiddleware<
222
- TAppContext extends Record<string, unknown> = AppContext,
223
203
  TState = unknown,
224
- TQuery = unknown,
225
- TParams = unknown,
226
- TBody = unknown,
227
- >(
228
- options: {
229
- state: Schema<TState>
230
- query?: Schema<TQuery>
231
- params?: Schema<TParams>
232
- body?: Schema<TBody>
233
- },
234
- ): FluentMiddlewareBuilder<TQuery, TParams, TBody, TState, undefined, {}, TAppContext>
235
-
236
- export function defineMiddleware<
204
+ TRequires = {},
237
205
  TAppContext extends Record<string, unknown> = AppContext,
238
- TCtx = unknown,
239
206
  TQuery = unknown,
240
207
  TParams = unknown,
241
208
  TBody = unknown,
209
+ TReturns extends ReturnsMap = {},
210
+ TQueryIn = unknown,
211
+ TParamsIn = unknown,
212
+ TBodyIn = unknown,
213
+ R = unknown,
242
214
  >(
243
- options: {
244
- ctx: Schema<TCtx>
245
- query?: Schema<TQuery>
246
- params?: Schema<TParams>
247
- body?: Schema<TBody>
248
- },
249
- ): FluentMiddlewareBuilder<TQuery, TParams, TBody, undefined, TCtx, {}, TAppContext>
215
+ options: DefineMiddlewareOptions<
216
+ TState,
217
+ TRequires,
218
+ TQuery,
219
+ TParams,
220
+ TBody,
221
+ TReturns,
222
+ TQueryIn,
223
+ TParamsIn,
224
+ TBodyIn,
225
+ TAppContext,
226
+ R
227
+ >,
228
+ ): MiddlewareUnit<
229
+ MiddlewareReturnFromParts<
230
+ TQuery,
231
+ TParams,
232
+ TBody,
233
+ IsUnknown<TState> extends true ? ExtractState<R> : TState,
234
+ TQueryIn,
235
+ TParamsIn,
236
+ TBodyIn
237
+ >,
238
+ TReturns,
239
+ null,
240
+ TRequires
241
+ >;
250
242
 
251
- export function defineMiddleware<
252
- TAppContext extends Record<string, unknown> = AppContext,
253
- TState = unknown,
254
- TCtx = unknown,
255
- TQuery = unknown,
256
- TParams = unknown,
257
- TBody = unknown,
258
- >(
259
- options: {
260
- state: Schema<TState>
261
- ctx: Schema<TCtx>
262
- query?: Schema<TQuery>
263
- params?: Schema<TParams>
264
- body?: Schema<TBody>
265
- },
266
- ): FluentMiddlewareBuilder<TQuery, TParams, TBody, TState, TCtx, {}, TAppContext>
243
+ export function defineMiddleware(
244
+ first:
245
+ | string
246
+ | readonly string[]
247
+ | HonoMiddlewareHandler
248
+ | DefineMiddlewareOptions<any, any, any, any, any, any, any, any, any, any, any>,
249
+ second?: DefineMiddlewareOptions<any, any, any, any, any, any, any, any, any, any, any>,
250
+ ): unknown {
251
+ if (typeof first === "string" || Array.isArray(first)) {
252
+ const options = second!;
253
+ const unit = {
254
+ ...options,
255
+ __middlewareAcc: undefined as unknown,
256
+ ...(options?.returns ? { __returns: options.returns } : {}),
257
+ __requiredLayouts: first,
258
+ };
259
+ return unit;
260
+ }
267
261
 
268
- export function defineMiddleware(options?: unknown): unknown {
269
- if (typeof options === 'function') {
270
- const honoMiddleware = options as HonoMiddlewareHandler
262
+ if (typeof first === "function") {
263
+ const honoMiddleware = first as HonoMiddlewareHandler;
271
264
  return defineMiddleware({
272
265
  handler: (ctx, next) => createTaserCompatHandler(honoMiddleware)(ctx, next),
273
- })
266
+ });
274
267
  }
275
268
 
276
- if (options === undefined) {
277
- return createFluentBuilder({})
278
- }
279
-
280
- if (
281
- typeof options === 'object'
282
- && options !== null
283
- && !('handler' in options)
284
- ) {
285
- return createFluentBuilder(options)
286
- }
269
+ const options = first as DefineMiddlewareOptions<
270
+ any,
271
+ any,
272
+ any,
273
+ any,
274
+ any,
275
+ any,
276
+ any,
277
+ any,
278
+ any,
279
+ any,
280
+ any
281
+ >;
282
+ const unit = {
283
+ ...options,
284
+ __middlewareAcc: undefined as unknown,
285
+ ...(options.returns ? { __returns: options.returns } : {}),
286
+ };
287
287
 
288
- return options
288
+ return unit;
289
289
  }
@@ -1,22 +1,22 @@
1
- import type { Schema } from '../types/schema.js'
2
- import { SCHEMA_KEYS, type SchemaKey } from '../constants.js'
1
+ import type { Schema } from "../types/schema.js";
2
+ import { SCHEMA_KEYS, type SchemaKey } from "../constants.js";
3
3
 
4
4
  export type SchemaValidators = {
5
- query?: Schema<unknown>
6
- params?: Schema<unknown>
7
- body?: Schema<unknown>
8
- }
5
+ query?: Schema<unknown>;
6
+ params?: Schema<unknown>;
7
+ body?: Schema<unknown>;
8
+ };
9
9
 
10
10
  export function pickDefinedSchemas(
11
11
  source: SchemaValidators,
12
12
  keyMap?: Partial<Record<SchemaKey, string>>,
13
13
  ): Record<string, Schema<unknown>> {
14
- const result: Record<string, Schema<unknown>> = {}
14
+ const result: Record<string, Schema<unknown>> = {};
15
15
  for (const key of SCHEMA_KEYS) {
16
- const value = source[key]
16
+ const value = source[key];
17
17
  if (value !== undefined) {
18
- result[keyMap?.[key] ?? key] = value
18
+ result[keyMap?.[key] ?? key] = value;
19
19
  }
20
20
  }
21
- return result
21
+ return result;
22
22
  }