@taserjs/router 0.1.3 → 0.1.5

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 (153) 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/factories.cjs.map +1 -1
  6. package/dist/cjs/builder/factories.d.cts +9 -9
  7. package/dist/cjs/builder/middleware-unit.cjs +64 -0
  8. package/dist/cjs/builder/middleware-unit.cjs.map +1 -0
  9. package/dist/cjs/builder/middleware-unit.d.cts +1 -0
  10. package/dist/cjs/builder/middleware.cjs +3 -1
  11. package/dist/cjs/builder/middleware.cjs.map +1 -1
  12. package/dist/cjs/builder/route.cjs +7 -21
  13. package/dist/cjs/builder/route.cjs.map +1 -1
  14. package/dist/cjs/builder/router.cjs +1 -20
  15. package/dist/cjs/builder/router.cjs.map +1 -1
  16. package/dist/cjs/builder/router.d.cts +6 -27
  17. package/dist/cjs/builder/standalone.cjs +43 -0
  18. package/dist/cjs/builder/standalone.cjs.map +1 -0
  19. package/dist/cjs/builder/standalone.d.cts +28 -0
  20. package/dist/cjs/define/middleware.cjs +11 -16
  21. package/dist/cjs/define/middleware.cjs.map +1 -1
  22. package/dist/cjs/define/middleware.d.cts +44 -34
  23. package/dist/cjs/index.cjs +15 -4
  24. package/dist/cjs/index.d.cts +6 -4
  25. package/dist/cjs/middleware/body-limit.cjs +3 -3
  26. package/dist/cjs/middleware/body-limit.cjs.map +1 -1
  27. package/dist/cjs/middleware/body-limit.d.cts +1 -1
  28. package/dist/cjs/middleware/compress.cjs +3 -3
  29. package/dist/cjs/middleware/compress.cjs.map +1 -1
  30. package/dist/cjs/middleware/compress.d.cts +1 -1
  31. package/dist/cjs/middleware/cors.cjs +3 -3
  32. package/dist/cjs/middleware/cors.cjs.map +1 -1
  33. package/dist/cjs/middleware/cors.d.cts +1 -1
  34. package/dist/cjs/middleware/csrf.cjs +3 -3
  35. package/dist/cjs/middleware/csrf.cjs.map +1 -1
  36. package/dist/cjs/middleware/csrf.d.cts +1 -1
  37. package/dist/cjs/middleware/etag.cjs +3 -3
  38. package/dist/cjs/middleware/etag.cjs.map +1 -1
  39. package/dist/cjs/middleware/etag.d.cts +1 -1
  40. package/dist/cjs/middleware/hono-mw.cjs +23 -0
  41. package/dist/cjs/middleware/hono-mw.cjs.map +1 -0
  42. package/dist/cjs/middleware/hono-mw.d.cts +16 -0
  43. package/dist/cjs/middleware/jwk.cjs +6 -2
  44. package/dist/cjs/middleware/jwk.cjs.map +1 -1
  45. package/dist/cjs/middleware/jwt.cjs +6 -2
  46. package/dist/cjs/middleware/jwt.cjs.map +1 -1
  47. package/dist/cjs/middleware/secure-headers.cjs +3 -3
  48. package/dist/cjs/middleware/secure-headers.cjs.map +1 -1
  49. package/dist/cjs/middleware/secure-headers.d.cts +1 -1
  50. package/dist/cjs/middleware/timing.cjs +3 -3
  51. package/dist/cjs/middleware/timing.cjs.map +1 -1
  52. package/dist/cjs/middleware/timing.d.cts +1 -1
  53. package/dist/cjs/types/index.d.cts +20 -52
  54. package/dist/cjs/types/type-utils.d.cts +2 -2
  55. package/dist/cjs/types/units.d.cts +18 -45
  56. package/dist/esm/builder/constants.d.ts +0 -5
  57. package/dist/esm/builder/constants.js +1 -6
  58. package/dist/esm/builder/constants.js.map +1 -1
  59. package/dist/esm/builder/factories.d.ts +9 -9
  60. package/dist/esm/builder/factories.js.map +1 -1
  61. package/dist/esm/builder/middleware-unit.d.ts +1 -0
  62. package/dist/esm/builder/middleware-unit.js +64 -0
  63. package/dist/esm/builder/middleware-unit.js.map +1 -0
  64. package/dist/esm/builder/middleware.js +3 -1
  65. package/dist/esm/builder/middleware.js.map +1 -1
  66. package/dist/esm/builder/route.js +7 -21
  67. package/dist/esm/builder/route.js.map +1 -1
  68. package/dist/esm/builder/router.d.ts +6 -27
  69. package/dist/esm/builder/router.js +1 -20
  70. package/dist/esm/builder/router.js.map +1 -1
  71. package/dist/esm/builder/standalone.d.ts +28 -0
  72. package/dist/esm/builder/standalone.js +32 -0
  73. package/dist/esm/builder/standalone.js.map +1 -0
  74. package/dist/esm/define/middleware.d.ts +44 -34
  75. package/dist/esm/define/middleware.js +11 -16
  76. package/dist/esm/define/middleware.js.map +1 -1
  77. package/dist/esm/index.d.ts +6 -4
  78. package/dist/esm/index.js +3 -3
  79. package/dist/esm/middleware/body-limit.d.ts +1 -1
  80. package/dist/esm/middleware/body-limit.js +3 -3
  81. package/dist/esm/middleware/body-limit.js.map +1 -1
  82. package/dist/esm/middleware/compress.d.ts +1 -1
  83. package/dist/esm/middleware/compress.js +3 -3
  84. package/dist/esm/middleware/compress.js.map +1 -1
  85. package/dist/esm/middleware/cors.d.ts +1 -1
  86. package/dist/esm/middleware/cors.js +3 -3
  87. package/dist/esm/middleware/cors.js.map +1 -1
  88. package/dist/esm/middleware/csrf.d.ts +1 -1
  89. package/dist/esm/middleware/csrf.js +3 -3
  90. package/dist/esm/middleware/csrf.js.map +1 -1
  91. package/dist/esm/middleware/etag.d.ts +1 -1
  92. package/dist/esm/middleware/etag.js +3 -3
  93. package/dist/esm/middleware/etag.js.map +1 -1
  94. package/dist/esm/middleware/hono-mw.d.ts +16 -0
  95. package/dist/esm/middleware/hono-mw.js +23 -0
  96. package/dist/esm/middleware/hono-mw.js.map +1 -0
  97. package/dist/esm/middleware/jwk.js +7 -3
  98. package/dist/esm/middleware/jwk.js.map +1 -1
  99. package/dist/esm/middleware/jwt.js +7 -3
  100. package/dist/esm/middleware/jwt.js.map +1 -1
  101. package/dist/esm/middleware/secure-headers.d.ts +1 -1
  102. package/dist/esm/middleware/secure-headers.js +3 -3
  103. package/dist/esm/middleware/secure-headers.js.map +1 -1
  104. package/dist/esm/middleware/timing.d.ts +1 -1
  105. package/dist/esm/middleware/timing.js +3 -3
  106. package/dist/esm/middleware/timing.js.map +1 -1
  107. package/dist/esm/types/index.d.ts +20 -52
  108. package/dist/esm/types/type-utils.d.ts +2 -2
  109. package/dist/esm/types/units.d.ts +18 -45
  110. package/package.json +3 -3
  111. package/src/builder/constants.ts +0 -6
  112. package/src/builder/factories.ts +2 -2
  113. package/src/builder/middleware-unit.ts +66 -0
  114. package/src/builder/middleware.ts +8 -2
  115. package/src/builder/route.ts +10 -34
  116. package/src/builder/router.ts +7 -77
  117. package/src/builder/standalone.ts +70 -0
  118. package/src/define/middleware.ts +155 -231
  119. package/src/index.ts +29 -3
  120. package/src/middleware/body-limit.ts +3 -4
  121. package/src/middleware/compress.ts +3 -4
  122. package/src/middleware/cors.ts +3 -4
  123. package/src/middleware/csrf.ts +3 -4
  124. package/src/middleware/etag.ts +3 -4
  125. package/src/middleware/hono-mw.ts +22 -0
  126. package/src/middleware/jwk.ts +10 -8
  127. package/src/middleware/jwt.ts +9 -7
  128. package/src/middleware/secure-headers.ts +3 -4
  129. package/src/middleware/timing.ts +3 -4
  130. package/src/types/index.ts +54 -196
  131. package/src/types/type-utils.ts +8 -4
  132. package/src/types/units.ts +153 -87
  133. package/dist/cjs/define/handler.cjs +0 -38
  134. package/dist/cjs/define/handler.cjs.map +0 -1
  135. package/dist/cjs/define/handler.d.cts +0 -13
  136. package/dist/cjs/middleware/wrap-hono.cjs +0 -19
  137. package/dist/cjs/middleware/wrap-hono.cjs.map +0 -1
  138. package/dist/cjs/middleware/wrap-hono.d.cts +0 -7
  139. package/dist/cjs/register.d.cts +0 -2
  140. package/dist/cjs/types/units.cjs +0 -8
  141. package/dist/cjs/types/units.cjs.map +0 -1
  142. package/dist/esm/define/handler.d.ts +0 -13
  143. package/dist/esm/define/handler.js +0 -38
  144. package/dist/esm/define/handler.js.map +0 -1
  145. package/dist/esm/middleware/wrap-hono.d.ts +0 -7
  146. package/dist/esm/middleware/wrap-hono.js +0 -18
  147. package/dist/esm/middleware/wrap-hono.js.map +0 -1
  148. package/dist/esm/register.d.ts +0 -2
  149. package/dist/esm/types/units.js +0 -8
  150. package/dist/esm/types/units.js.map +0 -1
  151. package/src/define/handler.ts +0 -62
  152. package/src/middleware/wrap-hono.ts +0 -25
  153. package/src/register.ts +0 -1
