@taserjs/router 0.0.0

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 (173) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +24 -0
  3. package/dist/cjs/constants.cjs +17 -0
  4. package/dist/cjs/constants.cjs.map +1 -0
  5. package/dist/cjs/constants.d.cts +8 -0
  6. package/dist/cjs/create-context.cjs +8 -0
  7. package/dist/cjs/create-context.cjs.map +1 -0
  8. package/dist/cjs/create-context.d.cts +5 -0
  9. package/dist/cjs/define/handler.cjs +38 -0
  10. package/dist/cjs/define/handler.cjs.map +1 -0
  11. package/dist/cjs/define/handler.d.cts +13 -0
  12. package/dist/cjs/define/middleware.cjs +36 -0
  13. package/dist/cjs/define/middleware.cjs.map +1 -0
  14. package/dist/cjs/define/middleware.d.cts +85 -0
  15. package/dist/cjs/define/validators.cjs +14 -0
  16. package/dist/cjs/define/validators.cjs.map +1 -0
  17. package/dist/cjs/define/validators.d.cts +8 -0
  18. package/dist/cjs/factories.cjs +29 -0
  19. package/dist/cjs/factories.cjs.map +1 -0
  20. package/dist/cjs/factories.d.cts +61 -0
  21. package/dist/cjs/index.cjs +42 -0
  22. package/dist/cjs/index.d.cts +12 -0
  23. package/dist/cjs/middleware/auth.cjs +34 -0
  24. package/dist/cjs/middleware/auth.cjs.map +1 -0
  25. package/dist/cjs/middleware/auth.d.cts +9 -0
  26. package/dist/cjs/middleware/body-limit.cjs +12 -0
  27. package/dist/cjs/middleware/body-limit.cjs.map +1 -0
  28. package/dist/cjs/middleware/body-limit.d.cts +3 -0
  29. package/dist/cjs/middleware/compress.cjs +12 -0
  30. package/dist/cjs/middleware/compress.cjs.map +1 -0
  31. package/dist/cjs/middleware/compress.d.cts +3 -0
  32. package/dist/cjs/middleware/cors.cjs +12 -0
  33. package/dist/cjs/middleware/cors.cjs.map +1 -0
  34. package/dist/cjs/middleware/cors.d.cts +3 -0
  35. package/dist/cjs/middleware/csrf.cjs +12 -0
  36. package/dist/cjs/middleware/csrf.cjs.map +1 -0
  37. package/dist/cjs/middleware/csrf.d.cts +3 -0
  38. package/dist/cjs/middleware/etag.cjs +12 -0
  39. package/dist/cjs/middleware/etag.cjs.map +1 -0
  40. package/dist/cjs/middleware/etag.d.cts +3 -0
  41. package/dist/cjs/middleware/jwk.cjs +25 -0
  42. package/dist/cjs/middleware/jwk.cjs.map +1 -0
  43. package/dist/cjs/middleware/jwk.d.cts +15 -0
  44. package/dist/cjs/middleware/jwt.cjs +16 -0
  45. package/dist/cjs/middleware/jwt.cjs.map +1 -0
  46. package/dist/cjs/middleware/jwt.d.cts +10 -0
  47. package/dist/cjs/middleware/secure-headers.cjs +12 -0
  48. package/dist/cjs/middleware/secure-headers.cjs.map +1 -0
  49. package/dist/cjs/middleware/secure-headers.d.cts +3 -0
  50. package/dist/cjs/middleware/timing.cjs +12 -0
  51. package/dist/cjs/middleware/timing.cjs.map +1 -0
  52. package/dist/cjs/middleware/timing.d.cts +3 -0
  53. package/dist/cjs/middleware.cjs +17 -0
  54. package/dist/cjs/middleware.cjs.map +1 -0
  55. package/dist/cjs/middleware.d.cts +2 -0
  56. package/dist/cjs/register.d.cts +2 -0
  57. package/dist/cjs/route.cjs +94 -0
  58. package/dist/cjs/route.cjs.map +1 -0
  59. package/dist/cjs/route.d.cts +5 -0
  60. package/dist/cjs/taser-app.cjs +42 -0
  61. package/dist/cjs/taser-app.cjs.map +1 -0
  62. package/dist/cjs/taser-app.d.cts +21 -0
  63. package/dist/cjs/taser-router.cjs +83 -0
  64. package/dist/cjs/taser-router.cjs.map +1 -0
  65. package/dist/cjs/taser-router.d.cts +44 -0
  66. package/dist/cjs/types/app.d.cts +46 -0
  67. package/dist/cjs/types/index.d.cts +305 -0
  68. package/dist/cjs/types/returns.d.cts +37 -0
  69. package/dist/cjs/types/schema.d.cts +14 -0
  70. package/dist/cjs/types/type-utils.d.cts +52 -0
  71. package/dist/cjs/types/units.cjs +8 -0
  72. package/dist/cjs/types/units.cjs.map +1 -0
  73. package/dist/cjs/types/units.d.cts +98 -0
  74. package/dist/esm/constants.d.ts +8 -0
  75. package/dist/esm/constants.js +16 -0
  76. package/dist/esm/constants.js.map +1 -0
  77. package/dist/esm/create-context.d.ts +5 -0
  78. package/dist/esm/create-context.js +8 -0
  79. package/dist/esm/create-context.js.map +1 -0
  80. package/dist/esm/define/handler.d.ts +13 -0
  81. package/dist/esm/define/handler.js +38 -0
  82. package/dist/esm/define/handler.js.map +1 -0
  83. package/dist/esm/define/middleware.d.ts +85 -0
  84. package/dist/esm/define/middleware.js +36 -0
  85. package/dist/esm/define/middleware.js.map +1 -0
  86. package/dist/esm/define/validators.d.ts +8 -0
  87. package/dist/esm/define/validators.js +14 -0
  88. package/dist/esm/define/validators.js.map +1 -0
  89. package/dist/esm/factories.d.ts +61 -0
  90. package/dist/esm/factories.js +21 -0
  91. package/dist/esm/factories.js.map +1 -0
  92. package/dist/esm/index.d.ts +12 -0
  93. package/dist/esm/index.js +8 -0
  94. package/dist/esm/middleware/auth.d.ts +9 -0
  95. package/dist/esm/middleware/auth.js +33 -0
  96. package/dist/esm/middleware/auth.js.map +1 -0
  97. package/dist/esm/middleware/body-limit.d.ts +3 -0
  98. package/dist/esm/middleware/body-limit.js +11 -0
  99. package/dist/esm/middleware/body-limit.js.map +1 -0
  100. package/dist/esm/middleware/compress.d.ts +3 -0
  101. package/dist/esm/middleware/compress.js +11 -0
  102. package/dist/esm/middleware/compress.js.map +1 -0
  103. package/dist/esm/middleware/cors.d.ts +3 -0
  104. package/dist/esm/middleware/cors.js +11 -0
  105. package/dist/esm/middleware/cors.js.map +1 -0
  106. package/dist/esm/middleware/csrf.d.ts +3 -0
  107. package/dist/esm/middleware/csrf.js +11 -0
  108. package/dist/esm/middleware/csrf.js.map +1 -0
  109. package/dist/esm/middleware/etag.d.ts +3 -0
  110. package/dist/esm/middleware/etag.js +11 -0
  111. package/dist/esm/middleware/etag.js.map +1 -0
  112. package/dist/esm/middleware/jwk.d.ts +15 -0
  113. package/dist/esm/middleware/jwk.js +24 -0
  114. package/dist/esm/middleware/jwk.js.map +1 -0
  115. package/dist/esm/middleware/jwt.d.ts +10 -0
  116. package/dist/esm/middleware/jwt.js +15 -0
  117. package/dist/esm/middleware/jwt.js.map +1 -0
  118. package/dist/esm/middleware/secure-headers.d.ts +3 -0
  119. package/dist/esm/middleware/secure-headers.js +11 -0
  120. package/dist/esm/middleware/secure-headers.js.map +1 -0
  121. package/dist/esm/middleware/timing.d.ts +3 -0
  122. package/dist/esm/middleware/timing.js +11 -0
  123. package/dist/esm/middleware/timing.js.map +1 -0
  124. package/dist/esm/middleware.d.ts +2 -0
  125. package/dist/esm/middleware.js +17 -0
  126. package/dist/esm/middleware.js.map +1 -0
  127. package/dist/esm/register.d.ts +2 -0
  128. package/dist/esm/route.d.ts +5 -0
  129. package/dist/esm/route.js +94 -0
  130. package/dist/esm/route.js.map +1 -0
  131. package/dist/esm/taser-app.d.ts +21 -0
  132. package/dist/esm/taser-app.js +40 -0
  133. package/dist/esm/taser-app.js.map +1 -0
  134. package/dist/esm/taser-router.d.ts +44 -0
  135. package/dist/esm/taser-router.js +82 -0
  136. package/dist/esm/taser-router.js.map +1 -0
  137. package/dist/esm/types/app.d.ts +46 -0
  138. package/dist/esm/types/index.d.ts +305 -0
  139. package/dist/esm/types/returns.d.ts +37 -0
  140. package/dist/esm/types/schema.d.ts +14 -0
  141. package/dist/esm/types/type-utils.d.ts +52 -0
  142. package/dist/esm/types/units.d.ts +98 -0
  143. package/dist/esm/types/units.js +8 -0
  144. package/dist/esm/types/units.js.map +1 -0
  145. package/package.json +149 -0
  146. package/src/constants.ts +10 -0
  147. package/src/create-context.ts +19 -0
  148. package/src/define/handler.ts +72 -0
  149. package/src/define/middleware.ts +289 -0
  150. package/src/define/validators.ts +22 -0
  151. package/src/factories.ts +183 -0
  152. package/src/index.ts +44 -0
  153. package/src/middleware/auth.ts +51 -0
  154. package/src/middleware/body-limit.ts +11 -0
  155. package/src/middleware/compress.ts +11 -0
  156. package/src/middleware/cors.ts +11 -0
  157. package/src/middleware/csrf.ts +11 -0
  158. package/src/middleware/etag.ts +11 -0
  159. package/src/middleware/jwk.ts +47 -0
  160. package/src/middleware/jwt.ts +18 -0
  161. package/src/middleware/secure-headers.ts +11 -0
  162. package/src/middleware/timing.ts +11 -0
  163. package/src/middleware.ts +19 -0
  164. package/src/register.ts +1 -0
  165. package/src/route.ts +145 -0
  166. package/src/taser-app.ts +43 -0
  167. package/src/taser-router.ts +160 -0
  168. package/src/types/app.ts +65 -0
  169. package/src/types/index.ts +1064 -0
  170. package/src/types/returns.ts +135 -0
  171. package/src/types/schema.ts +22 -0
  172. package/src/types/type-utils.ts +86 -0
  173. package/src/types/units.ts +167 -0
