@taserjs/router 0.1.6 → 0.1.7

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.
@@ -13,6 +13,7 @@ var createHeadRoute = createWithoutBodyRoute("HEAD");
13
13
  var createPostRoute = createWithBodyRoute("POST");
14
14
  var createPutRoute = createWithBodyRoute("PUT");
15
15
  var createPatchRoute = createWithBodyRoute("PATCH");
16
+ var createQueryRoute = createWithBodyRoute("QUERY");
16
17
  var createAnyRoute = ((path, methods) => require_route.createRouteBuilder(path, "ANY", methods));
17
18
  var createAllRoute = ((path) => require_route.createRouteBuilder(path, "ALL"));
18
19
  //#endregion
@@ -25,5 +26,6 @@ exports.createOptionsRoute = createOptionsRoute;
25
26
  exports.createPatchRoute = createPatchRoute;
26
27
  exports.createPostRoute = createPostRoute;
27
28
  exports.createPutRoute = createPutRoute;
29
+ exports.createQueryRoute = createQueryRoute;
28
30
 
29
31
  //# sourceMappingURL=factories.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"factories.cjs","names":[],"sources":["../../../src/builder/factories.ts"],"sourcesContent":["import { createRouteBuilder } from \"./route.js\";\nimport type { AppContext, RouteBuilder, RoutePath } from \"../types/index.js\";\nimport type { HttpMethod } from \"../types/units.js\";\n\nexport type CreateWithoutBodyRoute<\n M extends \"GET\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\",\n TAppContext extends Record<string, unknown> = AppContext,\n> = <const Path extends RoutePath>(\n path: Path,\n) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;\n\nexport type CreateWithBodyRoute<\n M extends \"POST\" | \"PUT\" | \"PATCH\",\n TAppContext extends Record<string, unknown> = AppContext,\n> = <const Path extends RoutePath>(\n path: Path,\n) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;\n\nexport type CreateAnyRoute<TAppContext extends Record<string, unknown> = AppContext> = <\n const Path extends RoutePath,\n const Methods extends readonly HttpMethod[],\n>(\n path: Path,\n methods: Methods,\n) => RouteBuilder<Path, Methods[number], readonly [], {}, {}, TAppContext>;\n\nexport type CreateAllRoute<TAppContext extends Record<string, unknown> = AppContext> = <\n const Path extends RoutePath,\n>(\n path: Path,\n) => RouteBuilder<Path, HttpMethod, readonly [], {}, {}, TAppContext>;\n\nfunction createWithoutBodyRoute<M extends \"GET\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\">(\n method: M,\n): CreateWithoutBodyRoute<M> {\n return ((path: string) =>\n createRouteBuilder(path, method)) as unknown as CreateWithoutBodyRoute<M>;\n}\n\nfunction createWithBodyRoute<M extends \"POST\" | \"PUT\" | \"PATCH\">(\n method: M,\n): CreateWithBodyRoute<M> {\n return ((path: string) => createRouteBuilder(path, method)) as unknown as CreateWithBodyRoute<M>;\n}\n\nexport const createGetRoute = createWithoutBodyRoute(\"GET\");\nexport const createDeleteRoute = createWithoutBodyRoute(\"DELETE\");\nexport const createOptionsRoute = createWithoutBodyRoute(\"OPTIONS\");\nexport const createHeadRoute = createWithoutBodyRoute(\"HEAD\");\nexport const createPostRoute = createWithBodyRoute(\"POST\");\nexport const createPutRoute = createWithBodyRoute(\"PUT\");\nexport const createPatchRoute = createWithBodyRoute(\"PATCH\");\n\nexport const createAnyRoute: CreateAnyRoute = ((path: string, methods: readonly HttpMethod[]) =>\n createRouteBuilder(path, \"ANY\", methods)) as unknown as CreateAnyRoute;\n\nexport const createAllRoute: CreateAllRoute = ((path: string) =>\n createRouteBuilder(path, \"ALL\")) as unknown as CreateAllRoute;\n"],"mappings":";;AAgCA,SAAS,uBACP,QAC2B;CAC3B,SAAS,SACP,cAAA,mBAAmB,MAAM,MAAM;AACnC;AAEA,SAAS,oBACP,QACwB;CACxB,SAAS,SAAiB,cAAA,mBAAmB,MAAM,MAAM;AAC3D;AAEA,IAAa,iBAAiB,uBAAuB,KAAK;AAC1D,IAAa,oBAAoB,uBAAuB,QAAQ;AAChE,IAAa,qBAAqB,uBAAuB,SAAS;AAClE,IAAa,kBAAkB,uBAAuB,MAAM;AAC5D,IAAa,kBAAkB,oBAAoB,MAAM;AACzD,IAAa,iBAAiB,oBAAoB,KAAK;AACvD,IAAa,mBAAmB,oBAAoB,OAAO;AAE3D,IAAa,mBAAmC,MAAc,YAC5D,cAAA,mBAAmB,MAAM,OAAO,OAAO;AAEzC,IAAa,mBAAmC,SAC9C,cAAA,mBAAmB,MAAM,KAAK"}
1
+ {"version":3,"file":"factories.cjs","names":[],"sources":["../../../src/builder/factories.ts"],"sourcesContent":["import { createRouteBuilder } from \"./route.js\";\nimport type { AppContext, RouteBuilder, RoutePath } from \"../types/index.js\";\nimport type { HttpMethod } from \"../types/units.js\";\n\nexport type CreateWithoutBodyRoute<\n M extends \"GET\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\",\n TAppContext extends Record<string, unknown> = AppContext,\n> = <const Path extends RoutePath>(\n path: Path,\n) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;\n\nexport type CreateWithBodyRoute<\n M extends \"POST\" | \"PUT\" | \"PATCH\" | \"QUERY\",\n TAppContext extends Record<string, unknown> = AppContext,\n> = <const Path extends RoutePath>(\n path: Path,\n) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;\n\nexport type CreateAnyRoute<TAppContext extends Record<string, unknown> = AppContext> = <\n const Path extends RoutePath,\n const Methods extends readonly HttpMethod[],\n>(\n path: Path,\n methods: Methods,\n) => RouteBuilder<Path, Methods[number], readonly [], {}, {}, TAppContext>;\n\nexport type CreateAllRoute<TAppContext extends Record<string, unknown> = AppContext> = <\n const Path extends RoutePath,\n>(\n path: Path,\n) => RouteBuilder<Path, HttpMethod, readonly [], {}, {}, TAppContext>;\n\nfunction createWithoutBodyRoute<M extends \"GET\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\">(\n method: M,\n): CreateWithoutBodyRoute<M> {\n return ((path: string) =>\n createRouteBuilder(path, method)) as unknown as CreateWithoutBodyRoute<M>;\n}\n\nfunction createWithBodyRoute<M extends \"POST\" | \"PUT\" | \"PATCH\" | \"QUERY\">(\n method: M,\n): CreateWithBodyRoute<M> {\n return ((path: string) => createRouteBuilder(path, method)) as unknown as CreateWithBodyRoute<M>;\n}\n\nexport const createGetRoute = createWithoutBodyRoute(\"GET\");\nexport const createDeleteRoute = createWithoutBodyRoute(\"DELETE\");\nexport const createOptionsRoute = createWithoutBodyRoute(\"OPTIONS\");\nexport const createHeadRoute = createWithoutBodyRoute(\"HEAD\");\nexport const createPostRoute = createWithBodyRoute(\"POST\");\nexport const createPutRoute = createWithBodyRoute(\"PUT\");\nexport const createPatchRoute = createWithBodyRoute(\"PATCH\");\nexport const createQueryRoute = createWithBodyRoute(\"QUERY\");\n\nexport const createAnyRoute: CreateAnyRoute = ((path: string, methods: readonly HttpMethod[]) =>\n createRouteBuilder(path, \"ANY\", methods)) as unknown as CreateAnyRoute;\n\nexport const createAllRoute: CreateAllRoute = ((path: string) =>\n createRouteBuilder(path, \"ALL\")) as unknown as CreateAllRoute;\n"],"mappings":";;AAgCA,SAAS,uBACP,QAC2B;CAC3B,SAAS,SACP,cAAA,mBAAmB,MAAM,MAAM;AACnC;AAEA,SAAS,oBACP,QACwB;CACxB,SAAS,SAAiB,cAAA,mBAAmB,MAAM,MAAM;AAC3D;AAEA,IAAa,iBAAiB,uBAAuB,KAAK;AAC1D,IAAa,oBAAoB,uBAAuB,QAAQ;AAChE,IAAa,qBAAqB,uBAAuB,SAAS;AAClE,IAAa,kBAAkB,uBAAuB,MAAM;AAC5D,IAAa,kBAAkB,oBAAoB,MAAM;AACzD,IAAa,iBAAiB,oBAAoB,KAAK;AACvD,IAAa,mBAAmB,oBAAoB,OAAO;AAC3D,IAAa,mBAAmB,oBAAoB,OAAO;AAE3D,IAAa,mBAAmC,MAAc,YAC5D,cAAA,mBAAmB,MAAM,OAAO,OAAO;AAEzC,IAAa,mBAAmC,SAC9C,cAAA,mBAAmB,MAAM,KAAK"}
@@ -1,7 +1,7 @@
1
1
  import { AppContext, RouteBuilder, RoutePath } from '../types/index.js';
2
2
  import { HttpMethod } from '../types/units.js';
3
3
  export type CreateWithoutBodyRoute<M extends "GET" | "DELETE" | "OPTIONS" | "HEAD", TAppContext extends Record<string, unknown> = AppContext> = <const Path extends RoutePath>(path: Path) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;
4
- export type CreateWithBodyRoute<M extends "POST" | "PUT" | "PATCH", TAppContext extends Record<string, unknown> = AppContext> = <const Path extends RoutePath>(path: Path) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;
4
+ export type CreateWithBodyRoute<M extends "POST" | "PUT" | "PATCH" | "QUERY", TAppContext extends Record<string, unknown> = AppContext> = <const Path extends RoutePath>(path: Path) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;
5
5
  export type CreateAnyRoute<TAppContext extends Record<string, unknown> = AppContext> = <const Path extends RoutePath, const Methods extends readonly HttpMethod[]>(path: Path, methods: Methods) => RouteBuilder<Path, Methods[number], readonly [], {}, {}, TAppContext>;
6
6
  export type CreateAllRoute<TAppContext extends Record<string, unknown> = AppContext> = <const Path extends RoutePath>(path: Path) => RouteBuilder<Path, HttpMethod, readonly [], {}, {}, TAppContext>;
7
7
  export declare const createGetRoute: CreateWithoutBodyRoute<"GET", import('../types/units.js').EmptyAppContext>;
