@taserjs/router 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +0 -7
  2. package/dist/cjs/builder/constants.cjs +0 -6
  3. package/dist/cjs/builder/constants.cjs.map +1 -1
  4. package/dist/cjs/builder/constants.d.cts +0 -5
  5. package/dist/cjs/builder/middleware-unit.cjs +55 -0
  6. package/dist/cjs/builder/middleware-unit.cjs.map +1 -0
  7. package/dist/cjs/builder/middleware-unit.d.cts +18 -0
  8. package/dist/cjs/builder/middleware.cjs +2 -1
  9. package/dist/cjs/builder/middleware.cjs.map +1 -1
  10. package/dist/cjs/builder/route.cjs +6 -21
  11. package/dist/cjs/builder/route.cjs.map +1 -1
  12. package/dist/cjs/builder/router.cjs +0 -4
  13. package/dist/cjs/builder/router.cjs.map +1 -1
  14. package/dist/cjs/builder/router.d.cts +1 -11
  15. package/dist/cjs/define/middleware.cjs +10 -14
  16. package/dist/cjs/define/middleware.cjs.map +1 -1
  17. package/dist/cjs/define/middleware.d.cts +42 -31
  18. package/dist/cjs/index.cjs +2 -2
  19. package/dist/cjs/index.d.cts +2 -2
  20. package/dist/cjs/middleware/body-limit.cjs +3 -3
  21. package/dist/cjs/middleware/body-limit.cjs.map +1 -1
  22. package/dist/cjs/middleware/body-limit.d.cts +1 -1
  23. package/dist/cjs/middleware/compress.cjs +3 -3
  24. package/dist/cjs/middleware/compress.cjs.map +1 -1
  25. package/dist/cjs/middleware/compress.d.cts +1 -1
  26. package/dist/cjs/middleware/cors.cjs +3 -3
  27. package/dist/cjs/middleware/cors.cjs.map +1 -1
  28. package/dist/cjs/middleware/cors.d.cts +1 -1
  29. package/dist/cjs/middleware/csrf.cjs +3 -3
  30. package/dist/cjs/middleware/csrf.cjs.map +1 -1
  31. package/dist/cjs/middleware/csrf.d.cts +1 -1
  32. package/dist/cjs/middleware/etag.cjs +3 -3
  33. package/dist/cjs/middleware/etag.cjs.map +1 -1
  34. package/dist/cjs/middleware/etag.d.cts +1 -1
  35. package/dist/cjs/middleware/hono-mw.cjs +23 -0
  36. package/dist/cjs/middleware/hono-mw.cjs.map +1 -0
  37. package/dist/cjs/middleware/hono-mw.d.cts +16 -0
  38. package/dist/cjs/middleware/jwk.cjs +6 -2
  39. package/dist/cjs/middleware/jwk.cjs.map +1 -1
  40. package/dist/cjs/middleware/jwt.cjs +6 -2
  41. package/dist/cjs/middleware/jwt.cjs.map +1 -1
  42. package/dist/cjs/middleware/secure-headers.cjs +3 -3
  43. package/dist/cjs/middleware/secure-headers.cjs.map +1 -1
  44. package/dist/cjs/middleware/secure-headers.d.cts +1 -1
  45. package/dist/cjs/middleware/timing.cjs +3 -3
  46. package/dist/cjs/middleware/timing.cjs.map +1 -1
  47. package/dist/cjs/middleware/timing.d.cts +1 -1
  48. package/dist/cjs/types/index.d.cts +4 -41
  49. package/dist/cjs/types/units.d.cts +9 -34
  50. package/dist/esm/builder/constants.d.ts +0 -5
  51. package/dist/esm/builder/constants.js +1 -6
  52. package/dist/esm/builder/constants.js.map +1 -1
  53. package/dist/esm/builder/middleware-unit.d.ts +18 -0
  54. package/dist/esm/builder/middleware-unit.js +55 -0
  55. package/dist/esm/builder/middleware-unit.js.map +1 -0
  56. package/dist/esm/builder/middleware.js +2 -1
  57. package/dist/esm/builder/middleware.js.map +1 -1
  58. package/dist/esm/builder/route.js +6 -21
  59. package/dist/esm/builder/route.js.map +1 -1
  60. package/dist/esm/builder/router.d.ts +1 -11
  61. package/dist/esm/builder/router.js +0 -4
  62. package/dist/esm/builder/router.js.map +1 -1
  63. package/dist/esm/define/middleware.d.ts +42 -31
  64. package/dist/esm/define/middleware.js +10 -14
  65. package/dist/esm/define/middleware.js.map +1 -1
  66. package/dist/esm/index.d.ts +2 -2
  67. package/dist/esm/index.js +2 -2
  68. package/dist/esm/middleware/body-limit.d.ts +1 -1
  69. package/dist/esm/middleware/body-limit.js +3 -3
  70. package/dist/esm/middleware/body-limit.js.map +1 -1
  71. package/dist/esm/middleware/compress.d.ts +1 -1
  72. package/dist/esm/middleware/compress.js +3 -3
  73. package/dist/esm/middleware/compress.js.map +1 -1
  74. package/dist/esm/middleware/cors.d.ts +1 -1
  75. package/dist/esm/middleware/cors.js +3 -3
  76. package/dist/esm/middleware/cors.js.map +1 -1
  77. package/dist/esm/middleware/csrf.d.ts +1 -1
  78. package/dist/esm/middleware/csrf.js +3 -3
  79. package/dist/esm/middleware/csrf.js.map +1 -1
  80. package/dist/esm/middleware/etag.d.ts +1 -1
  81. package/dist/esm/middleware/etag.js +3 -3
  82. package/dist/esm/middleware/etag.js.map +1 -1
  83. package/dist/esm/middleware/hono-mw.d.ts +16 -0
  84. package/dist/esm/middleware/hono-mw.js +23 -0
  85. package/dist/esm/middleware/hono-mw.js.map +1 -0
  86. package/dist/esm/middleware/jwk.js +6 -2
  87. package/dist/esm/middleware/jwk.js.map +1 -1
  88. package/dist/esm/middleware/jwt.js +6 -2
  89. package/dist/esm/middleware/jwt.js.map +1 -1
  90. package/dist/esm/middleware/secure-headers.d.ts +1 -1
  91. package/dist/esm/middleware/secure-headers.js +3 -3
  92. package/dist/esm/middleware/secure-headers.js.map +1 -1
  93. package/dist/esm/middleware/timing.d.ts +1 -1
  94. package/dist/esm/middleware/timing.js +3 -3
  95. package/dist/esm/middleware/timing.js.map +1 -1
  96. package/dist/esm/types/index.d.ts +4 -41
  97. package/dist/esm/types/units.d.ts +9 -34
  98. package/package.json +3 -3
  99. package/src/builder/constants.ts +0 -6
  100. package/src/builder/middleware-unit.ts +55 -0
  101. package/src/builder/middleware.ts +6 -2
  102. package/src/builder/route.ts +8 -34
  103. package/src/builder/router.ts +1 -18
  104. package/src/define/middleware.ts +133 -228
  105. package/src/index.ts +3 -1
  106. package/src/middleware/body-limit.ts +3 -4
  107. package/src/middleware/compress.ts +3 -4
  108. package/src/middleware/cors.ts +3 -4
  109. package/src/middleware/csrf.ts +3 -4
  110. package/src/middleware/etag.ts +3 -4
  111. package/src/middleware/hono-mw.ts +22 -0
  112. package/src/middleware/jwk.ts +9 -7
  113. package/src/middleware/jwt.ts +8 -6
  114. package/src/middleware/secure-headers.ts +3 -4
  115. package/src/middleware/timing.ts +3 -4
  116. package/src/types/index.ts +15 -172
  117. package/src/types/units.ts +119 -77
  118. package/dist/cjs/define/handler.cjs +0 -38
  119. package/dist/cjs/define/handler.cjs.map +0 -1
  120. package/dist/cjs/define/handler.d.cts +0 -13
  121. package/dist/cjs/middleware/wrap-hono.cjs +0 -19
  122. package/dist/cjs/middleware/wrap-hono.cjs.map +0 -1
  123. package/dist/cjs/middleware/wrap-hono.d.cts +0 -7
  124. package/dist/cjs/types/units.cjs +0 -8
  125. package/dist/cjs/types/units.cjs.map +0 -1
  126. package/dist/esm/define/handler.d.ts +0 -13
  127. package/dist/esm/define/handler.js +0 -38
  128. package/dist/esm/define/handler.js.map +0 -1
  129. package/dist/esm/middleware/wrap-hono.d.ts +0 -7
  130. package/dist/esm/middleware/wrap-hono.js +0 -18
  131. package/dist/esm/middleware/wrap-hono.js.map +0 -1
  132. package/dist/esm/types/units.js +0 -8
  133. package/dist/esm/types/units.js.map +0 -1
  134. package/src/define/handler.ts +0 -62
  135. package/src/middleware/wrap-hono.ts +0 -25