@@ -1,18 +1,10 @@
1
1
  import type {
2
- Awaitable,
3
2
  MiddlewareDefinition as CoreMiddlewareDefinition,
4
3
  TaserCookieJar,
5
4
  TaserHeaders,
6
5
  } from "@taserjs/router-core";
7
6
 
8
- import type {
9
- MergeMiddlewareField,
10
- MergePart,
11
- RequestShape,
12
- Simplify,
13
- UnitRuntimeContext,
14
- UnwrapPart,
15
- } from "./type-utils.js";
7
+ import type { RequestShape, Simplify, UnitRuntimeContext, UnwrapPart } from "./type-utils.js";
16
8
  import type { ReturnsMap } from "./returns.js";
17
9
  import type { Schema } from "./schema.js";
18
10
 
@@ -29,7 +21,7 @@ export type {
29
21
  } from "./returns.js";
30
22
 
31
23
  /** Default empty app context for standalone units without a bound router instance. */
32
- export type AppContext = Record<never, never>;
24
+ export type EmptyAppContext = Record<never, never>;
33
25
 
34
26
  export type ValidatorParts = {
35
27
  query?: unknown;
@@ -46,13 +38,17 @@ export type NextResult<TState = unknown> = Response & {
46
38
  readonly [StateBrand]?: TState;
47
39
  };
48
40
 
49
- export type ExtractState<T> = [Extract<Awaited<T>, { [StateBrand]?: unknown }>] extends [never]
50
- ? {}
51
- : Extract<Awaited<T>, { [StateBrand]?: unknown }> extends { [StateBrand]?: infer S }
52
- ? [S] extends [never]
41
+ export type ExtractStateFromUnion<T> = T extends { readonly [StateBrand]?: infer S }
42
+ ? [S] extends [never]
43
+ ? never
44
+ : [unknown] extends [S]
53
45
  ? {}
54
46
  : S
55
- : {};
47
+ : never;
48
+
49
+ export type ExtractState<T> = [ExtractStateFromUnion<Awaited<T>>] extends [never]
50
+ ? {}
51
+ : ExtractStateFromUnion<Awaited<T>>;
56
52
 
57
53
  export type IsUnknown<T> = [unknown] extends [T] ? true : false;
58
54
 
@@ -61,8 +57,6 @@ export type NextFn<TExpectedState = unknown> =
61
57
  ? <S extends Record<string, unknown> = {}>(state?: S) => Promise<NextResult<S>>
62
58
  : (state: TExpectedState) => Promise<NextResult<TExpectedState>>;
63
59
 
64
- export type MiddlewareNext = NextFn;
65
-
66
60
  export type MiddlewareDefinition = CoreMiddlewareDefinition<ReturnsMap>;
67
61
 
68
62
  export type MiddlewareReturnFromParts<
@@ -117,7 +111,7 @@ export type StandaloneMiddlewareContext<
117
111
  TQuery = unknown,
118
112
  TParams = unknown,
119
113
  TBody = unknown,
120
- TAppContext extends Record<string, unknown> = AppContext,
114
+ TAppContext extends Record<string, unknown> = EmptyAppContext,
121
115
  TState = {},
122
116
  > = Simplify<
123
117
  TAppContext &
@@ -131,36 +125,7 @@ export type StandaloneMiddlewareContext<
131
125
  }
132
126
  >;
133
127
 
134
- export type HandlerContext<
135
- Acc extends readonly unknown[],
136
- Validators extends ValidatorParts,
137
- TAppContext extends Record<string, unknown> = AppContext,
138
- > = Simplify<
139
- TAppContext &
140
- UnitRuntimeContext & {
141
- query: Simplify<
142
- MergePart<
143
- Validators extends { query?: infer Q } ? Q : unknown,
144
- MergeMiddlewareField<Acc, "query">
145
- >
146
- >;
147
- params: Simplify<
148
- MergePart<
149
- Validators extends { params?: infer P } ? P : unknown,
150
- MergeMiddlewareField<Acc, "params">
151
- >
152
- >;
153
- body: Simplify<
154
- MergePart<
155
- Validators extends { body?: infer B } ? B : unknown,
156
- MergeMiddlewareField<Acc, "body">
157
- >
158
- >;
159
- state: Simplify<MergeMiddlewareField<Acc, "state">>;
160
- headers: TaserHeaders;
161
- cookies: TaserCookieJar;
162
- }
163
- >;
128
+ export declare const MiddlewareUnitBrand: unique symbol;
164
129
 
165
130
  export type MiddlewareUnit<
166
131
  TAcc = unknown,
@@ -168,56 +133,157 @@ export type MiddlewareUnit<
168
133
  TRequiredLayouts = unknown,
169
134
  TRequiredState = unknown,
