@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 @@
1
+ {"version":3,"file":"secure-headers.js","names":[],"sources":["../../../src/middleware/secure-headers.ts"],"sourcesContent":["import { secureHeaders as honoSecureHeaders } from 'hono/secure-headers'\n\nimport { wrapHonoMiddleware } from './auth.js'\n\nconst honoSecureHeadersMiddleware = wrapHonoMiddleware(honoSecureHeaders)\n\nexport function secureHeaders(...args: Parameters<typeof honoSecureHeaders>) {\n return honoSecureHeadersMiddleware(...args)\n}\n\nexport type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>\n"],"mappings":";;;AAIA,IAAM,8BAA8B,mBAAmB,eAAiB;AAExE,SAAgB,cAAc,GAAG,MAA4C;CAC3E,OAAO,4BAA4B,GAAG,IAAI;AAC5C"}
@@ -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,11 @@
1
+ import { wrapHonoMiddleware } from "./auth.js";
2
+ import { timing as timing$1 } from "hono/timing";
3
+ //#region src/middleware/timing.ts
4
+ var honoTimingMiddleware = wrapHonoMiddleware(timing$1);
5
+ function timing(...args) {
6
+ return honoTimingMiddleware(...args);
7
+ }
8
+ //#endregion
9
+ export { timing };
10
+
11
+ //# sourceMappingURL=timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.js","names":[],"sources":["../../../src/middleware/timing.ts"],"sourcesContent":["import { timing as honoTiming } from 'hono/timing'\n\nimport { wrapHonoMiddleware } from './auth.js'\n\nconst honoTimingMiddleware = wrapHonoMiddleware(honoTiming)\n\nexport function timing(...args: Parameters<typeof honoTiming>) {\n return honoTimingMiddleware(...args)\n}\n\nexport type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>\n"],"mappings":";;;AAIA,IAAM,uBAAuB,mBAAmB,QAAU;AAE1D,SAAgB,OAAO,GAAG,MAAqC;CAC7D,OAAO,qBAAqB,GAAG,IAAI;AACrC"}
@@ -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,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
+ export { createMiddleware };
16
+
17
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","names":[],"sources":["../../src/middleware.ts"],"sourcesContent":["import type { LayoutId, MiddlewareBuilder } from './types/index.js'\nimport type { MiddlewareDefinition } from './types/units.js'\n\nexport function createMiddleware<const Layout extends LayoutId>(\n layout: Layout,\n): MiddlewareBuilder<Layout, readonly []> {\n const entries: MiddlewareDefinition[] = []\n\n const chain = {\n layout,\n middlewares: entries,\n use(definition: MiddlewareDefinition) {\n entries.push(definition)\n return chain\n },\n }\n\n return chain as unknown as MiddlewareBuilder<Layout, readonly []>\n}\n"],"mappings":";AAGA,SAAgB,iBACd,QACwC;CACxC,MAAM,UAAkC,CAAC;CAEzC,MAAM,QAAQ;EACZ;EACA,aAAa;EACb,IAAI,YAAkC;GACpC,QAAQ,KAAK,UAAU;GACvB,OAAO;EACT;CACF;CAEA,OAAO;AACT"}
@@ -0,0 +1,2 @@
1
+ export interface RouterRegister {
2
+ }
@@ -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,94 @@
1
+ import { isHandlerUnit } from "./types/units.js";
2
+ import { HANDLER_SCHEMA_KEY_MAP } from "./constants.js";
3
+ import { pickDefinedSchemas } from "./define/validators.js";
4
+ import { collectReturnsFromDefinitions, hasInputSchemas, mergeReturnsMaps, withAuto422 } from "@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 = withAuto422(mergeReturnsMaps(toUtilsMap(args.middlewareReturns), toUtilsMap(args.routeReturns), toUtilsMap(args.handlerMiddlewareReturns), toUtilsMap(args.handlerReturns)), 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 = pickDefinedSchemas(validators);
44
+ const base = buildRouteBase(path, method, methods, middlewares);
45
+ if (isHandlerUnit(fnOrUnit)) {
46
+ const handlerSchemas = pickDefinedSchemas(fnOrUnit, HANDLER_SCHEMA_KEY_MAP);
47
+ const returns = buildEffectiveReturns({
48
+ middlewareReturns: collectReturnsFromDefinitions(middlewares),
49
+ routeReturns,
50
+ handlerMiddlewareReturns: 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: 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
+ export { createRouteBuilder };
93
+
94
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","names":[],"sources":["../../src/route.ts"],"sourcesContent":["import type { StandardSchemaV1 } from '@standard-schema/spec'\nimport {\n collectReturnsFromDefinitions,\n hasInputSchemas,\n mergeReturnsMaps,\n withAuto422,\n} from '@taserjs/router-utils'\n\nimport type { Method, RouteBuilder, RoutePath, ReturnsMap, ValidatorParts } from './types/index.js'\nimport type { HttpMethod, MiddlewareDefinition } from './types/units.js'\nimport { isHandlerUnit } from './types/units.js'\nimport { HANDLER_SCHEMA_KEY_MAP } from './constants.js'\nimport {\n pickDefinedSchemas,\n type SchemaValidators,\n} from './define/validators.js'\n\nfunction toUtilsMap(map: ReturnsMap | undefined): Record<number, StandardSchemaV1> {\n if (!map) {\n return {}\n }\n const out: Record<number, StandardSchemaV1> = {}\n for (const [key, schema] of Object.entries(map)) {\n if (schema !== undefined) {\n out[Number(key)] = schema\n }\n }\n return out\n}\n\nfunction buildEffectiveReturns(args: {\n middlewareReturns: ReturnsMap\n routeReturns: ReturnsMap\n handlerMiddlewareReturns: ReturnsMap\n handlerReturns: ReturnsMap | undefined\n schemas: {\n query?: unknown\n params?: unknown\n body?: unknown\n handlerQuery?: unknown\n handlerParams?: unknown\n handlerBody?: unknown\n middlewares?: readonly MiddlewareDefinition[]\n handlerMiddlewares?: readonly MiddlewareDefinition[]\n }\n}): Record<number, StandardSchemaV1> | undefined {\n const merged = mergeReturnsMaps(\n toUtilsMap(args.middlewareReturns),\n toUtilsMap(args.routeReturns),\n toUtilsMap(args.handlerMiddlewareReturns),\n toUtilsMap(args.handlerReturns),\n )\n const with422 = withAuto422(merged, hasInputSchemas(args.schemas))\n return Object.keys(with422).length > 0 ? with422 : undefined\n}\n\nfunction buildRouteBase(\n path: string,\n method: HttpMethod | 'ANY' | 'ALL',\n methods: readonly HttpMethod[] | undefined,\n middlewares: MiddlewareDefinition[],\n) {\n return {\n path,\n method,\n ...(methods ? { methods: [...methods] } : {}),\n middlewares: [...middlewares],\n }\n}\n\n/** Shared internal builder — not part of the public `@taserjs/router` API. */\nexport function createRouteBuilder(\n path: string,\n method: HttpMethod | 'ANY' | 'ALL',\n validators: SchemaValidators = {},\n methods?: readonly HttpMethod[],\n): RouteBuilder<RoutePath, Method, readonly [], ValidatorParts> {\n const middlewares: MiddlewareDefinition[] = []\n let routeReturns: Record<number, StandardSchemaV1> = {}\n\n const builder = {\n path,\n method,\n returns(map: ReturnsMap) {\n routeReturns = { ...routeReturns, ...toUtilsMap(map) }\n return builder\n },\n use(definition: MiddlewareDefinition) {\n middlewares.push(definition)\n return builder\n },\n handler(fnOrUnit: ((ctx: unknown) => unknown) | unknown) {\n const routeSchemas = pickDefinedSchemas(validators)\n const base = buildRouteBase(path, method, methods, middlewares)\n\n if (isHandlerUnit(fnOrUnit)) {\n const handlerSchemas = pickDefinedSchemas(fnOrUnit, HANDLER_SCHEMA_KEY_MAP)\n const returns = buildEffectiveReturns({\n middlewareReturns: collectReturnsFromDefinitions(middlewares),\n routeReturns: routeReturns,\n handlerMiddlewareReturns: collectReturnsFromDefinitions(fnOrUnit.middlewares),\n handlerReturns: fnOrUnit.returns,\n schemas: {\n ...validators,\n handlerQuery: fnOrUnit.query,\n handlerParams: fnOrUnit.params,\n handlerBody: fnOrUnit.body,\n middlewares,\n handlerMiddlewares: fnOrUnit.middlewares,\n },\n })\n\n return {\n ...base,\n handlerMiddlewares: [...fnOrUnit.middlewares],\n handler: fnOrUnit.handler,\n ...routeSchemas,\n ...handlerSchemas,\n ...(returns ? { returns } : {}),\n }\n }\n\n const returns = buildEffectiveReturns({\n middlewareReturns: collectReturnsFromDefinitions(middlewares),\n routeReturns: routeReturns,\n handlerMiddlewareReturns: {},\n handlerReturns: undefined,\n schemas: {\n ...validators,\n middlewares,\n },\n })\n\n return {\n ...base,\n handlerMiddlewares: [],\n handler: fnOrUnit as (ctx: unknown) => Response | Promise<Response>,\n ...routeSchemas,\n ...(returns ? { returns } : {}),\n }\n },\n }\n\n return builder as unknown as RouteBuilder<RoutePath, Method, readonly [], ValidatorParts>\n}\n"],"mappings":";;;;;AAiBA,SAAS,WAAW,KAA+D;CACjF,IAAI,CAAC,KACH,OAAO,CAAC;CAEV,MAAM,MAAwC,CAAC;CAC/C,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QAAQ,GAAG,GAC5C,IAAI,WAAW,KAAA,GACb,IAAI,OAAO,GAAG,KAAK;CAGvB,OAAO;AACT;AAEA,SAAS,sBAAsB,MAekB;CAO/C,MAAM,UAAU,YAND,iBACb,WAAW,KAAK,iBAAiB,GACjC,WAAW,KAAK,YAAY,GAC5B,WAAW,KAAK,wBAAwB,GACxC,WAAW,KAAK,cAAc,CAEJ,GAAQ,gBAAgB,KAAK,OAAO,CAAC;CACjE,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,SAAS,IAAI,UAAU,KAAA;AACrD;AAEA,SAAS,eACP,MACA,QACA,SACA,aACA;CACA,OAAO;EACL;EACA;EACA,GAAI,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC;EAC3C,aAAa,CAAC,GAAG,WAAW;CAC9B;AACF;;AAGA,SAAgB,mBACd,MACA,QACA,aAA+B,CAAC,GAChC,SAC8D;CAC9D,MAAM,cAAsC,CAAC;CAC7C,IAAI,eAAiD,CAAC;CAEtD,MAAM,UAAU;EACd;EACA;EACA,QAAQ,KAAiB;GACvB,eAAe;IAAE,GAAG;IAAc,GAAG,WAAW,GAAG;GAAE;GACrD,OAAO;EACT;EACA,IAAI,YAAkC;GACpC,YAAY,KAAK,UAAU;GAC3B,OAAO;EACT;EACA,QAAQ,UAAiD;GACvD,MAAM,eAAe,mBAAmB,UAAU;GAClD,MAAM,OAAO,eAAe,MAAM,QAAQ,SAAS,WAAW;GAE9D,IAAI,cAAc,QAAQ,GAAG;IAC3B,MAAM,iBAAiB,mBAAmB,UAAU,sBAAsB;IAC1E,MAAM,UAAU,sBAAsB;KACpC,mBAAmB,8BAA8B,WAAW;KAC9C;KACd,0BAA0B,8BAA8B,SAAS,WAAW;KAC5E,gBAAgB,SAAS;KACzB,SAAS;MACP,GAAG;MACH,cAAc,SAAS;MACvB,eAAe,SAAS;MACxB,aAAa,SAAS;MACtB;MACA,oBAAoB,SAAS;KAC/B;IACF,CAAC;IAED,OAAO;KACL,GAAG;KACH,oBAAoB,CAAC,GAAG,SAAS,WAAW;KAC5C,SAAS,SAAS;KAClB,GAAG;KACH,GAAG;KACH,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;IAC/B;GACF;GAEA,MAAM,UAAU,sBAAsB;IACpC,mBAAmB,8BAA8B,WAAW;IAC9C;IACd,0BAA0B,CAAC;IAC3B,gBAAgB,KAAA;IAChB,SAAS;KACP,GAAG;KACH;IACF;GACF,CAAC;GAED,OAAO;IACL,GAAG;IACH,oBAAoB,CAAC;IACrB,SAAS;IACT,GAAG;IACH,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;GAC/B;EACF;CACF;CAEA,OAAO;AACT"}
@@ -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,40 @@
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
+ export { TaserApp, TaserMountedApp, TaserNativeBound };
39
+
40
+ //# sourceMappingURL=taser-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taser-app.js","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,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,82 @@
1
+ import { createAllRoute, createAnyRoute, createDeleteRoute, createGetRoute, createHeadRoute, createOptionsRoute, createPatchRoute, createPostRoute, createPutRoute } from "./factories.js";
2
+ import { defineHandler } from "./define/handler.js";
3
+ import { defineMiddleware } from "./define/middleware.js";
4
+ import { createMiddleware } from "./middleware.js";
5
+ import { TaserApp } from "./taser-app.js";
6
+ import { normalizeOnError } from "@taserjs/router-utils";
7
+ import { createTaserRuntime } from "@taserjs/router-core";
8
+ //#region src/taser-router.ts
9
+ function toOnErrorHandler(onErrorOptions) {
10
+ return 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 = createGetRoute;
36
+ post = createPostRoute;
37
+ put = createPutRoute;
38
+ patch = createPatchRoute;
39
+ delete = createDeleteRoute;
40
+ options = createOptionsRoute;
41
+ head = createHeadRoute;
42
+ any = createAnyRoute;
43
+ all = createAllRoute;
44
+ middleware(layout) {
45
+ return createMiddleware(layout);
46
+ }
47
+ defineHandler(options) {
48
+ return options === void 0 ? defineHandler() : defineHandler(options);
49
+ }
50
+ defineMiddleware() {
51
+ return 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 TaserApp(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
+ export { TaserRouter, createTaserApp };
81
+
82
+ //# sourceMappingURL=taser-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taser-router.js","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,OAAO,iBAAiB,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;CAClD,OAAiD;CACjD,MAA+C;CAC/C,QAAmD;CACnD,SAAwD;CACxD,UAA0D;CAC1D,OAAoD;CACpD,MAAmC;CACnC,MAAmC;CAEnC,WAA0C,QAAqE;EAC7G,OAAO,iBAAiB,MAAM;CAChC;CAEA,cAKE,SAUA;EACA,OAAO,YAAY,KAAA,IACf,cAA2B,IAC3B,cAA2B,OAAO;CACxC;CAEA,mBAAqE;EACnE,OAAO,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,SAlBK,mBACd,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,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';