@@ -1 +1 @@
1
- {"version":3,"file":"cors.cjs","names":[],"sources":["../../../src/middleware/cors.ts"],"sourcesContent":["import { cors as honoCors } from \"hono/cors\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst wrapped = wrapHonoMiddleware(honoCors);\n\nexport function cors(...args: Parameters<typeof honoCors>) {\n return wrapped(...args);\n}\n\nexport type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>;\n"],"mappings":";;;;AAIA,IAAM,UAAU,kBAAA,mBAAmB,UAAA,IAAQ;AAE3C,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,QAAQ,GAAG,IAAI;AACxB"}
1
+ {"version":3,"file":"cors.cjs","names":[],"sources":["../../../src/middleware/cors.ts"],"sourcesContent":["import { cors as honoCors } from \"hono/cors\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport { honoMw } from \"./hono-mw.js\";\n\nexport function cors(...args: Parameters<typeof honoCors>) {\n return defineMiddleware(honoMw(honoCors(...args)));\n}\n\nexport type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>;\n"],"mappings":";;;;;AAKA,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAA,iBAAiB,gBAAA,QAAA,GAAA,UAAA,KAAA,CAAgB,GAAG,IAAI,CAAC,CAAC;AACnD"}
@@ -1,3 +1,3 @@
1
1
  import { cors as honoCors } from 'hono/cors';
2
- export declare function cors(...args: Parameters<typeof honoCors>): import('../types/units.js').MiddlewareUnit<import('../types/units.js').MiddlewareReturnFromParts<unknown, unknown, unknown, {}>>;
2
+ export declare function cors(...args: Parameters<typeof honoCors>): import('../types/units.js').DefineMiddlewareResult<unknown, unknown, unknown, {}, Response, unknown, unknown, unknown, {}, null, {}>;
3
3
  export type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>;
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_wrap_hono = require("./wrap-hono.cjs");
2
+ const require_middleware = require("../define/middleware.cjs");
3
+ const require_hono_mw = require("./hono-mw.cjs");
3
4
  let hono_csrf = require("hono/csrf");
4
5
  //#region src/middleware/csrf.ts
5
- var wrapped = require_wrap_hono.wrapHonoMiddleware(hono_csrf.csrf);
6
6
  function csrf(...args) {
7
- return wrapped(...args);
7
+ return require_middleware.defineMiddleware(require_hono_mw.honoMw((0, hono_csrf.csrf)(...args)));
8
8
  }
9
9
  //#endregion
10
10
  exports.csrf = csrf;
@@ -1 +1 @@
1
- {"version":3,"file":"csrf.cjs","names":[],"sources":["../../../src/middleware/csrf.ts"],"sourcesContent":["import { csrf as honoCsrf } from \"hono/csrf\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst wrapped = wrapHonoMiddleware(honoCsrf);\n\nexport function csrf(...args: Parameters<typeof honoCsrf>) {\n return wrapped(...args);\n}\n\nexport type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>;\n"],"mappings":";;;;AAIA,IAAM,UAAU,kBAAA,mBAAmB,UAAA,IAAQ;AAE3C,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,QAAQ,GAAG,IAAI;AACxB"}
1
+ {"version":3,"file":"csrf.cjs","names":[],"sources":["../../../src/middleware/csrf.ts"],"sourcesContent":["import { csrf as honoCsrf } from \"hono/csrf\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport { honoMw } from \"./hono-mw.js\";\n\nexport function csrf(...args: Parameters<typeof honoCsrf>) {\n return defineMiddleware(honoMw(honoCsrf(...args)));\n}\n\nexport type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>;\n"],"mappings":";;;;;AAKA,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAA,iBAAiB,gBAAA,QAAA,GAAA,UAAA,KAAA,CAAgB,GAAG,IAAI,CAAC,CAAC;AACnD"}
@@ -1,3 +1,3 @@
1
1
  import { csrf as honoCsrf } from 'hono/csrf';
2
- export declare function csrf(...args: Parameters<typeof honoCsrf>): import('../types/units.js').MiddlewareUnit<import('../types/units.js').MiddlewareReturnFromParts<unknown, unknown, unknown, {}>>;
2
+ export declare function csrf(...args: Parameters<typeof honoCsrf>): import('../types/units.js').DefineMiddlewareResult<unknown, unknown, unknown, {}, Response, unknown, unknown, unknown, {}, null, {}>;
3
3
  export type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>;
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_wrap_hono = require("./wrap-hono.cjs");
2
+ const require_middleware = require("../define/middleware.cjs");
3
+ const require_hono_mw = require("./hono-mw.cjs");
3
4
  let hono_etag = require("hono/etag");
4
5
  //#region src/middleware/etag.ts
5
- var wrapped = require_wrap_hono.wrapHonoMiddleware(hono_etag.etag);
6
6
  function etag(...args) {
7
- return wrapped(...args);
7
+ return require_middleware.defineMiddleware(require_hono_mw.honoMw((0, hono_etag.etag)(...args)));
8
8
  }
9
9
  //#endregion
10
10
  exports.etag = etag;
@@ -1 +1 @@
1
- {"version":3,"file":"etag.cjs","names":[],"sources":["../../../src/middleware/etag.ts"],"sourcesContent":["import { etag as honoEtag } from \"hono/etag\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst wrapped = wrapHonoMiddleware(honoEtag);\n\nexport function etag(...args: Parameters<typeof honoEtag>) {\n return wrapped(...args);\n}\n\nexport type EtagOptions = NonNullable<Parameters<typeof honoEtag>[0]>;\n"],"mappings":";;;;AAIA,IAAM,UAAU,kBAAA,mBAAmB,UAAA,IAAQ;AAE3C,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,QAAQ,GAAG,IAAI;AACxB"}
1
+ {"version":3,"file":"etag.cjs","names":[],"sources":["../../../src/middleware/etag.ts"],"sourcesContent":["import { etag as honoEtag } from \"hono/etag\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport { honoMw } from \"./hono-mw.js\";\n\nexport function etag(...args: Parameters<typeof honoEtag>) {\n return defineMiddleware(honoMw(honoEtag(...args)));\n}\n\nexport type EtagOptions = NonNullable<Parameters<typeof honoEtag>[0]>;\n"],"mappings":";;;;;AAKA,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAA,iBAAiB,gBAAA,QAAA,GAAA,UAAA,KAAA,CAAgB,GAAG,IAAI,CAAC,CAAC;AACnD"}
@@ -1,3 +1,3 @@
1
1
  import { etag as honoEtag } from 'hono/etag';