170
135
  > = MiddlewareDefinition & {
136
+ readonly [MiddlewareUnitBrand]: true;
171
137
  readonly __middlewareAcc: TAcc;
172
138
  readonly __returns?: TReturns;
173
139
  readonly __requiredLayouts?: TRequiredLayouts;
174
140
  readonly __requiredState?: TRequiredState;
175
141
  };
176
142
 
177
- export type HandlerUnit<
178
- _Acc extends readonly unknown[],
179
- _Validators extends ValidatorParts,
180
- TReturns extends ReturnsMap = {},
181
- TOutput = Response,
182
- > = {
183
- readonly __returns?: TReturns;
184
- readonly $Infer: {
185
- Output: TOutput;
186
- };
187
- middlewares: readonly MiddlewareDefinition[];
188
- handler: (ctx: unknown) => Awaitable<Response>;
189
- returns?: ReturnsMap;
190
- query?: Schema<unknown>;
191
- params?: Schema<unknown>;
192
- body?: Schema<unknown>;
193
- };
194
-
195
- export type InlineMiddlewareOptions<
196
- Ctx = unknown,
143
+ export type MiddlewareUnitBuilder<
197
144
  TQuery = unknown,
198
145
  TParams = unknown,
199
146
  TBody = unknown,
200
147
  TReturns extends ReturnsMap = {},
148
+ TRequiredLayouts = unknown,
149
+ TRequiredState = {},
150
+ TAppContext extends Record<string, unknown> = EmptyAppContext,
151
+ TInheritedState = {},
201
152
  TQueryIn = unknown,
202
153
  TParamsIn = unknown,
203
154
  TBodyIn = unknown,
