@taserjs/router 0.0.1 → 0.0.3

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 (142) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/constants.cjs.map +1 -1
  3. package/dist/cjs/create-context.cjs.map +1 -1
  4. package/dist/cjs/define/handler.cjs.map +1 -1
  5. package/dist/cjs/define/middleware.cjs +5 -24
  6. package/dist/cjs/define/middleware.cjs.map +1 -1
  7. package/dist/cjs/define/middleware.d.cts +10 -79
  8. package/dist/cjs/define/validators.cjs.map +1 -1
  9. package/dist/cjs/factories.cjs.map +1 -1
  10. package/dist/cjs/factories.d.cts +2 -2
  11. package/dist/cjs/index.cjs +7 -2
  12. package/dist/cjs/index.d.cts +2 -2
  13. package/dist/cjs/middleware/body-limit.cjs +2 -2
  14. package/dist/cjs/middleware/body-limit.cjs.map +1 -1
  15. package/dist/cjs/middleware/compress.cjs +2 -2
  16. package/dist/cjs/middleware/compress.cjs.map +1 -1
  17. package/dist/cjs/middleware/cors.cjs +2 -2
  18. package/dist/cjs/middleware/cors.cjs.map +1 -1
  19. package/dist/cjs/middleware/csrf.cjs +2 -2
  20. package/dist/cjs/middleware/csrf.cjs.map +1 -1
  21. package/dist/cjs/middleware/etag.cjs +2 -2
  22. package/dist/cjs/middleware/etag.cjs.map +1 -1
  23. package/dist/cjs/middleware/jwk.cjs +11 -4
  24. package/dist/cjs/middleware/jwk.cjs.map +1 -1
  25. package/dist/cjs/middleware/jwk.d.cts +4 -5
  26. package/dist/cjs/middleware/jwt.cjs +11 -5
  27. package/dist/cjs/middleware/jwt.cjs.map +1 -1
  28. package/dist/cjs/middleware/jwt.d.cts +7 -5
  29. package/dist/cjs/middleware/secure-headers.cjs +2 -2
  30. package/dist/cjs/middleware/secure-headers.cjs.map +1 -1
  31. package/dist/cjs/middleware/timing.cjs +2 -2
  32. package/dist/cjs/middleware/timing.cjs.map +1 -1
  33. package/dist/cjs/middleware/wrap-hono.cjs +9 -0
  34. package/dist/cjs/middleware/wrap-hono.cjs.map +1 -0
  35. package/dist/cjs/middleware/wrap-hono.d.cts +3 -0
  36. package/dist/cjs/middleware.cjs.map +1 -1
  37. package/dist/cjs/reply.cjs +20 -0
  38. package/dist/cjs/reply.d.cts +2 -0
  39. package/dist/cjs/route.cjs.map +1 -1
  40. package/dist/cjs/route.d.cts +1 -1
  41. package/dist/cjs/stream.cjs +32 -0
  42. package/dist/cjs/stream.d.cts +1 -0
  43. package/dist/cjs/taser-app.cjs +0 -6
  44. package/dist/cjs/taser-app.cjs.map +1 -1
  45. package/dist/cjs/taser-app.d.cts +0 -3
  46. package/dist/cjs/taser-router.cjs +9 -10
  47. package/dist/cjs/taser-router.cjs.map +1 -1
  48. package/dist/cjs/taser-router.d.cts +9 -11
  49. package/dist/cjs/types/app.d.cts +3 -2
  50. package/dist/cjs/types/index.d.cts +53 -139
  51. package/dist/cjs/types/type-utils.d.cts +8 -11
  52. package/dist/cjs/types/units.cjs.map +1 -1
  53. package/dist/cjs/types/units.d.cts +27 -24
  54. package/dist/esm/constants.js.map +1 -1
  55. package/dist/esm/create-context.js.map +1 -1
  56. package/dist/esm/define/handler.js.map +1 -1
  57. package/dist/esm/define/middleware.d.ts +10 -79
  58. package/dist/esm/define/middleware.js +5 -24
  59. package/dist/esm/define/middleware.js.map +1 -1
  60. package/dist/esm/define/validators.js.map +1 -1
  61. package/dist/esm/factories.d.ts +2 -2
  62. package/dist/esm/factories.js.map +1 -1
  63. package/dist/esm/index.d.ts +2 -2
  64. package/dist/esm/index.js +4 -4
  65. package/dist/esm/middleware/body-limit.js +1 -1
  66. package/dist/esm/middleware/body-limit.js.map +1 -1
  67. package/dist/esm/middleware/compress.js +1 -1
  68. package/dist/esm/middleware/compress.js.map +1 -1
  69. package/dist/esm/middleware/cors.js +1 -1
  70. package/dist/esm/middleware/cors.js.map +1 -1
  71. package/dist/esm/middleware/csrf.js +1 -1
  72. package/dist/esm/middleware/csrf.js.map +1 -1
  73. package/dist/esm/middleware/etag.js +1 -1
  74. package/dist/esm/middleware/etag.js.map +1 -1
  75. package/dist/esm/middleware/jwk.d.ts +4 -5
  76. package/dist/esm/middleware/jwk.js +11 -4
  77. package/dist/esm/middleware/jwk.js.map +1 -1
  78. package/dist/esm/middleware/jwt.d.ts +7 -5
  79. package/dist/esm/middleware/jwt.js +11 -5
  80. package/dist/esm/middleware/jwt.js.map +1 -1
  81. package/dist/esm/middleware/secure-headers.js +1 -1
  82. package/dist/esm/middleware/secure-headers.js.map +1 -1
  83. package/dist/esm/middleware/timing.js +1 -1
  84. package/dist/esm/middleware/timing.js.map +1 -1
  85. package/dist/esm/middleware/wrap-hono.d.ts +3 -0
  86. package/dist/esm/middleware/wrap-hono.js +9 -0
  87. package/dist/esm/middleware/wrap-hono.js.map +1 -0
  88. package/dist/esm/middleware.js.map +1 -1
  89. package/dist/esm/reply.d.ts +2 -0
  90. package/dist/esm/reply.js +2 -0
  91. package/dist/esm/route.d.ts +1 -1
  92. package/dist/esm/route.js.map +1 -1
  93. package/dist/esm/stream.d.ts +1 -0
  94. package/dist/esm/stream.js +2 -0
  95. package/dist/esm/taser-app.d.ts +0 -3
  96. package/dist/esm/taser-app.js +1 -6
  97. package/dist/esm/taser-app.js.map +1 -1
  98. package/dist/esm/taser-router.d.ts +9 -11
  99. package/dist/esm/taser-router.js +7 -8
  100. package/dist/esm/taser-router.js.map +1 -1
  101. package/dist/esm/types/app.d.ts +3 -2
  102. package/dist/esm/types/index.d.ts +53 -139
  103. package/dist/esm/types/type-utils.d.ts +8 -11
  104. package/dist/esm/types/units.d.ts +27 -24
  105. package/dist/esm/types/units.js.map +1 -1
  106. package/package.json +37 -17
  107. package/src/constants.ts +6 -6
  108. package/src/create-context.ts +8 -8
  109. package/src/define/handler.ts +24 -34
  110. package/src/define/middleware.ts +66 -256
  111. package/src/define/validators.ts +10 -10
  112. package/src/factories.ts +63 -61
  113. package/src/index.ts +13 -12
  114. package/src/middleware/body-limit.ts +5 -5
  115. package/src/middleware/compress.ts +5 -5
  116. package/src/middleware/cors.ts +5 -5
  117. package/src/middleware/csrf.ts +5 -5
  118. package/src/middleware/etag.ts +5 -5
  119. package/src/middleware/jwk.ts +33 -26
  120. package/src/middleware/jwt.ts +26 -10
  121. package/src/middleware/secure-headers.ts +5 -5
  122. package/src/middleware/timing.ts +5 -5
  123. package/src/middleware/wrap-hono.ts +12 -0
  124. package/src/middleware.ts +7 -7
  125. package/src/reply.ts +11 -0
  126. package/src/route.ts +45 -48
  127. package/src/stream.ts +1 -0
  128. package/src/taser-app.ts +13 -18
  129. package/src/taser-router.ts +103 -98
  130. package/src/types/app.ts +33 -35
  131. package/src/types/index.ts +299 -722
  132. package/src/types/returns.ts +92 -97
  133. package/src/types/schema.ts +8 -9
  134. package/src/types/type-utils.ts +42 -46
  135. package/src/types/units.ts +135 -104
  136. package/dist/cjs/middleware/auth.cjs +0 -34
  137. package/dist/cjs/middleware/auth.cjs.map +0 -1
  138. package/dist/cjs/middleware/auth.d.cts +0 -9
  139. package/dist/esm/middleware/auth.d.ts +0 -9
  140. package/dist/esm/middleware/auth.js +0 -33
  141. package/dist/esm/middleware/auth.js.map +0 -1
  142. package/src/middleware/auth.ts +0 -51
@@ -1,85 +1,16 @@
1
- import { ReplyResult } from '@taserjs/router-utils';
2
- import { createTaserCompatHandler } from '@taserjs/router-core';
3
- import { Awaitable, ReturnsMap } from '../types/index.js';
4
- import { AppContext, MiddlewareReturnFromParts, MiddlewareUnit, StandaloneMiddlewareContext } from '../types/units.js';
1
+ import { createTaserCompatHandler, Awaitable } from '@taserjs/router-core';
2
+ import { ReturnsMap } from '../types/returns.js';
3
+ import { AppContext, ExtractState, IsUnknown, MiddlewareReturnFromParts, MiddlewareUnit, NextFn, StandaloneMiddlewareContext } from '../types/units.js';
5
4
  import { Schema } from '../types/schema.js';
6
5
  type HonoMiddlewareHandler = Parameters<typeof createTaserCompatHandler>[0];
7
6
  type HonoMiddlewareUnit = MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>>;