2
- export declare function etag(...args: Parameters<typeof honoEtag>): import('../types/units.js').MiddlewareUnit<import('../types/units.js').MiddlewareReturnFromParts<unknown, unknown, unknown, {}>>;
2
+ export declare function etag(...args: Parameters<typeof honoEtag>): import('../types/units.js').DefineMiddlewareResult<unknown, unknown, unknown, {}, Response, unknown, unknown, unknown, {}, null, {}>;
3
3
  export type EtagOptions = NonNullable<Parameters<typeof honoEtag>[0]>;
@@ -0,0 +1,23 @@
1
+ let _taserjs_router_core = require("@taserjs/router-core");
2
+ //#region src/middleware/hono-mw.ts
3
+ /**
4
+ * Adapts a standard Web / Hono-compatible middleware function `(c, next) => ...`
5
+ * into a Taser-compatible middleware handler function `(ctx, next) => Promise<Response>`.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { honoMw } from "@taserjs/router";
10
+ * import { cors } from "hono/cors";
11
+ *
12
+ * const app = t.get("/hello").use(honoMw(cors()));
13
+ * // or
14
+ * const customCors = defineMiddleware(honoMw(cors()));
15
+ * ```
16
+ */
17
+ function honoMw(middleware) {
18
+ return (0, _taserjs_router_core.createTaserCompatHandler)(middleware);
19
+ }
20
+ //#endregion
21
+ exports.honoMw = honoMw;
22
+
23
+ //# sourceMappingURL=hono-mw.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono-mw.cjs","names":[],"sources":["../../../src/middleware/hono-mw.ts"],"sourcesContent":["import { createTaserCompatHandler } from \"@taserjs/router-core\";\nimport type { MiddlewareHandler } from \"hono\";\n\n/**\n * Adapts a standard Web / Hono-compatible middleware function `(c, next) => ...`\n * into a Taser-compatible middleware handler function `(ctx, next) => Promise<Response>`.\n *\n * @example\n * ```ts\n * import { honoMw } from \"@taserjs/router\";\n * import { cors } from \"hono/cors\";\n *\n * const app = t.get(\"/hello\").use(honoMw(cors()));\n * // or\n * const customCors = defineMiddleware(honoMw(cors()));\n * ```\n */\nexport function honoMw(\n middleware: MiddlewareHandler,\n): (ctx: unknown, next: any) => Promise<Response> {\n return createTaserCompatHandler(middleware) as (ctx: unknown, next: any) => Promise<Response>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAiBA,SAAgB,OACd,YACgD;CAChD,QAAA,GAAA,qBAAA,yBAAA,CAAgC,UAAU;AAC5C"}
@@ -0,0 +1,16 @@
1
+ import { MiddlewareHandler } from 'hono';
2
+ /**
3
+ * Adapts a standard Web / Hono-compatible middleware function `(c, next) => ...`
4
+ * into a Taser-compatible middleware handler function `(ctx, next) => Promise<Response>`.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { honoMw } from "@taserjs/router";
9
+ * import { cors } from "hono/cors";
10
+ *
11
+ * const app = t.get("/hello").use(honoMw(cors()));
12
+ * // or
13
+ * const customCors = defineMiddleware(honoMw(cors()));
14
+ * ```
15
+ */
16
+ export declare function honoMw(middleware: MiddlewareHandler): (ctx: unknown, next: any) => Promise<Response>;
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_middleware = require("../define/middleware.cjs");
3
- const require_wrap_hono = require("./wrap-hono.cjs");
3
+ const require_hono_mw = require("./hono-mw.cjs");
4
4
  let hono_jwk = require("hono/jwk");
5
5
  //#region src/middleware/jwk.ts
6
6
  function assertJwksScheme(jwksUri, allowInsecure) {
@@ -18,7 +18,11 @@ function jwk(options, init) {
18
18
  const jwksUri = options.jwks_uri;
19
19
  if (typeof jwksUri === "string") assertJwksScheme(jwksUri, options.allowInsecure ?? false);
20
20
  const { allowInsecure: _allowInsecure, ...honoOptions } = options;
21
- return require_middleware.defineMiddleware({ handler: require_wrap_hono.extractJwtPayload((0, hono_jwk.jwk)(honoOptions, init?.headers !== void 0 ? { headers: init.headers } : void 0)) });
21
+ const mw = require_hono_mw.honoMw((0, hono_jwk.jwk)(honoOptions, init?.headers !== void 0 ? { headers: init.headers } : void 0));
22
+ return require_middleware.defineMiddleware((ctx, next) => mw(ctx, async () => {
23
+ const payload = ctx.var.jwtPayload;
24
+ return next({ jwtPayload: payload });
25
+ }));
22
26
  }
23
27
  //#endregion
24
28
  exports.jwk = jwk;
@@ -1 +1 @@
1
- {"version":3,"file":"jwk.cjs","names":[],"sources":["../../../src/middleware/jwk.ts"],"sourcesContent":["import 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\";\nimport { extractJwtPayload } from \"./wrap-hono.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: extractJwtPayload<TPayload>(honoMw),\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;CAI1D,OAAO,mBAAA,iBAA4C,EACjD,SAAS,kBAAA,mBAAA,GAAA,SAAA,IAAA,CAH+B,aADzB,MAAM,YAAY,KAAA,IAAY,EAAE,SAAS,KAAK,QAAQ,IAAI,KAAA,CAIpC,CAAM,EAC7C,CAAC;AACH"}
1
+ {"version":3,"file":"jwk.cjs","names":[],"sources":["../../../src/middleware/jwk.ts"],"sourcesContent":["import { jwk as honoJwk } from \"hono/jwk\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport { honoMw } from \"./hono-mw.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 mw = honoMw(honoJwk(honoOptions, safeInit));\n\n return defineMiddleware<JwtPayloadState<TPayload>>((ctx, next) =>\n mw(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"],"mappings":";;;;;AAeA,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,KAAK,gBAAA,QAAA,GAAA,SAAA,IAAA,CAAe,aADT,MAAM,YAAY,KAAA,IAAY,EAAE,SAAS,KAAK,QAAQ,IAAI,KAAA,CAC5B,CAAC;CAEhD,OAAO,mBAAA,kBAA6C,KAAK,SACvD,GAAG,KAAK,YAAY;EAClB,MAAM,UAAW,IAAqD,IAAI;EAC1E,OAAO,KAAK,EAAE,YAAY,QAAoB,CAAC;CACjD,CAAC,CACH;AACF"}
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_middleware = require("../define/middleware.cjs");
3
- const require_wrap_hono = require("./wrap-hono.cjs");
3
+ const require_hono_mw = require("./hono-mw.cjs");
4
4
  let hono_jwt = require("hono/jwt");
5
5
  //#region src/middleware/jwt.ts
6
6
  /**
@@ -8,7 +8,11 @@ let hono_jwt = require("hono/jwt");
8
8
  * Successfully decoded payload is placed in `ctx.state.jwtPayload`.
9
9
  */
10
10
  function jwt(options) {
11
- return require_middleware.defineMiddleware({ handler: require_wrap_hono.extractJwtPayload((0, hono_jwt.jwt)(options)) });
11
+ const mw = require_hono_mw.honoMw((0, hono_jwt.jwt)(options));
12
+ return require_middleware.defineMiddleware((ctx, next) => mw(ctx, async () => {
13
+ const payload = ctx.var.jwtPayload;
14
+ return next({ jwtPayload: payload });
15
+ }));
12
16
  }
13
17
  //#endregion
14
18
  exports.jwt = jwt;
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.cjs","names":[],"sources":["../../../src/middleware/jwt.ts"],"sourcesContent":["import 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\";\nimport { extractJwtPayload } from \"./wrap-hono.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: extractJwtPayload<TPayload>(honoMw),\n });\n}\n"],"mappings":";;;;;;;;;AAqBA,SAAgB,IACd,SAC6B;CAE7B,OAAO,mBAAA,iBAA4C,EACjD,SAAS,kBAAA,mBAAA,GAAA,SAAA,IAAA,CAF+B,OAEH,CAAM,EAC7C,CAAC;AACH"}
1
+ {"version":3,"file":"jwt.cjs","names":[],"sources":["../../../src/middleware/jwt.ts"],"sourcesContent":["import { jwt as honoJwt } from \"hono/jwt\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport type { MiddlewareReturnFromParts, MiddlewareUnit } from \"../types/units.js\";\nimport { honoMw } from \"./hono-mw.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 mw = honoMw(honoJwt(options));\n return defineMiddleware<JwtPayloadState<TPayload>>((ctx, next) =>\n mw(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"],"mappings":";;;;;;;;;AAoBA,SAAgB,IACd,SAC6B;CAC7B,MAAM,KAAK,gBAAA,QAAA,GAAA,SAAA,IAAA,CAAe,OAAO,CAAC;CAClC,OAAO,mBAAA,kBAA6C,KAAK,SACvD,GAAG,KAAK,YAAY;EAClB,MAAM,UAAW,IAAqD,IAAI;EAC1E,OAAO,KAAK,EAAE,YAAY,QAAoB,CAAC;CACjD,CAAC,CACH;AACF"}
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_wrap_hono = require("./wrap-hono.cjs");
2
+ const require_middleware = require("../define/middleware.cjs");
3
+ const require_hono_mw = require("./hono-mw.cjs");
3
4
  let hono_secure_headers = require("hono/secure-headers");