204
- R = unknown,
205
- > = {
206
- query?: Schema<TQuery, TQueryIn>;
207
- params?: Schema<TParams, TParamsIn>;
208
- body?: Schema<TBody, TBodyIn>;
209
- returns?: TReturns;
210
- handler: (ctx: Ctx, next: NextFn) => Awaitable<R>;
155
+ TExpectedState = unknown,
156
+ > = MiddlewareUnit<
157
+ MiddlewareReturnFromParts<
158
+ TQuery,
159
+ TParams,
160
+ TBody,
161
+ IsUnknown<TExpectedState> extends true ? {} : TExpectedState,
162
+ TQueryIn,
163
+ TParamsIn,
164
+ TBodyIn
165
+ >,
166
+ TReturns,
167
+ TRequiredLayouts,
168
+ TRequiredState
169
+ > & {
170
+ query<Q, QIn = unknown>(
171
+ schema: Schema<Q, QIn>,
172
+ ): MiddlewareUnitBuilder<
173
+ Q,
174
+ TParams,
175
+ TBody,
176
+ TReturns,
177
+ TRequiredLayouts,
178
+ TRequiredState,
179
+ TAppContext,
180
+ TInheritedState,
181
+ QIn,
182
+ TParamsIn,
183
+ TBodyIn,
184
+ TExpectedState
185
+ >;
186
+ params<P, PIn = unknown>(
187
+ schema: Schema<P, PIn>,
188
+ ): MiddlewareUnitBuilder<
189
+ TQuery,
190
+ P,
191
+ TBody,
192
+ TReturns,
193
+ TRequiredLayouts,
194
+ TRequiredState,
195
+ TAppContext,
196
+ TInheritedState,
197
+ TQueryIn,
198
+ PIn,
199
+ TBodyIn,
200
+ TExpectedState
201
+ >;
202
+ body<B, BIn = unknown>(
203
+ schema: Schema<B, BIn>,
204
+ ): MiddlewareUnitBuilder<
205
+ TQuery,
206
+ TParams,
207
+ B,
208
+ TReturns,
209
+ TRequiredLayouts,
210
+ TRequiredState,
211
+ TAppContext,
212
+ TInheritedState,
213
+ TQueryIn,
214
+ TParamsIn,
215
+ BIn,
216
+ TExpectedState
217
+ >;
218
+ body<Mode extends "json" | "form" | "urlencoded", B, BIn = unknown>(
219
+ mode: Mode,
220
+ schema: Schema<B, BIn>,
221
+ ): MiddlewareUnitBuilder<
222
+ TQuery,
223
+ TParams,
224
+ B,
225
+ TReturns,
226
+ TRequiredLayouts,
227
+ TRequiredState,
228
+ TAppContext,
229
+ TInheritedState,
230
+ TQueryIn,
231
+ TParamsIn,
232
+ BIn,
233
+ TExpectedState
234
+ >;
235
+ returns<const M extends ReturnsMap>(
236
+ map: M,
237
+ ): MiddlewareUnitBuilder<
238
+ TQuery,
239
+ TParams,
240
+ TBody,
241
+ Omit<TReturns, keyof M> & M,
242
+ TRequiredLayouts,
243
+ TRequiredState,
244
+ TAppContext,
245
+ TInheritedState,
246
+ TQueryIn,
247
+ TParamsIn,
248
+ TBodyIn,
249
+ TExpectedState
250
+ >;
251
+ requires<Requires extends Record<string, unknown>>(): MiddlewareUnitBuilder<
252
+ TQuery,
253
+ TParams,
254
+ TBody,
255
+ TReturns,
256
+ TRequiredLayouts,
257
+ TRequiredState & Requires,
258
+ TAppContext,
259
+ TInheritedState,
260
+ TQueryIn,
261
+ TParamsIn,
262
+ TBodyIn,
263
+ TExpectedState
264
+ >;
265
+ handler<R>(
266
+ fn: (
267
+ ctx: StandaloneMiddlewareContext<
268
+ TQuery,
269
+ TParams,
270
+ TBody,
271
+ TAppContext,
272
+ TInheritedState & TRequiredState
273
+ >,
274
+ next: NextFn<TExpectedState>,
275
+ ) => R,
276
+ ): DefineMiddlewareResult<
277
+ TQuery,
278
+ TParams,
279
+ TBody,
280
+ IsUnknown<TExpectedState> extends true ? ExtractState<R> : TExpectedState,
281
+ R,
282
+ TQueryIn,
283
+ TParamsIn,
284
+ TBodyIn,
285
+ TReturns,
286
+ TRequiredLayouts,
287
+ TRequiredState
288
+ >;
211
289
  };
212
-
213
- export function isHandlerUnit(
214
- value: unknown,
215
- ): value is HandlerUnit<readonly unknown[], ValidatorParts> {
216
- return (
217
- typeof value === "object" &&
218
- value !== null &&
219
- "handler" in value &&
220
- "middlewares" in value &&
221
- Array.isArray((value as HandlerUnit<readonly unknown[], ValidatorParts>).middlewares)
222
- );
223
- }
@@ -1,38 +0,0 @@
1
- const require_validators = require("./validators.cjs");
2
- let _taserjs_router_utils = require("@taserjs/router-utils");
3
- //#region src/define/handler.ts
4
- function createHandlerBuilder(validators, middlewares, returnsMap) {
5
- const builder = {
6
- returns(map) {
7
- return createHandlerBuilder(validators, middlewares, {
8
- ...returnsMap,
9
- ...map
10
- });
11
- },
12
- use(unitOrOptions) {
13
- middlewares.push(unitOrOptions);
14
- return builder;
15
- },
16
- handler(fn) {
17
- const mergedReturns = {
18
- ...(0, _taserjs_router_utils.collectReturnsFromDefinitions)(middlewares),
19
- ...returnsMap
20
- };
21
- return {
22
- $Infer: { Output: void 0 },
23
- middlewares: [...middlewares],
24
- handler: fn,
25
- ...require_validators.pickDefinedSchemas(validators),
26
- ...Object.keys(mergedReturns).length > 0 ? { returns: mergedReturns } : {}
27
- };
28
- }
29
- };
30
- return builder;
31
- }
32
- function defineHandler(options) {
33
- return createHandlerBuilder(options ?? {}, [], {});
34
- }
35
- //#endregion
36
- exports.defineHandler = defineHandler;
37
-
38
- //# sourceMappingURL=handler.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler.cjs","names":[],"sources":["../../../src/define/handler.ts"],"sourcesContent":["import type { HandlerBuilder } from \"../types/index.js\";\nimport type {\n AppContext,\n HandlerUnit,\n MiddlewareDefinition,\n ReturnsMap,\n ValidatorParts,\n} from \"../types/units.js\";\nimport type { Schema } from \"../types/schema.js\";\nimport { pickDefinedSchemas, type SchemaValidators } from \"./validators.js\";\nimport { collectReturnsFromDefinitions } from \"@taserjs/router-utils\";\n\nfunction createHandlerBuilder<TAppContext extends Record<string, unknown> = AppContext>(\n validators: SchemaValidators,\n middlewares: MiddlewareDefinition[],\n returnsMap: ReturnsMap,\n): HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext> {\n const builder = {\n returns(map: ReturnsMap) {\n return createHandlerBuilder<TAppContext>(validators, middlewares, { ...returnsMap, ...map });\n },\n use(unitOrOptions: MiddlewareDefinition) {\n middlewares.push(unitOrOptions);\n return builder;\n },\n handler(fn: (ctx: unknown) => unknown) {\n const mwReturns = collectReturnsFromDefinitions(middlewares);\n const mergedReturns = { ...mwReturns, ...returnsMap };\n const unit = {\n $Infer: { Output: undefined as unknown as Response },\n middlewares: [...middlewares],\n handler: fn as HandlerUnit<readonly [], ValidatorParts>[\"handler\"],\n ...pickDefinedSchemas(validators),\n ...(Object.keys(mergedReturns).length > 0 ? { returns: mergedReturns } : {}),\n } as HandlerUnit<readonly [], ValidatorParts>;\n return unit;\n },\n };\n\n return builder as unknown as HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext>;\n}\n\nexport function defineHandler<\n TAppContext extends Record<string, unknown> = AppContext,\n>(): HandlerBuilder<readonly [], {}, {}, TAppContext>;\n\nexport function defineHandler<\n TAppContext extends Record<string, unknown> = AppContext,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n>(options: {\n query?: Schema<TQuery>;\n params?: Schema<TParams>;\n body?: Schema<TBody>;\n}): HandlerBuilder<readonly [], { query: TQuery; params: TParams; body: TBody }, {}, TAppContext>;\n\nexport function defineHandler<TAppContext extends Record<string, unknown> = AppContext>(\n options?: SchemaValidators,\n): HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext> {\n return createHandlerBuilder<TAppContext>(options ?? {}, [], {});\n}\n"],"mappings":";;;AAYA,SAAS,qBACP,YACA,aACA,YAC8D;CAC9D,MAAM,UAAU;EACd,QAAQ,KAAiB;GACvB,OAAO,qBAAkC,YAAY,aAAa;IAAE,GAAG;IAAY,GAAG;GAAI,CAAC;EAC7F;EACA,IAAI,eAAqC;GACvC,YAAY,KAAK,aAAa;GAC9B,OAAO;EACT;EACA,QAAQ,IAA+B;GAErC,MAAM,gBAAgB;IAAE,IAAA,GAAA,sBAAA,8BAAA,CADwB,WACrB;IAAW,GAAG;GAAW;GAQpD,OAAO;IANL,QAAQ,EAAE,QAAQ,KAAA,EAAiC;IACnD,aAAa,CAAC,GAAG,WAAW;IAC5B,SAAS;IACT,GAAG,mBAAA,mBAAmB,UAAU;IAChC,GAAI,OAAO,KAAK,aAAa,CAAC,CAAC,SAAS,IAAI,EAAE,SAAS,cAAc,IAAI,CAAC;GAErE;EACT;CACF;CAEA,OAAO;AACT;AAiBA,SAAgB,cACd,SAC8D;CAC9D,OAAO,qBAAkC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChE"}
@@ -1,13 +0,0 @@
1
- import { HandlerBuilder } from '../types/index.js';
2
- import { AppContext } from '../types/units.js';
3
- import { Schema } from '../types/schema.js';
4
- export declare function defineHandler<TAppContext extends Record<string, unknown> = AppContext>(): HandlerBuilder<readonly [], {}, {}, TAppContext>;
5
- export declare function defineHandler<TAppContext extends Record<string, unknown> = AppContext, TQuery = unknown, TParams = unknown, TBody = unknown>(options: {
6
- query?: Schema<TQuery>;
7
- params?: Schema<TParams>;
8
- body?: Schema<TBody>;
9
- }): HandlerBuilder<readonly [], {
10
- query: TQuery;
11
- params: TParams;
12
- body: TBody;
13
- }, {}, TAppContext>;
@@ -1,19 +0,0 @@
1
- const require_middleware = require("../define/middleware.cjs");
2
- let _taserjs_router_core = require("@taserjs/router-core");
3
- //#region src/middleware/wrap-hono.ts
4
- function wrapHonoMiddleware(honoFactory) {
5
- return (...args) => require_middleware.defineMiddleware(honoFactory(...args));
6
- }
7
- /** Extracts the jwtPayload from Hono's variable bag and forwards it into Taser's state via next(). */
8
- function extractJwtPayload(honoMw) {
9
- const taserHandler = (0, _taserjs_router_core.createTaserCompatHandler)(honoMw);
10
- return (ctx, next) => taserHandler(ctx, async () => {
11
- const payload = ctx.var.jwtPayload;
12
- return next({ jwtPayload: payload });
13
- });
14
- }
15
- //#endregion
16
- exports.extractJwtPayload = extractJwtPayload;
17
- exports.wrapHonoMiddleware = wrapHonoMiddleware;
18
-
19
- //# sourceMappingURL=wrap-hono.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrap-hono.cjs","names":[],"sources":["../../../src/middleware/wrap-hono.ts"],"sourcesContent":["import { createTaserCompatHandler } from \"@taserjs/router-core\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport type { MiddlewareReturnFromParts, MiddlewareUnit } from \"../types/units.js\";\n\nexport function wrapHonoMiddleware<F extends (...args: never[]) => MiddlewareHandler>(\n honoFactory: F,\n): (\n ...args: Parameters<F>\n) => MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>> {\n return (...args) => defineMiddleware(honoFactory(...args));\n}\n\n/** Extracts the jwtPayload from Hono's variable bag and forwards it into Taser's state via next(). */\nexport function extractJwtPayload<TPayload>(\n honoMw: MiddlewareHandler,\n): (ctx: unknown, next: (state: { jwtPayload: TPayload }) => unknown) => unknown {\n const taserHandler = createTaserCompatHandler(honoMw);\n return (ctx, next) =>\n taserHandler(ctx, async () => {\n const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;\n return next({ jwtPayload: payload as TPayload });\n });\n}\n"],"mappings":";;;AAMA,SAAgB,mBACd,aAG4E;CAC5E,QAAQ,GAAG,SAAS,mBAAA,iBAAiB,YAAY,GAAG,IAAI,CAAC;AAC3D;;AAGA,SAAgB,kBACd,QAC+E;CAC/E,MAAM,gBAAA,GAAA,qBAAA,yBAAA,CAAwC,MAAM;CACpD,QAAQ,KAAK,SACX,aAAa,KAAK,YAAY;EAC5B,MAAM,UAAW,IAAqD,IAAI;EAC1E,OAAO,KAAK,EAAE,YAAY,QAAoB,CAAC;CACjD,CAAC;AACL"}
@@ -1,7 +0,0 @@
1
- import { MiddlewareHandler } from 'hono';
2
- import { MiddlewareReturnFromParts, MiddlewareUnit } from '../types/units.js';
3
- export declare function wrapHonoMiddleware<F extends (...args: never[]) => MiddlewareHandler>(honoFactory: F): (...args: Parameters<F>) => MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>>;
4
- /** Extracts the jwtPayload from Hono's variable bag and forwards it into Taser's state via next(). */
5
- export declare function extractJwtPayload<TPayload>(honoMw: MiddlewareHandler): (ctx: unknown, next: (state: {
6
- jwtPayload: TPayload;
7
- }) => unknown) => unknown;
@@ -1,2 +0,0 @@
1
- export interface RouterRegister {
2
- }
@@ -1,8 +0,0 @@
1
- //#region src/types/units.ts
2
- function isHandlerUnit(value) {
3
- return typeof value === "object" && value !== null && "handler" in value && "middlewares" in value && Array.isArray(value.middlewares);
4
- }
5
- //#endregion
6
- exports.isHandlerUnit = isHandlerUnit;
7
-
8
- //# sourceMappingURL=units.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"units.cjs","names":[],"sources":["../../../src/types/units.ts"],"sourcesContent":["import type {\n Awaitable,\n MiddlewareDefinition as CoreMiddlewareDefinition,\n TaserCookieJar,\n TaserHeaders,\n} from \"@taserjs/router-core\";\n\nimport type {\n MergeMiddlewareField,\n MergePart,\n RequestShape,\n Simplify,\n UnitRuntimeContext,\n UnwrapPart,\n} from \"./type-utils.js\";\nimport type { ReturnsMap } from \"./returns.js\";\nimport type { Schema } from \"./schema.js\";\n\nexport type { HttpMethod, Method } from \"./type-utils.js\";\nexport type {\n EmptyReturns,\n MergeReturns,\n ReturnsMap,\n HandlerReply,\n HasReturns,\n StatusCode,\n ValidHandlerReply,\n EnforceHandlerReply,\n} from \"./returns.js\";\n\n/** Default empty app context for standalone units without a bound router instance. */\nexport type AppContext = Record<never, never>;\n\nexport type ValidatorParts = {\n query?: unknown;\n params?: unknown;\n body?: unknown;\n queryIn?: unknown;\n paramsIn?: unknown;\n bodyIn?: unknown;\n};\n\nexport declare const StateBrand: unique symbol;\n\nexport type NextResult<TState = unknown> = Response & {\n readonly [StateBrand]?: TState;\n};\n\nexport type ExtractState<T> = [Extract<Awaited<T>, { [StateBrand]?: unknown }>] extends [never]\n ? {}\n : Extract<Awaited<T>, { [StateBrand]?: unknown }> extends { [StateBrand]?: infer S }\n ? [S] extends [never]\n ? {}\n : S\n : {};\n\nexport type IsUnknown<T> = [unknown] extends [T] ? true : false;\n\nexport type NextFn<TExpectedState = unknown> =\n IsUnknown<TExpectedState> extends true\n ? <S extends Record<string, unknown> = {}>(state?: S) => Promise<NextResult<S>>\n : (state: TExpectedState) => Promise<NextResult<TExpectedState>>;\n\nexport type MiddlewareNext = NextFn;\n\nexport type MiddlewareDefinition = CoreMiddlewareDefinition<ReturnsMap>;\n\nexport type MiddlewareReturnFromParts<\n TQuery,\n TParams,\n TBody,\n TState,\n TQueryIn = TQuery,\n TParamsIn = TParams,\n TBodyIn = TBody,\n> = {\n query: Simplify<UnwrapPart<TQuery>>;\n params: Simplify<UnwrapPart<TParams>>;\n body: Simplify<UnwrapPart<TBody>>;\n state: Simplify<UnwrapPart<TState>>;\n /** Pre-parse shapes merged into route `$Infer.Input`. */\n input: {\n query: RequestShape<TQueryIn, TQuery>;\n params: RequestShape<TParamsIn, TParams>;\n body: RequestShape<TBodyIn, TBody>;\n };\n};\n\nexport type DefineMiddlewareResult<\n TQuery,\n TParams,\n TBody,\n TState,\n R,\n TQueryIn = TQuery,\n TParamsIn = TParams,\n TBodyIn = TBody,\n TReturns extends ReturnsMap = {},\n TLayout = null,\n TRequires = {},\n> = MiddlewareUnit<\n MiddlewareReturnFromParts<\n TQuery,\n TParams,\n TBody,\n IsUnknown<TState> extends true ? ExtractState<R> : TState,\n TQueryIn,\n TParamsIn,\n TBodyIn\n >,\n TReturns,\n TLayout,\n TRequires\n>;\n\nexport type StandaloneMiddlewareContext<\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TAppContext extends Record<string, unknown> = AppContext,\n TState = {},\n> = Simplify<\n TAppContext &\n UnitRuntimeContext & {\n query: Simplify<UnwrapPart<TQuery>>;\n params: Simplify<UnwrapPart<TParams>>;\n body: Simplify<UnwrapPart<TBody>>;\n state: Simplify<UnwrapPart<TState>>;\n headers: TaserHeaders;\n cookies: TaserCookieJar;\n }\n>;\n\nexport type HandlerContext<\n Acc extends readonly unknown[],\n Validators extends ValidatorParts,\n TAppContext extends Record<string, unknown> = AppContext,\n> = Simplify<\n TAppContext &\n UnitRuntimeContext & {\n query: Simplify<\n MergePart<\n Validators extends { query?: infer Q } ? Q : unknown,\n MergeMiddlewareField<Acc, \"query\">\n >\n >;\n params: Simplify<\n MergePart<\n Validators extends { params?: infer P } ? P : unknown,\n MergeMiddlewareField<Acc, \"params\">\n >\n >;\n body: Simplify<\n MergePart<\n Validators extends { body?: infer B } ? B : unknown,\n MergeMiddlewareField<Acc, \"body\">\n >\n >;\n state: Simplify<MergeMiddlewareField<Acc, \"state\">>;\n headers: TaserHeaders;\n cookies: TaserCookieJar;\n }\n>;\n\nexport type MiddlewareUnit<\n TAcc = unknown,\n TReturns extends ReturnsMap = {},\n TRequiredLayouts = unknown,\n TRequiredState = unknown,\n> = MiddlewareDefinition & {\n readonly __middlewareAcc: TAcc;\n readonly __returns?: TReturns;\n readonly __requiredLayouts?: TRequiredLayouts;\n readonly __requiredState?: TRequiredState;\n};\n\nexport type HandlerUnit<\n _Acc extends readonly unknown[],\n _Validators extends ValidatorParts,\n TReturns extends ReturnsMap = {},\n TOutput = Response,\n> = {\n readonly __returns?: TReturns;\n readonly $Infer: {\n Output: TOutput;\n };\n middlewares: readonly MiddlewareDefinition[];\n handler: (ctx: unknown) => Awaitable<Response>;\n returns?: ReturnsMap;\n query?: Schema<unknown>;\n params?: Schema<unknown>;\n body?: Schema<unknown>;\n};\n\nexport type InlineMiddlewareOptions<\n Ctx = unknown,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TReturns extends ReturnsMap = {},\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n R = unknown,\n> = {\n query?: Schema<TQuery, TQueryIn>;\n params?: Schema<TParams, TParamsIn>;\n body?: Schema<TBody, TBodyIn>;\n returns?: TReturns;\n handler: (ctx: Ctx, next: NextFn) => Awaitable<R>;\n};\n\nexport function isHandlerUnit(\n value: unknown,\n): value is HandlerUnit<readonly unknown[], ValidatorParts> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"handler\" in value &&\n \"middlewares\" in value &&\n Array.isArray((value as HandlerUnit<readonly unknown[], ValidatorParts>).middlewares)\n );\n}\n"],"mappings":";AAoNA,SAAgB,cACd,OAC0D;CAC1D,OACE,OAAO,UAAU,YACjB,UAAU,QACV,aAAa,SACb,iBAAiB,SACjB,MAAM,QAAS,MAA0D,WAAW;AAExF"}
@@ -1,13 +0,0 @@
1
- import { HandlerBuilder } from '../types/index.js';
2
- import { AppContext } from '../types/units.js';
3
- import { Schema } from '../types/schema.js';
4
- export declare function defineHandler<TAppContext extends Record<string, unknown> = AppContext>(): HandlerBuilder<readonly [], {}, {}, TAppContext>;
5
- export declare function defineHandler<TAppContext extends Record<string, unknown> = AppContext, TQuery = unknown, TParams = unknown, TBody = unknown>(options: {
6
- query?: Schema<TQuery>;
7
- params?: Schema<TParams>;
8
- body?: Schema<TBody>;
9
- }): HandlerBuilder<readonly [], {
10
- query: TQuery;
11
- params: TParams;
12
- body: TBody;
13
- }, {}, TAppContext>;
@@ -1,38 +0,0 @@
1
- import { pickDefinedSchemas } from "./validators.js";
2
- import { collectReturnsFromDefinitions } from "@taserjs/router-utils";
3
- //#region src/define/handler.ts
4
- function createHandlerBuilder(validators, middlewares, returnsMap) {
5
- const builder = {
6
- returns(map) {
7
- return createHandlerBuilder(validators, middlewares, {
8
- ...returnsMap,
9
- ...map
10
- });
11
- },
12
- use(unitOrOptions) {
13
- middlewares.push(unitOrOptions);
14
- return builder;
15
- },
16
- handler(fn) {
17
- const mergedReturns = {
18
- ...collectReturnsFromDefinitions(middlewares),
19
- ...returnsMap
20
- };
21
- return {
22
- $Infer: { Output: void 0 },
23
- middlewares: [...middlewares],
24
- handler: fn,
25
- ...pickDefinedSchemas(validators),
26
- ...Object.keys(mergedReturns).length > 0 ? { returns: mergedReturns } : {}
27
- };
28
- }
29
- };
30
- return builder;
31
- }
32
- function defineHandler(options) {
33
- return createHandlerBuilder(options ?? {}, [], {});
34
- }
35
- //#endregion
36
- export { defineHandler };
37
-
38
- //# sourceMappingURL=handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler.js","names":[],"sources":["../../../src/define/handler.ts"],"sourcesContent":["import type { HandlerBuilder } from \"../types/index.js\";\nimport type {\n AppContext,\n HandlerUnit,\n MiddlewareDefinition,\n ReturnsMap,\n ValidatorParts,\n} from \"../types/units.js\";\nimport type { Schema } from \"../types/schema.js\";\nimport { pickDefinedSchemas, type SchemaValidators } from \"./validators.js\";\nimport { collectReturnsFromDefinitions } from \"@taserjs/router-utils\";\n\nfunction createHandlerBuilder<TAppContext extends Record<string, unknown> = AppContext>(\n validators: SchemaValidators,\n middlewares: MiddlewareDefinition[],\n returnsMap: ReturnsMap,\n): HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext> {\n const builder = {\n returns(map: ReturnsMap) {\n return createHandlerBuilder<TAppContext>(validators, middlewares, { ...returnsMap, ...map });\n },\n use(unitOrOptions: MiddlewareDefinition) {\n middlewares.push(unitOrOptions);\n return builder;\n },\n handler(fn: (ctx: unknown) => unknown) {\n const mwReturns = collectReturnsFromDefinitions(middlewares);\n const mergedReturns = { ...mwReturns, ...returnsMap };\n const unit = {\n $Infer: { Output: undefined as unknown as Response },\n middlewares: [...middlewares],\n handler: fn as HandlerUnit<readonly [], ValidatorParts>[\"handler\"],\n ...pickDefinedSchemas(validators),\n ...(Object.keys(mergedReturns).length > 0 ? { returns: mergedReturns } : {}),\n } as HandlerUnit<readonly [], ValidatorParts>;\n return unit;\n },\n };\n\n return builder as unknown as HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext>;\n}\n\nexport function defineHandler<\n TAppContext extends Record<string, unknown> = AppContext,\n>(): HandlerBuilder<readonly [], {}, {}, TAppContext>;\n\nexport function defineHandler<\n TAppContext extends Record<string, unknown> = AppContext,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n>(options: {\n query?: Schema<TQuery>;\n params?: Schema<TParams>;\n body?: Schema<TBody>;\n}): HandlerBuilder<readonly [], { query: TQuery; params: TParams; body: TBody }, {}, TAppContext>;\n\nexport function defineHandler<TAppContext extends Record<string, unknown> = AppContext>(\n options?: SchemaValidators,\n): HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext> {\n return createHandlerBuilder<TAppContext>(options ?? {}, [], {});\n}\n"],"mappings":";;;AAYA,SAAS,qBACP,YACA,aACA,YAC8D;CAC9D,MAAM,UAAU;EACd,QAAQ,KAAiB;GACvB,OAAO,qBAAkC,YAAY,aAAa;IAAE,GAAG;IAAY,GAAG;GAAI,CAAC;EAC7F;EACA,IAAI,eAAqC;GACvC,YAAY,KAAK,aAAa;GAC9B,OAAO;EACT;EACA,QAAQ,IAA+B;GAErC,MAAM,gBAAgB;IAAE,GADN,8BAA8B,WACrB;IAAW,GAAG;GAAW;GAQpD,OAAO;IANL,QAAQ,EAAE,QAAQ,KAAA,EAAiC;IACnD,aAAa,CAAC,GAAG,WAAW;IAC5B,SAAS;IACT,GAAG,mBAAmB,UAAU;IAChC,GAAI,OAAO,KAAK,aAAa,CAAC,CAAC,SAAS,IAAI,EAAE,SAAS,cAAc,IAAI,CAAC;GAErE;EACT;CACF;CAEA,OAAO;AACT;AAiBA,SAAgB,cACd,SAC8D;CAC9D,OAAO,qBAAkC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChE"}
@@ -1,7 +0,0 @@
1
- import { MiddlewareHandler } from 'hono';
2
- import { MiddlewareReturnFromParts, MiddlewareUnit } from '../types/units.js';
3
- export declare function wrapHonoMiddleware<F extends (...args: never[]) => MiddlewareHandler>(honoFactory: F): (...args: Parameters<F>) => MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>>;
4
- /** Extracts the jwtPayload from Hono's variable bag and forwards it into Taser's state via next(). */
5
- export declare function extractJwtPayload<TPayload>(honoMw: MiddlewareHandler): (ctx: unknown, next: (state: {
6
- jwtPayload: TPayload;
7
- }) => unknown) => unknown;
@@ -1,18 +0,0 @@
1
- import { defineMiddleware } from "../define/middleware.js";
2
- import { createTaserCompatHandler } from "@taserjs/router-core";
3
- //#region src/middleware/wrap-hono.ts
4
- function wrapHonoMiddleware(honoFactory) {
5
- return (...args) => defineMiddleware(honoFactory(...args));
6
- }
7
- /** Extracts the jwtPayload from Hono's variable bag and forwards it into Taser's state via next(). */
8
- function extractJwtPayload(honoMw) {
9
- const taserHandler = createTaserCompatHandler(honoMw);
10
- return (ctx, next) => taserHandler(ctx, async () => {
11
- const payload = ctx.var.jwtPayload;
12
- return next({ jwtPayload: payload });
13
- });
14
- }
15
- //#endregion
16
- export { extractJwtPayload, wrapHonoMiddleware };
17
-
18
- //# sourceMappingURL=wrap-hono.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrap-hono.js","names":[],"sources":["../../../src/middleware/wrap-hono.ts"],"sourcesContent":["import { createTaserCompatHandler } from \"@taserjs/router-core\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport type { MiddlewareReturnFromParts, MiddlewareUnit } from \"../types/units.js\";\n\nexport function wrapHonoMiddleware<F extends (...args: never[]) => MiddlewareHandler>(\n honoFactory: F,\n): (\n ...args: Parameters<F>\n) => MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>> {\n return (...args) => defineMiddleware(honoFactory(...args));\n}\n\n/** Extracts the jwtPayload from Hono's variable bag and forwards it into Taser's state via next(). */\nexport function extractJwtPayload<TPayload>(\n honoMw: MiddlewareHandler,\n): (ctx: unknown, next: (state: { jwtPayload: TPayload }) => unknown) => unknown {\n const taserHandler = createTaserCompatHandler(honoMw);\n return (ctx, next) =>\n taserHandler(ctx, async () => {\n const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;\n return next({ jwtPayload: payload as TPayload });\n });\n}\n"],"mappings":";;;AAMA,SAAgB,mBACd,aAG4E;CAC5E,QAAQ,GAAG,SAAS,iBAAiB,YAAY,GAAG,IAAI,CAAC;AAC3D;;AAGA,SAAgB,kBACd,QAC+E;CAC/E,MAAM,eAAe,yBAAyB,MAAM;CACpD,QAAQ,KAAK,SACX,aAAa,KAAK,YAAY;EAC5B,MAAM,UAAW,IAAqD,IAAI;EAC1E,OAAO,KAAK,EAAE,YAAY,QAAoB,CAAC;CACjD,CAAC;AACL"}
@@ -1,2 +0,0 @@
1
- export interface RouterRegister {
2
- }
@@ -1,8 +0,0 @@
1
- //#region src/types/units.ts
2
- function isHandlerUnit(value) {
3
- return typeof value === "object" && value !== null && "handler" in value && "middlewares" in value && Array.isArray(value.middlewares);
4
- }
5
- //#endregion
6
- export { isHandlerUnit };
7
-
8
- //# sourceMappingURL=units.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"units.js","names":[],"sources":["../../../src/types/units.ts"],"sourcesContent":["import type {\n Awaitable,\n MiddlewareDefinition as CoreMiddlewareDefinition,\n TaserCookieJar,\n TaserHeaders,\n} from \"@taserjs/router-core\";\n\nimport type {\n MergeMiddlewareField,\n MergePart,\n RequestShape,\n Simplify,\n UnitRuntimeContext,\n UnwrapPart,\n} from \"./type-utils.js\";\nimport type { ReturnsMap } from \"./returns.js\";\nimport type { Schema } from \"./schema.js\";\n\nexport type { HttpMethod, Method } from \"./type-utils.js\";\nexport type {\n EmptyReturns,\n MergeReturns,\n ReturnsMap,\n HandlerReply,\n HasReturns,\n StatusCode,\n ValidHandlerReply,\n EnforceHandlerReply,\n} from \"./returns.js\";\n\n/** Default empty app context for standalone units without a bound router instance. */\nexport type AppContext = Record<never, never>;\n\nexport type ValidatorParts = {\n query?: unknown;\n params?: unknown;\n body?: unknown;\n queryIn?: unknown;\n paramsIn?: unknown;\n bodyIn?: unknown;\n};\n\nexport declare const StateBrand: unique symbol;\n\nexport type NextResult<TState = unknown> = Response & {\n readonly [StateBrand]?: TState;\n};\n\nexport type ExtractState<T> = [Extract<Awaited<T>, { [StateBrand]?: unknown }>] extends [never]\n ? {}\n : Extract<Awaited<T>, { [StateBrand]?: unknown }> extends { [StateBrand]?: infer S }\n ? [S] extends [never]\n ? {}\n : S\n : {};\n\nexport type IsUnknown<T> = [unknown] extends [T] ? true : false;\n\nexport type NextFn<TExpectedState = unknown> =\n IsUnknown<TExpectedState> extends true\n ? <S extends Record<string, unknown> = {}>(state?: S) => Promise<NextResult<S>>\n : (state: TExpectedState) => Promise<NextResult<TExpectedState>>;\n\nexport type MiddlewareNext = NextFn;\n\nexport type MiddlewareDefinition = CoreMiddlewareDefinition<ReturnsMap>;\n\nexport type MiddlewareReturnFromParts<\n TQuery,\n TParams,\n TBody,\n TState,\n TQueryIn = TQuery,\n TParamsIn = TParams,\n TBodyIn = TBody,\n> = {\n query: Simplify<UnwrapPart<TQuery>>;\n params: Simplify<UnwrapPart<TParams>>;\n body: Simplify<UnwrapPart<TBody>>;\n state: Simplify<UnwrapPart<TState>>;\n /** Pre-parse shapes merged into route `$Infer.Input`. */\n input: {\n query: RequestShape<TQueryIn, TQuery>;\n params: RequestShape<TParamsIn, TParams>;\n body: RequestShape<TBodyIn, TBody>;\n };\n};\n\nexport type DefineMiddlewareResult<\n TQuery,\n TParams,\n TBody,\n TState,\n R,\n TQueryIn = TQuery,\n TParamsIn = TParams,\n TBodyIn = TBody,\n TReturns extends ReturnsMap = {},\n TLayout = null,\n TRequires = {},\n> = MiddlewareUnit<\n MiddlewareReturnFromParts<\n TQuery,\n TParams,\n TBody,\n IsUnknown<TState> extends true ? ExtractState<R> : TState,\n TQueryIn,\n TParamsIn,\n TBodyIn\n >,\n TReturns,\n TLayout,\n TRequires\n>;\n\nexport type StandaloneMiddlewareContext<\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TAppContext extends Record<string, unknown> = AppContext,\n TState = {},\n> = Simplify<\n TAppContext &\n UnitRuntimeContext & {\n query: Simplify<UnwrapPart<TQuery>>;\n params: Simplify<UnwrapPart<TParams>>;\n body: Simplify<UnwrapPart<TBody>>;\n state: Simplify<UnwrapPart<TState>>;\n headers: TaserHeaders;\n cookies: TaserCookieJar;\n }\n>;\n\nexport type HandlerContext<\n Acc extends readonly unknown[],\n Validators extends ValidatorParts,\n TAppContext extends Record<string, unknown> = AppContext,\n> = Simplify<\n TAppContext &\n UnitRuntimeContext & {\n query: Simplify<\n MergePart<\n Validators extends { query?: infer Q } ? Q : unknown,\n MergeMiddlewareField<Acc, \"query\">\n >\n >;\n params: Simplify<\n MergePart<\n Validators extends { params?: infer P } ? P : unknown,\n MergeMiddlewareField<Acc, \"params\">\n >\n >;\n body: Simplify<\n MergePart<\n Validators extends { body?: infer B } ? B : unknown,\n MergeMiddlewareField<Acc, \"body\">\n >\n >;\n state: Simplify<MergeMiddlewareField<Acc, \"state\">>;\n headers: TaserHeaders;\n cookies: TaserCookieJar;\n }\n>;\n\nexport type MiddlewareUnit<\n TAcc = unknown,\n TReturns extends ReturnsMap = {},\n TRequiredLayouts = unknown,\n TRequiredState = unknown,\n> = MiddlewareDefinition & {\n readonly __middlewareAcc: TAcc;\n readonly __returns?: TReturns;\n readonly __requiredLayouts?: TRequiredLayouts;\n readonly __requiredState?: TRequiredState;\n};\n\nexport type HandlerUnit<\n _Acc extends readonly unknown[],\n _Validators extends ValidatorParts,\n TReturns extends ReturnsMap = {},\n TOutput = Response,\n> = {\n readonly __returns?: TReturns;\n readonly $Infer: {\n Output: TOutput;\n };\n middlewares: readonly MiddlewareDefinition[];\n handler: (ctx: unknown) => Awaitable<Response>;\n returns?: ReturnsMap;\n query?: Schema<unknown>;\n params?: Schema<unknown>;\n body?: Schema<unknown>;\n};\n\nexport type InlineMiddlewareOptions<\n Ctx = unknown,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TReturns extends ReturnsMap = {},\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n R = unknown,\n> = {\n query?: Schema<TQuery, TQueryIn>;\n params?: Schema<TParams, TParamsIn>;\n body?: Schema<TBody, TBodyIn>;\n returns?: TReturns;\n handler: (ctx: Ctx, next: NextFn) => Awaitable<R>;\n};\n\nexport function isHandlerUnit(\n value: unknown,\n): value is HandlerUnit<readonly unknown[], ValidatorParts> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"handler\" in value &&\n \"middlewares\" in value &&\n Array.isArray((value as HandlerUnit<readonly unknown[], ValidatorParts>).middlewares)\n );\n}\n"],"mappings":";AAoNA,SAAgB,cACd,OAC0D;CAC1D,OACE,OAAO,UAAU,YACjB,UAAU,QACV,aAAa,SACb,iBAAiB,SACjB,MAAM,QAAS,MAA0D,WAAW;AAExF"}
@@ -1,62 +0,0 @@
1
- import type { HandlerBuilder } from "../types/index.js";
2
- import type {
3
- AppContext,
4
- HandlerUnit,
5
- MiddlewareDefinition,
6
- ReturnsMap,
7
- ValidatorParts,
8
- } from "../types/units.js";
9
- import type { Schema } from "../types/schema.js";
10
- import { pickDefinedSchemas, type SchemaValidators } from "./validators.js";
11
- import { collectReturnsFromDefinitions } from "@taserjs/router-utils";
12
-
13
- function createHandlerBuilder<TAppContext extends Record<string, unknown> = AppContext>(
14
- validators: SchemaValidators,
15
- middlewares: MiddlewareDefinition[],
16
- returnsMap: ReturnsMap,
17
- ): HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext> {
18
- const builder = {
19
- returns(map: ReturnsMap) {
20
- return createHandlerBuilder<TAppContext>(validators, middlewares, { ...returnsMap, ...map });
21
- },
22
- use(unitOrOptions: MiddlewareDefinition) {
23
- middlewares.push(unitOrOptions);
24
- return builder;
25
- },
26
- handler(fn: (ctx: unknown) => unknown) {
27
- const mwReturns = collectReturnsFromDefinitions(middlewares);
28
- const mergedReturns = { ...mwReturns, ...returnsMap };
29
- const unit = {
30
- $Infer: { Output: undefined as unknown as Response },
31
- middlewares: [...middlewares],
32
- handler: fn as HandlerUnit<readonly [], ValidatorParts>["handler"],
33
- ...pickDefinedSchemas(validators),
34
- ...(Object.keys(mergedReturns).length > 0 ? { returns: mergedReturns } : {}),
35
- } as HandlerUnit<readonly [], ValidatorParts>;
36
- return unit;
37
- },
38
- };
39
-
40
- return builder as unknown as HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext>;
41
- }
42
-
43
- export function defineHandler<
44
- TAppContext extends Record<string, unknown> = AppContext,
45
- >(): HandlerBuilder<readonly [], {}, {}, TAppContext>;
46
-
47
- export function defineHandler<
48
- TAppContext extends Record<string, unknown> = AppContext,
49
- TQuery = unknown,
50
- TParams = unknown,
51
- TBody = unknown,
52
- >(options: {
53
- query?: Schema<TQuery>;
54
- params?: Schema<TParams>;
55
- body?: Schema<TBody>;
56
- }): HandlerBuilder<readonly [], { query: TQuery; params: TParams; body: TBody }, {}, TAppContext>;
57
-
58
- export function defineHandler<TAppContext extends Record<string, unknown> = AppContext>(
59
- options?: SchemaValidators,
60
- ): HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext> {
61
- return createHandlerBuilder<TAppContext>(options ?? {}, [], {});
62
- }
@@ -1,25 +0,0 @@
1
- import { createTaserCompatHandler } from "@taserjs/router-core";
2
- import type { MiddlewareHandler } from "hono";
3
-
4
- import { defineMiddleware } from "../define/middleware.js";
5
- import type { MiddlewareReturnFromParts, MiddlewareUnit } from "../types/units.js";
6
-
7
- export function wrapHonoMiddleware<F extends (...args: never[]) => MiddlewareHandler>(
8
- honoFactory: F,
9
- ): (
10
- ...args: Parameters<F>
11
- ) => MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>> {
12
- return (...args) => defineMiddleware(honoFactory(...args));
13
- }
14
-
15
- /** Extracts the jwtPayload from Hono's variable bag and forwards it into Taser's state via next(). */
16
- export function extractJwtPayload<TPayload>(
17
- honoMw: MiddlewareHandler,
18
- ): (ctx: unknown, next: (state: { jwtPayload: TPayload }) => unknown) => unknown {
19
- const taserHandler = createTaserCompatHandler(honoMw);
20
- return (ctx, next) =>
21
- taserHandler(ctx, async () => {
22
- const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;
23
- return next({ jwtPayload: payload as TPayload });
24
- });
25
- }
package/src/register.ts DELETED
@@ -1 +0,0 @@
1
- export interface RouterRegister {}