@@ -0,0 +1,3 @@
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, {}>>;
3
+ export type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>;
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_auth = require("./auth.cjs");
3
+ let hono_csrf = require("hono/csrf");
4
+ //#region src/middleware/csrf.ts
5
+ var honoCsrfMiddleware = require_auth.wrapHonoMiddleware(hono_csrf.csrf);
6
+ function csrf(...args) {
7
+ return honoCsrfMiddleware(...args);
8
+ }
9
+ //#endregion
10
+ exports.csrf = csrf;
11
+
12
+ //# sourceMappingURL=csrf.cjs.map
@@ -0,0 +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 './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,aAAA,mBAAmB,UAAA,IAAQ;AAEtD,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAmB,GAAG,IAAI;AACnC"}
@@ -0,0 +1,3 @@
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, {}>>;
3
+ export type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>;
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_auth = require("./auth.cjs");
3
+ let hono_etag = require("hono/etag");
4
+ //#region src/middleware/etag.ts
5
+ var honoEtagMiddleware = require_auth.wrapHonoMiddleware(hono_etag.etag);
6
+ function etag(...args) {
7
+ return honoEtagMiddleware(...args);
8
+ }
9
+ //#endregion
10
+ exports.etag = etag;
11
+
12
+ //# sourceMappingURL=etag.cjs.map
@@ -0,0 +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 './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,aAAA,mBAAmB,UAAA,IAAQ;AAEtD,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAmB,GAAG,IAAI;AACnC"}
@@ -0,0 +1,3 @@
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, {}>>;
3
+ export type EtagOptions = NonNullable<Parameters<typeof honoEtag>[0]>;
@@ -0,0 +1,25 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_auth = require("./auth.cjs");
3
+ let hono_jwk = require("hono/jwk");
4
+ //#region src/middleware/jwk.ts
5
+ function assertJwksScheme(jwksUri, allowInsecure) {
6
+ const scheme = new URL(jwksUri).protocol.replace(":", "");
7
+ if (scheme === "https") return;
8
+ if (scheme === "http" && allowInsecure) return;
9
+ throw new Error(`JWKS URL must use https:// (or http:// with allowInsecure: true): "${jwksUri}"`);
10
+ }
11
+ /**
12
+ * JWK auth middleware. Invalid or missing tokens return **401** (Hono).
13
+ * Valid tokens whose payload fails `payloadSchema` return **403**.
14
+ * Static `jwks_uri` must use HTTPS unless `allowInsecure: true`.
15
+ */
16
+ function jwk(payloadSchema, options, init) {
17
+ const jwksUri = options.jwks_uri;
18
+ if (typeof jwksUri === "string") assertJwksScheme(jwksUri, options.allowInsecure ?? false);
19
+ const { allowInsecure: _allowInsecure, ...honoOptions } = options;
20
+ return require_auth.createAuthMiddleware(payloadSchema, (0, hono_jwk.jwk)(honoOptions, init?.headers !== void 0 ? { headers: init.headers } : void 0));
21
+ }
22
+ //#endregion
23
+ exports.jwk = jwk;
24
+
25
+ //# sourceMappingURL=jwk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwk.cjs","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,aAAA,qBAAqB,gBAAA,GAAA,SAAA,IAAA,CAAuB,aAFlC,MAAM,YAAY,KAAA,IAAY,EAAE,SAAS,KAAK,QAAQ,IAAI,KAAA,CAEH,CAAC;AAC3E"}
@@ -0,0 +1,15 @@
1
+ import { jwk as honoJwk } from 'hono/jwk';
2
+ import { AuthMiddlewareUnit } from './auth.js';
3
+ import { InferOutput, Schema } from '../types/schema.js';
4
+ export type JwkOptions = Parameters<typeof honoJwk>[0];
5
+ export type JwkRequestInit = Pick<RequestInit, 'headers'>;
6
+ export type JwkMiddlewareOptions = JwkOptions & {
7
+ /** Allow `http://` JWKS URLs (local dev). Default false — requires `https://`. */
8
+ allowInsecure?: boolean;
9
+ };
10
+ /**
11
+ * JWK auth middleware. Invalid or missing tokens return **401** (Hono).
12
+ * Valid tokens whose payload fails `payloadSchema` return **403**.
13
+ * Static `jwks_uri` must use HTTPS unless `allowInsecure: true`.
14
+ */
15
+ export declare function jwk<TPayload>(payloadSchema: Schema<TPayload>, options: JwkMiddlewareOptions, init?: JwkRequestInit): AuthMiddlewareUnit<InferOutput<Schema<TPayload>>>;
@@ -0,0 +1,16 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_auth = require("./auth.cjs");
3
+ let hono_jwt = require("hono/jwt");
4
+ //#region src/middleware/jwt.ts
5
+ /**
6
+ * 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.
9
+ */
10
+ function jwt(payloadSchema, options) {
11
+ return require_auth.createAuthMiddleware(payloadSchema, (0, hono_jwt.jwt)(options));
12
+ }
13
+ //#endregion
14
+ exports.jwt = jwt;
15
+
16
+ //# sourceMappingURL=jwt.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.cjs","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,aAAA,qBAAqB,gBAAA,GAAA,SAAA,IAAA,CAAuB,OAAO,CAAC;AAC7D"}
@@ -0,0 +1,10 @@
1
+ import { jwt as honoJwt } from 'hono/jwt';
2
+ import { AuthMiddlewareUnit } from './auth.js';
3
+ import { InferOutput, Schema } from '../types/schema.js';
4
+ export type JwtOptions = Parameters<typeof honoJwt>[0];
5
+ /**
6
+ * 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.
9
+ */
10
+ export declare function jwt<TPayload>(payloadSchema: Schema<TPayload>, options: JwtOptions): AuthMiddlewareUnit<InferOutput<Schema<TPayload>>>;
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_auth = require("./auth.cjs");
3
+ let hono_secure_headers = require("hono/secure-headers");
4
+ //#region src/middleware/secure-headers.ts
5
+ var honoSecureHeadersMiddleware = require_auth.wrapHonoMiddleware(hono_secure_headers.secureHeaders);
6
+ function secureHeaders(...args) {
7
+ return honoSecureHeadersMiddleware(...args);
8
+ }
9
+ //#endregion
10
+ exports.secureHeaders = secureHeaders;
11
+
12
+ //# sourceMappingURL=secure-headers.cjs.map
@@ -0,0 +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 './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,aAAA,mBAAmB,oBAAA,aAAiB;AAExE,SAAgB,cAAc,GAAG,MAA4C;CAC3E,OAAO,4BAA4B,GAAG,IAAI;AAC5C"}
@@ -0,0 +1,3 @@
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, {}>>;
3
+ export type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>;
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_auth = require("./auth.cjs");
3
+ let hono_timing = require("hono/timing");
4
+ //#region src/middleware/timing.ts
5
+ var honoTimingMiddleware = require_auth.wrapHonoMiddleware(hono_timing.timing);
6
+ function timing(...args) {
7
+ return honoTimingMiddleware(...args);
8
+ }
9
+ //#endregion
10
+ exports.timing = timing;
11
+
12
+ //# sourceMappingURL=timing.cjs.map
@@ -0,0 +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 './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,aAAA,mBAAmB,YAAA,MAAU;AAE1D,SAAgB,OAAO,GAAG,MAAqC;CAC7D,OAAO,qBAAqB,GAAG,IAAI;AACrC"}
@@ -0,0 +1,3 @@
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, {}>>;
3
+ export type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>;
@@ -0,0 +1,17 @@
1
+ //#region src/middleware.ts
2
+ function createMiddleware(layout) {
3
+ const entries = [];
4
+ const chain = {
5
+ layout,
6
+ middlewares: entries,
7
+ use(definition) {
8
+ entries.push(definition);
9
+ return chain;
10
+ }
11
+ };
12
+ return chain;
13
+ }
14
+ //#endregion
15
+ exports.createMiddleware = createMiddleware;
16
+
17
+ //# sourceMappingURL=middleware.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.cjs","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
+ import { LayoutId, MiddlewareBuilder } from './types/index.js';
2
+ export declare function createMiddleware<const Layout extends LayoutId>(layout: Layout): MiddlewareBuilder<Layout, readonly []>;
@@ -0,0 +1,2 @@
1
+ export interface RouterRegister {
2
+ }
@@ -0,0 +1,94 @@
1
+ const require_units = require("./types/units.cjs");
2
+ const require_constants = require("./constants.cjs");
3
+ const require_validators = require("./define/validators.cjs");
4
+ let _taserjs_router_utils = require("@taserjs/router-utils");
5
+ //#region src/route.ts
6
+ function toUtilsMap(map) {
7
+ if (!map) return {};
8
+ const out = {};
9
+ for (const [key, schema] of Object.entries(map)) if (schema !== void 0) out[Number(key)] = schema;
10
+ return out;
11
+ }
12
+ function buildEffectiveReturns(args) {
13
+ const with422 = (0, _taserjs_router_utils.withAuto422)((0, _taserjs_router_utils.mergeReturnsMaps)(toUtilsMap(args.middlewareReturns), toUtilsMap(args.routeReturns), toUtilsMap(args.handlerMiddlewareReturns), toUtilsMap(args.handlerReturns)), (0, _taserjs_router_utils.hasInputSchemas)(args.schemas));
14
+ return Object.keys(with422).length > 0 ? with422 : void 0;
15
+ }
16
+ function buildRouteBase(path, method, methods, middlewares) {
17
+ return {
18
+ path,
19
+ method,
20
+ ...methods ? { methods: [...methods] } : {},
21
+ middlewares: [...middlewares]
22
+ };
23
+ }
24
+ /** Shared internal builder — not part of the public `@taserjs/router` API. */
25
+ function createRouteBuilder(path, method, validators = {}, methods) {
26
+ const middlewares = [];
27
+ let routeReturns = {};
28
+ const builder = {
29
+ path,
30
+ method,
31
+ returns(map) {
32
+ routeReturns = {
33
+ ...routeReturns,
34
+ ...toUtilsMap(map)
35
+ };
36
+ return builder;
37
+ },
38
+ use(definition) {
39
+ middlewares.push(definition);
40
+ return builder;
41
+ },
42
+ handler(fnOrUnit) {
43
+ const routeSchemas = require_validators.pickDefinedSchemas(validators);
44
+ const base = buildRouteBase(path, method, methods, middlewares);
45
+ if (require_units.isHandlerUnit(fnOrUnit)) {
46
+ const handlerSchemas = require_validators.pickDefinedSchemas(fnOrUnit, require_constants.HANDLER_SCHEMA_KEY_MAP);
47
+ const returns = buildEffectiveReturns({
48
+ middlewareReturns: (0, _taserjs_router_utils.collectReturnsFromDefinitions)(middlewares),
49
+ routeReturns,
50
+ handlerMiddlewareReturns: (0, _taserjs_router_utils.collectReturnsFromDefinitions)(fnOrUnit.middlewares),
51
+ handlerReturns: fnOrUnit.returns,
52
+ schemas: {
53
+ ...validators,
54
+ handlerQuery: fnOrUnit.query,
55
+ handlerParams: fnOrUnit.params,
56
+ handlerBody: fnOrUnit.body,
57
+ middlewares,
58
+ handlerMiddlewares: fnOrUnit.middlewares
59
+ }
60
+ });
61
+ return {
62
+ ...base,
63
+ handlerMiddlewares: [...fnOrUnit.middlewares],
64
+ handler: fnOrUnit.handler,
65
+ ...routeSchemas,
66
+ ...handlerSchemas,
67
+ ...returns ? { returns } : {}
68
+ };
69
+ }
70
+ const returns = buildEffectiveReturns({
71
+ middlewareReturns: (0, _taserjs_router_utils.collectReturnsFromDefinitions)(middlewares),
72
+ routeReturns,
73
+ handlerMiddlewareReturns: {},
74
+ handlerReturns: void 0,
75
+ schemas: {
76
+ ...validators,
77
+ middlewares
78
+ }
79
+ });
80
+ return {
81
+ ...base,
82
+ handlerMiddlewares: [],
83
+ handler: fnOrUnit,
84
+ ...routeSchemas,
85
+ ...returns ? { returns } : {}
86
+ };
87
+ }
88
+ };
89
+ return builder;
90
+ }
91
+ //#endregion
92
+ exports.createRouteBuilder = createRouteBuilder;
93
+
94
+ //# sourceMappingURL=route.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.cjs","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,WAAA,GAAA,sBAAA,YAAA,EAAA,GAAA,sBAAA,iBAAA,CALJ,WAAW,KAAK,iBAAiB,GACjC,WAAW,KAAK,YAAY,GAC5B,WAAW,KAAK,wBAAwB,GACxC,WAAW,KAAK,cAAc,CAEJ,IAAA,GAAA,sBAAA,gBAAA,CAAwB,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,mBAAA,mBAAmB,UAAU;GAClD,MAAM,OAAO,eAAe,MAAM,QAAQ,SAAS,WAAW;GAE9D,IAAI,cAAA,cAAc,QAAQ,GAAG;IAC3B,MAAM,iBAAiB,mBAAA,mBAAmB,UAAU,kBAAA,sBAAsB;IAC1E,MAAM,UAAU,sBAAsB;KACpC,oBAAA,GAAA,sBAAA,8BAAA,CAAiD,WAAW;KAC9C;KACd,2BAAA,GAAA,sBAAA,8BAAA,CAAwD,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,oBAAA,GAAA,sBAAA,8BAAA,CAAiD,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"}
@@ -0,0 +1,5 @@
1
+ import { Method, RouteBuilder, RoutePath, ValidatorParts } from './types/index.js';
2
+ import { HttpMethod } from './types/units.js';
3
+ import { SchemaValidators } from './define/validators.js';
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>;
@@ -0,0 +1,42 @@
1
+ //#region src/taser-app.ts
2
+ var TaserServeView = class {
3
+ runtime;
4
+ constructor(runtime) {
5
+ this.runtime = runtime;
6
+ }
7
+ fetch(request, env, executionCtx) {
8
+ return this.runtime.fetch(request, env, executionCtx);
9
+ }
10
+ native(native) {
11
+ return new TaserNativeBound(this.runtime, native);
12
+ }
13
+ };
14
+ var TaserNativeBound = class {
15
+ runtime;
16
+ boundNative;
17
+ constructor(runtime, boundNative) {
18
+ this.runtime = runtime;
19
+ this.boundNative = boundNative;
20
+ }
21
+ fetch(request, env, executionCtx) {
22
+ return this.runtime.native(this.boundNative).fetch(request, env, executionCtx);
23
+ }
24
+ };
25
+ var TaserMountedApp = class extends TaserServeView {};
26
+ var TaserApp = class extends TaserServeView {
27
+ __manifest;
28
+ constructor(runtime, manifest) {
29
+ super(runtime);
30
+ if (manifest !== void 0) this.__manifest = manifest;
31
+ }
32
+ base(prefix) {
33
+ this.runtime.registerRoutePrefix(prefix);
34
+ return new TaserMountedApp(this.runtime);
35
+ }
36
+ };
37
+ //#endregion
38
+ exports.TaserApp = TaserApp;
39
+ exports.TaserMountedApp = TaserMountedApp;
40
+ exports.TaserNativeBound = TaserNativeBound;
41
+
42
+ //# sourceMappingURL=taser-app.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taser-app.cjs","names":[],"sources":["../../src/taser-app.ts"],"sourcesContent":["import type { TaserRuntime } from '@taserjs/router-core'\nimport type { RouteManifestShape } from '@taserjs/router-core'\n\nclass TaserServeView {\n constructor(protected readonly runtime: TaserRuntime) { }\n\n fetch(request: Request, env?: unknown, executionCtx?: unknown): Promise<Response> {\n return this.runtime.fetch(request, env, executionCtx as never)\n }\n\n native(native: unknown): TaserNativeBound {\n return new TaserNativeBound(this.runtime, native)\n }\n}\n\nexport class TaserNativeBound {\n constructor(\n private readonly runtime: TaserRuntime,\n private readonly boundNative: unknown,\n ) { }\n\n fetch(request: Request, env?: unknown, executionCtx?: unknown): Promise<Response> {\n return this.runtime.native(this.boundNative).fetch(request, env, executionCtx as never)\n }\n}\n\nexport class TaserMountedApp extends TaserServeView { }\n\nexport class TaserApp<TManifest extends RouteManifestShape = RouteManifestShape> extends TaserServeView {\n readonly __manifest?: TManifest\n\n constructor(runtime: TaserRuntime, manifest?: TManifest) {\n super(runtime)\n if (manifest !== undefined) {\n this.__manifest = manifest\n }\n }\n\n base(prefix: string): TaserMountedApp {\n this.runtime.registerRoutePrefix(prefix)\n return new TaserMountedApp(this.runtime)\n }\n}\n"],"mappings":";AAGA,IAAM,iBAAN,MAAqB;CACY;CAA/B,YAAY,SAA0C;EAAvB,KAAA,UAAA;CAAyB;CAExD,MAAM,SAAkB,KAAe,cAA2C;EAChF,OAAO,KAAK,QAAQ,MAAM,SAAS,KAAK,YAAqB;CAC/D;CAEA,OAAO,QAAmC;EACxC,OAAO,IAAI,iBAAiB,KAAK,SAAS,MAAM;CAClD;AACF;AAEA,IAAa,mBAAb,MAA8B;CAET;CACA;CAFnB,YACE,SACA,aACA;EAFiB,KAAA,UAAA;EACA,KAAA,cAAA;CACf;CAEJ,MAAM,SAAkB,KAAe,cAA2C;EAChF,OAAO,KAAK,QAAQ,OAAO,KAAK,WAAW,CAAC,CAAC,MAAM,SAAS,KAAK,YAAqB;CACxF;AACF;AAEA,IAAa,kBAAb,cAAqC,eAAe,CAAE;AAEtD,IAAa,WAAb,cAAyF,eAAe;CACtG;CAEA,YAAY,SAAuB,UAAsB;EACvD,MAAM,OAAO;EACb,IAAI,aAAa,KAAA,GACf,KAAK,aAAa;CAEtB;CAEA,KAAK,QAAiC;EACpC,KAAK,QAAQ,oBAAoB,MAAM;EACvC,OAAO,IAAI,gBAAgB,KAAK,OAAO;CACzC;AACF"}
@@ -0,0 +1,21 @@
1
+ import { TaserRuntime, RouteManifestShape } from '@taserjs/router-core';
2
+ declare class TaserServeView {
3
+ protected readonly runtime: TaserRuntime;
4
+ constructor(runtime: TaserRuntime);
5
+ fetch(request: Request, env?: unknown, executionCtx?: unknown): Promise<Response>;
6
+ native(native: unknown): TaserNativeBound;
7
+ }
8
+ export declare class TaserNativeBound {
9
+ private readonly runtime;
10
+ private readonly boundNative;
11
+ constructor(runtime: TaserRuntime, boundNative: unknown);
12
+ fetch(request: Request, env?: unknown, executionCtx?: unknown): Promise<Response>;
13
+ }
14
+ export declare class TaserMountedApp extends TaserServeView {
15
+ }
16
+ export declare class TaserApp<TManifest extends RouteManifestShape = RouteManifestShape> extends TaserServeView {
17
+ readonly __manifest?: TManifest;
18
+ constructor(runtime: TaserRuntime, manifest?: TManifest);
19
+ base(prefix: string): TaserMountedApp;
20
+ }
21
+ export {};
@@ -0,0 +1,83 @@
1
+ const require_factories = require("./factories.cjs");
2
+ const require_handler = require("./define/handler.cjs");
3
+ const require_middleware = require("./define/middleware.cjs");
4
+ const require_middleware$1 = require("./middleware.cjs");
5
+ const require_taser_app = require("./taser-app.cjs");
6
+ let _taserjs_router_utils = require("@taserjs/router-utils");
7
+ let _taserjs_router_core = require("@taserjs/router-core");
8
+ //#region src/taser-router.ts
9
+ function toOnErrorHandler(onErrorOptions) {
10
+ return (0, _taserjs_router_utils.normalizeOnError)(onErrorOptions);
11
+ }
12
+ var emptyContext = {};
13
+ var TaserRouter = class {
14
+ state;
15
+ constructor(options = {}, state) {
16
+ this.state = {
17
+ options,
18
+ contextDef: state?.contextDef ?? emptyContext,
19
+ ...state?.onError !== void 0 ? { onError: state.onError } : {},
20
+ ...state?.notFound !== void 0 ? { notFound: state.notFound } : {}
21
+ };
22
+ }
23
+ context(definition) {
24
+ this.state.contextDef = definition;
25
+ return this;
26
+ }
27
+ onError(options) {
28
+ this.state.onError = toOnErrorHandler(options);
29
+ return this;
30
+ }
31
+ notFound(handler) {
32
+ this.state.notFound = (ctx) => handler(ctx);
33
+ return this;
34
+ }
35
+ get = require_factories.createGetRoute;
36
+ post = require_factories.createPostRoute;
37
+ put = require_factories.createPutRoute;
38
+ patch = require_factories.createPatchRoute;
39
+ delete = require_factories.createDeleteRoute;
40
+ options = require_factories.createOptionsRoute;
41
+ head = require_factories.createHeadRoute;
42
+ any = require_factories.createAnyRoute;
43
+ all = require_factories.createAllRoute;
44
+ middleware(layout) {
45
+ return require_middleware$1.createMiddleware(layout);
46
+ }
47
+ defineHandler(options) {
48
+ return options === void 0 ? require_handler.defineHandler() : require_handler.defineHandler(options);
49
+ }
50
+ defineMiddleware() {
51
+ return require_middleware.defineMiddleware();
52
+ }
53
+ create(manifest) {
54
+ const definition = this.state.contextDef;
55
+ const validateResponse = this.state.options.response?.validate ?? true;
56
+ const onValidationFailure = this.state.options.response?.onValidationFailure;
57
+ const bootPromise = Promise.resolve(definition.boot?.() ?? {});
58
+ return new require_taser_app.TaserApp((0, _taserjs_router_core.createTaserRuntime)(manifest, async ({ native }) => {
59
+ const bootContext = await bootPromise;
60
+ const requestContext = await definition.request?.({ native }) ?? {};
61
+ return {
62
+ ...bootContext,
63
+ ...requestContext
64
+ };
65
+ }, {
66
+ response: {
67
+ validate: validateResponse,
68
+ ...onValidationFailure !== void 0 ? { onValidationFailure } : {}
69
+ },
70
+ ...this.state.onError !== void 0 ? { onError: this.state.onError } : {},
71
+ ...this.state.notFound !== void 0 ? { notFound: this.state.notFound } : {},
72
+ ...this.state.options.cookies !== void 0 ? { cookies: this.state.options.cookies } : {}
73
+ }), manifest);
74
+ }
75
+ };
76
+ function createTaserApp(options = {}) {
77
+ return new TaserRouter(options);
78
+ }
79
+ //#endregion
80
+ exports.TaserRouter = TaserRouter;
81
+ exports.createTaserApp = createTaserApp;
82
+
83
+ //# sourceMappingURL=taser-router.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taser-router.cjs","names":[],"sources":["../../src/taser-router.ts"],"sourcesContent":["import {\n createTaserRuntime,\n type NotFoundHandler,\n type OnErrorHandler,\n type RouteManifestShape,\n} from '@taserjs/router-core'\nimport { normalizeOnError } from '@taserjs/router-utils'\n\nimport {\n createAllRoute,\n createAnyRoute,\n createDeleteRoute,\n createGetRoute,\n createHeadRoute,\n createOptionsRoute,\n createPatchRoute,\n createPostRoute,\n createPutRoute,\n} from './factories.js'\nimport { defineHandler } from './define/handler.js'\nimport { defineMiddleware } from './define/middleware.js'\nimport { createMiddleware } from './middleware.js'\nimport { TaserApp } from './taser-app.js'\nimport type {\n ContextDefinition,\n CreateTaserAppOptions,\n OnErrorOptions,\n} from './types/app.js'\nimport type { AppContext } from './types/units.js'\nimport type { HandlerBuilder, LayoutId, MiddlewareBuilder } from './types/index.js'\nimport type { Schema } from './types/schema.js'\nimport type {\n CreateAllRoute,\n CreateAnyRoute,\n CreateWithBodyRoute,\n CreateWithoutBodyRoute,\n} from './factories.js'\n\nfunction toOnErrorHandler(\n onErrorOptions: OnErrorOptions | OnErrorOptions['handle'],\n): OnErrorHandler {\n return normalizeOnError(onErrorOptions)\n}\n\ntype RouterState = {\n options: CreateTaserAppOptions\n contextDef: ContextDefinition<Record<string, unknown>, Record<string, unknown>>\n onError?: OnErrorHandler\n notFound?: NotFoundHandler\n}\n\nconst emptyContext: ContextDefinition<Record<string, unknown>, Record<string, unknown>> = {}\n\nexport class TaserRouter<TAppContext extends Record<string, unknown> = AppContext> {\n private readonly state: RouterState\n\n constructor(options: CreateTaserAppOptions = {}, state?: Partial<Omit<RouterState, 'options'>>) {\n this.state = {\n options,\n contextDef: state?.contextDef ?? emptyContext,\n ...(state?.onError !== undefined ? { onError: state.onError } : {}),\n ...(state?.notFound !== undefined ? { notFound: state.notFound } : {}),\n }\n }\n\n context<\n TBoot extends Record<string, unknown>,\n TReq extends Record<string, unknown>,\n >(definition: ContextDefinition<TBoot, TReq>): TaserRouter<TBoot & TReq> {\n this.state.contextDef = definition\n return this as unknown as TaserRouter<TBoot & TReq>\n }\n\n onError<TResponses extends import('./types/returns.js').ReturnsMap = import('./types/returns.js').ReturnsMap>(\n options: OnErrorOptions<TResponses> | OnErrorOptions<TResponses>['handle'],\n ): this {\n this.state.onError = toOnErrorHandler(options)\n return this\n }\n\n notFound(\n handler: (ctx: unknown) => Response | Promise<Response> | unknown,\n ): this {\n this.state.notFound = ctx => handler(ctx)\n return this\n }\n\n get: CreateWithoutBodyRoute<'GET', TAppContext> = createGetRoute as CreateWithoutBodyRoute<'GET', TAppContext>\n post: CreateWithBodyRoute<'POST', TAppContext> = createPostRoute as CreateWithBodyRoute<'POST', TAppContext>\n put: CreateWithBodyRoute<'PUT', TAppContext> = createPutRoute as CreateWithBodyRoute<'PUT', TAppContext>\n patch: CreateWithBodyRoute<'PATCH', TAppContext> = createPatchRoute as CreateWithBodyRoute<'PATCH', TAppContext>\n delete: CreateWithoutBodyRoute<'DELETE', TAppContext> = createDeleteRoute as CreateWithoutBodyRoute<'DELETE', TAppContext>\n options: CreateWithoutBodyRoute<'OPTIONS', TAppContext> = createOptionsRoute as CreateWithoutBodyRoute<'OPTIONS', TAppContext>\n head: CreateWithoutBodyRoute<'HEAD', TAppContext> = createHeadRoute as CreateWithoutBodyRoute<'HEAD', TAppContext>\n any: CreateAnyRoute<TAppContext> = createAnyRoute as CreateAnyRoute<TAppContext>\n all: CreateAllRoute<TAppContext> = createAllRoute as CreateAllRoute<TAppContext>\n\n middleware<const Layout extends LayoutId>(layout: Layout): MiddlewareBuilder<Layout, readonly [], TAppContext> {\n return createMiddleware(layout) as MiddlewareBuilder<Layout, readonly [], TAppContext>\n }\n\n defineHandler<\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 ): HandlerBuilder<\n readonly [],\n { query: TQuery, params: TParams, body: TBody },\n {},\n TAppContext\n > {\n return options === undefined\n ? defineHandler<TAppContext>()\n : defineHandler<TAppContext>(options)\n }\n\n defineMiddleware(): ReturnType<typeof defineMiddleware<TAppContext>> {\n return defineMiddleware<TAppContext>()\n }\n\n create<const TManifest extends RouteManifestShape>(manifest: TManifest): TaserApp<TManifest> {\n const definition = this.state.contextDef\n const validateResponse = this.state.options.response?.validate ?? true\n const onValidationFailure = this.state.options.response?.onValidationFailure\n const bootPromise = Promise.resolve(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n definition.boot?.() ?? ({} as Record<string, unknown>),\n )\n\n const runtime = createTaserRuntime(\n manifest,\n async ({ native }) => {\n const bootContext = await bootPromise\n const requestContext = await definition.request?.({ native }) ?? {}\n return { ...bootContext, ...requestContext }\n },\n {\n response: {\n validate: validateResponse,\n ...(onValidationFailure !== undefined ? { onValidationFailure } : {}),\n },\n ...(this.state.onError !== undefined ? { onError: this.state.onError } : {}),\n ...(this.state.notFound !== undefined ? { notFound: this.state.notFound } : {}),\n ...(this.state.options.cookies !== undefined ? { cookies: this.state.options.cookies } : {}),\n },\n )\n\n return new TaserApp(runtime, manifest)\n }\n}\n\nexport function createTaserApp(options: CreateTaserAppOptions = {}): TaserRouter {\n return new TaserRouter(options)\n}\n"],"mappings":";;;;;;;;AAsCA,SAAS,iBACP,gBACgB;CAChB,QAAA,GAAA,sBAAA,iBAAA,CAAwB,cAAc;AACxC;AASA,IAAM,eAAoF,CAAC;AAE3F,IAAa,cAAb,MAAmF;CACjF;CAEA,YAAY,UAAiC,CAAC,GAAG,OAA+C;EAC9F,KAAK,QAAQ;GACX;GACA,YAAY,OAAO,cAAc;GACjC,GAAI,OAAO,YAAY,KAAA,IAAY,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;GACjE,GAAI,OAAO,aAAa,KAAA,IAAY,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;EACtE;CACF;CAEA,QAGE,YAAuE;EACvE,KAAK,MAAM,aAAa;EACxB,OAAO;CACT;CAEA,QACE,SACM;EACN,KAAK,MAAM,UAAU,iBAAiB,OAAO;EAC7C,OAAO;CACT;CAEA,SACE,SACM;EACN,KAAK,MAAM,YAAW,QAAO,QAAQ,GAAG;EACxC,OAAO;CACT;CAEA,MAAkD,kBAAA;CAClD,OAAiD,kBAAA;CACjD,MAA+C,kBAAA;CAC/C,QAAmD,kBAAA;CACnD,SAAwD,kBAAA;CACxD,UAA0D,kBAAA;CAC1D,OAAoD,kBAAA;CACpD,MAAmC,kBAAA;CACnC,MAAmC,kBAAA;CAEnC,WAA0C,QAAqE;EAC7G,OAAO,qBAAA,iBAAiB,MAAM;CAChC;CAEA,cAKE,SAUA;EACA,OAAO,YAAY,KAAA,IACf,gBAAA,cAA2B,IAC3B,gBAAA,cAA2B,OAAO;CACxC;CAEA,mBAAqE;EACnE,OAAO,mBAAA,iBAA8B;CACvC;CAEA,OAAmD,UAA0C;EAC3F,MAAM,aAAa,KAAK,MAAM;EAC9B,MAAM,mBAAmB,KAAK,MAAM,QAAQ,UAAU,YAAY;EAClE,MAAM,sBAAsB,KAAK,MAAM,QAAQ,UAAU;EACzD,MAAM,cAAc,QAAQ,QAE1B,WAAW,OAAO,KAAM,CAAC,CAC3B;EAoBA,OAAO,IAAI,kBAAA,UAAA,GAAA,qBAAA,mBAAA,CAjBT,UACA,OAAO,EAAE,aAAa;GACpB,MAAM,cAAc,MAAM;GAC1B,MAAM,iBAAiB,MAAM,WAAW,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC;GAClE,OAAO;IAAE,GAAG;IAAa,GAAG;GAAe;EAC7C,GACA;GACE,UAAU;IACR,UAAU;IACV,GAAI,wBAAwB,KAAA,IAAY,EAAE,oBAAoB,IAAI,CAAC;GACrE;GACA,GAAI,KAAK,MAAM,YAAY,KAAA,IAAY,EAAE,SAAS,KAAK,MAAM,QAAQ,IAAI,CAAC;GAC1E,GAAI,KAAK,MAAM,aAAa,KAAA,IAAY,EAAE,UAAU,KAAK,MAAM,SAAS,IAAI,CAAC;GAC7E,GAAI,KAAK,MAAM,QAAQ,YAAY,KAAA,IAAY,EAAE,SAAS,KAAK,MAAM,QAAQ,QAAQ,IAAI,CAAC;EAC5F,CAGkB,GAAS,QAAQ;CACvC;AACF;AAEA,SAAgB,eAAe,UAAiC,CAAC,GAAgB;CAC/E,OAAO,IAAI,YAAY,OAAO;AAChC"}
@@ -0,0 +1,44 @@
1
+ import { NotFoundHandler, OnErrorHandler, RouteManifestShape } from '@taserjs/router-core';
2
+ import { defineMiddleware } from './define/middleware.js';
3
+ import { TaserApp } from './taser-app.js';
4
+ import { ContextDefinition, CreateTaserAppOptions, OnErrorOptions } from './types/app.js';
5
+ import { AppContext } from './types/units.js';
6
+ import { HandlerBuilder, LayoutId, MiddlewareBuilder } from './types/index.js';
7
+ import { Schema } from './types/schema.js';
8
+ import { CreateAllRoute, CreateAnyRoute, CreateWithBodyRoute, CreateWithoutBodyRoute } from './factories.js';
9
+ type RouterState = {
10
+ options: CreateTaserAppOptions;
11
+ contextDef: ContextDefinition<Record<string, unknown>, Record<string, unknown>>;
12
+ onError?: OnErrorHandler;
13
+ notFound?: NotFoundHandler;
14
+ };
15
+ export declare class TaserRouter<TAppContext extends Record<string, unknown> = AppContext> {
16
+ private readonly state;
17
+ constructor(options?: CreateTaserAppOptions, state?: Partial<Omit<RouterState, 'options'>>);
18
+ context<TBoot extends Record<string, unknown>, TReq extends Record<string, unknown>>(definition: ContextDefinition<TBoot, TReq>): TaserRouter<TBoot & TReq>;
19
+ onError<TResponses extends import('./types/returns.js').ReturnsMap = import('./types/returns.js').ReturnsMap>(options: OnErrorOptions<TResponses> | OnErrorOptions<TResponses>['handle']): this;
20
+ notFound(handler: (ctx: unknown) => Response | Promise<Response> | unknown): this;
21
+ get: CreateWithoutBodyRoute<'GET', TAppContext>;
22
+ post: CreateWithBodyRoute<'POST', TAppContext>;
23
+ put: CreateWithBodyRoute<'PUT', TAppContext>;
24
+ patch: CreateWithBodyRoute<'PATCH', TAppContext>;
25
+ delete: CreateWithoutBodyRoute<'DELETE', TAppContext>;
26
+ options: CreateWithoutBodyRoute<'OPTIONS', TAppContext>;
27
+ head: CreateWithoutBodyRoute<'HEAD', TAppContext>;
28
+ any: CreateAnyRoute<TAppContext>;
29
+ all: CreateAllRoute<TAppContext>;
30
+ middleware<const Layout extends LayoutId>(layout: Layout): MiddlewareBuilder<Layout, readonly [], TAppContext>;
31
+ defineHandler<TQuery = unknown, TParams = unknown, TBody = unknown>(options?: {
32
+ query?: Schema<TQuery>;
33
+ params?: Schema<TParams>;
34
+ body?: Schema<TBody>;
35
+ }): HandlerBuilder<readonly [], {
36
+ query: TQuery;
37
+ params: TParams;
38
+ body: TBody;
39
+ }, {}, TAppContext>;
40
+ defineMiddleware(): ReturnType<typeof defineMiddleware<TAppContext>>;
41
+ create<const TManifest extends RouteManifestShape>(manifest: TManifest): TaserApp<TManifest>;
42
+ }
43
+ export declare function createTaserApp(options?: CreateTaserAppOptions): TaserRouter;
44
+ export {};
@@ -0,0 +1,46 @@
1
+ import { ResponseValidationFailureHandler } from '@taserjs/router-utils';
2
+ import { TaserApp } from '../taser-app.js';
3
+ import { ReturnsMap } from './returns.js';
4
+ import { Schema } from './schema.js';
5
+ export type CreateTaserAppOptions = {
6
+ response?: {
7
+ /** Validate handler replies against returns maps. Default true. */
8
+ validate?: boolean;
9
+ onValidationFailure?: ResponseValidationFailureHandler;
10
+ };
11
+ /** Global cookie defaults and signing secret. Per-call `ctx.cookies.set` options override defaults. */
12
+ cookies?: {
13
+ secret?: string | BufferSource;
14
+ path?: string;
15
+ httpOnly?: boolean;
16
+ sameSite?: 'Strict' | 'Lax' | 'None' | 'strict' | 'lax' | 'none';
17
+ secure?: boolean;
18
+ domain?: string;
19
+ maxAge?: number;
20
+ expires?: Date;
21
+ };
22
+ };
23
+ export type CreateContextArgs = {
24
+ native?: import('./units.js').NativeContext;
25
+ };
26
+ export type ContextDefinition<TBoot extends Record<string, unknown> = Record<string, never>, TReq extends Record<string, unknown> = Record<string, never>> = {
27
+ boot?: () => TBoot | Promise<TBoot>;
28
+ request?: (args: CreateContextArgs) => TReq | Promise<TReq>;
29
+ };
30
+ export type InferAppContext<T extends ContextDefinition<Record<string, unknown>, Record<string, unknown>>> = T extends ContextDefinition<infer TBoot, infer TReq> ? TBoot & TReq : Record<string, never>;
31
+ export type OnErrorOptions<TResponses extends ReturnsMap = ReturnsMap> = {
32
+ responses?: TResponses;
33
+ handle: (error: unknown, ctx?: unknown) => Response | Promise<Response>;
34
+ };
35
+ export type InferAppManifest<TApp> = TApp extends TaserApp<infer TManifest> ? TManifest : never;
36
+ export type TaserHandler<TFrameworkApp> = {
37
+ /**
38
+ * Mount the Taser handler on a framework app.
39
+ * Use universal wildcard patterns (`/*`, `/prefix/*`) for Hono/Fastify.
40
+ * Use framework-native splat patterns for Express (e.g. `/{*splat}`, `/*splat`).
41
+ */
42
+ mount(pattern: string, frameworkApp: TFrameworkApp): void;
43
+ };
44
+ export type { RouteManifestShape } from '@taserjs/router-core';
45
+ export type { Schema };
46
+ export type { TaserApp, TaserMountedApp, TaserNativeBound } from '../taser-app.js';