4
5
  //#region src/middleware/secure-headers.ts
5
- var wrapped = require_wrap_hono.wrapHonoMiddleware(hono_secure_headers.secureHeaders);
6
6
  function secureHeaders(...args) {
7
- return wrapped(...args);
7
+ return require_middleware.defineMiddleware(require_hono_mw.honoMw((0, hono_secure_headers.secureHeaders)(...args)));
8
8
  }
9
9
  //#endregion
10
10
  exports.secureHeaders = secureHeaders;
@@ -1 +1 @@
1
- {"version":3,"file":"secure-headers.cjs","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 wrapped = wrapHonoMiddleware(honoSecureHeaders);\n\nexport function secureHeaders(...args: Parameters<typeof honoSecureHeaders>) {\n return wrapped(...args);\n}\n\nexport type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>;\n"],"mappings":";;;;AAIA,IAAM,UAAU,kBAAA,mBAAmB,oBAAA,aAAiB;AAEpD,SAAgB,cAAc,GAAG,MAA4C;CAC3E,OAAO,QAAQ,GAAG,IAAI;AACxB"}
1
+ {"version":3,"file":"secure-headers.cjs","names":[],"sources":["../../../src/middleware/secure-headers.ts"],"sourcesContent":["import { secureHeaders as honoSecureHeaders } from \"hono/secure-headers\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport { honoMw } from \"./hono-mw.js\";\n\nexport function secureHeaders(...args: Parameters<typeof honoSecureHeaders>) {\n return defineMiddleware(honoMw(honoSecureHeaders(...args)));\n}\n\nexport type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>;\n"],"mappings":";;;;;AAKA,SAAgB,cAAc,GAAG,MAA4C;CAC3E,OAAO,mBAAA,iBAAiB,gBAAA,QAAA,GAAA,oBAAA,cAAA,CAAyB,GAAG,IAAI,CAAC,CAAC;AAC5D"}
@@ -1,3 +1,3 @@
1
1
  import { secureHeaders as honoSecureHeaders } from 'hono/secure-headers';
2
- export declare function secureHeaders(...args: Parameters<typeof honoSecureHeaders>): import('../types/units.js').MiddlewareUnit<import('../types/units.js').MiddlewareReturnFromParts<unknown, unknown, unknown, {}>>;
2
+ export declare function secureHeaders(...args: Parameters<typeof honoSecureHeaders>): import('../types/units.js').DefineMiddlewareResult<unknown, unknown, unknown, {}, Response, unknown, unknown, unknown, {}, null, {}>;
3
3
  export type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>;
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_wrap_hono = require("./wrap-hono.cjs");
2
+ const require_middleware = require("../define/middleware.cjs");
3
+ const require_hono_mw = require("./hono-mw.cjs");
3
4
  let hono_timing = require("hono/timing");
4
5
  //#region src/middleware/timing.ts
5
- var wrapped = require_wrap_hono.wrapHonoMiddleware(hono_timing.timing);
6
6
  function timing(...args) {
7
- return wrapped(...args);
7
+ return require_middleware.defineMiddleware(require_hono_mw.honoMw((0, hono_timing.timing)(...args)));
8
8
  }
9
9
  //#endregion
10
10
  exports.timing = timing;
@@ -1 +1 @@
1
- {"version":3,"file":"timing.cjs","names":[],"sources":["../../../src/middleware/timing.ts"],"sourcesContent":["import { timing as honoTiming } from \"hono/timing\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst wrapped = wrapHonoMiddleware(honoTiming);\n\nexport function timing(...args: Parameters<typeof honoTiming>) {\n return wrapped(...args);\n}\n\nexport type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>;\n"],"mappings":";;;;AAIA,IAAM,UAAU,kBAAA,mBAAmB,YAAA,MAAU;AAE7C,SAAgB,OAAO,GAAG,MAAqC;CAC7D,OAAO,QAAQ,GAAG,IAAI;AACxB"}
1
+ {"version":3,"file":"timing.cjs","names":[],"sources":["../../../src/middleware/timing.ts"],"sourcesContent":["import { timing as honoTiming } from \"hono/timing\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport { honoMw } from \"./hono-mw.js\";\n\nexport function timing(...args: Parameters<typeof honoTiming>) {\n return defineMiddleware(honoMw(honoTiming(...args)));\n}\n\nexport type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>;\n"],"mappings":";;;;;AAKA,SAAgB,OAAO,GAAG,MAAqC;CAC7D,OAAO,mBAAA,iBAAiB,gBAAA,QAAA,GAAA,YAAA,OAAA,CAAkB,GAAG,IAAI,CAAC,CAAC;AACrD"}
@@ -1,3 +1,3 @@
1
1
  import { timing as honoTiming } from 'hono/timing';
