@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.
- package/README.md +0 -7
- package/dist/cjs/builder/constants.cjs +0 -6
- package/dist/cjs/builder/constants.cjs.map +1 -1
- package/dist/cjs/builder/constants.d.cts +0 -5
- package/dist/cjs/builder/middleware-unit.cjs +55 -0
- package/dist/cjs/builder/middleware-unit.cjs.map +1 -0
- package/dist/cjs/builder/middleware-unit.d.cts +18 -0
- package/dist/cjs/builder/middleware.cjs +2 -1
- package/dist/cjs/builder/middleware.cjs.map +1 -1
- package/dist/cjs/builder/route.cjs +6 -21
- package/dist/cjs/builder/route.cjs.map +1 -1
- package/dist/cjs/builder/router.cjs +0 -4
- package/dist/cjs/builder/router.cjs.map +1 -1
- package/dist/cjs/builder/router.d.cts +1 -11
- package/dist/cjs/define/middleware.cjs +10 -14
- package/dist/cjs/define/middleware.cjs.map +1 -1
- package/dist/cjs/define/middleware.d.cts +42 -31
- package/dist/cjs/index.cjs +2 -2
- package/dist/cjs/index.d.cts +2 -2
- package/dist/cjs/middleware/body-limit.cjs +3 -3
- package/dist/cjs/middleware/body-limit.cjs.map +1 -1
- package/dist/cjs/middleware/body-limit.d.cts +1 -1
- package/dist/cjs/middleware/compress.cjs +3 -3
- package/dist/cjs/middleware/compress.cjs.map +1 -1
- package/dist/cjs/middleware/compress.d.cts +1 -1
- package/dist/cjs/middleware/cors.cjs +3 -3
- package/dist/cjs/middleware/cors.cjs.map +1 -1
- package/dist/cjs/middleware/cors.d.cts +1 -1
- package/dist/cjs/middleware/csrf.cjs +3 -3
- package/dist/cjs/middleware/csrf.cjs.map +1 -1
- package/dist/cjs/middleware/csrf.d.cts +1 -1
- package/dist/cjs/middleware/etag.cjs +3 -3
- package/dist/cjs/middleware/etag.cjs.map +1 -1
- package/dist/cjs/middleware/etag.d.cts +1 -1
- package/dist/cjs/middleware/hono-mw.cjs +23 -0
- package/dist/cjs/middleware/hono-mw.cjs.map +1 -0
- package/dist/cjs/middleware/hono-mw.d.cts +16 -0
- package/dist/cjs/middleware/jwk.cjs +6 -2
- package/dist/cjs/middleware/jwk.cjs.map +1 -1
- package/dist/cjs/middleware/jwt.cjs +6 -2
- package/dist/cjs/middleware/jwt.cjs.map +1 -1
- package/dist/cjs/middleware/secure-headers.cjs +3 -3
- package/dist/cjs/middleware/secure-headers.cjs.map +1 -1
- package/dist/cjs/middleware/secure-headers.d.cts +1 -1
- package/dist/cjs/middleware/timing.cjs +3 -3
- package/dist/cjs/middleware/timing.cjs.map +1 -1
- package/dist/cjs/middleware/timing.d.cts +1 -1
- package/dist/cjs/types/index.d.cts +4 -41
- package/dist/cjs/types/units.d.cts +9 -34
- package/dist/esm/builder/constants.d.ts +0 -5
- package/dist/esm/builder/constants.js +1 -6
- package/dist/esm/builder/constants.js.map +1 -1
- package/dist/esm/builder/middleware-unit.d.ts +18 -0
- package/dist/esm/builder/middleware-unit.js +55 -0
- package/dist/esm/builder/middleware-unit.js.map +1 -0
- package/dist/esm/builder/middleware.js +2 -1
- package/dist/esm/builder/middleware.js.map +1 -1
- package/dist/esm/builder/route.js +6 -21
- package/dist/esm/builder/route.js.map +1 -1
- package/dist/esm/builder/router.d.ts +1 -11
- package/dist/esm/builder/router.js +0 -4
- package/dist/esm/builder/router.js.map +1 -1
- package/dist/esm/define/middleware.d.ts +42 -31
- package/dist/esm/define/middleware.js +10 -14
- package/dist/esm/define/middleware.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/middleware/body-limit.d.ts +1 -1
- package/dist/esm/middleware/body-limit.js +3 -3
- package/dist/esm/middleware/body-limit.js.map +1 -1
- package/dist/esm/middleware/compress.d.ts +1 -1
- package/dist/esm/middleware/compress.js +3 -3
- package/dist/esm/middleware/compress.js.map +1 -1
- package/dist/esm/middleware/cors.d.ts +1 -1
- package/dist/esm/middleware/cors.js +3 -3
- package/dist/esm/middleware/cors.js.map +1 -1
- package/dist/esm/middleware/csrf.d.ts +1 -1
- package/dist/esm/middleware/csrf.js +3 -3
- package/dist/esm/middleware/csrf.js.map +1 -1
- package/dist/esm/middleware/etag.d.ts +1 -1
- package/dist/esm/middleware/etag.js +3 -3
- package/dist/esm/middleware/etag.js.map +1 -1
- package/dist/esm/middleware/hono-mw.d.ts +16 -0
- package/dist/esm/middleware/hono-mw.js +23 -0
- package/dist/esm/middleware/hono-mw.js.map +1 -0
- package/dist/esm/middleware/jwk.js +6 -2
- package/dist/esm/middleware/jwk.js.map +1 -1
- package/dist/esm/middleware/jwt.js +6 -2
- package/dist/esm/middleware/jwt.js.map +1 -1
- package/dist/esm/middleware/secure-headers.d.ts +1 -1
- package/dist/esm/middleware/secure-headers.js +3 -3
- package/dist/esm/middleware/secure-headers.js.map +1 -1
- package/dist/esm/middleware/timing.d.ts +1 -1
- package/dist/esm/middleware/timing.js +3 -3
- package/dist/esm/middleware/timing.js.map +1 -1
- package/dist/esm/types/index.d.ts +4 -41
- package/dist/esm/types/units.d.ts +9 -34
- package/package.json +3 -3
- package/src/builder/constants.ts +0 -6
- package/src/builder/middleware-unit.ts +55 -0
- package/src/builder/middleware.ts +6 -2
- package/src/builder/route.ts +8 -34
- package/src/builder/router.ts +1 -18
- package/src/define/middleware.ts +133 -228
- package/src/index.ts +3 -1
- package/src/middleware/body-limit.ts +3 -4
- package/src/middleware/compress.ts +3 -4
- package/src/middleware/cors.ts +3 -4
- package/src/middleware/csrf.ts +3 -4
- package/src/middleware/etag.ts +3 -4
- package/src/middleware/hono-mw.ts +22 -0
- package/src/middleware/jwk.ts +9 -7
- package/src/middleware/jwt.ts +8 -6
- package/src/middleware/secure-headers.ts +3 -4
- package/src/middleware/timing.ts +3 -4
- package/src/types/index.ts +15 -172
- package/src/types/units.ts +119 -77
- package/dist/cjs/define/handler.cjs +0 -38
- package/dist/cjs/define/handler.cjs.map +0 -1
- package/dist/cjs/define/handler.d.cts +0 -13
- package/dist/cjs/middleware/wrap-hono.cjs +0 -19
- package/dist/cjs/middleware/wrap-hono.cjs.map +0 -1
- package/dist/cjs/middleware/wrap-hono.d.cts +0 -7
- package/dist/cjs/types/units.cjs +0 -8
- package/dist/cjs/types/units.cjs.map +0 -1
- package/dist/esm/define/handler.d.ts +0 -13
- package/dist/esm/define/handler.js +0 -38
- package/dist/esm/define/handler.js.map +0 -1
- package/dist/esm/middleware/wrap-hono.d.ts +0 -7
- package/dist/esm/middleware/wrap-hono.js +0 -18
- package/dist/esm/middleware/wrap-hono.js.map +0 -1
- package/dist/esm/types/units.js +0 -8
- package/dist/esm/types/units.js.map +0 -1
- package/src/define/handler.ts +0 -62
- package/src/middleware/wrap-hono.ts +0 -25
package/src/define/middleware.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type Awaitable } from "@taserjs/router-core";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import { createMiddlewareUnitBuilder } from "../builder/middleware-unit.js";
|
|
4
4
|
import type {
|
|
5
5
|
AppContext,
|
|
6
6
|
DefineMiddlewareResult,
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
>
|
|
95
|
-
|
|
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
|
-
|
|
112
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
TState,
|
|
82
|
+
unknown,
|
|
83
|
+
unknown,
|
|
84
|
+
unknown,
|
|
85
|
+
IsUnknown<TState> extends true ? ExtractState<R> : TState,
|
|
147
86
|
R,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
TState,
|
|
116
|
+
unknown,
|
|
117
|
+
unknown,
|
|
118
|
+
unknown,
|
|
119
|
+
IsUnknown<TState> extends true ? ExtractState<R> : TState,
|
|
189
120
|
R,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
121
|
+
unknown,
|
|
122
|
+
unknown,
|
|
123
|
+
unknown,
|
|
124
|
+
{},
|
|
194
125
|
Layouts,
|
|
195
126
|
TRequires
|
|
196
127
|
>;
|
|
197
128
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
TState
|
|
212
|
-
|
|
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
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
TState,
|
|
145
|
+
unknown,
|
|
146
|
+
unknown,
|
|
147
|
+
unknown,
|
|
148
|
+
IsUnknown<TState> extends true ? ExtractState<R> : TState,
|
|
228
149
|
R,
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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
|
|
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
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
250
|
-
return
|
|
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
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
});
|
|
179
|
+
return {
|
|
180
|
+
handler: first,
|
|
181
|
+
__middlewareAcc: undefined as unknown,
|
|
182
|
+
};
|
|
259
183
|
}
|
|
260
184
|
|
|
261
|
-
|
|
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 {
|
|
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
|
|
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 {
|
|
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
|
|
7
|
+
return defineMiddleware(honoMw(honoCompress(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type CompressOptions = NonNullable<Parameters<typeof honoCompress>[0]>;
|
package/src/middleware/cors.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { cors as honoCors } from "hono/cors";
|
|
2
2
|
|
|
3
|
-
import {
|
|
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
|
|
7
|
+
return defineMiddleware(honoMw(honoCors(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>;
|
package/src/middleware/csrf.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { csrf as honoCsrf } from "hono/csrf";
|
|
2
2
|
|
|
3
|
-
import {
|
|
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
|
|
7
|
+
return defineMiddleware(honoMw(honoCsrf(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>;
|
package/src/middleware/etag.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { etag as honoEtag } from "hono/etag";
|
|
2
2
|
|
|
3
|
-
import {
|
|
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
|
|
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
|
+
}
|
package/src/middleware/jwk.ts
CHANGED
|
@@ -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
|
|
45
|
-
|
|
46
|
-
return defineMiddleware<JwtPayloadState<TPayload>>(
|
|
47
|
-
|
|
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
|
}
|
package/src/middleware/jwt.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
26
|
-
return defineMiddleware<JwtPayloadState<TPayload>>(
|
|
27
|
-
|
|
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 {
|
|
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
|
|
7
|
+
return defineMiddleware(honoMw(honoSecureHeaders(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>;
|
package/src/middleware/timing.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { timing as honoTiming } from "hono/timing";
|
|
2
2
|
|
|
3
|
-
import {
|
|
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
|
|
7
|
+
return defineMiddleware(honoMw(honoTiming(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>;
|