@taserjs/router 0.1.3 → 0.1.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 (135) hide show
  1. package/README.md +0 -7
  2. package/dist/cjs/builder/constants.cjs +0 -6
  3. package/dist/cjs/builder/constants.cjs.map +1 -1
  4. package/dist/cjs/builder/constants.d.cts +0 -5
  5. package/dist/cjs/builder/middleware-unit.cjs +55 -0
  6. package/dist/cjs/builder/middleware-unit.cjs.map +1 -0
  7. package/dist/cjs/builder/middleware-unit.d.cts +18 -0
  8. package/dist/cjs/builder/middleware.cjs +2 -1
  9. package/dist/cjs/builder/middleware.cjs.map +1 -1
  10. package/dist/cjs/builder/route.cjs +6 -21
  11. package/dist/cjs/builder/route.cjs.map +1 -1
  12. package/dist/cjs/builder/router.cjs +0 -4
  13. package/dist/cjs/builder/router.cjs.map +1 -1
  14. package/dist/cjs/builder/router.d.cts +1 -11
  15. package/dist/cjs/define/middleware.cjs +10 -14
  16. package/dist/cjs/define/middleware.cjs.map +1 -1
  17. package/dist/cjs/define/middleware.d.cts +42 -31
  18. package/dist/cjs/index.cjs +2 -2
  19. package/dist/cjs/index.d.cts +2 -2
  20. package/dist/cjs/middleware/body-limit.cjs +3 -3
  21. package/dist/cjs/middleware/body-limit.cjs.map +1 -1
  22. package/dist/cjs/middleware/body-limit.d.cts +1 -1
  23. package/dist/cjs/middleware/compress.cjs +3 -3
  24. package/dist/cjs/middleware/compress.cjs.map +1 -1
  25. package/dist/cjs/middleware/compress.d.cts +1 -1
  26. package/dist/cjs/middleware/cors.cjs +3 -3
  27. package/dist/cjs/middleware/cors.cjs.map +1 -1
  28. package/dist/cjs/middleware/cors.d.cts +1 -1
  29. package/dist/cjs/middleware/csrf.cjs +3 -3
  30. package/dist/cjs/middleware/csrf.cjs.map +1 -1
  31. package/dist/cjs/middleware/csrf.d.cts +1 -1
  32. package/dist/cjs/middleware/etag.cjs +3 -3
  33. package/dist/cjs/middleware/etag.cjs.map +1 -1
  34. package/dist/cjs/middleware/etag.d.cts +1 -1
  35. package/dist/cjs/middleware/hono-mw.cjs +23 -0
  36. package/dist/cjs/middleware/hono-mw.cjs.map +1 -0
  37. package/dist/cjs/middleware/hono-mw.d.cts +16 -0
  38. package/dist/cjs/middleware/jwk.cjs +6 -2
  39. package/dist/cjs/middleware/jwk.cjs.map +1 -1
  40. package/dist/cjs/middleware/jwt.cjs +6 -2
  41. package/dist/cjs/middleware/jwt.cjs.map +1 -1
  42. package/dist/cjs/middleware/secure-headers.cjs +3 -3
  43. package/dist/cjs/middleware/secure-headers.cjs.map +1 -1
  44. package/dist/cjs/middleware/secure-headers.d.cts +1 -1
  45. package/dist/cjs/middleware/timing.cjs +3 -3
  46. package/dist/cjs/middleware/timing.cjs.map +1 -1
  47. package/dist/cjs/middleware/timing.d.cts +1 -1
  48. package/dist/cjs/types/index.d.cts +4 -41
  49. package/dist/cjs/types/units.d.cts +9 -34
  50. package/dist/esm/builder/constants.d.ts +0 -5
  51. package/dist/esm/builder/constants.js +1 -6
  52. package/dist/esm/builder/constants.js.map +1 -1
  53. package/dist/esm/builder/middleware-unit.d.ts +18 -0
  54. package/dist/esm/builder/middleware-unit.js +55 -0
  55. package/dist/esm/builder/middleware-unit.js.map +1 -0
  56. package/dist/esm/builder/middleware.js +2 -1
  57. package/dist/esm/builder/middleware.js.map +1 -1
  58. package/dist/esm/builder/route.js +6 -21
  59. package/dist/esm/builder/route.js.map +1 -1
  60. package/dist/esm/builder/router.d.ts +1 -11
  61. package/dist/esm/builder/router.js +0 -4
  62. package/dist/esm/builder/router.js.map +1 -1
  63. package/dist/esm/define/middleware.d.ts +42 -31
  64. package/dist/esm/define/middleware.js +10 -14
  65. package/dist/esm/define/middleware.js.map +1 -1
  66. package/dist/esm/index.d.ts +2 -2
  67. package/dist/esm/index.js +2 -2
  68. package/dist/esm/middleware/body-limit.d.ts +1 -1
  69. package/dist/esm/middleware/body-limit.js +3 -3
  70. package/dist/esm/middleware/body-limit.js.map +1 -1
  71. package/dist/esm/middleware/compress.d.ts +1 -1
  72. package/dist/esm/middleware/compress.js +3 -3
  73. package/dist/esm/middleware/compress.js.map +1 -1
  74. package/dist/esm/middleware/cors.d.ts +1 -1
  75. package/dist/esm/middleware/cors.js +3 -3
  76. package/dist/esm/middleware/cors.js.map +1 -1
  77. package/dist/esm/middleware/csrf.d.ts +1 -1
  78. package/dist/esm/middleware/csrf.js +3 -3
  79. package/dist/esm/middleware/csrf.js.map +1 -1
  80. package/dist/esm/middleware/etag.d.ts +1 -1
  81. package/dist/esm/middleware/etag.js +3 -3
  82. package/dist/esm/middleware/etag.js.map +1 -1
  83. package/dist/esm/middleware/hono-mw.d.ts +16 -0
  84. package/dist/esm/middleware/hono-mw.js +23 -0
  85. package/dist/esm/middleware/hono-mw.js.map +1 -0
  86. package/dist/esm/middleware/jwk.js +6 -2
  87. package/dist/esm/middleware/jwk.js.map +1 -1
  88. package/dist/esm/middleware/jwt.js +6 -2
  89. package/dist/esm/middleware/jwt.js.map +1 -1
  90. package/dist/esm/middleware/secure-headers.d.ts +1 -1
  91. package/dist/esm/middleware/secure-headers.js +3 -3
  92. package/dist/esm/middleware/secure-headers.js.map +1 -1
  93. package/dist/esm/middleware/timing.d.ts +1 -1
  94. package/dist/esm/middleware/timing.js +3 -3
  95. package/dist/esm/middleware/timing.js.map +1 -1
  96. package/dist/esm/types/index.d.ts +4 -41
  97. package/dist/esm/types/units.d.ts +9 -34
  98. package/package.json +3 -3
  99. package/src/builder/constants.ts +0 -6
  100. package/src/builder/middleware-unit.ts +55 -0
  101. package/src/builder/middleware.ts +6 -2
  102. package/src/builder/route.ts +8 -34
  103. package/src/builder/router.ts +1 -18
  104. package/src/define/middleware.ts +133 -228
  105. package/src/index.ts +3 -1
  106. package/src/middleware/body-limit.ts +3 -4
  107. package/src/middleware/compress.ts +3 -4
  108. package/src/middleware/cors.ts +3 -4
  109. package/src/middleware/csrf.ts +3 -4
  110. package/src/middleware/etag.ts +3 -4
  111. package/src/middleware/hono-mw.ts +22 -0
  112. package/src/middleware/jwk.ts +9 -7
  113. package/src/middleware/jwt.ts +8 -6
  114. package/src/middleware/secure-headers.ts +3 -4
  115. package/src/middleware/timing.ts +3 -4
  116. package/src/types/index.ts +15 -172
  117. package/src/types/units.ts +119 -77
  118. package/dist/cjs/define/handler.cjs +0 -38
  119. package/dist/cjs/define/handler.cjs.map +0 -1
  120. package/dist/cjs/define/handler.d.cts +0 -13
  121. package/dist/cjs/middleware/wrap-hono.cjs +0 -19
  122. package/dist/cjs/middleware/wrap-hono.cjs.map +0 -1
  123. package/dist/cjs/middleware/wrap-hono.d.cts +0 -7
  124. package/dist/cjs/types/units.cjs +0 -8
  125. package/dist/cjs/types/units.cjs.map +0 -1
  126. package/dist/esm/define/handler.d.ts +0 -13
  127. package/dist/esm/define/handler.js +0 -38
  128. package/dist/esm/define/handler.js.map +0 -1
  129. package/dist/esm/middleware/wrap-hono.d.ts +0 -7
  130. package/dist/esm/middleware/wrap-hono.js +0 -18
  131. package/dist/esm/middleware/wrap-hono.js.map +0 -1
  132. package/dist/esm/types/units.js +0 -8
  133. package/dist/esm/types/units.js.map +0 -1
  134. package/src/define/handler.ts +0 -62
  135. package/src/middleware/wrap-hono.ts +0 -25