2
- export declare function timing(...args: Parameters<typeof honoTiming>): import('../types/units.js').MiddlewareUnit<import('../types/units.js').MiddlewareReturnFromParts<unknown, unknown, unknown, {}>>;
2
+ export declare function timing(...args: Parameters<typeof honoTiming>): import('../types/units.js').DefineMiddlewareResult<unknown, unknown, unknown, {}, Response, unknown, unknown, unknown, {}, null, {}>;
3
3
  export type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>;
@@ -3,13 +3,13 @@ import { RouterRegister } from '../register.js';
3
3
  import { MergeMiddlewareField, MergeMiddlewareInputField, MergePart, RequestShape, Simplify, UnionToIntersection, UnitRuntimeContext } from './type-utils.js';
4
4
  import { ReturnsMap, ValidHandlerReply } from './returns.js';
5
5
  import { Schema } from './schema.js';
6
- import { AppContext, ExtractState, HandlerContext, HandlerUnit, InlineMiddlewareOptions, Method, MiddlewareDefinition, MiddlewareReturnFromParts, MiddlewareUnit, ValidatorParts } from './units.js';
6
+ import { AppContext, ExtractState, Method, MiddlewareDefinition, MiddlewareReturnFromParts, MiddlewareUnit, NextFn, ValidatorParts } from './units.js';
7
7
  export type { Awaitable } from '@taserjs/router-core';
8
8
  export type { SchemaRequestShape, InferInput, InferOutput, Schema, StandardSchemaV1, } from './schema.js';
9
9
  export type { RouterRegister } from '../register.js';
10
10
  export type { MergeMiddlewareField, MergeMiddlewareInputField, MergePart, RequestShape, Simplify, UnitRuntimeContext, UnwrapPart, } from './type-utils.js';
11
11
  export type { EmptyReturns, EnforceHandlerReply, HandlerReply, HasReturns, MergeReturns, ReplyFor, ReturnsMap, StatusCode, ValidHandlerReply, } from './returns.js';
12
- export type { AppContext, ExtractState, HandlerContext, HandlerUnit, HttpMethod, InlineMiddlewareOptions, IsUnknown, Method, MiddlewareDefinition, MiddlewareNext, MiddlewareReturnFromParts, MiddlewareUnit, NextFn, NextResult, StandaloneMiddlewareContext, StateBrand, ValidatorParts, } from './units.js';
12
+ export type { AppContext, ExtractState, HttpMethod, IsUnknown, Method, MiddlewareDefinition, MiddlewareNext, MiddlewareReturnFromParts, MiddlewareUnit, MiddlewareUnitBuilder, NextFn, NextResult, StandaloneMiddlewareContext, StateBrand, ValidatorParts, } from './units.js';
13
13
  export type RoutePath = RouterRegister extends {
14
14
  RoutePath: infer P;
15
15
  } ? P : never;
@@ -169,17 +169,13 @@ export type MiddlewareBuilder<Layout extends LayoutId, Acc extends readonly unkn
169
169
  actualState: MiddlewareChainField<Layout, Acc, "state">;
170
170
  }
171
171
  ]): MiddlewareBuilder<Layout, readonly [...Acc, TAcc], TAppContext>;
172
- use<TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown, R = unknown>(options: InlineMiddlewareOptions<MiddlewareChainContext<Layout, Acc, TQuery, TParams, TBody, TAppContext>, TQuery, TParams, TBody, TReturns, TQueryIn, TParamsIn, TBodyIn, R>): MiddlewareBuilder<Layout, readonly [
173
- ...Acc,
174
- MiddlewareReturnFromParts<TQuery, TParams, TBody, ExtractState<R>, TQueryIn, TParamsIn, TBodyIn>
175
- ], TAppContext>;
172
+ use<R = unknown>(fn: (ctx: MiddlewareChainContext<Layout, Acc, unknown, unknown, unknown, TAppContext>, next: NextFn) => Awaitable<R>): MiddlewareBuilder<Layout, readonly [...Acc, MiddlewareReturnFromParts<unknown, unknown, unknown, ExtractState<R>>], TAppContext>;
176
173
  };
177
174
  export type RouteExport<Path extends RoutePath, TMethod extends Method, Acc extends readonly unknown[], TReturns extends ReturnsMap = {}, TOutput = Response> = Acc & {
178
175
  readonly path: Path;
179
176
  readonly method: TMethod | "ANY" | "ALL";
180
177
  readonly methods?: readonly Method[];
181
178
  readonly middlewares: readonly MiddlewareDefinition[];
182
- readonly handlerMiddlewares: readonly MiddlewareDefinition[];
183
179
  readonly returns?: TReturns;
184
180
  readonly bodyMode?: "json" | "form" | "urlencoded";
185
181
  handler: (ctx: unknown) => Awaitable<Response>;
@@ -191,9 +187,6 @@ export type RouteExport<Path extends RoutePath, TMethod extends Method, Acc exte
191
187
  query?: Schema<unknown>;
192
188
  params?: Schema<unknown>;
193
189
  body?: Schema<unknown>;
194
- handlerQuery?: Schema<unknown>;
195
- handlerParams?: Schema<unknown>;
196
- handlerBody?: Schema<unknown>;
197
190
  };
198
191
  type RouteHandleResult<Path extends RoutePath, TMethod extends Method, Acc extends readonly unknown[], Validators extends ValidatorParts, TReturns extends ReturnsMap = {}, TOutput = Response, TAppContext extends Record<string, unknown> = AppContext> = Omit<RouteExport<Path, TMethod, Acc, TReturns, TOutput>, "$Infer"> & {
199
192
  readonly $Infer: {
@@ -231,17 +224,13 @@ export type RouteBuilderBase<Path extends RoutePath, TMethod extends Method, Acc
231
224
  actualState: RouteResolvedField<Path, TMethod, Acc, "state">;
232
225
  }
233
226
  ]): RouteBuilder<Path, TMethod, readonly [...Acc, TAcc], Validators, Omit<TReturns, keyof UReturns> & UReturns, TAppContext>;
234
- use<TQuery = unknown, TParams = unknown, TBody = unknown, UReturns extends ReturnsMap = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown, R = unknown>(options: InlineMiddlewareOptions<RouteChainContext<Path, TMethod, Acc, TQuery, TParams, TBody, TAppContext>, TQuery, TParams, TBody, UReturns, TQueryIn, TParamsIn, TBodyIn, R>): RouteBuilder<Path, TMethod, readonly [
235
- ...Acc,
236
- MiddlewareReturnFromParts<TQuery, TParams, TBody, ExtractState<R>, TQueryIn, TParamsIn, TBodyIn>
237
- ], Validators, Omit<TReturns, keyof UReturns> & UReturns, TAppContext>;
227
+ use<R = unknown>(fn: (ctx: RouteChainContext<Path, TMethod, Acc, unknown, unknown, unknown, TAppContext>, next: NextFn) => Awaitable<R>): RouteBuilder<Path, TMethod, readonly [...Acc, MiddlewareReturnFromParts<unknown, unknown, unknown, ExtractState<R>>], Validators, TReturns, TAppContext>;
238
228
  handler<R extends Response = Response>(fn: (ctx: TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS" ? RouteHandleContextWithoutBody<Path, TMethod, Acc, Validators, TAppContext> : RouteHandleContext<Path, TMethod, Acc, Validators, TAppContext>) => Awaitable<R>, ..._assert: [R] extends [ValidHandlerReply<R, TReturns>] ? [] : [
239
229
  {
240
230
  expected: ValidHandlerReply<R, TReturns>;
241
231
  actual: R;
242
232
  }
243
233
  ]): RouteHandleResult<Path, TMethod, Acc, Validators, TReturns, R, TAppContext>;