@@ -11,5 +11,6 @@ export declare const createHeadRoute: CreateWithoutBodyRoute<"HEAD", import('../
11
11
  export declare const createPostRoute: CreateWithBodyRoute<"POST", import('../types/units.js').EmptyAppContext>;
12
12
  export declare const createPutRoute: CreateWithBodyRoute<"PUT", import('../types/units.js').EmptyAppContext>;
13
13
  export declare const createPatchRoute: CreateWithBodyRoute<"PATCH", import('../types/units.js').EmptyAppContext>;
14
+ export declare const createQueryRoute: CreateWithBodyRoute<"QUERY", import('../types/units.js').EmptyAppContext>;
14
15
  export declare const createAnyRoute: CreateAnyRoute;
15
16
  export declare const createAllRoute: CreateAllRoute;
@@ -9,6 +9,7 @@ var patch = require_factories.createPatchRoute;
9
9
  var del = require_factories.createDeleteRoute;
10
10
  var options = require_factories.createOptionsRoute;
11
11
  var head = require_factories.createHeadRoute;
12
+ var query = require_factories.createQueryRoute;
12
13
  var any = require_factories.createAnyRoute;
13
14
  var all = require_factories.createAllRoute;
14
15
  var layout = require_middleware.createMiddleware;
@@ -21,6 +22,7 @@ var t = {
21
22
  delete: del,
22
23
  options,
23
24
  head,
25
+ query,
24
26
  any,
25
27
  all,
26
28
  layout,
@@ -38,6 +40,7 @@ exports.options = options;
38
40
  exports.patch = patch;
39
41
  exports.post = post;
40
42
  exports.put = put;
43
+ exports.query = query;
41
44
  exports.t = t;
42
45
 
43
46
  //# sourceMappingURL=standalone.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"standalone.cjs","names":[],"sources":["../../../src/builder/standalone.ts"],"sourcesContent":["import type { AppContext, LayoutBuilder } from \"../types/index.js\";\nimport {\n createAllRoute,\n createAnyRoute,\n createDeleteRoute,\n createGetRoute,\n createHeadRoute,\n createOptionsRoute,\n createPatchRoute,\n createPostRoute,\n createPutRoute,\n type CreateAllRoute,\n type CreateAnyRoute,\n type CreateWithBodyRoute,\n type CreateWithoutBodyRoute,\n} from \"./factories.js\";\nimport { createMiddleware } from \"./middleware.js\";\nimport { middleware as createMiddlewareFn, type MiddlewareFn } from \"../define/middleware.js\";\n\nexport const get: CreateWithoutBodyRoute<\"GET\", AppContext> =\n createGetRoute as CreateWithoutBodyRoute<\"GET\", AppContext>;\nexport const post: CreateWithBodyRoute<\"POST\", AppContext> = createPostRoute as CreateWithBodyRoute<\n \"POST\",\n AppContext\n>;\nexport const put: CreateWithBodyRoute<\"PUT\", AppContext> = createPutRoute as CreateWithBodyRoute<\n \"PUT\",\n AppContext\n>;\nexport const patch: CreateWithBodyRoute<\"PATCH\", AppContext> =\n createPatchRoute as CreateWithBodyRoute<\"PATCH\", AppContext>;\nexport const del: CreateWithoutBodyRoute<\"DELETE\", AppContext> =\n createDeleteRoute as CreateWithoutBodyRoute<\"DELETE\", AppContext>;\nexport const options: CreateWithoutBodyRoute<\"OPTIONS\", AppContext> =\n createOptionsRoute as CreateWithoutBodyRoute<\"OPTIONS\", AppContext>;\nexport const head: CreateWithoutBodyRoute<\"HEAD\", AppContext> =\n createHeadRoute as CreateWithoutBodyRoute<\"HEAD\", AppContext>;\nexport const any: CreateAnyRoute<AppContext> = createAnyRoute as CreateAnyRoute<AppContext>;\nexport const all: CreateAllRoute<AppContext> = createAllRoute as CreateAllRoute<AppContext>;\n\nexport const layout: LayoutBuilder<AppContext> = createMiddleware as LayoutBuilder<AppContext>;\nexport const middleware: MiddlewareFn<AppContext> = createMiddlewareFn as MiddlewareFn<AppContext>;\n\nexport type TaserNamespace<TAppContext extends Record<string, unknown> = AppContext> = {\n readonly get: CreateWithoutBodyRoute<\"GET\", TAppContext>;\n readonly post: CreateWithBodyRoute<\"POST\", TAppContext>;\n readonly put: CreateWithBodyRoute<\"PUT\", TAppContext>;\n readonly patch: CreateWithBodyRoute<\"PATCH\", TAppContext>;\n readonly delete: CreateWithoutBodyRoute<\"DELETE\", TAppContext>;\n readonly options: CreateWithoutBodyRoute<\"OPTIONS\", TAppContext>;\n readonly head: CreateWithoutBodyRoute<\"HEAD\", TAppContext>;\n readonly any: CreateAnyRoute<TAppContext>;\n readonly all: CreateAllRoute<TAppContext>;\n readonly layout: LayoutBuilder<TAppContext>;\n readonly middleware: MiddlewareFn<TAppContext>;\n};\n\nexport const t: TaserNamespace<AppContext> = {\n get,\n post,\n put,\n patch,\n delete: del,\n options,\n head,\n any,\n all,\n layout,\n middleware,\n};\n"],"mappings":";;;;AAmBA,IAAa,MACX,kBAAA;AACF,IAAa,OAAgD,kBAAA;AAI7D,IAAa,MAA8C,kBAAA;AAI3D,IAAa,QACX,kBAAA;AACF,IAAa,MACX,kBAAA;AACF,IAAa,UACX,kBAAA;AACF,IAAa,OACX,kBAAA;AACF,IAAa,MAAkC,kBAAA;AAC/C,IAAa,MAAkC,kBAAA;AAE/C,IAAa,SAAoC,mBAAA;AACjD,IAAa,aAAuC,qBAAA;AAgBpD,IAAa,IAAgC;CAC3C;CACA;CACA;CACA;CACA,QAAQ;CACR;CACA;CACA;CACA;CACA;CACA;AACF"}
1
+ {"version":3,"file":"standalone.cjs","names":[],"sources":["../../../src/builder/standalone.ts"],"sourcesContent":["import type { AppContext, LayoutBuilder } from \"../types/index.js\";\nimport {\n createAllRoute,\n createAnyRoute,\n createDeleteRoute,\n createGetRoute,\n createHeadRoute,\n createOptionsRoute,\n createPatchRoute,\n createPostRoute,\n createPutRoute,\n createQueryRoute,\n type CreateAllRoute,\n type CreateAnyRoute,\n type CreateWithBodyRoute,\n type CreateWithoutBodyRoute,\n} from \"./factories.js\";\nimport { createMiddleware } from \"./middleware.js\";\nimport { middleware as createMiddlewareFn, type MiddlewareFn } from \"../define/middleware.js\";\n\nexport const get: CreateWithoutBodyRoute<\"GET\", AppContext> =\n createGetRoute as CreateWithoutBodyRoute<\"GET\", AppContext>;\nexport const post: CreateWithBodyRoute<\"POST\", AppContext> = createPostRoute as CreateWithBodyRoute<\n \"POST\",\n AppContext\n>;\nexport const put: CreateWithBodyRoute<\"PUT\", AppContext> = createPutRoute as CreateWithBodyRoute<\n \"PUT\",\n AppContext\n>;\nexport const patch: CreateWithBodyRoute<\"PATCH\", AppContext> =\n createPatchRoute as CreateWithBodyRoute<\"PATCH\", AppContext>;\nexport const del: CreateWithoutBodyRoute<\"DELETE\", AppContext> =\n createDeleteRoute as CreateWithoutBodyRoute<\"DELETE\", AppContext>;\nexport const options: CreateWithoutBodyRoute<\"OPTIONS\", AppContext> =\n createOptionsRoute as CreateWithoutBodyRoute<\"OPTIONS\", AppContext>;\nexport const head: CreateWithoutBodyRoute<\"HEAD\", AppContext> =\n createHeadRoute as CreateWithoutBodyRoute<\"HEAD\", AppContext>;\nexport const query: CreateWithBodyRoute<\"QUERY\", AppContext> =\n createQueryRoute as CreateWithBodyRoute<\"QUERY\", AppContext>;\nexport const any: CreateAnyRoute<AppContext> = createAnyRoute as CreateAnyRoute<AppContext>;\nexport const all: CreateAllRoute<AppContext> = createAllRoute as CreateAllRoute<AppContext>;\n\nexport const layout: LayoutBuilder<AppContext> = createMiddleware as LayoutBuilder<AppContext>;\nexport const middleware: MiddlewareFn<AppContext> = createMiddlewareFn as MiddlewareFn<AppContext>;\n\nexport type TaserNamespace<TAppContext extends Record<string, unknown> = AppContext> = {\n readonly get: CreateWithoutBodyRoute<\"GET\", TAppContext>;\n readonly post: CreateWithBodyRoute<\"POST\", TAppContext>;\n readonly put: CreateWithBodyRoute<\"PUT\", TAppContext>;\n readonly patch: CreateWithBodyRoute<\"PATCH\", TAppContext>;\n readonly delete: CreateWithoutBodyRoute<\"DELETE\", TAppContext>;\n readonly options: CreateWithoutBodyRoute<\"OPTIONS\", TAppContext>;\n readonly head: CreateWithoutBodyRoute<\"HEAD\", TAppContext>;\n readonly query: CreateWithBodyRoute<\"QUERY\", TAppContext>;\n readonly any: CreateAnyRoute<TAppContext>;\n readonly all: CreateAllRoute<TAppContext>;\n readonly layout: LayoutBuilder<TAppContext>;\n readonly middleware: MiddlewareFn<TAppContext>;\n};\n\nexport const t: TaserNamespace<AppContext> = {\n get,\n post,\n put,\n patch,\n delete: del,\n options,\n head,\n query,\n any,\n all,\n layout,\n middleware,\n};\n"],"mappings":";;;;AAoBA,IAAa,MACX,kBAAA;AACF,IAAa,OAAgD,kBAAA;AAI7D,IAAa,MAA8C,kBAAA;AAI3D,IAAa,QACX,kBAAA;AACF,IAAa,MACX,kBAAA;AACF,IAAa,UACX,kBAAA;AACF,IAAa,OACX,kBAAA;AACF,IAAa,QACX,kBAAA;AACF,IAAa,MAAkC,kBAAA;AAC/C,IAAa,MAAkC,kBAAA;AAE/C,IAAa,SAAoC,mBAAA;AACjD,IAAa,aAAuC,qBAAA;AAiBpD,IAAa,IAAgC;CAC3C;CACA;CACA;CACA;CACA,QAAQ;CACR;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
@@ -8,6 +8,7 @@ export declare const patch: CreateWithBodyRoute<"PATCH", AppContext>;
8
8
  export declare const del: CreateWithoutBodyRoute<"DELETE", AppContext>;
9
9
  export declare const options: CreateWithoutBodyRoute<"OPTIONS", AppContext>;
10
10
  export declare const head: CreateWithoutBodyRoute<"HEAD", AppContext>;
11
+ export declare const query: CreateWithBodyRoute<"QUERY", AppContext>;
11
12
  export declare const any: CreateAnyRoute<AppContext>;
12
13
  export declare const all: CreateAllRoute<AppContext>;
13
14
  export declare const layout: LayoutBuilder<AppContext>;
@@ -20,6 +21,7 @@ export type TaserNamespace<TAppContext extends Record<string, unknown> = AppCont
20
21
  readonly delete: CreateWithoutBodyRoute<"DELETE", TAppContext>;
21
22
  readonly options: CreateWithoutBodyRoute<"OPTIONS", TAppContext>;
22
23
  readonly head: CreateWithoutBodyRoute<"HEAD", TAppContext>;
24
+ readonly query: CreateWithBodyRoute<"QUERY", TAppContext>;
23
25
  readonly any: CreateAnyRoute<TAppContext>;
24
26
  readonly all: CreateAllRoute<TAppContext>;
25
27
  readonly layout: LayoutBuilder<TAppContext>;
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.cjs","names":[],"sources":["../../../src/define/middleware.ts"],"sourcesContent":["import { createMiddlewareUnitBuilder } from \"../builder/middleware-unit.js\";\nimport type {\n DefineMiddlewareResult,\n ExtractState,\n IsUnknown,\n MiddlewareUnitBuilder,\n NextFn,\n StandaloneMiddlewareContext,\n} from \"../types/units.js\";\nimport type {\n AppContext,\n LayoutId,\n ResolveLayoutMiddlewaresState,\n ResolveLayoutsState,\n} from \"../types/index.js\";\n\nexport interface MiddlewareFn<TAppContext extends Record<string, unknown> = AppContext> {\n /**\n * Constructs a fluent unscoped middleware builder, with optional explicit State generic.\n *\n * @example\n * ```ts\n * const auth = middleware<{ user: string }>()\n * .query(z.object({ token: z.string() }))\n * .body(\"form\", z.object({ file: z.instanceof(File) }))\n * .returns({ 401: z.string() })\n * .handler(async (ctx, next) => next({ user: \"alice\" }));\n * ```\n */\n <TState = unknown>(): MiddlewareUnitBuilder<\n unknown,\n unknown,\n unknown,\n {},\n null,\n {},\n TAppContext,\n {},\n unknown,\n unknown,\n unknown,\n TState\n >;\n\n /**\n * Constructs a fluent middleware builder scoped to a single layout branch, with optional explicit State generic.\n */\n <const Layout extends LayoutId, TState = unknown>(\n layout: Layout,\n ): MiddlewareUnitBuilder<\n unknown,\n unknown,\n unknown,\n {},\n Layout,\n {},\n TAppContext,\n ResolveLayoutMiddlewaresState<Layout>,\n unknown,\n unknown,\n unknown,\n TState\n >;\n\n /**\n * Constructs a fluent middleware builder scoped to multiple layout branches (branch union), with optional explicit State generic.\n */\n <const Layouts extends readonly [LayoutId, ...LayoutId[]], TState = unknown>(\n layouts: Layouts,\n ): MiddlewareUnitBuilder<\n unknown,\n unknown,\n unknown,\n {},\n Layouts,\n {},\n TAppContext,\n ResolveLayoutsState<Layouts>,\n unknown,\n unknown,\n unknown,\n TState\n >;\n\n /**\n * Defines a standalone middleware scoped to a single layout branch using a short function signature.\n */\n <const Layout extends LayoutId, TState = unknown, TRequires = {}, R = unknown>(\n layout: Layout,\n fn: (\n ctx: StandaloneMiddlewareContext<\n unknown,\n unknown,\n unknown,\n TAppContext,\n ResolveLayoutMiddlewaresState<Layout> & TRequires\n >,\n next: NextFn<NoInfer<TState>>,\n ) => R,\n ): DefineMiddlewareResult<\n unknown,\n unknown,\n unknown,\n IsUnknown<TState> extends true ? ExtractState<R> : TState,\n R,\n unknown,\n unknown,\n unknown,\n {},\n Layout,\n TRequires\n >;\n\n /**\n * Defines a standalone middleware scoped to multiple layout branches using a short function signature.\n */\n <\n const Layouts extends readonly [LayoutId, ...LayoutId[]],\n TState = unknown,\n TRequires = {},\n R = unknown,\n >(\n layouts: Layouts,\n fn: (\n ctx: StandaloneMiddlewareContext<\n unknown,\n unknown,\n unknown,\n TAppContext,\n ResolveLayoutsState<Layouts> & TRequires\n >,\n next: NextFn<NoInfer<TState>>,\n ) => R,\n ): DefineMiddlewareResult<\n unknown,\n unknown,\n unknown,\n IsUnknown<TState> extends true ? ExtractState<R> : TState,\n R,\n unknown,\n unknown,\n unknown,\n {},\n Layouts,\n TRequires\n >;\n\n /**\n * Defines a standalone, unscoped middleware using a short function signature.\n *\n * @example\n * ```ts\n * const auth = middleware((ctx, next) => {\n * return next({ user: \"alice\" });\n * });\n * ```\n */\n <TState = unknown, TRequires = {}, R = unknown>(\n fn: (\n ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, TRequires>,\n next: NextFn<NoInfer<TState>>,\n ) => R,\n ): DefineMiddlewareResult<\n unknown,\n unknown,\n unknown,\n IsUnknown<TState> extends true ? ExtractState<R> : TState,\n R,\n unknown,\n unknown,\n unknown,\n {},\n null,\n TRequires\n >;\n}\n\nexport const middleware: MiddlewareFn<AppContext> = function middleware(\n first?: any,\n second?: any,\n): any {\n if (first === undefined) {\n return createMiddlewareUnitBuilder();\n }\n\n if (typeof first === \"string\" || Array.isArray(first)) {\n if (typeof second === \"function\") {\n return {\n handler: second,\n __middlewareAcc: undefined as unknown,\n __requiredLayouts: first,\n };\n }\n return createMiddlewareUnitBuilder(first);\n }\n\n if (typeof first === \"function\") {\n return {\n handler: first,\n __middlewareAcc: undefined as unknown,\n };\n }\n\n return createMiddlewareUnitBuilder();\n};\n"],"mappings":";;AAiLA,IAAa,aAAuC,SAAS,WAC3D,OACA,QACK;CACL,IAAI,UAAU,KAAA,GACZ,OAAO,wBAAA,4BAA4B;CAGrC,IAAI,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;EACrD,IAAI,OAAO,WAAW,YACpB,OAAO;GACL,SAAS;GACT,iBAAiB,KAAA;GACjB,mBAAmB;EACrB;EAEF,OAAO,wBAAA,4BAA4B,KAAK;CAC1C;CAEA,IAAI,OAAO,UAAU,YACnB,OAAO;EACL,SAAS;EACT,iBAAiB,KAAA;CACnB;CAGF,OAAO,wBAAA,4BAA4B;AACrC"}
1
+ {"version":3,"file":"middleware.cjs","names":[],"sources":["../../../src/define/middleware.ts"],"sourcesContent":["import { createMiddlewareUnitBuilder } from \"../builder/middleware-unit.js\";\nimport type {\n DefineMiddlewareResult,\n ExtractState,\n IsUnknown,\n MiddlewareRequirements,\n MiddlewareUnitBuilder,\n NextFn,\n StandaloneMiddlewareContext,\n} from \"../types/units.js\";\nimport type {\n AppContext,\n LayoutId,\n ResolveLayoutMiddlewaresState,\n ResolveLayoutsState,\n} from \"../types/index.js\";\n\nexport interface MiddlewareFn<TAppContext extends Record<string, unknown> = AppContext> {\n /**\n * Constructs a fluent unscoped middleware builder, with optional explicit State generic.\n *\n * @example\n * ```ts\n * const auth = middleware<{ user: string }>()\n * .query(z.object({ token: z.string() }))\n * .body(\"form\", z.object({ file: z.instanceof(File) }))\n * .returns({ 401: z.string() })\n * .handler(async (ctx, next) => next({ user: \"alice\" }));\n * ```\n */\n <TState = unknown>(): MiddlewareUnitBuilder<\n unknown,\n unknown,\n unknown,\n {},\n null,\n {},\n TAppContext,\n {},\n unknown,\n unknown,\n unknown,\n TState\n >;\n\n /**\n * Constructs a fluent middleware builder scoped to a single layout branch, with optional explicit State generic.\n */\n <const Layout extends LayoutId, TState = unknown>(\n layout: Layout,\n ): MiddlewareUnitBuilder<\n unknown,\n unknown,\n unknown,\n {},\n Layout,\n {},\n TAppContext,\n ResolveLayoutMiddlewaresState<Layout>,\n unknown,\n unknown,\n unknown,\n TState\n >;\n\n /**\n * Constructs a fluent middleware builder scoped to multiple layout branches (branch union), with optional explicit State generic.\n */\n <const Layouts extends readonly [LayoutId, ...LayoutId[]], TState = unknown>(\n layouts: Layouts,\n ): MiddlewareUnitBuilder<\n unknown,\n unknown,\n unknown,\n {},\n Layouts,\n {},\n TAppContext,\n ResolveLayoutsState<Layouts>,\n unknown,\n unknown,\n unknown,\n TState\n >;\n\n /**\n * Defines a standalone middleware scoped to a single layout branch using a short function signature.\n */\n <\n const Layout extends LayoutId,\n TState = unknown,\n TRequires extends MiddlewareRequirements = {},\n R = unknown,\n >(\n layout: Layout,\n fn: (\n ctx: StandaloneMiddlewareContext<\n unknown,\n unknown,\n unknown,\n TAppContext,\n ResolveLayoutMiddlewaresState<Layout>,\n TRequires\n >,\n next: NextFn<NoInfer<TState>>,\n ) => R,\n ): DefineMiddlewareResult<\n unknown,\n unknown,\n unknown,\n IsUnknown<TState> extends true ? ExtractState<R> : TState,\n R,\n unknown,\n unknown,\n unknown,\n {},\n Layout,\n TRequires\n >;\n\n /**\n * Defines a standalone middleware scoped to multiple layout branches using a short function signature.\n */\n <\n const Layouts extends readonly [LayoutId, ...LayoutId[]],\n TState = unknown,\n TRequires extends MiddlewareRequirements = {},\n R = unknown,\n >(\n layouts: Layouts,\n fn: (\n ctx: StandaloneMiddlewareContext<\n unknown,\n unknown,\n unknown,\n TAppContext,\n ResolveLayoutsState<Layouts>,\n TRequires\n >,\n next: NextFn<NoInfer<TState>>,\n ) => R,\n ): DefineMiddlewareResult<\n unknown,\n unknown,\n unknown,\n IsUnknown<TState> extends true ? ExtractState<R> : TState,\n R,\n unknown,\n unknown,\n unknown,\n {},\n Layouts,\n TRequires\n >;\n\n /**\n * Defines a standalone, unscoped middleware using a short function signature.\n *\n * @example\n * ```ts\n * const auth = middleware((ctx, next) => {\n * return next({ user: \"alice\" });\n * });\n * ```\n */\n <TState = unknown, TRequires extends MiddlewareRequirements = {}, R = unknown>(\n fn: (\n ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, {}, TRequires>,\n next: NextFn<NoInfer<TState>>,\n ) => R,\n ): DefineMiddlewareResult<\n unknown,\n unknown,\n unknown,\n IsUnknown<TState> extends true ? ExtractState<R> : TState,\n R,\n unknown,\n unknown,\n unknown,\n {},\n null,\n TRequires\n >;\n}\n\nexport const middleware: MiddlewareFn<AppContext> = function middleware(\n first?: any,\n second?: any,\n): any {\n if (first === undefined) {\n return createMiddlewareUnitBuilder();\n }\n\n if (typeof first === \"string\" || Array.isArray(first)) {\n if (typeof second === \"function\") {\n return {\n handler: second,\n __middlewareAcc: undefined as unknown,\n __requiredLayouts: first,\n };\n }\n return createMiddlewareUnitBuilder(first);\n }\n\n if (typeof first === \"function\") {\n return {\n handler: first,\n __middlewareAcc: undefined as unknown,\n };\n }\n\n return createMiddlewareUnitBuilder();\n};\n"],"mappings":";;AAyLA,IAAa,aAAuC,SAAS,WAC3D,OACA,QACK;CACL,IAAI,UAAU,KAAA,GACZ,OAAO,wBAAA,4BAA4B;CAGrC,IAAI,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;EACrD,IAAI,OAAO,WAAW,YACpB,OAAO;GACL,SAAS;GACT,iBAAiB,KAAA;GACjB,mBAAmB;EACrB;EAEF,OAAO,wBAAA,4BAA4B,KAAK;CAC1C;CAEA,IAAI,OAAO,UAAU,YACnB,OAAO;EACL,SAAS;EACT,iBAAiB,KAAA;CACnB;CAGF,OAAO,wBAAA,4BAA4B;AACrC"}
@@ -1,4 +1,4 @@
1
- import { DefineMiddlewareResult, ExtractState, IsUnknown, MiddlewareUnitBuilder, NextFn, StandaloneMiddlewareContext } from '../types/units.js';
1
+ import { DefineMiddlewareResult, ExtractState, IsUnknown, MiddlewareRequirements, MiddlewareUnitBuilder, NextFn, StandaloneMiddlewareContext } from '../types/units.js';
2
2
  import { AppContext, LayoutId, ResolveLayoutMiddlewaresState, ResolveLayoutsState } from '../types/index.js';
3
3
  export interface MiddlewareFn<TAppContext extends Record<string, unknown> = AppContext> {
4
4
  /**
@@ -25,11 +25,11 @@ export interface MiddlewareFn<TAppContext extends Record<string, unknown> = AppC
25
25
  /**
26
26
  * Defines a standalone middleware scoped to a single layout branch using a short function signature.
27
27
  */
28
- <const Layout extends LayoutId, TState = unknown, TRequires = {}, R = unknown>(layout: Layout, fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, ResolveLayoutMiddlewaresState<Layout> & TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, Layout, TRequires>;
28
+ <const Layout extends LayoutId, TState = unknown, TRequires extends MiddlewareRequirements = {}, R = unknown>(layout: Layout, fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, ResolveLayoutMiddlewaresState<Layout>, TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, Layout, TRequires>;
29
29
  /**
30
30
  * Defines a standalone middleware scoped to multiple layout branches using a short function signature.
31
31
  */
32
- <const Layouts extends readonly [LayoutId, ...LayoutId[]], TState = unknown, TRequires = {}, R = unknown>(layouts: Layouts, fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, ResolveLayoutsState<Layouts> & TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, Layouts, TRequires>;
32
+ <const Layouts extends readonly [LayoutId, ...LayoutId[]], TState = unknown, TRequires extends MiddlewareRequirements = {}, R = unknown>(layouts: Layouts, fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, ResolveLayoutsState<Layouts>, TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, Layouts, TRequires>;
33
33
  /**
34
34
  * Defines a standalone, unscoped middleware using a short function signature.
35
35
  *
@@ -40,6 +40,6 @@ export interface MiddlewareFn<TAppContext extends Record<string, unknown> = AppC
40
40
  * });
41
41
  * ```
42
42
  */
43
- <TState = unknown, TRequires = {}, R = unknown>(fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, null, TRequires>;
43
+ <TState = unknown, TRequires extends MiddlewareRequirements = {}, R = unknown>(fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, {}, TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, null, TRequires>;
44
44
  }
45
45
  export declare const middleware: MiddlewareFn<AppContext>;
@@ -27,6 +27,7 @@ exports.options = require_standalone.options;
27
27
  exports.patch = require_standalone.patch;
28
28
  exports.post = require_standalone.post;
29
29
  exports.put = require_standalone.put;
30
+ exports.query = require_standalone.query;
30
31
  exports.t = require_standalone.t;
31
32
  Object.defineProperty(exports, "validationErrorSchema", {
32
33
  enumerable: true,
@@ -4,7 +4,7 @@ export type { AppContext, EmptyAppContext, HttpMethod, InferInput, InferOutput,
4
4
  export type { ContextDefinition, CreateTaserAppOptions, InferAppContext, InferAppManifest, OnErrorOptions, RouteManifestShape, } from './types/app.js';
5
5
  export { ValidationError, validationErrorSchema } from '@taserjs/router-utils';
6
6
  export type { ResponseValidationFailureHandler, SuccessStatusCode } from '@taserjs/router-utils';
7
- export { all, any, del, get, head, layout, middleware, options, patch, post, put, t, type TaserNamespace, } from './builder/standalone.js';
7
+ export { all, any, del, get, head, layout, middleware, options, patch, post, put, query, t, type TaserNamespace, } from './builder/standalone.js';
8
8
  export { createTaserApp, TaserRouter } from './builder/router.js';
9
9
  export { TaserApp } from './builder/app.js';
10
10
  export { createContext } from './context/create-context.js';
@@ -3,12 +3,12 @@ import { RouterRegister } from '../index.js';
3
3
  import { MergeMiddlewareField, MergeMiddlewareInputField, MergePart, RequestShape, Simplify, UnionToIntersection, UnitRuntimeContext } from './type-utils.js';
4
4
  import { ReturnsMap, ValidHandlerReply } from './returns.js';
5
5
  import { Schema } from './schema.js';
6
- import { EmptyAppContext, ExtractState, Method, MiddlewareDefinition, MiddlewareReturnFromParts, MiddlewareUnit, NextFn, ValidatorParts } from './units.js';
6
+ import { EmptyAppContext, ExtractState, Method, MiddlewareDefinition, MiddlewareRequirements, MiddlewareReturnFromParts, MiddlewareUnit, NextFn, ValidatorParts } from './units.js';
7
7
  export type { Awaitable } from '@taserjs/router-core';
8
8
  export type { SchemaRequestShape, InferInput, InferOutput, Schema, StandardSchemaV1, } from './schema.js';
9
9
  export type { MergeMiddlewareField, MergeMiddlewareInputField, MergePart, RequestShape, Simplify, UnitRuntimeContext, UnwrapPart, } from './type-utils.js';
10
10
  export type { EmptyReturns, EnforceHandlerReply, HandlerReply, HasReturns, MergeReturns, ReplyFor, ReturnsMap, StatusCode, ValidHandlerReply, } from './returns.js';
11
- export type { EmptyAppContext, ExtractState, HttpMethod, IsUnknown, Method, MiddlewareDefinition, MiddlewareReturnFromParts, MiddlewareUnit, MiddlewareUnitBuilder, NextFn, NextResult, StandaloneMiddlewareContext, StateBrand, ValidatorParts, } from './units.js';
11
+ export type { EmptyAppContext, ExtractState, HttpMethod, IsUnknown, Method, MiddlewareDefinition, MiddlewareRequirements, MiddlewareReturnFromParts, MiddlewareUnit, MiddlewareUnitBuilder, NextFn, NextResult, StandaloneMiddlewareContext, StateBrand, ValidatorParts, } from './units.js';
12
12
  export type AppContext = RouterRegister extends {
13
13
  AppContext: infer C;
14
14
  } ? C : EmptyAppContext;
@@ -121,7 +121,25 @@ type IsEmptyObject<T> = [keyof T] extends [never] ? true : false;
121
121
  export type IsLayoutAllowed<TRequiredLayouts, TChain extends readonly LayoutId[]> = [
122
122
  TRequiredLayouts
123
123
  ] extends [never] ? true : [unknown] extends [TRequiredLayouts] ? true : [null] extends [TRequiredLayouts] ? true : [undefined] extends [TRequiredLayouts] ? true : TRequiredLayouts extends LayoutId ? TRequiredLayouts extends TChain[number] ? true : false : TRequiredLayouts extends readonly LayoutId[] ? [TRequiredLayouts[number] & TChain[number]] extends [never] ? false : true : true;
124
- export type IsStateSatisfied<TActualState, TRequiredState> = [TRequiredState] extends [never] ? true : [unknown] extends [TRequiredState] ? true : [null] extends [TRequiredState] ? true : [undefined] extends [TRequiredState] ? true : [IsEmptyObject<TRequiredState>] extends [true] ? true : [TActualState] extends [TRequiredState] ? true : false;
124
+ export type IsRequirementsSatisfied<TActual extends {
125
+ query?: unknown;
126
+ params?: unknown;
127
+ body?: unknown;
128
+ state?: unknown;
129
+ }, TRequires extends MiddlewareRequirements> = [TRequires] extends [never] ? true : [unknown] extends [TRequires] ? true : [null] extends [TRequires] ? true : [undefined] extends [TRequires] ? true : [IsEmptyObject<TRequires>] extends [true] ? true : (TRequires extends {
130
+ state: infer S extends Record<string, unknown>;
131
+ } ? [TActual["state"]] extends [S] ? true : false : true) extends false ? false : (TRequires extends {
132
+ query: infer Q extends Record<string, unknown>;
133
+ } ? [TActual["query"]] extends [Q] ? true : false : true) extends false ? false : (TRequires extends {
134
+ params: infer P extends Record<string, unknown>;
135
+ } ? [TActual["params"]] extends [P] ? true : false : true) extends false ? false : (TRequires extends {
136
+ body: infer B;
137
+ } ? unknown extends B ? true : [TRequires["body"]] extends [undefined] ? true : [TActual["body"]] extends [B] ? true : false : true) extends false ? false : true;
138
+ export type IsStateSatisfied<TActualState, TRequiredState> = IsRequirementsSatisfied<{
139
+ state: TActualState;
140
+ }, {
141
+ state: TRequiredState extends Record<string, unknown> ? TRequiredState : {};
142
+ }>;
125
143
  type InputFacet<T, K extends string> = IsNever<T> extends true ? {} : IsEmptyObject<T> extends true ? {} : {
126
144
  [Key in K]: T;
127
145
  };
@@ -166,18 +184,26 @@ export type MiddlewareBuilder<Layout extends LayoutId, Acc extends readonly unkn
166
184
  readonly $Infer: {
167
185
  Context: MiddlewareChainContext<Layout, Acc, unknown, unknown, unknown, TAppContext>;
168
186
  };
169
- use<TAcc, TReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequiredState = unknown>(unit: MiddlewareUnit<TAcc, TReturns, TRequiredLayouts, TRequiredState>, ..._assert: [
187
+ use<TAcc, TReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequires extends MiddlewareRequirements = {}>(unit: [
170
188
  IsLayoutAllowed<TRequiredLayouts, ResolveLayoutIdChain<Layout>>,
171
- IsStateSatisfied<MiddlewareChainField<Layout, Acc, "state">, TRequiredState>
172
- ] extends [true, true] ? [] : [
173
- {
174
- error: "Middleware cannot be attached to this layout";
175
- requiredLayouts: TRequiredLayouts;
176
- layoutChain: ResolveLayoutIdChain<Layout>;
177
- requiredState: TRequiredState;
178
- actualState: MiddlewareChainField<Layout, Acc, "state">;
179
- }
180
- ]): MiddlewareBuilder<Layout, readonly [...Acc, TAcc], TAppContext>;
189
+ IsRequirementsSatisfied<{
190
+ query: MiddlewareChainField<Layout, Acc, "query">;
191
+ params: MiddlewareChainField<Layout, Acc, "params">;
192
+ body: MiddlewareChainField<Layout, Acc, "body">;
193
+ state: MiddlewareChainField<Layout, Acc, "state">;
194
+ }, TRequires>
195
+ ] extends [true, true] ? MiddlewareUnit<TAcc, TReturns, TRequiredLayouts, TRequires> : {
196
+ error: "Middleware cannot be attached to this layout";
197
+ requiredLayouts: TRequiredLayouts;
198
+ layoutChain: ResolveLayoutIdChain<Layout>;
199
+ requirements: TRequires;
200
+ actual: {
201
+ query: MiddlewareChainField<Layout, Acc, "query">;
202
+ params: MiddlewareChainField<Layout, Acc, "params">;
203
+ body: MiddlewareChainField<Layout, Acc, "body">;
204
+ state: MiddlewareChainField<Layout, Acc, "state">;
205
+ };
206
+ }): MiddlewareBuilder<Layout, readonly [...Acc, TAcc], TAppContext>;
181
207
  use<R = unknown>(fn: (ctx: MiddlewareChainContext<Layout, Acc, unknown, unknown, unknown, TAppContext>, next: NextFn) => Awaitable<R>): MiddlewareBuilder<Layout, readonly [...Acc, MiddlewareReturnFromParts<unknown, unknown, unknown, ExtractState<R>>], TAppContext>;
182
208
  };
183
209
  export type RouteExport<Path extends RoutePath, TMethod extends Method, Acc extends readonly unknown[], TReturns extends ReturnsMap = {}, TOutput = Response> = {
@@ -205,7 +231,7 @@ type RouteHandleResult<Path extends RoutePath, TMethod extends Method, Acc exten
205
231
  Output: TOutput;
206
232
  };
207
233
  };
208
- export type RouteBuilderBase<Path extends RoutePath, TMethod extends Method, Acc extends readonly unknown[] = readonly [], Validators extends ValidatorParts = {}, TReturns extends ReturnsMap = {}, TAppContext extends Record<string, unknown> = AppContext> = {
234
+ export type RouteContractBuilderBase<Path extends RoutePath, TMethod extends Method, Acc extends readonly unknown[] = readonly [], Validators extends ValidatorParts = {}, TReturns extends ReturnsMap = {}, TAppContext extends Record<string, unknown> = AppContext> = {
209
235
  readonly path: Path;
210
236
  readonly method: TMethod;
211
237
  readonly $Infer: {
@@ -213,28 +239,15 @@ export type RouteBuilderBase<Path extends RoutePath, TMethod extends Method, Acc
213
239
  Input: TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS" ? RouteHandleInputWithoutBody<Path, TMethod, Acc, Validators> : RouteHandleInput<Path, TMethod, Acc, Validators>;
214
240
  Output: TReturns;
215
241
  };
216
- query<TQuery, TQueryIn = unknown>(schema: Schema<TQuery, TQueryIn>): RouteBuilder<Path, TMethod, Acc, Omit<Validators, "query" | "queryIn"> & {
242
+ query<TQuery, TQueryIn = unknown>(schema: Schema<TQuery, TQueryIn>): RouteContractBuilder<Path, TMethod, Acc, Omit<Validators, "query" | "queryIn"> & {
217
243
  query: TQuery;
218
244
  queryIn: TQueryIn;
219
245
  }, TReturns, TAppContext>;
220
- params<TParams, TParamsIn = unknown>(schema: Schema<TParams, TParamsIn>): RouteBuilder<Path, TMethod, Acc, Omit<Validators, "params" | "paramsIn"> & {
246
+ params<TParams, TParamsIn = unknown>(schema: Schema<TParams, TParamsIn>): RouteContractBuilder<Path, TMethod, Acc, Omit<Validators, "params" | "paramsIn"> & {
221
247
  params: TParams;
222
248
  paramsIn: TParamsIn;
223
249
  }, TReturns, TAppContext>;
224
- returns<const M extends ReturnsMap>(map: M): RouteBuilder<Path, TMethod, Acc, Validators, Omit<TReturns, keyof M> & M, TAppContext>;
225
- use<TAcc, UReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequiredState = unknown>(unit: MiddlewareUnit<TAcc, UReturns, TRequiredLayouts, TRequiredState>, ..._assert: [
226
- IsLayoutAllowed<TRequiredLayouts, RouteLayoutChain<Path, TMethod>>,
227
- IsStateSatisfied<RouteResolvedField<Path, TMethod, Acc, "state">, TRequiredState>
228
- ] extends [true, true] ? [] : [
229
- {
230
- error: "Middleware cannot be attached to this route";
231
- requiredLayouts: TRequiredLayouts;
232
- routeLayoutChain: RouteLayoutChain<Path, TMethod>;
233
- requiredState: TRequiredState;
234
- actualState: RouteResolvedField<Path, TMethod, Acc, "state">;
235
- }
236
- ]): RouteBuilder<Path, TMethod, readonly [...Acc, TAcc], Validators, Omit<TReturns, keyof UReturns> & UReturns, TAppContext>;
237
- use<R = unknown>(fn: (ctx: RouteChainContext<Path, TMethod, Acc, unknown, unknown, unknown, TAppContext>, next: NextFn) => Awaitable<R>): RouteBuilder<Path, TMethod, readonly [...Acc, MiddlewareReturnFromParts<unknown, unknown, unknown, ExtractState<R>>], Validators, TReturns, TAppContext>;
250
+ returns<const M extends ReturnsMap>(map: M): RouteContractBuilder<Path, TMethod, Acc, Validators, Omit<TReturns, keyof M> & M, TAppContext>;
238
251
  handler<R extends Response = Response>(fn: (ctx: TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS" ? RouteHandleContextWithoutBody<Path, TMethod, Acc, Validators, TAppContext> : RouteHandleContext<Path, TMethod, Acc, Validators, TAppContext>) => Awaitable<R>, ..._assert: [R] extends [ValidHandlerReply<R, TReturns>] ? [] : [
239
252
  {
240
253
  expected: ValidHandlerReply<R, TReturns>;
@@ -242,16 +255,40 @@ export type RouteBuilderBase<Path extends RoutePath, TMethod extends Method, Acc
242
255
  }
243
256
  ]): RouteHandleResult<Path, TMethod, Acc, Validators, TReturns, R, TAppContext>;
244
257
  };
245
- export type RouteBuilder<Path extends RoutePath, TMethod extends Method, Acc extends readonly unknown[] = readonly [], Validators extends ValidatorParts = {}, TReturns extends ReturnsMap = {}, TAppContext extends Record<string, unknown> = AppContext> = RouteBuilderBase<Path, TMethod, Acc, Validators, TReturns, TAppContext> & (TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS" ? {} : {
246
- body<TBody, TBodyIn = unknown>(schema: Schema<TBody, TBodyIn>): RouteBuilder<Path, TMethod, Acc, Omit<Validators, "body" | "bodyIn"> & {
258
+ export type RouteContractBuilder<Path extends RoutePath, TMethod extends Method, Acc extends readonly unknown[] = readonly [], Validators extends ValidatorParts = {}, TReturns extends ReturnsMap = {}, TAppContext extends Record<string, unknown> = AppContext> = RouteContractBuilderBase<Path, TMethod, Acc, Validators, TReturns, TAppContext> & (TMethod extends "GET" | "DELETE" | "HEAD" | "OPTIONS" ? {} : {
259
+ body<TBody, TBodyIn = unknown>(schema: Schema<TBody, TBodyIn>): RouteContractBuilder<Path, TMethod, Acc, Omit<Validators, "body" | "bodyIn"> & {
247
260
  body: TBody;
248
261
  bodyIn: TBodyIn;
249
262
  }, TReturns, TAppContext>;
250
- body<Mode extends "json" | "form" | "urlencoded", TBody, TBodyIn = unknown>(mode: Mode, schema: Schema<TBody, TBodyIn>): RouteBuilder<Path, TMethod, Acc, Omit<Validators, "body" | "bodyIn"> & {
263
+ body<Mode extends "json" | "form" | "urlencoded", TBody, TBodyIn = unknown>(mode: Mode, schema: Schema<TBody, TBodyIn>): RouteContractBuilder<Path, TMethod, Acc, Omit<Validators, "body" | "bodyIn"> & {
251
264
  body: TBody;
252
265
  bodyIn: TBodyIn;
253
266
  }, TReturns, TAppContext>;
254
267
  });
268
+ export type RouteMiddlewareBuilder<Path extends RoutePath, TMethod extends Method, Acc extends readonly unknown[] = readonly [], Validators extends ValidatorParts = {}, TReturns extends ReturnsMap = {}, TAppContext extends Record<string, unknown> = AppContext> = RouteContractBuilder<Path, TMethod, Acc, Validators, TReturns, TAppContext> & {
269
+ use<TAcc, UReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequires extends MiddlewareRequirements = {}>(unit: [
270
+ IsLayoutAllowed<TRequiredLayouts, RouteLayoutChain<Path, TMethod>>,
271
+ IsRequirementsSatisfied<{
272
+ query: RouteResolvedField<Path, TMethod, Acc, "query">;
273
+ params: ResolveParams<PathParams<Path>, RouteResolvedField<Path, TMethod, Acc, "params">>;
274
+ body: RouteResolvedField<Path, TMethod, Acc, "body">;
275
+ state: RouteResolvedField<Path, TMethod, Acc, "state">;
276
+ }, TRequires>
277
+ ] extends [true, true] ? MiddlewareUnit<TAcc, UReturns, TRequiredLayouts, TRequires> : {
278
+ error: "Middleware cannot be attached to this route";
279
+ requiredLayouts: TRequiredLayouts;
280
+ routeLayoutChain: RouteLayoutChain<Path, TMethod>;
281
+ requirements: TRequires;
282
+ actual: {
283
+ query: RouteResolvedField<Path, TMethod, Acc, "query">;
284
+ params: ResolveParams<PathParams<Path>, RouteResolvedField<Path, TMethod, Acc, "params">>;
285
+ body: RouteResolvedField<Path, TMethod, Acc, "body">;
286
+ state: RouteResolvedField<Path, TMethod, Acc, "state">;
287
+ };
288
+ }): RouteMiddlewareBuilder<Path, TMethod, readonly [...Acc, TAcc], Validators, Omit<TReturns, keyof UReturns> & UReturns, TAppContext>;
289
+ use<R = unknown>(fn: (ctx: RouteChainContext<Path, TMethod, Acc, unknown, unknown, unknown, TAppContext>, next: NextFn) => Awaitable<R>): RouteMiddlewareBuilder<Path, TMethod, readonly [...Acc, MiddlewareReturnFromParts<unknown, unknown, unknown, ExtractState<R>>], Validators, TReturns, TAppContext>;
290
+ };
291
+ export type RouteBuilder<Path extends RoutePath, TMethod extends Method, Acc extends readonly unknown[] = readonly [], Validators extends ValidatorParts = {}, TReturns extends ReturnsMap = {}, TAppContext extends Record<string, unknown> = AppContext> = RouteMiddlewareBuilder<Path, TMethod, Acc, Validators, TReturns, TAppContext>;
255
292
  export type RouteDefinition<Path extends RoutePath = RoutePath, TMethod extends Method = Method, Acc extends readonly unknown[] = readonly unknown[], Validators extends ValidatorParts = ValidatorParts, TReturns extends ReturnsMap = ReturnsMap, TOutput = Response, TAppContext extends Record<string, unknown> = AppContext> = RouteHandleResult<Path, TMethod, Acc, Validators, TReturns, TOutput, TAppContext>;
256
293
  export type InferRouteContext<R> = R extends {
257
294
  $Infer: {
@@ -37,29 +37,35 @@ export type MiddlewareReturnFromParts<TQuery, TParams, TBody, TState, TQueryIn =
37
37
  body: RequestShape<TBodyIn, TBody>;
38
38
  };
39
39
  };
40
- export type DefineMiddlewareResult<TQuery, TParams, TBody, TState, R, TQueryIn = TQuery, TParamsIn = TParams, TBodyIn = TBody, TReturns extends ReturnsMap = {}, TLayout = null, TRequires = {}> = MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, IsUnknown<TState> extends true ? ExtractState<R> : TState, TQueryIn, TParamsIn, TBodyIn>, TReturns, TLayout, TRequires>;
41
- export type StandaloneMiddlewareContext<TQuery = unknown, TParams = unknown, TBody = unknown, TAppContext extends Record<string, unknown> = EmptyAppContext, TState = {}> = Simplify<TAppContext & UnitRuntimeContext & {
42
- query: Simplify<UnwrapPart<TQuery>>;
43
- params: Simplify<UnwrapPart<TParams>>;
44
- body: Simplify<UnwrapPart<TBody>>;
45
- state: Simplify<UnwrapPart<TState>>;
40
+ export type MiddlewareRequirements = {
41
+ query?: Record<string, unknown>;
42
+ params?: Record<string, unknown>;
43
+ body?: unknown;
44
+ state?: Record<string, unknown>;
45
+ };
46
+ export type DefineMiddlewareResult<TQuery, TParams, TBody, TState, R, TQueryIn = TQuery, TParamsIn = TParams, TBodyIn = TBody, TReturns extends ReturnsMap = {}, TLayout = null, TRequires extends MiddlewareRequirements = {}> = MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, IsUnknown<TState> extends true ? ExtractState<R> : TState, TQueryIn, TParamsIn, TBodyIn>, TReturns, TLayout, TRequires>;
47
+ export type StandaloneMiddlewareContext<TQuery = unknown, TParams = unknown, TBody = unknown, TAppContext extends Record<string, unknown> = EmptyAppContext, TState = {}, TRequires extends MiddlewareRequirements = {}> = Simplify<TAppContext & UnitRuntimeContext & {
48
+ query: Simplify<UnwrapPart<TQuery> & (TRequires["query"] extends Record<string, unknown> ? TRequires["query"] : {})>;
49
+ params: Simplify<UnwrapPart<TParams> & (TRequires["params"] extends Record<string, unknown> ? TRequires["params"] : {})>;
50
+ body: Simplify<UnwrapPart<TBody> & (unknown extends TRequires["body"] ? {} : [TRequires["body"]] extends [undefined] ? {} : TRequires["body"])>;
51
+ state: Simplify<UnwrapPart<TState> & (TRequires["state"] extends Record<string, unknown> ? TRequires["state"] : {})>;
46
52
  headers: TaserHeaders;
47
53
  cookies: TaserCookieJar;
48
54
  }>;
49
55
  export declare const MiddlewareUnitBrand: unique symbol;
50
- export type MiddlewareUnit<TAcc = unknown, TReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequiredState = unknown> = MiddlewareDefinition & {
56
+ export type MiddlewareUnit<TAcc = unknown, TReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequires extends MiddlewareRequirements = {}> = MiddlewareDefinition & {
51
57
  readonly [MiddlewareUnitBrand]: true;
52
58
  readonly __middlewareAcc: TAcc;
53
59
  readonly __returns?: TReturns;
54
60
  readonly __requiredLayouts?: TRequiredLayouts;
55
- readonly __requiredState?: TRequiredState;
61
+ readonly __requirements?: TRequires;
56
62
  };
57
- export type MiddlewareUnitBuilder<TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequiredState = {}, TAppContext extends Record<string, unknown> = EmptyAppContext, TInheritedState = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown, TExpectedState = unknown> = MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, IsUnknown<TExpectedState> extends true ? {} : TExpectedState, TQueryIn, TParamsIn, TBodyIn>, TReturns, TRequiredLayouts, TRequiredState> & {
58
- query<Q, QIn = unknown>(schema: Schema<Q, QIn>): MiddlewareUnitBuilder<Q, TParams, TBody, TReturns, TRequiredLayouts, TRequiredState, TAppContext, TInheritedState, QIn, TParamsIn, TBodyIn, TExpectedState>;
59
- params<P, PIn = unknown>(schema: Schema<P, PIn>): MiddlewareUnitBuilder<TQuery, P, TBody, TReturns, TRequiredLayouts, TRequiredState, TAppContext, TInheritedState, TQueryIn, PIn, TBodyIn, TExpectedState>;
60
- body<B, BIn = unknown>(schema: Schema<B, BIn>): MiddlewareUnitBuilder<TQuery, TParams, B, TReturns, TRequiredLayouts, TRequiredState, TAppContext, TInheritedState, TQueryIn, TParamsIn, BIn, TExpectedState>;
61
- body<Mode extends "json" | "form" | "urlencoded", B, BIn = unknown>(mode: Mode, schema: Schema<B, BIn>): MiddlewareUnitBuilder<TQuery, TParams, B, TReturns, TRequiredLayouts, TRequiredState, TAppContext, TInheritedState, TQueryIn, TParamsIn, BIn, TExpectedState>;
62
- returns<const M extends ReturnsMap>(map: M): MiddlewareUnitBuilder<TQuery, TParams, TBody, Omit<TReturns, keyof M> & M, TRequiredLayouts, TRequiredState, TAppContext, TInheritedState, TQueryIn, TParamsIn, TBodyIn, TExpectedState>;
63
- requires<Requires extends Record<string, unknown>>(): MiddlewareUnitBuilder<TQuery, TParams, TBody, TReturns, TRequiredLayouts, TRequiredState & Requires, TAppContext, TInheritedState, TQueryIn, TParamsIn, TBodyIn, TExpectedState>;
64
- handler<R>(fn: (ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext, TInheritedState & TRequiredState>, next: NextFn<TExpectedState>) => R): DefineMiddlewareResult<TQuery, TParams, TBody, IsUnknown<TExpectedState> extends true ? ExtractState<R> : TExpectedState, R, TQueryIn, TParamsIn, TBodyIn, TReturns, TRequiredLayouts, TRequiredState>;
63
+ export type MiddlewareUnitBuilder<TQuery = unknown, TParams = unknown, TBody = unknown, TReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequires extends MiddlewareRequirements = {}, TAppContext extends Record<string, unknown> = EmptyAppContext, TInheritedState = {}, TQueryIn = unknown, TParamsIn = unknown, TBodyIn = unknown, TExpectedState = unknown> = MiddlewareUnit<MiddlewareReturnFromParts<TQuery, TParams, TBody, IsUnknown<TExpectedState> extends true ? {} : TExpectedState, TQueryIn, TParamsIn, TBodyIn>, TReturns, TRequiredLayouts, TRequires> & {
64
+ query<Q, QIn = unknown>(schema: Schema<Q, QIn>): MiddlewareUnitBuilder<Q, TParams, TBody, TReturns, TRequiredLayouts, TRequires, TAppContext, TInheritedState, QIn, TParamsIn, TBodyIn, TExpectedState>;
65
+ params<P, PIn = unknown>(schema: Schema<P, PIn>): MiddlewareUnitBuilder<TQuery, P, TBody, TReturns, TRequiredLayouts, TRequires, TAppContext, TInheritedState, TQueryIn, PIn, TBodyIn, TExpectedState>;
66
+ body<B, BIn = unknown>(schema: Schema<B, BIn>): MiddlewareUnitBuilder<TQuery, TParams, B, TReturns, TRequiredLayouts, TRequires, TAppContext, TInheritedState, TQueryIn, TParamsIn, BIn, TExpectedState>;
67
+ body<Mode extends "json" | "form" | "urlencoded", B, BIn = unknown>(mode: Mode, schema: Schema<B, BIn>): MiddlewareUnitBuilder<TQuery, TParams, B, TReturns, TRequiredLayouts, TRequires, TAppContext, TInheritedState, TQueryIn, TParamsIn, BIn, TExpectedState>;
68
+ returns<const M extends ReturnsMap>(map: M): MiddlewareUnitBuilder<TQuery, TParams, TBody, Omit<TReturns, keyof M> & M, TRequiredLayouts, TRequires, TAppContext, TInheritedState, TQueryIn, TParamsIn, TBodyIn, TExpectedState>;
69
+ requires<Requires extends MiddlewareRequirements>(): MiddlewareUnitBuilder<TQuery, TParams, TBody, TReturns, TRequiredLayouts, TRequires & Requires, TAppContext, TInheritedState, TQueryIn, TParamsIn, TBodyIn, TExpectedState>;
70
+ handler<R>(fn: (ctx: StandaloneMiddlewareContext<TQuery, TParams, TBody, TAppContext, TInheritedState, TRequires>, next: NextFn<TExpectedState>) => R): DefineMiddlewareResult<TQuery, TParams, TBody, IsUnknown<TExpectedState> extends true ? ExtractState<R> : TExpectedState, R, TQueryIn, TParamsIn, TBodyIn, TReturns, TRequiredLayouts, TRequires>;
65
71
  };
@@ -1,7 +1,7 @@
1
1
  import { AppContext, RouteBuilder, RoutePath } from '../types/index.js';
2
2
  import { HttpMethod } from '../types/units.js';
3
3
  export type CreateWithoutBodyRoute<M extends "GET" | "DELETE" | "OPTIONS" | "HEAD", TAppContext extends Record<string, unknown> = AppContext> = <const Path extends RoutePath>(path: Path) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;
4
- export type CreateWithBodyRoute<M extends "POST" | "PUT" | "PATCH", TAppContext extends Record<string, unknown> = AppContext> = <const Path extends RoutePath>(path: Path) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;
4
+ export type CreateWithBodyRoute<M extends "POST" | "PUT" | "PATCH" | "QUERY", TAppContext extends Record<string, unknown> = AppContext> = <const Path extends RoutePath>(path: Path) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;
5
5
  export type CreateAnyRoute<TAppContext extends Record<string, unknown> = AppContext> = <const Path extends RoutePath, const Methods extends readonly HttpMethod[]>(path: Path, methods: Methods) => RouteBuilder<Path, Methods[number], readonly [], {}, {}, TAppContext>;
6
6
  export type CreateAllRoute<TAppContext extends Record<string, unknown> = AppContext> = <const Path extends RoutePath>(path: Path) => RouteBuilder<Path, HttpMethod, readonly [], {}, {}, TAppContext>;
7
7
  export declare const createGetRoute: CreateWithoutBodyRoute<"GET", import('../index.js').EmptyAppContext>;
@@ -11,5 +11,6 @@ export declare const createHeadRoute: CreateWithoutBodyRoute<"HEAD", import('../
11
11
  export declare const createPostRoute: CreateWithBodyRoute<"POST", import('../index.js').EmptyAppContext>;
12
12
  export declare const createPutRoute: CreateWithBodyRoute<"PUT", import('../index.js').EmptyAppContext>;
13
13
  export declare const createPatchRoute: CreateWithBodyRoute<"PATCH", import('../index.js').EmptyAppContext>;
14
+ export declare const createQueryRoute: CreateWithBodyRoute<"QUERY", import('../index.js').EmptyAppContext>;
14
15
  export declare const createAnyRoute: CreateAnyRoute;
15
16
  export declare const createAllRoute: CreateAllRoute;
@@ -13,9 +13,10 @@ var createHeadRoute = createWithoutBodyRoute("HEAD");
13
13
  var createPostRoute = createWithBodyRoute("POST");
14
14
  var createPutRoute = createWithBodyRoute("PUT");
15
15
  var createPatchRoute = createWithBodyRoute("PATCH");
16
+ var createQueryRoute = createWithBodyRoute("QUERY");
16
17
  var createAnyRoute = ((path, methods) => createRouteBuilder(path, "ANY", methods));
17
18
  var createAllRoute = ((path) => createRouteBuilder(path, "ALL"));
18
19
  //#endregion
19
- export { createAllRoute, createAnyRoute, createDeleteRoute, createGetRoute, createHeadRoute, createOptionsRoute, createPatchRoute, createPostRoute, createPutRoute };
20
+ export { createAllRoute, createAnyRoute, createDeleteRoute, createGetRoute, createHeadRoute, createOptionsRoute, createPatchRoute, createPostRoute, createPutRoute, createQueryRoute };
20
21
 
21
22
  //# sourceMappingURL=factories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"factories.js","names":[],"sources":["../../../src/builder/factories.ts"],"sourcesContent":["import { createRouteBuilder } from \"./route.js\";\nimport type { AppContext, RouteBuilder, RoutePath } from \"../types/index.js\";\nimport type { HttpMethod } from \"../types/units.js\";\n\nexport type CreateWithoutBodyRoute<\n M extends \"GET\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\",\n TAppContext extends Record<string, unknown> = AppContext,\n> = <const Path extends RoutePath>(\n path: Path,\n) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;\n\nexport type CreateWithBodyRoute<\n M extends \"POST\" | \"PUT\" | \"PATCH\",\n TAppContext extends Record<string, unknown> = AppContext,\n> = <const Path extends RoutePath>(\n path: Path,\n) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;\n\nexport type CreateAnyRoute<TAppContext extends Record<string, unknown> = AppContext> = <\n const Path extends RoutePath,\n const Methods extends readonly HttpMethod[],\n>(\n path: Path,\n methods: Methods,\n) => RouteBuilder<Path, Methods[number], readonly [], {}, {}, TAppContext>;\n\nexport type CreateAllRoute<TAppContext extends Record<string, unknown> = AppContext> = <\n const Path extends RoutePath,\n>(\n path: Path,\n) => RouteBuilder<Path, HttpMethod, readonly [], {}, {}, TAppContext>;\n\nfunction createWithoutBodyRoute<M extends \"GET\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\">(\n method: M,\n): CreateWithoutBodyRoute<M> {\n return ((path: string) =>\n createRouteBuilder(path, method)) as unknown as CreateWithoutBodyRoute<M>;\n}\n\nfunction createWithBodyRoute<M extends \"POST\" | \"PUT\" | \"PATCH\">(\n method: M,\n): CreateWithBodyRoute<M> {\n return ((path: string) => createRouteBuilder(path, method)) as unknown as CreateWithBodyRoute<M>;\n}\n\nexport const createGetRoute = createWithoutBodyRoute(\"GET\");\nexport const createDeleteRoute = createWithoutBodyRoute(\"DELETE\");\nexport const createOptionsRoute = createWithoutBodyRoute(\"OPTIONS\");\nexport const createHeadRoute = createWithoutBodyRoute(\"HEAD\");\nexport const createPostRoute = createWithBodyRoute(\"POST\");\nexport const createPutRoute = createWithBodyRoute(\"PUT\");\nexport const createPatchRoute = createWithBodyRoute(\"PATCH\");\n\nexport const createAnyRoute: CreateAnyRoute = ((path: string, methods: readonly HttpMethod[]) =>\n createRouteBuilder(path, \"ANY\", methods)) as unknown as CreateAnyRoute;\n\nexport const createAllRoute: CreateAllRoute = ((path: string) =>\n createRouteBuilder(path, \"ALL\")) as unknown as CreateAllRoute;\n"],"mappings":";;AAgCA,SAAS,uBACP,QAC2B;CAC3B,SAAS,SACP,mBAAmB,MAAM,MAAM;AACnC;AAEA,SAAS,oBACP,QACwB;CACxB,SAAS,SAAiB,mBAAmB,MAAM,MAAM;AAC3D;AAEA,IAAa,iBAAiB,uBAAuB,KAAK;AAC1D,IAAa,oBAAoB,uBAAuB,QAAQ;AAChE,IAAa,qBAAqB,uBAAuB,SAAS;AAClE,IAAa,kBAAkB,uBAAuB,MAAM;AAC5D,IAAa,kBAAkB,oBAAoB,MAAM;AACzD,IAAa,iBAAiB,oBAAoB,KAAK;AACvD,IAAa,mBAAmB,oBAAoB,OAAO;AAE3D,IAAa,mBAAmC,MAAc,YAC5D,mBAAmB,MAAM,OAAO,OAAO;AAEzC,IAAa,mBAAmC,SAC9C,mBAAmB,MAAM,KAAK"}
1
+ {"version":3,"file":"factories.js","names":[],"sources":["../../../src/builder/factories.ts"],"sourcesContent":["import { createRouteBuilder } from \"./route.js\";\nimport type { AppContext, RouteBuilder, RoutePath } from \"../types/index.js\";\nimport type { HttpMethod } from \"../types/units.js\";\n\nexport type CreateWithoutBodyRoute<\n M extends \"GET\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\",\n TAppContext extends Record<string, unknown> = AppContext,\n> = <const Path extends RoutePath>(\n path: Path,\n) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;\n\nexport type CreateWithBodyRoute<\n M extends \"POST\" | \"PUT\" | \"PATCH\" | \"QUERY\",\n TAppContext extends Record<string, unknown> = AppContext,\n> = <const Path extends RoutePath>(\n path: Path,\n) => RouteBuilder<Path, M, readonly [], {}, {}, TAppContext>;\n\nexport type CreateAnyRoute<TAppContext extends Record<string, unknown> = AppContext> = <\n const Path extends RoutePath,\n const Methods extends readonly HttpMethod[],\n>(\n path: Path,\n methods: Methods,\n) => RouteBuilder<Path, Methods[number], readonly [], {}, {}, TAppContext>;\n\nexport type CreateAllRoute<TAppContext extends Record<string, unknown> = AppContext> = <\n const Path extends RoutePath,\n>(\n path: Path,\n) => RouteBuilder<Path, HttpMethod, readonly [], {}, {}, TAppContext>;\n\nfunction createWithoutBodyRoute<M extends \"GET\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\">(\n method: M,\n): CreateWithoutBodyRoute<M> {\n return ((path: string) =>\n createRouteBuilder(path, method)) as unknown as CreateWithoutBodyRoute<M>;\n}\n\nfunction createWithBodyRoute<M extends \"POST\" | \"PUT\" | \"PATCH\" | \"QUERY\">(\n method: M,\n): CreateWithBodyRoute<M> {\n return ((path: string) => createRouteBuilder(path, method)) as unknown as CreateWithBodyRoute<M>;\n}\n\nexport const createGetRoute = createWithoutBodyRoute(\"GET\");\nexport const createDeleteRoute = createWithoutBodyRoute(\"DELETE\");\nexport const createOptionsRoute = createWithoutBodyRoute(\"OPTIONS\");\nexport const createHeadRoute = createWithoutBodyRoute(\"HEAD\");\nexport const createPostRoute = createWithBodyRoute(\"POST\");\nexport const createPutRoute = createWithBodyRoute(\"PUT\");\nexport const createPatchRoute = createWithBodyRoute(\"PATCH\");\nexport const createQueryRoute = createWithBodyRoute(\"QUERY\");\n\nexport const createAnyRoute: CreateAnyRoute = ((path: string, methods: readonly HttpMethod[]) =>\n createRouteBuilder(path, \"ANY\", methods)) as unknown as CreateAnyRoute;\n\nexport const createAllRoute: CreateAllRoute = ((path: string) =>\n createRouteBuilder(path, \"ALL\")) as unknown as CreateAllRoute;\n"],"mappings":";;AAgCA,SAAS,uBACP,QAC2B;CAC3B,SAAS,SACP,mBAAmB,MAAM,MAAM;AACnC;AAEA,SAAS,oBACP,QACwB;CACxB,SAAS,SAAiB,mBAAmB,MAAM,MAAM;AAC3D;AAEA,IAAa,iBAAiB,uBAAuB,KAAK;AAC1D,IAAa,oBAAoB,uBAAuB,QAAQ;AAChE,IAAa,qBAAqB,uBAAuB,SAAS;AAClE,IAAa,kBAAkB,uBAAuB,MAAM;AAC5D,IAAa,kBAAkB,oBAAoB,MAAM;AACzD,IAAa,iBAAiB,oBAAoB,KAAK;AACvD,IAAa,mBAAmB,oBAAoB,OAAO;AAC3D,IAAa,mBAAmB,oBAAoB,OAAO;AAE3D,IAAa,mBAAmC,MAAc,YAC5D,mBAAmB,MAAM,OAAO,OAAO;AAEzC,IAAa,mBAAmC,SAC9C,mBAAmB,MAAM,KAAK"}
@@ -8,6 +8,7 @@ export declare const patch: CreateWithBodyRoute<"PATCH", AppContext>;
8
8
  export declare const del: CreateWithoutBodyRoute<"DELETE", AppContext>;
9
9
  export declare const options: CreateWithoutBodyRoute<"OPTIONS", AppContext>;
10
10
  export declare const head: CreateWithoutBodyRoute<"HEAD", AppContext>;
11
+ export declare const query: CreateWithBodyRoute<"QUERY", AppContext>;
11
12
  export declare const any: CreateAnyRoute<AppContext>;
12
13
  export declare const all: CreateAllRoute<AppContext>;
13
14
  export declare const layout: LayoutBuilder<AppContext>;
@@ -20,6 +21,7 @@ export type TaserNamespace<TAppContext extends Record<string, unknown> = AppCont
20
21
  readonly delete: CreateWithoutBodyRoute<"DELETE", TAppContext>;
21
22
  readonly options: CreateWithoutBodyRoute<"OPTIONS", TAppContext>;
22
23
  readonly head: CreateWithoutBodyRoute<"HEAD", TAppContext>;
24
+ readonly query: CreateWithBodyRoute<"QUERY", TAppContext>;
23
25
  readonly any: CreateAnyRoute<TAppContext>;
24
26
  readonly all: CreateAllRoute<TAppContext>;
25
27
  readonly layout: LayoutBuilder<TAppContext>;
@@ -1,4 +1,4 @@
1
- import { createAllRoute, createAnyRoute, createDeleteRoute, createGetRoute, createHeadRoute, createOptionsRoute, createPatchRoute, createPostRoute, createPutRoute } from "./factories.js";
1
+ import { createAllRoute, createAnyRoute, createDeleteRoute, createGetRoute, createHeadRoute, createOptionsRoute, createPatchRoute, createPostRoute, createPutRoute, createQueryRoute } from "./factories.js";
2
2
  import { createMiddleware } from "./middleware.js";
3
3
  import { middleware as middleware$1 } from "../define/middleware.js";
4
4
  //#region src/builder/standalone.ts
@@ -9,6 +9,7 @@ var patch = createPatchRoute;
9
9
  var del = createDeleteRoute;
10
10
  var options = createOptionsRoute;
11
11
  var head = createHeadRoute;
12
+ var query = createQueryRoute;
12
13
  var any = createAnyRoute;
13
14
  var all = createAllRoute;
14
15
  var layout = createMiddleware;
@@ -21,12 +22,13 @@ var t = {
21
22
  delete: del,
22
23
  options,
23
24
  head,
25
+ query,
24
26
  any,
25
27
  all,
26
28
  layout,
27
29
  middleware
28
30
  };
29
31
  //#endregion
30
- export { all, any, del, get, head, layout, middleware, options, patch, post, put, t };
32
+ export { all, any, del, get, head, layout, middleware, options, patch, post, put, query, t };
31
33
 
32
34
  //# sourceMappingURL=standalone.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standalone.js","names":[],"sources":["../../../src/builder/standalone.ts"],"sourcesContent":["import type { AppContext, LayoutBuilder } from \"../types/index.js\";\nimport {\n createAllRoute,\n createAnyRoute,\n createDeleteRoute,\n createGetRoute,\n createHeadRoute,\n createOptionsRoute,\n createPatchRoute,\n createPostRoute,\n createPutRoute,\n type CreateAllRoute,\n type CreateAnyRoute,\n type CreateWithBodyRoute,\n type CreateWithoutBodyRoute,\n} from \"./factories.js\";\nimport { createMiddleware } from \"./middleware.js\";\nimport { middleware as createMiddlewareFn, type MiddlewareFn } from \"../define/middleware.js\";\n\nexport const get: CreateWithoutBodyRoute<\"GET\", AppContext> =\n createGetRoute as CreateWithoutBodyRoute<\"GET\", AppContext>;\nexport const post: CreateWithBodyRoute<\"POST\", AppContext> = createPostRoute as CreateWithBodyRoute<\n \"POST\",\n AppContext\n>;\nexport const put: CreateWithBodyRoute<\"PUT\", AppContext> = createPutRoute as CreateWithBodyRoute<\n \"PUT\",\n AppContext\n>;\nexport const patch: CreateWithBodyRoute<\"PATCH\", AppContext> =\n createPatchRoute as CreateWithBodyRoute<\"PATCH\", AppContext>;\nexport const del: CreateWithoutBodyRoute<\"DELETE\", AppContext> =\n createDeleteRoute as CreateWithoutBodyRoute<\"DELETE\", AppContext>;\nexport const options: CreateWithoutBodyRoute<\"OPTIONS\", AppContext> =\n createOptionsRoute as CreateWithoutBodyRoute<\"OPTIONS\", AppContext>;\nexport const head: CreateWithoutBodyRoute<\"HEAD\", AppContext> =\n createHeadRoute as CreateWithoutBodyRoute<\"HEAD\", AppContext>;\nexport const any: CreateAnyRoute<AppContext> = createAnyRoute as CreateAnyRoute<AppContext>;\nexport const all: CreateAllRoute<AppContext> = createAllRoute as CreateAllRoute<AppContext>;\n\nexport const layout: LayoutBuilder<AppContext> = createMiddleware as LayoutBuilder<AppContext>;\nexport const middleware: MiddlewareFn<AppContext> = createMiddlewareFn as MiddlewareFn<AppContext>;\n\nexport type TaserNamespace<TAppContext extends Record<string, unknown> = AppContext> = {\n readonly get: CreateWithoutBodyRoute<\"GET\", TAppContext>;\n readonly post: CreateWithBodyRoute<\"POST\", TAppContext>;\n readonly put: CreateWithBodyRoute<\"PUT\", TAppContext>;\n readonly patch: CreateWithBodyRoute<\"PATCH\", TAppContext>;\n readonly delete: CreateWithoutBodyRoute<\"DELETE\", TAppContext>;\n readonly options: CreateWithoutBodyRoute<\"OPTIONS\", TAppContext>;\n readonly head: CreateWithoutBodyRoute<\"HEAD\", TAppContext>;\n readonly any: CreateAnyRoute<TAppContext>;\n readonly all: CreateAllRoute<TAppContext>;\n readonly layout: LayoutBuilder<TAppContext>;\n readonly middleware: MiddlewareFn<TAppContext>;\n};\n\nexport const t: TaserNamespace<AppContext> = {\n get,\n post,\n put,\n patch,\n delete: del,\n options,\n head,\n any,\n all,\n layout,\n middleware,\n};\n"],"mappings":";;;;AAmBA,IAAa,MACX;AACF,IAAa,OAAgD;AAI7D,IAAa,MAA8C;AAI3D,IAAa,QACX;AACF,IAAa,MACX;AACF,IAAa,UACX;AACF,IAAa,OACX;AACF,IAAa,MAAkC;AAC/C,IAAa,MAAkC;AAE/C,IAAa,SAAoC;AACjD,IAAa,aAAuC;AAgBpD,IAAa,IAAgC;CAC3C;CACA;CACA;CACA;CACA,QAAQ;CACR;CACA;CACA;CACA;CACA;CACA;AACF"}
1
+ {"version":3,"file":"standalone.js","names":[],"sources":["../../../src/builder/standalone.ts"],"sourcesContent":["import type { AppContext, LayoutBuilder } from \"../types/index.js\";\nimport {\n createAllRoute,\n createAnyRoute,\n createDeleteRoute,\n createGetRoute,\n createHeadRoute,\n createOptionsRoute,\n createPatchRoute,\n createPostRoute,\n createPutRoute,\n createQueryRoute,\n type CreateAllRoute,\n type CreateAnyRoute,\n type CreateWithBodyRoute,\n type CreateWithoutBodyRoute,\n} from \"./factories.js\";\nimport { createMiddleware } from \"./middleware.js\";\nimport { middleware as createMiddlewareFn, type MiddlewareFn } from \"../define/middleware.js\";\n\nexport const get: CreateWithoutBodyRoute<\"GET\", AppContext> =\n createGetRoute as CreateWithoutBodyRoute<\"GET\", AppContext>;\nexport const post: CreateWithBodyRoute<\"POST\", AppContext> = createPostRoute as CreateWithBodyRoute<\n \"POST\",\n AppContext\n>;\nexport const put: CreateWithBodyRoute<\"PUT\", AppContext> = createPutRoute as CreateWithBodyRoute<\n \"PUT\",\n AppContext\n>;\nexport const patch: CreateWithBodyRoute<\"PATCH\", AppContext> =\n createPatchRoute as CreateWithBodyRoute<\"PATCH\", AppContext>;\nexport const del: CreateWithoutBodyRoute<\"DELETE\", AppContext> =\n createDeleteRoute as CreateWithoutBodyRoute<\"DELETE\", AppContext>;\nexport const options: CreateWithoutBodyRoute<\"OPTIONS\", AppContext> =\n createOptionsRoute as CreateWithoutBodyRoute<\"OPTIONS\", AppContext>;\nexport const head: CreateWithoutBodyRoute<\"HEAD\", AppContext> =\n createHeadRoute as CreateWithoutBodyRoute<\"HEAD\", AppContext>;\nexport const query: CreateWithBodyRoute<\"QUERY\", AppContext> =\n createQueryRoute as CreateWithBodyRoute<\"QUERY\", AppContext>;\nexport const any: CreateAnyRoute<AppContext> = createAnyRoute as CreateAnyRoute<AppContext>;\nexport const all: CreateAllRoute<AppContext> = createAllRoute as CreateAllRoute<AppContext>;\n\nexport const layout: LayoutBuilder<AppContext> = createMiddleware as LayoutBuilder<AppContext>;\nexport const middleware: MiddlewareFn<AppContext> = createMiddlewareFn as MiddlewareFn<AppContext>;\n\nexport type TaserNamespace<TAppContext extends Record<string, unknown> = AppContext> = {\n readonly get: CreateWithoutBodyRoute<\"GET\", TAppContext>;\n readonly post: CreateWithBodyRoute<\"POST\", TAppContext>;\n readonly put: CreateWithBodyRoute<\"PUT\", TAppContext>;\n readonly patch: CreateWithBodyRoute<\"PATCH\", TAppContext>;\n readonly delete: CreateWithoutBodyRoute<\"DELETE\", TAppContext>;\n readonly options: CreateWithoutBodyRoute<\"OPTIONS\", TAppContext>;\n readonly head: CreateWithoutBodyRoute<\"HEAD\", TAppContext>;\n readonly query: CreateWithBodyRoute<\"QUERY\", TAppContext>;\n readonly any: CreateAnyRoute<TAppContext>;\n readonly all: CreateAllRoute<TAppContext>;\n readonly layout: LayoutBuilder<TAppContext>;\n readonly middleware: MiddlewareFn<TAppContext>;\n};\n\nexport const t: TaserNamespace<AppContext> = {\n get,\n post,\n put,\n patch,\n delete: del,\n options,\n head,\n query,\n any,\n all,\n layout,\n middleware,\n};\n"],"mappings":";;;;AAoBA,IAAa,MACX;AACF,IAAa,OAAgD;AAI7D,IAAa,MAA8C;AAI3D,IAAa,QACX;AACF,IAAa,MACX;AACF,IAAa,UACX;AACF,IAAa,OACX;AACF,IAAa,QACX;AACF,IAAa,MAAkC;AAC/C,IAAa,MAAkC;AAE/C,IAAa,SAAoC;AACjD,IAAa,aAAuC;AAiBpD,IAAa,IAAgC;CAC3C;CACA;CACA;CACA;CACA,QAAQ;CACR;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
@@ -1,4 +1,4 @@
1
- import { DefineMiddlewareResult, ExtractState, IsUnknown, MiddlewareUnitBuilder, NextFn, StandaloneMiddlewareContext } from '../types/units.js';
1
+ import { DefineMiddlewareResult, ExtractState, IsUnknown, MiddlewareRequirements, MiddlewareUnitBuilder, NextFn, StandaloneMiddlewareContext } from '../types/units.js';
2
2
  import { AppContext, LayoutId, ResolveLayoutMiddlewaresState, ResolveLayoutsState } from '../types/index.js';
3
3
  export interface MiddlewareFn<TAppContext extends Record<string, unknown> = AppContext> {
4
4
  /**
@@ -25,11 +25,11 @@ export interface MiddlewareFn<TAppContext extends Record<string, unknown> = AppC
25
25
  /**
26
26
  * Defines a standalone middleware scoped to a single layout branch using a short function signature.
27
27
  */
28
- <const Layout extends LayoutId, TState = unknown, TRequires = {}, R = unknown>(layout: Layout, fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, ResolveLayoutMiddlewaresState<Layout> & TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, Layout, TRequires>;
28
+ <const Layout extends LayoutId, TState = unknown, TRequires extends MiddlewareRequirements = {}, R = unknown>(layout: Layout, fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, ResolveLayoutMiddlewaresState<Layout>, TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, Layout, TRequires>;
29
29
  /**
30
30
  * Defines a standalone middleware scoped to multiple layout branches using a short function signature.
31
31
  */
32
- <const Layouts extends readonly [LayoutId, ...LayoutId[]], TState = unknown, TRequires = {}, R = unknown>(layouts: Layouts, fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, ResolveLayoutsState<Layouts> & TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, Layouts, TRequires>;
32
+ <const Layouts extends readonly [LayoutId, ...LayoutId[]], TState = unknown, TRequires extends MiddlewareRequirements = {}, R = unknown>(layouts: Layouts, fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, ResolveLayoutsState<Layouts>, TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, Layouts, TRequires>;
33
33
  /**
34
34
  * Defines a standalone, unscoped middleware using a short function signature.
35
35
  *
@@ -40,6 +40,6 @@ export interface MiddlewareFn<TAppContext extends Record<string, unknown> = AppC
40
40
  * });
41
41
  * ```
42
42
  */
43
- <TState = unknown, TRequires = {}, R = unknown>(fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, null, TRequires>;
43
+ <TState = unknown, TRequires extends MiddlewareRequirements = {}, R = unknown>(fn: (ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, {}, TRequires>, next: NextFn<NoInfer<TState>>) => R): DefineMiddlewareResult<unknown, unknown, unknown, IsUnknown<TState> extends true ? ExtractState<R> : TState, R, unknown, unknown, unknown, {}, null, TRequires>;
44
44
  }
45
45
  export declare const middleware: MiddlewareFn<AppContext>;