8
- type FluentNext<TState, TCtx> = [TState] extends [undefined] ? [TCtx] extends [undefined] ? () => Promise<ReplyResult> : (args: {
9
- ctx: TCtx;
10
- }) => Promise<ReplyResult> : [TCtx] extends [undefined] ? (args: {
11
- state: TState;
12
- }) => Promise<ReplyResult> : (args: {
13
- state: TState;
14
- ctx: TCtx;
15
- }) => Promise<ReplyResult>;
16
- type FluentMiddlewareBuilder<TQuery = unknown, TParams = unknown, TBody = unknown, TState = undefined, TCtx = undefined, TReturns extends ReturnsMap = {}, TAppContext extends Record<string, unknown> = AppContext> = {
17
- returns<const M extends ReturnsMap>(map: M): FluentMiddlewareBuilder<TQuery, TParams, TBody, TState, TCtx, Omit<TReturns, keyof M> & M, TAppContext>;
18
- handler(fn: (ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>, next: FluentNext<TState, TCtx>) => Awaitable<ReplyResult | Response | unknown>): MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, TState extends undefined ? {} : TState, TCtx extends undefined ? {} : TCtx>, TReturns>;
7
+ export type DefineMiddlewareOptions<TState = unknown, TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown, TAppContext extends Record<string, unknown> = AppContext, R = unknown> = {
8
+ query?: Schema<TQuery, TQueryIn>;
9
+ params?: Schema<TParams, TParamsIn>;
10
+ body?: Schema<TBody, TBodyIn>;
11
+ returns?: TReturns;
12
+ handler: (ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>, next: NextFn<NoInfer<TState>>) => Awaitable<R>;
19
13
  };
20
14
  export declare function defineMiddleware(middleware: HonoMiddlewareHandler): HonoMiddlewareUnit;
21
- export declare function defineMiddleware<TAppContext extends Record<string, unknown> = AppContext, TState = unknown, TCtx = unknown, TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}>(options: {
22
- state: Schema<TState>;
23
- ctx: Schema<TCtx>;
24
- query?: Schema<TQuery>;
25
- params?: Schema<TParams>;
26
- body?: Schema<TBody>;
27
- returns?: TReturns;
28
- handler: (ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>, next: (args: {
29
- state: TState;
30
- ctx: TCtx;
31
- }) => Promise<ReplyResult>) => Awaitable<ReplyResult | Response | unknown>;
32
- }): MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, TState, TCtx>, TReturns>;
33
- export declare function defineMiddleware<TAppContext extends Record<string, unknown> = AppContext, TState = unknown, TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}>(options: {
34
- state: Schema<TState>;
35
- query?: Schema<TQuery>;
36
- params?: Schema<TParams>;
37
- body?: Schema<TBody>;
38
- returns?: TReturns;
39
- handler: (ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>, next: (args: {
40
- state: TState;
41
- }) => Promise<ReplyResult>) => Awaitable<ReplyResult | Response | unknown>;
42
- }): MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, TState>, TReturns>;
43
- export declare function defineMiddleware<TAppContext extends Record<string, unknown> = AppContext, TCtx = unknown, TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}>(options: {
44
- ctx: Schema<TCtx>;
45
- query?: Schema<TQuery>;
46
- params?: Schema<TParams>;
47
- body?: Schema<TBody>;
48
- returns?: TReturns;
49
- handler: (ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>, next: (args: {
50
- ctx: TCtx;
51
- }) => Promise<ReplyResult>) => Awaitable<ReplyResult | Response | unknown>;
52
- }): MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, {}, TCtx>, TReturns>;
53
- export declare function defineMiddleware<TAppContext extends Record<string, unknown> = AppContext, TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}>(options: {
54
- query?: Schema<TQuery>;
55
- params?: Schema<TParams>;
56
- body?: Schema<TBody>;
57
- returns?: TReturns;
58
- handler: (ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>, next: () => Promise<ReplyResult>) => Awaitable<ReplyResult | Response | unknown>;
59
- }): MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, {}>, TReturns>;
60
- export declare function defineMiddleware<TAppContext extends Record<string, unknown> = AppContext>(): FluentMiddlewareBuilder<unknown, unknown, unknown, undefined, undefined, {}, TAppContext>;
61
- export declare function defineMiddleware<TAppContext extends Record<string, unknown> = AppContext, TQuery = unknown, TParams = unknown, TBody = unknown>(options: {
62
- query?: Schema<TQuery>;
63
- params?: Schema<TParams>;
64
- body?: Schema<TBody>;
65
- }): FluentMiddlewareBuilder<TQuery, TParams, TBody, undefined, undefined, {}, TAppContext>;
66
- export declare function defineMiddleware<TAppContext extends Record<string, unknown> = AppContext, TState = unknown, TQuery = unknown, TParams = unknown, TBody = unknown>(options: {
67
- state: Schema<TState>;
68
- query?: Schema<TQuery>;
69
- params?: Schema<TParams>;
70
- body?: Schema<TBody>;
71
- }): FluentMiddlewareBuilder<TQuery, TParams, TBody, TState, undefined, {}, TAppContext>;
72
- export declare function defineMiddleware<TAppContext extends Record<string, unknown> = AppContext, TCtx = unknown, TQuery = unknown, TParams = unknown, TBody = unknown>(options: {
73
- ctx: Schema<TCtx>;
74
- query?: Schema<TQuery>;
75
- params?: Schema<TParams>;
76
- body?: Schema<TBody>;
77
- }): FluentMiddlewareBuilder<TQuery, TParams, TBody, undefined, TCtx, {}, TAppContext>;
78
- export declare function defineMiddleware<TAppContext extends Record<string, unknown> = AppContext, TState = unknown, TCtx = unknown, TQuery = unknown, TParams = unknown, TBody = unknown>(options: {
79
- state: Schema<TState>;
80
- ctx: Schema<TCtx>;
81
- query?: Schema<TQuery>;
82
- params?: Schema<TParams>;
83
- body?: Schema<TBody>;
84
- }): FluentMiddlewareBuilder<TQuery, TParams, TBody, TState, TCtx, {}, TAppContext>;
15
+ export declare function defineMiddleware<TState = unknown, TAppContext extends Record<string, unknown> = AppContext, TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown, R = unknown>(options: DefineMiddlewareOptions<TState, TQuery, TParams, TBody, TReturns, TQueryIn, TParamsIn, TBodyIn, TAppContext, R>): MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, IsUnknown<TState> extends true ? ExtractState<R> : TState, TQueryIn, TParamsIn, TBodyIn>, TReturns>;
85
16
  export {};
@@ -1,34 +1,15 @@
1
1
  import { createTaserCompatHandler } from "@taserjs/router-core";
2
2
  //#region src/define/middleware.ts
3
- function createFluentBuilder(state) {
4
- return {
5
- returns(map) {
6
- return createFluentBuilder({
7
- ...state,
8
- returns: {
9
- ...state.returns ?? {},
10
- ...map
11
- }
12
- });
13
- },
14
- handler(fn) {
15
- return {
16
- ...state,
17
- handler: fn,
18
- __middlewareAcc: void 0,
19
- ...state.returns ? { __returns: state.returns } : {}
20
- };
21
- }
22
- };
23
- }
24
3
  function defineMiddleware(options) {
25
4
  if (typeof options === "function") {
26
5
  const honoMiddleware = options;
27
6
  return defineMiddleware({ handler: (ctx, next) => createTaserCompatHandler(honoMiddleware)(ctx, next) });
28
7
  }
29
- if (options === void 0) return createFluentBuilder({});
30
- if (typeof options === "object" && options !== null && !("handler" in options)) return createFluentBuilder(options);
31
- return options;
8
+ return {
9
+ ...options,
10
+ __middlewareAcc: void 0,
11
+ ...options.returns ? { __returns: options.returns } : {}
12
+ };
32
13
  }
33
14
  //#endregion
