@taserjs/router 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/cjs/builder/app.cjs +22 -0
  2. package/dist/cjs/builder/app.cjs.map +1 -0
  3. package/dist/cjs/builder/app.d.cts +11 -0
  4. package/dist/cjs/{constants.cjs → builder/constants.cjs} +1 -1
  5. package/dist/cjs/builder/constants.cjs.map +1 -0
  6. package/dist/cjs/{factories.cjs → builder/factories.cjs} +1 -1
  7. package/dist/cjs/builder/factories.cjs.map +1 -0
  8. package/dist/cjs/{factories.d.cts → builder/factories.d.cts} +2 -2
  9. package/dist/cjs/{middleware.cjs → builder/middleware.cjs} +1 -1
  10. package/dist/cjs/builder/middleware.cjs.map +1 -0
  11. package/dist/cjs/{middleware.d.cts → builder/middleware.d.cts} +1 -1
  12. package/dist/cjs/{route.cjs → builder/route.cjs} +19 -33
  13. package/dist/cjs/builder/route.cjs.map +1 -0
  14. package/dist/cjs/{route.d.cts → builder/route.d.cts} +3 -3
  15. package/dist/cjs/{taser-router.cjs → builder/router.cjs} +38 -11
  16. package/dist/cjs/builder/router.cjs.map +1 -0
  17. package/dist/cjs/builder/router.d.cts +48 -0
  18. package/dist/cjs/{create-context.cjs → context/create-context.cjs} +1 -1
  19. package/dist/cjs/context/create-context.cjs.map +1 -0
  20. package/dist/cjs/{create-context.d.cts → context/create-context.d.cts} +2 -2
  21. package/dist/cjs/define/validators.cjs +1 -1
  22. package/dist/cjs/define/validators.cjs.map +1 -1
  23. package/dist/cjs/define/validators.d.cts +1 -1
  24. package/dist/cjs/index.cjs +6 -16
  25. package/dist/cjs/index.d.cts +6 -7
  26. package/dist/cjs/middleware/body-limit.cjs +2 -2
  27. package/dist/cjs/middleware/body-limit.cjs.map +1 -1
  28. package/dist/cjs/middleware/compress.cjs +2 -2
  29. package/dist/cjs/middleware/compress.cjs.map +1 -1
  30. package/dist/cjs/middleware/cors.cjs +2 -2
  31. package/dist/cjs/middleware/cors.cjs.map +1 -1
  32. package/dist/cjs/middleware/csrf.cjs +2 -2
  33. package/dist/cjs/middleware/csrf.cjs.map +1 -1
  34. package/dist/cjs/middleware/etag.cjs +2 -2
  35. package/dist/cjs/middleware/etag.cjs.map +1 -1
  36. package/dist/cjs/middleware/jwk.cjs +2 -8
  37. package/dist/cjs/middleware/jwk.cjs.map +1 -1
  38. package/dist/cjs/middleware/jwt.cjs +2 -8
  39. package/dist/cjs/middleware/jwt.cjs.map +1 -1
  40. package/dist/cjs/middleware/secure-headers.cjs +2 -2
  41. package/dist/cjs/middleware/secure-headers.cjs.map +1 -1
  42. package/dist/cjs/middleware/timing.cjs +2 -2
  43. package/dist/cjs/middleware/timing.cjs.map +1 -1
  44. package/dist/cjs/middleware/wrap-hono.cjs +10 -0
  45. package/dist/cjs/middleware/wrap-hono.cjs.map +1 -1
  46. package/dist/cjs/middleware/wrap-hono.d.cts +4 -0
  47. package/dist/cjs/types/app.d.cts +7 -7
  48. package/dist/cjs/types/index.d.cts +32 -13
  49. package/dist/cjs/types/returns.d.cts +2 -2
  50. package/dist/cjs/types/type-utils.d.cts +1 -2
  51. package/dist/cjs/types/units.cjs.map +1 -1
  52. package/dist/cjs/types/units.d.cts +4 -9
  53. package/dist/esm/builder/app.d.ts +11 -0
  54. package/dist/esm/builder/app.js +22 -0
  55. package/dist/esm/builder/app.js.map +1 -0
  56. package/dist/esm/{constants.js → builder/constants.js} +1 -1
  57. package/dist/esm/builder/constants.js.map +1 -0
  58. package/dist/esm/{factories.d.ts → builder/factories.d.ts} +2 -2
  59. package/dist/esm/{factories.js → builder/factories.js} +1 -1
  60. package/dist/esm/builder/factories.js.map +1 -0
  61. package/dist/esm/{middleware.d.ts → builder/middleware.d.ts} +1 -1
  62. package/dist/esm/{middleware.js → builder/middleware.js} +1 -1
  63. package/dist/esm/builder/middleware.js.map +1 -0
  64. package/dist/esm/{route.d.ts → builder/route.d.ts} +3 -3
  65. package/dist/esm/{route.js → builder/route.js} +19 -33
  66. package/dist/esm/builder/route.js.map +1 -0
  67. package/dist/esm/builder/router.d.ts +48 -0
  68. package/dist/esm/{taser-router.js → builder/router.js} +37 -10
  69. package/dist/esm/builder/router.js.map +1 -0
  70. package/dist/esm/{create-context.d.ts → context/create-context.d.ts} +2 -2
  71. package/dist/esm/{create-context.js → context/create-context.js} +1 -1
  72. package/dist/esm/context/create-context.js.map +1 -0
  73. package/dist/esm/define/validators.d.ts +1 -1
  74. package/dist/esm/define/validators.js +1 -1
  75. package/dist/esm/define/validators.js.map +1 -1
  76. package/dist/esm/index.d.ts +6 -7
  77. package/dist/esm/index.js +5 -6
  78. package/dist/esm/middleware/body-limit.js +2 -2
  79. package/dist/esm/middleware/body-limit.js.map +1 -1
  80. package/dist/esm/middleware/compress.js +2 -2
  81. package/dist/esm/middleware/compress.js.map +1 -1
  82. package/dist/esm/middleware/cors.js +2 -2
  83. package/dist/esm/middleware/cors.js.map +1 -1
  84. package/dist/esm/middleware/csrf.js +2 -2
  85. package/dist/esm/middleware/csrf.js.map +1 -1
  86. package/dist/esm/middleware/etag.js +2 -2
  87. package/dist/esm/middleware/etag.js.map +1 -1
  88. package/dist/esm/middleware/jwk.js +2 -8
  89. package/dist/esm/middleware/jwk.js.map +1 -1
  90. package/dist/esm/middleware/jwt.js +2 -8
  91. package/dist/esm/middleware/jwt.js.map +1 -1
  92. package/dist/esm/middleware/secure-headers.js +2 -2
  93. package/dist/esm/middleware/secure-headers.js.map +1 -1
  94. package/dist/esm/middleware/timing.js +2 -2
  95. package/dist/esm/middleware/timing.js.map +1 -1
  96. package/dist/esm/middleware/wrap-hono.d.ts +4 -0
  97. package/dist/esm/middleware/wrap-hono.js +10 -1
  98. package/dist/esm/middleware/wrap-hono.js.map +1 -1
  99. package/dist/esm/types/app.d.ts +7 -7
  100. package/dist/esm/types/index.d.ts +32 -13
  101. package/dist/esm/types/returns.d.ts +2 -2
  102. package/dist/esm/types/type-utils.d.ts +1 -2
  103. package/dist/esm/types/units.d.ts +4 -9
  104. package/dist/esm/types/units.js.map +1 -1
  105. package/package.json +3 -3
  106. package/src/builder/app.ts +28 -0
  107. package/src/{factories.ts → builder/factories.ts} +2 -2
  108. package/src/{middleware.ts → builder/middleware.ts} +2 -2
  109. package/src/{route.ts → builder/route.ts} +30 -34
  110. package/src/builder/router.ts +347 -0
  111. package/src/{create-context.ts → context/create-context.ts} +2 -2
  112. package/src/define/validators.ts +1 -1
  113. package/src/index.ts +9 -12
  114. package/src/middleware/body-limit.ts +2 -2
  115. package/src/middleware/compress.ts +2 -2
  116. package/src/middleware/cors.ts +2 -2
  117. package/src/middleware/csrf.ts +2 -2
  118. package/src/middleware/etag.ts +2 -2
  119. package/src/middleware/jwk.ts +2 -7
  120. package/src/middleware/jwt.ts +2 -7
  121. package/src/middleware/secure-headers.ts +2 -2
  122. package/src/middleware/timing.ts +2 -2
  123. package/src/middleware/wrap-hono.ts +13 -0
  124. package/src/types/app.ts +12 -8
  125. package/src/types/index.ts +44 -10
  126. package/src/types/returns.ts +2 -2
  127. package/src/types/type-utils.ts +1 -2
  128. package/src/types/units.ts +4 -8
  129. package/dist/cjs/constants.cjs.map +0 -1
  130. package/dist/cjs/create-context.cjs.map +0 -1
  131. package/dist/cjs/factories.cjs.map +0 -1
  132. package/dist/cjs/middleware.cjs.map +0 -1
  133. package/dist/cjs/route.cjs.map +0 -1
  134. package/dist/cjs/taser-app.cjs +0 -36
  135. package/dist/cjs/taser-app.cjs.map +0 -1
  136. package/dist/cjs/taser-app.d.cts +0 -18
  137. package/dist/cjs/taser-router.cjs.map +0 -1
  138. package/dist/cjs/taser-router.d.cts +0 -42
  139. package/dist/esm/constants.js.map +0 -1
  140. package/dist/esm/create-context.js.map +0 -1
  141. package/dist/esm/factories.js.map +0 -1
  142. package/dist/esm/middleware.js.map +0 -1
  143. package/dist/esm/route.js.map +0 -1
  144. package/dist/esm/taser-app.d.ts +0 -18
  145. package/dist/esm/taser-app.js +0 -35
  146. package/dist/esm/taser-app.js.map +0 -1
  147. package/dist/esm/taser-router.d.ts +0 -42
  148. package/dist/esm/taser-router.js.map +0 -1
  149. package/src/taser-app.ts +0 -38
  150. package/src/taser-router.ts +0 -165
  151. /package/dist/cjs/{constants.d.cts → builder/constants.d.cts} +0 -0
  152. /package/dist/esm/{constants.d.ts → builder/constants.d.ts} +0 -0
  153. /package/src/{constants.ts → builder/constants.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","names":[],"sources":["../../../src/builder/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 {\n Method,\n RouteBuilder,\n RoutePath,\n ReturnsMap,\n ValidatorParts,\n} from \"../types/index.js\";\nimport type { HttpMethod, MiddlewareDefinition } from \"../types/units.js\";\nimport { isHandlerUnit } from \"../types/units.js\";\nimport { HANDLER_SCHEMA_KEY_MAP } from \"./constants.js\";\nimport { pickDefinedSchemas, type SchemaValidators } from \"../define/validators.js\";\n\nfunction toUtilsMap(map: ReturnsMap | undefined): Record<number, StandardSchemaV1> {\n if (!map) {\n return {};\n }\n const out: Record<number, StandardSchemaV1> = {};\n for (const [key, schema] of Object.entries(map)) {\n if (schema !== undefined) {\n out[Number(key)] = schema;\n }\n }\n return out;\n}\n\nfunction buildEffectiveReturns(args: {\n middlewareReturns: ReturnsMap;\n routeReturns: ReturnsMap;\n handlerMiddlewareReturns: ReturnsMap;\n handlerReturns: ReturnsMap | undefined;\n schemas: {\n query?: unknown;\n params?: unknown;\n body?: unknown;\n handlerQuery?: unknown;\n handlerParams?: unknown;\n handlerBody?: unknown;\n middlewares?: readonly MiddlewareDefinition[];\n handlerMiddlewares?: readonly MiddlewareDefinition[];\n };\n}): Record<number, StandardSchemaV1> | undefined {\n const merged = mergeReturnsMaps(\n toUtilsMap(args.middlewareReturns),\n toUtilsMap(args.routeReturns),\n toUtilsMap(args.handlerMiddlewareReturns),\n toUtilsMap(args.handlerReturns),\n );\n const with422 = withAuto422(merged, hasInputSchemas(args.schemas));\n return Object.keys(with422).length > 0 ? with422 : undefined;\n}\n\nfunction buildRouteBase(\n path: string,\n method: HttpMethod | \"ANY\" | \"ALL\",\n methods: readonly HttpMethod[] | undefined,\n middlewares: MiddlewareDefinition[],\n) {\n return {\n path,\n method,\n ...(methods ? { methods: [...methods] } : {}),\n middlewares: [...middlewares],\n };\n}\n\n/** Shared internal builder — not part of the public `@taserjs/router` API. */\nexport function createRouteBuilder(\n path: string,\n method: HttpMethod | \"ANY\" | \"ALL\",\n validators: SchemaValidators = {},\n methods?: readonly HttpMethod[],\n): RouteBuilder<RoutePath, Method, readonly [], ValidatorParts> {\n const middlewares: MiddlewareDefinition[] = [];\n let routeReturns: Record<number, StandardSchemaV1> = {};\n\n const builder = {\n path,\n method,\n returns(map: ReturnsMap) {\n routeReturns = { ...routeReturns, ...toUtilsMap(map) };\n return builder;\n },\n use(definition: MiddlewareDefinition) {\n middlewares.push(definition);\n return builder;\n },\n handler(fnOrUnit: ((ctx: unknown) => unknown) | unknown) {\n const routeSchemas = pickDefinedSchemas(validators);\n const base = buildRouteBase(path, method, methods, middlewares);\n\n const unit = isHandlerUnit(fnOrUnit)\n ? fnOrUnit\n : {\n handler: fnOrUnit as (ctx: unknown) => Response | Promise<Response>,\n middlewares: [] as MiddlewareDefinition[],\n returns: undefined as ReturnsMap | undefined,\n };\n\n const handlerSchemas = isHandlerUnit(fnOrUnit)\n ? pickDefinedSchemas(fnOrUnit, HANDLER_SCHEMA_KEY_MAP)\n : {};\n\n const returns = buildEffectiveReturns({\n middlewareReturns: collectReturnsFromDefinitions(middlewares),\n routeReturns,\n handlerMiddlewareReturns: collectReturnsFromDefinitions(unit.middlewares),\n handlerReturns: unit.returns,\n schemas: {\n ...validators,\n handlerQuery: (unit as any).query,\n handlerParams: (unit as any).params,\n handlerBody: (unit as any).body,\n middlewares,\n handlerMiddlewares: unit.middlewares,\n },\n });\n\n return {\n ...base,\n handlerMiddlewares: [...unit.middlewares],\n handler: unit.handler,\n ...routeSchemas,\n ...handlerSchemas,\n ...(returns ? { returns } : {}),\n };\n },\n };\n\n return builder as unknown as RouteBuilder<RoutePath, Method, readonly [], ValidatorParts>;\n}\n"],"mappings":";;;;;AAoBA,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,MAAM,OAAO,cAAc,QAAQ,IAC/B,WACA;IACE,SAAS;IACT,aAAa,CAAC;IACd,SAAS,KAAA;GACX;GAEJ,MAAM,iBAAiB,cAAc,QAAQ,IACzC,mBAAmB,UAAU,sBAAsB,IACnD,CAAC;GAEL,MAAM,UAAU,sBAAsB;IACpC,mBAAmB,8BAA8B,WAAW;IAC5D;IACA,0BAA0B,8BAA8B,KAAK,WAAW;IACxE,gBAAgB,KAAK;IACrB,SAAS;KACP,GAAG;KACH,cAAe,KAAa;KAC5B,eAAgB,KAAa;KAC7B,aAAc,KAAa;KAC3B;KACA,oBAAoB,KAAK;IAC3B;GACF,CAAC;GAED,OAAO;IACL,GAAG;IACH,oBAAoB,CAAC,GAAG,KAAK,WAAW;IACxC,SAAS,KAAK;IACd,GAAG;IACH,GAAG;IACH,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;GAC/B;EACF;CACF;CAEA,OAAO;AACT"}