244
- handler<HandlerAcc extends readonly unknown[] = readonly [], HandlerValidators extends ValidatorParts = ValidatorParts, HReturns extends ReturnsMap = {}, HOutput = Response>(unit: HandlerUnit<HandlerAcc, HandlerValidators, HReturns, HOutput>): RouteHandleResult<Path, TMethod, readonly [...Acc, ...HandlerAcc], Validators, Omit<TReturns, keyof HReturns> & HReturns, HOutput, TAppContext>;
245
234
  };
246
235
  export type RouteBuilder<Path extends RoutePath, TMethod extends Method, Acc extends readonly unknown[] = readonly [], Validators extends ValidatorParts = {}, TReturns extends ReturnsMap = {}, TAppContext extends Record<string, unknown> = AppContext> = RouteBuilderBase<Path, TMethod, Acc, Validators, TReturns, TAppContext> & (TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS" ? {} : {
247
236
  body<TBody, TBodyIn = unknown>(schema: Schema<TBody, TBodyIn>): RouteBuilder<Path, TMethod, Acc, Omit<Validators, "body" | "bodyIn"> & {
@@ -253,32 +242,6 @@ export type RouteBuilder<Path extends RoutePath, TMethod extends Method, Acc ext
253
242
  bodyIn: TBodyIn;
254
243
  }, TReturns, TAppContext>;
255
244
  });
256
- export type HandlerBuilder<Acc extends readonly unknown[] = readonly [], Validators extends ValidatorParts = {}, TReturns extends ReturnsMap = {}, TAppContext extends Record<string, unknown> = AppContext> = {
257
- returns<const M extends ReturnsMap>(map: M): HandlerBuilder<Acc, Validators, Omit<TReturns, keyof M> & M, TAppContext>;
258
- use<TAcc, UReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequiredState = unknown>(unit: MiddlewareUnit<TAcc, UReturns, TRequiredLayouts, TRequiredState>, ..._assert: [IsStateSatisfied<MergeMiddlewareField<Acc, "state">, TRequiredState>] extends [
259
- true
260
- ] ? [] : [
261
- {
262
- error: "Middleware cannot be attached to this handler";
263
- requiredState: TRequiredState;
264
- actualState: MergeMiddlewareField<Acc, "state">;
265
- }
266
- ]): HandlerBuilder<readonly [...Acc, TAcc], Validators, Omit<TReturns, keyof UReturns> & UReturns, TAppContext>;
267
- use<TQuery = unknown, TParams = unknown, TBody = unknown, UReturns extends ReturnsMap = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown, R = unknown>(options: InlineMiddlewareOptions<HandlerContext<Acc, {
268
- query: TQuery;
269
- params: TParams;
270
- body: TBody;
271
- }, TAppContext>, TQuery, TParams, TBody, UReturns, TQueryIn, TParamsIn, TBodyIn, R>): HandlerBuilder<readonly [
272
- ...Acc,
273
- MiddlewareReturnFromParts<TQuery, TParams, TBody, ExtractState<R>, TQueryIn, TParamsIn, TBodyIn>
274
- ], Validators, Omit<TReturns, keyof UReturns> & UReturns, TAppContext>;
275
- handler<R extends Response = Response>(fn: (ctx: HandlerContext<Acc, Validators, TAppContext>) => Awaitable<R>, ..._assert: [R] extends [ValidHandlerReply<R, TReturns>] ? [] : [
276
- {
277
- expected: ValidHandlerReply<R, TReturns>;
278
- actual: R;
279
- }
280
- ]): HandlerUnit<Acc, Validators, TReturns, R>;
281
- };
282
245
  export type RouteDefinition<Path extends RoutePath = RoutePath, TMethod extends Method = Method, Acc extends readonly unknown[] = readonly unknown[], Validators extends ValidatorParts = ValidatorParts, TReturns extends ReturnsMap = ReturnsMap, TOutput = Response, TAppContext extends Record<string, unknown> = AppContext> = RouteHandleResult<Path, TMethod, Acc, Validators, TReturns, TOutput, TAppContext>;