34
15
  export { defineMiddleware };
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","names":[],"sources":["../../../src/define/middleware.ts"],"sourcesContent":["import type { ReplyResult } from '@taserjs/router-utils'\nimport { createTaserCompatHandler } from '@taserjs/router-core'\n\nimport type { Awaitable, ReturnsMap } from '../types/index.js'\nimport type {\n AppContext,\n MiddlewareReturnFromParts,\n MiddlewareUnit,\n StandaloneMiddlewareContext,\n} from '../types/units.js'\nimport type { Schema } from '../types/schema.js'\n\ntype HonoMiddlewareHandler = Parameters<typeof createTaserCompatHandler>[0]\n\ntype HonoMiddlewareUnit = MiddlewareUnit<\n MiddlewareReturnFromParts<unknown, unknown, unknown, {}>\n>\n\ntype MiddlewareBuilderState<\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TState = unknown,\n TCtx = unknown,\n TReturns extends ReturnsMap = {},\n> = {\n state?: Schema<TState>\n ctx?: Schema<TCtx>\n query?: Schema<TQuery>\n params?: Schema<TParams>\n body?: Schema<TBody>\n returns?: TReturns\n}\n\ntype FluentNext<TState, TCtx>\n = [TState] extends [undefined]\n ? [TCtx] extends [undefined]\n ? () => Promise<ReplyResult>\n : (args: { ctx: TCtx }) => Promise<ReplyResult>\n : [TCtx] extends [undefined]\n ? (args: { state: TState }) => Promise<ReplyResult>\n : (args: { state: TState, ctx: TCtx }) => Promise<ReplyResult>\n\ntype FluentMiddlewareBuilder<\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TState = undefined,\n TCtx = undefined,\n TReturns extends ReturnsMap = {},\n TAppContext extends Record<string, unknown> = AppContext,\n> = {\n returns<const M extends ReturnsMap>(\n map: M,\n ): FluentMiddlewareBuilder<\n TQuery,\n TParams,\n TBody,\n TState,\n TCtx,\n Omit<TReturns, keyof M> & M,\n TAppContext\n >\n handler(\n fn: (\n ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>,\n next: FluentNext<TState, TCtx>,\n ) => Awaitable<ReplyResult | Response | unknown>,\n ): MiddlewareUnit<\n MiddlewareReturnFromParts<\n TQuery,\n TParams,\n TBody,\n TState extends undefined ? {} : TState,\n TCtx extends undefined ? {} : TCtx\n >,\n TReturns\n >\n}\n\nfunction createFluentBuilder<TAppContext extends Record<string, unknown> = AppContext>(\n state: MiddlewareBuilderState,\n): FluentMiddlewareBuilder<unknown, unknown, unknown, undefined, undefined, {}, TAppContext> {\n return {\n returns(map: ReturnsMap) {\n return createFluentBuilder<TAppContext>({\n ...state,\n returns: { ...(state.returns ?? {}), ...map },\n })\n },\n handler(fn: (...args: never[]) => unknown) {\n const unit = {\n ...state,\n handler: fn,\n __middlewareAcc: undefined as unknown,\n ...(state.returns ? { __returns: state.returns } : {}),\n }\n return unit as unknown as MiddlewareUnit<\n MiddlewareReturnFromParts<unknown, unknown, unknown, unknown, unknown>,\n ReturnsMap\n >\n },\n } as unknown as FluentMiddlewareBuilder<unknown, unknown, unknown, undefined, undefined, {}, TAppContext>\n}\n\nexport function defineMiddleware(middleware: HonoMiddlewareHandler): HonoMiddlewareUnit\n\nexport function defineMiddleware<\n TAppContext extends Record<string, unknown> = AppContext,\n TState = unknown,\n TCtx = unknown,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TReturns extends ReturnsMap = {},\n>(\n options: {\n state: Schema<TState>\n ctx: Schema<TCtx>\n query?: Schema<TQuery>\n params?: Schema<TParams>\n body?: Schema<TBody>\n returns?: TReturns\n handler: (\n ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>,\n next: (args: { state: TState, ctx: TCtx }) => Promise<ReplyResult>,\n ) => Awaitable<ReplyResult | Response | unknown>\n },\n): MiddlewareUnit<\n MiddlewareReturnFromParts<TQuery, TParams, TBody, TState, TCtx>,\n TReturns\n>\n\nexport function defineMiddleware<\n TAppContext extends Record<string, unknown> = AppContext,\n TState = unknown,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TReturns extends ReturnsMap = {},\n>(\n options: {\n state: Schema<TState>\n query?: Schema<TQuery>\n params?: Schema<TParams>\n body?: Schema<TBody>\n returns?: TReturns\n handler: (\n ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>,\n next: (args: { state: TState }) => Promise<ReplyResult>,\n ) => Awaitable<ReplyResult | Response | unknown>\n },\n): MiddlewareUnit<\n MiddlewareReturnFromParts<TQuery, TParams, TBody, TState>,\n TReturns\n>\n\nexport function defineMiddleware<\n TAppContext extends Record<string, unknown> = AppContext,\n TCtx = unknown,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TReturns extends ReturnsMap = {},\n>(\n options: {\n ctx: Schema<TCtx>\n query?: Schema<TQuery>\n params?: Schema<TParams>\n body?: Schema<TBody>\n returns?: TReturns\n handler: (\n ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>,\n next: (args: { ctx: TCtx }) => Promise<ReplyResult>,\n ) => Awaitable<ReplyResult | Response | unknown>\n },\n): MiddlewareUnit<\n MiddlewareReturnFromParts<TQuery, TParams, TBody, {}, TCtx>,\n TReturns\n>\n\nexport function defineMiddleware<\n TAppContext extends Record<string, unknown> = AppContext,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TReturns extends ReturnsMap = {},\n>(\n options: {\n query?: Schema<TQuery>\n params?: Schema<TParams>\n body?: Schema<TBody>\n returns?: TReturns\n handler: (\n ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>,\n next: () => Promise<ReplyResult>,\n ) => Awaitable<ReplyResult | Response | unknown>\n },\n): MiddlewareUnit<\n MiddlewareReturnFromParts<TQuery, TParams, TBody, {}>,\n TReturns\n>\n\nexport function defineMiddleware<\n TAppContext extends Record<string, unknown> = AppContext,\n>(): FluentMiddlewareBuilder<unknown, unknown, unknown, undefined, undefined, {}, TAppContext>\n\nexport function defineMiddleware<\n TAppContext extends Record<string, unknown> = AppContext,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n>(\n options: {\n query?: Schema<TQuery>\n params?: Schema<TParams>\n body?: Schema<TBody>\n },\n): FluentMiddlewareBuilder<TQuery, TParams, TBody, undefined, undefined, {}, TAppContext>\n\nexport function defineMiddleware<\n TAppContext extends Record<string, unknown> = AppContext,\n TState = unknown,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n>(\n options: {\n state: Schema<TState>\n query?: Schema<TQuery>\n params?: Schema<TParams>\n body?: Schema<TBody>\n },\n): FluentMiddlewareBuilder<TQuery, TParams, TBody, TState, undefined, {}, TAppContext>\n\nexport function defineMiddleware<\n TAppContext extends Record<string, unknown> = AppContext,\n TCtx = unknown,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n>(\n options: {\n ctx: Schema<TCtx>\n query?: Schema<TQuery>\n params?: Schema<TParams>\n body?: Schema<TBody>\n },\n): FluentMiddlewareBuilder<TQuery, TParams, TBody, undefined, TCtx, {}, TAppContext>\n\nexport function defineMiddleware<\n TAppContext extends Record<string, unknown> = AppContext,\n TState = unknown,\n TCtx = unknown,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n>(\n options: {\n state: Schema<TState>\n ctx: Schema<TCtx>\n query?: Schema<TQuery>\n params?: Schema<TParams>\n body?: Schema<TBody>\n },\n): FluentMiddlewareBuilder<TQuery, TParams, TBody, TState, TCtx, {}, TAppContext>\n\nexport function defineMiddleware(options?: unknown): unknown {\n if (typeof options === 'function') {\n const honoMiddleware = options as HonoMiddlewareHandler\n return defineMiddleware({\n handler: (ctx, next) => createTaserCompatHandler(honoMiddleware)(ctx, next),\n })\n }\n\n if (options === undefined) {\n return createFluentBuilder({})\n }\n\n if (\n typeof options === 'object'\n && options !== null\n && !('handler' in options)\n ) {\n return createFluentBuilder(options)\n }\n\n return options\n}\n"],"mappings":";;AAgFA,SAAS,oBACP,OAC2F;CAC3F,OAAO;EACL,QAAQ,KAAiB;GACvB,OAAO,oBAAiC;IACtC,GAAG;IACH,SAAS;KAAE,GAAI,MAAM,WAAW,CAAC;KAAI,GAAG;IAAI;GAC9C,CAAC;EACH;EACA,QAAQ,IAAmC;GAOzC,OAAO;IALL,GAAG;IACH,SAAS;IACT,iBAAiB,KAAA;IACjB,GAAI,MAAM,UAAU,EAAE,WAAW,MAAM,QAAQ,IAAI,CAAC;GAE/C;EAIT;CACF;AACF;AAoKA,SAAgB,iBAAiB,SAA4B;CAC3D,IAAI,OAAO,YAAY,YAAY;EACjC,MAAM,iBAAiB;EACvB,OAAO,iBAAiB,EACtB,UAAU,KAAK,SAAS,yBAAyB,cAAc,CAAC,CAAC,KAAK,IAAI,EAC5E,CAAC;CACH;CAEA,IAAI,YAAY,KAAA,GACd,OAAO,oBAAoB,CAAC,CAAC;CAG/B,IACE,OAAO,YAAY,YAChB,YAAY,QACZ,EAAE,aAAa,UAElB,OAAO,oBAAoB,OAAO;CAGpC,OAAO;AACT"}
1
+ {"version":3,"file":"middleware.js","names":[],"sources":["../../../src/define/middleware.ts"],"sourcesContent":["import { createTaserCompatHandler, type Awaitable } from \"@taserjs/router-core\";\n\nimport type { ReturnsMap } from \"../types/returns.js\";\nimport type {\n AppContext,\n ExtractState,\n IsUnknown,\n MiddlewareReturnFromParts,\n MiddlewareUnit,\n NextFn,\n StandaloneMiddlewareContext,\n} from \"../types/units.js\";\nimport type { Schema } from \"../types/schema.js\";\n\ntype HonoMiddlewareHandler = Parameters<typeof createTaserCompatHandler>[0];\n\ntype HonoMiddlewareUnit = MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>>;\n\nexport type DefineMiddlewareOptions<\n TState = unknown,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TReturns extends ReturnsMap = {},\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n TAppContext extends Record<string, unknown> = AppContext,\n R = unknown,\n> = {\n query?: Schema<TQuery, TQueryIn>;\n params?: Schema<TParams, TParamsIn>;\n body?: Schema<TBody, TBodyIn>;\n returns?: TReturns;\n handler: (\n ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext>,\n next: NextFn<NoInfer<TState>>,\n ) => Awaitable<R>;\n};\n\nexport function defineMiddleware(middleware: HonoMiddlewareHandler): HonoMiddlewareUnit;\n\nexport function defineMiddleware<\n TState = unknown,\n TAppContext extends Record<string, unknown> = AppContext,\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 options: DefineMiddlewareOptions<\n TState,\n TQuery,\n TParams,\n TBody,\n TReturns,\n TQueryIn,\n TParamsIn,\n TBodyIn,\n TAppContext,\n R\n >,\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>;\n\nexport function defineMiddleware(\n options:\n | HonoMiddlewareHandler\n | DefineMiddlewareOptions<any, any, any, any, any, any, any, any, any, any>,\n): unknown {\n if (typeof options === \"function\") {\n const honoMiddleware = options as HonoMiddlewareHandler;\n return defineMiddleware({\n handler: (ctx, next) => createTaserCompatHandler(honoMiddleware)(ctx, next),\n });\n }\n\n const unit = {\n ...options,\n __middlewareAcc: undefined as unknown,\n ...(options.returns ? { __returns: options.returns } : {}),\n };\n\n return unit;\n}\n"],"mappings":";;AA+EA,SAAgB,iBACd,SAGS;CACT,IAAI,OAAO,YAAY,YAAY;EACjC,MAAM,iBAAiB;EACvB,OAAO,iBAAiB,EACtB,UAAU,KAAK,SAAS,yBAAyB,cAAc,CAAC,CAAC,KAAK,IAAI,EAC5E,CAAC;CACH;CAQA,OAAO;EALL,GAAG;EACH,iBAAiB,KAAA;EACjB,GAAI,QAAQ,UAAU,EAAE,WAAW,QAAQ,QAAQ,IAAI,CAAC;CAGnD;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","names":[],"sources":["../../../src/define/validators.ts"],"sourcesContent":["import type { Schema } from '../types/schema.js'\nimport { SCHEMA_KEYS, type SchemaKey } from '../constants.js'\n\nexport type SchemaValidators = {\n query?: Schema<unknown>\n params?: Schema<unknown>\n body?: Schema<unknown>\n}\n\nexport function pickDefinedSchemas(\n source: SchemaValidators,\n keyMap?: Partial<Record<SchemaKey, string>>,\n): Record<string, Schema<unknown>> {\n const result: Record<string, Schema<unknown>> = {}\n for (const key of SCHEMA_KEYS) {\n const value = source[key]\n if (value !== undefined) {\n result[keyMap?.[key] ?? key] = value\n }\n }\n return result\n}\n"],"mappings":";;AASA,SAAgB,mBACd,QACA,QACiC;CACjC,MAAM,SAA0C,CAAC;CACjD,KAAK,MAAM,OAAO,aAAa;EAC7B,MAAM,QAAQ,OAAO;EACrB,IAAI,UAAU,KAAA,GACZ,OAAO,SAAS,QAAQ,OAAO;CAEnC;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"validators.js","names":[],"sources":["../../../src/define/validators.ts"],"sourcesContent":["import type { Schema } from \"../types/schema.js\";\nimport { SCHEMA_KEYS, type SchemaKey } from \"../constants.js\";\n\nexport type SchemaValidators = {\n query?: Schema<unknown>;\n params?: Schema<unknown>;\n body?: Schema<unknown>;\n};\n\nexport function pickDefinedSchemas(\n source: SchemaValidators,\n keyMap?: Partial<Record<SchemaKey, string>>,\n): Record<string, Schema<unknown>> {\n const result: Record<string, Schema<unknown>> = {};\n for (const key of SCHEMA_KEYS) {\n const value = source[key];\n if (value !== undefined) {\n result[keyMap?.[key] ?? key] = value;\n }\n }\n return result;\n}\n"],"mappings":";;AASA,SAAgB,mBACd,QACA,QACiC;CACjC,MAAM,SAA0C,CAAC;CACjD,KAAK,MAAM,OAAO,aAAa;EAC7B,MAAM,QAAQ,OAAO;EACrB,IAAI,UAAU,KAAA,GACZ,OAAO,SAAS,QAAQ,OAAO;CAEnC;CACA,OAAO;AACT"}
@@ -7,7 +7,7 @@ type WithoutBodyOptions<TQuery, TParams, TQueryIn = unknown, TParamsIn = unknown
7
7
  type WithBodyOptions<TQuery, TParams, TBody, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown> = WithoutBodyOptions<TQuery, TParams, TQueryIn, TParamsIn> & {
8
8
  body?: Schema<TBody, TBodyIn>;
9
9
  };