@@ -0,0 +1,48 @@
1
+ import { createTaserCompatHandler, NotFoundHandler, OnErrorHandler, RouteManifestShape } from '@taserjs/router-core';
2
+ import { DefineMiddlewareOptions, MultiScopedMiddlewareOptions, ScopedMiddlewareOptions } from '../define/middleware.js';
3
+ import { TaserApp } from './app.js';
4
+ import { ContextDefinition, CreateTaserAppOptions, OnErrorOptions } from '../types/app.js';
5
+ import { AppContext, ExtractState, IsUnknown, MiddlewareReturnFromParts, MiddlewareUnit } from '../types/units.js';
6
+ import { HandlerBuilder, LayoutId, MiddlewareBuilder } from '../types/index.js';
7
+ import { ReturnsMap } from '../types/returns.js';
8
+ import { Schema } from '../types/schema.js';
9
+ import { CreateAllRoute, CreateAnyRoute, CreateWithBodyRoute, CreateWithoutBodyRoute } from './factories.js';
10
+ type RouterState = {
11
+ options: CreateTaserAppOptions;
12
+ contextDef: ContextDefinition<Record<string, unknown>, Record<string, unknown>>;
13
+ onError?: OnErrorHandler;
14
+ notFound?: NotFoundHandler;
15
+ };
16
+ export declare class TaserRouter<TAppContext extends Record<string, unknown> = AppContext> {
17
+ private readonly state;
18
+ constructor(options?: CreateTaserAppOptions, state?: Partial<Omit<RouterState, "options">>);
19
+ context<TBoot extends Record<string, unknown>, TReq extends Record<string, unknown>>(definition: ContextDefinition<TBoot, TReq>): TaserRouter<TBoot & TReq>;
20
+ onError<TResponses extends ReturnsMap = ReturnsMap>(options: OnErrorOptions<TResponses> | OnErrorOptions<TResponses>["handle"]): this;
21
+ notFound(handler: (ctx: unknown) => Response | Promise<Response> | unknown): this;
22
+ get: CreateWithoutBodyRoute<"GET", TAppContext>;
23
+ post: CreateWithBodyRoute<"POST", TAppContext>;
24
+ put: CreateWithBodyRoute<"PUT", TAppContext>;
25
+ patch: CreateWithBodyRoute<"PATCH", TAppContext>;
26
+ delete: CreateWithoutBodyRoute<"DELETE", TAppContext>;
27
+ options: CreateWithoutBodyRoute<"OPTIONS", TAppContext>;
28
+ head: CreateWithoutBodyRoute<"HEAD", TAppContext>;
29
+ any: CreateAnyRoute<TAppContext>;
30
+ all: CreateAllRoute<TAppContext>;
31
+ middleware<const Layout extends LayoutId>(layout: Layout): MiddlewareBuilder<Layout, readonly [], TAppContext>;
32
+ defineHandler<TQuery = unknown, TParams = unknown, TBody = unknown>(options?: {
33
+ query?: Schema<TQuery>;
34
+ params?: Schema<TParams>;
35
+ body?: Schema<TBody>;
36
+ }): HandlerBuilder<readonly [], {
37
+ query: TQuery;
38
+ params: TParams;
39
+ body: TBody;
40
+ }, {}, TAppContext>;
41
+ defineMiddleware(middleware: Parameters<typeof createTaserCompatHandler>[0]): MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>, {}, null, {}>;
42
+ defineMiddleware<const Layout extends LayoutId, TState = unknown, TRequires = {}, TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown, R = unknown>(layout: Layout, options: ScopedMiddlewareOptions<Layout, TState, TRequires, TQuery, TParams, TBody, TReturns, TQueryIn, TParamsIn, TBodyIn, TAppContext, R>): MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, IsUnknown<TState> extends true ? ExtractState<R> : TState, TQueryIn, TParamsIn, TBodyIn>, TReturns, Layout, TRequires>;
43
+ defineMiddleware<const Layouts extends readonly [LayoutId, ...LayoutId[]], TState = unknown, TRequires = {}, TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown, R = unknown>(layouts: Layouts, options: MultiScopedMiddlewareOptions<Layouts, TState, TRequires, TQuery, TParams, TBody, TReturns, TQueryIn, TParamsIn, TBodyIn, TAppContext, R>): MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, IsUnknown<TState> extends true ? ExtractState<R> : TState, TQueryIn, TParamsIn, TBodyIn>, TReturns, Layouts, TRequires>;
44
+ defineMiddleware<TState = unknown, TRequires = {}, TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown, R = unknown>(options: DefineMiddlewareOptions<TState, TRequires, TQuery, TParams, TBody, TReturns, TQueryIn, TParamsIn, TBodyIn, TAppContext, R>): MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, IsUnknown<TState> extends true ? ExtractState<R> : TState, TQueryIn, TParamsIn, TBodyIn>, TReturns, null, TRequires>;
45
+ create<const TManifest extends RouteManifestShape>(manifest: TManifest): TaserApp<TManifest>;
46
+ }
47
+ export declare function createTaserApp(options?: CreateTaserAppOptions): TaserRouter;
48
+ export {};
@@ -1,10 +1,11 @@
1
1
  import { createAllRoute, createAnyRoute, createDeleteRoute, createGetRoute, createHeadRoute, createOptionsRoute, createPatchRoute, createPostRoute, createPutRoute } from "./factories.js";