@@ -1,11 +1,12 @@
1
- import { createTaserCompatHandler, type Awaitable } from "@taserjs/router-core";
1
+ import { type Awaitable } from "@taserjs/router-core";
2
2
 
3
- import type { ReturnsMap } from "../types/returns.js";
3
+ import { createMiddlewareUnitBuilder } from "../builder/middleware-unit.js";
4
4
  import type {
5
5
  AppContext,
6
6
  DefineMiddlewareResult,
7
- MiddlewareReturnFromParts,
8
- MiddlewareUnit,
7
+ ExtractState,
8
+ IsUnknown,
9
+ MiddlewareUnitBuilder,
9
10
  NextFn,
10
11
  StandaloneMiddlewareContext,
11
12
  } from "../types/units.js";
@@ -14,268 +15,172 @@ import type {
14
15
  ResolveLayoutMiddlewaresState,
15
16
  ResolveLayoutsState,
16
17
  } from "../types/index.js";
17
- import type { Schema } from "../types/schema.js";
18
18
 
19
- export type HonoMiddlewareHandler = Parameters<typeof createTaserCompatHandler>[0];
20
-
21
- export type HonoMiddlewareUnit = MiddlewareUnit<
22
- MiddlewareReturnFromParts<unknown, unknown, unknown, {}>,
23
- {},
24
- null,
25
- {}
26
- >;
27
-
28
- export type DefineMiddlewareOptions<
29
- TState = unknown,
30
- TRequires = {},
31
- TQuery = unknown,
32
- TParams = unknown,
33
- TBody = unknown,
34
- TReturns extends ReturnsMap = {},
35
- TQueryIn = unknown,
36
- TParamsIn = unknown,
37
- TBodyIn = unknown,
38
- TAppContext extends Record<string, unknown> = AppContext,
39
- R = unknown,
40
- > = {
41
- query?: Schema<TQuery, TQueryIn>;
42
- params?: Schema<TParams, TParamsIn>;
43
- body?: Schema<TBody, TBodyIn>;
44
- returns?: TReturns;
45
- handler: (
46
- ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext, TRequires>,
47
- next: NextFn<NoInfer<TState>>,
48
- ) => Awaitable<R>;
49
- };
50
-
51
- export type ScopedMiddlewareOptions<
52
- Layout extends LayoutId,
53
- TState = unknown,
54
- TRequires = {},
55
- TQuery = unknown,
56
- TParams = unknown,
57
- TBody = unknown,
58
- TReturns extends ReturnsMap = {},
59
- TQueryIn = unknown,
60
- TParamsIn = unknown,
61
- TBodyIn = unknown,
62
- TAppContext extends Record<string, unknown> = AppContext,
63
- R = unknown,
64
- > = {
65
- query?: Schema<TQuery, TQueryIn>;
66
- params?: Schema<TParams, TParamsIn>;
67
- body?: Schema<TBody, TBodyIn>;
68
- returns?: TReturns;
69
- handler: (
70
- ctx: StandaloneMiddlewareContext<
71
- TQuery,
72
- TParams,
73
- TBody,
74
- TAppContext,
75
- ResolveLayoutMiddlewaresState<Layout> & TRequires
76
- >,
77
- next: NextFn<NoInfer<TState>>,
78
- ) => Awaitable<R>;
79
- };
19
+ export interface DefineMiddlewareFn<TAppContext extends Record<string, unknown> = AppContext> {
20
+ /**
21
+ * Constructs a fluent unscoped middleware builder.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * const auth = defineMiddleware()
26
+ * .query(z.object({ token: z.string() }))
27
+ * .body("form", z.object({ file: z.instanceof(File) }))
28
+ * .returns({ 401: z.string() })
29
+ * .handler(async (ctx, next) => next({ user: "alice" }));
30
+ * ```
31
+ */
32
+ (): MiddlewareUnitBuilder<unknown, unknown, unknown, {}, null, {}, TAppContext>;
80
33
 
81
- export type MultiScopedMiddlewareOptions<
82
- Layouts extends readonly LayoutId[],
83
- TState = unknown,
84
- TRequires = {},
85
- TQuery = unknown,
86
- TParams = unknown,
87
- TBody = unknown,
88
- TReturns extends ReturnsMap = {},
89
- TQueryIn = unknown,
90
- TParamsIn = unknown,
91
- TBodyIn = unknown,
92
- TAppContext extends Record<string, unknown> = AppContext,
93
- R = unknown,
94
- > = {
95
- query?: Schema<TQuery, TQueryIn>;
96
- params?: Schema<TParams, TParamsIn>;
97
- body?: Schema<TBody, TBodyIn>;
98
- returns?: TReturns;
99
- handler: (
100
- ctx: StandaloneMiddlewareContext<
101
- TQuery,
102
- TParams,
103
- TBody,
104
- TAppContext,
105
- ResolveLayoutsState<Layouts> & TRequires
106
- >,
107
- next: NextFn<NoInfer<TState>>,
108
- ) => Awaitable<R>;
109
- };
34
+ /**
35
+ * Constructs a fluent middleware builder scoped to a single layout branch.
36
+ */
37
+ <const Layout extends LayoutId>(
38
+ layout: Layout,
39
+ ): MiddlewareUnitBuilder<
40
+ unknown,
41
+ unknown,
42
+ unknown,
43
+ {},
44
+ Layout,
45
+ {},
46
+ TAppContext,
47
+ ResolveLayoutMiddlewaresState<Layout>
48
+ >;
110
49
 
111
- export interface DefineMiddlewareFn<TAppContext extends Record<string, unknown> = AppContext> {
112
- (middleware: HonoMiddlewareHandler): HonoMiddlewareUnit;
50
+ /**
51
+ * Constructs a fluent middleware builder scoped to multiple layout branches (branch union).
52
+ */
53
+ <const Layouts extends readonly [LayoutId, ...LayoutId[]]>(
54
+ layouts: Layouts,
55
+ ): MiddlewareUnitBuilder<
56
+ unknown,
57
+ unknown,
58
+ unknown,
59
+ {},
60
+ Layouts,
61
+ {},
62
+ TAppContext,
63
+ ResolveLayoutsState<Layouts>
64
+ >;
113
65
 
114
- <
115
- const Layout extends LayoutId,
116
- TState = unknown,
117
- TRequires = {},
118
- TQuery = unknown,
119
- TParams = unknown,
120
- TBody = unknown,
121
- TReturns extends ReturnsMap = {},
122
- TQueryIn = unknown,
123
- TParamsIn = unknown,
124
- TBodyIn = unknown,
125
- R = unknown,
126
- >(
66
+ /**
67
+ * Defines a standalone middleware scoped to a single layout branch using a short function signature.
68
+ */
69
+ <const Layout extends LayoutId, TState = unknown, TRequires = {}, R = unknown>(
127
70
  layout: Layout,
128
- options: ScopedMiddlewareOptions<
129
- Layout,
130
- TState,
131
- TRequires,
132
- TQuery,
133
- TParams,
134
- TBody,
135
- TReturns,
136
- TQueryIn,
137
- TParamsIn,
138
- TBodyIn,
139
- TAppContext,
140
- R
141
- >,
71
+ fn: (
72
+ ctx: StandaloneMiddlewareContext<
73
+ unknown,
74
+ unknown,
75
+ unknown,
76
+ TAppContext,
77
+ ResolveLayoutMiddlewaresState<Layout> & TRequires
78
+ >,
79
+ next: NextFn<NoInfer<TState>>,
80
+ ) => Awaitable<R>,
142
81
  ): DefineMiddlewareResult<
143
- TQuery,
144
- TParams,
145
- TBody,
146
- TState,
82
+ unknown,
83
+ unknown,
84
+ unknown,
85
+ IsUnknown<TState> extends true ? ExtractState<R> : TState,
147
86
  R,
148
- TQueryIn,
149
- TParamsIn,
150
- TBodyIn,
151
- TReturns,
87
+ unknown,
88
+ unknown,
89
+ unknown,
90
+ {},
152
91
  Layout,
153
92
  TRequires
154
93
  >;
155
94
 
95
+ /**
96
+ * Defines a standalone middleware scoped to multiple layout branches using a short function signature.
97
+ */
156
98
  <
157
99
  const Layouts extends readonly [LayoutId, ...LayoutId[]],
158
100
  TState = unknown,
159
101
  TRequires = {},
160
- TQuery = unknown,
161
- TParams = unknown,
162
- TBody = unknown,
163
- TReturns extends ReturnsMap = {},
164
- TQueryIn = unknown,
165
- TParamsIn = unknown,
166
- TBodyIn = unknown,
167
102
  R = unknown,
168
103
  >(
169
104
  layouts: Layouts,
170
- options: MultiScopedMiddlewareOptions<
171
- Layouts,
172
- TState,
173
- TRequires,
174
- TQuery,
175
- TParams,
176
- TBody,
177
- TReturns,
178
- TQueryIn,
179
- TParamsIn,
180
- TBodyIn,
181
- TAppContext,
182
- R
183
- >,
105
+ fn: (
106
+ ctx: StandaloneMiddlewareContext<
107
+ unknown,
108
+ unknown,
109
+ unknown,
110
+ TAppContext,
111
+ ResolveLayoutsState<Layouts> & TRequires
112
+ >,
113
+ next: NextFn<NoInfer<TState>>,
114
+ ) => Awaitable<R>,
184
115
  ): DefineMiddlewareResult<
185
- TQuery,
186
- TParams,
187
- TBody,
188
- TState,
116
+ unknown,
117
+ unknown,
118
+ unknown,
119
+ IsUnknown<TState> extends true ? ExtractState<R> : TState,
189
120
  R,
190
- TQueryIn,
191
- TParamsIn,
192
- TBodyIn,
193
- TReturns,
121
+ unknown,
122
+ unknown,
123
+ unknown,
124
+ {},
194
125
  Layouts,
195
126
  TRequires
196
127
  >;
197
128
 
198
- <
199
- TState = unknown,
200
- TRequires = {},
201
- TQuery = unknown,
202
- TParams = unknown,
203
- TBody = unknown,
204
- TReturns extends ReturnsMap = {},
205
- TQueryIn = unknown,
206
- TParamsIn = unknown,
207
- TBodyIn = unknown,
208
- R = unknown,
209
- >(
210
- options: DefineMiddlewareOptions<
211
- TState,
212
- TRequires,
213
- TQuery,
214
- TParams,
215
- TBody,
216
- TReturns,
217
- TQueryIn,
218
- TParamsIn,
219
- TBodyIn,
220
- TAppContext,
221
- R
222
- >,
129
+ /**
130
+ * Defines a standalone, unscoped middleware using a short function signature.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * const auth = defineMiddleware((ctx, next) => {
135
+ * return next({ user: "alice" });
136
+ * });
137
+ * ```
138
+ */
139
+ <TState = unknown, TRequires = {}, R = unknown>(
140
+ fn: (
141
+ ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, TRequires>,
142
+ next: NextFn<NoInfer<TState>>,
143
+ ) => Awaitable<R>,
223
144
  ): DefineMiddlewareResult<
224
- TQuery,
225
- TParams,
226
- TBody,
227
- TState,
145
+ unknown,
146
+ unknown,
147
+ unknown,
148
+ IsUnknown<TState> extends true ? ExtractState<R> : TState,
228
149
  R,
229
- TQueryIn,
230
- TParamsIn,
231
- TBodyIn,
232
- TReturns,
150
+ unknown,
151
+ unknown,
152
+ unknown,
153
+ {},
233
154
  null,
234
155
  TRequires
235
156
  >;
236
157
  }
237
158
 
238
159
  export const defineMiddleware: DefineMiddlewareFn<AppContext> = function defineMiddleware(
239
- first: any,
160
+ first?: any,
240
161
  second?: any,
241
162
  ): any {
163
+ if (first === undefined) {
164
+ return createMiddlewareUnitBuilder();
165
+ }
166
+
242
167
  if (typeof first === "string" || Array.isArray(first)) {
243
- const options = second!;
244
- const unit = {
245
- ...options,
246
- __middlewareAcc: undefined as unknown,
247
- ...(options?.returns ? { __returns: options.returns } : {}),
248
- __requiredLayouts: first,
249
- };
250
- return unit;
168
+ if (typeof second === "function") {
169
+ return {
170
+ handler: second,
171
+ __middlewareAcc: undefined as unknown,
172
+ __requiredLayouts: first,
173
+ };
174
+ }
175
+ return createMiddlewareUnitBuilder(first);
251
176
  }
252
177
 
253
178
  if (typeof first === "function") {
254
- const honoMiddleware = first as HonoMiddlewareHandler;
255
- return defineMiddleware({
256
- handler: (ctx: unknown, next: (state?: Record<string, unknown>) => unknown) =>
257
- createTaserCompatHandler(honoMiddleware)(ctx, next),
258
- });
179
+ return {
180
+ handler: first,
181
+ __middlewareAcc: undefined as unknown,
182
+ };
259
183
  }
260
184
 
261
- const options = first as DefineMiddlewareOptions<
262
- any,
263
- any,
264
- any,
265
- any,
266
- any,
267
- any,
268
- any,
269
- any,
270
- any,
271
- any,
272
- any
273
- >;
274
- const unit = {
275
- ...options,
276
- __middlewareAcc: undefined as unknown,
277
- ...(options.returns ? { __returns: options.returns } : {}),
278
- };
279
-
280
- return unit;
185
+ return createMiddlewareUnitBuilder();
281
186
  };
package/src/index.ts CHANGED
@@ -8,6 +8,8 @@ export type {
8
8
  InferRouteOutput,
9
9
  Method,
10
10
  MiddlewareDefinition,
11
+ MiddlewareUnit,
12
+ MiddlewareUnitBuilder,
11
13
  PathParams,
12
14
  ReturnsMap,
13
15
  RouteDefinition,
@@ -32,7 +34,7 @@ export type { ResponseValidationFailureHandler, SuccessStatusCode } from "@taser
32
34
  export { createTaserApp, TaserRouter } from "./builder/router.js";
33
35
  export { TaserApp } from "./builder/app.js";
34
36
  export { createContext } from "./context/create-context.js";
35
- export { defineHandler } from "./define/handler.js";
36
37
  export { defineMiddleware } from "./define/middleware.js";
38
+ export { honoMw } from "./middleware/hono-mw.js";
37
39
 
38
40
  export type { TaserCookieJar, TaserHeaders } from "@taserjs/router-core";
@@ -1,11 +1,10 @@
1
1
  import { bodyLimit as honoBodyLimit } from "hono/body-limit";
2
2
 
3
- import { wrapHonoMiddleware } from "./wrap-hono.js";
4
-
5
- const wrapped = wrapHonoMiddleware(honoBodyLimit);
3
+ import { defineMiddleware } from "../define/middleware.js";
4
+ import { honoMw } from "./hono-mw.js";
6
5
 
7
6
  export function bodyLimit(...args: Parameters<typeof honoBodyLimit>) {
8
- return wrapped(...args);
7
+ return defineMiddleware(honoMw(honoBodyLimit(...args)));
9
8
  }
10
9
 
11
10
  export type BodyLimitOptions = Parameters<typeof honoBodyLimit>[0];
@@ -1,11 +1,10 @@
1
1
  import { compress as honoCompress } from "hono/compress";
2
2
 
3
- import { wrapHonoMiddleware } from "./wrap-hono.js";
4
-
5
- const wrapped = wrapHonoMiddleware(honoCompress);
3
+ import { defineMiddleware } from "../define/middleware.js";
4
+ import { honoMw } from "./hono-mw.js";
6
5
 
7
6
  export function compress(...args: Parameters<typeof honoCompress>) {
8
- return wrapped(...args);
7
+ return defineMiddleware(honoMw(honoCompress(...args)));
9
8
  }
10
9
 
11
10
  export type CompressOptions = NonNullable<Parameters<typeof honoCompress>[0]>;
@@ -1,11 +1,10 @@
1
1
  import { cors as honoCors } from "hono/cors";
2
2
 
3
- import { wrapHonoMiddleware } from "./wrap-hono.js";
4
-
5
- const wrapped = wrapHonoMiddleware(honoCors);
3
+ import { defineMiddleware } from "../define/middleware.js";
4
+ import { honoMw } from "./hono-mw.js";
6
5
 
7
6
  export function cors(...args: Parameters<typeof honoCors>) {
8
- return wrapped(...args);
7
+ return defineMiddleware(honoMw(honoCors(...args)));
9
8
  }
10
9
 
11
10
  export type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>;
@@ -1,11 +1,10 @@
1
1
  import { csrf as honoCsrf } from "hono/csrf";
2
2
 
3
- import { wrapHonoMiddleware } from "./wrap-hono.js";
4
-
5
- const wrapped = wrapHonoMiddleware(honoCsrf);
3
+ import { defineMiddleware } from "../define/middleware.js";
4
+ import { honoMw } from "./hono-mw.js";
6
5
 
7
6
  export function csrf(...args: Parameters<typeof honoCsrf>) {
8
- return wrapped(...args);
7
+ return defineMiddleware(honoMw(honoCsrf(...args)));
9
8
  }
10
9
 
11
10
  export type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>;
@@ -1,11 +1,10 @@
1
1
  import { etag as honoEtag } from "hono/etag";
2
2
 
3
- import { wrapHonoMiddleware } from "./wrap-hono.js";
4
-
5
- const wrapped = wrapHonoMiddleware(honoEtag);
3
+ import { defineMiddleware } from "../define/middleware.js";
4
+ import { honoMw } from "./hono-mw.js";
6
5
 
7
6
  export function etag(...args: Parameters<typeof honoEtag>) {
8
- return wrapped(...args);
7
+ return defineMiddleware(honoMw(honoEtag(...args)));
9
8
  }
10
9
 
11
10
  export type EtagOptions = NonNullable<Parameters<typeof honoEtag>[0]>;
@@ -0,0 +1,22 @@
1
+ import { createTaserCompatHandler } from "@taserjs/router-core";
2
+ import type { MiddlewareHandler } from "hono";
3
+
4
+ /**
5
+ * Adapts a standard Web / Hono-compatible middleware function `(c, next) => ...`
6
+ * into a Taser-compatible middleware handler function `(ctx, next) => Promise<Response>`.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { honoMw } from "@taserjs/router";
11
+ * import { cors } from "hono/cors";
12
+ *
13
+ * const app = t.get("/hello").use(honoMw(cors()));
14
+ * // or
15
+ * const customCors = defineMiddleware(honoMw(cors()));
16
+ * ```
17
+ */
18
+ export function honoMw(
19
+ middleware: MiddlewareHandler,
20
+ ): (ctx: unknown, next: any) => Promise<Response> {
21
+ return createTaserCompatHandler(middleware) as (ctx: unknown, next: any) => Promise<Response>;
22
+ }
@@ -1,9 +1,8 @@
1
- import type { MiddlewareHandler } from "hono";
2
1
  import { jwk as honoJwk } from "hono/jwk";
3
2
 
4
3
  import { defineMiddleware } from "../define/middleware.js";
4
+ import { honoMw } from "./hono-mw.js";
5
5
  import type { JwtMiddlewareUnit, JwtPayloadState } from "./jwt.js";
6
- import { extractJwtPayload } from "./wrap-hono.js";
7
6
 
8
7
  export type JwkOptions = Parameters<typeof honoJwk>[0];
9
8
 
@@ -41,9 +40,12 @@ export function jwk<TPayload = Record<string, unknown>>(
41
40
 
42
41
  const { allowInsecure: _allowInsecure, ...honoOptions } = options;
43
42
  const safeInit = init?.headers !== undefined ? { headers: init.headers } : undefined;
44
- const honoMw: MiddlewareHandler = honoJwk(honoOptions, safeInit);
45
-
46
- return defineMiddleware<JwtPayloadState<TPayload>>({
47
- handler: extractJwtPayload<TPayload>(honoMw),
48
- });
43
+ const mw = honoMw(honoJwk(honoOptions, safeInit));
44
+
45
+ return defineMiddleware<JwtPayloadState<TPayload>>((ctx, next) =>
46
+ mw(ctx, async () => {
47
+ const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;
48
+ return next({ jwtPayload: payload as TPayload });
49
+ }),
50
+ );
49
51
  }
@@ -1,9 +1,8 @@
1
- import type { MiddlewareHandler } from "hono";
2
1
  import { jwt as honoJwt } from "hono/jwt";
3
2
 
4
3
  import { defineMiddleware } from "../define/middleware.js";
5
4
  import type { MiddlewareReturnFromParts, MiddlewareUnit } from "../types/units.js";
6
- import { extractJwtPayload } from "./wrap-hono.js";
5
+ import { honoMw } from "./hono-mw.js";
7
6
 
8
7
  export type JwtPayloadState<TPayload> = {
9
8
  jwtPayload: TPayload;
@@ -22,8 +21,11 @@ export type JwtOptions = Parameters<typeof honoJwt>[0];
22
21
  export function jwt<TPayload = Record<string, unknown>>(
23
22
  options: JwtOptions,
24
23
  ): JwtMiddlewareUnit<TPayload> {
25
- const honoMw: MiddlewareHandler = honoJwt(options);
26
- return defineMiddleware<JwtPayloadState<TPayload>>({
27
- handler: extractJwtPayload<TPayload>(honoMw),
28
- });
24
+ const mw = honoMw(honoJwt(options));
25
+ return defineMiddleware<JwtPayloadState<TPayload>>((ctx, next) =>
26
+ mw(ctx, async () => {
27
+ const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;
28
+ return next({ jwtPayload: payload as TPayload });
29
+ }),
30
+ );
29
31
  }
@@ -1,11 +1,10 @@
1
1
  import { secureHeaders as honoSecureHeaders } from "hono/secure-headers";
2
2
 
3
- import { wrapHonoMiddleware } from "./wrap-hono.js";
4
-
5
- const wrapped = wrapHonoMiddleware(honoSecureHeaders);
3
+ import { defineMiddleware } from "../define/middleware.js";
4
+ import { honoMw } from "./hono-mw.js";
6
5
 
7
6
  export function secureHeaders(...args: Parameters<typeof honoSecureHeaders>) {
8
- return wrapped(...args);
7
+ return defineMiddleware(honoMw(honoSecureHeaders(...args)));
9
8
  }
10
9
 
11
10
  export type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>;
@@ -1,11 +1,10 @@
1
1
  import { timing as honoTiming } from "hono/timing";
2
2
 
3
- import { wrapHonoMiddleware } from "./wrap-hono.js";
4
-
5
- const wrapped = wrapHonoMiddleware(honoTiming);
3
+ import { defineMiddleware } from "../define/middleware.js";
4
+ import { honoMw } from "./hono-mw.js";
6
5
 
7
6
  export function timing(...args: Parameters<typeof honoTiming>) {
8
- return wrapped(...args);
7
+ return defineMiddleware(honoMw(honoTiming(...args)));
9
8
  }
10
9
 
11
10
  export type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>;