10
- export type CreateWithoutBodyRoute<M extends 'GET' | 'DELETE' | 'OPTIONS' | 'HEAD', TAppContext extends Record<string, unknown> = AppContext> = {
10
+ export type CreateWithoutBodyRoute<M extends "GET" | "DELETE" | "OPTIONS" | "HEAD", TAppContext extends Record<string, unknown> = AppContext> = {
11
11
  <const Path extends RoutePath>(path: Path): RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;
12
12
  <const Path extends RoutePath, TQuery = unknown, TParams = unknown, TQueryIn = unknown, TParamsIn = unknown>(path: Path, options: WithoutBodyOptions<TQuery, TParams, TQueryIn, TParamsIn>): RouteBuilder<Path, M, readonly [], {
13
13
  query: TQuery;
@@ -16,7 +16,7 @@ export type CreateWithoutBodyRoute<M extends 'GET' | 'DELETE' | 'OPTIONS' | 'HEA
16
16
  paramsIn: TParamsIn;
17
17
  }, {}, TAppContext>;
18
18
  };
19
- export type CreateWithBodyRoute<M extends 'POST' | 'PUT' | 'PATCH', TAppContext extends Record<string, unknown> = AppContext> = {
19
+ export type CreateWithBodyRoute<M extends "POST" | "PUT" | "PATCH", TAppContext extends Record<string, unknown> = AppContext> = {
20
20
  <const Path extends RoutePath>(path: Path): RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;
21
21
  <const Path extends RoutePath, TQuery = unknown, TParams = unknown, TBody = unknown, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown>(path: Path, options: WithBodyOptions<TQuery, TParams, TBody, TQueryIn, TParamsIn, TBodyIn>): RouteBuilder<Path, M, readonly [], {
22
22
  query: TQuery;
@@ -1 +1 @@
1
- {"version":3,"file":"factories.js","names":[],"sources":["../../src/factories.ts"],"sourcesContent":["import { createRouteBuilder } from './route.js'\nimport type { RouteBuilder, RoutePath, Schema } from './types/index.js'\nimport type { AppContext, HttpMethod } from './types/units.js'\n\ntype WithoutBodyOptions<TQuery, TParams, TQueryIn = unknown, TParamsIn = unknown> = {\n query?: Schema<TQuery, TQueryIn>\n params?: Schema<TParams, TParamsIn>\n}\n\ntype WithBodyOptions<\n TQuery,\n TParams,\n TBody,\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n> = WithoutBodyOptions<TQuery, TParams, TQueryIn, TParamsIn> & {\n body?: Schema<TBody, TBodyIn>\n}\n\nexport type CreateWithoutBodyRoute<\n M extends 'GET' | 'DELETE' | 'OPTIONS' | 'HEAD',\n TAppContext extends Record<string, unknown> = AppContext,\n> = {\n <const Path extends RoutePath>(path: Path): RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>\n <\n const Path extends RoutePath,\n TQuery = unknown,\n TParams = unknown,\n TQueryIn = unknown,\n TParamsIn = unknown,\n >(\n path: Path,\n options: WithoutBodyOptions<TQuery, TParams, TQueryIn, TParamsIn>,\n ): RouteBuilder<\n Path,\n M,\n readonly [],\n {\n query: TQuery\n params: TParams\n queryIn: TQueryIn\n paramsIn: TParamsIn\n },\n {},\n TAppContext\n >\n}\n\nexport type CreateWithBodyRoute<\n M extends 'POST' | 'PUT' | 'PATCH',\n TAppContext extends Record<string, unknown> = AppContext,\n> = {\n <const Path extends RoutePath>(path: Path): RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>\n <\n const Path extends RoutePath,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n >(\n path: Path,\n options: WithBodyOptions<TQuery, TParams, TBody, TQueryIn, TParamsIn, TBodyIn>,\n ): RouteBuilder<\n Path,\n M,\n readonly [],\n {\n query: TQuery\n params: TParams\n body: TBody\n queryIn: TQueryIn\n paramsIn: TParamsIn\n bodyIn: TBodyIn\n },\n {},\n TAppContext\n >\n}\n\nexport type CreateAnyRoute<TAppContext extends Record<string, unknown> = AppContext> = {\n <const Path extends RoutePath, const Methods extends readonly HttpMethod[]>(\n path: Path,\n methods: Methods,\n ): RouteBuilder<Path, Methods[number], readonly [], {}, {}, TAppContext>\n <\n const Path extends RoutePath,\n const Methods extends readonly HttpMethod[],\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n >(\n path: Path,\n methods: Methods,\n options: WithBodyOptions<TQuery, TParams, TBody, TQueryIn, TParamsIn, TBodyIn>,\n ): RouteBuilder<\n Path,\n Methods[number],\n readonly [],\n {\n query: TQuery\n params: TParams\n body: TBody\n queryIn: TQueryIn\n paramsIn: TParamsIn\n bodyIn: TBodyIn\n },\n {},\n TAppContext\n >\n}\n\nexport type CreateAllRoute<TAppContext extends Record<string, unknown> = AppContext> = {\n <const Path extends RoutePath>(path: Path): RouteBuilder<Path, HttpMethod, readonly [], {}, {}, TAppContext>\n <\n const Path extends RoutePath,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n >(\n path: Path,\n options: WithBodyOptions<TQuery, TParams, TBody, TQueryIn, TParamsIn, TBodyIn>,\n ): RouteBuilder<\n Path,\n HttpMethod,\n readonly [],\n {\n query: TQuery\n params: TParams\n body: TBody\n queryIn: TQueryIn\n paramsIn: TParamsIn\n bodyIn: TBodyIn\n },\n {},\n TAppContext\n >\n}\n\nfunction createWithoutBodyRoute<M extends 'GET' | 'DELETE' | 'OPTIONS' | 'HEAD'>(\n method: M,\n): CreateWithoutBodyRoute<M> {\n return ((path: string, options?: WithoutBodyOptions<unknown, unknown>) =>\n createRouteBuilder(path, method, options)\n ) as unknown as CreateWithoutBodyRoute<M>\n}\n\nfunction createWithBodyRoute<M extends 'POST' | 'PUT' | 'PATCH'>(\n method: M,\n): CreateWithBodyRoute<M> {\n return ((path: string, options?: WithBodyOptions<unknown, unknown, unknown>) =>\n createRouteBuilder(path, method, options)\n ) as unknown as CreateWithBodyRoute<M>\n}\n\nexport const createGetRoute = createWithoutBodyRoute('GET')\nexport const createDeleteRoute = createWithoutBodyRoute('DELETE')\nexport const createOptionsRoute = createWithoutBodyRoute('OPTIONS')\nexport const createHeadRoute = createWithoutBodyRoute('HEAD')\nexport const createPostRoute = createWithBodyRoute('POST')\nexport const createPutRoute = createWithBodyRoute('PUT')\nexport const createPatchRoute = createWithBodyRoute('PATCH')\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\nexport const createAnyRoute: CreateAnyRoute = ((\n path: string,\n methods: readonly HttpMethod[],\n options?: WithBodyOptions<unknown, unknown, unknown>,\n) => createRouteBuilder(path, 'ANY', options, methods)) as unknown as CreateAnyRoute\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\nexport const createAllRoute: CreateAllRoute = ((\n path: string,\n options?: WithBodyOptions<unknown, unknown, unknown>,\n) => createRouteBuilder(path, 'ALL', options)) as unknown as CreateAllRoute\n"],"mappings":";;AAmJA,SAAS,uBACP,QAC2B;CAC3B,SAAS,MAAc,YACrB,mBAAmB,MAAM,QAAQ,OAAO;AAE5C;AAEA,SAAS,oBACP,QACwB;CACxB,SAAS,MAAc,YACrB,mBAAmB,MAAM,QAAQ,OAAO;AAE5C;AAEA,IAAa,iBAAiB,uBAAuB,KAAK;AAC1D,IAAa,oBAAoB,uBAAuB,QAAQ;AAChE,IAAa,qBAAqB,uBAAuB,SAAS;AAClE,IAAa,kBAAkB,uBAAuB,MAAM;AAC5D,IAAa,kBAAkB,oBAAoB,MAAM;AACzD,IAAa,iBAAiB,oBAAoB,KAAK;AACvD,IAAa,mBAAmB,oBAAoB,OAAO;AAG3D,IAAa,mBACX,MACA,SACA,YACG,mBAAmB,MAAM,OAAO,SAAS,OAAO;AAGrD,IAAa,mBACX,MACA,YACG,mBAAmB,MAAM,OAAO,OAAO"}
1
+ {"version":3,"file":"factories.js","names":[],"sources":["../../src/factories.ts"],"sourcesContent":["import { createRouteBuilder } from \"./route.js\";\nimport type { RouteBuilder, RoutePath, Schema } from \"./types/index.js\";\nimport type { AppContext, HttpMethod } from \"./types/units.js\";\n\ntype WithoutBodyOptions<TQuery, TParams, TQueryIn = unknown, TParamsIn = unknown> = {\n query?: Schema<TQuery, TQueryIn>;\n params?: Schema<TParams, TParamsIn>;\n};\n\ntype WithBodyOptions<\n TQuery,\n TParams,\n TBody,\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n> = WithoutBodyOptions<TQuery, TParams, TQueryIn, TParamsIn> & {\n body?: Schema<TBody, TBodyIn>;\n};\n\nexport type CreateWithoutBodyRoute<\n M extends \"GET\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\",\n TAppContext extends Record<string, unknown> = AppContext,\n> = {\n <const Path extends RoutePath>(\n path: Path,\n ): RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;\n <\n const Path extends RoutePath,\n TQuery = unknown,\n TParams = unknown,\n TQueryIn = unknown,\n TParamsIn = unknown,\n >(\n path: Path,\n options: WithoutBodyOptions<TQuery, TParams, TQueryIn, TParamsIn>,\n ): RouteBuilder<\n Path,\n M,\n readonly [],\n {\n query: TQuery;\n params: TParams;\n queryIn: TQueryIn;\n paramsIn: TParamsIn;\n },\n {},\n TAppContext\n >;\n};\n\nexport type CreateWithBodyRoute<\n M extends \"POST\" | \"PUT\" | \"PATCH\",\n TAppContext extends Record<string, unknown> = AppContext,\n> = {\n <const Path extends RoutePath>(\n path: Path,\n ): RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;\n <\n const Path extends RoutePath,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n >(\n path: Path,\n options: WithBodyOptions<TQuery, TParams, TBody, TQueryIn, TParamsIn, TBodyIn>,\n ): RouteBuilder<\n Path,\n M,\n readonly [],\n {\n query: TQuery;\n params: TParams;\n body: TBody;\n queryIn: TQueryIn;\n paramsIn: TParamsIn;\n bodyIn: TBodyIn;\n },\n {},\n TAppContext\n >;\n};\n\nexport type CreateAnyRoute<TAppContext extends Record<string, unknown> = AppContext> = {\n <const Path extends RoutePath, const Methods extends readonly HttpMethod[]>(\n path: Path,\n methods: Methods,\n ): RouteBuilder<Path, Methods[number], readonly [], {}, {}, TAppContext>;\n <\n const Path extends RoutePath,\n const Methods extends readonly HttpMethod[],\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n >(\n path: Path,\n methods: Methods,\n options: WithBodyOptions<TQuery, TParams, TBody, TQueryIn, TParamsIn, TBodyIn>,\n ): RouteBuilder<\n Path,\n Methods[number],\n readonly [],\n {\n query: TQuery;\n params: TParams;\n body: TBody;\n queryIn: TQueryIn;\n paramsIn: TParamsIn;\n bodyIn: TBodyIn;\n },\n {},\n TAppContext\n >;\n};\n\nexport type CreateAllRoute<TAppContext extends Record<string, unknown> = AppContext> = {\n <const Path extends RoutePath>(\n path: Path,\n ): RouteBuilder<Path, HttpMethod, readonly [], {}, {}, TAppContext>;\n <\n const Path extends RoutePath,\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n >(\n path: Path,\n options: WithBodyOptions<TQuery, TParams, TBody, TQueryIn, TParamsIn, TBodyIn>,\n ): RouteBuilder<\n Path,\n HttpMethod,\n readonly [],\n {\n query: TQuery;\n params: TParams;\n body: TBody;\n queryIn: TQueryIn;\n paramsIn: TParamsIn;\n bodyIn: TBodyIn;\n },\n {},\n TAppContext\n >;\n};\n\nfunction createWithoutBodyRoute<M extends \"GET\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\">(\n method: M,\n): CreateWithoutBodyRoute<M> {\n return ((path: string, options?: WithoutBodyOptions<unknown, unknown>) =>\n createRouteBuilder(path, method, options)) as unknown as CreateWithoutBodyRoute<M>;\n}\n\nfunction createWithBodyRoute<M extends \"POST\" | \"PUT\" | \"PATCH\">(\n method: M,\n): CreateWithBodyRoute<M> {\n return ((path: string, options?: WithBodyOptions<unknown, unknown, unknown>) =>\n createRouteBuilder(path, method, options)) as unknown as CreateWithBodyRoute<M>;\n}\n\nexport const createGetRoute = createWithoutBodyRoute(\"GET\");\nexport const createDeleteRoute = createWithoutBodyRoute(\"DELETE\");\nexport const createOptionsRoute = createWithoutBodyRoute(\"OPTIONS\");\nexport const createHeadRoute = createWithoutBodyRoute(\"HEAD\");\nexport const createPostRoute = createWithBodyRoute(\"POST\");\nexport const createPutRoute = createWithBodyRoute(\"PUT\");\nexport const createPatchRoute = createWithBodyRoute(\"PATCH\");\n\nexport const createAnyRoute: CreateAnyRoute = ((\n path: string,\n methods: readonly HttpMethod[],\n options?: WithBodyOptions<unknown, unknown, unknown>,\n) => createRouteBuilder(path, \"ANY\", options, methods)) as unknown as CreateAnyRoute;\n\nexport const createAllRoute: CreateAllRoute = ((\n path: string,\n options?: WithBodyOptions<unknown, unknown, unknown>,\n) => createRouteBuilder(path, \"ALL\", options)) as unknown as CreateAllRoute;\n"],"mappings":";;AAyJA,SAAS,uBACP,QAC2B;CAC3B,SAAS,MAAc,YACrB,mBAAmB,MAAM,QAAQ,OAAO;AAC5C;AAEA,SAAS,oBACP,QACwB;CACxB,SAAS,MAAc,YACrB,mBAAmB,MAAM,QAAQ,OAAO;AAC5C;AAEA,IAAa,iBAAiB,uBAAuB,KAAK;AAC1D,IAAa,oBAAoB,uBAAuB,QAAQ;AAChE,IAAa,qBAAqB,uBAAuB,SAAS;AAClE,IAAa,kBAAkB,uBAAuB,MAAM;AAC5D,IAAa,kBAAkB,oBAAoB,MAAM;AACzD,IAAa,iBAAiB,oBAAoB,KAAK;AACvD,IAAa,mBAAmB,oBAAoB,OAAO;AAE3D,IAAa,mBACX,MACA,SACA,YACG,mBAAmB,MAAM,OAAO,SAAS,OAAO;AAErD,IAAa,mBACX,MACA,YACG,mBAAmB,MAAM,OAAO,OAAO"}
@@ -1,11 +1,11 @@
1
1
  export type { RouterRegister } from './register.js';
2
2
  export type { InferInput, InferOutput, Method, PathParams, ReturnsMap, RoutePath, Schema, Simplify, } from './types/index.js';
3
3
  export type { ContextDefinition, CreateContextArgs, CreateTaserAppOptions, InferAppContext, InferAppManifest, OnErrorOptions, RouteManifestShape, TaserHandler, } from './types/app.js';
4
- export { isReplyResult, reply, ValidationError, validationErrorSchema, } from '@taserjs/router-utils';
4
+ export { isReplyResult, reply, stream, ValidationError, validationErrorSchema, } from '@taserjs/router-utils';
5
5
  export type { ReplyBodyKind, ReplyOf, ResponseValidationFailureHandler, SuccessReplyData, SuccessStatusCode, } from '@taserjs/router-utils';
6
6
  export { createAnyRoute, createAllRoute } from './factories.js';
7
7
  export { createTaserApp, TaserRouter } from './taser-router.js';
8
- export { TaserApp, TaserMountedApp, TaserNativeBound } from './taser-app.js';
8
+ export { TaserApp, TaserNativeBound } from './taser-app.js';
9
9
  export { createContext } from './create-context.js';
10
10
  export { defineHandler } from './define/handler.js';
11
11
  export { defineMiddleware } from './define/middleware.js';
package/dist/esm/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { createAllRoute, createAnyRoute } from "./factories.js";
2
2
  import { defineHandler } from "./define/handler.js";
3
- import { defineMiddleware } from "./define/middleware.js";
4
- import { TaserApp, TaserMountedApp, TaserNativeBound } from "./taser-app.js";
3
+ import { TaserApp, TaserNativeBound } from "./taser-app.js";
5
4
  import { TaserRouter, createTaserApp } from "./taser-router.js";
6
5
  import { createContext } from "./create-context.js";
7
- import { ValidationError, isReplyResult, reply, validationErrorSchema } from "@taserjs/router-utils";
8
- export { TaserApp, TaserMountedApp, TaserNativeBound, TaserRouter, ValidationError, createAllRoute, createAnyRoute, createContext, createTaserApp, defineHandler, defineMiddleware, isReplyResult, reply, validationErrorSchema };
6
+ import { defineMiddleware } from "./define/middleware.js";
7
+ import { ValidationError, isReplyResult, reply, stream, validationErrorSchema } from "@taserjs/router-utils";
8
+ export { TaserApp, TaserNativeBound, TaserRouter, ValidationError, createAllRoute, createAnyRoute, createContext, createTaserApp, defineHandler, defineMiddleware, isReplyResult, reply, stream, validationErrorSchema };
@@ -1,4 +1,4 @@
1
- import { wrapHonoMiddleware } from "./auth.js";
1
+ import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { bodyLimit as bodyLimit$1 } from "hono/body-limit";
3
3
  //#region src/middleware/body-limit.ts
4
4
  var honoBodyLimitMiddleware = wrapHonoMiddleware(bodyLimit$1);
@@ -1 +1 @@
1
- {"version":3,"file":"body-limit.js","names":[],"sources":["../../../src/middleware/body-limit.ts"],"sourcesContent":["import { bodyLimit as honoBodyLimit } from 'hono/body-limit'\n\nimport { wrapHonoMiddleware } from './auth.js'\n\nconst honoBodyLimitMiddleware = wrapHonoMiddleware(honoBodyLimit)\n\nexport function bodyLimit(...args: Parameters<typeof honoBodyLimit>) {\n return honoBodyLimitMiddleware(...args)\n}\n\nexport type BodyLimitOptions = Parameters<typeof honoBodyLimit>[0]\n"],"mappings":";;;AAIA,IAAM,0BAA0B,mBAAmB,WAAa;AAEhE,SAAgB,UAAU,GAAG,MAAwC;CACnE,OAAO,wBAAwB,GAAG,IAAI;AACxC"}
1
+ {"version":3,"file":"body-limit.js","names":[],"sources":["../../../src/middleware/body-limit.ts"],"sourcesContent":["import { bodyLimit as honoBodyLimit } from \"hono/body-limit\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoBodyLimitMiddleware = wrapHonoMiddleware(honoBodyLimit);\n\nexport function bodyLimit(...args: Parameters<typeof honoBodyLimit>) {\n return honoBodyLimitMiddleware(...args);\n}\n\nexport type BodyLimitOptions = Parameters<typeof honoBodyLimit>[0];\n"],"mappings":";;;AAIA,IAAM,0BAA0B,mBAAmB,WAAa;AAEhE,SAAgB,UAAU,GAAG,MAAwC;CACnE,OAAO,wBAAwB,GAAG,IAAI;AACxC"}
@@ -1,4 +1,4 @@
1
- import { wrapHonoMiddleware } from "./auth.js";
1
+ import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { compress as compress$1 } from "hono/compress";
3
3
  //#region src/middleware/compress.ts
4
4
  var honoCompressMiddleware = wrapHonoMiddleware(compress$1);
@@ -1 +1 @@
1
- {"version":3,"file":"compress.js","names":[],"sources":["../../../src/middleware/compress.ts"],"sourcesContent":["import { compress as honoCompress } from 'hono/compress'\n\nimport { wrapHonoMiddleware } from './auth.js'\n\nconst honoCompressMiddleware = wrapHonoMiddleware(honoCompress)\n\nexport function compress(...args: Parameters<typeof honoCompress>) {\n return honoCompressMiddleware(...args)\n}\n\nexport type CompressOptions = NonNullable<Parameters<typeof honoCompress>[0]>\n"],"mappings":";;;AAIA,IAAM,yBAAyB,mBAAmB,UAAY;AAE9D,SAAgB,SAAS,GAAG,MAAuC;CACjE,OAAO,uBAAuB,GAAG,IAAI;AACvC"}
1
+ {"version":3,"file":"compress.js","names":[],"sources":["../../../src/middleware/compress.ts"],"sourcesContent":["import { compress as honoCompress } from \"hono/compress\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoCompressMiddleware = wrapHonoMiddleware(honoCompress);\n\nexport function compress(...args: Parameters<typeof honoCompress>) {\n return honoCompressMiddleware(...args);\n}\n\nexport type CompressOptions = NonNullable<Parameters<typeof honoCompress>[0]>;\n"],"mappings":";;;AAIA,IAAM,yBAAyB,mBAAmB,UAAY;AAE9D,SAAgB,SAAS,GAAG,MAAuC;CACjE,OAAO,uBAAuB,GAAG,IAAI;AACvC"}
@@ -1,4 +1,4 @@
1
- import { wrapHonoMiddleware } from "./auth.js";
1
+ import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { cors as cors$1 } from "hono/cors";
3
3
  //#region src/middleware/cors.ts
4
4
  var honoCorsMiddleware = wrapHonoMiddleware(cors$1);
@@ -1 +1 @@
1
- {"version":3,"file":"cors.js","names":[],"sources":["../../../src/middleware/cors.ts"],"sourcesContent":["import { cors as honoCors } from 'hono/cors'\n\nimport { wrapHonoMiddleware } from './auth.js'\n\nconst honoCorsMiddleware = wrapHonoMiddleware(honoCors)\n\nexport function cors(...args: Parameters<typeof honoCors>) {\n return honoCorsMiddleware(...args)\n}\n\nexport type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>\n"],"mappings":";;;AAIA,IAAM,qBAAqB,mBAAmB,MAAQ;AAEtD,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAmB,GAAG,IAAI;AACnC"}
1
+ {"version":3,"file":"cors.js","names":[],"sources":["../../../src/middleware/cors.ts"],"sourcesContent":["import { cors as honoCors } from \"hono/cors\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoCorsMiddleware = wrapHonoMiddleware(honoCors);\n\nexport function cors(...args: Parameters<typeof honoCors>) {\n return honoCorsMiddleware(...args);\n}\n\nexport type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>;\n"],"mappings":";;;AAIA,IAAM,qBAAqB,mBAAmB,MAAQ;AAEtD,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAmB,GAAG,IAAI;AACnC"}
@@ -1,4 +1,4 @@
1
- import { wrapHonoMiddleware } from "./auth.js";
1
+ import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { csrf as csrf$1 } from "hono/csrf";
3
3
  //#region src/middleware/csrf.ts
4
4
  var honoCsrfMiddleware = wrapHonoMiddleware(csrf$1);
@@ -1 +1 @@
1
- {"version":3,"file":"csrf.js","names":[],"sources":["../../../src/middleware/csrf.ts"],"sourcesContent":["import { csrf as honoCsrf } from 'hono/csrf'\n\nimport { wrapHonoMiddleware } from './auth.js'\n\nconst honoCsrfMiddleware = wrapHonoMiddleware(honoCsrf)\n\nexport function csrf(...args: Parameters<typeof honoCsrf>) {\n return honoCsrfMiddleware(...args)\n}\n\nexport type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>\n"],"mappings":";;;AAIA,IAAM,qBAAqB,mBAAmB,MAAQ;AAEtD,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAmB,GAAG,IAAI;AACnC"}
1
+ {"version":3,"file":"csrf.js","names":[],"sources":["../../../src/middleware/csrf.ts"],"sourcesContent":["import { csrf as honoCsrf } from \"hono/csrf\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoCsrfMiddleware = wrapHonoMiddleware(honoCsrf);\n\nexport function csrf(...args: Parameters<typeof honoCsrf>) {\n return honoCsrfMiddleware(...args);\n}\n\nexport type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>;\n"],"mappings":";;;AAIA,IAAM,qBAAqB,mBAAmB,MAAQ;AAEtD,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAmB,GAAG,IAAI;AACnC"}
@@ -1,4 +1,4 @@
1
- import { wrapHonoMiddleware } from "./auth.js";
1
+ import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { etag as etag$1 } from "hono/etag";
3
3
  //#region src/middleware/etag.ts
4
4
  var honoEtagMiddleware = wrapHonoMiddleware(etag$1);
@@ -1 +1 @@
1
- {"version":3,"file":"etag.js","names":[],"sources":["../../../src/middleware/etag.ts"],"sourcesContent":["import { etag as honoEtag } from 'hono/etag'\n\nimport { wrapHonoMiddleware } from './auth.js'\n\nconst honoEtagMiddleware = wrapHonoMiddleware(honoEtag)\n\nexport function etag(...args: Parameters<typeof honoEtag>) {\n return honoEtagMiddleware(...args)\n}\n\nexport type EtagOptions = NonNullable<Parameters<typeof honoEtag>[0]>\n"],"mappings":";;;AAIA,IAAM,qBAAqB,mBAAmB,MAAQ;AAEtD,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAmB,GAAG,IAAI;AACnC"}
1
+ {"version":3,"file":"etag.js","names":[],"sources":["../../../src/middleware/etag.ts"],"sourcesContent":["import { etag as honoEtag } from \"hono/etag\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoEtagMiddleware = wrapHonoMiddleware(honoEtag);\n\nexport function etag(...args: Parameters<typeof honoEtag>) {\n return honoEtagMiddleware(...args);\n}\n\nexport type EtagOptions = NonNullable<Parameters<typeof honoEtag>[0]>;\n"],"mappings":";;;AAIA,IAAM,qBAAqB,mBAAmB,MAAQ;AAEtD,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAmB,GAAG,IAAI;AACnC"}
@@ -1,15 +1,14 @@
1
1
  import { jwk as honoJwk } from 'hono/jwk';
2
- import { AuthMiddlewareUnit } from './auth.js';
3
- import { InferOutput, Schema } from '../types/schema.js';
2
+ import { JwtMiddlewareUnit } from './jwt.js';
4
3
  export type JwkOptions = Parameters<typeof honoJwk>[0];
5
- export type JwkRequestInit = Pick<RequestInit, 'headers'>;
4
+ export type JwkRequestInit = Pick<RequestInit, "headers">;
6
5
  export type JwkMiddlewareOptions = JwkOptions & {
7
6
  /** Allow `http://` JWKS URLs (local dev). Default false — requires `https://`. */
8
7
  allowInsecure?: boolean;
9
8
  };
10
9
  /**
11
10
  * JWK auth middleware. Invalid or missing tokens return **401** (Hono).
12
- * Valid tokens whose payload fails `payloadSchema` return **403**.
11
+ * Successfully decoded payload is placed in `ctx.state.jwtPayload`.
13
12
  * Static `jwks_uri` must use HTTPS unless `allowInsecure: true`.
14
13
  */
15
- export declare function jwk<TPayload>(payloadSchema: Schema<TPayload>, options: JwkMiddlewareOptions, init?: JwkRequestInit): AuthMiddlewareUnit<InferOutput<Schema<TPayload>>>;
14
+ export declare function jwk<TPayload = Record<string, unknown>>(options: JwkMiddlewareOptions, init?: JwkRequestInit): JwtMiddlewareUnit<TPayload>;
@@ -1,4 +1,5 @@
1
- import { createAuthMiddleware } from "./auth.js";
1
+ import { defineMiddleware } from "../define/middleware.js";
2
+ import { createTaserCompatHandler } from "@taserjs/router-core";
2
3
  import { jwk as jwk$1 } from "hono/jwk";
3
4
  //#region src/middleware/jwk.ts
4
5
  function assertJwksScheme(jwksUri, allowInsecure) {
@@ -9,14 +10,20 @@ function assertJwksScheme(jwksUri, allowInsecure) {
9
10
  }
10
11
  /**
11
12
  * JWK auth middleware. Invalid or missing tokens return **401** (Hono).
12
- * Valid tokens whose payload fails `payloadSchema` return **403**.
13
+ * Successfully decoded payload is placed in `ctx.state.jwtPayload`.
13
14
  * Static `jwks_uri` must use HTTPS unless `allowInsecure: true`.
14
15
  */
15
- function jwk(payloadSchema, options, init) {
16
+ function jwk(options, init) {
16
17
  const jwksUri = options.jwks_uri;
17
18
  if (typeof jwksUri === "string") assertJwksScheme(jwksUri, options.allowInsecure ?? false);
18
19
  const { allowInsecure: _allowInsecure, ...honoOptions } = options;
19
- return createAuthMiddleware(payloadSchema, jwk$1(honoOptions, init?.headers !== void 0 ? { headers: init.headers } : void 0));
20
+ const honoMw = jwk$1(honoOptions, init?.headers !== void 0 ? { headers: init.headers } : void 0);
21
+ return defineMiddleware({ handler: (ctx, next) => {
22
+ return createTaserCompatHandler(honoMw)(ctx, async () => {
23
+ const payload = ctx.var.jwtPayload;
24
+ return next({ jwtPayload: payload });
25
+ });
26
+ } });
20
27
  }
21
28
  //#endregion
22
29
  export { jwk };
@@ -1 +1 @@
1
- {"version":3,"file":"jwk.js","names":[],"sources":["../../../src/middleware/jwk.ts"],"sourcesContent":["import { jwk as honoJwk } from 'hono/jwk'\n\nimport { createAuthMiddleware, type AuthMiddlewareUnit } from './auth.js'\nimport type { InferOutput, Schema } from '../types/schema.js'\n\nexport type JwkOptions = Parameters<typeof honoJwk>[0]\n\nexport type JwkRequestInit = Pick<RequestInit, 'headers'>\n\nexport type JwkMiddlewareOptions = JwkOptions & {\n /** Allow `http://` JWKS URLs (local dev). Default false — requires `https://`. */\n allowInsecure?: boolean\n}\n\nfunction assertJwksScheme(jwksUri: string, allowInsecure: boolean): void {\n const scheme = new URL(jwksUri).protocol.replace(':', '')\n if (scheme === 'https') {\n return\n }\n if (scheme === 'http' && allowInsecure) {\n return\n }\n throw new Error(\n `JWKS URL must use https:// (or http:// with allowInsecure: true): \"${jwksUri}\"`,\n )\n}\n\n/**\n * JWK auth middleware. Invalid or missing tokens return **401** (Hono).\n * Valid tokens whose payload fails `payloadSchema` return **403**.\n * Static `jwks_uri` must use HTTPS unless `allowInsecure: true`.\n */\nexport function jwk<TPayload>(\n payloadSchema: Schema<TPayload>,\n options: JwkMiddlewareOptions,\n init?: JwkRequestInit,\n): AuthMiddlewareUnit<InferOutput<Schema<TPayload>>> {\n const jwksUri = options.jwks_uri\n if (typeof jwksUri === 'string') {\n assertJwksScheme(jwksUri, options.allowInsecure ?? false)\n }\n\n const { allowInsecure: _allowInsecure, ...honoOptions } = options\n const safeInit = init?.headers !== undefined ? { headers: init.headers } : undefined\n\n return createAuthMiddleware(payloadSchema, honoJwk(honoOptions, safeInit))\n}\n"],"mappings":";;;AAcA,SAAS,iBAAiB,SAAiB,eAA8B;CACvE,MAAM,SAAS,IAAI,IAAI,OAAO,CAAC,CAAC,SAAS,QAAQ,KAAK,EAAE;CACxD,IAAI,WAAW,SACb;CAEF,IAAI,WAAW,UAAU,eACvB;CAEF,MAAM,IAAI,MACR,sEAAsE,QAAQ,EAChF;AACF;;;;;;AAOA,SAAgB,IACd,eACA,SACA,MACmD;CACnD,MAAM,UAAU,QAAQ;CACxB,IAAI,OAAO,YAAY,UACrB,iBAAiB,SAAS,QAAQ,iBAAiB,KAAK;CAG1D,MAAM,EAAE,eAAe,gBAAgB,GAAG,gBAAgB;CAG1D,OAAO,qBAAqB,eAAe,MAAQ,aAFlC,MAAM,YAAY,KAAA,IAAY,EAAE,SAAS,KAAK,QAAQ,IAAI,KAAA,CAEH,CAAC;AAC3E"}
1
+ {"version":3,"file":"jwk.js","names":[],"sources":["../../../src/middleware/jwk.ts"],"sourcesContent":["import { createTaserCompatHandler } from \"@taserjs/router-core\";\nimport type { MiddlewareHandler } from \"hono\";\nimport { jwk as honoJwk } from \"hono/jwk\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport type { JwtMiddlewareUnit, JwtPayloadState } from \"./jwt.js\";\n\nexport type JwkOptions = Parameters<typeof honoJwk>[0];\n\nexport type JwkRequestInit = Pick<RequestInit, \"headers\">;\n\nexport type JwkMiddlewareOptions = JwkOptions & {\n /** Allow `http://` JWKS URLs (local dev). Default false — requires `https://`. */\n allowInsecure?: boolean;\n};\n\nfunction assertJwksScheme(jwksUri: string, allowInsecure: boolean): void {\n const scheme = new URL(jwksUri).protocol.replace(\":\", \"\");\n if (scheme === \"https\") {\n return;\n }\n if (scheme === \"http\" && allowInsecure) {\n return;\n }\n throw new Error(`JWKS URL must use https:// (or http:// with allowInsecure: true): \"${jwksUri}\"`);\n}\n\n/**\n * JWK auth middleware. Invalid or missing tokens return **401** (Hono).\n * Successfully decoded payload is placed in `ctx.state.jwtPayload`.\n * Static `jwks_uri` must use HTTPS unless `allowInsecure: true`.\n */\nexport function jwk<TPayload = Record<string, unknown>>(\n options: JwkMiddlewareOptions,\n init?: JwkRequestInit,\n): JwtMiddlewareUnit<TPayload> {\n const jwksUri = options.jwks_uri;\n if (typeof jwksUri === \"string\") {\n assertJwksScheme(jwksUri, options.allowInsecure ?? false);\n }\n\n const { allowInsecure: _allowInsecure, ...honoOptions } = options;\n const safeInit = init?.headers !== undefined ? { headers: init.headers } : undefined;\n const honoMw: MiddlewareHandler = honoJwk(honoOptions, safeInit);\n\n return defineMiddleware<JwtPayloadState<TPayload>>({\n handler: (ctx, next) => {\n return createTaserCompatHandler(honoMw)(ctx, async () => {\n const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;\n return next({ jwtPayload: payload as TPayload });\n });\n },\n });\n}\n"],"mappings":";;;;AAgBA,SAAS,iBAAiB,SAAiB,eAA8B;CACvE,MAAM,SAAS,IAAI,IAAI,OAAO,CAAC,CAAC,SAAS,QAAQ,KAAK,EAAE;CACxD,IAAI,WAAW,SACb;CAEF,IAAI,WAAW,UAAU,eACvB;CAEF,MAAM,IAAI,MAAM,sEAAsE,QAAQ,EAAE;AAClG;;;;;;AAOA,SAAgB,IACd,SACA,MAC6B;CAC7B,MAAM,UAAU,QAAQ;CACxB,IAAI,OAAO,YAAY,UACrB,iBAAiB,SAAS,QAAQ,iBAAiB,KAAK;CAG1D,MAAM,EAAE,eAAe,gBAAgB,GAAG,gBAAgB;CAE1D,MAAM,SAA4B,MAAQ,aADzB,MAAM,YAAY,KAAA,IAAY,EAAE,SAAS,KAAK,QAAQ,IAAI,KAAA,CACZ;CAE/D,OAAO,iBAA4C,EACjD,UAAU,KAAK,SAAS;EACtB,OAAO,yBAAyB,MAAM,CAAC,CAAC,KAAK,YAAY;GACvD,MAAM,UAAW,IAAqD,IAAI;GAC1E,OAAO,KAAK,EAAE,YAAY,QAAoB,CAAC;EACjD,CAAC;CACH,EACF,CAAC;AACH"}
@@ -1,10 +1,12 @@
1
1
  import { jwt as honoJwt } from 'hono/jwt';
2
- import { AuthMiddlewareUnit } from './auth.js';
3
- import { InferOutput, Schema } from '../types/schema.js';
2
+ import { MiddlewareReturnFromParts, MiddlewareUnit } from '../types/units.js';
3
+ export type JwtPayloadState<TPayload> = {
4
+ jwtPayload: TPayload;
5
+ };
6
+ export type JwtMiddlewareUnit<TPayload> = MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, JwtPayloadState<TPayload>>>;
4
7
  export type JwtOptions = Parameters<typeof honoJwt>[0];
5
8
  /**
6
9
  * JWT auth middleware. Invalid or missing tokens return **401** (Hono).
7
- * Valid tokens whose payload fails `payloadSchema` return **403**.
8
- * Use optional schema fields for intentionally optional claims.
10
+ * Successfully decoded payload is placed in `ctx.state.jwtPayload`.
9
11
  */
10
- export declare function jwt<TPayload>(payloadSchema: Schema<TPayload>, options: JwtOptions): AuthMiddlewareUnit<InferOutput<Schema<TPayload>>>;
12
+ export declare function jwt<TPayload = Record<string, unknown>>(options: JwtOptions): JwtMiddlewareUnit<TPayload>;
@@ -1,13 +1,19 @@
1
- import { createAuthMiddleware } from "./auth.js";
1
+ import { defineMiddleware } from "../define/middleware.js";
2
+ import { createTaserCompatHandler } from "@taserjs/router-core";
2
3
  import { jwt as jwt$1 } from "hono/jwt";
3
4
  //#region src/middleware/jwt.ts
4
5
  /**
5
6
  * JWT auth middleware. Invalid or missing tokens return **401** (Hono).
6
- * Valid tokens whose payload fails `payloadSchema` return **403**.
7
- * Use optional schema fields for intentionally optional claims.
7
+ * Successfully decoded payload is placed in `ctx.state.jwtPayload`.
8
8
  */
9
- function jwt(payloadSchema, options) {
10
- return createAuthMiddleware(payloadSchema, jwt$1(options));
9
+ function jwt(options) {
10
+ const honoMw = jwt$1(options);
11
+ return defineMiddleware({ handler: (ctx, next) => {
12
+ return createTaserCompatHandler(honoMw)(ctx, async () => {
13
+ const payload = ctx.var.jwtPayload;
14
+ return next({ jwtPayload: payload });
15
+ });
16
+ } });
11
17
  }
12
18
  //#endregion
13
19
  export { jwt };
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.js","names":[],"sources":["../../../src/middleware/jwt.ts"],"sourcesContent":["import { jwt as honoJwt } from 'hono/jwt'\n\nimport { createAuthMiddleware, type AuthMiddlewareUnit } from './auth.js'\nimport type { InferOutput, Schema } from '../types/schema.js'\n\nexport type JwtOptions = Parameters<typeof honoJwt>[0]\n\n/**\n * JWT auth middleware. Invalid or missing tokens return **401** (Hono).\n * Valid tokens whose payload fails `payloadSchema` return **403**.\n * Use optional schema fields for intentionally optional claims.\n */\nexport function jwt<TPayload>(\n payloadSchema: Schema<TPayload>,\n options: JwtOptions,\n): AuthMiddlewareUnit<InferOutput<Schema<TPayload>>> {\n return createAuthMiddleware(payloadSchema, honoJwt(options))\n}\n"],"mappings":";;;;;;;;AAYA,SAAgB,IACd,eACA,SACmD;CACnD,OAAO,qBAAqB,eAAe,MAAQ,OAAO,CAAC;AAC7D"}
1
+ {"version":3,"file":"jwt.js","names":[],"sources":["../../../src/middleware/jwt.ts"],"sourcesContent":["import { createTaserCompatHandler } from \"@taserjs/router-core\";\nimport type { MiddlewareHandler } from \"hono\";\nimport { jwt as honoJwt } from \"hono/jwt\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport type { MiddlewareReturnFromParts, MiddlewareUnit } from \"../types/units.js\";\n\nexport type JwtPayloadState<TPayload> = {\n jwtPayload: TPayload;\n};\n\nexport type JwtMiddlewareUnit<TPayload> = MiddlewareUnit<\n MiddlewareReturnFromParts<unknown, unknown, unknown, JwtPayloadState<TPayload>>\n>;\n\nexport type JwtOptions = Parameters<typeof honoJwt>[0];\n\n/**\n * JWT auth middleware. Invalid or missing tokens return **401** (Hono).\n * Successfully decoded payload is placed in `ctx.state.jwtPayload`.\n */\nexport function jwt<TPayload = Record<string, unknown>>(\n options: JwtOptions,\n): JwtMiddlewareUnit<TPayload> {\n const honoMw: MiddlewareHandler = honoJwt(options);\n return defineMiddleware<JwtPayloadState<TPayload>>({\n handler: (ctx, next) => {\n return createTaserCompatHandler(honoMw)(ctx, async () => {\n const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;\n return next({ jwtPayload: payload as TPayload });\n });\n },\n });\n}\n"],"mappings":";;;;;;;;AAqBA,SAAgB,IACd,SAC6B;CAC7B,MAAM,SAA4B,MAAQ,OAAO;CACjD,OAAO,iBAA4C,EACjD,UAAU,KAAK,SAAS;EACtB,OAAO,yBAAyB,MAAM,CAAC,CAAC,KAAK,YAAY;GACvD,MAAM,UAAW,IAAqD,IAAI;GAC1E,OAAO,KAAK,EAAE,YAAY,QAAoB,CAAC;EACjD,CAAC;CACH,EACF,CAAC;AACH"}
@@ -1,4 +1,4 @@
1
- import { wrapHonoMiddleware } from "./auth.js";
1
+ import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { secureHeaders as secureHeaders$1 } from "hono/secure-headers";
3
3
  //#region src/middleware/secure-headers.ts
4
4
  var honoSecureHeadersMiddleware = wrapHonoMiddleware(secureHeaders$1);
@@ -1 +1 @@
1
- {"version":3,"file":"secure-headers.js","names":[],"sources":["../../../src/middleware/secure-headers.ts"],"sourcesContent":["import { secureHeaders as honoSecureHeaders } from 'hono/secure-headers'\n\nimport { wrapHonoMiddleware } from './auth.js'\n\nconst honoSecureHeadersMiddleware = wrapHonoMiddleware(honoSecureHeaders)\n\nexport function secureHeaders(...args: Parameters<typeof honoSecureHeaders>) {\n return honoSecureHeadersMiddleware(...args)\n}\n\nexport type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>\n"],"mappings":";;;AAIA,IAAM,8BAA8B,mBAAmB,eAAiB;AAExE,SAAgB,cAAc,GAAG,MAA4C;CAC3E,OAAO,4BAA4B,GAAG,IAAI;AAC5C"}
1
+ {"version":3,"file":"secure-headers.js","names":[],"sources":["../../../src/middleware/secure-headers.ts"],"sourcesContent":["import { secureHeaders as honoSecureHeaders } from \"hono/secure-headers\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoSecureHeadersMiddleware = wrapHonoMiddleware(honoSecureHeaders);\n\nexport function secureHeaders(...args: Parameters<typeof honoSecureHeaders>) {\n return honoSecureHeadersMiddleware(...args);\n}\n\nexport type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>;\n"],"mappings":";;;AAIA,IAAM,8BAA8B,mBAAmB,eAAiB;AAExE,SAAgB,cAAc,GAAG,MAA4C;CAC3E,OAAO,4BAA4B,GAAG,IAAI;AAC5C"}
@@ -1,4 +1,4 @@
1
- import { wrapHonoMiddleware } from "./auth.js";
1
+ import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { timing as timing$1 } from "hono/timing";
3
3
  //#region src/middleware/timing.ts
4
4
  var honoTimingMiddleware = wrapHonoMiddleware(timing$1);
@@ -1 +1 @@
1
- {"version":3,"file":"timing.js","names":[],"sources":["../../../src/middleware/timing.ts"],"sourcesContent":["import { timing as honoTiming } from 'hono/timing'\n\nimport { wrapHonoMiddleware } from './auth.js'\n\nconst honoTimingMiddleware = wrapHonoMiddleware(honoTiming)\n\nexport function timing(...args: Parameters<typeof honoTiming>) {\n return honoTimingMiddleware(...args)\n}\n\nexport type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>\n"],"mappings":";;;AAIA,IAAM,uBAAuB,mBAAmB,QAAU;AAE1D,SAAgB,OAAO,GAAG,MAAqC;CAC7D,OAAO,qBAAqB,GAAG,IAAI;AACrC"}
1
+ {"version":3,"file":"timing.js","names":[],"sources":["../../../src/middleware/timing.ts"],"sourcesContent":["import { timing as honoTiming } from \"hono/timing\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoTimingMiddleware = wrapHonoMiddleware(honoTiming);\n\nexport function timing(...args: Parameters<typeof honoTiming>) {\n return honoTimingMiddleware(...args);\n}\n\nexport type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>;\n"],"mappings":";;;AAIA,IAAM,uBAAuB,mBAAmB,QAAU;AAE1D,SAAgB,OAAO,GAAG,MAAqC;CAC7D,OAAO,qBAAqB,GAAG,IAAI;AACrC"}
@@ -0,0 +1,3 @@
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, {}>>;
@@ -0,0 +1,9 @@
1
+ import { defineMiddleware } from "../define/middleware.js";
2
+ //#region src/middleware/wrap-hono.ts
3
+ function wrapHonoMiddleware(honoFactory) {
4
+ return (...args) => defineMiddleware(honoFactory(...args));
5
+ }
6
+ //#endregion
7
+ export { wrapHonoMiddleware };
8
+
9
+ //# sourceMappingURL=wrap-hono.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap-hono.js","names":[],"sources":["../../../src/middleware/wrap-hono.ts"],"sourcesContent":["import 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"],"mappings":";;AAKA,SAAgB,mBACd,aAG4E;CAC5E,QAAQ,GAAG,SAAS,iBAAiB,YAAY,GAAG,IAAI,CAAC;AAC3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","names":[],"sources":["../../src/middleware.ts"],"sourcesContent":["import type { LayoutId, MiddlewareBuilder } from './types/index.js'\nimport type { MiddlewareDefinition } from './types/units.js'\n\nexport function createMiddleware<const Layout extends LayoutId>(\n layout: Layout,\n): MiddlewareBuilder<Layout, readonly []> {\n const entries: MiddlewareDefinition[] = []\n\n const chain = {\n layout,\n middlewares: entries,\n use(definition: MiddlewareDefinition) {\n entries.push(definition)\n return chain\n },\n }\n\n return chain as unknown as MiddlewareBuilder<Layout, readonly []>\n}\n"],"mappings":";AAGA,SAAgB,iBACd,QACwC;CACxC,MAAM,UAAkC,CAAC;CAEzC,MAAM,QAAQ;EACZ;EACA,aAAa;EACb,IAAI,YAAkC;GACpC,QAAQ,KAAK,UAAU;GACvB,OAAO;EACT;CACF;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"middleware.js","names":[],"sources":["../../src/middleware.ts"],"sourcesContent":["import type { LayoutId, MiddlewareBuilder } from \"./types/index.js\";\nimport type { MiddlewareDefinition } from \"./types/units.js\";\n\nexport function createMiddleware<const Layout extends LayoutId>(\n layout: Layout,\n): MiddlewareBuilder<Layout, readonly []> {\n const entries: MiddlewareDefinition[] = [];\n\n const chain = {\n layout,\n middlewares: entries,\n use(definition: MiddlewareDefinition) {\n entries.push(definition);\n return chain;\n },\n };\n\n return chain as unknown as MiddlewareBuilder<Layout, readonly []>;\n}\n"],"mappings":";AAGA,SAAgB,iBACd,QACwC;CACxC,MAAM,UAAkC,CAAC;CAEzC,MAAM,QAAQ;EACZ;EACA,aAAa;EACb,IAAI,YAAkC;GACpC,QAAQ,KAAK,UAAU;GACvB,OAAO;EACT;CACF;CAEA,OAAO;AACT"}
@@ -0,0 +1,2 @@
1
+ export { errorReply, reply, successReply } from '@taserjs/router-utils/reply';
2
+ export type { BinaryBody, BodyKind, FileReplyInit, RedirectInit, ReplyBodyKind, ReplyInit, ReplyOf, SuccessReplyData, } from '@taserjs/router-utils/reply';
@@ -0,0 +1,2 @@
1
+ import { errorReply, reply, successReply } from "@taserjs/router-utils/reply";
2
+ export { errorReply, reply, successReply };
@@ -2,4 +2,4 @@ import { Method, RouteBuilder, RoutePath, ValidatorParts } from './types/index.j
2
2
  import { HttpMethod } from './types/units.js';
3
3
  import { SchemaValidators } from './define/validators.js';
4
4
  /** Shared internal builder — not part of the public `@taserjs/router` API. */
5
- export declare function createRouteBuilder(path: string, method: HttpMethod | 'ANY' | 'ALL', validators?: SchemaValidators, methods?: readonly HttpMethod[]): RouteBuilder<RoutePath, Method, readonly [], ValidatorParts>;
5
+ export declare function createRouteBuilder(path: string, method: HttpMethod | "ANY" | "ALL", validators?: SchemaValidators, methods?: readonly HttpMethod[]): RouteBuilder<RoutePath, Method, readonly [], ValidatorParts>;
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","names":[],"sources":["../../src/route.ts"],"sourcesContent":["import type { StandardSchemaV1 } from '@standard-schema/spec'\nimport {\n collectReturnsFromDefinitions,\n hasInputSchemas,\n mergeReturnsMaps,\n withAuto422,\n} from '@taserjs/router-utils'\n\nimport type { Method, RouteBuilder, RoutePath, ReturnsMap, ValidatorParts } from './types/index.js'\nimport type { HttpMethod, MiddlewareDefinition } from './types/units.js'\nimport { isHandlerUnit } from './types/units.js'\nimport { HANDLER_SCHEMA_KEY_MAP } from './constants.js'\nimport {\n pickDefinedSchemas,\n type SchemaValidators,\n} from './define/validators.js'\n\nfunction toUtilsMap(map: ReturnsMap | undefined): Record<number, StandardSchemaV1> {\n if (!map) {\n return {}\n }\n const out: Record<number, StandardSchemaV1> = {}\n for (const [key, schema] of Object.entries(map)) {\n if (schema !== undefined) {\n out[Number(key)] = schema\n }\n }\n return out\n}\n\nfunction buildEffectiveReturns(args: {\n middlewareReturns: ReturnsMap\n routeReturns: ReturnsMap\n handlerMiddlewareReturns: ReturnsMap\n handlerReturns: ReturnsMap | undefined\n schemas: {\n query?: unknown\n params?: unknown\n body?: unknown\n handlerQuery?: unknown\n handlerParams?: unknown\n handlerBody?: unknown\n middlewares?: readonly MiddlewareDefinition[]\n handlerMiddlewares?: readonly MiddlewareDefinition[]\n }\n}): Record<number, StandardSchemaV1> | undefined {\n const merged = mergeReturnsMaps(\n toUtilsMap(args.middlewareReturns),\n toUtilsMap(args.routeReturns),\n toUtilsMap(args.handlerMiddlewareReturns),\n toUtilsMap(args.handlerReturns),\n )\n const with422 = withAuto422(merged, hasInputSchemas(args.schemas))\n return Object.keys(with422).length > 0 ? with422 : undefined\n}\n\nfunction buildRouteBase(\n path: string,\n method: HttpMethod | 'ANY' | 'ALL',\n methods: readonly HttpMethod[] | undefined,\n middlewares: MiddlewareDefinition[],\n) {\n return {\n path,\n method,\n ...(methods ? { methods: [...methods] } : {}),\n middlewares: [...middlewares],\n }\n}\n\n/** Shared internal builder — not part of the public `@taserjs/router` API. */\nexport function createRouteBuilder(\n path: string,\n method: HttpMethod | 'ANY' | 'ALL',\n validators: SchemaValidators = {},\n methods?: readonly HttpMethod[],\n): RouteBuilder<RoutePath, Method, readonly [], ValidatorParts> {\n const middlewares: MiddlewareDefinition[] = []\n let routeReturns: Record<number, StandardSchemaV1> = {}\n\n const builder = {\n path,\n method,\n returns(map: ReturnsMap) {\n routeReturns = { ...routeReturns, ...toUtilsMap(map) }\n return builder\n },\n use(definition: MiddlewareDefinition) {\n middlewares.push(definition)\n return builder\n },\n handler(fnOrUnit: ((ctx: unknown) => unknown) | unknown) {\n const routeSchemas = pickDefinedSchemas(validators)\n const base = buildRouteBase(path, method, methods, middlewares)\n\n if (isHandlerUnit(fnOrUnit)) {\n const handlerSchemas = pickDefinedSchemas(fnOrUnit, HANDLER_SCHEMA_KEY_MAP)\n const returns = buildEffectiveReturns({\n middlewareReturns: collectReturnsFromDefinitions(middlewares),\n routeReturns: routeReturns,\n handlerMiddlewareReturns: collectReturnsFromDefinitions(fnOrUnit.middlewares),\n handlerReturns: fnOrUnit.returns,\n schemas: {\n ...validators,\n handlerQuery: fnOrUnit.query,\n handlerParams: fnOrUnit.params,\n handlerBody: fnOrUnit.body,\n middlewares,\n handlerMiddlewares: fnOrUnit.middlewares,\n },\n })\n\n return {\n ...base,\n handlerMiddlewares: [...fnOrUnit.middlewares],\n handler: fnOrUnit.handler,\n ...routeSchemas,\n ...handlerSchemas,\n ...(returns ? { returns } : {}),\n }\n }\n\n const returns = buildEffectiveReturns({\n middlewareReturns: collectReturnsFromDefinitions(middlewares),\n routeReturns: routeReturns,\n handlerMiddlewareReturns: {},\n handlerReturns: undefined,\n schemas: {\n ...validators,\n middlewares,\n },\n })\n\n return {\n ...base,\n handlerMiddlewares: [],\n handler: fnOrUnit as (ctx: unknown) => Response | Promise<Response>,\n ...routeSchemas,\n ...(returns ? { returns } : {}),\n }\n },\n }\n\n return builder as unknown as RouteBuilder<RoutePath, Method, readonly [], ValidatorParts>\n}\n"],"mappings":";;;;;AAiBA,SAAS,WAAW,KAA+D;CACjF,IAAI,CAAC,KACH,OAAO,CAAC;CAEV,MAAM,MAAwC,CAAC;CAC/C,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QAAQ,GAAG,GAC5C,IAAI,WAAW,KAAA,GACb,IAAI,OAAO,GAAG,KAAK;CAGvB,OAAO;AACT;AAEA,SAAS,sBAAsB,MAekB;CAO/C,MAAM,UAAU,YAND,iBACb,WAAW,KAAK,iBAAiB,GACjC,WAAW,KAAK,YAAY,GAC5B,WAAW,KAAK,wBAAwB,GACxC,WAAW,KAAK,cAAc,CAEJ,GAAQ,gBAAgB,KAAK,OAAO,CAAC;CACjE,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,SAAS,IAAI,UAAU,KAAA;AACrD;AAEA,SAAS,eACP,MACA,QACA,SACA,aACA;CACA,OAAO;EACL;EACA;EACA,GAAI,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC;EAC3C,aAAa,CAAC,GAAG,WAAW;CAC9B;AACF;;AAGA,SAAgB,mBACd,MACA,QACA,aAA+B,CAAC,GAChC,SAC8D;CAC9D,MAAM,cAAsC,CAAC;CAC7C,IAAI,eAAiD,CAAC;CAEtD,MAAM,UAAU;EACd;EACA;EACA,QAAQ,KAAiB;GACvB,eAAe;IAAE,GAAG;IAAc,GAAG,WAAW,GAAG;GAAE;GACrD,OAAO;EACT;EACA,IAAI,YAAkC;GACpC,YAAY,KAAK,UAAU;GAC3B,OAAO;EACT;EACA,QAAQ,UAAiD;GACvD,MAAM,eAAe,mBAAmB,UAAU;GAClD,MAAM,OAAO,eAAe,MAAM,QAAQ,SAAS,WAAW;GAE9D,IAAI,cAAc,QAAQ,GAAG;IAC3B,MAAM,iBAAiB,mBAAmB,UAAU,sBAAsB;IAC1E,MAAM,UAAU,sBAAsB;KACpC,mBAAmB,8BAA8B,WAAW;KAC9C;KACd,0BAA0B,8BAA8B,SAAS,WAAW;KAC5E,gBAAgB,SAAS;KACzB,SAAS;MACP,GAAG;MACH,cAAc,SAAS;MACvB,eAAe,SAAS;MACxB,aAAa,SAAS;MACtB;MACA,oBAAoB,SAAS;KAC/B;IACF,CAAC;IAED,OAAO;KACL,GAAG;KACH,oBAAoB,CAAC,GAAG,SAAS,WAAW;KAC5C,SAAS,SAAS;KAClB,GAAG;KACH,GAAG;KACH,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;IAC/B;GACF;GAEA,MAAM,UAAU,sBAAsB;IACpC,mBAAmB,8BAA8B,WAAW;IAC9C;IACd,0BAA0B,CAAC;IAC3B,gBAAgB,KAAA;IAChB,SAAS;KACP,GAAG;KACH;IACF;GACF,CAAC;GAED,OAAO;IACL,GAAG;IACH,oBAAoB,CAAC;IACrB,SAAS;IACT,GAAG;IACH,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;GAC/B;EACF;CACF;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"route.js","names":[],"sources":["../../src/route.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport {\n collectReturnsFromDefinitions,\n hasInputSchemas,\n mergeReturnsMaps,\n withAuto422,\n} from \"@taserjs/router-utils\";\n\nimport type { Method, RouteBuilder, RoutePath, ReturnsMap, ValidatorParts } from \"./types/index.js\";\nimport type { HttpMethod, MiddlewareDefinition } from \"./types/units.js\";\nimport { isHandlerUnit } from \"./types/units.js\";\nimport { HANDLER_SCHEMA_KEY_MAP } from \"./constants.js\";\nimport { pickDefinedSchemas, type SchemaValidators } from \"./define/validators.js\";\n\nfunction toUtilsMap(map: ReturnsMap | undefined): Record<number, StandardSchemaV1> {\n if (!map) {\n return {};\n }\n const out: Record<number, StandardSchemaV1> = {};\n for (const [key, schema] of Object.entries(map)) {\n if (schema !== undefined) {\n out[Number(key)] = schema;\n }\n }\n return out;\n}\n\nfunction buildEffectiveReturns(args: {\n middlewareReturns: ReturnsMap;\n routeReturns: ReturnsMap;\n handlerMiddlewareReturns: ReturnsMap;\n handlerReturns: ReturnsMap | undefined;\n schemas: {\n query?: unknown;\n params?: unknown;\n body?: unknown;\n handlerQuery?: unknown;\n handlerParams?: unknown;\n handlerBody?: unknown;\n middlewares?: readonly MiddlewareDefinition[];\n handlerMiddlewares?: readonly MiddlewareDefinition[];\n };\n}): Record<number, StandardSchemaV1> | undefined {\n const merged = mergeReturnsMaps(\n toUtilsMap(args.middlewareReturns),\n toUtilsMap(args.routeReturns),\n toUtilsMap(args.handlerMiddlewareReturns),\n toUtilsMap(args.handlerReturns),\n );\n const with422 = withAuto422(merged, hasInputSchemas(args.schemas));\n return Object.keys(with422).length > 0 ? with422 : undefined;\n}\n\nfunction buildRouteBase(\n path: string,\n method: HttpMethod | \"ANY\" | \"ALL\",\n methods: readonly HttpMethod[] | undefined,\n middlewares: MiddlewareDefinition[],\n) {\n return {\n path,\n method,\n ...(methods ? { methods: [...methods] } : {}),\n middlewares: [...middlewares],\n };\n}\n\n/** Shared internal builder — not part of the public `@taserjs/router` API. */\nexport function createRouteBuilder(\n path: string,\n method: HttpMethod | \"ANY\" | \"ALL\",\n validators: SchemaValidators = {},\n methods?: readonly HttpMethod[],\n): RouteBuilder<RoutePath, Method, readonly [], ValidatorParts> {\n const middlewares: MiddlewareDefinition[] = [];\n let routeReturns: Record<number, StandardSchemaV1> = {};\n\n const builder = {\n path,\n method,\n returns(map: ReturnsMap) {\n routeReturns = { ...routeReturns, ...toUtilsMap(map) };\n return builder;\n },\n use(definition: MiddlewareDefinition) {\n middlewares.push(definition);\n return builder;\n },\n handler(fnOrUnit: ((ctx: unknown) => unknown) | unknown) {\n const routeSchemas = pickDefinedSchemas(validators);\n const base = buildRouteBase(path, method, methods, middlewares);\n\n if (isHandlerUnit(fnOrUnit)) {\n const handlerSchemas = pickDefinedSchemas(fnOrUnit, HANDLER_SCHEMA_KEY_MAP);\n const returns = buildEffectiveReturns({\n middlewareReturns: collectReturnsFromDefinitions(middlewares),\n routeReturns: routeReturns,\n handlerMiddlewareReturns: collectReturnsFromDefinitions(fnOrUnit.middlewares),\n handlerReturns: fnOrUnit.returns,\n schemas: {\n ...validators,\n handlerQuery: fnOrUnit.query,\n handlerParams: fnOrUnit.params,\n handlerBody: fnOrUnit.body,\n middlewares,\n handlerMiddlewares: fnOrUnit.middlewares,\n },\n });\n\n return {\n ...base,\n handlerMiddlewares: [...fnOrUnit.middlewares],\n handler: fnOrUnit.handler,\n ...routeSchemas,\n ...handlerSchemas,\n ...(returns ? { returns } : {}),\n };\n }\n\n const returns = buildEffectiveReturns({\n middlewareReturns: collectReturnsFromDefinitions(middlewares),\n routeReturns: routeReturns,\n handlerMiddlewareReturns: {},\n handlerReturns: undefined,\n schemas: {\n ...validators,\n middlewares,\n },\n });\n\n return {\n ...base,\n handlerMiddlewares: [],\n handler: fnOrUnit as (ctx: unknown) => Response | Promise<Response>,\n ...routeSchemas,\n ...(returns ? { returns } : {}),\n };\n },\n };\n\n return builder as unknown as RouteBuilder<RoutePath, Method, readonly [], ValidatorParts>;\n}\n"],"mappings":";;;;;AAcA,SAAS,WAAW,KAA+D;CACjF,IAAI,CAAC,KACH,OAAO,CAAC;CAEV,MAAM,MAAwC,CAAC;CAC/C,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QAAQ,GAAG,GAC5C,IAAI,WAAW,KAAA,GACb,IAAI,OAAO,GAAG,KAAK;CAGvB,OAAO;AACT;AAEA,SAAS,sBAAsB,MAekB;CAO/C,MAAM,UAAU,YAND,iBACb,WAAW,KAAK,iBAAiB,GACjC,WAAW,KAAK,YAAY,GAC5B,WAAW,KAAK,wBAAwB,GACxC,WAAW,KAAK,cAAc,CAEJ,GAAQ,gBAAgB,KAAK,OAAO,CAAC;CACjE,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,SAAS,IAAI,UAAU,KAAA;AACrD;AAEA,SAAS,eACP,MACA,QACA,SACA,aACA;CACA,OAAO;EACL;EACA;EACA,GAAI,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC;EAC3C,aAAa,CAAC,GAAG,WAAW;CAC9B;AACF;;AAGA,SAAgB,mBACd,MACA,QACA,aAA+B,CAAC,GAChC,SAC8D;CAC9D,MAAM,cAAsC,CAAC;CAC7C,IAAI,eAAiD,CAAC;CAEtD,MAAM,UAAU;EACd;EACA;EACA,QAAQ,KAAiB;GACvB,eAAe;IAAE,GAAG;IAAc,GAAG,WAAW,GAAG;GAAE;GACrD,OAAO;EACT;EACA,IAAI,YAAkC;GACpC,YAAY,KAAK,UAAU;GAC3B,OAAO;EACT;EACA,QAAQ,UAAiD;GACvD,MAAM,eAAe,mBAAmB,UAAU;GAClD,MAAM,OAAO,eAAe,MAAM,QAAQ,SAAS,WAAW;GAE9D,IAAI,cAAc,QAAQ,GAAG;IAC3B,MAAM,iBAAiB,mBAAmB,UAAU,sBAAsB;IAC1E,MAAM,UAAU,sBAAsB;KACpC,mBAAmB,8BAA8B,WAAW;KAC9C;KACd,0BAA0B,8BAA8B,SAAS,WAAW;KAC5E,gBAAgB,SAAS;KACzB,SAAS;MACP,GAAG;MACH,cAAc,SAAS;MACvB,eAAe,SAAS;MACxB,aAAa,SAAS;MACtB;MACA,oBAAoB,SAAS;KAC/B;IACF,CAAC;IAED,OAAO;KACL,GAAG;KACH,oBAAoB,CAAC,GAAG,SAAS,WAAW;KAC5C,SAAS,SAAS;KAClB,GAAG;KACH,GAAG;KACH,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;IAC/B;GACF;GAEA,MAAM,UAAU,sBAAsB;IACpC,mBAAmB,8BAA8B,WAAW;IAC9C;IACd,0BAA0B,CAAC;IAC3B,gBAAgB,KAAA;IAChB,SAAS;KACP,GAAG;KACH;IACF;GACF,CAAC;GAED,OAAO;IACL,GAAG;IACH,oBAAoB,CAAC;IACrB,SAAS;IACT,GAAG;IACH,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;GAC/B;EACF;CACF;CAEA,OAAO;AACT"}