2
- import { defineHandler } from "./define/handler.js";
2
+ import { defineHandler } from "../define/handler.js";
3
+ import { defineMiddleware } from "../define/middleware.js";
3
4
  import { createMiddleware } from "./middleware.js";
4
- import { TaserApp } from "./taser-app.js";
5
- import { normalizeOnError } from "@taserjs/router-utils";
5
+ import { TaserApp } from "./app.js";
6
+ import { isPromise, normalizeOnError } from "@taserjs/router-utils";
6
7
  import { createTaserRuntime } from "@taserjs/router-core";
7
- //#region src/taser-router.ts
8
+ //#region src/builder/router.ts
8
9
  function toOnErrorHandler(onErrorOptions) {
9
10
  return normalizeOnError(onErrorOptions);
10
11
  }
@@ -46,19 +47,45 @@ var TaserRouter = class {
46
47
  defineHandler(options) {
47
48
  return options === void 0 ? defineHandler() : defineHandler(options);
48
49
  }
50
+ defineMiddleware(first, second) {
51
+ return defineMiddleware(first, second);
52
+ }
49
53
  create(manifest) {
50
54
  const definition = this.state.contextDef;
51
55
  const validateResponse = this.state.options.response?.validate ?? true;
52
56
  const onValidationFailure = this.state.options.response?.onValidationFailure;
53
57
  const basePath = this.state.options.basePath;
54
58
  const hasCustomContext = definition.boot !== void 0 || definition.request !== void 0;
55
- const bootPromise = hasCustomContext ? Promise.resolve(definition.boot?.() ?? {}) : void 0;
56
- return new TaserApp(createTaserRuntime(manifest, hasCustomContext ? async ({ native } = {}) => {
57
- const bootContext = await bootPromise ?? {};
58
- const requestContext = await definition.request?.({ native }) ?? {};
59
- return {
59
+ let bootContextResolved;
60
+ let bootPromise;
61
+ if (definition.boot !== void 0) {
62
+ const bootResult = definition.boot();
63
+ if (isPromise(bootResult)) bootPromise = bootResult.then((ctx) => {
64
+ bootContextResolved = ctx ?? {};
65
+ return bootContextResolved;
66
+ });
67
+ else bootContextResolved = bootResult ?? {};
68
+ } else if (hasCustomContext) bootContextResolved = {};
69
+ return new TaserApp(createTaserRuntime(manifest, hasCustomContext ? (req) => {
70
+ if (bootPromise !== void 0 && bootContextResolved === void 0) return bootPromise.then(async (bootContext) => {
71
+ if (!definition.request) return { ...bootContext };
72
+ const requestResult = definition.request(req);
73
+ const requestContext = isPromise(requestResult) ? await requestResult : requestResult;
74
+ return {
75
+ ...bootContext,
76
+ ...requestContext
77
+ };
78
+ });
79
+ const bootContext = bootContextResolved ?? {};
80
+ if (!definition.request) return { ...bootContext };
81
+ const requestResult = definition.request(req);
82
+ if (isPromise(requestResult)) return requestResult.then((requestContext) => ({
60
83
  ...bootContext,
61
84
  ...requestContext
85
+ }));
86
+ return {
87
+ ...bootContext,
88
+ ...requestResult
62
89
  };
63
90
  } : () => ({}), {
64
91
  ...basePath !== void 0 ? { basePath } : {},
@@ -78,4 +105,4 @@ function createTaserApp(options = {}) {
78
105
  //#endregion
79
106
  export { TaserRouter, createTaserApp };
80
107
 
81
- //# sourceMappingURL=taser-router.js.map
108
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","names":[],"sources":["../../../src/builder/router.ts"],"sourcesContent":["import {\n createTaserCompatHandler,\n createTaserRuntime,\n type NotFoundHandler,\n type OnErrorHandler,\n type RouteManifestShape,\n} from \"@taserjs/router-core\";\nimport { isPromise, 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 {\n defineMiddleware,\n type DefineMiddlewareOptions,\n type MultiScopedMiddlewareOptions,\n type ScopedMiddlewareOptions,\n} from \"../define/middleware.js\";\nimport { createMiddleware } from \"./middleware.js\";\nimport { TaserApp } from \"./app.js\";\nimport type { ContextDefinition, CreateTaserAppOptions, OnErrorOptions } from \"../types/app.js\";\nimport type {\n AppContext,\n ExtractState,\n IsUnknown,\n MiddlewareReturnFromParts,\n MiddlewareUnit,\n} from \"../types/units.js\";\nimport type { HandlerBuilder, LayoutId, MiddlewareBuilder } from \"../types/index.js\";\nimport type { ReturnsMap } from \"../types/returns.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<TBoot extends Record<string, unknown>, TReq extends Record<string, unknown>>(\n definition: ContextDefinition<TBoot, TReq>,\n ): TaserRouter<TBoot & TReq> {\n this.state.contextDef = definition;\n return this as unknown as TaserRouter<TBoot & TReq>;\n }\n\n onError<TResponses extends ReturnsMap = ReturnsMap>(\n options: OnErrorOptions<TResponses> | OnErrorOptions<TResponses>[\"handle\"],\n ): this {\n this.state.onError = toOnErrorHandler(options);\n return this;\n }\n\n notFound(handler: (ctx: unknown) => Response | Promise<Response> | unknown): this {\n this.state.notFound = (ctx) => handler(ctx);\n return this;\n }\n\n get: CreateWithoutBodyRoute<\"GET\", TAppContext> = createGetRoute as CreateWithoutBodyRoute<\n \"GET\",\n TAppContext\n >;\n post: CreateWithBodyRoute<\"POST\", TAppContext> = createPostRoute as CreateWithBodyRoute<\n \"POST\",\n TAppContext\n >;\n put: CreateWithBodyRoute<\"PUT\", TAppContext> = createPutRoute as CreateWithBodyRoute<\n \"PUT\",\n TAppContext\n >;\n patch: CreateWithBodyRoute<\"PATCH\", TAppContext> = createPatchRoute as CreateWithBodyRoute<\n \"PATCH\",\n TAppContext\n >;\n delete: CreateWithoutBodyRoute<\"DELETE\", TAppContext> =\n createDeleteRoute as CreateWithoutBodyRoute<\"DELETE\", TAppContext>;\n options: CreateWithoutBodyRoute<\"OPTIONS\", TAppContext> =\n createOptionsRoute as CreateWithoutBodyRoute<\"OPTIONS\", TAppContext>;\n head: CreateWithoutBodyRoute<\"HEAD\", TAppContext> = createHeadRoute as CreateWithoutBodyRoute<\n \"HEAD\",\n TAppContext\n >;\n any: CreateAnyRoute<TAppContext> = createAnyRoute as CreateAnyRoute<TAppContext>;\n all: CreateAllRoute<TAppContext> = createAllRoute as CreateAllRoute<TAppContext>;\n\n middleware<const Layout extends LayoutId>(\n layout: Layout,\n ): MiddlewareBuilder<Layout, readonly [], TAppContext> {\n return createMiddleware(layout) as MiddlewareBuilder<Layout, readonly [], TAppContext>;\n }\n\n defineHandler<TQuery = unknown, TParams = unknown, TBody = unknown>(options?: {\n query?: Schema<TQuery>;\n params?: Schema<TParams>;\n body?: Schema<TBody>;\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(\n middleware: Parameters<typeof createTaserCompatHandler>[0],\n ): MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>, {}, null, {}>;\n\n defineMiddleware<\n const Layout extends LayoutId,\n TState = unknown,\n TRequires = {},\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TReturns extends ReturnsMap = {},\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n R = unknown,\n >(\n layout: Layout,\n options: ScopedMiddlewareOptions<\n Layout,\n TState,\n TRequires,\n TQuery,\n TParams,\n TBody,\n TReturns,\n TQueryIn,\n TParamsIn,\n TBodyIn,\n TAppContext,\n R\n >,\n ): MiddlewareUnit<\n MiddlewareReturnFromParts<\n TQuery,\n TParams,\n TBody,\n IsUnknown<TState> extends true ? ExtractState<R> : TState,\n TQueryIn,\n TParamsIn,\n TBodyIn\n >,\n TReturns,\n Layout,\n TRequires\n >;\n\n defineMiddleware<\n const Layouts extends readonly [LayoutId, ...LayoutId[]],\n TState = unknown,\n TRequires = {},\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TReturns extends ReturnsMap = {},\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n R = unknown,\n >(\n layouts: Layouts,\n options: MultiScopedMiddlewareOptions<\n Layouts,\n TState,\n TRequires,\n TQuery,\n TParams,\n TBody,\n TReturns,\n TQueryIn,\n TParamsIn,\n TBodyIn,\n TAppContext,\n R\n >,\n ): MiddlewareUnit<\n MiddlewareReturnFromParts<\n TQuery,\n TParams,\n TBody,\n IsUnknown<TState> extends true ? ExtractState<R> : TState,\n TQueryIn,\n TParamsIn,\n TBodyIn\n >,\n TReturns,\n Layouts,\n TRequires\n >;\n\n defineMiddleware<\n TState = unknown,\n TRequires = {},\n TQuery = unknown,\n TParams = unknown,\n TBody = unknown,\n TReturns extends ReturnsMap = {},\n TQueryIn = unknown,\n TParamsIn = unknown,\n TBodyIn = unknown,\n R = unknown,\n >(\n options: DefineMiddlewareOptions<\n TState,\n TRequires,\n TQuery,\n TParams,\n TBody,\n TReturns,\n TQueryIn,\n TParamsIn,\n TBodyIn,\n TAppContext,\n R\n >,\n ): MiddlewareUnit<\n MiddlewareReturnFromParts<\n TQuery,\n TParams,\n TBody,\n IsUnknown<TState> extends true ? ExtractState<R> : TState,\n TQueryIn,\n TParamsIn,\n TBodyIn\n >,\n TReturns,\n null,\n TRequires\n >;\n\n defineMiddleware(first: any, second?: any): any {\n return defineMiddleware(first, second);\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 basePath = this.state.options.basePath;\n\n const hasCustomContext = definition.boot !== undefined || definition.request !== undefined;\n let bootContextResolved: Record<string, unknown> | undefined;\n let bootPromise: Promise<Record<string, unknown>> | undefined;\n\n if (definition.boot !== undefined) {\n const bootResult = definition.boot();\n if (isPromise(bootResult)) {\n bootPromise = bootResult.then((ctx) => {\n bootContextResolved = (ctx ?? {}) as Record<string, unknown>;\n return bootContextResolved;\n });\n } else {\n bootContextResolved = (bootResult ?? {}) as Record<string, unknown>;\n }\n } else if (hasCustomContext) {\n bootContextResolved = {};\n }\n\n const contextFactory = hasCustomContext\n ? (req?: Request) => {\n if (bootPromise !== undefined && bootContextResolved === undefined) {\n return bootPromise.then(async (bootContext) => {\n if (!definition.request) {\n return { ...bootContext };\n }\n const requestResult = definition.request(req!);\n const requestContext = isPromise(requestResult) ? await requestResult : requestResult;\n return { ...bootContext, ...requestContext };\n });\n }\n\n const bootContext = bootContextResolved ?? {};\n if (!definition.request) {\n return { ...bootContext };\n }\n\n const requestResult = definition.request(req!);\n if (isPromise(requestResult)) {\n return requestResult.then((requestContext) => ({\n ...bootContext,\n ...requestContext,\n }));\n }\n\n return { ...bootContext, ...(requestResult as Record<string, unknown>) };\n }\n : () => ({});\n\n const runtime = createTaserRuntime(manifest, contextFactory, {\n ...(basePath !== undefined ? { basePath } : {}),\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 return new TaserApp(runtime, manifest);\n }\n}\n\nexport function createTaserApp(options: CreateTaserAppOptions = {}): TaserRouter {\n return new TaserRouter(options);\n}\n"],"mappings":";;;;;;;;AA+CA,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,QACE,YAC2B;EAC3B,KAAK,MAAM,aAAa;EACxB,OAAO;CACT;CAEA,QACE,SACM;EACN,KAAK,MAAM,UAAU,iBAAiB,OAAO;EAC7C,OAAO;CACT;CAEA,SAAS,SAAyE;EAChF,KAAK,MAAM,YAAY,QAAQ,QAAQ,GAAG;EAC1C,OAAO;CACT;CAEA,MAAkD;CAIlD,OAAiD;CAIjD,MAA+C;CAI/C,QAAmD;CAInD,SACE;CACF,UACE;CACF,OAAoD;CAIpD,MAAmC;CACnC,MAAmC;CAEnC,WACE,QACqD;EACrD,OAAO,iBAAiB,MAAM;CAChC;CAEA,cAAoE,SASlE;EACA,OAAO,YAAY,KAAA,IACf,cAA2B,IAC3B,cAA2B,OAAO;CACxC;CAoIA,iBAAiB,OAAY,QAAmB;EAC9C,OAAO,iBAAiB,OAAO,MAAM;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,WAAW,KAAK,MAAM,QAAQ;EAEpC,MAAM,mBAAmB,WAAW,SAAS,KAAA,KAAa,WAAW,YAAY,KAAA;EACjF,IAAI;EACJ,IAAI;EAEJ,IAAI,WAAW,SAAS,KAAA,GAAW;GACjC,MAAM,aAAa,WAAW,KAAK;GACnC,IAAI,UAAU,UAAU,GACtB,cAAc,WAAW,MAAM,QAAQ;IACrC,sBAAuB,OAAO,CAAC;IAC/B,OAAO;GACT,CAAC;QAED,sBAAuB,cAAc,CAAC;EAE1C,OAAO,IAAI,kBACT,sBAAsB,CAAC;EA4CzB,OAAO,IAAI,SAXK,mBAAmB,UA9BZ,oBAClB,QAAkB;GACjB,IAAI,gBAAgB,KAAA,KAAa,wBAAwB,KAAA,GACvD,OAAO,YAAY,KAAK,OAAO,gBAAgB;IAC7C,IAAI,CAAC,WAAW,SACd,OAAO,EAAE,GAAG,YAAY;IAE1B,MAAM,gBAAgB,WAAW,QAAQ,GAAI;IAC7C,MAAM,iBAAiB,UAAU,aAAa,IAAI,MAAM,gBAAgB;IACxE,OAAO;KAAE,GAAG;KAAa,GAAG;IAAe;GAC7C,CAAC;GAGH,MAAM,cAAc,uBAAuB,CAAC;GAC5C,IAAI,CAAC,WAAW,SACd,OAAO,EAAE,GAAG,YAAY;GAG1B,MAAM,gBAAgB,WAAW,QAAQ,GAAI;GAC7C,IAAI,UAAU,aAAa,GACzB,OAAO,cAAc,MAAM,oBAAoB;IAC7C,GAAG;IACH,GAAG;GACL,EAAE;GAGJ,OAAO;IAAE,GAAG;IAAa,GAAI;GAA0C;EACzE,WACO,CAAC,IAEiD;GAC3D,GAAI,aAAa,KAAA,IAAY,EAAE,SAAS,IAAI,CAAC;GAC7C,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,CAEoB,GAAS,QAAQ;CACvC;AACF;AAEA,SAAgB,eAAe,UAAiC,CAAC,GAAgB;CAC/E,OAAO,IAAI,YAAY,OAAO;AAChC"}
@@ -1,5 +1,5 @@
1
1
  import { ReservedContextKey } from '@taserjs/router-core';
2
- import { ContextDefinition } from './types/app.js';
2
+ import { ContextDefinition } from '../types/app.js';
3
3
  type NoReservedKeysConstraint<TBoot extends Record<string, unknown>, TReq extends Record<string, unknown>> = Extract<keyof TBoot | keyof TReq, ReservedContextKey> extends never ? unknown : never;
4
4
  export declare function createContext<TBoot extends Record<string, unknown> = Record<string, never>, TReq extends Record<string, unknown> = Record<string, never>>(definition: ContextDefinition<TBoot, TReq> & NoReservedKeysConstraint<TBoot, TReq>): ContextDefinition<TBoot, TReq>;
5
- export type { ContextDefinition, InferAppContext } from './types/app.js';
5
+ export type { ContextDefinition, InferAppContext } from '../types/app.js';
@@ -1,4 +1,4 @@
1
- //#region src/create-context.ts
1
+ //#region src/context/create-context.ts
2
2
  function createContext(definition) {
3
3
  return definition;
4
4
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-context.js","names":[],"sources":["../../../src/context/create-context.ts"],"sourcesContent":["import type { ReservedContextKey } from \"@taserjs/router-core\";\n\nimport type { ContextDefinition } from \"../types/app.js\";\n\ntype NoReservedKeysConstraint<\n TBoot extends Record<string, unknown>,\n TReq extends Record<string, unknown>,\n> = Extract<keyof TBoot | keyof TReq, ReservedContextKey> extends never ? unknown : never;\n\nexport function createContext<\n TBoot extends Record<string, unknown> = Record<string, never>,\n TReq extends Record<string, unknown> = Record<string, never>,\n>(\n definition: ContextDefinition<TBoot, TReq> & NoReservedKeysConstraint<TBoot, TReq>,\n): ContextDefinition<TBoot, TReq> {\n return definition;\n}\n\nexport type { ContextDefinition, InferAppContext } from \"../types/app.js\";\n"],"mappings":";AASA,SAAgB,cAId,YACgC;CAChC,OAAO;AACT"}
@@ -1,5 +1,5 @@
1
1
  import { Schema } from '../types/schema.js';
2
- import { SchemaKey } from '../constants.js';
2
+ import { SchemaKey } from '../builder/constants.js';
3
3
  export type SchemaValidators = {
4
4
  query?: Schema<unknown>;
5
5
  params?: Schema<unknown>;
@@ -1,4 +1,4 @@
1
- import { SCHEMA_KEYS } from "../constants.js";
1
+ import { SCHEMA_KEYS } from "../builder/constants.js";
2
2
  //#region src/define/validators.ts
3
3
  function pickDefinedSchemas(source, keyMap) {
4
4
  const result = {};
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","names":[],"sources":["../../../src/define/validators.ts"],"sourcesContent":["import type { Schema } from \"../types/schema.js\";\nimport { SCHEMA_KEYS, type SchemaKey } from \"../constants.js\";\n\nexport type SchemaValidators = {\n query?: Schema<unknown>;\n params?: Schema<unknown>;\n body?: Schema<unknown>;\n};\n\nexport function pickDefinedSchemas(\n source: SchemaValidators,\n keyMap?: Partial<Record<SchemaKey, string>>,\n): Record<string, Schema<unknown>> {\n const result: Record<string, Schema<unknown>> = {};\n for (const key of SCHEMA_KEYS) {\n const value = source[key];\n if (value !== undefined) {\n result[keyMap?.[key] ?? key] = value;\n }\n }\n return result;\n}\n"],"mappings":";;AASA,SAAgB,mBACd,QACA,QACiC;CACjC,MAAM,SAA0C,CAAC;CACjD,KAAK,MAAM,OAAO,aAAa;EAC7B,MAAM,QAAQ,OAAO;EACrB,IAAI,UAAU,KAAA,GACZ,OAAO,SAAS,QAAQ,OAAO;CAEnC;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"validators.js","names":[],"sources":["../../../src/define/validators.ts"],"sourcesContent":["import type { Schema } from \"../types/schema.js\";\nimport { SCHEMA_KEYS, type SchemaKey } from \"../builder/constants.js\";\n\nexport type SchemaValidators = {\n query?: Schema<unknown>;\n params?: Schema<unknown>;\n body?: Schema<unknown>;\n};\n\nexport function pickDefinedSchemas(\n source: SchemaValidators,\n keyMap?: Partial<Record<SchemaKey, string>>,\n): Record<string, Schema<unknown>> {\n const result: Record<string, Schema<unknown>> = {};\n for (const key of SCHEMA_KEYS) {\n const value = source[key];\n if (value !== undefined) {\n result[keyMap?.[key] ?? key] = value;\n }\n }\n return result;\n}\n"],"mappings":";;AASA,SAAgB,mBACd,QACA,QACiC;CACjC,MAAM,SAA0C,CAAC;CACjD,KAAK,MAAM,OAAO,aAAa;EAC7B,MAAM,QAAQ,OAAO;EACrB,IAAI,UAAU,KAAA,GACZ,OAAO,SAAS,QAAQ,OAAO;CAEnC;CACA,OAAO;AACT"}
@@ -1,12 +1,11 @@
1
1
  export type { RouterRegister } from './register.js';
2
- export type { InferInput, InferOutput, Method, PathParams, ReturnsMap, RoutePath, Schema, Simplify, } from './types/index.js';
3
- export type { ContextDefinition, CreateContextArgs, CreateTaserAppOptions, InferAppContext, InferAppManifest, OnErrorOptions, RouteManifestShape, TaserHandler, } from './types/app.js';
4
- export { isReplyResult, reply, stream, ValidationError, validationErrorSchema, } from '@taserjs/router-utils';
2
+ export type { InferInput, InferOutput, InferRouteContext, InferRouteInput, InferRouteOutput, Method, PathParams, ReturnsMap, RouteDefinition, RouteExport, RoutePath, Schema, Simplify, } from './types/index.js';
3
+ export type { ContextDefinition, CreateTaserAppOptions, InferAppContext, InferAppManifest, OnErrorOptions, RouteManifestShape, TaserHandler, } from './types/app.js';
4
+ export { reply, stream, ValidationError, validationErrorSchema } from '@taserjs/router-utils';
5
5
  export type { ReplyBodyKind, ReplyOf, ResponseValidationFailureHandler, SuccessReplyData, SuccessStatusCode, } from '@taserjs/router-utils';
6
- export { createAnyRoute, createAllRoute } from './factories.js';
7
- export { createTaserApp, TaserRouter } from './taser-router.js';
8
- export { TaserApp, TaserNativeBound } from './taser-app.js';
9
- export { createContext } from './create-context.js';
6
+ export { createTaserApp, TaserRouter } from './builder/router.js';
7
+ export { TaserApp } from './builder/app.js';
8
+ export { createContext } from './context/create-context.js';
10
9
  export { defineHandler } from './define/handler.js';
11
10
  export { defineMiddleware } from './define/middleware.js';
12
11
  export type { TaserCookieJar, TaserHeaders } from '@taserjs/router-core';
package/dist/esm/index.js CHANGED
@@ -1,8 +1,7 @@
1
- import { createAllRoute, createAnyRoute } from "./factories.js";
2
1
  import { defineHandler } from "./define/handler.js";
3
- import { TaserApp, TaserNativeBound } from "./taser-app.js";
4
- import { TaserRouter, createTaserApp } from "./taser-router.js";
5
- import { createContext } from "./create-context.js";
6
2
  import { defineMiddleware } from "./define/middleware.js";
7
- import { ValidationError, isReplyResult, reply, stream, validationErrorSchema } from "@taserjs/router-utils";
8
- export { TaserApp, TaserNativeBound, TaserRouter, ValidationError, createAllRoute, createAnyRoute, createContext, createTaserApp, defineHandler, defineMiddleware, isReplyResult, reply, stream, validationErrorSchema };
3
+ import { TaserApp } from "./builder/app.js";
4
+ import { TaserRouter, createTaserApp } from "./builder/router.js";
5
+ import { createContext } from "./context/create-context.js";
6
+ import { ValidationError, reply, stream, validationErrorSchema } from "@taserjs/router-utils";
7
+ export { TaserApp, TaserRouter, ValidationError, createContext, createTaserApp, defineHandler, defineMiddleware, reply, stream, validationErrorSchema };
@@ -1,9 +1,9 @@
1
1
  import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { bodyLimit as bodyLimit$1 } from "hono/body-limit";
3
3
  //#region src/middleware/body-limit.ts
4
- var honoBodyLimitMiddleware = wrapHonoMiddleware(bodyLimit$1);
4
+ var wrapped = wrapHonoMiddleware(bodyLimit$1);
5
5
  function bodyLimit(...args) {
6
- return honoBodyLimitMiddleware(...args);
6
+ return wrapped(...args);
7
7
  }
8
8
  //#endregion
9
9
  export { bodyLimit };
@@ -1 +1 @@
1
- {"version":3,"file":"body-limit.js","names":[],"sources":["../../../src/middleware/body-limit.ts"],"sourcesContent":["import { bodyLimit as honoBodyLimit } from \"hono/body-limit\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoBodyLimitMiddleware = wrapHonoMiddleware(honoBodyLimit);\n\nexport function bodyLimit(...args: Parameters<typeof honoBodyLimit>) {\n return honoBodyLimitMiddleware(...args);\n}\n\nexport type BodyLimitOptions = Parameters<typeof honoBodyLimit>[0];\n"],"mappings":";;;AAIA,IAAM,0BAA0B,mBAAmB,WAAa;AAEhE,SAAgB,UAAU,GAAG,MAAwC;CACnE,OAAO,wBAAwB,GAAG,IAAI;AACxC"}
1
+ {"version":3,"file":"body-limit.js","names":[],"sources":["../../../src/middleware/body-limit.ts"],"sourcesContent":["import { bodyLimit as honoBodyLimit } from \"hono/body-limit\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst wrapped = wrapHonoMiddleware(honoBodyLimit);\n\nexport function bodyLimit(...args: Parameters<typeof honoBodyLimit>) {\n return wrapped(...args);\n}\n\nexport type BodyLimitOptions = Parameters<typeof honoBodyLimit>[0];\n"],"mappings":";;;AAIA,IAAM,UAAU,mBAAmB,WAAa;AAEhD,SAAgB,UAAU,GAAG,MAAwC;CACnE,OAAO,QAAQ,GAAG,IAAI;AACxB"}
@@ -1,9 +1,9 @@
1
1
  import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { compress as compress$1 } from "hono/compress";
3
3
  //#region src/middleware/compress.ts
4
- var honoCompressMiddleware = wrapHonoMiddleware(compress$1);
4
+ var wrapped = wrapHonoMiddleware(compress$1);
5
5
  function compress(...args) {
6
- return honoCompressMiddleware(...args);
6
+ return wrapped(...args);
7
7
  }
8
8
  //#endregion
9
9
  export { compress };
@@ -1 +1 @@
1
- {"version":3,"file":"compress.js","names":[],"sources":["../../../src/middleware/compress.ts"],"sourcesContent":["import { compress as honoCompress } from \"hono/compress\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoCompressMiddleware = wrapHonoMiddleware(honoCompress);\n\nexport function compress(...args: Parameters<typeof honoCompress>) {\n return honoCompressMiddleware(...args);\n}\n\nexport type CompressOptions = NonNullable<Parameters<typeof honoCompress>[0]>;\n"],"mappings":";;;AAIA,IAAM,yBAAyB,mBAAmB,UAAY;AAE9D,SAAgB,SAAS,GAAG,MAAuC;CACjE,OAAO,uBAAuB,GAAG,IAAI;AACvC"}
1
+ {"version":3,"file":"compress.js","names":[],"sources":["../../../src/middleware/compress.ts"],"sourcesContent":["import { compress as honoCompress } from \"hono/compress\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst wrapped = wrapHonoMiddleware(honoCompress);\n\nexport function compress(...args: Parameters<typeof honoCompress>) {\n return wrapped(...args);\n}\n\nexport type CompressOptions = NonNullable<Parameters<typeof honoCompress>[0]>;\n"],"mappings":";;;AAIA,IAAM,UAAU,mBAAmB,UAAY;AAE/C,SAAgB,SAAS,GAAG,MAAuC;CACjE,OAAO,QAAQ,GAAG,IAAI;AACxB"}
@@ -1,9 +1,9 @@
1
1
  import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { cors as cors$1 } from "hono/cors";
3
3
  //#region src/middleware/cors.ts
4
- var honoCorsMiddleware = wrapHonoMiddleware(cors$1);
4
+ var wrapped = wrapHonoMiddleware(cors$1);
5
5
  function cors(...args) {
6
- return honoCorsMiddleware(...args);
6
+ return wrapped(...args);
7
7
  }
8
8
  //#endregion
9
9
  export { cors };
@@ -1 +1 @@
1
- {"version":3,"file":"cors.js","names":[],"sources":["../../../src/middleware/cors.ts"],"sourcesContent":["import { cors as honoCors } from \"hono/cors\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoCorsMiddleware = wrapHonoMiddleware(honoCors);\n\nexport function cors(...args: Parameters<typeof honoCors>) {\n return honoCorsMiddleware(...args);\n}\n\nexport type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>;\n"],"mappings":";;;AAIA,IAAM,qBAAqB,mBAAmB,MAAQ;AAEtD,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAmB,GAAG,IAAI;AACnC"}
1
+ {"version":3,"file":"cors.js","names":[],"sources":["../../../src/middleware/cors.ts"],"sourcesContent":["import { cors as honoCors } from \"hono/cors\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst wrapped = wrapHonoMiddleware(honoCors);\n\nexport function cors(...args: Parameters<typeof honoCors>) {\n return wrapped(...args);\n}\n\nexport type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>;\n"],"mappings":";;;AAIA,IAAM,UAAU,mBAAmB,MAAQ;AAE3C,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,QAAQ,GAAG,IAAI;AACxB"}
@@ -1,9 +1,9 @@
1
1
  import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { csrf as csrf$1 } from "hono/csrf";
3
3
  //#region src/middleware/csrf.ts
4
- var honoCsrfMiddleware = wrapHonoMiddleware(csrf$1);
4
+ var wrapped = wrapHonoMiddleware(csrf$1);
5
5
  function csrf(...args) {
6
- return honoCsrfMiddleware(...args);
6
+ return wrapped(...args);
7
7
  }
8
8
  //#endregion
9
9
  export { csrf };
@@ -1 +1 @@
1
- {"version":3,"file":"csrf.js","names":[],"sources":["../../../src/middleware/csrf.ts"],"sourcesContent":["import { csrf as honoCsrf } from \"hono/csrf\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoCsrfMiddleware = wrapHonoMiddleware(honoCsrf);\n\nexport function csrf(...args: Parameters<typeof honoCsrf>) {\n return honoCsrfMiddleware(...args);\n}\n\nexport type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>;\n"],"mappings":";;;AAIA,IAAM,qBAAqB,mBAAmB,MAAQ;AAEtD,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAmB,GAAG,IAAI;AACnC"}
1
+ {"version":3,"file":"csrf.js","names":[],"sources":["../../../src/middleware/csrf.ts"],"sourcesContent":["import { csrf as honoCsrf } from \"hono/csrf\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst wrapped = wrapHonoMiddleware(honoCsrf);\n\nexport function csrf(...args: Parameters<typeof honoCsrf>) {\n return wrapped(...args);\n}\n\nexport type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>;\n"],"mappings":";;;AAIA,IAAM,UAAU,mBAAmB,MAAQ;AAE3C,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,QAAQ,GAAG,IAAI;AACxB"}
@@ -1,9 +1,9 @@
1
1
  import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { etag as etag$1 } from "hono/etag";
3
3
  //#region src/middleware/etag.ts
4
- var honoEtagMiddleware = wrapHonoMiddleware(etag$1);
4
+ var wrapped = wrapHonoMiddleware(etag$1);
5
5
  function etag(...args) {
6
- return honoEtagMiddleware(...args);
6
+ return wrapped(...args);
7
7
  }
8
8
  //#endregion
9
9
  export { etag };
@@ -1 +1 @@
1
- {"version":3,"file":"etag.js","names":[],"sources":["../../../src/middleware/etag.ts"],"sourcesContent":["import { etag as honoEtag } from \"hono/etag\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoEtagMiddleware = wrapHonoMiddleware(honoEtag);\n\nexport function etag(...args: Parameters<typeof honoEtag>) {\n return honoEtagMiddleware(...args);\n}\n\nexport type EtagOptions = NonNullable<Parameters<typeof honoEtag>[0]>;\n"],"mappings":";;;AAIA,IAAM,qBAAqB,mBAAmB,MAAQ;AAEtD,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,mBAAmB,GAAG,IAAI;AACnC"}
1
+ {"version":3,"file":"etag.js","names":[],"sources":["../../../src/middleware/etag.ts"],"sourcesContent":["import { etag as honoEtag } from \"hono/etag\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst wrapped = wrapHonoMiddleware(honoEtag);\n\nexport function etag(...args: Parameters<typeof honoEtag>) {\n return wrapped(...args);\n}\n\nexport type EtagOptions = NonNullable<Parameters<typeof honoEtag>[0]>;\n"],"mappings":";;;AAIA,IAAM,UAAU,mBAAmB,MAAQ;AAE3C,SAAgB,KAAK,GAAG,MAAmC;CACzD,OAAO,QAAQ,GAAG,IAAI;AACxB"}
@@ -1,5 +1,5 @@
1
1
  import { defineMiddleware } from "../define/middleware.js";
2
- import { createTaserCompatHandler } from "@taserjs/router-core";
2
+ import { extractJwtPayload } from "./wrap-hono.js";
3
3
  import { jwk as jwk$1 } from "hono/jwk";
4
4
  //#region src/middleware/jwk.ts
5
5
  function assertJwksScheme(jwksUri, allowInsecure) {
@@ -17,13 +17,7 @@ function jwk(options, init) {
17
17
  const jwksUri = options.jwks_uri;
18
18
  if (typeof jwksUri === "string") assertJwksScheme(jwksUri, options.allowInsecure ?? false);
19
19
  const { allowInsecure: _allowInsecure, ...honoOptions } = options;
20
- const honoMw = jwk$1(honoOptions, init?.headers !== void 0 ? { headers: init.headers } : void 0);
21
- return defineMiddleware({ handler: (ctx, next) => {
22
- return createTaserCompatHandler(honoMw)(ctx, async () => {
23
- const payload = ctx.var.jwtPayload;
24
- return next({ jwtPayload: payload });
25
- });
26
- } });
20
+ return defineMiddleware({ handler: extractJwtPayload(jwk$1(honoOptions, init?.headers !== void 0 ? { headers: init.headers } : void 0)) });
27
21
  }
28
22
  //#endregion
29
23
  export { jwk };
@@ -1 +1 @@
1
- {"version":3,"file":"jwk.js","names":[],"sources":["../../../src/middleware/jwk.ts"],"sourcesContent":["import { createTaserCompatHandler } from \"@taserjs/router-core\";\nimport type { MiddlewareHandler } from \"hono\";\nimport { jwk as honoJwk } from \"hono/jwk\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport type { JwtMiddlewareUnit, JwtPayloadState } from \"./jwt.js\";\n\nexport type JwkOptions = Parameters<typeof honoJwk>[0];\n\nexport type JwkRequestInit = Pick<RequestInit, \"headers\">;\n\nexport type JwkMiddlewareOptions = JwkOptions & {\n /** Allow `http://` JWKS URLs (local dev). Default false — requires `https://`. */\n allowInsecure?: boolean;\n};\n\nfunction assertJwksScheme(jwksUri: string, allowInsecure: boolean): void {\n const scheme = new URL(jwksUri).protocol.replace(\":\", \"\");\n if (scheme === \"https\") {\n return;\n }\n if (scheme === \"http\" && allowInsecure) {\n return;\n }\n throw new Error(`JWKS URL must use https:// (or http:// with allowInsecure: true): \"${jwksUri}\"`);\n}\n\n/**\n * JWK auth middleware. Invalid or missing tokens return **401** (Hono).\n * Successfully decoded payload is placed in `ctx.state.jwtPayload`.\n * Static `jwks_uri` must use HTTPS unless `allowInsecure: true`.\n */\nexport function jwk<TPayload = Record<string, unknown>>(\n options: JwkMiddlewareOptions,\n init?: JwkRequestInit,\n): JwtMiddlewareUnit<TPayload> {\n const jwksUri = options.jwks_uri;\n if (typeof jwksUri === \"string\") {\n assertJwksScheme(jwksUri, options.allowInsecure ?? false);\n }\n\n const { allowInsecure: _allowInsecure, ...honoOptions } = options;\n const safeInit = init?.headers !== undefined ? { headers: init.headers } : undefined;\n const honoMw: MiddlewareHandler = honoJwk(honoOptions, safeInit);\n\n return defineMiddleware<JwtPayloadState<TPayload>>({\n handler: (ctx, next) => {\n return createTaserCompatHandler(honoMw)(ctx, async () => {\n const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;\n return next({ jwtPayload: payload as TPayload });\n });\n },\n });\n}\n"],"mappings":";;;;AAgBA,SAAS,iBAAiB,SAAiB,eAA8B;CACvE,MAAM,SAAS,IAAI,IAAI,OAAO,CAAC,CAAC,SAAS,QAAQ,KAAK,EAAE;CACxD,IAAI,WAAW,SACb;CAEF,IAAI,WAAW,UAAU,eACvB;CAEF,MAAM,IAAI,MAAM,sEAAsE,QAAQ,EAAE;AAClG;;;;;;AAOA,SAAgB,IACd,SACA,MAC6B;CAC7B,MAAM,UAAU,QAAQ;CACxB,IAAI,OAAO,YAAY,UACrB,iBAAiB,SAAS,QAAQ,iBAAiB,KAAK;CAG1D,MAAM,EAAE,eAAe,gBAAgB,GAAG,gBAAgB;CAE1D,MAAM,SAA4B,MAAQ,aADzB,MAAM,YAAY,KAAA,IAAY,EAAE,SAAS,KAAK,QAAQ,IAAI,KAAA,CACZ;CAE/D,OAAO,iBAA4C,EACjD,UAAU,KAAK,SAAS;EACtB,OAAO,yBAAyB,MAAM,CAAC,CAAC,KAAK,YAAY;GACvD,MAAM,UAAW,IAAqD,IAAI;GAC1E,OAAO,KAAK,EAAE,YAAY,QAAoB,CAAC;EACjD,CAAC;CACH,EACF,CAAC;AACH"}
1
+ {"version":3,"file":"jwk.js","names":[],"sources":["../../../src/middleware/jwk.ts"],"sourcesContent":["import type { MiddlewareHandler } from \"hono\";\nimport { jwk as honoJwk } from \"hono/jwk\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport type { JwtMiddlewareUnit, JwtPayloadState } from \"./jwt.js\";\nimport { extractJwtPayload } from \"./wrap-hono.js\";\n\nexport type JwkOptions = Parameters<typeof honoJwk>[0];\n\nexport type JwkRequestInit = Pick<RequestInit, \"headers\">;\n\nexport type JwkMiddlewareOptions = JwkOptions & {\n /** Allow `http://` JWKS URLs (local dev). Default false — requires `https://`. */\n allowInsecure?: boolean;\n};\n\nfunction assertJwksScheme(jwksUri: string, allowInsecure: boolean): void {\n const scheme = new URL(jwksUri).protocol.replace(\":\", \"\");\n if (scheme === \"https\") {\n return;\n }\n if (scheme === \"http\" && allowInsecure) {\n return;\n }\n throw new Error(`JWKS URL must use https:// (or http:// with allowInsecure: true): \"${jwksUri}\"`);\n}\n\n/**\n * JWK auth middleware. Invalid or missing tokens return **401** (Hono).\n * Successfully decoded payload is placed in `ctx.state.jwtPayload`.\n * Static `jwks_uri` must use HTTPS unless `allowInsecure: true`.\n */\nexport function jwk<TPayload = Record<string, unknown>>(\n options: JwkMiddlewareOptions,\n init?: JwkRequestInit,\n): JwtMiddlewareUnit<TPayload> {\n const jwksUri = options.jwks_uri;\n if (typeof jwksUri === \"string\") {\n assertJwksScheme(jwksUri, options.allowInsecure ?? false);\n }\n\n const { allowInsecure: _allowInsecure, ...honoOptions } = options;\n const safeInit = init?.headers !== undefined ? { headers: init.headers } : undefined;\n const honoMw: MiddlewareHandler = honoJwk(honoOptions, safeInit);\n\n return defineMiddleware<JwtPayloadState<TPayload>>({\n handler: extractJwtPayload<TPayload>(honoMw),\n });\n}\n"],"mappings":";;;;AAgBA,SAAS,iBAAiB,SAAiB,eAA8B;CACvE,MAAM,SAAS,IAAI,IAAI,OAAO,CAAC,CAAC,SAAS,QAAQ,KAAK,EAAE;CACxD,IAAI,WAAW,SACb;CAEF,IAAI,WAAW,UAAU,eACvB;CAEF,MAAM,IAAI,MAAM,sEAAsE,QAAQ,EAAE;AAClG;;;;;;AAOA,SAAgB,IACd,SACA,MAC6B;CAC7B,MAAM,UAAU,QAAQ;CACxB,IAAI,OAAO,YAAY,UACrB,iBAAiB,SAAS,QAAQ,iBAAiB,KAAK;CAG1D,MAAM,EAAE,eAAe,gBAAgB,GAAG,gBAAgB;CAI1D,OAAO,iBAA4C,EACjD,SAAS,kBAHuB,MAAQ,aADzB,MAAM,YAAY,KAAA,IAAY,EAAE,SAAS,KAAK,QAAQ,IAAI,KAAA,CAIpC,CAAM,EAC7C,CAAC;AACH"}
@@ -1,5 +1,5 @@
1
1
  import { defineMiddleware } from "../define/middleware.js";
2
- import { createTaserCompatHandler } from "@taserjs/router-core";
2
+ import { extractJwtPayload } from "./wrap-hono.js";
3
3
  import { jwt as jwt$1 } from "hono/jwt";
4
4
  //#region src/middleware/jwt.ts
5
5
  /**
@@ -7,13 +7,7 @@ import { jwt as jwt$1 } from "hono/jwt";
7
7
  * Successfully decoded payload is placed in `ctx.state.jwtPayload`.
8
8
  */
9
9
  function jwt(options) {
10
- const honoMw = jwt$1(options);
11
- return defineMiddleware({ handler: (ctx, next) => {
12
- return createTaserCompatHandler(honoMw)(ctx, async () => {
13
- const payload = ctx.var.jwtPayload;
14
- return next({ jwtPayload: payload });
15
- });
16
- } });
10
+ return defineMiddleware({ handler: extractJwtPayload(jwt$1(options)) });
17
11
  }
18
12
  //#endregion
19
13
  export { jwt };
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.js","names":[],"sources":["../../../src/middleware/jwt.ts"],"sourcesContent":["import { createTaserCompatHandler } from \"@taserjs/router-core\";\nimport type { MiddlewareHandler } from \"hono\";\nimport { jwt as honoJwt } from \"hono/jwt\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport type { MiddlewareReturnFromParts, MiddlewareUnit } from \"../types/units.js\";\n\nexport type JwtPayloadState<TPayload> = {\n jwtPayload: TPayload;\n};\n\nexport type JwtMiddlewareUnit<TPayload> = MiddlewareUnit<\n MiddlewareReturnFromParts<unknown, unknown, unknown, JwtPayloadState<TPayload>>\n>;\n\nexport type JwtOptions = Parameters<typeof honoJwt>[0];\n\n/**\n * JWT auth middleware. Invalid or missing tokens return **401** (Hono).\n * Successfully decoded payload is placed in `ctx.state.jwtPayload`.\n */\nexport function jwt<TPayload = Record<string, unknown>>(\n options: JwtOptions,\n): JwtMiddlewareUnit<TPayload> {\n const honoMw: MiddlewareHandler = honoJwt(options);\n return defineMiddleware<JwtPayloadState<TPayload>>({\n handler: (ctx, next) => {\n return createTaserCompatHandler(honoMw)(ctx, async () => {\n const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;\n return next({ jwtPayload: payload as TPayload });\n });\n },\n });\n}\n"],"mappings":";;;;;;;;AAqBA,SAAgB,IACd,SAC6B;CAC7B,MAAM,SAA4B,MAAQ,OAAO;CACjD,OAAO,iBAA4C,EACjD,UAAU,KAAK,SAAS;EACtB,OAAO,yBAAyB,MAAM,CAAC,CAAC,KAAK,YAAY;GACvD,MAAM,UAAW,IAAqD,IAAI;GAC1E,OAAO,KAAK,EAAE,YAAY,QAAoB,CAAC;EACjD,CAAC;CACH,EACF,CAAC;AACH"}
1
+ {"version":3,"file":"jwt.js","names":[],"sources":["../../../src/middleware/jwt.ts"],"sourcesContent":["import type { MiddlewareHandler } from \"hono\";\nimport { jwt as honoJwt } from \"hono/jwt\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport type { MiddlewareReturnFromParts, MiddlewareUnit } from \"../types/units.js\";\nimport { extractJwtPayload } from \"./wrap-hono.js\";\n\nexport type JwtPayloadState<TPayload> = {\n jwtPayload: TPayload;\n};\n\nexport type JwtMiddlewareUnit<TPayload> = MiddlewareUnit<\n MiddlewareReturnFromParts<unknown, unknown, unknown, JwtPayloadState<TPayload>>\n>;\n\nexport type JwtOptions = Parameters<typeof honoJwt>[0];\n\n/**\n * JWT auth middleware. Invalid or missing tokens return **401** (Hono).\n * Successfully decoded payload is placed in `ctx.state.jwtPayload`.\n */\nexport function jwt<TPayload = Record<string, unknown>>(\n options: JwtOptions,\n): JwtMiddlewareUnit<TPayload> {\n const honoMw: MiddlewareHandler = honoJwt(options);\n return defineMiddleware<JwtPayloadState<TPayload>>({\n handler: extractJwtPayload<TPayload>(honoMw),\n });\n}\n"],"mappings":";;;;;;;;AAqBA,SAAgB,IACd,SAC6B;CAE7B,OAAO,iBAA4C,EACjD,SAAS,kBAFuB,MAAQ,OAEH,CAAM,EAC7C,CAAC;AACH"}
@@ -1,9 +1,9 @@
1
1
  import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { secureHeaders as secureHeaders$1 } from "hono/secure-headers";
3
3
  //#region src/middleware/secure-headers.ts
4
- var honoSecureHeadersMiddleware = wrapHonoMiddleware(secureHeaders$1);
4
+ var wrapped = wrapHonoMiddleware(secureHeaders$1);
5
5
  function secureHeaders(...args) {
6
- return honoSecureHeadersMiddleware(...args);
6
+ return wrapped(...args);
7
7
  }
8
8
  //#endregion
9
9
  export { secureHeaders };
@@ -1 +1 @@
1
- {"version":3,"file":"secure-headers.js","names":[],"sources":["../../../src/middleware/secure-headers.ts"],"sourcesContent":["import { secureHeaders as honoSecureHeaders } from \"hono/secure-headers\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoSecureHeadersMiddleware = wrapHonoMiddleware(honoSecureHeaders);\n\nexport function secureHeaders(...args: Parameters<typeof honoSecureHeaders>) {\n return honoSecureHeadersMiddleware(...args);\n}\n\nexport type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>;\n"],"mappings":";;;AAIA,IAAM,8BAA8B,mBAAmB,eAAiB;AAExE,SAAgB,cAAc,GAAG,MAA4C;CAC3E,OAAO,4BAA4B,GAAG,IAAI;AAC5C"}
1
+ {"version":3,"file":"secure-headers.js","names":[],"sources":["../../../src/middleware/secure-headers.ts"],"sourcesContent":["import { secureHeaders as honoSecureHeaders } from \"hono/secure-headers\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst wrapped = wrapHonoMiddleware(honoSecureHeaders);\n\nexport function secureHeaders(...args: Parameters<typeof honoSecureHeaders>) {\n return wrapped(...args);\n}\n\nexport type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>;\n"],"mappings":";;;AAIA,IAAM,UAAU,mBAAmB,eAAiB;AAEpD,SAAgB,cAAc,GAAG,MAA4C;CAC3E,OAAO,QAAQ,GAAG,IAAI;AACxB"}
@@ -1,9 +1,9 @@
1
1
  import { wrapHonoMiddleware } from "./wrap-hono.js";
2
2
  import { timing as timing$1 } from "hono/timing";
3
3
  //#region src/middleware/timing.ts
4
- var honoTimingMiddleware = wrapHonoMiddleware(timing$1);
4
+ var wrapped = wrapHonoMiddleware(timing$1);
5
5
  function timing(...args) {
6
- return honoTimingMiddleware(...args);
6
+ return wrapped(...args);
7
7
  }
8
8
  //#endregion
9
9
  export { timing };
@@ -1 +1 @@
1
- {"version":3,"file":"timing.js","names":[],"sources":["../../../src/middleware/timing.ts"],"sourcesContent":["import { timing as honoTiming } from \"hono/timing\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst honoTimingMiddleware = wrapHonoMiddleware(honoTiming);\n\nexport function timing(...args: Parameters<typeof honoTiming>) {\n return honoTimingMiddleware(...args);\n}\n\nexport type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>;\n"],"mappings":";;;AAIA,IAAM,uBAAuB,mBAAmB,QAAU;AAE1D,SAAgB,OAAO,GAAG,MAAqC;CAC7D,OAAO,qBAAqB,GAAG,IAAI;AACrC"}
1
+ {"version":3,"file":"timing.js","names":[],"sources":["../../../src/middleware/timing.ts"],"sourcesContent":["import { timing as honoTiming } from \"hono/timing\";\n\nimport { wrapHonoMiddleware } from \"./wrap-hono.js\";\n\nconst wrapped = wrapHonoMiddleware(honoTiming);\n\nexport function timing(...args: Parameters<typeof honoTiming>) {\n return wrapped(...args);\n}\n\nexport type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>;\n"],"mappings":";;;AAIA,IAAM,UAAU,mBAAmB,QAAU;AAE7C,SAAgB,OAAO,GAAG,MAAqC;CAC7D,OAAO,QAAQ,GAAG,IAAI;AACxB"}
@@ -1,3 +1,7 @@
1
1
  import { MiddlewareHandler } from 'hono';
2
2
  import { MiddlewareReturnFromParts, MiddlewareUnit } from '../types/units.js';
3
3
  export declare function wrapHonoMiddleware<F extends (...args: never[]) => MiddlewareHandler>(honoFactory: F): (...args: Parameters<F>) => MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>>;
4
+ /** Extracts the jwtPayload from Hono's variable bag and forwards it into Taser's state via next(). */
5
+ export declare function extractJwtPayload<TPayload>(honoMw: MiddlewareHandler): (ctx: unknown, next: (state: {
6
+ jwtPayload: TPayload;
7
+ }) => unknown) => unknown;
@@ -1,9 +1,18 @@
1
1
  import { defineMiddleware } from "../define/middleware.js";
2
+ import { createTaserCompatHandler } from "@taserjs/router-core";
2
3
  //#region src/middleware/wrap-hono.ts
3
4
  function wrapHonoMiddleware(honoFactory) {
4
5
  return (...args) => defineMiddleware(honoFactory(...args));
5
6
  }
7
+ /** Extracts the jwtPayload from Hono's variable bag and forwards it into Taser's state via next(). */
8
+ function extractJwtPayload(honoMw) {
9
+ const taserHandler = createTaserCompatHandler(honoMw);
10
+ return (ctx, next) => taserHandler(ctx, async () => {
11
+ const payload = ctx.var.jwtPayload;
12
+ return next({ jwtPayload: payload });
13
+ });
14
+ }
6
15
  //#endregion
7
- export { wrapHonoMiddleware };
16
+ export { extractJwtPayload, wrapHonoMiddleware };
8
17
 
9
18
  //# sourceMappingURL=wrap-hono.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-hono.js","names":[],"sources":["../../../src/middleware/wrap-hono.ts"],"sourcesContent":["import type { MiddlewareHandler } from \"hono\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport type { MiddlewareReturnFromParts, MiddlewareUnit } from \"../types/units.js\";\n\nexport function wrapHonoMiddleware<F extends (...args: never[]) => MiddlewareHandler>(\n honoFactory: F,\n): (\n ...args: Parameters<F>\n) => MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>> {\n return (...args) => defineMiddleware(honoFactory(...args));\n}\n"],"mappings":";;AAKA,SAAgB,mBACd,aAG4E;CAC5E,QAAQ,GAAG,SAAS,iBAAiB,YAAY,GAAG,IAAI,CAAC;AAC3D"}
1
+ {"version":3,"file":"wrap-hono.js","names":[],"sources":["../../../src/middleware/wrap-hono.ts"],"sourcesContent":["import { createTaserCompatHandler } from \"@taserjs/router-core\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport { defineMiddleware } from \"../define/middleware.js\";\nimport type { MiddlewareReturnFromParts, MiddlewareUnit } from \"../types/units.js\";\n\nexport function wrapHonoMiddleware<F extends (...args: never[]) => MiddlewareHandler>(\n honoFactory: F,\n): (\n ...args: Parameters<F>\n) => MiddlewareUnit<MiddlewareReturnFromParts<unknown, unknown, unknown, {}>> {\n return (...args) => defineMiddleware(honoFactory(...args));\n}\n\n/** Extracts the jwtPayload from Hono's variable bag and forwards it into Taser's state via next(). */\nexport function extractJwtPayload<TPayload>(\n honoMw: MiddlewareHandler,\n): (ctx: unknown, next: (state: { jwtPayload: TPayload }) => unknown) => unknown {\n const taserHandler = createTaserCompatHandler(honoMw);\n return (ctx, next) =>\n taserHandler(ctx, async () => {\n const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;\n return next({ jwtPayload: payload as TPayload });\n });\n}\n"],"mappings":";;;AAMA,SAAgB,mBACd,aAG4E;CAC5E,QAAQ,GAAG,SAAS,iBAAiB,YAAY,GAAG,IAAI,CAAC;AAC3D;;AAGA,SAAgB,kBACd,QAC+E;CAC/E,MAAM,eAAe,yBAAyB,MAAM;CACpD,QAAQ,KAAK,SACX,aAAa,KAAK,YAAY;EAC5B,MAAM,UAAW,IAAqD,IAAI;EAC1E,OAAO,KAAK,EAAE,YAAY,QAAoB,CAAC;CACjD,CAAC;AACL"}
@@ -1,5 +1,6 @@
1
+ import { RouteManifestShape } from '@taserjs/router-core';
1
2
  import { ResponseValidationFailureHandler } from '@taserjs/router-utils';
2
- import { TaserApp } from '../taser-app.js';
3
+ import { TaserApp } from '../builder/app.js';
3
4
  import { ReturnsMap } from './returns.js';
4
5
  import { Schema } from './schema.js';
5
6
  export type CreateTaserAppOptions = {
@@ -21,19 +22,18 @@ export type CreateTaserAppOptions = {
21
22
  expires?: Date;
22
23
  };
23
24
  };
24
- export type CreateContextArgs = {
25
- native?: import('./units.js').NativeContext;
26
- };
27
25
  export type ContextDefinition<TBoot extends Record<string, unknown> = Record<string, never>, TReq extends Record<string, unknown> = Record<string, never>> = {
28
26
  boot?: () => TBoot | Promise<TBoot>;
29
- request?: (args: CreateContextArgs) => TReq | Promise<TReq>;
27
+ request?: (req: Request) => TReq | Promise<TReq>;
30
28
  };
31
29
  export type InferAppContext<T extends ContextDefinition<Record<string, unknown>, Record<string, unknown>>> = T extends ContextDefinition<infer TBoot, infer TReq> ? TBoot & TReq : Record<string, never>;
32
30
  export type OnErrorOptions<TResponses extends ReturnsMap = ReturnsMap> = {
33
31
  responses?: TResponses;
34
32
  handle: (error: unknown, ctx?: unknown) => Response | Promise<Response>;
35
33
  };
36
- export type InferAppManifest<TApp> = TApp extends TaserApp<infer TManifest> ? TManifest : never;
34
+ export type InferAppManifest<TApp> = TApp extends TaserApp<infer TManifest> ? TManifest : TApp extends {
35
+ manifest: infer TManifest;
36
+ } ? TManifest : TApp extends RouteManifestShape ? TApp : never;
37
37
  export type TaserHandler<TFrameworkApp> = {
38
38
  /**
39
39
  * Mount the Taser handler on a framework app.
@@ -44,4 +44,4 @@ export type TaserHandler<TFrameworkApp> = {
44
44
  };
45
45
  export type { RouteManifestShape } from '@taserjs/router-core';
46
46
  export type { Schema };
47
- export type { TaserApp, TaserNativeBound } from '../taser-app.js';
47
+ export type { TaserApp } from '../builder/app.js';