283
246
  export type InferRouteContext<R> = R extends {
284
247
  $Infer: {
@@ -1,5 +1,5 @@
1
1
  import { Awaitable, MiddlewareDefinition as CoreMiddlewareDefinition, TaserCookieJar, TaserHeaders } from '@taserjs/router-core';
2
- import { MergeMiddlewareField, MergePart, RequestShape, Simplify, UnitRuntimeContext, UnwrapPart } from './type-utils.js';
2
+ import { RequestShape, Simplify, UnitRuntimeContext, UnwrapPart } from './type-utils.js';
3
3
  import { ReturnsMap } from './returns.js';
4
4
  import { Schema } from './schema.js';
5
5
  export type { HttpMethod, Method } from './type-utils.js';
@@ -50,43 +50,18 @@ export type StandaloneMiddlewareContext<TQuery = unknown, TParams = unknown, TBo
50
50
  headers: TaserHeaders;
51
51
  cookies: TaserCookieJar;
52
52
  }>;
53
- export type HandlerContext<Acc extends readonly unknown[], Validators extends ValidatorParts, TAppContext extends Record<string, unknown> = AppContext> = Simplify<TAppContext & UnitRuntimeContext & {
54
- query: Simplify<MergePart<Validators extends {
55
- query?: infer Q;
56
- } ? Q : unknown, MergeMiddlewareField<Acc, "query">>>;
57
- params: Simplify<MergePart<Validators extends {
58
- params?: infer P;
59
- } ? P : unknown, MergeMiddlewareField<Acc, "params">>>;
60
- body: Simplify<MergePart<Validators extends {
61
- body?: infer B;
62
- } ? B : unknown, MergeMiddlewareField<Acc, "body">>>;
63
- state: Simplify<MergeMiddlewareField<Acc, "state">>;
64
- headers: TaserHeaders;
65
- cookies: TaserCookieJar;
66
- }>;
67
53
  export type MiddlewareUnit<TAcc = unknown, TReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequiredState = unknown> = MiddlewareDefinition & {
68
54
  readonly __middlewareAcc: TAcc;
69
55
  readonly __returns?: TReturns;
70
56
  readonly __requiredLayouts?: TRequiredLayouts;
71
57
  readonly __requiredState?: TRequiredState;
72
58
  };
73
- export type HandlerUnit<_Acc extends readonly unknown[], _Validators extends ValidatorParts, TReturns extends ReturnsMap = {}, TOutput = Response> = {
74
- readonly __returns?: TReturns;
75
- readonly $Infer: {
76
- Output: TOutput;
77
- };
78
- middlewares: readonly MiddlewareDefinition[];
79
- handler: (ctx: unknown) => Awaitable<Response>;
80
- returns?: ReturnsMap;
81
- query?: Schema<unknown>;
82
- params?: Schema<unknown>;
83
- body?: Schema<unknown>;
84
- };
85
- export type InlineMiddlewareOptions<Ctx = unknown, TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown, R = unknown> = {
86
- query?: Schema<TQuery, TQueryIn>;
87
- params?: Schema<TParams, TParamsIn>;
88
- body?: Schema<TBody, TBodyIn>;
89
- returns?: TReturns;
90
- handler: (ctx: Ctx, next: NextFn) => Awaitable<R>;
59
+ export type MiddlewareUnitBuilder<TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequiredState = {}, TAppContext extends Record<string, unknown> = AppContext, TInheritedState = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown> = {
60
+ query<Q, QIn = unknown>(schema: Schema<Q, QIn>): MiddlewareUnitBuilder<Q, TParams, TBody, TReturns, TRequiredLayouts, TRequiredState, TAppContext, TInheritedState, QIn, TParamsIn, TBodyIn>;
61
+ params<P, PIn = unknown>(schema: Schema<P, PIn>): MiddlewareUnitBuilder<TQuery, P, TBody, TReturns, TRequiredLayouts, TRequiredState, TAppContext, TInheritedState, TQueryIn, PIn, TBodyIn>;
62
+ body<B, BIn = unknown>(schema: Schema<B, BIn>): MiddlewareUnitBuilder<TQuery, TParams, B, TReturns, TRequiredLayouts, TRequiredState, TAppContext, TInheritedState, TQueryIn, TParamsIn, BIn>;
63
+ body<Mode extends "json" | "form" | "urlencoded", B, BIn = unknown>(mode: Mode, schema: Schema<B, BIn>): MiddlewareUnitBuilder<TQuery, TParams, B, TReturns, TRequiredLayouts, TRequiredState, TAppContext, TInheritedState, TQueryIn, TParamsIn, BIn>;
64
+ returns<const M extends ReturnsMap>(map: M): MiddlewareUnitBuilder<TQuery, TParams, TBody, Omit<TReturns, keyof M> & M, TRequiredLayouts, TRequiredState, TAppContext, TInheritedState, TQueryIn, TParamsIn, TBodyIn>;
65
+ requires<Requires extends Record<string, unknown>>(): MiddlewareUnitBuilder<TQuery, TParams, TBody, TReturns, TRequiredLayouts, TRequiredState & Requires, TAppContext, TInheritedState, TQueryIn, TParamsIn, TBodyIn>;
66
+ handler<TState = unknown, R = unknown>(fn: (ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext, TInheritedState & TRequiredState>, next: NextFn<NoInfer<TState>>) => Awaitable<R>): DefineMiddlewareResult<TQuery, TParams, TBody, TState, R, TQueryIn, TParamsIn, TBodyIn, TReturns, TRequiredLayouts, TRequiredState>;
91
67
  };
92
- export declare function isHandlerUnit(value: unknown): value is HandlerUnit<readonly unknown[], ValidatorParts>;
@@ -1,8 +1,3 @@
1
1
  /** Input schema keys validated by middleware and route handlers. Headers/cookies are parsed only. */
2
2
  export declare const SCHEMA_KEYS: readonly ["query", "params", "body"];
3
3
  export type SchemaKey = (typeof SCHEMA_KEYS)[number];
4
- export declare const HANDLER_SCHEMA_KEY_MAP: {
5
- readonly query: "handlerQuery";
6
- readonly params: "handlerParams";
7
- readonly body: "handlerBody";
8
- };
@@ -5,12 +5,7 @@ var SCHEMA_KEYS = [
5
5
  "params",
6
6
  "body"
7
7
  ];
8
- var HANDLER_SCHEMA_KEY_MAP = {
9
- query: "handlerQuery",
10
- params: "handlerParams",
11
- body: "handlerBody"
12
- };
13
8
  //#endregion
14
- export { HANDLER_SCHEMA_KEY_MAP, SCHEMA_KEYS };
9
+ export { SCHEMA_KEYS };
15
10
 
16
11
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":[],"sources":["../../../src/builder/constants.ts"],"sourcesContent":["/** Input schema keys validated by middleware and route handlers. Headers/cookies are parsed only. */\nexport const SCHEMA_KEYS = [\"query\", \"params\", \"body\"] as const;\n\nexport type SchemaKey = (typeof SCHEMA_KEYS)[number];\n\nexport const HANDLER_SCHEMA_KEY_MAP = {\n query: \"handlerQuery\",\n params: \"handlerParams\",\n body: \"handlerBody\",\n} as const satisfies Record<SchemaKey, string>;\n"],"mappings":";;AACA,IAAa,cAAc;CAAC;CAAS;CAAU;AAAM;AAIrD,IAAa,yBAAyB;CACpC,OAAO;CACP,QAAQ;CACR,MAAM;AACR"}
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../src/builder/constants.ts"],"sourcesContent":["/** Input schema keys validated by middleware and route handlers. Headers/cookies are parsed only. */\nexport const SCHEMA_KEYS = [\"query\", \"params\", \"body\"] as const;\n\nexport type SchemaKey = (typeof SCHEMA_KEYS)[number];\n"],"mappings":";;AACA,IAAa,cAAc;CAAC;CAAS;CAAU;AAAM"}
@@ -0,0 +1,18 @@
1
+ import { BodyMode } from '@taserjs/router-core';
2
+ import { ReturnsMap } from '../types/returns.js';
3
+ import { Schema } from '../types/schema.js';
4
+ export declare function createMiddlewareUnitBuilder(requiredLayouts?: string | readonly string[]): {
5
+ query(schema: Schema<unknown>): /*elided*/ any;
6
+ params(schema: Schema<unknown>): /*elided*/ any;
7
+ body(modeOrSchema: BodyMode | Schema<unknown>, schema?: Schema<unknown>): /*elided*/ any;
8
+ returns(map: ReturnsMap): /*elided*/ any;
9
+ requires(): /*elided*/ any;
10
+ handler(fn: (ctx: any, next: any) => any): {
11
+ __middlewareAcc: unknown;
12
+ __requiredLayouts?: string | readonly string[];
13
+ returns?: ReturnsMap;
14
+ __returns?: ReturnsMap;
15
+ bodyMode?: BodyMode;
16
+ handler: (ctx: any, next: any) => any;
17
+ };
18
+ };
@@ -0,0 +1,55 @@
1
+ import { pickDefinedSchemas } from "../define/validators.js";
2
+ //#region src/builder/middleware-unit.ts
3
+ function createMiddlewareUnitBuilder(requiredLayouts) {
4
+ const validators = {};
5
+ let bodyMode;
6
+ let returnsMap;
7
+ const builder = {
8
+ query(schema) {
9
+ validators.query = schema;
10
+ return builder;
11
+ },
12
+ params(schema) {
13
+ validators.params = schema;
14
+ return builder;
15
+ },
16
+ body(modeOrSchema, schema) {
17
+ if (typeof modeOrSchema === "string") {
18
+ bodyMode = modeOrSchema;
19
+ if (schema !== void 0) validators.body = schema;
20
+ } else {
21
+ bodyMode = "json";
22
+ validators.body = modeOrSchema;
23
+ }
24
+ return builder;
25
+ },
26
+ returns(map) {
27
+ returnsMap = {
28
+ ...returnsMap,
29
+ ...map
30
+ };
31
+ return builder;
32
+ },
33
+ requires() {
34
+ return builder;
35
+ },
36
+ handler(fn) {
37
+ return {
38
+ handler: fn,
39
+ ...pickDefinedSchemas(validators),
40
+ ...bodyMode ? { bodyMode } : {},
41
+ ...returnsMap ? {
42
+ returns: returnsMap,
43
+ __returns: returnsMap
44
+ } : {},
45
+ ...requiredLayouts !== void 0 ? { __requiredLayouts: requiredLayouts } : {},
46
+ __middlewareAcc: void 0
47
+ };
48
+ }
49
+ };
50
+ return builder;
51
+ }
52
+ //#endregion
53
+ export { createMiddlewareUnitBuilder };
54
+
55
+ //# sourceMappingURL=middleware-unit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-unit.js","names":[],"sources":["../../../src/builder/middleware-unit.ts"],"sourcesContent":["import type { BodyMode } from \"@taserjs/router-core\";\n\nimport type { ReturnsMap } from \"../types/returns.js\";\nimport type { Schema } from \"../types/schema.js\";\nimport { pickDefinedSchemas, type SchemaValidators } from \"../define/validators.js\";\n\nexport function createMiddlewareUnitBuilder(requiredLayouts?: string | readonly string[]) {\n const validators: SchemaValidators = {};\n let bodyMode: BodyMode | undefined;\n let returnsMap: ReturnsMap | undefined;\n\n const builder = {\n query(schema: Schema<unknown>) {\n validators.query = schema;\n return builder;\n },\n params(schema: Schema<unknown>) {\n validators.params = schema;\n return builder;\n },\n body(modeOrSchema: BodyMode | Schema<unknown>, schema?: Schema<unknown>) {\n if (typeof modeOrSchema === \"string\") {\n bodyMode = modeOrSchema as BodyMode;\n if (schema !== undefined) {\n validators.body = schema;\n }\n } else {\n bodyMode = \"json\";\n validators.body = modeOrSchema;\n }\n return builder;\n },\n returns(map: ReturnsMap) {\n returnsMap = { ...returnsMap, ...map };\n return builder;\n },\n requires() {\n return builder;\n },\n handler(fn: (ctx: any, next: any) => any) {\n const schemas = pickDefinedSchemas(validators);\n const unit = {\n handler: fn,\n ...schemas,\n ...(bodyMode ? { bodyMode } : {}),\n ...(returnsMap ? { returns: returnsMap, __returns: returnsMap } : {}),\n ...(requiredLayouts !== undefined ? { __requiredLayouts: requiredLayouts } : {}),\n __middlewareAcc: undefined as unknown,\n };\n return unit;\n },\n };\n\n return builder;\n}\n"],"mappings":";;AAMA,SAAgB,4BAA4B,iBAA8C;CACxF,MAAM,aAA+B,CAAC;CACtC,IAAI;CACJ,IAAI;CAEJ,MAAM,UAAU;EACd,MAAM,QAAyB;GAC7B,WAAW,QAAQ;GACnB,OAAO;EACT;EACA,OAAO,QAAyB;GAC9B,WAAW,SAAS;GACpB,OAAO;EACT;EACA,KAAK,cAA0C,QAA0B;GACvE,IAAI,OAAO,iBAAiB,UAAU;IACpC,WAAW;IACX,IAAI,WAAW,KAAA,GACb,WAAW,OAAO;GAEtB,OAAO;IACL,WAAW;IACX,WAAW,OAAO;GACpB;GACA,OAAO;EACT;EACA,QAAQ,KAAiB;GACvB,aAAa;IAAE,GAAG;IAAY,GAAG;GAAI;GACrC,OAAO;EACT;EACA,WAAW;GACT,OAAO;EACT;EACA,QAAQ,IAAkC;GAUxC,OAAO;IAPL,SAAS;IACT,GAHc,mBAAmB,UAG9B;IACH,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;IAC/B,GAAI,aAAa;KAAE,SAAS;KAAY,WAAW;IAAW,IAAI,CAAC;IACnE,GAAI,oBAAoB,KAAA,IAAY,EAAE,mBAAmB,gBAAgB,IAAI,CAAC;IAC9E,iBAAiB,KAAA;GAEZ;EACT;CACF;CAEA,OAAO;AACT"}
@@ -5,7 +5,8 @@ function createMiddleware(layout) {
5
5
  layout,
6
6
  middlewares: entries,
7
7
  use(definition) {
8
- entries.push(definition);
8
+ if (typeof definition === "function") entries.push({ handler: definition });
9
+ else entries.push(definition);
9
10
  return chain;
10
11
  }
11
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","names":[],"sources":["../../../src/builder/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/builder/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 | ((ctx: any, next: any) => any)) {\n if (typeof definition === \"function\") {\n entries.push({ handler: definition as any });\n } else {\n entries.push(definition);\n }\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,YAAmE;GACrE,IAAI,OAAO,eAAe,YACxB,QAAQ,KAAK,EAAE,SAAS,WAAkB,CAAC;QAE3C,QAAQ,KAAK,UAAU;GAEzB,OAAO;EACT;CACF;CAEA,OAAO;AACT"}
@@ -1,5 +1,3 @@
1
- import { isHandlerUnit } from "../types/units.js";
2
- import { HANDLER_SCHEMA_KEY_MAP } from "./constants.js";
3
1
  import { pickDefinedSchemas } from "../define/validators.js";
4
2
  import { collectReturnsFromDefinitions, hasInputSchemas, mergeReturnsMaps, withAuto422 } from "@taserjs/router-utils";
5
3
  //#region src/builder/route.ts
@@ -10,7 +8,7 @@ function toUtilsMap(map) {
10
8
  return out;
11
9
  }
12
10
  function buildEffectiveReturns(args) {
13
- const with422 = withAuto422(mergeReturnsMaps(toUtilsMap(args.middlewareReturns), toUtilsMap(args.routeReturns), toUtilsMap(args.handlerMiddlewareReturns), toUtilsMap(args.handlerReturns)), hasInputSchemas(args.schemas));
11
+ const with422 = withAuto422(mergeReturnsMaps(toUtilsMap(args.middlewareReturns), toUtilsMap(args.routeReturns)), hasInputSchemas(args.schemas));
14
12
  return Object.keys(with422).length > 0 ? with422 : void 0;
15
13
  }
16
14
  function buildRouteBase(path, method, methods, middlewares) {
@@ -56,38 +54,25 @@ function createRouteBuilder(path, method, methods) {
56
54
  return builder;
57
55
  },
58
56
  use(definition) {
59
- middlewares.push(definition);
57
+ if (typeof definition === "function") middlewares.push({ handler: definition });
58
+ else middlewares.push(definition);
60
59
  return builder;
61
60
  },
62
- handler(fnOrUnit) {
61
+ handler(fn) {
63
62
  const routeSchemas = pickDefinedSchemas(validators);
64
63
  const base = buildRouteBase(path, method, methods, middlewares);
65
- const unit = isHandlerUnit(fnOrUnit) ? fnOrUnit : {
66
- handler: fnOrUnit,
67
- middlewares: [],
68
- returns: void 0
69
- };
70
- const handlerSchemas = isHandlerUnit(fnOrUnit) ? pickDefinedSchemas(fnOrUnit, HANDLER_SCHEMA_KEY_MAP) : {};
71
64
  const returns = buildEffectiveReturns({
72
65
  middlewareReturns: collectReturnsFromDefinitions(middlewares),
73
66
  routeReturns,
74
- handlerMiddlewareReturns: collectReturnsFromDefinitions(unit.middlewares),
75
- handlerReturns: unit.returns,
76
67
  schemas: {
77
68
  ...validators,
78
- handlerQuery: unit.query,
79
- handlerParams: unit.params,
80
- handlerBody: unit.body,
81
- middlewares,
82
- handlerMiddlewares: unit.middlewares
69
+ middlewares
83
70
  }
84
71
  });
85
72
  return {
86
73
  ...base,
87
- handlerMiddlewares: [...unit.middlewares],
88
- handler: unit.handler,
74
+ handler: fn,
89
75
  ...routeSchemas,
90
- ...handlerSchemas,
91
76
  ...bodyMode ? { bodyMode } : {},
92
77
  ...returns ? { returns } : {}
93
78
  };